KETCube
ketCube_terminal_common.h
Go to the documentation of this file.
1 
45 /* Define to prevent recursive inclusion -------------------------------------*/
46 #ifndef __KETCUBE_TERMINAL_COMMON_H
47 #define __KETCUBE_TERMINAL_COMMON_H
48 
49 #include <stdlib.h>
50 #include <string.h>
51 #include "ketCube_common.h"
52 #include "ketCube_cfg.h"
53 #include "ketCube_module_id.h"
54 
62 
70 
71  // remote terminal-related return codes
79 
84  /* Record groups */
85  bool isGroup:1;
86 
87  /* Command origin */
88  bool isLocal:1;
89  bool isRemote:1;
90 
91  /* Command type */
92  bool isEnvCmd:1;
93  bool isSetCmd:1;
94  bool isShowCmd:1;
95 
96  /* Storage region -- for SET/SHOW commands */
97  bool isEEPROM:1;
98  bool isRAM:1;
99 
100  /* Command specifier */
101  bool isGeneric:1;
103 
115 static inline void ketCube_terminal_andCmdFlags(
119 {
120  out->isGroup = in1->isGroup && in2->isGroup;
121 
122  out->isLocal = in1->isLocal && in2->isLocal;
123  out->isRemote = in1->isRemote && in2->isRemote;
124 
125  out->isEnvCmd = in1->isEnvCmd && in2->isEnvCmd;
126  out->isSetCmd = in1->isSetCmd && in2->isSetCmd;
127  out->isShowCmd = in1->isShowCmd && in2->isShowCmd;
128 
129  out->isEEPROM = in1->isEEPROM && in2->isEEPROM;
130  out->isRAM = in1->isRAM && in2->isRAM;
131 
132  out->isGeneric = in1->isGeneric && in2->isGeneric;
133 }
134 
144 
159 
160 /* Maximum length of string returned by command */
161 #define KETCUBE_TERMINAL_PARAM_STR_MAX_LENGTH 64
162 #define KETCUBE_TERMINAL_PARAM_BYTE_ARRAY_MAX_LENGTH 32
163 
164 #pragma pack(push, 1)
165 
170  /* KETCUBE_TERMINAL_PARAMS_BOOLEAN */
171  bool as_bool;
172  /* KETCUBE_TERMINAL_PARAMS_BYTE */
173  uint8_t as_byte;
174  /* KETCUBE_TERMINAL_PARAMS_MODULEID */
175  struct {
176  uint16_t module_id;
179  /* KETCUBE_TERMINAL_PARAMS_INT32 */
180  int as_int32;
181  /* KETCUBE_TERMINAL_PARAMS_UINT32 */
183  /* KETCUBE_TERMINAL_PARAMS_STRING */
185  /* KETCUBE_TERMINAL_PARAMS_INT32_PAIR */
186  struct {
187  int first;
188  int second;
190  struct {
192  uint16_t length;
195 
200  uint8_t opcode : 2; // 2 bit opcode
201  uint8_t is_16b_moduleid : 1; // flag - is moduleid 16 bit?
202  uint8_t rfu : 1; // flag - RFU
203  uint8_t seq : 4; // sequence number (4 bits)
204  uint8_t coreApiVersion; // core API version (always 8bit)
206 
211  union {
212  uint8_t moduleId_8bit; // 8bit module ID
213  uint16_t moduleId_16bit; // 16bit module ID
214  } module_id; // length determined by common header is_16b_moduleid flag
216 
222  uint8_t length; // length of batch block (single cmd)
224  // batch command always comprises a single cmd
226 
227 #pragma pack(pop)
228 
237 
247 {
248  switch (type)
249  {
251  default:
252  return 0;
260  return 1;
262  return 2;
263  }
264 }
265 
266 
272 {
273  switch (type)
274  {
276  default:
277  return 0;
279  return sizeof(bool);
281  return sizeof(uint8_t);
283  return sizeof(uint16_t) + 1;
285  return 1; /* at least null terminator */
287  return sizeof(int32_t);
289  return sizeof(uint32_t);
291  return (2 * sizeof(int));
293  return 0;
294  }
295 }
296 
302 {
304 
305  switch (type)
306  {
307  default:
308  return len;
310  return (int)strlen(commandIOParams.as_string);
313  }
314 }
315 
319 typedef struct ketCube_terminal_cmd_t {
320  char * cmd;
321  char * descr;
325  union
326  {
327  void (*callback) (void);
331  ketCube_moduleID_t moduleId;
333 
335 
343  ketCube_terminal_cmd_t * cmdList,
344  ketCube_terminal_command_flags_t * contextFlags);
345 
347  ketCube_terminal_cmd_t* command, bool local);
350 
353 
358 #endif
ketCube_terminal_cmd_t::settingsPtr
union ketCube_terminal_cmd_t::@6 settingsPtr
Command settings - depends on flags.
ketCube_terminal_cmd_t::subCmdList
struct ketCube_terminal_cmd_t * subCmdList
Ptr to a subcommand list (if this is root command)
Definition: ketCube_terminal_common.h:328
KETCUBE_TERMINAL_CMD_ERR_INVALID_PARAMS
@ KETCUBE_TERMINAL_CMD_ERR_INVALID_PARAMS
Definition: ketCube_terminal_common.h:68
ketCube_remoteTerminal_single_cmd_header_t
KETCube terminal single command packet header.
Definition: ketCube_terminal_common.h:210
ketCube_terminal_command_flags_t::isShowCmd
bool isShowCmd
this command is a SHOW command
Definition: ketCube_terminal_common.h:94
ketCube_remoteTerminal_packet_header_t::seq
uint8_t seq
Definition: ketCube_terminal_common.h:203
ketCube_terminal_commands
ketCube_terminal_cmd_t ketCube_terminal_commands[]
KETCube root terminal commands.
Definition: ketCube_cmdList.c:199
KETCUBE_CMD_CHECK_FAILED_CONTEXT_ONLY_LOCAL
@ KETCUBE_CMD_CHECK_FAILED_CONTEXT_ONLY_LOCAL
Definition: ketCube_terminal_common.h:141
ketCube_terminal_command_flags_t::isLocal
bool isLocal
this command can be executed from local terminal
Definition: ketCube_terminal_common.h:88
ketCube_terminal_command_flags_t
KETCube terminal command flags.
Definition: ketCube_terminal_common.h:83
ketCube_terminal_command_errorCode_t
ketCube_terminal_command_errorCode_t
KETCube terminal command possible error codes.
Definition: ketCube_terminal_common.h:66
ketCube_remoteTerminal_packet_header_t
struct ketCube_remoteTerminal_packet_header_t ketCube_remoteTerminal_packet_header_t
KETCube terminal packet header (common)
KETCUBE_TERMINAL_CMD_ERR_MEMORY_IO_FAIL
@ KETCUBE_TERMINAL_CMD_ERR_MEMORY_IO_FAIL
Definition: ketCube_terminal_common.h:69
ketCube_remoteTerminal_packet_header_t
KETCube terminal packet header (common)
Definition: ketCube_terminal_common.h:199
ketCube_terminal_checkCmdSubtreeContext
bool ketCube_terminal_checkCmdSubtreeContext(ketCube_terminal_command_flags_t *flags)
Check if the command definition is valid in given subtree context.
Definition: ketCube_terminal_common.c:402
ketCube_terminal_checkCmdContext
ketCube_terminal_cmdCheckResult_t ketCube_terminal_checkCmdContext(ketCube_terminal_cmd_t *command, bool local)
Check if we can run given command in given context.
Definition: ketCube_terminal_common.c:425
ketCube_terminal_paramSet_t
KETCube terminal command parameter container.
Definition: ketCube_terminal_common.h:169
ketCube_terminal_command_flags_t::isEEPROM
bool isEEPROM
this command modifies EEPROM variables
Definition: ketCube_terminal_common.h:97
ketCube_terminal_paramSet_t::as_string
char as_string[KETCUBE_TERMINAL_PARAM_STR_MAX_LENGTH]
Definition: ketCube_terminal_common.h:184
ketCube_remoteTerminal_packet_header_t::is_16b_moduleid
uint8_t is_16b_moduleid
Definition: ketCube_terminal_common.h:201
ketCube_remoteTerminal_single_cmd_header_t
struct ketCube_remoteTerminal_single_cmd_header_t ketCube_remoteTerminal_single_cmd_header_t
KETCube terminal single command packet header.
ketCube_terminal_paramSet_t::data
byte data[KETCUBE_TERMINAL_PARAM_BYTE_ARRAY_MAX_LENGTH]
Definition: ketCube_terminal_common.h:191
ketCube_terminal_paramSet_t
union ketCube_terminal_paramSet_t ketCube_terminal_paramSet_t
KETCube terminal command parameter container.
ketCube_terminal_cmd_t::paramSetType
ketCube_terminal_paramSet_type_t paramSetType
cmd input parameter type
Definition: ketCube_terminal_common.h:324
KETCUBE_CMD_CHECK_FAILED_CONTEXT_ONLY_REMOTE
@ KETCUBE_CMD_CHECK_FAILED_CONTEXT_ONLY_REMOTE
Definition: ketCube_terminal_common.h:142
KETCUBE_TERMINAL_CMD_ERR_OK
@ KETCUBE_TERMINAL_CMD_ERR_OK
Definition: ketCube_terminal_common.h:67
commandErrorCode
ketCube_terminal_command_errorCode_t commandErrorCode
Definition: ketCube_terminal_common.c:71
ketCube_terminal_paramSet_t::as_module_id
struct ketCube_terminal_paramSet_t::@2 as_module_id
ketCube_terminal_paramSet_t::second
int second
Definition: ketCube_terminal_common.h:188
ketCube_terminal_command_flags_t::isSetCmd
bool isSetCmd
this command is a SET command
Definition: ketCube_terminal_common.h:93
ketCube_remoteTerminal_batch_cmd_header_t::length
uint8_t length
Definition: ketCube_terminal_common.h:222
KETCUBE_TERMINAL_PARAMS_INT32
@ KETCUBE_TERMINAL_PARAMS_INT32
Definition: ketCube_terminal_common.h:154
KETCUBE_TERMINAL_CMD_ERR_UNSPECIFIED_ERROR
@ KETCUBE_TERMINAL_CMD_ERR_UNSPECIFIED_ERROR
Definition: ketCube_terminal_common.h:75
KETCUBE_TERMINAL_OPCODE_CMD
@ KETCUBE_TERMINAL_OPCODE_CMD
Definition: ketCube_terminal_common.h:59
KETCUBE_TERMINAL_PARAMS_INT32_PAIR
@ KETCUBE_TERMINAL_PARAMS_INT32_PAIR
Definition: ketCube_terminal_common.h:156
ketCube_terminal_paramSet_t::as_byte_array
struct ketCube_terminal_paramSet_t::@4 as_byte_array
ketCube_terminal_paramSet_t::module_id
uint16_t module_id
Definition: ketCube_terminal_common.h:176
ketCube_terminal_cmdCheckResult_t
ketCube_terminal_cmdCheckResult_t
KETCube command "before execution" check outcomes enum.
Definition: ketCube_terminal_common.h:138
ketCube_terminal_paramSet_t::as_byte
uint8_t as_byte
Definition: ketCube_terminal_common.h:173
ketCube_terminal_cmd_t::flags
ketCube_terminal_command_flags_t flags
command flags
Definition: ketCube_terminal_common.h:322
KETCUBE_TERMINAL_PARAMS_UINT32
@ KETCUBE_TERMINAL_PARAMS_UINT32
Definition: ketCube_terminal_common.h:155
ketCube_terminal_printCmdList
void ketCube_terminal_printCmdList(ketCube_terminal_cmd_t *parent, ketCube_terminal_cmd_t *cmdList, ketCube_terminal_command_flags_t *contextFlags)
Prints command list at index/level.
Definition: ketCube_terminal_common.c:85
KETCUBE_CMD_CHECK_OK
@ KETCUBE_CMD_CHECK_OK
Definition: ketCube_terminal_common.h:139
ketCube_terminal_GetIOParamsLength
static int ketCube_terminal_GetIOParamsLength(ketCube_terminal_paramSet_type_t type)
Returns parameter length in bytes.
Definition: ketCube_terminal_common.h:300
ketCube_remoteTerminal_batch_cmd_header_t::cmdHeader
ketCube_remoteTerminal_single_cmd_header_t cmdHeader
Definition: ketCube_terminal_common.h:223
KETCUBE_TERMINAL_PARAMS_BYTE_ARRAY
@ KETCUBE_TERMINAL_PARAMS_BYTE_ARRAY
Definition: ketCube_terminal_common.h:157
KETCUBE_TERMINAL_PARAMS_MODULEID
@ KETCUBE_TERMINAL_PARAMS_MODULEID
Definition: ketCube_terminal_common.h:153
ketCube_terminal_paramSet_type_t
ketCube_terminal_paramSet_type_t
KETCube terminal command parameter type definitions.
Definition: ketCube_terminal_common.h:148
ketCube_terminal_andCmdFlags
static void ketCube_terminal_andCmdFlags(ketCube_terminal_command_flags_t *out, ketCube_terminal_command_flags_t *in1, ketCube_terminal_command_flags_t *in2)
Returns and of flag(s) AND.
Definition: ketCube_terminal_common.h:115
KETCUBE_TERMINAL_PARAMS_NONE
@ KETCUBE_TERMINAL_PARAMS_NONE
Definition: ketCube_terminal_common.h:149
KETCUBE_TERMINAL_PARAMS_STRING
@ KETCUBE_TERMINAL_PARAMS_STRING
Definition: ketCube_terminal_common.h:151
ketCube_remoteTerminal_packet_header_t::coreApiVersion
uint8_t coreApiVersion
Definition: ketCube_terminal_common.h:204
ketCube_terminal_command_flags_t::isGeneric
bool isGeneric
this command is a Generic command
Definition: ketCube_terminal_common.h:101
KETCUBE_TERMINAL_CMD_ERR_CORE_API_MISMATCH
@ KETCUBE_TERMINAL_CMD_ERR_CORE_API_MISMATCH
Definition: ketCube_terminal_common.h:77
ketCube_terminal_cmd_t::cmd
char * cmd
command format
Definition: ketCube_terminal_common.h:320
ketCube_terminal_paramSet_t::first
int first
Definition: ketCube_terminal_common.h:187
ketCube_terminal_command_flags_t::isEnvCmd
bool isEnvCmd
this command is a ENV command
Definition: ketCube_terminal_common.h:92
KETCUBE_TERMINAL_OPCODE_BATCH
@ KETCUBE_TERMINAL_OPCODE_BATCH
Definition: ketCube_terminal_common.h:60
ketCube_common.h
KETCube common definitions.
ketCube_remoteTerminal_single_cmd_header_t::module_id
union ketCube_remoteTerminal_single_cmd_header_t::@5 module_id
ketCube_terminal_ParamSetTypeToCount
static int ketCube_terminal_ParamSetTypeToCount(ketCube_terminal_paramSet_type_t type)
Returns parameter count based on param set type.
Definition: ketCube_terminal_common.h:245
ketCube_cfg_varDescr_t
KETCube configuration variable descriptor.
Definition: ketCube_cfg.h:156
KETCUBE_TERMINAL_PARAMS_BYTE
@ KETCUBE_TERMINAL_PARAMS_BYTE
Definition: ketCube_terminal_common.h:152
ketCube_terminal_command_flags_t::isGroup
bool isGroup
this record is command group (has subcommands, does not have handler)
Definition: ketCube_terminal_common.h:85
ketCube_remoteTerminal_single_cmd_header_t::moduleId_16bit
uint16_t moduleId_16bit
Definition: ketCube_terminal_common.h:213
commandIOParams
ketCube_terminal_paramSet_t commandIOParams
Definition: ketCube_terminal_common.c:70
ketCube_remoteTerminal_batch_cmd_header_t
struct ketCube_remoteTerminal_batch_cmd_header_t ketCube_remoteTerminal_batch_cmd_header_t
KETCube terminal batch command packet header (header of each command in batch)
ketCube_terminal_cmd_t
struct ketCube_terminal_cmd_t ketCube_terminal_cmd_t
KETCube terminal command definition.
ketCube_terminal_cmd_t::cfgVarPtr
struct ketCube_cfg_varDescr_t * cfgVarPtr
The configuration variable descriptor - RAM/EEPROM (use for generic commands)
Definition: ketCube_terminal_common.h:329
ketCube_terminal_cmd_t::descr
char * descr
Human-readable command description/help.
Definition: ketCube_terminal_common.h:321
ketCube_remoteTerminal_batch_cmd_header_t
KETCube terminal batch command packet header (header of each command in batch)
Definition: ketCube_terminal_common.h:221
ketCube_terminal_paramSet_t::length
uint16_t length
Definition: ketCube_terminal_common.h:192
KETCUBE_TERMINAL_CMD_ERR_NOT_SUPPORTED
@ KETCUBE_TERMINAL_CMD_ERR_NOT_SUPPORTED
Definition: ketCube_terminal_common.h:76
KETCUBE_TERMINAL_PARAMS_BOOLEAN
@ KETCUBE_TERMINAL_PARAMS_BOOLEAN
Definition: ketCube_terminal_common.h:150
ketCube_remoteTerminal_packet_header_t::rfu
uint8_t rfu
Definition: ketCube_terminal_common.h:202
ketCube_terminal_cmd_t::moduleId
ketCube_moduleID_t moduleId
Definition: ketCube_terminal_common.h:331
ketCube_terminal_paramSet_t::as_uint32
int as_uint32
Definition: ketCube_terminal_common.h:182
KETCUBE_TERMINAL_CMD_ERR_COMMAND_NOT_FOUND
@ KETCUBE_TERMINAL_CMD_ERR_COMMAND_NOT_FOUND
Definition: ketCube_terminal_common.h:72
KETCUBE_TERMINAL_CMD_ERR_MODULE_NOT_FOUND
@ KETCUBE_TERMINAL_CMD_ERR_MODULE_NOT_FOUND
Definition: ketCube_terminal_common.h:73
ketCube_severity_t
ketCube_severity_t
KETCube debug severity definition.
Definition: ketCube_cfg.h:125
ketCube_terminal_command_flags_t
struct ketCube_terminal_command_flags_t ketCube_terminal_command_flags_t
KETCube terminal command flags.
ketCube_terminal_paramSet_t::as_int32
int as_int32
Definition: ketCube_terminal_common.h:180
KETCUBE_TERMINAL_CMD_ERR_FAILED_CONTEXT
@ KETCUBE_TERMINAL_CMD_ERR_FAILED_CONTEXT
Definition: ketCube_terminal_common.h:74
ketCube_remoteTerminal_packet_header_t::opcode
uint8_t opcode
Definition: ketCube_terminal_common.h:200
ketCube_terminal_paramSet_t::as_bool
bool as_bool
Definition: ketCube_terminal_common.h:171
ketCube_terminal_GetIOParamsMinStaticLength
static int ketCube_terminal_GetIOParamsMinStaticLength(ketCube_terminal_paramSet_type_t type)
Returns parameter length in bytes.
Definition: ketCube_terminal_common.h:270
ketCube_cfg.h
This file contains definitions for the KETCube configuration.
ketCube_terminal_command_flags_t::isRemote
bool isRemote
this command can be executed from remote terminal
Definition: ketCube_terminal_common.h:89
ketCube_terminal_paramSet_t::as_int32_pair
struct ketCube_terminal_paramSet_t::@3 as_int32_pair
KETCUBE_TERMINAL_PARAM_BYTE_ARRAY_MAX_LENGTH
#define KETCUBE_TERMINAL_PARAM_BYTE_ARRAY_MAX_LENGTH
Definition: ketCube_terminal_common.h:162
ketCube_terminal_execute
void ketCube_terminal_execute(ketCube_terminal_cmd_t *cmd, ketCube_terminal_command_flags_t activeFlags)
Definition: ketCube_terminal_common.c:584
ketCube_terminal_cmd_t::outputSetType
ketCube_terminal_paramSet_type_t outputSetType
cmd output parameter type
Definition: ketCube_terminal_common.h:323
ketCube_terminal_paramSet_t::severity
ketCube_severity_t severity
Definition: ketCube_terminal_common.h:177
ketCube_terminal_command_flags_t::isRAM
bool isRAM
this command modifies RAM variables
Definition: ketCube_terminal_common.h:98
ketCube_terminal_cmd_t
KETCube terminal command definition.
Definition: ketCube_terminal_common.h:319
KETCUBE_CMD_CHECK_FAILED_DEFINITION
@ KETCUBE_CMD_CHECK_FAILED_DEFINITION
Definition: ketCube_terminal_common.h:140
ketCube_terminal_cmd_t::callback
void(* callback)(void)
Ptr to a custom callback.
Definition: ketCube_terminal_common.h:327
ketCube_terminal_command_opcode_t
ketCube_terminal_command_opcode_t
Terminal opcodes.
Definition: ketCube_terminal_common.h:58
ketCube_remoteTerminal_single_cmd_header_t::moduleId_8bit
uint8_t moduleId_8bit
Definition: ketCube_terminal_common.h:212
KETCUBE_TERMINAL_PARAM_STR_MAX_LENGTH
#define KETCUBE_TERMINAL_PARAM_STR_MAX_LENGTH
Definition: ketCube_terminal_common.h:161