00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include "ArExport.h"
00027 #include "ariaOSDef.h"
00028 #include "ArRobotJoyHandler.h"
00029 #include "ArRobot.h"
00030 #include "ArCommands.h"
00031
00032 AREXPORT ArRobotJoyHandler::ArRobotJoyHandler(ArRobot *robot) :
00033 myHandleJoystickPacketCB(this, &ArRobotJoyHandler::handleJoystickPacket),
00034 myConnectCB(this, &ArRobotJoyHandler::connectCallback)
00035 {
00036 myRobot = robot;
00037
00038 myHandleJoystickPacketCB.setName("ArRobotJoyHandler");
00039 myRobot->addConnectCB(&myConnectCB);
00040 myRobot->addPacketHandler(&myHandleJoystickPacketCB, ArListPos::FIRST);
00041 if (myRobot->isConnected())
00042 connectCallback();
00043
00044 myStarted.setToNow();
00045 myButton1 = 0;
00046 myButton2 = 0;
00047 myJoyX = 0;
00048 myJoyY = 0;
00049 myThrottle = 1;
00050 myGotData = false;
00051 }
00052
00053 AREXPORT ArRobotJoyHandler::~ArRobotJoyHandler()
00054 {
00055 myRobot->remConnectCB(&myConnectCB);
00056 myRobot->remPacketHandler(&myHandleJoystickPacketCB);
00057 }
00058
00059
00060 AREXPORT void ArRobotJoyHandler::connectCallback(void)
00061 {
00062 myRobot->comInt(ArCommands::JOYINFO, 2);
00063 }
00064
00065 AREXPORT bool ArRobotJoyHandler::handleJoystickPacket(ArRobotPacket *packet)
00066 {
00067
00068 if (packet->getID() != 0xF8)
00069 return false;
00070
00071 myDataReceived.setToNow();
00072
00073 if (packet->bufToUByte() != 0)
00074 myButton1 = true;
00075 else
00076 myButton1 = false;
00077
00078 if (packet->bufToUByte() != 0)
00079 myButton2 = true;
00080 else
00081 myButton2 = false;
00082
00083
00084 myJoyX = -((double)packet->bufToUByte2() - 512.0) / 512.0;
00085 myJoyY = ((double)packet->bufToUByte2() - 512.0) / 512.0;
00086
00087 myThrottle = (double)packet->bufToUByte2() / 1024.0;
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097 if (!myGotData)
00098 {
00099 ArLog::log(ArLog::Verbose, "Received joystick information from the robot");
00100 myGotData = true;
00101 }
00102 return true;
00103 }
00104
00105 AREXPORT void ArRobotJoyHandler::getDoubles(double *x, double *y, double *z)
00106 {
00107 if (x != NULL)
00108 *x = myJoyX;
00109 if (y != NULL)
00110 *y = myJoyY;
00111 if (z != NULL)
00112 *z = myThrottle;
00113 }