29 #ifndef MOTEPROTOCOL_H 30 #define MOTEPROTOCOL_H 42 #include "MoteException.h" 52 TOS_SERIAL_ACTIVE_MESSAGE_ID = 0,
53 TOS_SERIAL_CC1000_ID = 1,
54 TOS_SERIAL_802_15_4_ID = 2,
55 TOS_SERIAL_UNKNOWN_ID = 255,
58 enum { OS_TRANSPARENT = 0, TOS1 = 1, TOS2 = 2, CONTIKI = 3 };
60 #define LIMIT ((char)0x7E) 61 #define ESCAPE ((char)0x7D) 63 #define IN_FRAME_SIZE 100 64 #define OUT_FRAME_SIZE 100 67 #define P_ACK ((char)0x40) 69 #define P_TOS1_PACKET_NO_ACK ((char)0x42) 70 #define P_TOS1_PACKET_ACK ((char)0x41) 71 #define P_TOS2_ACK ((char)0x43) 72 #define P_TOS2_PACKET_NO_ACK ((char)0x45) 73 #define P_TOS2_PACKET_ACK ((char)0x44) 74 #define P_UNKNOWN ((char)0xFF) 77 #define MAX_TOS_SIZE 100 78 #define TOS_BROADCAST 0xFFFF 79 #define TOS1_DEFAULT_GROUP 0x7D 80 #define TOS2_DEFAULT_GROUP 0x00 81 #define TOS_DEFAULT_GROUP 0x7D 85 #define MP_LITTLE_ENDIAN 1 86 #define MP_BIG_ENDIAN 0 153 void bind( istream& is, ostream& os );
156 void sendMessage(
TOSMessage& message, uint8_t type );
170 void sendPacket(
Packet& packet );
172 enum Status { ST_LOST, ST_SYNC };
191 virtual uint8_t *dump( uint8_t *dst ,
int os = 1) = 0;
192 virtual uint8_t *undump( uint8_t *src,
int os = 1 ) = 0;
198 uint8_t *dump( uint8_t *dst ,
int os = 1);
199 uint8_t *undump( uint8_t *src,
int os = 1 );
211 uint8_t data[MAX_TOS_SIZE];
222 addr = TOS_BROADCAST;
224 group = TOS_DEFAULT_GROUP;
234 void compose( uint8_t type,
237 uint16_t addr = TOS_BROADCAST,
238 uint16_t lnk_src = 0,
239 uint8_t group = TOS_DEFAULT_GROUP );
241 void compose( uint8_t type,
245 uint16_t addr = TOS_BROADCAST,
246 uint16_t lnk_src = 0,
247 uint8_t group = TOS_DEFAULT_GROUP );
249 void compose( uint8_t type,
252 uint16_t addr = TOS_BROADCAST,
253 uint16_t lnk_src = 0,
254 uint8_t group = TOS_DEFAULT_GROUP );
256 void getData (
void *dst,
int size,
const char *def );
257 void getData (
void *dst,
int size);
258 void getData (
void *dst,
const char *def );
260 uint8_t *dump( uint8_t *dst ,
int os = 1);
261 uint8_t *undump( uint8_t *src ,
int os = 1);
281 void compose( uint8_t type,
TOSMessage& message );
283 uint8_t *dump( uint8_t *dst ,
int os = 1);
284 uint8_t *undump( uint8_t *src,
int os = 1 );
289 uint16_t computeCRCByte(uint16_t crc, uint8_t b);
290 uint16_t computeCRC(uint8_t *packet,
int index,
int count);
303 inline uint8_t *dump(uint8_t d, uint8_t *dst) { *(dst++) = d;
return dst; }
304 inline uint8_t *dump(int8_t d, uint8_t *dst) { *(dst++) = d;
return dst; }
305 inline uint8_t *dump(uint16_t d, uint8_t *dst) { *((uint16_t *)dst) = d;
return dst+2; }
306 inline uint8_t *dump(int16_t d, uint8_t *dst) { *((int16_t *)dst) = d;
return dst+2; }
308 inline uint8_t *undump(uint8_t& d, uint8_t *dst) { d = *(dst++);
return dst; }
309 inline uint8_t *undump(int8_t& d, uint8_t *dst) { d = *(dst++);
return dst; }
310 inline uint8_t *undump(uint16_t& d, uint8_t *dst) { d = *((uint16_t *)dst);
return dst+2; }
311 inline uint8_t *undump(int16_t& d, uint8_t *dst) { d = *((int16_t *)dst);
return dst+2; }
313 inline ostream& operator<<(ostream& os, TOSMessage& message ) {
315 os <<
"addr " << (int)message.addr << endl;
316 os <<
"type " << (
int)message.type << endl;
317 os <<
"group " << (int)message.group << endl;
318 os <<
"data length " << (
int)message.length << endl;
320 for (
int i = 0; i< message.length; i++ ) {
321 os <<
" " << (
unsigned int)message.data[i];
329 template <
typename T>
330 T reverseEndian(T v){
333 uint8_t *pv = (uint8_t *)&v;
334 uint8_t *pr = (uint8_t *)&r;
336 for(
int i=0;i<s;i++){
354 template <
typename T>
355 char *defineStruct(
const T& obj) {
return NULL;}
360 int checkNativeEndianness();
void setOS(int v)
Set TinyOS version.
Definition: MoteProtocol.cpp:662
Interface that ensures serialization from and to a memory region.
Definition: MoteProtocol.h:190
Implements the basic sending and receiving capabilities on iostreams.
Definition: MoteProtocol.h:147
int getOS()
Get current TinyOS version.
Definition: MoteProtocol.cpp:669
Definition: MoteProtocol.h:197
TinyOS generic message.
Definition: MoteProtocol.h:205
Data packet as described in the TinyOS serial protocol specifications.
Definition: MoteProtocol.h:274