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 "ariaOSDef.h"
00027 #include "ArExport.h"
00028 #include "ArCommands.h"
00029 #include "ArRobot.h"
00030 #include "ArTCM2.h"
00031
00032 AREXPORT ArTCM2::ArTCM2(ArRobot *robot) :
00033 myPacketHandlerCB(this, &ArTCM2::packetHandler)
00034 {
00035 myRobot = robot;
00036 myPacketHandlerCB.setName("ArTCM2");
00037 if (myRobot != NULL)
00038 myRobot->addPacketHandler(&myPacketHandlerCB);
00039
00040 }
00041
00042 AREXPORT ArTCM2::~ArTCM2()
00043 {
00044 if (myRobot != NULL)
00045 myRobot->remPacketHandler(&myPacketHandlerCB);
00046 }
00047
00048 AREXPORT bool ArTCM2::packetHandler(ArRobotPacket *packet)
00049 {
00050 if (packet->getID() != 0xC0)
00051 return false;
00052
00053 myCompass = ArMath::fixAngle(packet->bufToByte2() / 10.0);
00054 myPitch = ArMath::fixAngle(packet->bufToByte2() / 10.0);
00055 myRoll = ArMath::fixAngle(packet->bufToByte2() / 10.0);
00056 myXMag = packet->bufToByte2() / 100.0;
00057 myYMag = packet->bufToByte2() / 100.0;
00058 myZMag = packet->bufToByte2() / 100.0;
00059 myTemperature = packet->bufToByte2() / 10.0;
00060 myError = packet->bufToByte2();
00061 myCalibrationH = packet->bufToByte();
00062 myCalibrationV = packet->bufToByte();
00063 myCalibrationM = packet->bufToByte2() / 100.0;
00064
00065 if (myTimeLastPacket != time(NULL))
00066 {
00067 myTimeLastPacket = time(NULL);
00068 myPacCount = myPacCurrentCount;
00069 myPacCurrentCount = 0;
00070 }
00071 myPacCurrentCount++;
00072 return true;
00073 }
00074
00075 AREXPORT int ArTCM2::getPacCount()
00076 {
00077 if (myTimeLastPacket == time(NULL))
00078 return myPacCount;
00079 if (myTimeLastPacket == time(NULL) - 1)
00080 return myPacCurrentCount;
00081 return 0;
00082 }