Pioneer 2 User Manual
Page 33
Pioneer Mobile Robots
27
Table 6-1. Main elements of PSOS communication packet protocol
Packet Data Types
Packetized client commands and server information blocks use several data types, as defined below in
Table 6-2. There is no convention for sign; each packet type is interpreted idiosyncratically by the receiver.
Negative integers are sign-extended.
Table 6-2. P2OS Communication Packet Data Types
Packet Checksum
Calculate the communication packet checksum by successively adding data byte pairs (high byte first) to
the running checksum (initially zero), disregarding sign and overflow. If there is an odd number of data
bytes, the last byte is XORed to the low-order byte of the checksum.
NOTE: The checksum word is placed at the end of the packet, with its bytes in the reverse order of
that used for arguments and data; that is, b
0
is the high byte, and b
1
is the low byte.
Use the following C-code fragment in your client applications to compute a checksum:
int
calc_chksum(unsigned char *ptr) /* ptr is array of bytes, first is data count
*/
{
int n;
int c = 0;
n = *(ptr++);
n -= 2;
/* don't use chksum word */
while (n > 1) {
c += (*(ptr)<<8) | *(ptr+1);
c = c & 0xffff;
n -= 2;
ptr += 2;
}
if (n > 0) c = c ^ (int)*(ptr++);
return(c);
}
Packet Errors
Currently, P2OS ignores a client command packet whose byte count exceeds 200 or has an erroneous
checksum. The client should similarly ignore erroneous server information packets.
Component
Bytes
Value
Description
Header
2
0xFA, 0xFB
Packet header; same for client and server
Byte Count
1
N + 2
Number of subsequent data bytes, including
checksum word, but not Byte Count.
Maximum 200 total bytes.
Data
N
command
or SIB
Client command or server information block
(SIB; discussed in subsequent sections)
Checksum
2
computed
Packet integrity checksum
Data Type
Bytes
Order
integer
2
b
0
low byte; b
1
high byte
word
4
b
0
low byte; b
3
high byte
string
up to ~200,
length-prefixed
b
0
length of string;
b
1
first byte of string