if( timesync != 0 )
*(timesync_relative_t*)timesync = (*(timesync_absolute_t*)timesync) - time32;
- do {
+ while( length-- != 0 )
call FastSpiByte.splitReadWrite(*(data++));
- }
- while( --length != 0 );
// wait for the SPI transfer to finish
call FastSpiByte.splitRead();
// go back to RX_ON state when finished
writeRegister(RF212_TRX_STATE, RF212_RX_ON);
+ if( timesync != 0 )
+ *(timesync_absolute_t*)timesync = (*(timesync_relative_t*)timesync) + time32;
+
+ call PacketTimeStamp.set(msg, time32);
+
#ifdef RADIO_DEBUG_MESSAGES
if( call DiagMsg.record() )
{
length = getHeader(msg)->length;
- call DiagMsg.str("tx");
- call DiagMsg.uint16(time);
- call DiagMsg.uint8(length);
+ 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);
call DiagMsg.hex8s(getPayload(msg), length - 2);
call DiagMsg.send();
}
#endif
- if( timesync != 0 )
- *(timesync_absolute_t*)timesync = (*(timesync_relative_t*)timesync) + time32;
-
- call PacketTimeStamp.set(msg, time32);
-
// wait for the TRX_END interrupt
state = STATE_BUSY_TX_2_RX_ON;
cmd = CMD_TRANSMIT;
{
length = getHeader(rxMsg)->length;
- call DiagMsg.str("rx");
+ call DiagMsg.str('r');
call DiagMsg.uint32(call PacketTimeStamp.isValid(rxMsg) ? call PacketTimeStamp.timestamp(rxMsg) : 0);
call DiagMsg.uint16(call RadioAlarm.getNow());
- call DiagMsg.uint8(crc != 0);
- call DiagMsg.uint8(length);
+ call DiagMsg.int8(crc != 0 ? 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
}
#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 PacketLinkQuality.get(message_t* msg)
{
- // we have some bug in BLIP, so fix it here
- if( getMeta(msg)->lqi > 120 )
- return 120;
-
return getMeta(msg)->lqi;
}