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); #if REF_START_STOP_CALIB } else if (UTIL1_strcmp((char*)cmd, "ref calib start")==0) { if (refState==REF_STATE_NOT_CALIBRATED || refState==REF_STATE_READY) { REF_CalibrateStartStop(); } else { CLS1_SendStr((unsigned char*)"ERROR: cannot start calibration, must not be calibrating or be ready.\r\n", io->stdErr); return ERR_FAILED; } *handled = TRUE; return ERR_OK; } else if (UTIL1_strcmp((char*)cmd, "ref calib stop")==0) { if (refState==REF_STATE_CALIBRATING) { REF_CalibrateStartStop(); } else { CLS1_SendStr((unsigned char*)"ERROR: can only stop if calibrating.\r\n", io->stdErr); return ERR_FAILED; } *handled = TRUE; return ERR_OK; #endif } return ERR_OK; }
void myEvents(EVNT_Handle event) { switch(event) { case EVNT_REF_START_STOP_CALIBRATION: REF_CalibrateStartStop(); break; } }
uint8_t REMOTE_HandleRemoteRxMessage(RAPP_MSG_Type type, uint8_t size, uint8_t *data, RNWK_ShortAddrType srcAddr, bool *handled, RPHY_PacketDesc *packet) { #if PL_CONFIG_HAS_SHELL uint8_t buf[48]; #endif uint8_t val; int16_t x, y, z; (void)size; (void)packet; switch(type) { #if PL_CONFIG_HAS_MOTOR case RAPP_MSG_TYPE_JOYSTICK_XY: /* values are -128...127 */ { int8_t x, y; int16_t x1000, y1000; *handled = TRUE; x = *data; /* get x data value */ y = *(data+1); /* get y data value */ if (REMOTE_isVerbose) { UTIL1_strcpy(buf, sizeof(buf), (unsigned char*)"x/y: "); UTIL1_strcatNum8s(buf, sizeof(buf), (int8_t)x); UTIL1_chcat(buf, sizeof(buf), ','); UTIL1_strcatNum8s(buf, sizeof(buf), (int8_t)y); UTIL1_strcat(buf, sizeof(buf), (unsigned char*)"\r\n"); SHELL_SendString(buf); } #if 0 /* using shell command */ UTIL1_strcpy(buf, sizeof(buf), (unsigned char*)"motor L duty "); UTIL1_strcatNum8s(buf, sizeof(buf), scaleSpeedToPercent(x)); SHELL_ParseCmd(buf); UTIL1_strcpy(buf, sizeof(buf), (unsigned char*)"motor R duty "); UTIL1_strcatNum8s(buf, sizeof(buf), scaleSpeedToPercent(y)); SHELL_ParseCmd(buf); #endif /* filter noise around zero */ if (x>-5 && x<5) { x = 0; } if (y>-5 && y<5) { y = 0; } x1000 = scaleJoystickTo1K(x); y1000 = scaleJoystickTo1K(y); if (REMOTE_useJoystick) { REMOTE_HandleMotorMsg(y1000, x1000, 0); /* first param is forward/backward speed, second param is direction */ } } break; #endif case RAPP_MSG_TYPE_JOYSTICK_BTN: *handled = TRUE; val = *data; /* get data value */ #if PL_CONFIG_HAS_SHELL && PL_CONFIG_HAS_BUZZER && PL_CONFIG_HAS_REMOTE if (val=='F') { /* F button, toggle remote*/ SHELL_ParseCmd((unsigned char*)"buzzer buz 300 500"); DRV_SetMode(DRV_MODE_SPEED); } else if (val=='G') { /* center joystick button: horn*/ SHELL_ParseCmd((unsigned char*)"buzzer buz 2000 300"); } else if (val=='A') { MAZE_ClearSolution(); MAZE_SetSolveAlgorithm(STRAIGHT_HAND); LF_StartFollowing(); } else if (val=='C') { /* 'C' button: motor stop*/ DRV_SetMode(DRV_MODE_STOP); } else if (val=='B') { /* 'B' button: start right-hand algorithm */ MAZE_ClearSolution(); MAZE_SetSolveAlgorithm(RIGHT_HAND); LF_StartFollowing(); } else if (val=='D') { /* 'D' button: start left-hand algorithm */ MAZE_ClearSolution(); MAZE_SetSolveAlgorithm(LEFT_HAND); LF_StartFollowing(); } else if (val=='E') { REF_CalibrateStartStop(); } #else *handled = FALSE; /* no shell and no buzzer? */ #endif break; default: break; } /* switch */ return ERR_OK; }