X-Git-Url: https://oss.titaniummirror.com/gitweb/?a=blobdiff_plain;f=tos%2Flib%2Fbyte_radio%2FPacketSerializerP.nc;h=48615c5c34dd92a057992f0d8471123cb6cab610;hb=4b23c03d49413f0c9facd71dcaf6ddb445553110;hp=2d21c682fc6b973fc5e37624c06c0b0b280f2dbf;hpb=7d5a4598831eb9baa8ee77dcd97fb88df9eaa924;p=tinyos-2.x.git diff --git a/tos/lib/byte_radio/PacketSerializerP.nc b/tos/lib/byte_radio/PacketSerializerP.nc index 2d21c682..48615c5c 100644 --- a/tos/lib/byte_radio/PacketSerializerP.nc +++ b/tos/lib/byte_radio/PacketSerializerP.nc @@ -73,6 +73,9 @@ implementation { void TransmitNextByte(); void ReceiveNextByte(uint8_t data); + typedef enum { + SFD_OFFSET = sizeof(message_header_t) - sizeof(message_radio_header_t) + 2 + } pserializer_constants_t; /* Radio Init */ command error_t Init.init(){ @@ -114,18 +117,21 @@ implementation { void TransmitNextByte() { message_radio_header_t* header = getHeader((message_t*) txBufPtr); if (byteCnt < header->length + sizeof(message_header_t) ) { // send (data + header), compute crc - if(byteCnt == sizeof(message_header_t)) { + if(byteCnt == SFD_OFFSET) { signal RadioTimeStamping.transmittedSFD(0, (message_t*)txBufPtr); } crc = crcByte(crc, ((uint8_t *)(txBufPtr))[byteCnt]); call RadioByteComm.txByte(((uint8_t *)(txBufPtr))[byteCnt++]); - } else if (byteCnt == (header->length + sizeof(message_header_t))) { + } + else if (byteCnt == (header->length + sizeof(message_header_t))) { ++byteCnt; call RadioByteComm.txByte((uint8_t)crc); - } else if (byteCnt == (header->length + sizeof(message_header_t)+1)) { + } + else if (byteCnt == (header->length + sizeof(message_header_t)+1)) { ++byteCnt; call RadioByteComm.txByte((uint8_t)(crc >> 8)); - } else { /* (byteCnt > (header->length + sizeof(message_header_t)+1)) */ + } + else { /* (byteCnt > (header->length + sizeof(message_header_t)+1)) */ call PhyPacketTx.sendFooter(); } } @@ -160,8 +166,10 @@ implementation { void ReceiveNextByte(uint8_t data) { message_radio_footer_t* footer = getFooter((message_t*)rxBufPtr); ((uint8_t *)(rxBufPtr))[byteCnt++] = data; - if ( byteCnt < getHeader(rxBufPtr)->length + sizeof(message_radio_header_t) ) { - if(byteCnt == sizeof(message_radio_header_t)) signal RadioTimeStamping.receivedSFD(0); + if(byteCnt < getHeader(rxBufPtr)->length + sizeof(message_radio_header_t)) { + if(byteCnt == SFD_OFFSET) { + signal RadioTimeStamping.receivedSFD(0); + } crc = crcByte(crc, data); if (getHeader(rxBufPtr)->length > TOSH_DATA_LENGTH) { // this packet is surely corrupt, so whatever...