#include "command_handler.h" //----------------------------------------------------------------------------- void Command_Handler::Update() { Display* ourDisplay = parent->GetModule(IO_DISPLAY_MAIN); Keyboard* ourKeyboard = parent->GetModule(IO_KEYBOARD_MAIN); uint8 curInput = ourKeyboard->GetInput(); while(curInput != 0xEE && curInput != 0xFF) { if(curInput == 10) { ExecuteCommand(); for(uint8 i = 0; i < this->currentCommandLength; i++) { this->buffer[i] = NULL; ourDisplay->Print(" ", i + 1, 1); } this->currentCommandLength = 0; } else if(curInput == 11) { if(this->currentCommandLength > 0) { ourDisplay->Print(" ", this->currentCommandLength, 1); this->currentCommandLength--; this->buffer[currentCommandLength] = NULL; } } else if(curInput >= 0 && curInput <= 9) { if(this->currentCommandLength < COMMAND_BUFFER_SIZE) { this->buffer[this->currentCommandLength] = curInput; this->currentCommandLength++; ourDisplay->Print(curInput, this->currentCommandLength, 1); } } curInput = ourKeyboard->GetInput(); } } //----------------------------------------------------------------------------- void Command_Handler::ExecuteCommand() { if(this->buffer[0] == 1) { if(this->buffer[1] == 1) { this->displayDistanceSensors = true; this->displayPositionTracker = false; this->displayBallTracker = false; this->displayMouseSensors = false; } else if(this->buffer[1] == 2) { this->displayDistanceSensors = false; this->displayPositionTracker = true; this->displayBallTracker = false; this->displayMouseSensors = false; } else if(this->buffer[1] == 3) { this->displayDistanceSensors = false; this->displayPositionTracker = false; this->displayBallTracker = true; this->displayMouseSensors = false; } else if(this->buffer[1] == 4) { this->displayDistanceSensors = false; this->displayPositionTracker = false; this->displayBallTracker = false; this->displayMouseSensors = true; } else if(this->buffer[1] == 0) { this->displayDistanceSensors = false; this->displayPositionTracker = false; this->displayBallTracker = false; this->displayMouseSensors = false; } } else if(this->buffer[0] == 2) { Logic* ourLogic = parent->GetModule(IO_LOGIC_MAIN); if(this->buffer[1] == 1) { ourLogic->SetKeeper(true); } else if(this->buffer[1] == 2) { ourLogic->SetKeeper(false); } } else if(this->buffer[0] == 3) { if(this->buffer[1] == 1) { Navigator* ourNavigator = parent->GetModule(IO_NAVIGATOR_MAIN); ourNavigator->RotateTo(180, 200); } else if(this->buffer[1] == 2) { Aktuator* ourAktuator = parent->GetModule(IO_AKTUATOR_MAIN); ourAktuator->Kick(); } else if(this->buffer[1] == 3) { Navigator* ourNavigator = parent->GetModule(IO_NAVIGATOR_MAIN); ourNavigator->RotateTo(float(buffer[2]) * 100.0f + float(buffer[3]) * 10.0f + float(buffer[4]), 200); } else if(this->buffer[1] == 4) { Mouse_Sensor* ourLeftMouse = parent->GetModule(IO_SENSOR_MOUSE_LEFT); Mouse_Sensor* ourRightMouse = parent->GetModule(IO_SENSOR_MOUSE_RIGHT); this->ticksPerCmOffset += 2.5f; ourLeftMouse->AdjustPositionX(-3.88f * (TICKS_PER_CM + this->ticksPerCmOffset)); ourLeftMouse->AdjustPositionY(-3.88f * (TICKS_PER_CM + this->ticksPerCmOffset)); ourRightMouse->AdjustPositionX(-3.88f * (TICKS_PER_CM + this->ticksPerCmOffset)); ourRightMouse->AdjustPositionY(3.88f * (TICKS_PER_CM + this->ticksPerCmOffset)); } else if(this->buffer[1] == 5) { Mouse_Sensor* ourLeftMouse = parent->GetModule(IO_SENSOR_MOUSE_LEFT); Mouse_Sensor* ourRightMouse = parent->GetModule(IO_SENSOR_MOUSE_RIGHT); this->ticksPerCmOffset -= 2.5f; ourLeftMouse->AdjustPositionX(-3.88f * (TICKS_PER_CM + this->ticksPerCmOffset)); ourLeftMouse->AdjustPositionY(-3.88f * (TICKS_PER_CM + this->ticksPerCmOffset)); ourRightMouse->AdjustPositionX(-3.88f * (TICKS_PER_CM + this->ticksPerCmOffset)); ourRightMouse->AdjustPositionY(3.88f * (TICKS_PER_CM + this->ticksPerCmOffset)); } } else if(this->buffer[0] == 4) { Navigator* ourNavigator = parent->GetModule(IO_NAVIGATOR_MAIN); int16 speed = 200; switch(this->buffer[1]) { case 1: ourNavigator->Drive(225, 0, speed, 0); break; case 2: ourNavigator->Drive(180, 0, speed, 0); break; case 3: ourNavigator->Drive(135, 0, speed, 0); break; case 4: ourNavigator->Drive(270, 0, speed, 0); break; case 5: ourNavigator->Rotate(DEFAULT_ROTATION_SPEED); break; case 6: ourNavigator->Drive(90, 0, speed, 0); break; case 7: ourNavigator->Drive(315, 0, speed, 0); break; case 8: ourNavigator->Drive(0, 0, speed, 0); break; case 9: ourNavigator->Drive(45, 0, speed, 0); break; case 0: ourNavigator->Stop(); break; } } else if(this->buffer[0] == 5) { Position_Tracker* ourPositionTracker = parent->GetModule(IO_POSITION_TRACKER_MAIN); if(this->buffer[1] == 1) { ourPositionTracker->SetPosition(float(), ourPositionTracker->GetPositionY(), ourPositionTracker->GetOrientation()); } else if(this->buffer[1] == 0) { ourPositionTracker->SetPosition(0, 0, 0); } } else if(this->buffer[0] == 6) { if(this->buffer[1] == 1) { Wireless* ourWireless = parent->GetModule(IO_WIRELESS_MAIN); ourWireless->Send("Heyho!"); } } } //----------------------------------------------------------------------------- void Command_Handler::PrintCommand() { Display* ourDisplay = parent->GetModule(IO_DISPLAY_MAIN); for(uint8 i = 0; i < currentCommandLength; i++) { ourDisplay->Print(this->buffer[i], i + 1, 1); } }