- /* Receive the next Byte from the USART */
- 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 == SFD_OFFSET) {
- signal RadioTimeStamping.receivedSFD(0);
- }
- crc = crcByte(crc, data);
- if (getHeader(rxBufPtr)->length > TOSH_DATA_LENGTH) {
- // this packet is surely corrupt, so whatever...
- footer->crc = 0;
- call PhyPacketRx.recvFooter();
- }
- }
- else if (byteCnt == (getHeader(rxBufPtr)->length + sizeof(message_radio_header_t))) {
- crc = crcByte(crc, data);
- byteCnt = offsetof(message_t, footer) + offsetof(message_radio_footer_t, crc);
- }
- else if (byteCnt == (offsetof(message_t, footer) + sizeof(message_radio_footer_t))) {
- footer->crc = (footer->crc == crc);
- call PhyPacketRx.recvFooter();
- }
- }
-
-
- /* Packet interface */
+ async event void PhyPacketRx.recvFooterDone(error_t error) {
+ // we care about wrong crc in this layer
+ if(!getFooter(rxBufPtr)->crc) {
+ error = FAIL;
+ }
+ else {
+
+ }
+ byteCnt = 0;
+ rxBufPtr = signal PhyReceive.receiveDone(rxBufPtr, rxBufPtr->data, getHeader(rxBufPtr)->length, error);
+ }
+
+ /* Receive the next Byte from the USART */
+ void ReceiveNextByte(uint8_t data) {
+ uint8_t* buf = (uint8_t *)(rxBufPtr);
+ buf[byteCnt++] = data;
+ if(byteCnt <= sizeof(message_header_t) + getHeader(rxBufPtr)->length) {
+ crc = crcByte(crc, data);
+ if(byteCnt == SFD_OFFSET) {
+ signal RadioTimeStamping.receivedSFD(0);
+ }
+ else if(byteCnt == sizeof(message_header_t) + getHeader(rxBufPtr)->length) {
+ byteCnt = offsetof(message_t, footer) + offsetof(message_radio_footer_t, crc);
+ }
+ if(getHeader(rxBufPtr)->length > TOSH_DATA_LENGTH) {
+ getFooter(rxBufPtr)->crc = 0;
+ call PhyPacketRx.recvFooter();
+ }
+ }
+ else if(byteCnt >= offsetof(message_t, footer) + offsetof(message_radio_footer_t, crc) + sizeof(crc)) {
+ message_radio_footer_t* footer = getFooter(rxBufPtr);
+ footer->crc = (footer->crc == crc);
+ call PhyPacketRx.recvFooter();
+ sdDebug(5000 + getHeader(rxBufPtr)->token);
+ }
+ }
+
+ /* Packet interface */