uint8_t VS_ParseCommand(const unsigned char *cmd, bool *handled, const CLS1_StdIOType *io) { const uint8_t *p; uint32_t val32u; if (UTIL1_strcmp((char*)cmd, CLS1_CMD_HELP)==0 || UTIL1_strcmp((char*)cmd, "VS1053 help")==0) { *handled = TRUE; return PrintHelp(io); } else if ((UTIL1_strcmp((char*)cmd, CLS1_CMD_STATUS)==0) || (UTIL1_strcmp((char*)cmd, "VS1053 status")==0)) { *handled = TRUE; return PrintStatus(io); } else if (UTIL1_strncmp((char*)cmd, "VS1053 volume ", sizeof("VS1053 volume ")-1)==0) { *handled = TRUE; p = cmd+sizeof("VS1053 volume ")-1; if (UTIL1_xatoi(&p, &val32u)==ERR_OK) { return VS_SetVolume((uint16_t)val32u); } else { CLS1_SendStr("Failed reading volume", io->stdErr); return ERR_FAILED; } } else if (UTIL1_strncmp((char*)cmd, "VS1053 play ", sizeof("VS1053 play ")-1)==0) { *handled = TRUE; p = cmd+sizeof("VS1053 play ")-1; return VS_PlaySong(p, io); } return ERR_OK; }
/*! * \brief Parses a command * \param cmd Command string to be parsed * \param handled Sets this variable to TRUE if command was handled * \param io I/O stream to be used for input/output * \return Error code, ERR_OK if everything was fine */ uint8_t TRACE_ParseCommand(const unsigned char *cmd, bool *handled, const CLS1_StdIOType *io) { if (UTIL1_strcmp((char*)cmd, CLS1_CMD_HELP)==0 || UTIL1_strcmp((char*)cmd, (char*)"trace help")==0) { TRACE_PrintHelp(io); *handled = TRUE; } else if (UTIL1_strcmp((char*)cmd, CLS1_CMD_STATUS)==0 || UTIL1_strcmp((char*)cmd, (char*)"trace status")==0) { TRACE_PrintStatus(io); *handled = TRUE; } else if (UTIL1_strcmp((char*)cmd, (char*)"trace shell")==0) { traceChannel = TRACE_TO_SHELL; *handled = TRUE; } else if (UTIL1_strcmp((char*)cmd, (char*)"trace none")==0) { traceChannel = TRACE_TO_NONE; *handled = TRUE; } else if (UTIL1_strcmp((char*)cmd, (char*)"trace accel on")==0) { traceAccel = TRUE; *handled = TRUE; } else if (UTIL1_strcmp((char*)cmd, (char*)"trace accel off")==0) { traceAccel = FALSE; *handled = TRUE; } else if (UTIL1_strcmp((char*)cmd, (char*)"magnetometer on")==0) { traceMagnetometer = TRUE; *handled = TRUE; } else if (UTIL1_strcmp((char*)cmd, (char*)"magnetometer off")==0) { traceMagnetometer = FALSE; *handled = TRUE; } return ERR_OK; }
uint8_t BUZ_ParseCommand(const unsigned char *cmd, bool *handled, const CLS1_StdIOType *io) { const unsigned char *p; uint16_t freq, duration; if (UTIL1_strcmp((char*)cmd, (char*)CLS1_CMD_HELP)==0 || UTIL1_strcmp((char*)cmd, (char*)"buzzer help")==0) { *handled = TRUE; return BUZ_PrintHelp(io); } else if (UTIL1_strcmp((char*)cmd, (char*)CLS1_CMD_STATUS)==0 || UTIL1_strcmp((char*)cmd, (char*)"buzzer status")==0) { *handled = TRUE; return BUZ_PrintStatus(io); } else if (UTIL1_strncmp((char*)cmd, (char*)"buzzer buz ", sizeof("buzzer buz ")-1)==0) { *handled = TRUE; p = cmd+sizeof("buzzer buz ")-1; if (UTIL1_ScanDecimal16uNumber(&p, &freq)==ERR_OK && UTIL1_ScanDecimal16uNumber(&p, &duration)==ERR_OK) { if (BUZ_Beep(freq, duration)!=ERR_OK) { CLS1_SendStr((unsigned char*)"Starting buzzer failed\r\n", io->stdErr); return ERR_FAILED; } return ERR_OK; } } else if (UTIL1_strcmp((char*)cmd, (char*)"buzzer play tune")==0) { *handled = TRUE; return BUZ_PlayTune(); } return ERR_OK; }
uint8_t REMOTE_ParseCommand(const unsigned char *cmd, bool *handled, const CLS1_StdIOType *io) { uint8_t res = ERR_OK; if (UTIL1_strcmp((char*)cmd, (char*)CLS1_CMD_HELP)==0 || UTIL1_strcmp((char*)cmd, (char*)"remote help")==0) { REMOTE_PrintHelp(io); *handled = TRUE; } else if (UTIL1_strcmp((char*)cmd, (char*)CLS1_CMD_STATUS)==0 || UTIL1_strcmp((char*)cmd, (char*)"remote status")==0) { REMOTE_PrintStatus(io); *handled = TRUE; } else if (UTIL1_strcmp((char*)cmd, (char*)"remote on")==0) { REMOTE_isOn = TRUE; *handled = TRUE; } else if (UTIL1_strcmp((char*)cmd, (char*)"remote off")==0) { #if PL_CONFIG_HAS_MOTOR MOT_SetSpeedPercent(MOT_GetMotorHandle(MOT_MOTOR_LEFT), 0); MOT_SetSpeedPercent(MOT_GetMotorHandle(MOT_MOTOR_RIGHT), 0); #endif REMOTE_isOn = FALSE; *handled = TRUE; } else if (UTIL1_strcmp((char*)cmd, (char*)"remote verbose on")==0) { REMOTE_isVerbose = TRUE; *handled = TRUE; } else if (UTIL1_strcmp((char*)cmd, (char*)"remote verbose off")==0) { REMOTE_isVerbose = FALSE; *handled = TRUE; } else if (UTIL1_strcmp((char*)cmd, (char*)"remote joystick on")==0) { REMOTE_useJoystick = TRUE; *handled = TRUE; } else if (UTIL1_strcmp((char*)cmd, (char*)"remote joystick off")==0) { REMOTE_useJoystick = FALSE; *handled = TRUE; } return res; }
uint8_t MM_ParseCommand(const unsigned char *cmd, bool *handled, const CLS1_StdIOType *io) { const uint8_t *p; uint8_t res; int32_t tmp; if (UTIL1_strcmp((char*)cmd, CLS1_CMD_HELP)==0 || UTIL1_strcmp((char*)cmd, "midi help")==0) { CLS1_SendHelpStr((unsigned char*)"midi", (const unsigned char*)"Group of midi commands\r\n", io->stdOut); CLS1_SendHelpStr((unsigned char*)" help|status", (unsigned char*)"Print help or status information\r\n", io->stdOut); CLS1_SendHelpStr((unsigned char*)" play <number>", (const unsigned char*)"Play midi song (0, 1)\r\n", io->stdOut); *handled = TRUE; return ERR_OK; } else if ((UTIL1_strcmp((char*)cmd, CLS1_CMD_STATUS)==0) || (UTIL1_strcmp((char*)cmd, "midi status")==0)) { *handled = TRUE; return PrintStatus(io); } else if (UTIL1_strncmp((char*)cmd, "midi play", sizeof("midi play")-1)==0) { p = cmd+sizeof("midi play")-1; res = UTIL1_xatoi(&p, &tmp); if (res==ERR_OK && tmp>=0) { *handled = TRUE; if (tmp==0) { MM_Play(); } else if (tmp==1) { MM_PlayPirate(); } } return res; } return ERR_OK; }
static uint8_t ESP_PrintStatus(const CLS1_StdIOType *io) { uint8_t buf[48]; CLS1_SendStatusStr("ESP8266", "\r\n", io->stdOut); CLS1_SendStatusStr(" Webserver", ESP_WebServerIsOn?"ON\r\n":"OFF\r\n", io->stdOut); if (ESP_GetFirmwareVersionString(buf, sizeof(buf)) != ERR_OK) { UTIL1_strcpy(buf, sizeof(buf), "FAILED\r\n"); } else { /* 00160901: 0016 is SDK version, 0901 is the AT version */ UTIL1_strcat(buf, sizeof(buf), "\r\n"); } CLS1_SendStatusStr(" AT+GMR", buf, io->stdOut); if (ESP_GetModeString(buf, sizeof(buf)) != ERR_OK) { UTIL1_strcpy(buf, sizeof(buf), "FAILED\r\n"); } else { if (UTIL1_strcmp(buf, "1")==0) { UTIL1_strcat(buf, sizeof(buf), " (device)"); } else if (UTIL1_strcmp(buf, "2")==0) { UTIL1_strcat(buf, sizeof(buf), " (AP)"); } else if (UTIL1_strcmp(buf, "3")==0) { UTIL1_strcat(buf, sizeof(buf), " (device+AP)"); } else { UTIL1_strcat(buf, sizeof(buf), " (ERROR)"); } UTIL1_strcat(buf, sizeof(buf), "\r\n"); } CLS1_SendStatusStr(" AT+CWMODE?", buf, io->stdOut); if (ESP_GetIPAddrString(buf, sizeof(buf)) != ERR_OK) { UTIL1_strcpy(buf, sizeof(buf), "FAILED\r\n"); } else { UTIL1_strcat(buf, sizeof(buf), "\r\n"); } CLS1_SendStatusStr(" AT+CIFSR", buf, io->stdOut); if (ESP_GetConnectedAPString(buf, sizeof(buf)) != ERR_OK) { UTIL1_strcpy(buf, sizeof(buf), "FAILED\r\n"); } else { UTIL1_strcat(buf, sizeof(buf), "\r\n"); } CLS1_SendStatusStr(" AT+CWJAP?", buf, io->stdOut); if (ESP_GetCIPMUXString(buf, sizeof(buf)) != ERR_OK) { UTIL1_strcpy(buf, sizeof(buf), "FAILED\r\n"); } else { if (UTIL1_strcmp(buf, "0")==0) { UTIL1_strcat(buf, sizeof(buf), " (single connection)"); } else if (UTIL1_strcmp(buf, "1")==0) { UTIL1_strcat(buf, sizeof(buf), " (multiple connections)"); } else { UTIL1_strcat(buf, sizeof(buf), " (ERROR)"); } UTIL1_strcat(buf, sizeof(buf), "\r\n"); } CLS1_SendStatusStr(" CIPMUX", buf, io->stdOut); return ERR_OK; }
uint8_t RNETA_ParseCommand(const unsigned char *cmd, bool *handled, const CLS1_StdIOType *io) { uint8_t res = ERR_OK; const uint8_t *p; uint16_t val16; if (UTIL1_strcmp((char*)cmd, (char*)CLS1_CMD_HELP)==0 || UTIL1_strcmp((char*)cmd, (char*)"app help")==0) { PrintHelp(io); *handled = TRUE; } else if (UTIL1_strcmp((char*)cmd, (char*)CLS1_CMD_STATUS)==0 || UTIL1_strcmp((char*)cmd, (char*)"app status")==0) { *handled = TRUE; return PrintStatus(io); } else if (UTIL1_strncmp((char*)cmd, (char*)"app saddr", sizeof("app saddr")-1)==0) { p = cmd + sizeof("app saddr")-1; *handled = TRUE; if (UTIL1_ScanHex16uNumber(&p, &val16)==ERR_OK) { (void)RNWK_SetThisNodeAddr((RNWK_ShortAddrType)val16); } else { CLS1_SendStr((unsigned char*)"ERR: wrong address\r\n", io->stdErr); return ERR_FAILED; } } else if (UTIL1_strncmp((char*)cmd, (char*)"app daddr", sizeof("app daddr")-1)==0) { p = cmd + sizeof("app daddr")-1; *handled = TRUE; if (UTIL1_ScanHex16uNumber(&p, &val16)==ERR_OK) { APP_dstAddr = val16; } else { CLS1_SendStr((unsigned char*)"ERR: wrong address\r\n", io->stdErr); return ERR_FAILED; } #if PL_HAS_RSTDIO } else if (UTIL1_strncmp((char*)cmd, (char*)"app send", sizeof("app send")-1)==0) { unsigned char buf[32]; RSTDIO_QueueType queue; if (UTIL1_strncmp((char*)cmd, (char*)"app send in", sizeof("app send in")-1)==0) { queue = RSTDIO_QUEUE_TX_IN; cmd += sizeof("app send in"); } else if (UTIL1_strncmp((char*)cmd, (char*)"app send out", sizeof("app send out")-1)==0) { queue = RSTDIO_QUEUE_TX_OUT; cmd += sizeof("app send out"); } else if (UTIL1_strncmp((char*)cmd, (char*)"app send err", sizeof("app send err")-1)==0) { queue = RSTDIO_QUEUE_TX_ERR; cmd += sizeof("app send err"); } else { return ERR_OK; /* not handled */ } UTIL1_strcpy(buf, sizeof(buf), cmd); UTIL1_chcat(buf, sizeof(buf), '\n'); buf[sizeof(buf)-2] = '\n'; /* have a '\n' in any case */ if (RSTDIO_SendToTxStdio(queue, buf, UTIL1_strlen((char*)buf))!=ERR_OK) { CLS1_SendStr((unsigned char*)"failed!\r\n", io->stdErr); } *handled = TRUE; #endif } return res; }
uint8_t TACHO_ParseCommand(const unsigned char *cmd, bool *handled, const CLS1_StdIOType *io) { if (UTIL1_strcmp((char*)cmd, (char*)CLS1_CMD_HELP)==0 || UTIL1_strcmp((char*)cmd, (char*)"tacho help")==0) { TACHO_PrintHelp(io); *handled = TRUE; } else if (UTIL1_strcmp((char*)cmd, (char*)CLS1_CMD_STATUS)==0 || UTIL1_strcmp((char*)cmd, (char*)"tacho status")==0) { TACHO_PrintStatus(io); *handled = TRUE; } return ERR_OK; }
byte REF_ParseCommand(const unsigned char *cmd, bool *handled, const CLS1_StdIOType *io) { if (UTIL1_strcmp((char*)cmd, CLS1_CMD_HELP)==0 || UTIL1_strcmp((char*)cmd, "ref help")==0) { *handled = TRUE; return PrintHelp(io); } else if ((UTIL1_strcmp((char*)cmd, CLS1_CMD_STATUS)==0) || (UTIL1_strcmp((char*)cmd, "ref status")==0)) { *handled = TRUE; return PrintStatus(io); } return ERR_OK; }
uint8_t RMT_ParseCommand(const unsigned char *cmd, bool *handled, const CLS1_StdIOType *io) { uint8_t res = ERR_OK; int32_t val; const unsigned char *p; if (UTIL1_strcmp((char*)cmd, (char*)CLS1_CMD_HELP)==0 || UTIL1_strcmp((char*)cmd, (char*)"remote help")==0) { RMT_PrintHelp(io); *handled = TRUE; } else if (UTIL1_strncmp((char*)cmd, "remote send val", sizeof("remote send val")-1)==0) { p = cmd+sizeof("remote send val"); if (UTIL1_xatoi(&p, &val)==ERR_OK && val>=0 && val<=4) { res = RSTDIO_AddToQueue(RSTDIO_QUEUE_TX_OUT, (unsigned char*)"test", 4); // RSTDIO_TxStdInSendChar('x'); // RADIO_setValueToSend(val); *handled = TRUE; } }/*else if (UTIL1_strcmp((char*)cmd, (char*)CLS1_CMD_STATUS)==0 || UTIL1_strcmp((char*)cmd, (char*)"radio status")==0) { RADIO_PrintStatus(io); *handled = TRUE; } else if (UTIL1_strcmp((char*)cmd, (char*)"radio reset")==0) { RADIO_AppStatus = RADIO_RESET_STATE; *handled = TRUE; } else if (UTIL1_strcmp((char*)cmd, (char*)"radio on")==0) { RADIO_isOn = TRUE; *handled = TRUE; } else if (UTIL1_strcmp((char*)cmd, (char*)"radio off")==0) { RADIO_isOn = FALSE; *handled = TRUE; } else if (UTIL1_strcmp((char*)cmd, (char*)"radio sniff on")==0) { RADIO_isSniffing = TRUE; *handled = TRUE; } else if (UTIL1_strcmp((char*)cmd, (char*)"radio sniff off")==0) { RADIO_isSniffing = FALSE; *handled = TRUE; } else if (UTIL1_strncmp((char*)cmd, (char*)"radio channel", sizeof("radio channel")-1)==0) { p = cmd+sizeof("radio channel"); if (UTIL1_xatoi(&p, &val)==ERR_OK && val>=0 && val<=15) { RADIO_SetChannel((uint8_t)val); *handled = TRUE; } else { CLS1_SendStr((unsigned char*)"Wrong argument, must be in the range 0..15\r\n", io->stdErr); res = ERR_FAILED; } } else if (UTIL1_strncmp((char*)cmd, "radio power", sizeof("radio power")-1)==0) { p = cmd+sizeof("radio power"); if (UTIL1_xatoi(&p, &val)==ERR_OK && val>=0 && val<=15) { RADIO_SetOutputPower((uint8_t)val); *handled = TRUE; } else { CLS1_SendStr((unsigned char*)"Wrong argument, must be in the range 0..15\r\n", io->stdErr); res = ERR_FAILED; } }*/ return res; }
/*! * \brief Parses a command * \param cmd Command string to be parsed * \param handled Sets this variable to TRUE if command was handled * \param io I/O stream to be used for input/output * \return Error code, ERR_OK if everything was fine */ static uint8_t ParseCommand(const unsigned char *cmd, bool *handled, const CLS1_StdIOType *io) { /* handling our own commands */ if (UTIL1_strcmp((char*)cmd, CLS1_CMD_HELP)==0) { CLS1_SendHelpStr((const unsigned char*)"run benchmark", (const unsigned char*)"Run FatFS benchmark\r\n", io->stdOut); *handled = TRUE; } else if (UTIL1_strcmp((char*)cmd, "run benchmark")==0) { benchmark(io); *handled = TRUE; } return ERR_OK; }
uint8_t W5100_ParseCommand(const unsigned char *cmd, bool *handled, CLS1_ConstStdIOType *io) { if (UTIL1_strcmp((char*)cmd, CLS1_CMD_HELP)==0 || UTIL1_strcmp((char*)cmd, "w5100 help")==0) { CLS1_SendHelpStr((unsigned char*)"w5100", (const unsigned char*)"Group of w5100 commands\r\n", io->stdOut); CLS1_SendHelpStr((unsigned char*)" help|status", (const unsigned char*)"Print help or status information\r\n", io->stdOut); *handled = TRUE; return ERR_OK; } else if (UTIL1_strcmp((char*)cmd, CLS1_CMD_STATUS)==0 || UTIL1_strcmp((char*)cmd, "w5100 status")==0) { *handled = TRUE; return PrintStatus(io); } return ERR_OK; /* no error */ }
uint8_t US_ParseCommand(const unsigned char *cmd, bool *handled, const CLS1_StdIOType *io) { uint8_t res = ERR_OK; if (UTIL1_strcmp((char*)cmd, (char*)CLS1_CMD_HELP)==0 || UTIL1_strcmp((char*)cmd, (char*)"ultrasonic help")==0) { US_PrintHelp(io); *handled = TRUE; } else if (UTIL1_strcmp((char*)cmd, (char*)CLS1_CMD_STATUS)==0 || UTIL1_strcmp((char*)cmd, (char*)"ultrasonic status")==0) { US_PrintStatus(io); *handled = TRUE; } return res; }
uint8_t ESC_ParseCommand(const unsigned char *cmd, bool *handled, const CLS1_StdIOType *io) { uint8_t res = ERR_OK; int32_t val; const unsigned char *p; ESC_MotorID id; if (UTIL1_strcmp((char*)cmd, (char*)CLS1_CMD_HELP)==0 || UTIL1_strcmp((char*)cmd, (char*)"esc help")==0) { ESC_PrintHelp(io); *handled = TRUE; } else if (UTIL1_strcmp((char*)cmd, (char*)CLS1_CMD_STATUS)==0 || UTIL1_strcmp((char*)cmd, (char*)"esc status")==0) { ESC_PrintStatus(io); *handled = TRUE; } else if (UTIL1_strncmp((char*)cmd, (char*)"esc on", sizeof("esc on")-1)==0) { ESC_isMotorOn = TRUE; *handled = TRUE; } else if (UTIL1_strncmp((char*)cmd, (char*)"esc off", sizeof("esc off")-1)==0) { for(id=0; id<ESC_MOTOR_NOF; id++) { ESC_SetSpeedPercent(&ESC_motors[id], 0); } ESC_isMotorOn = FALSE; *handled = TRUE; } else if (UTIL1_strncmp((char*)cmd, (char*)"esc duty ", sizeof("esc duty ")-1)==0) { if (!ESC_isMotorOn) { CLS1_SendStr((unsigned char*)"Motors are OFF, cannot set duty.\r\n", io->stdErr); res = ERR_FAILED; } else { p = cmd+sizeof("esc duty ")-1; if (UTIL1_strncmp((char*)p, (char*)"fl ", sizeof("fl ")-1)==0) { id = ESC_MOTOR_FRONT_LEFT; } else if (UTIL1_strncmp((char*)p, (char*)"fr ", sizeof("fr ")-1)==0) { id = ESC_MOTOR_FRONT_RIGHT; } else if (UTIL1_strncmp((char*)p, (char*)"bl ", sizeof("bl ")-1)==0) { id = ESC_MOTOR_BACK_LEFT; } else if (UTIL1_strncmp((char*)p, (char*)"br ", sizeof("br ")-1)==0) { id = ESC_MOTOR_BACK_RIGHT; } else { CLS1_SendStr((unsigned char*)"Wrong argument, motor must be either fl, fr, bl or br\r\n", io->stdErr); res = ERR_FAILED; } if (res==ERR_OK) { p = cmd+sizeof("esc duty xx ")-1; if (UTIL1_xatoi(&p, &val)==ERR_OK && val >=0 && val<=100) { ESC_SetSpeedPercent(&ESC_motors[id], (ESC_SpeedPercent)val); *handled = TRUE; } else { CLS1_SendStr((unsigned char*)"Wrong argument, must be in the range 0..100\r\n", io->stdErr); res = ERR_FAILED; } } } } return res; }
uint8_t BUZ_ParseCommand(const unsigned char *cmd, bool *handled, const CLS1_StdIOType *io) { if (UTIL1_strcmp((char*)cmd, CLS1_CMD_HELP)==0 || UTIL1_strcmp((char*)cmd, "BUZ1 help")==0) { *handled = TRUE; CLS1_SendHelpStr((unsigned char*)"BUZ", (unsigned char*)"Group of BUZ commands\r\n", io->stdOut); CLS1_SendHelpStr((unsigned char*)" beep", (unsigned char*)"Beep with 1kHz for 1 sec\r\n", io->stdOut); return ERR_OK; } else if (UTIL1_strcmp((char*)cmd, "BUZ beep")==0) { *handled = TRUE; return BUZ_Beep(1000, 1000); } return ERR_OK; }
uint8_t PLR_ParseCommand(const unsigned char *cmd, bool *handled, const CLS1_StdIOType *io) { const uint8_t *p; uint32_t val32u; if (UTIL1_strcmp((char*)cmd, CLS1_CMD_HELP) == 0 || UTIL1_strcmp((char*)cmd, "player help") == 0) { *handled = TRUE; return PrintHelp(io); } else if ((UTIL1_strcmp((char*)cmd, CLS1_CMD_STATUS) == 0) || (UTIL1_strcmp((char*)cmd, "player status") == 0)) { *handled = TRUE; return PrintStatus(io); } else if (UTIL1_strncmp((char* )cmd, "player volume ", sizeof("player volume ") - 1) == 0) { *handled = TRUE; p = cmd + sizeof("player volume ") - 1; if (UTIL1_xatoi(&p, &val32u) == ERR_OK) { return VS_SetVolume((uint16_t) val32u); } else { CLS1_SendStr("Failed reading volume", io->stdErr); return ERR_FAILED; } } else if (UTIL1_strncmp((char* )cmd, "player play ", sizeof("player play ") - 1) == 0) { *handled = TRUE; p = cmd + sizeof("player play ") - 1; return PLR_StartNewFile(p,FALSE); }else if (UTIL1_strncmp((char* )cmd, "player pause on", sizeof("player pause on") - 1) == 0) { *handled = TRUE; PLR_PausePlayback(TRUE); }else if (UTIL1_strncmp((char* )cmd, "player pause off", sizeof("player pause off") - 1) == 0) { *handled = TRUE; PLR_PausePlayback(FALSE); }else if (UTIL1_strncmp((char* )cmd, "player stop", sizeof("player stop") - 1) == 0) { *handled = TRUE; PLR_StopPlayback(); }else if (UTIL1_strncmp((char*)cmd, "player setval", sizeof("player setval")-1)==0) { p = cmd+sizeof("player setval")-1; uint8_t res = UTIL1_xatoi(&p, &val32u); if (res==ERR_OK) { config_turnval = val32u; *handled = TRUE; } } return ERR_OK; }
byte REF_ParseCommand(const unsigned char *cmd, bool *handled, const CLS1_StdIOType *io) { if (UTIL1_strcmp((char*)cmd, CLS1_CMD_HELP)==0 || UTIL1_strcmp((char*)cmd, "Reflectance help")==0) { *handled = TRUE; return PrintHelp(io); } else if ((UTIL1_strcmp((char*)cmd, CLS1_CMD_STATUS)==0) || (UTIL1_strcmp((char*)cmd, "Reflectance status")==0)) { *handled = TRUE; return PrintStatus(io); } else if (UTIL1_strcmp((char*)cmd, "Reflectance calibrate line on")==0) { REF_Calibrate(TRUE); *handled = TRUE; return ERR_OK; } else if (UTIL1_strcmp((char*)cmd, "Reflectance calibrate line off")==0) { REF_Calibrate(FALSE); *handled = TRUE; return ERR_OK; } else if (UTIL1_strcmp((char*)cmd, "Reflectance led on")==0) { ledON = TRUE; *handled = TRUE; return ERR_OK; } else if (UTIL1_strcmp((char*)cmd, "Reflectance led off")==0) { ledON = FALSE; *handled = TRUE; return ERR_OK; } return ERR_OK; }
byte QUADCALIB_ParseCommand(const unsigned char *cmd, bool *handled, const CLS1_StdIOType *io) { if (UTIL1_strcmp((char*)cmd, CLS1_CMD_HELP)==0 || UTIL1_strcmp((char*)cmd, "quadcalib help")==0) { *handled = TRUE; return PrintHelp(io); } else if ((UTIL1_strcmp((char*)cmd, CLS1_CMD_STATUS)==0) || (UTIL1_strcmp((char*)cmd, "quadcalib status")==0)) { *handled = TRUE; return PrintStatus(io); } else if ((UTIL1_strcmp((char*)cmd, "quadcalib tune 0")==0)) { *handled = TRUE; return Tune(io, 0, MOT_GetMotorHandle(MOT_MOTOR_RIGHT)); } else if ((UTIL1_strcmp((char*)cmd, "quadcalib tune 1")==0)) { *handled = TRUE; return Tune(io, 1, MOT_GetMotorHandle(MOT_MOTOR_RIGHT)); } else if ((UTIL1_strcmp((char*)cmd, "quadcalib tune 2")==0)) { *handled = TRUE; return Tune(io, 2, MOT_GetMotorHandle(MOT_MOTOR_LEFT)); } else if ((UTIL1_strcmp((char*)cmd, "quadcalib tune 3")==0)) { *handled = TRUE; return Tune(io, 3, MOT_GetMotorHandle(MOT_MOTOR_LEFT)); } return ERR_OK; }
uint8_t REMOTE_ParseCommand(const unsigned char *cmd, bool *handled, const CLS1_StdIOType *io) { uint8_t res = ERR_OK; int32_t val; const unsigned char *p; if (UTIL1_strcmp((char*)cmd, (char*)CLS1_CMD_HELP)==0 || UTIL1_strcmp((char*)cmd, (char*)"remote help")==0) { REMOTE_PrintHelp(io); *handled = TRUE; } else if (UTIL1_strcmp((char*)cmd, (char*)CLS1_CMD_STATUS)==0 || UTIL1_strcmp((char*)cmd, (char*)"remote status")==0) { REMOTE_PrintStatus(io); *handled = TRUE; } return res; }
/*! * \brief Parses a command * \param cmd Command string to be parsed * \param handled Sets this variable to TRUE if command was handled * \param io I/O stream to be used for input/output * \return Error code, ERR_OK if everything was fine */ uint8_t Q4CLeft_ParseCommand(const unsigned char *cmd, bool *handled, const CLS1_StdIOType *io) { uint8_t res=ERR_OK; if (UTIL1_strcmp((const char*)cmd, CLS1_CMD_HELP)==0 || UTIL1_strcmp((const char *)cmd, "Q4CLeft help")==0) { CLS1_SendHelpStr((const unsigned char*)"Q4CLeft", (const unsigned char*)"Q4CLeft command group\r\n", io->stdOut); CLS1_SendHelpStr((const unsigned char*)" help|status", (const unsigned char*)"Print help or status information\r\n", io->stdOut); CLS1_SendHelpStr((const unsigned char*)" reset", (const unsigned char*)"Reset the current position counter\r\n", io->stdOut); *handled = TRUE; } else if (UTIL1_strcmp((const char*)cmd, CLS1_CMD_STATUS)==0 || UTIL1_strcmp((const char*)cmd, "Q4CLeft status")==0) { CLS1_SendStr((const unsigned char*)"Q4CLeft:\r\n", io->stdOut); CLS1_SendStatusStr((const unsigned char*)" pos", (const unsigned char*)"", io->stdOut); #if Q4CLeft_CNTR_BITS==16 CLS1_SendNum16u(Q4CLeft_currPos, io->stdOut); #elif Q4CLeft_CNTR_BITS==32 CLS1_SendNum32u(Q4CLeft_currPos, io->stdOut); #else #error "unknown counter size!" #endif CLS1_SendStr((const unsigned char*)", ", io->stdOut); #if Q4CLeft_CNTR_BITS==16 CLS1_SendNum16s((int16_t)Q4CLeft_currPos, io->stdOut); #elif Q4CLeft_CNTR_BITS==32 CLS1_SendNum32s((int32_t)Q4CLeft_currPos, io->stdOut); #else #error "unknown counter size!" #endif CLS1_SendStr((const unsigned char*)"\r\n", io->stdOut); CLS1_SendStatusStr((const unsigned char*)" C1 C2", (const unsigned char*)"", io->stdOut); if (Q4CLeft_GET_C1_PIN()!=0) { CLS1_SendStr((const unsigned char*)"1 ", io->stdOut); } else { CLS1_SendStr((const unsigned char*)"0 ", io->stdOut); } if (Q4CLeft_GET_C2_PIN()!=0) { CLS1_SendStr((const unsigned char*)"1\r\n", io->stdOut); } else { CLS1_SendStr((const unsigned char*)"0\r\n", io->stdOut); } CLS1_SendStatusStr((const unsigned char*)" errors", (const unsigned char*)"", io->stdOut); CLS1_SendNum16u(Q4CLeft_nofErrors, io->stdOut); CLS1_SendStr((const unsigned char*)"\r\n", io->stdOut); *handled = TRUE; } else if (UTIL1_strcmp((const char*)cmd, "Q4CLeft reset")==0) { Q4CLeft_SetPos(0); Q4CLeft_nofErrors = 0; *handled = TRUE; } return res; }
uint8_t NEO_ParseCommand(const unsigned char *cmd, bool *handled, const CLS1_StdIOType *io) { uint8_t res = ERR_OK; uint32_t color; int32_t tmp, x, y; const uint8_t *p; if (UTIL1_strcmp((char*)cmd, CLS1_CMD_HELP)==0 || UTIL1_strcmp((char*)cmd, "neo help")==0) { CLS1_SendHelpStr((unsigned char*)"neo", (const unsigned char*)"Group of neo commands\r\n", io->stdOut); CLS1_SendHelpStr((unsigned char*)" help|status", (const unsigned char*)"Print help or status information\r\n", io->stdOut); CLS1_SendHelpStr((unsigned char*)" clear all", (const unsigned char*)"Clear all pixels\r\n", io->stdOut); CLS1_SendHelpStr((unsigned char*)" set all <rgb>", (const unsigned char*)"Set all pixel with RGB value\r\n", io->stdOut); CLS1_SendHelpStr((unsigned char*)" set <x> <y> <rgb>", (const unsigned char*)"Set pixel with RGB value\r\n", io->stdOut); *handled = TRUE; return ERR_OK; } else if ((UTIL1_strcmp((char*)cmd, CLS1_CMD_STATUS)==0) || (UTIL1_strcmp((char*)cmd, "neo status")==0)) { *handled = TRUE; return PrintStatus(io); } else if (UTIL1_strcmp((char*)cmd, "neo clear all")==0) { NEO_ClearAllPixel(); NEO_TransferPixels(); *handled = TRUE; return ERR_OK; } else if (UTIL1_strncmp((char*)cmd, "neo set all", sizeof("neo set all")-1)==0) { p = cmd+sizeof("neo set all")-1; res = UTIL1_xatoi(&p, &tmp); /* read color RGB value */ if (res==ERR_OK && tmp>=0 && tmp<=0xffffff) { /* within RGB value */ color = tmp; NEO_SetAllPixelColor(color); NEO_TransferPixels(); *handled = TRUE; } } else if (UTIL1_strncmp((char*)cmd, "neo set", sizeof("neo set")-1)==0) { p = cmd+sizeof("neo set")-1; res = UTIL1_xatoi(&p, &x); /* read x pixel index */ if (res==ERR_OK && x>=0 && x<NEO_NOF_X) { res = UTIL1_xatoi(&p, &y); /* read y pixel index */ if (res==ERR_OK && y>=0 && y<NEO_NOF_Y) { res = UTIL1_xatoi(&p, &tmp); /* read color RGB value */ if (res==ERR_OK && tmp>=0 && tmp<=0xffffff) { color = tmp; NEO_SetPixelColor((NEO_PixelIdxT)x, (NEO_PixelIdxT)y, color); NEO_TransferPixels(); *handled = TRUE; } } } } return res; }
uint8_t MAZE_ParseCommand(const unsigned char *cmd, bool *handled, const CLS1_StdIOType *io) { uint8_t res = ERR_OK; if (UTIL1_strcmp((char*)cmd, (char*)CLS1_CMD_HELP)==0 || UTIL1_strcmp((char*)cmd, (char*)"maze help")==0) { MAZE_PrintHelp(io); *handled = TRUE; } else if (UTIL1_strcmp((char*)cmd, (char*)CLS1_CMD_STATUS)==0 || UTIL1_strcmp((char*)cmd, (char*)"maze status")==0) { MAZE_PrintStatus(io); *handled = TRUE; } else if (UTIL1_strcmp((char*)cmd, (char*)"maze clear")==0) { MAZE_ClearSolution(); *handled = TRUE; } return res; }
uint8_t WDG_ParseCommand(const uint8_t *cmd, bool *handled, BLUETOOTH_ConstStdIOType *io){ uint8_t res = ERR_OK; if (UTIL1_strcmp((char*)cmd, (char*)BLUETOOTH_CMD_HELP)==0 || UTIL1_strcmp((char*)cmd, (char*)"wdg help")==0) { WDG_PrintHelp(io); *handled = TRUE; } else if (UTIL1_strcmp((char*)cmd, (char*)BLUETOOTH_CMD_STATUS)==0 || UTIL1_strcmp((char*)cmd, (char*)"wdg status")==0) { WDG_PrintStatus(io); *handled = TRUE; } else if (UTIL1_strncmp((char*)cmd, (char*)"wdg shutdown", sizeof("wdg shutdown")-1) == 0){ WDG_ShutOff(); *handled = TRUE; } return res; }
uint8_t ESP_SelectMode(uint8_t mode) { /* AT+CWMODE=<mode>, where <mode> is 1=Sta, 2=AP or 3=both */ uint8_t txBuf[sizeof("AT+CWMODE=x\r\n")]; uint8_t rxBuf[sizeof("AT+CWMODE=x\r\r\nno change\r\n")]; uint8_t expected[sizeof("AT+CWMODE=x\r\r\nno change\r\n")]; uint8_t res; if (mode<1 || mode>3) { return ERR_RANGE; /* only 1, 2 or 3 */ } UTIL1_strcpy(txBuf, sizeof(txBuf), "AT+CWMODE="); UTIL1_strcatNum16u(txBuf, sizeof(txBuf), mode); UTIL1_strcat(txBuf, sizeof(txBuf), "\r\n"); UTIL1_strcpy(expected, sizeof(expected), "AT+CWMODE="); UTIL1_strcatNum16u(expected, sizeof(expected), mode); UTIL1_strcat(expected, sizeof(expected), "\r\r\n\n"); res = ESP_SendATCommand(txBuf, rxBuf, sizeof(rxBuf), expected, ESP_DEFAULT_TIMEOUT_MS, NULL); if (res!=ERR_OK) { /* answer could be as well "AT+CWMODE=x\r\r\nno change\r\n"!! */ UTIL1_strcpy(txBuf, sizeof(txBuf), "AT+CWMODE="); UTIL1_strcatNum16u(txBuf, sizeof(txBuf), mode); UTIL1_strcat(txBuf, sizeof(txBuf), "\r\n"); UTIL1_strcpy(expected, sizeof(expected), "AT+CWMODE="); UTIL1_strcatNum16u(expected, sizeof(expected), mode); UTIL1_strcat(expected, sizeof(expected), "\r\r\nno change\r\n"); if (UTIL1_strcmp(rxBuf, expected)==0) { res = ERR_OK; } } return res; }
uint8_t ESP_SetServer(bool startIt, uint16_t port, const CLS1_StdIOType *io, uint16_t timeoutMs) { /* AT+CIPSERVER=<en>,<port>, where <en>: 0: stop, 1: start */ uint8_t res; uint8_t cmd[sizeof("AT+CIPSERVER=1,80\r\n\r\nOK\r\n")+sizeof("no change")]; uint8_t rxBuf[sizeof("AT+CIPSERVER=1,80\r\n\r\nOK\r\n")+sizeof("no change")]; UTIL1_strcpy(cmd, sizeof(cmd), "AT+CIPSERVER="); if (startIt) { UTIL1_strcat(cmd, sizeof(cmd), "1,"); } else { UTIL1_strcat(cmd, sizeof(cmd), "0,"); } UTIL1_strcatNum16u(cmd, sizeof(cmd), port); UTIL1_strcat(cmd, sizeof(cmd), "\r\n"); res = ESP_SendATCommand(cmd, rxBuf, sizeof(rxBuf), "OK\r\n", timeoutMs, io); if (res!=ERR_OK) { /* accept "no change" too */ UTIL1_strcpy(cmd, sizeof(cmd), "AT+CIPSERVER="); if (startIt) { UTIL1_strcat(cmd, sizeof(cmd), "1,"); } else { UTIL1_strcat(cmd, sizeof(cmd), "0,"); } UTIL1_strcatNum16u(cmd, sizeof(cmd), port); UTIL1_strcat(cmd, sizeof(cmd), "\r\r\nno change\r\n"); if (UTIL1_strcmp(rxBuf, cmd)==0) { res = ERR_OK; } } return res; }
uint8_t PID_ParseCommand(const unsigned char *cmd, bool *handled, const CLS1_StdIOType *io) { uint8_t res = ERR_OK; if (UTIL1_strcmp((char*)cmd, (char*)CLS1_CMD_HELP)==0 || UTIL1_strcmp((char*)cmd, (char*)"pid help")==0) { PID_PrintHelp(io); *handled = TRUE; } else if (UTIL1_strcmp((char*)cmd, (char*)CLS1_CMD_STATUS)==0 || UTIL1_strcmp((char*)cmd, (char*)"pid status")==0) { PID_PrintStatus(io); *handled = TRUE; } else if (UTIL1_strncmp((char*)cmd, (char*)"pid speed L ", sizeof("pid speed L ")-1)==0) { res = ParsePidParameter(&speedLeftConfig, cmd+sizeof("pid speed L ")-1, handled, io); } else if (UTIL1_strncmp((char*)cmd, (char*)"pid speed R ", sizeof("pid speed R ")-1)==0) { res = ParsePidParameter(&speedRightConfig, cmd+sizeof("pid speed R ")-1, handled, io); } return res; }
uint8_t MM_ParseCommand(const unsigned char *cmd, bool *handled, const CLS1_StdIOType *io) { const uint8_t *p; uint8_t res; int32_t tmp; if (UTIL1_strcmp((char*)cmd, CLS1_CMD_HELP)==0 || UTIL1_strcmp((char*)cmd, "midi help")==0) { CLS1_SendHelpStr((unsigned char*)"midi", (const unsigned char*)"Group of midi commands\r\n", io->stdOut); CLS1_SendHelpStr((unsigned char*)" help|status", (unsigned char*)"Print help or status information\r\n", io->stdOut); CLS1_SendHelpStr((unsigned char*)" (play|set) <number>", (const unsigned char*)"Play midi song\r\n", io->stdOut); CLS1_SendHelpStr((unsigned char*)" 0", (const unsigned char*)"Get ready\r\n", io->stdOut); CLS1_SendHelpStr((unsigned char*)" 1", (const unsigned char*)"Pirates of the Caribbean\r\n", io->stdOut); CLS1_SendHelpStr((unsigned char*)" 2", (const unsigned char*)"What is Love\r\n", io->stdOut); CLS1_SendHelpStr((unsigned char*)" 3", (const unsigned char*)"Game of Thrones\r\n", io->stdOut); CLS1_SendHelpStr((unsigned char*)" 4", (const unsigned char*)"Tetris\r\n", io->stdOut); CLS1_SendHelpStr((unsigned char*)" 5", (const unsigned char*)"Axel F.\r\n", io->stdOut); CLS1_SendHelpStr((unsigned char*)" 6", (const unsigned char*)"Ghostbusters\r\n", io->stdOut); CLS1_SendHelpStr((unsigned char*)" 7", (const unsigned char*)"James Bond\r\n", io->stdOut); CLS1_SendHelpStr((unsigned char*)" stop", (const unsigned char*)"Stop playing\r\n", io->stdOut); *handled = TRUE; return ERR_OK; } else if ((UTIL1_strcmp((char*)cmd, CLS1_CMD_STATUS)==0) || (UTIL1_strcmp((char*)cmd, "midi status")==0)) { *handled = TRUE; return PrintStatus(io); } else if (UTIL1_strcmp((char*)cmd, "midi stop")==0) { *handled = TRUE; MM_StopPlaying(); return ERR_OK; } else if (UTIL1_strncmp((char*)cmd, "midi play", sizeof("midi play")-1)==0) { p = cmd+sizeof("midi play")-1; res = UTIL1_xatoi(&p, &tmp); if (res==ERR_OK && tmp>=0 && tmp<MIDI_NOF_SONGS) { *handled = TRUE; MM_SetSong = tmp; MM_PlayMusic(tmp); } return res; } else if (UTIL1_strncmp((char*)cmd, "midi set", sizeof("midi set")-1)==0) { p = cmd+sizeof("midi set")-1; res = UTIL1_xatoi(&p, &tmp); if (res==ERR_OK && tmp>=0 && tmp<MIDI_NOF_SONGS) { *handled = TRUE; MM_SetSong = tmp; } return res; } return ERR_OK; }
byte MPC4728_ParseCommand(const unsigned char *cmd, bool *handled, const CLS1_StdIOType *io) { const unsigned char *p; if (UTIL1_strcmp((char*)cmd, CLS1_CMD_HELP)==0 || UTIL1_strcmp((char*)cmd, "MPC4728 help")==0) { *handled = TRUE; return PrintHelp(io); } else if ((UTIL1_strcmp((char*)cmd, CLS1_CMD_STATUS)==0) || (UTIL1_strcmp((char*)cmd, "MPC4728 status")==0)) { *handled = TRUE; return PrintStatus(io); } else if (UTIL1_strcmp((char*)cmd, "MPC4728 reset")==0) { *handled = TRUE; if (MPC4728_Reset()!=ERR_OK) { return ERR_FAILED; } else { return ERR_OK; } } else if (UTIL1_strcmp((char*)cmd, "MPC4728 wakeup")==0) { *handled = TRUE; if (MPC4728_Wakeup()!=ERR_OK) { return ERR_FAILED; } else { return ERR_OK; } } else if (UTIL1_strcmp((char*)cmd, "MPC4728 update")==0) { *handled = TRUE; if (MPC4728_Update()!=ERR_OK) { return ERR_FAILED; } else { return ERR_OK; } } else if (UTIL1_strncmp((char*)cmd, "MPC4728 fastwrite ", sizeof("MPC4728 fastwrite ")-1)==0) { uint16_t dac[4]; uint8_t pd[4]; int i; *handled = TRUE; p = cmd+sizeof("I2CSPY1 fastwrite ")-1; for(i=0;i<4;i++) { /* init */ dac[i] = 0; pd[i] = 0; } for(i=0;i<4;i++) { if (UTIL1_ScanHex16uNumber(&p, &dac[i])!=ERR_OK) { break; } dac[i] &= 0xFFF; /* ensure it is 12 bits */ } if (i!=4) { CLS1_SendStr((unsigned char*)"**** Not enough values, 4 expected.\r\n", io->stdErr); return ERR_FAILED; } if (MPC4728_FastWrite(dac, sizeof(dac), pd, sizeof(pd))!=ERR_OK) { CLS1_SendStr((unsigned char*)"**** FastWrite failed.\r\n", io->stdErr); return ERR_FAILED; } else { return ERR_OK; } } return ERR_OK; }
byte BL_ParseCommand(const unsigned char *cmd, bool *handled, CLS1_ConstStdIOType *io) { if (UTIL1_strcmp((char*)cmd, CLS1_CMD_HELP)==0 || UTIL1_strcmp((char*)cmd, "BL help")==0) { BL_PrintHelp(io); *handled = TRUE; return ERR_OK; } else if ((UTIL1_strcmp((char*)cmd, CLS1_CMD_STATUS)==0) || (UTIL1_strcmp((char*)cmd, "BL status")==0)) { BL_PrintStatus(io); *handled = TRUE; return ERR_OK; } else if ((UTIL1_strcmp((char*)cmd, "BL erase")==0)) { *handled = TRUE; return BL_EraseAppFlash(io); } else if ((UTIL1_strcmp((char*)cmd, "BL restart")==0)) { #if 0 uint32_t startup; *handled = TRUE; startup = ((uint32_t*)BL_FLASH_VECTOR_TABLE)[1]; ((void(*)(void))startup)(); /* Jump to startup code */ #else KIN1_SoftwareReset(); #endif /* will never get here! */ return ERR_OK; } else if ((UTIL1_strcmp((char*)cmd, "BL load s19")==0)) { *handled = TRUE; return BL_LoadS19(io); } return ERR_OK; /* no error */ }
uint8_t APP_ParseCommand(const unsigned char *cmd, bool *handled, const CLS1_StdIOType *io) { uint8_t res = ERR_OK; if (UTIL1_strcmp((char*)cmd, (char*)CLS1_CMD_HELP)==0 || UTIL1_strcmp((char*)cmd, (char*)"app help")==0) { APP_PrintHelp(io); *handled = TRUE; } else if (UTIL1_strcmp((char*)cmd, (char*)CLS1_CMD_STATUS)==0 || UTIL1_strcmp((char*)cmd, (char*)"app status")==0) { APP_PrintStatus(io); *handled = TRUE; #if PL_HAS_LINE_SENSOR } else if (UTIL1_strcmp((char*)cmd, (char*)"app autocalib")==0) { AutoCalibrateReflectance(io); *handled = TRUE; #endif #if PL_APP_FOLLOW_OBSTACLE } else if (UTIL1_strcmp((char*)cmd, (char*)"app follow on")==0) { followObstacle = TRUE; *handled = TRUE; } else if (UTIL1_strcmp((char*)cmd, (char*)"app follow off")==0) { followObstacle = FALSE; *handled = TRUE; #endif } return res; }