From 2e472571e97ca9d56f7ba30fe837191579204d61 Mon Sep 17 00:00:00 2001 From: mmaroti Date: Tue, 13 May 2008 19:48:00 +0000 Subject: [PATCH] IRIS: add TXPOWER and RSSI to the metadata --- tos/chips/rf230/DefaultMacC.nc | 5 +++ tos/chips/rf230/DefaultPacket.h | 3 ++ tos/chips/rf230/DefaultPacketC.nc | 2 + tos/chips/rf230/DefaultPacketP.nc | 61 +++++++++++++++++++--------- tos/chips/rf230/RF230LayerC.nc | 3 ++ tos/chips/rf230/RF230LayerP.nc | 17 ++++++-- tos/platforms/iris/ActiveMessageC.nc | 14 ++++--- 7 files changed, 78 insertions(+), 27 deletions(-) diff --git a/tos/chips/rf230/DefaultMacC.nc b/tos/chips/rf230/DefaultMacC.nc index afd5bda1..1e767293 100644 --- a/tos/chips/rf230/DefaultMacC.nc +++ b/tos/chips/rf230/DefaultMacC.nc @@ -39,6 +39,8 @@ configuration DefaultMacC interface LowPowerListening; interface PacketField as PacketLinkQuality; + interface PacketField as PacketTransmitPower; + interface PacketField as PacketRSSI; interface PacketTimeStamp; interface PacketLastTouch; @@ -61,6 +63,8 @@ implementation AMPacket = DefaultPacketC; PacketAcknowledgements = DefaultPacketC; PacketLinkQuality = DefaultPacketC.PacketLinkQuality; + PacketTransmitPower = DefaultPacketC.PacketTransmitPower; + PacketRSSI = DefaultPacketC.PacketRSSI; PacketTimeStamp = DefaultPacketC.PacketTimeStamp; LowPowerListening = LowPowerListeningLayerC; @@ -129,5 +133,6 @@ implementation RF230LayerC.RF230Config -> DefaultMacP; RF230LayerC.PacketLinkQuality -> DefaultPacketC.PacketLinkQuality; RF230LayerC.PacketTransmitPower -> DefaultPacketC.PacketTransmitPower; + RF230LayerC.PacketRSSI -> DefaultPacketC.PacketRSSI; RF230LayerC.PacketTimeStamp -> DefaultPacketC.PacketTimeStamp; } diff --git a/tos/chips/rf230/DefaultPacket.h b/tos/chips/rf230/DefaultPacket.h index ff29c0e8..98cc340f 100644 --- a/tos/chips/rf230/DefaultPacket.h +++ b/tos/chips/rf230/DefaultPacket.h @@ -38,6 +38,7 @@ typedef nx_struct defpacket_metadata_t { nx_uint8_t flags; nx_uint8_t lqi; + nx_uint8_t power; // shared between TXPOWER and RSSI nx_uint16_t timestamp; } defpacket_metadata_t; @@ -46,6 +47,8 @@ enum defpacket_metadata_flags DEFPACKET_WAS_ACKED = 0x01, // PacketAcknowledgements DEFPACKET_TIMESTAMP = 0x02, // PacketTimeStamp DEFPACKET_LAST_TOUCH = 0x04, // PacketLastTouch.touch + DEFPACKET_TXPOWER = 0x10, // PacketTransmitPower + DEFPACKET_RSSI = 0x20, // PacketRSSI DEFPACKET_CLEAR_METADATA = 0x00, }; diff --git a/tos/chips/rf230/DefaultPacketC.nc b/tos/chips/rf230/DefaultPacketC.nc index 79981597..f101b326 100644 --- a/tos/chips/rf230/DefaultPacketC.nc +++ b/tos/chips/rf230/DefaultPacketC.nc @@ -32,6 +32,7 @@ configuration DefaultPacketC interface PacketAcknowledgements; interface PacketField as PacketLinkQuality; interface PacketField as PacketTransmitPower; + interface PacketField as PacketRSSI; interface PacketField as PacketSleepInterval; interface PacketTimeStamp; @@ -52,6 +53,7 @@ implementation PacketAcknowledgements = DefaultPacketP; PacketLinkQuality = DefaultPacketP.PacketLinkQuality; PacketTransmitPower = DefaultPacketP.PacketTransmitPower; + PacketRSSI = DefaultPacketP.PacketRSSI; PacketSleepInterval = DefaultPacketP.PacketSleepInterval; PacketTimeStamp = DefaultPacketP; diff --git a/tos/chips/rf230/DefaultPacketP.nc b/tos/chips/rf230/DefaultPacketP.nc index 99d632fd..bdc9964c 100644 --- a/tos/chips/rf230/DefaultPacketP.nc +++ b/tos/chips/rf230/DefaultPacketP.nc @@ -31,6 +31,7 @@ module DefaultPacketP interface Packet; interface PacketField as PacketLinkQuality; interface PacketField as PacketTransmitPower; + interface PacketField as PacketRSSI; interface PacketField as PacketSleepInterval; interface PacketTimeStamp; @@ -162,43 +163,65 @@ implementation getMeta(msg)->timestamp = value; } -/*----------------- Global fields -----------------*/ - - norace uint8_t flags; - enum - { - FLAG_TXPOWER = 0x01, - FLAG_SLEEPINT = 0x02, - }; - - norace uint8_t transmitPower; - - // TODO: Move sleepInterval into the metadata - norace uint16_t sleepInterval; - /*----------------- PacketTransmitPower -----------------*/ async command bool PacketTransmitPower.isSet(message_t* msg) { - return flags & FLAG_TXPOWER; + return getMeta(msg)->flags & DEFPACKET_TXPOWER; } async command uint8_t PacketTransmitPower.get(message_t* msg) { - return transmitPower; + return getMeta(msg)->power; } async command void PacketTransmitPower.clear(message_t* msg) { - flags &= ~FLAG_TXPOWER; + getMeta(msg)->flags &= ~DEFPACKET_TXPOWER; } async command void PacketTransmitPower.set(message_t* msg, uint8_t value) { - flags |= FLAG_TXPOWER; - transmitPower = value; + getMeta(msg)->flags &= ~DEFPACKET_RSSI; + getMeta(msg)->flags |= DEFPACKET_TXPOWER; + getMeta(msg)->power = value; + } + +/*----------------- PacketRSSI -----------------*/ + + async command bool PacketRSSI.isSet(message_t* msg) + { + return getMeta(msg)->flags & DEFPACKET_RSSI; + } + + async command uint8_t PacketRSSI.get(message_t* msg) + { + return getMeta(msg)->power; } + async command void PacketRSSI.clear(message_t* msg) + { + getMeta(msg)->flags &= ~DEFPACKET_RSSI; + } + + async command void PacketRSSI.set(message_t* msg, uint8_t value) + { + getMeta(msg)->flags &= ~DEFPACKET_TXPOWER; + getMeta(msg)->flags |= DEFPACKET_RSSI; + getMeta(msg)->power = value; + } + +/*----------------- Global fields -----------------*/ + + norace uint8_t flags; + enum + { + FLAG_SLEEPINT = 0x01, + }; + + // TODO: Move sleepInterval into the metadata + norace uint16_t sleepInterval; + /*----------------- PacketSleepInterval -----------------*/ async command bool PacketSleepInterval.isSet(message_t* msg) diff --git a/tos/chips/rf230/RF230LayerC.nc b/tos/chips/rf230/RF230LayerC.nc index 66eca0de..4454c906 100644 --- a/tos/chips/rf230/RF230LayerC.nc +++ b/tos/chips/rf230/RF230LayerC.nc @@ -36,8 +36,10 @@ configuration RF230LayerC uses { interface RF230Config; + interface PacketField as PacketLinkQuality; interface PacketField as PacketTransmitPower; + interface PacketField as PacketRSSI; interface PacketTimeStamp; async event void lastTouch(message_t* msg); @@ -56,6 +58,7 @@ implementation RF230Config = RF230LayerP; PacketLinkQuality = RF230LayerP.PacketLinkQuality; PacketTransmitPower = RF230LayerP.PacketTransmitPower; + PacketRSSI = RF230LayerP.PacketRSSI; PacketTimeStamp = RF230LayerP.PacketTimeStamp; RF230LayerP.RadioAlarm -> RadioAlarmC.RadioAlarm[unique("RadioAlarm")]; diff --git a/tos/chips/rf230/RF230LayerP.nc b/tos/chips/rf230/RF230LayerP.nc index b35705ab..44fd7cd7 100644 --- a/tos/chips/rf230/RF230LayerP.nc +++ b/tos/chips/rf230/RF230LayerP.nc @@ -54,10 +54,12 @@ module RF230LayerP interface BusyWait; - interface RF230Config; interface PacketField as PacketLinkQuality; interface PacketField as PacketTransmitPower; + interface PacketField as PacketRSSI; interface PacketTimeStamp; + + interface RF230Config; interface Tasklet; interface RadioAlarm; @@ -622,6 +624,7 @@ implementation { uint16_t time; uint8_t irq; + uint8_t temp; atomic time = capturedTime; radioIrq = FALSE; @@ -674,8 +677,16 @@ implementation { ASSERT( state == STATE_RX_ON || state == STATE_PLL_ON_2_RX_ON ); - // the most likely place for busy channel - rssiBusy += readRegister(RF230_PHY_RSSI) - (rssiBusy >> 2); + // the most likely place for busy channel, with no TRX_END + if( irq == RF230_IRQ_RX_START ) + { + temp = readRegister(RF230_PHY_RSSI); + + rssiBusy += temp - (rssiBusy >> 2); + call PacketRSSI.set(rxMsg, temp); + } + else + call PacketRSSI.clear(rxMsg); /* * The timestamp corresponds to the first event which could not diff --git a/tos/platforms/iris/ActiveMessageC.nc b/tos/platforms/iris/ActiveMessageC.nc index 80c32584..d86fd0f9 100644 --- a/tos/platforms/iris/ActiveMessageC.nc +++ b/tos/platforms/iris/ActiveMessageC.nc @@ -35,6 +35,8 @@ configuration ActiveMessageC interface PacketAcknowledgements; interface PacketField as PacketLinkQuality; + interface PacketField as PacketTransmitPower; + interface PacketField as PacketRSSI; interface PacketTimeStamp; interface LowPowerListening; interface PacketLastTouch; @@ -52,9 +54,11 @@ implementation Packet = MAC; AMPacket = MAC; - PacketAcknowledgements = MAC; - PacketLinkQuality = MAC; - PacketTimeStamp = MAC; - PacketLastTouch = MAC; - LowPowerListening = MAC; + PacketAcknowledgements = MAC.PacketAcknowledgements; + PacketLinkQuality = MAC.PacketLinkQuality; + PacketTransmitPower = MAC.PacketTransmitPower; + PacketRSSI = MAC.PacketRSSI; + PacketTimeStamp = MAC.PacketTimeStamp; + PacketLastTouch = MAC.PacketLastTouch; + LowPowerListening = MAC.LowPowerListening; } -- 2.39.2