[tuxdroid-svn] r1097 - software_suite_v2/middleware/tuxdriver/trunk/src
Status: Beta
Brought to you by:
ks156
From: eFfeM <c2m...@c2...> - 2008-05-04 10:39:12
|
Author: eFfeM Date: 2008-05-04 12:39:10 +0200 (Sun, 04 May 2008) New Revision: 1097 Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_cmd_parser.c software_suite_v2/middleware/tuxdriver/trunk/src/tux_types.h Log: updating the parser code work in progress (but still fully functional) Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_cmd_parser.c =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_cmd_parser.c 2008-05-03 13:10:10 UTC (rev 1096) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_cmd_parser.c 2008-05-04 10:39:10 UTC (rev 1097) @@ -41,7 +41,6 @@ #include "tux_user_inputs.h" #include "tux_wings.h" -#define CMDSIZE 1024 #define NRCMDS 256 @@ -51,11 +50,6 @@ return E_TUXDRV_INVALIDPARAMETER; typedef struct { - double timeout; - char cmd[CMDSIZE]; -} delay_cmd_t; - -typedef struct { delay_cmd_t cmd_list[NRCMDS]; int cmd_count; } cmd_stack_t; @@ -777,7 +771,218 @@ return E_TUXDRV_INVALIDCOMMAND; } +/* +WORK IN PROGRESS +idea is to parse a command when it is inserted and put it in the queue only if +it is a valid command +when executing the command does not need to be parsed any more but can be +executed directly +*/ + /** + * + */ +static TuxDrvError +parse_tux_audio_command(const char *cmd_str, delay_cmd_t *cmd) +{ + TuxDrvError ret = E_TUXDRV_INVALIDCOMMAND; + char *p; + int len; + + return ret; +} + +/** + * + */ +static TuxDrvError +parse_tux_eyes_command(const char *cmd_str, delay_cmd_t *cmd) +{ + TuxDrvError ret = E_TUXDRV_INVALIDCOMMAND; + char *p; + int len; + + return ret; +} + +/** + * + */ +static TuxDrvError +parse_tux_ir_command(const char *cmd_str, delay_cmd_t *cmd) +{ + TuxDrvError ret = E_TUXDRV_INVALIDCOMMAND; + char *p; + int len; + + return ret; +} + +/** + * + */ +static TuxDrvError +parse_tux_led_command(const char *cmd_str, delay_cmd_t *cmd) +{ + TuxDrvError ret = E_TUXDRV_INVALIDCOMMAND; + char *p; + int len; + + return ret; +} + +/** + * + */ +static TuxDrvError +parse_tux_mouth_command(const char *cmd_str, delay_cmd_t *cmd) +{ + TuxDrvError ret = E_TUXDRV_INVALIDCOMMAND; + char *p; + int len; + + return ret; +} + +/** + * + */ +static TuxDrvError +parse_tux_sound_flash_command(const char *cmd_str, delay_cmd_t *cmd) +{ + TuxDrvError ret = E_TUXDRV_INVALIDCOMMAND; + char *p; + int len; + + return ret; +} + +/** + * + */ +static TuxDrvError +parse_tux_spinning_command(const char *cmd_str, delay_cmd_t *cmd) +{ + TuxDrvError ret = E_TUXDRV_INVALIDCOMMAND; + char *p; + int len; + + return ret; +} + +/** + * + */ +static TuxDrvError +parse_tux_wings_command(const char *cmd_str, delay_cmd_t *cmd) +{ + TuxDrvError ret = E_TUXDRV_INVALIDCOMMAND; + char *p; + int len; + + return ret; +} + +/** + * + */ +static TuxDrvError +parse_tux_command(const char *cmd_str, delay_cmd_t *cmd) +{ + TuxDrvError ret = E_TUXDRV_INVALIDCOMMAND; + char *p; + int len; + + p = strchr(cmd_str, ':'); + len = p - cmd_str; + + if (strncmp(cmd_str, "AUDIO", len) == 0) + { + cmd->command = AUDIO; + ret = parse_tux_audio_command(p, cmd); + } + else if (strncmp(cmd_str, "EYES", len) == 0) + { + cmd->command = EYES; + ret = parse_tux_eyes_command(p, cmd); + } + else if (strncmp(cmd_str, "IR", len) == 0) + { + cmd->command = IR; + ret = parse_tux_ir_command(p, cmd); + } + else if (strncmp(cmd_str, "LED", len) == 0) + { + cmd->command = LED; + ret = parse_tux_led_command(p, cmd); + } + else if (strncmp(cmd_str, "MOUTH", len) == 0) + { + cmd->command = MOUTH; + ret = parse_tux_mouth_command(p, cmd); + } + else if (strncmp(cmd_str, "SOUND_FLASH", len) == 0) + { + cmd->command = SOUND_FLASH; + ret = parse_tux_sound_flash_command(p, cmd); + } + else if (strncmp(cmd_str, "SPINNING", len) == 0) + { + cmd->command = SPINNING; + ret = parse_tux_spinning_command(p, cmd); + } + else if (strncmp(cmd_str, "WINGS", len) == 0) + { + cmd->command = WINGS; + ret = parse_tux_wings_command(p, cmd); + } + return ret; +} + +/** + * + */ +static TuxDrvError +parse_raw_command(const char *cmd_str, delay_cmd_t *cmd) +{ + TuxDrvError ret = E_TUXDRV_INVALIDCOMMAND; +/* + char *p; + int len; + + p = strchr(cmd_str, ':'); + len = p - cmd_str; +*/ + ret = E_TUXDRV_NOERROR; + return ret; +} + +/** + * + */ +static TuxDrvError +parse_command(const char *cmd_str, delay_cmd_t *cmd) +{ + TuxDrvError ret = E_TUXDRV_INVALIDCOMMAND; + char *p; + int len; + + p = strchr(cmd_str, ':'); + len = p - cmd_str; + if (strncmp(cmd_str, "TUX_CMD", len) == 0) + { + cmd->command_group = TUX_CMD; + ret = parse_tux_command(p, cmd); + } + else if (strncmp(cmd_str, "RAW_CMD", len) == 0) + { + cmd->command_group = RAW_CMD; + ret = parse_raw_command(p, cmd); + } + return ret; +} + +/** * */ static TuxDrvError @@ -791,6 +996,7 @@ { if (!strcmp(stack->cmd_list[i].cmd, "")) { + parse_command(cmd_str, &(stack->cmd_list[i])); strcpy(stack->cmd_list[i].cmd, cmd_str); stack->cmd_list[i].timeout = delay + curtime; ret = E_TUXDRV_NOERROR; Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_types.h =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_types.h 2008-05-03 13:10:10 UTC (rev 1096) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_types.h 2008-05-04 10:39:10 UTC (rev 1097) @@ -24,4 +24,38 @@ typedef unsigned char data_frame[4]; typedef unsigned char raw_frame[5]; +#define CMDSIZE 1024 + +typedef enum { + TUX_CMD, + RAW_CMD +} tux_command_group; + +typedef enum { + AUDIO, + EYES, + IR, + LED, + MOUTH, + SOUND_FLASH, + SPINNING, + WINGS +} tux_command; + +typedef enum { + xON, // to be completed +} tux_sub_command; + +/* +this struct is still under development +plan is to split cmd into various fields (making it typed) +*/ +typedef struct { + double timeout; + tux_command_group command_group; + tux_command command; + tux_sub_command sub_command; + char cmd[CMDSIZE]; +} delay_cmd_t; + #endif /* _TUX_TYPES_H_ */ |