uint8_t rxFrameLen = 0;
uint8_t nextTxLen=0;
uint8_t nextRxLen;
- char rxFrame[xe1205_mtu];
+ // Bugfix 29.1.2010: Plus 2 Bytes for the xe1205_phy_header_t
+ // defined in XE1205SendReceiveP.nc
+ // This is just a hack to make it work, this entire code needs
+ // to be cleaned up & documented!
+ char rxFrame[xe1205_mtu + 2];
uint8_t headerLen = 4;
uint16_t stats_rxOverruns;
call SpiResourceConfig.release();
atomic {
if (state == RADIO_STARTING){
- post startDone();}
+
+ post startDone();
+ }
if (state == RADIO_RX_ACK) {
enableAck=FALSE;
signal XE1205PhyRxTx.sendFrameDone(FAIL);
command error_t SplitControl.start()
{
- atomic {
- if (state == RADIO_LISTEN){ post startDone(); return SUCCESS;}
- if (state != RADIO_SLEEP) return EBUSY;
- state = RADIO_STARTING;
- }
- call XE1205PhySwitch.rxMode();
- call XE1205PhySwitch.antennaRx();
-
-
- call Alarm32khz16.start(usecs_to_jiffies(XE1205_Sleep_to_RX_Time));
- return SUCCESS;
+ atomic {
+ if (state == RADIO_LISTEN){ post startDone(); return SUCCESS;}
+ if (state != RADIO_SLEEP) return EBUSY;
+ state = RADIO_STARTING;
+ }
+ call XE1205PhySwitch.rxMode();
+ call XE1205PhySwitch.antennaRx();
+ call Alarm32khz16.start(usecs_to_jiffies(XE1205_Sleep_to_RX_Time));
+ return SUCCESS;
}
command error_t SplitControl.stop()
}
}
- command uint8_t XE1205PhyRssi.readRxRssi() {
+ async command uint8_t XE1205PhyRssi.readRxRssi() {
return rssiTab[(rssiH<<2) |rssiL];
}
switch (state) {
case RADIO_RX_ACK:
-
+
call Alarm32khz16.stop();
case RADIO_LISTEN:
rxByte=1;
atomic state = RADIO_RX_HEADER;
status = call SpiResourceRX.immediateRequest();
atomic {
- if (status != SUCCESS) {
- state = RADIO_LISTEN;
- call Interrupt0.disable(); // because pattern detector won't be rearmed right away
- call SpiResourceConfig.request();
- return;
- }
+ if (status != SUCCESS) {
+ state = RADIO_LISTEN;
+ call Interrupt0.disable(); // because pattern detector won't be rearmed right away
+ call SpiResourceConfig.request();
+ return;
+ }
}
call Alarm32khz16.start(3000);
return;
call XE1205PatternConf.loadAckPatternHasBus();
armPatternDetect();
call SpiResourceTX.release();
-
call Alarm32khz16.start(usecs_to_jiffies(8000));
atomic {
call Interrupt0.enableRisingEdge();
} else {
enableAck = FALSE;
- signal XE1205PhyRxTx.sendFrameDone(SUCCESS);
+ signal XE1205PhyRxTx.rxAckEnd(rxFrame, rxFrameLen + headerLen, SUCCESS);
}
-
-
-
return;
case RADIO_RX_HEADER:
case RADIO_RX_PACKET:
if (rssiRange!=RSSI_OFF) {
- readRssi();
- return;
- }
+ readRssi();
+ return;
+ }
stats_rxOverruns++;
signal XE1205PhyRxTx.rxFrameEnd(NULL, 0, FAIL);
return;
case RADIO_RSSI:
- readRssi();
+ readRssi();
return;
case RADIO_RX_ACK: // ack timeout
}
- signal XE1205PhyRxTx.sendFrameDone(FAIL);
+ signal XE1205PhyRxTx.sendFrameDone(ENOACK);
return;
default:
-
-
+
return;
}