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; }
void RADIO_DataIndicationPacket(tRxPacket *sRxPacket) { if (sRxPacket->u8Status==SMAC1_TIMEOUT) { /* Put timeout condition code here */ LED1_Neg(); LED2_Neg(); /* indicator for bad or no communication */ EVNT_SetEvent(EVNT_RADIO_TIMEOUT); } else if (sRxPacket->u8Status == SMAC1_SUCCESS) { /* good packet received: handle it. */ if (RADIO_isSniffing) { QueueMessage(RADIO_QUEUE_MSG_SNIFF, (const char*)sRxPacket->pu8Data, sRxPacket->u8DataLength); } /* check if it is the packet we expect...*/ if ( RADIO_AppStatus==RADIO_WAITING_FOR_ACK && UTIL1_strncmp((char*)sRxPacket->pu8Data, RADIO_PREFIX_STR RADIO_ACK_STR, sizeof(RADIO_PREFIX_STR RADIO_ACK_STR)-1)==0 ) /* is it our acknowledge packet? */ { EVNT_SetEvent(EVNT_RADIO_ACK); } else if (UTIL1_strncmp((char*)sRxPacket->pu8Data, RADIO_PREFIX_STR, sizeof(RADIO_PREFIX_STR)-1)==0) { #if PL_HAS_REMOTE && PL_HAS_MOTOR /*! \todo Implement your own message handling */ if (UTIL1_strncmp((char*)sRxPacket->pu8Data, RADIO_PREFIX_STR REMOTE_ACCEL_PREFIX, sizeof(RADIO_PREFIX_STR REMOTE_ACCEL_PREFIX)-1)==0) { QueueMessage(RADIO_QUEUE_MSG_ACCEL, (const char*)sRxPacket->pu8Data, sRxPacket->u8DataLength); } #endif EVNT_SetEvent(EVNT_RADIO_DATA); } else { /* unknown packet? */ EVNT_SetEvent(EVNT_RADIO_UNKNOWN); } } else if (sRxPacket->u8Status==SMAC1_OVERFLOW) { /* received packet, but it was longer than what we expect. */ EVNT_SetEvent(EVNT_RADIO_OVERFLOW); LED1_Neg(); LED2_Neg(); /* indicator for bad or no communication */ } }
uint8_t MOT_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*)"motor help")==0) { MOT_PrintHelp(io); *handled = TRUE; } else if (UTIL1_strcmp((char*)cmd, (char*)CLS1_CMD_STATUS)==0 || UTIL1_strcmp((char*)cmd, (char*)"motor status")==0) { MOT_PrintStatus(io); *handled = TRUE; } else if (UTIL1_strcmp((char*)cmd, (char*)"motor L forward")==0) { MOT_SetDirection(&motorL, MOT_DIR_FORWARD); *handled = TRUE; } else if (UTIL1_strcmp((char*)cmd, (char*)"motor R forward")==0) { MOT_SetDirection(&motorR, MOT_DIR_FORWARD); *handled = TRUE; } else if (UTIL1_strcmp((char*)cmd, (char*)"motor both go")==0) { MOT_StartMotors(); *handled = TRUE; } else if (UTIL1_strcmp((char*)cmd, (char*)"motor both fw")==0) { MOT_DriveForward(); *handled = TRUE; } else if (UTIL1_strcmp((char*)cmd, (char*)"motor both bw")==0) { MOT_DriveBackward(); *handled = TRUE; } else if (UTIL1_strcmp((char*)cmd, (char*)"motor stop")==0) { MOT_StopMotors(); *handled = TRUE; } else if (UTIL1_strcmp((char*)cmd, (char*)"motor L backward")==0) { MOT_SetDirection(&motorL, MOT_DIR_BACKWARD); *handled = TRUE; } else if (UTIL1_strcmp((char*)cmd, (char*)"motor R backward")==0) { MOT_SetDirection(&motorR, MOT_DIR_BACKWARD); *handled = TRUE; } else if (UTIL1_strncmp((char*)cmd, (char*)"motor L duty ", sizeof("motor L duty ")-1)==0) { p = cmd+sizeof("motor L duty"); if (UTIL1_xatoi(&p, &val)==ERR_OK && val >=-100 && val<=100) { MOT_SetSpeedPercent(&motorL, (MOT_SpeedPercent)val); *handled = TRUE; } else { CLS1_SendStr((unsigned char*)"Wrong argument, must be in the range -100..100\r\n", io->stdErr); res = ERR_FAILED; } } else if (UTIL1_strncmp((char*)cmd, (char*)"motor R duty ", sizeof("motor R duty ")-1)==0) { p = cmd+sizeof("motor R duty"); if (UTIL1_xatoi(&p, &val)==ERR_OK && val >=-100 && val<=100) { MOT_SetSpeedPercent(&motorR, (MOT_SpeedPercent)val); *handled = TRUE; } else { CLS1_SendStr((unsigned char*)"Wrong argument, must be in the range -100..100\r\n", io->stdErr); res = ERR_FAILED; } } return res; }
static uint8_t ParsePidParameter(PID_Config *config, const unsigned char *cmd, bool *handled, const CLS1_StdIOType *io) { const unsigned char *p; uint8_t val8u; uint32_t val32u; uint8_t res = ERR_OK; if (UTIL1_strncmp((char*)cmd, (char*)"p ", sizeof("p ")-1)==0) { p = cmd+sizeof("p"); if (UTIL1_ScanDecimal32uNumber(&p, &val32u)==ERR_OK) { config->pFactor100 = val32u; *handled = TRUE; } else { CLS1_SendStr((unsigned char*)"Wrong argument\r\n", io->stdErr); res = ERR_FAILED; } } else if (UTIL1_strncmp((char*)cmd, (char*)"i ", sizeof("i ")-1)==0) { p = cmd+sizeof("i"); if (UTIL1_ScanDecimal32uNumber(&p, &val32u)==ERR_OK) { config->iFactor100 = val32u; *handled = TRUE; } else { CLS1_SendStr((unsigned char*)"Wrong argument\r\n", io->stdErr); res = ERR_FAILED; } } else if (UTIL1_strncmp((char*)cmd, (char*)"d ", sizeof("d ")-1)==0) { p = cmd+sizeof("d"); if (UTIL1_ScanDecimal32uNumber(&p, &val32u)==ERR_OK) { config->dFactor100 = val32u; *handled = TRUE; } else { CLS1_SendStr((unsigned char*)"Wrong argument\r\n", io->stdErr); res = ERR_FAILED; } } else if (UTIL1_strncmp((char*)cmd, (char*)"w ", sizeof("w ")-1)==0) { p = cmd+sizeof("w"); if (UTIL1_ScanDecimal32uNumber(&p, &val32u)==ERR_OK) { config->iAntiWindup = val32u; *handled = TRUE; } else { CLS1_SendStr((unsigned char*)"Wrong argument\r\n", io->stdErr); res = ERR_FAILED; } } else if (UTIL1_strncmp((char*)cmd, (char*)"speed ", sizeof("speed ")-1)==0) { p = cmd+sizeof("speed"); if (UTIL1_ScanDecimal8uNumber(&p, &val8u)==ERR_OK && val8u<=100) { config->maxSpeedPercent = val8u; *handled = TRUE; } else { CLS1_SendStr((unsigned char*)"Wrong argument\r\n", io->stdErr); res = ERR_FAILED; } } 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 RADIO_ParseCommand(const unsigned char *cmd, bool *handled, const FSSH1_StdIOType *io) { uint8_t res = ERR_OK; long val; const char *p; if (UTIL1_strcmp(cmd, FSSH1_CMD_HELP)==0 || UTIL1_strcmp(cmd, "radio help")==0) { RADIO_PrintHelp(io); *handled = TRUE; } else if (UTIL1_strcmp(cmd, FSSH1_CMD_STATUS)==0 || UTIL1_strcmp(cmd, "radio status")==0) { RADIO_PrintStatus(io); *handled = TRUE; } else if (UTIL1_strcmp(cmd, "radio on")==0) { RADIO_isOn = TRUE; *handled = TRUE; } else if (UTIL1_strcmp(cmd, "radio off")==0) { RADIO_isOn = FALSE; *handled = TRUE; } else if (UTIL1_strcmp(cmd, "radio sniff on")==0) { RADIO_isSniffing = TRUE; *handled = TRUE; } else if (UTIL1_strcmp(cmd, "radio sniff off")==0) { RADIO_isSniffing = FALSE; *handled = TRUE; } else if (UTIL1_strncmp(cmd, "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 { FSSH1_SendStr("Wrong argument, must be in the range 0..15\r\n", io->stdErr); res = ERR_FAILED; } } else if (UTIL1_strncmp(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 { FSSH1_SendStr("Wrong argument, must be in the range 0..15\r\n", io->stdErr); res = ERR_FAILED; } } else if (UTIL1_strncmp(cmd, "radio send", sizeof("radio send")-1)==0) { p = cmd+sizeof("radio send"); RADIO_SendString(p); *handled = TRUE; } return res; }
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; }
bool CompareString(uint8_t* bfr, const uint8_t* req, const uint8_t length) { if (ReadSim900(bfr)) { if (UTIL1_strncmp(bfr, req, length) == 0) // is equal return TRUE; } return FALSE; }
uint8_t ESP_GetIPAddrString(uint8_t *ipBuf, size_t ipBufSize) { /* AT+CIFSR */ uint8_t rxBuf[32]; uint8_t res; const unsigned char *p; res = ESP_SendATCommand("AT+CIFSR\r\n", rxBuf, sizeof(rxBuf), NULL, ESP_DEFAULT_TIMEOUT_MS, NULL); if (res!=ERR_OK) { if (UTIL1_strtailcmp(rxBuf, "\r\n")) { res = ERR_OK; } } if (res==ERR_OK) { if (UTIL1_strncmp(rxBuf, "AT+CIFSR\r\r\n", sizeof("AT+CIFSR\r\r\n")-1)==0) { /* check for beginning of response */ UTIL1_strCutTail(rxBuf, "\r\n"); /* cut tailing response */ p = rxBuf+sizeof("AT+CIFSR\r\r\n")-1; /* skip beginning */ SkipNewLines(&p); UTIL1_strcpy(ipBuf, ipBufSize, p); /* copy IP information string */ } else { res = ERR_FAILED; } } if (res!=ERR_OK) { UTIL1_strcpy(ipBuf, ipBufSize, "ERROR"); } return res; }
uint8_t ESP_GetFirmwareVersionString(uint8_t *fwBuf, size_t fwBufSize) { /* AT+GMR */ uint8_t rxBuf[32]; uint8_t res; const unsigned char *p; res = ESP_SendATCommand("AT+GMR\r\n", rxBuf, sizeof(rxBuf), "\r\n\r\nOK\r\n", ESP_DEFAULT_TIMEOUT_MS, NULL); if (res!=ERR_OK) { if (UTIL1_strtailcmp(rxBuf, "\r\n\r\nOK\r\n")) { res = ERR_OK; } } if (res==ERR_OK) { if (UTIL1_strncmp(rxBuf, "AT+GMR\r\r\n", sizeof("AT+GMR\r\r\n")-1)==0) { /* check for beginning of response */ UTIL1_strCutTail(rxBuf, "\r\n\r\nOK\r\n"); /* cut tailing response */ p = rxBuf+sizeof("AT+GMR\r\r\n")-1; /* skip beginning */ UTIL1_strcpy(fwBuf, fwBufSize, p); /* copy firmware information string */ } else { res = ERR_FAILED; } } if (res!=ERR_OK) { UTIL1_strcpy(fwBuf, fwBufSize, "ERROR"); /* default error */ } return res; }
uint8_t RADIO_ParseCommand(const unsigned char *cmd, bool *handled, const CLS1_StdIOType *io) { uint8_t res = ERR_OK; const unsigned char *p; uint8_t val; if (UTIL1_strcmp((char*)cmd, (char*)CLS1_CMD_HELP)==0 || UTIL1_strcmp((char*)cmd, (char*)"radio help")==0) { RADIO_PrintHelp(io); *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 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_ScanDecimal8uNumber(&p, &val)==ERR_OK && val>=0 && val<=0x7F) { RADIO_SetChannel(val); *handled = TRUE; } else { CLS1_SendStr((unsigned char*)"Wrong argument, must be in the range 0..128\r\n", io->stdErr); res = ERR_FAILED; } } return res; }
static uint8_t ReadIntoIPDBuffer(uint8_t *buf, size_t bufSize, uint8_t *p, uint16_t msgSize, uint16_t msTimeout, const CLS1_StdIOType *io) { uint8_t ch; size_t nofInBuf; int timeout; nofInBuf = p-buf; bufSize -= nofInBuf; /* take into account what we already have in buffer */ timeout = msTimeout; while (msgSize>0 && bufSize>0) { if (AS2_GetCharsInRxBuf()>0) { (void)AS2_RecvChar(&ch); *p = ch; if (io!=NULL) { /* copy on console */ io->stdOut(ch); } p++; *p = '\0'; /* terminate */ nofInBuf++; msgSize--; bufSize--; } else { /* check in case we recveive less characters than expected, happens for POST? */ if (nofInBuf>6 && UTIL1_strncmp(&p[-6], "\r\nOK\r\n", sizeof("\r\nOK\r\n")-1)==0) { break; } else { timeout -= 10; WAIT1_WaitOSms(10); if (timeout<0) { return ERR_BUSY; } } } } return ERR_OK; }
uint8_t BLEUART_CMDMODE_ParseCommand(const unsigned char *cmd, bool *handled, const CLS1_StdIOType *io) { uint8_t res = ERR_OK; if (UTIL1_strcmp((char*)cmd, CLS1_CMD_HELP)==0 || UTIL1_strcmp((char*)cmd, "uart help")==0) { CLS1_SendHelpStr((unsigned char*)"uart", (const unsigned char*)"Group of Adafruit BLE 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*)" enable", (unsigned char*)"Enable BLE UART\r\n", io->stdOut); CLS1_SendHelpStr((unsigned char*)" disable", (unsigned char*)"Disable BLE UART\r\n", io->stdOut); CLS1_SendHelpStr((unsigned char*)" tx <string>", (unsigned char*)"Send string\r\n", io->stdOut); *handled = TRUE; return ERR_OK; } else if ((UTIL1_strcmp((char*)cmd, CLS1_CMD_STATUS)==0) || (UTIL1_strcmp((char*)cmd, "uart status")==0)) { *handled = TRUE; return PrintStatus(io); } else if (UTIL1_strcmp((char*)cmd, "uart enable")==0) { isEnabled = TRUE; *handled = TRUE; } else if (UTIL1_strcmp((char*)cmd, "uart disable")==0) { isEnabled = FALSE; *handled = TRUE; } else if (UTIL1_strncmp((char*)cmd, "uart tx ", sizeof("uart tx ") - 1) == 0) { *handled = TRUE; taskENTER_CRITICAL(); UTIL1_strcpy(txBuffer, sizeof(txBuffer), cmd+sizeof("uart tx ")-1); UTIL1_strcat(txBuffer, sizeof(txBuffer), "\\n\n"); /* add newline */ taskEXIT_CRITICAL(); } return res; /* no error */ }
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; }
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; }
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; }
int strindex(char *s, char *t) { uint16_t i,n; n=UTIL1_strlen(t); for(i=0;*(s+i); i++) { if (UTIL1_strncmp(s+i,t,n) == 0) return i; } return -1; }
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; }
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 fw ", sizeof("pid fw ")-1)==0) { res = ParsePidParameter(&lineFwConfig, cmd+sizeof("pid fw ")-1, handled, io); #if PL_GO_DEADEND_BW } else if (UTIL1_strncmp((char*)cmd, (char*)"pid bw ", sizeof("pid bw ")-1)==0) { res = ParsePidParameter(&lineBwConfig, cmd+sizeof("pid bw ")-1, handled, io); #endif #if PL_HAS_QUADRATURE } else if (UTIL1_strncmp((char*)cmd, (char*)"pid pos ", sizeof("pid pos ")-1)==0) { res = ParsePidParameter(&posConfig, cmd+sizeof("pid pos ")-1, handled, io); #endif } 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 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; }
static uint8_t DateCmd(const unsigned char *cmd, CLS1_ConstStdIOType *io) { uint8_t day, month; uint16_t year; const unsigned char *p; uint8_t res = ERR_OK; bool isOn; p = cmd; if (UTIL1_strncmp((char*)cmd, " on ", sizeof(" on ")-1)==0) { isOn = TRUE; p += sizeof(" on ")-1; } else if (UTIL1_strncmp((char*)cmd, " off ", sizeof(" off ")-1)==0) { isOn = FALSE; p += sizeof(" off ")-1; } else { CLS1_SendStr((unsigned char*)"*** 'on' or 'off' expected\r\n", io->stdErr); return ERR_FAILED; /* wrong format */ } if (UTIL1_ScanDate(&p, &day, &month, &year)==ERR_OK) { /* format fine */ if (isOn) { res = SetOnDate(day, month, year); } else { res = SetOffDate(day, month, year); } if (res != ERR_OK) { CLS1_SendStr((unsigned char*)"*** Failure setting schedule time\r\n", io->stdErr); res = ERR_FAILED; } } else { CLS1_SendStr((unsigned char*)"*** Error while reading command: ", io->stdErr); CLS1_SendStr(cmd, io->stdErr); CLS1_SendStr((unsigned char*)"\r\n", io->stdErr); res = ERR_FAILED; } return res; }
uint8_t DRV_ParseCommand(const unsigned char *cmd, bool *handled, const CLS1_StdIOType *io) { uint8_t res = ERR_OK; const uint8_t *p; int32_t val32; if (UTIL1_strcmp((char*)cmd, (char*)CLS1_CMD_HELP)==0 || UTIL1_strcmp((char*)cmd, (char*)"drive help")==0) { DRV_PrintHelp(io); *handled = TRUE; } else if (UTIL1_strcmp((char*)cmd, (char*)CLS1_CMD_STATUS)==0 || UTIL1_strcmp((char*)cmd, (char*)"drive status")==0) { DRV_PrintStatus(io); *handled = TRUE; } else if (UTIL1_strncmp((char*)cmd, (char*)"drive speed L", sizeof("drive speed L")-1)==0) { p = cmd+sizeof("drive speed L"); if (UTIL1_ScanDecimal32sNumber(&p, &val32)==ERR_OK) { DRV_SpeedLeft = val32; *handled = TRUE; } else { res = ERR_FAILED; } } else if (UTIL1_strncmp((char*)cmd, (char*)"drive speed R", sizeof("drive speed R")-1)==0) { p = cmd+sizeof("drive speed R"); if (UTIL1_ScanDecimal32sNumber(&p, &val32)==ERR_OK) { DRV_SpeedRight = val32; *handled = TRUE; } else { res = ERR_FAILED; } } else if (UTIL1_strcmp((char*)cmd, (char*)"drive speed on")==0) { DRV_EnableDisable(TRUE); *handled = TRUE; } else if (UTIL1_strcmp((char*)cmd, (char*)"drive speed off")==0) { DRV_EnableDisable(FALSE); *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 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; }
static uint8_t SHELL_ParseCommand(const unsigned char *cmd, bool *handled, const CLS1_StdIOType *io) { uint32_t val; const unsigned char *p; if (UTIL1_strcmp((char*)cmd, CLS1_CMD_HELP)==0 || UTIL1_strcmp((char*)cmd, "Shell help")==0) { *handled = TRUE; return SHELL_PrintHelp(io); } else if (UTIL1_strcmp((char*)cmd, CLS1_CMD_STATUS)==0 || UTIL1_strcmp((char*)cmd, "Shell status")==0) { *handled = TRUE; return SHELL_PrintStatus(io); } else if (UTIL1_strncmp(cmd, "Shell val ", sizeof("Shell val ")-1)==0) { p = cmd+sizeof("Shell val ")-1; if (UTIL1_xatoi(&p, &val)==ERR_OK) { SHELL_val = val; *handled = TRUE; } } return ERR_OK; }
uint8_t ESP_GetCIPMUXString(uint8_t *cipmuxBuf, size_t cipmuxBufSize) { /* AT+CIPMUX? */ uint8_t rxBuf[32]; uint8_t res; const unsigned char *p; res = ESP_SendATCommand("AT+CIPMUX?\r\n", rxBuf, sizeof(rxBuf), "\r\n\r\nOK\r\n", ESP_DEFAULT_TIMEOUT_MS, NULL); if (res==ERR_OK) { if (UTIL1_strncmp(rxBuf, "AT+CIPMUX?\r\r\n+CIPMUX:", sizeof("AT+CIPMUX?\r\r\n+CIPMUX:")-1)==0) { /* check for beginning of response */ UTIL1_strCutTail(rxBuf, "\r\n\r\nOK\r\n"); /* cut tailing response */ p = rxBuf+sizeof("AT+CIPMUX?\r\r\n+CIPMUX:")-1; /* skip beginning */ UTIL1_strcpy(cipmuxBuf, cipmuxBufSize, p); /* copy IP information string */ } else { res = ERR_FAILED; } } if (res!=ERR_OK) { UTIL1_strcpy(cipmuxBuf, cipmuxBufSize, "ERROR"); } return res; }
uint8_t ESP_Restart(const CLS1_StdIOType *io, uint16_t timeoutMs) { /* AT+RST */ uint8_t rxBuf[sizeof("AT+RST\r\r\n\r\nOK\r\n")]; uint8_t res; uint8_t buf[64]; AS2_ClearRxBuf(); /* clear buffer */ res = ESP_SendATCommand("AT+RST\r\n", rxBuf, sizeof(rxBuf), "AT+RST\r\r\n\r\nOK\r\n", ESP_DEFAULT_TIMEOUT_MS, io); if (res==ERR_OK) { for(;;) { ESP_ReadCharsUntil(buf, sizeof(buf), '\n', 1000); if (io!=NULL) { CLS1_SendStr(buf, io->stdOut); } if (UTIL1_strncmp(buf, "ready", sizeof("ready")-1)==0) { /* wait until ready message from module */ break; /* module has restarted */ } } } AS2_ClearRxBuf(); /* clear buffer */ return res; }
uint8_t ESP_ParseCommand(const unsigned char *cmd, bool *handled, const CLS1_StdIOType *io) { uint32_t val; uint8_t res; const unsigned char *p; uint8_t pwd[24], ssid[24]; if (UTIL1_strcmp((char*)cmd, CLS1_CMD_HELP)==0 || UTIL1_strcmp((char*)cmd, "ESP help")==0) { *handled = TRUE; res = ESP_PrintHelp(io); } else if (UTIL1_strcmp((char*)cmd, CLS1_CMD_STATUS)==0 || UTIL1_strcmp((char*)cmd, "ESP status")==0) { *handled = TRUE; res = ESP_PrintStatus(io); } else if (UTIL1_strncmp((char*)cmd, "ESP send ", sizeof("ESP send ")-1)==0) { *handled = TRUE; p = cmd+sizeof("ESP send ")-1; (void)ESP_SendStr(p, io); } else if (UTIL1_strcmp((char*)cmd, "ESP test")==0) { *handled = TRUE; if (ESP_TestAT()!=ERR_OK) { CLS1_SendStr("TEST failed!\r\n", io->stdErr); ESP_JoinAP("ZRJ", "1234567890", 3, io); res = ERR_FAILED; } else { CLS1_SendStr("TEST ok!\r\n", io->stdOut); } } else if (UTIL1_strcmp((char*)cmd, "ESP listAP")==0) { *handled = TRUE; (void)ESP_SendStr("AT+CWLAP", io); /* AT + CWLAP response + CWLAP: <ecn>, <ssid>, <rssi> [, <mode>] OK Or Fails, the return ERROR <Ecn> 0 OPEN 1 WEP 2 WPA_PSK 3 WPA2_PSK 4 WPA_WPA2_PSK <Ssid> string parameter, the access point name <Rssi> signal strength <Mode> 0: manually connect 1: An automatic connection */ return ERR_OK; } else if (UTIL1_strncmp((char*)cmd, "ESP connectAP ", sizeof("ESP connectAP ")-1)==0) { *handled = TRUE; p = cmd+sizeof("ESP connectAP ")-1; ssid[0] = '\0'; pwd[0] = '\0'; res = UTIL_ScanDoubleQuotedString(&p, ssid, sizeof(ssid)); if (res==ERR_OK && *p!='\0' && *p==',') { p++; /* skip comma */ res = UTIL_ScanDoubleQuotedString(&p, pwd, sizeof(pwd)); } else { CLS1_SendStr("Comma expected between strings!\r\n", io->stdErr); res = ERR_FAILED; } if (res==ERR_OK) { res = ESP_JoinAP(ssid, pwd, 3, io); } else { CLS1_SendStr("Wrong command format!\r\n", io->stdErr); res = ERR_FAILED; } } else if (UTIL1_strcmp((char*)cmd, "ESP server start")==0) { *handled = TRUE; res = ESP_StartWebServer(io); ESP_WebServerIsOn = res==ERR_OK; } else if (UTIL1_strcmp((char*)cmd, "ESP server stop")==0) { *handled = TRUE; ESP_WebServerIsOn = FALSE; } else if (UTIL1_strcmp((char*)cmd, "ESP restart")==0) { *handled = TRUE; ESP_Restart(io, 2000); } return res; }