]> oss.titaniummirror.com Git - tinyos-2.x.git/commitdiff
IRIS: add TXPOWER and RSSI to the metadata
authormmaroti <mmaroti>
Tue, 13 May 2008 19:48:00 +0000 (19:48 +0000)
committermmaroti <mmaroti>
Tue, 13 May 2008 19:48:00 +0000 (19:48 +0000)
tos/chips/rf230/DefaultMacC.nc
tos/chips/rf230/DefaultPacket.h
tos/chips/rf230/DefaultPacketC.nc
tos/chips/rf230/DefaultPacketP.nc
tos/chips/rf230/RF230LayerC.nc
tos/chips/rf230/RF230LayerP.nc
tos/platforms/iris/ActiveMessageC.nc

index afd5bda16f78f42cf417cefebf9104438e08769f..1e767293a141c11055fa3db5c19cd578e450485d 100644 (file)
@@ -39,6 +39,8 @@ configuration DefaultMacC
                interface LowPowerListening;
 
                interface PacketField<uint8_t> as PacketLinkQuality;
+               interface PacketField<uint8_t> as PacketTransmitPower;
+               interface PacketField<uint8_t> as PacketRSSI;
                interface PacketTimeStamp<TRF230, uint16_t>;
 
                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;
 }
index ff29c0e8ea4fc1f1f4fbbb08bc9431e1c6a06772..98cc340fd407eaf7752bbe1dae827f52770ce4f2 100644 (file)
@@ -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,
 };
index 79981597393946ed1b33e48e56028068ad145c67..f101b326fcaf2508b1ada594736071174f7419b7 100644 (file)
@@ -32,6 +32,7 @@ configuration DefaultPacketC
                interface PacketAcknowledgements;
                interface PacketField<uint8_t> as PacketLinkQuality;
                interface PacketField<uint8_t> as PacketTransmitPower;
+               interface PacketField<uint8_t> as PacketRSSI;
                interface PacketField<uint16_t> as PacketSleepInterval;
 
                interface PacketTimeStamp<TRF230, uint16_t>;
@@ -52,6 +53,7 @@ implementation
        PacketAcknowledgements = DefaultPacketP;
        PacketLinkQuality = DefaultPacketP.PacketLinkQuality;
        PacketTransmitPower = DefaultPacketP.PacketTransmitPower;
+       PacketRSSI = DefaultPacketP.PacketRSSI;
        PacketSleepInterval = DefaultPacketP.PacketSleepInterval;
        PacketTimeStamp = DefaultPacketP;
 
index 99d632fd86a281b010077457cf07ff5f3ab3937a..bdc9964cfe2cc64bff6ef7108b5f40e25439d547 100644 (file)
@@ -31,6 +31,7 @@ module DefaultPacketP
                interface Packet;
                interface PacketField<uint8_t> as PacketLinkQuality;
                interface PacketField<uint8_t> as PacketTransmitPower;
+               interface PacketField<uint8_t> as PacketRSSI;
                interface PacketField<uint16_t> as PacketSleepInterval;
 
                interface PacketTimeStamp<TRF230, uint16_t>;
@@ -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)
index 66eca0ded58d20f7343a7d22789ad450b1cbcac9..4454c9069f52d3812790edf28c5261c11ad9ef8f 100644 (file)
@@ -36,8 +36,10 @@ configuration RF230LayerC
        uses 
        {
                interface RF230Config;
+
                interface PacketField<uint8_t> as PacketLinkQuality;
                interface PacketField<uint8_t> as PacketTransmitPower;
+               interface PacketField<uint8_t> as PacketRSSI;
                interface PacketTimeStamp<TRF230, uint16_t>;
 
                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")];
index b35705ab62ba93fc7a83963aa3d67ee23c1282af..44fd7cd75d93fa90f5f860bcc6a802ec873a1ddc 100644 (file)
@@ -54,10 +54,12 @@ module RF230LayerP
 
                interface BusyWait<TMicro, uint16_t>;
 
-               interface RF230Config;
                interface PacketField<uint8_t> as PacketLinkQuality;
                interface PacketField<uint8_t> as PacketTransmitPower;
+               interface PacketField<uint8_t> as PacketRSSI;
                interface PacketTimeStamp<TRF230, uint16_t>;
+
+               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
index 80c325843650a2d51f4eb9032b980e16ca574d8b..d86fd0f999dd8505e9109c5e9a6f069d89c9847d 100644 (file)
@@ -35,6 +35,8 @@ configuration ActiveMessageC
 
                interface PacketAcknowledgements;
                interface PacketField<uint8_t> as PacketLinkQuality;
+               interface PacketField<uint8_t> as PacketTransmitPower;
+               interface PacketField<uint8_t> as PacketRSSI;
                interface PacketTimeStamp<TMicro, uint16_t>;
                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;
 }