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 "ArRobotPacket.h"
00029 #include "stdio.h"
00030
00037 AREXPORT ArRobotPacket::ArRobotPacket(unsigned char sync1,
00038 unsigned char sync2) :
00039 ArBasePacket(265, 4, NULL, 2)
00040 {
00041 mySync1 = sync1;
00042 mySync2 = sync2;
00043 }
00044
00045 AREXPORT ArRobotPacket::~ArRobotPacket()
00046 {
00047 }
00048
00049 AREXPORT ArTypes::UByte ArRobotPacket::getID(void)
00050 {
00051 if (myLength >= 4)
00052 return myBuf[3];
00053 else
00054 return 0;
00055 }
00056
00057 AREXPORT void ArRobotPacket::setID(ArTypes::UByte id)
00058 {
00059 myBuf[3] = id;
00060 }
00061
00062 AREXPORT void ArRobotPacket::finalizePacket(void)
00063 {
00064 int len = myLength;
00065 int chkSum;
00066
00067 myLength = 0;
00068 uByteToBuf(mySync1);
00069 uByteToBuf(mySync2);
00070 uByteToBuf(len - getHeaderLength() + 3);
00071 myLength = len;
00072
00073 chkSum = calcCheckSum();
00074 byteToBuf((chkSum >> 8) & 0xff );
00075 byteToBuf(chkSum & 0xff );
00076
00077
00078
00079
00080
00081
00082 }
00083
00084 AREXPORT ArTypes::Byte2 ArRobotPacket::calcCheckSum(void)
00085 {
00086 int i;
00087 unsigned char n;
00088 int c = 0;
00089
00090 i = 3;
00091 n = myBuf[2] - 2;
00092 while (n > 1) {
00093 c += ((unsigned char)myBuf[i]<<8) | (unsigned char)myBuf[i+1];
00094 c = c & 0xffff;
00095 n -= 2;
00096 i += 2;
00097 }
00098 if (n > 0)
00099 c = c ^ (int)((unsigned char) myBuf[i]);
00100 return c;
00101 }
00102
00103 AREXPORT bool ArRobotPacket::verifyCheckSum(void)
00104 {
00105 ArTypes::Byte2 chksum;
00106 unsigned char c1, c2;
00107
00108 if (myLength - 2 < myHeaderLength)
00109 return false;
00110
00111 c2 = myBuf[myLength - 2];
00112 c1 = myBuf[myLength - 1];
00113 chksum = (c1 & 0xff) | (c2 << 8);
00114
00115 if (chksum == calcCheckSum()) {
00116 return true;
00117 } else {
00118 return false;
00119 }
00120
00121 }
00122
00123 AREXPORT ArTime ArRobotPacket::getTimeReceived(void)
00124 {
00125 return myTimeReceived;
00126 }
00127
00128 AREXPORT void ArRobotPacket::setTimeReceived(ArTime timeReceived)
00129 {
00130 myTimeReceived = timeReceived;
00131 }