atomic
{
call SLP_TR.set();
- time = call RadioAlarm.getNow() + TX_SFD_DELAY;
+ time = call RadioAlarm.getNow();
}
call SLP_TR.clr();
}
while( --header != 0 );
- time32 += (int16_t)(time) - (int16_t)(time32);
+ time32 += (int16_t)(time + TX_SFD_DELAY) - (int16_t)(time32);
if( timesync != 0 )
*(timesync_relative_t*)timesync = (*(timesync_absolute_t*)timesync) - time32;
{
length = getHeader(msg)->length;
- call DiagMsg.str("t");
+ call DiagMsg.str('t');
call DiagMsg.uint32(call PacketTimeStamp.isValid(rxMsg) ? call PacketTimeStamp.timestamp(rxMsg) : 0);
call DiagMsg.uint16(call RadioAlarm.getNow());
call DiagMsg.int8(length);
inline void downloadMessage()
{
uint8_t length;
- uint8_t crc = 0;
+ bool crcValid = FALSE;
call SELN.clr();
call FastSpiByte.write(RF212_CMD_FRAME_READ);
data = getPayload(rxMsg);
getHeader(rxMsg)->length = length;
- crc = 0;
// we do not store the CRC field
length -= 2;
call PacketLinkQuality.set(rxMsg, call FastSpiByte.splitReadWrite(0));
call FastSpiByte.splitReadWrite(0); // ED
- crc = call FastSpiByte.splitRead() & RF212_RX_CRC_VALID; // RX_STATUS
+ crcValid = call FastSpiByte.splitRead() & RF212_RX_CRC_VALID; // RX_STATUS
}
}
{
length = getHeader(rxMsg)->length;
- call DiagMsg.str("r");
+ call DiagMsg.str('r');
call DiagMsg.uint32(call PacketTimeStamp.isValid(rxMsg) ? call PacketTimeStamp.timestamp(rxMsg) : 0);
call DiagMsg.uint16(call RadioAlarm.getNow());
- call DiagMsg.int8(crc != 0 ? length : -length);
+ call DiagMsg.int8(crcValid ? length : -length);
call DiagMsg.hex8s(getPayload(rxMsg), length - 2);
+ call DiagMsg.int8(call PacketRSSI.isSet(rxMsg) ? call PacketRSSI.get(rxMsg) : -1);
+ call DiagMsg.uint8(call PacketLinkQuality.isSet(rxMsg) ? call PacketLinkQuality.get(rxMsg) : 0);
call DiagMsg.send();
}
#endif
cmd = CMD_NONE;
// signal only if it has passed the CRC check
- if( crc != 0 )
+ if( crcValid )
rxMsg = signal RadioReceive.receive(rxMsg);
}
}
#endif
+#ifdef RF212_RSSI_ENERGY
+ if( irq & RF212_IRQ_TRX_END )
+ {
+ if( irq == RF212_IRQ_TRX_END ||
+ (irq == (RF212_IRQ_RX_START | RF212_IRQ_TRX_END) && cmd == CMD_NONE) )
+ call PacketRSSI.set(rxMsg, readRegister(RF212_PHY_ED_LEVEL));
+ else
+ call PacketRSSI.clear(rxMsg);
+ }
+#endif
+
if( irq & RF212_IRQ_PLL_LOCK )
{
if( cmd == CMD_TURNON || cmd == CMD_CHANNEL )
else if( cmd == CMD_RECEIVE )
{
ASSERT( state == STATE_RX_ON || state == STATE_PLL_ON_2_RX_ON );
-#ifdef RF212_RSSI_ENERGY
- if( irq == RF212_IRQ_TRX_END )
- call PacketRSSI.set(rxMsg, readRegister(RF212_PHY_ED_LEVEL));
- else
- call PacketRSSI.clear(rxMsg);
-#endif
+
if( state == STATE_PLL_ON_2_RX_ON )
{
ASSERT( (readRegister(RF212_TRX_STATUS) & RF212_TRX_STATUS_MASK) == RF212_PLL_ON );
async command uint8_t RadioPacket.maxPayloadLength()
{
- ASSERT( call Config.maxPayloadLength() <= 125 );
+ ASSERT( call Config.maxPayloadLength() - sizeof(rf230_header_t) <= 125 );
return call Config.maxPayloadLength() - sizeof(rf212_header_t);
}