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,
58enum { 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);
303inline uint8_t *dump(uint8_t d, uint8_t *dst) { *(dst++) = d;
return dst; }
304inline uint8_t *dump(int8_t d, uint8_t *dst) { *(dst++) = d;
return dst; }
305inline uint8_t *dump(uint16_t d, uint8_t *dst) { *((uint16_t *)dst) = d;
return dst+2; }
306inline uint8_t *dump(int16_t d, uint8_t *dst) { *((int16_t *)dst) = d;
return dst+2; }
308inline uint8_t *undump(uint8_t& d, uint8_t *dst) { d = *(dst++);
return dst; }
309inline uint8_t *undump(int8_t& d, uint8_t *dst) { d = *(dst++);
return dst; }
310inline uint8_t *undump(uint16_t& d, uint8_t *dst) { d = *((uint16_t *)dst);
return dst+2; }
311inline uint8_t *undump(int16_t& d, uint8_t *dst) { d = *((int16_t *)dst);
return dst+2; }
313inline 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];
333 uint8_t *pv = (uint8_t *)&v;
334 uint8_t *pr = (uint8_t *)&r;
336 for(
int i=0;i<s;i++){
355char *defineStruct(
const T& obj) {
return NULL;}
360int checkNativeEndianness();
Implements the basic sending and receiving capabilities on iostreams.
Definition MoteProtocol.h:147
int getOS()
Get current TinyOS version.
Definition MoteProtocol.cpp:669
void setOS(int v)
Set TinyOS version.
Definition MoteProtocol.cpp:662
Definition MoteProtocol.h:197
Interface that ensures serialization from and to a memory region.
Definition MoteProtocol.h:190
Data packet as described in the TinyOS serial protocol specifications.
Definition MoteProtocol.h:274
TinyOS generic message.
Definition MoteProtocol.h:205