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(){
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();
}
}
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...
return TOSH_DATA_LENGTH;
}
- command void* Packet.getPayload(message_t* msg, uint8_t* len) {
- if (len != NULL) {
- *len = (getHeader(msg))->length;
+ command void* Packet.getPayload(message_t* msg, uint8_t len) {
+ if (len <= TOSH_DATA_LENGTH) {
+ return (void*)msg->data;
+ }
+ else {
+ return NULL;
}
- return (void*)msg->data;
}
// Default events for radio send/receive coordinators do nothing.