uint8_t TURN_ParseCommand(const unsigned char *cmd, bool *handled, const CLS1_StdIOType *io) { uint8_t res = ERR_OK; const unsigned char *p; uint8_t val8u; uint16_t val16u; if (UTIL1_strcmp((char*)cmd, (char*)CLS1_CMD_HELP)==0 || UTIL1_strcmp((char*)cmd, (char*)"turn help")==0) { TURN_PrintHelp(io); *handled = TRUE; } else if (UTIL1_strcmp((char*)cmd, (char*)CLS1_CMD_STATUS)==0 || UTIL1_strcmp((char*)cmd, (char*)"turn status")==0) { TURN_PrintStatus(io); *handled = TRUE; } else if (UTIL1_strcmp((char*)cmd, (char*)"turn left")==0) { TURN_Turn(TURN_LEFT90, FALSE); TURN_Turn(TURN_STOP, FALSE); *handled = TRUE; } else if (UTIL1_strcmp((char*)cmd, (char*)"turn right")==0) { TURN_Turn(TURN_RIGHT90, FALSE); TURN_Turn(TURN_STOP, FALSE); *handled = TRUE; } else if (UTIL1_strcmp((char*)cmd, (char*)"turn around")==0) { TURN_Turn(TURN_LEFT180, FALSE); TURN_Turn(TURN_STOP, FALSE); *handled = TRUE; } else if (UTIL1_strcmp((char*)cmd, (char*)"turn forward")==0) { REF_ClearHistory(); /* clear values */ TURN_Turn(TURN_STEP_FW, FALSE); TURN_Turn(TURN_STOP, FALSE); CLS1_SendStr((unsigned char*)REF_LineKindStr(REF_HistoryLineKind()), CLS1_GetStdio()->stdOut); CLS1_SendStr((unsigned char*)"\r\n", CLS1_GetStdio()->stdOut); *handled = TRUE; } else if (UTIL1_strcmp((char*)cmd, (char*)"turn backward")==0) { TURN_Turn(TURN_STEP_BW, FALSE); TURN_Turn(TURN_STOP, FALSE); *handled = TRUE; } else if (UTIL1_strncmp((char*)cmd, (char*)"turn duty ", sizeof("turn duty ")-1)==0) { p = cmd+sizeof("turn duty"); if (UTIL1_ScanDecimal8uNumber(&p, &val8u)==ERR_OK && val8u<=100) { TURN_DutyPercent = val8u; *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*)"turn time ", sizeof("turn time ")-1)==0) { p = cmd+sizeof("turn time"); if (UTIL1_ScanDecimal16uNumber(&p, &val16u)==ERR_OK) { TURN_TimeMs = val16u; *handled = TRUE; } else { CLS1_SendStr((unsigned char*)"Wrong argument\r\n", io->stdErr); res = ERR_FAILED; } } else if (UTIL1_strncmp((char*)cmd, (char*)"turn step ", sizeof("turn step ")-1)==0) { p = cmd+sizeof("turn step"); if (UTIL1_ScanDecimal16uNumber(&p, &val16u)==ERR_OK) { TURN_StepMs = val16u; *handled = TRUE; } else { CLS1_SendStr((unsigned char*)"Wrong argument\r\n", io->stdErr); res = ERR_FAILED; } } return res; }
uint8_t TURN_ParseCommand(const unsigned char *cmd, bool *handled, const CLS1_StdIOType *io) { uint8_t res = ERR_OK; const unsigned char *p; #if !PL_HAS_QUADRATURE uint8_t val8u; #endif uint16_t val16u; if (UTIL1_strcmp((char*)cmd, (char*)CLS1_CMD_HELP)==0 || UTIL1_strcmp((char*)cmd, (char*)"turn help")==0) { TURN_PrintHelp(io); *handled = TRUE; } else if (UTIL1_strcmp((char*)cmd, (char*)CLS1_CMD_STATUS)==0 || UTIL1_strcmp((char*)cmd, (char*)"turn status")==0) { TURN_PrintStatus(io); *handled = TRUE; } else if (UTIL1_strcmp((char*)cmd, (char*)"turn left 45")==0) { TURN_Turn(TURN_LEFT45); TURN_Turn(TURN_STOP); *handled = TRUE; } else if (UTIL1_strcmp((char*)cmd, (char*)"turn left 90")==0) { TURN_Turn(TURN_LEFT90); TURN_Turn(TURN_STOP); *handled = TRUE; } else if (UTIL1_strcmp((char*)cmd, (char*)"turn right 45")==0) { TURN_Turn(TURN_RIGHT45); TURN_Turn(TURN_STOP); *handled = TRUE; } else if (UTIL1_strcmp((char*)cmd, (char*)"turn right 90")==0) { TURN_Turn(TURN_RIGHT90); TURN_Turn(TURN_STOP); *handled = TRUE; } else if (UTIL1_strcmp((char*)cmd, (char*)"turn around")==0) { TURN_Turn(TURN_LEFT180); TURN_Turn(TURN_STOP); *handled = TRUE; } else if (UTIL1_strcmp((char*)cmd, (char*)"turn forward")==0) { #if PL_APP_LINE_MAZE REF_ClearHistory(); /* clear values */ #endif TURN_Turn(TURN_STEP_FW); TURN_Turn(TURN_STOP); #if PL_APP_LINE_MAZE CLS1_SendStr((unsigned char*)REF_LineKindStr(REF_HistoryLineKind()), CLS1_GetStdio()->stdOut); CLS1_SendStr((unsigned char*)"\r\n", CLS1_GetStdio()->stdOut); #endif *handled = TRUE; } else if (UTIL1_strcmp((char*)cmd, (char*)"turn backward")==0) { TURN_Turn(TURN_STEP_BW); TURN_Turn(TURN_STOP); *handled = TRUE; #if PL_HAS_QUADRATURE } else if (UTIL1_strncmp((char*)cmd, (char*)"turn steps90 ", sizeof("turn steps90 ")-1)==0) { p = cmd+sizeof("turn steps90"); if (UTIL1_ScanDecimal16uNumber(&p, &val16u)==ERR_OK) { TURN_Steps90 = val16u; *handled = TRUE; } else { CLS1_SendStr((unsigned char*)"Wrong argument\r\n", io->stdErr); res = ERR_FAILED; } } else if (UTIL1_strncmp((char*)cmd, (char*)"turn stepsfw ", sizeof("turn stepsfw ")-1)==0) { p = cmd+sizeof("turn stepsfw"); if (UTIL1_ScanDecimal16uNumber(&p, &val16u)==ERR_OK) { TURN_StepsFwBw = val16u; *handled = TRUE; } else { CLS1_SendStr((unsigned char*)"Wrong argument\r\n", io->stdErr); res = ERR_FAILED; } #else } else if (UTIL1_strncmp((char*)cmd, (char*)"turn duty ", sizeof("turn duty ")-1)==0) { p = cmd+sizeof("turn duty"); if (UTIL1_ScanDecimal8uNumber(&p, &val8u)==ERR_OK && val8u<=100) { TURN_DutyPercent = val8u; *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*)"turn time90 ", sizeof("turn time90 ")-1)==0) { p = cmd+sizeof("turn time90"); if (UTIL1_ScanDecimal16uNumber(&p, &val16u)==ERR_OK) { TURN_Time90ms = val16u; *handled = TRUE; } else { CLS1_SendStr((unsigned char*)"Wrong argument\r\n", io->stdErr); res = ERR_FAILED; } } else if (UTIL1_strncmp((char*)cmd, (char*)"turn timefw ", sizeof("turn timefw ")-1)==0) { p = cmd+sizeof("turn timefw"); if (UTIL1_ScanDecimal16uNumber(&p, &val16u)==ERR_OK) { TURN_StepFwBwMs = val16u; *handled = TRUE; } else { CLS1_SendStr((unsigned char*)"Wrong argument\r\n", io->stdErr); res = ERR_FAILED; } #endif } return res; }