[Tinyos-2-commits] CVS: tinyos-2.x/tos/chips/rf2xx/rf212 RF212ActiveMessage.h, NONE, 1.1 RF212DriverLayer.h, NONE, 1.1 RF212ActiveMessageC.nc, 1.3, 1.4 RF212ActiveMessageP.nc, 1.3, 1.4 RF212DriverLayerC.nc, 1.1, 1.2 RF212DriverLayerP.nc, 1.2, 1.3 RF212.h, 1.1, NONE RF212Packet.h, 1.3, NONE RF212PacketC.nc, 1.3, NONE RF212PacketP.nc, 1.3, NONE
Miklos Maroti
mmaroti at users.sourceforge.net
Thu Apr 2 15:10:09 PDT 2009
- Previous message: [Tinyos-2-commits] CVS: tinyos-2.x/tos/chips/rf2xx/layers IEEE154PacketLayer.h, NONE, 1.1 IEEE154PacketLayer.nc, NONE, 1.1 IEEE154PacketLayerC.nc, NONE, 1.1 IEEE154PacketLayerP.nc, NONE, 1.1 LowPowerListeningDummyC.nc, NONE, 1.1 LowPowerListeningDummyP.nc, NONE, 1.1 LowPowerListeningLayer.h, NONE, 1.1 MetadataFlagsLayer.h, NONE, 1.1 MetadataFlagsLayerC.nc, NONE, 1.1 TimeStampingLayer.h, NONE, 1.1 TimeStampingLayerC.nc, NONE, 1.1 TimeStampingLayerP.nc, NONE, 1.1 DummyLayerC.nc, 1.1, 1.2 IEEE154NetworkLayerC.nc, 1.2, 1.3 IEEE154NetworkLayerP.nc, 1.2, 1.3 LowPowerListeningLayerC.nc, 1.2, 1.3 LowPowerListeningLayerP.nc, 1.2, 1.3 PacketLinkLayer.h, 1.1, 1.2 PacketLinkLayerC.nc, 1.1, 1.2 PacketLinkLayerP.nc, 1.1, 1.2 SoftwareAckConfig.nc, 1.1, 1.2 SoftwareAckLayerC.nc, 1.1, 1.2 SoftwareAckLayerP.nc, 1.1, 1.2 DummyLayerP.nc, 1.1, NONE
- Next message: [Tinyos-2-commits] CVS: tinyos-2.x/tos/chips/rf2xx/rf230 RF230ActiveMessage.h, NONE, 1.1 RF230DriverLayer.h, NONE, 1.1 RF230ActiveMessageC.nc, 1.3, 1.4 RF230ActiveMessageP.nc, 1.4, 1.5 RF230DriverLayerC.nc, 1.1, 1.2 RF230DriverLayerP.nc, 1.4, 1.5 RF230.h, 1.2, NONE RF230Packet.h, 1.3, NONE RF230PacketC.nc, 1.3, NONE RF230PacketP.nc, 1.3, NONE
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /cvsroot/tinyos/tinyos-2.x/tos/chips/rf2xx/rf212
In directory ddv4jf1.ch3.sourceforge.com:/tmp/cvs-serv8351/rf212
Modified Files:
RF212ActiveMessageC.nc RF212ActiveMessageP.nc
RF212DriverLayerC.nc RF212DriverLayerP.nc
Added Files:
RF212ActiveMessage.h RF212DriverLayer.h
Removed Files:
RF212.h RF212Packet.h RF212PacketC.nc RF212PacketP.nc
Log Message:
change metadata handling,
remove the RF2xxPacket component, move functionality to RF2xxActiveMessage,
prepare blip support (RF2xxMessageC)
--- NEW FILE: RF212ActiveMessage.h ---
/*
* Copyright (c) 2007, Vanderbilt University
* All rights reserved.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation for any purpose, without fee, and without written agreement is
* hereby granted, provided that the above copyright notice, the following
* two paragraphs and the author appear in all copies of this software.
*
* IN NO EVENT SHALL THE VANDERBILT UNIVERSITY BE LIABLE TO ANY PARTY FOR
* DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
* OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE VANDERBILT
* UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* THE VANDERBILT UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
* ON AN "AS IS" BASIS, AND THE VANDERBILT UNIVERSITY HAS NO OBLIGATION TO
* PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
*
* Author: Miklos Maroti
*/
#ifndef __RF212ACTIVEMESSAGE_H__
#define __RF212ACTIVEMESSAGE_H__
#include <IEEE154PacketLayer.h>
#include <MetadataFlagsLayer.h>
#include <RF212DriverLayer.h>
#include <TimeStampingLayer.h>
#include <LowPowerListeningLayer.h>
#include <PacketLinkLayer.h>
typedef ieee154_header_t rf212packet_header_t;
typedef nx_struct rf212packet_footer_t
{
// the time stamp is not recorded here, time stamped messaged cannot have max length
} rf212packet_footer_t;
typedef struct rf212packet_metadata_t
{
flags_metadata_t flags;
rf212_metadata_t rf212;
timestamp_metadata_t timestamp;
#ifdef LOW_POWER_LISTENING
lpl_metadata_t lpl;
#endif
#ifdef PACKET_LINK
link_metadata_t link;
#endif
} rf212packet_metadata_t;
#endif//__RF212ACTIVEMESSAGE_H__
--- NEW FILE: RF212DriverLayer.h ---
/*
* Copyright (c) 2007, Vanderbilt University
* All rights reserved.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation for any purpose, without fee, and without written agreement is
* hereby granted, provided that the above copyright notice, the following
* two paragraphs and the author appear in all copies of this software.
*
* IN NO EVENT SHALL THE VANDERBILT UNIVERSITY BE LIABLE TO ANY PARTY FOR
* DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
* OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE VANDERBILT
* UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* THE VANDERBILT UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
* ON AN "AS IS" BASIS, AND THE VANDERBILT UNIVERSITY HAS NO OBLIGATION TO
* PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
*
* Author: Miklos Maroti
*/
#ifndef __RF212DRIVERLAYER_H__
#define __RF212DRIVERLAYER_H__
typedef struct rf212_metadata_t
{
uint8_t lqi;
union
{
uint8_t power;
uint8_t rssi;
};
} rf212_metadata_t;
enum rf212_registers_enum
{
RF212_TRX_STATUS = 0x01,
RF212_TRX_STATE = 0x02,
RF212_TRX_CTRL_0 = 0x03,
RF212_TRX_CTRL_1 = 0x04,
RF212_PHY_TX_PWR = 0x05,
RF212_PHY_RSSI = 0x06,
RF212_PHY_ED_LEVEL = 0x07,
RF212_PHY_CC_CCA = 0x08,
RF212_CCA_THRES = 0x09,
RF212_IRQ_MASK = 0x0E,
RF212_IRQ_STATUS = 0x0F,
RF212_VREG_CTRL = 0x10,
RF212_BATMON = 0x11,
RF212_XOSC_CTRL = 0x12,
RF212_PLL_CF = 0x1A,
RF212_PLL_DCU = 0x1B,
RF212_PART_NUM = 0x1C,
RF212_VERSION_NUM = 0x1D,
RF212_MAN_ID_0 = 0x1E,
RF212_MAN_ID_1 = 0x1F,
RF212_SHORT_ADDR_0 = 0x20,
RF212_SHORT_ADDR_1 = 0x21,
RF212_PAN_ID_0 = 0x22,
RF212_PAN_ID_1 = 0x23,
RF212_IEEE_ADDR_0 = 0x24,
RF212_IEEE_ADDR_1 = 0x25,
RF212_IEEE_ADDR_2 = 0x26,
RF212_IEEE_ADDR_3 = 0x27,
RF212_IEEE_ADDR_4 = 0x28,
RF212_IEEE_ADDR_5 = 0x29,
RF212_IEEE_ADDR_6 = 0x2A,
RF212_IEEE_ADDR_7 = 0x2B,
RF212_XAH_CTRL = 0x2C,
RF212_CSMA_SEED_0 = 0x2D,
RF212_CSMA_SEED_1 = 0x2E,
};
enum rf212_trx_status_enums
{
RF212_CCA_DONE = 1 << 7,
RF212_CCA_STATUS = 1 << 6,
RF212_TRX_STATUS_MASK = 0x1F,
RF212_P_ON = 0,
RF212_BUSY_RX = 1,
RF212_BUSY_TX = 2,
RF212_RX_ON = 6,
RF212_TRX_OFF = 8,
RF212_PLL_ON = 9,
RF212_SLEEP = 15,
RF212_BUSY_RX_AACK = 16,
RF212_BUSR_TX_ARET = 17,
RF212_RX_AACK_ON = 22,
RF212_TX_ARET_ON = 25,
RF212_RX_ON_NOCLK = 28,
RF212_AACK_ON_NOCLK = 29,
RF212_BUSY_RX_AACK_NOCLK = 30,
RF212_STATE_TRANSITION_IN_PROGRESS = 31,
};
enum rf212_trx_state_enums
{
RF212_TRAC_STATUS_MASK = 0xE0,
RF212_TRAC_SUCCESS = 0,
RF212_TRAC_CHANNEL_ACCESS_FAILURE = 3 << 5,
RF212_TRAC_NO_ACK = 5 << 5,
RF212_TRX_CMD_MASK = 0x1F,
RF212_NOP = 0,
RF212_TX_START = 2,
RF212_FORCE_TRX_OFF = 3,
};
enum rf212_phy_rssi_enums
{
RF212_RX_CRC_VALID = 1 << 7,
RF212_RSSI_MASK = 0x1F,
};
enum rf212_phy_cc_cca_enums
{
RF212_CCA_REQUEST = 1 << 7,
RF212_CCA_MODE_0 = 0 << 5,
RF212_CCA_MODE_1 = 1 << 5,
RF212_CCA_MODE_2 = 2 << 5,
RF212_CCA_MODE_3 = 3 << 5,
RF212_CHANNEL_DEFAULT = 11,
RF212_CHANNEL_MASK = 0x1F,
};
enum rf212_irq_register_enums
{
RF212_IRQ_BAT_LOW = 1 << 7,
RF212_IRQ_TRX_UR = 1 << 6,
RF212_IRQ_AMI = 1 << 5,
RF212_IRQ_CCA_ED_DONE = 1 << 4,
RF212_IRQ_TRX_END = 1 << 3,
RF212_IRQ_RX_START = 1 << 2,
RF212_IRQ_PLL_UNLOCK = 1 << 1,
RF212_IRQ_PLL_LOCK = 1 << 0,
};
enum rf212_batmon_enums
{
RF212_BATMON_OK = 1 << 5,
RF212_BATMON_VHR = 1 << 4,
RF212_BATMON_VTH_MASK = 0x0F,
};
enum rf212_vreg_ctrl_enums
{
RF212_AVREG_EXT = 1 << 7,
RF212_AVDD_OK = 1 << 6,
RF212_DVREG_EXT = 1 << 3,
RF212_DVDD_OK = 1 << 2,
};
enum rf212_xosc_ctrl_enums
{
RF212_XTAL_MODE_OFF = 0 << 4,
RF212_XTAL_MODE_EXTERNAL = 4 << 4,
RF212_XTAL_MODE_INTERNAL = 15 << 4,
};
enum rf212_spi_command_enums
{
RF212_CMD_REGISTER_READ = 0x80,
RF212_CMD_REGISTER_WRITE = 0xC0,
RF212_CMD_REGISTER_MASK = 0x3F,
RF212_CMD_FRAME_READ = 0x20,
RF212_CMD_FRAME_WRITE = 0x60,
RF212_CMD_SRAM_READ = 0x00,
RF212_CMD_SRAM_WRITE = 0x40,
};
#endif//__RF212DRIVERLAYER_H__
Index: RF212ActiveMessageC.nc
===================================================================
RCS file: /cvsroot/tinyos/tinyos-2.x/tos/chips/rf2xx/rf212/RF212ActiveMessageC.nc,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** RF212ActiveMessageC.nc 30 Mar 2009 22:29:48 -0000 1.3
--- RF212ActiveMessageC.nc 2 Apr 2009 22:10:07 -0000 1.4
***************
*** 37,42 ****
interface AMPacket;
interface PacketAcknowledgements;
-
- // we provide a dummy LowPowerListening interface if LOW_POWER_LISTENING is not defined
interface LowPowerListening;
--- 37,40 ----
***************
*** 51,54 ****
--- 49,53 ----
interface PacketField<uint8_t> as PacketRSSI;
+ interface LocalTime<TRadio> as LocalTimeRadio;
interface PacketTimeStamp<TRadio, uint32_t> as PacketTimeStampRadio;
interface PacketTimeStamp<TMilli, uint32_t> as PacketTimeStampMilli;
***************
*** 58,62 ****
implementation
{
! components RF212ActiveMessageP, RF212PacketC, IEEE154Packet2C, RadioAlarmC;
#ifdef RADIO_DEBUG
--- 57,61 ----
implementation
{
! components RF212ActiveMessageP, IEEE154PacketLayerC, RadioAlarmC;
#ifdef RADIO_DEBUG
***************
*** 64,83 ****
#endif
! RF212ActiveMessageP.IEEE154Packet2 -> IEEE154Packet2C;
! RF212ActiveMessageP.Packet -> RF212PacketC;
RF212ActiveMessageP.RadioAlarm -> RadioAlarmC.RadioAlarm[unique("RadioAlarm")];
! Packet = RF212PacketC;
! AMPacket = RF212PacketC;
! PacketAcknowledgements = RF212PacketC;
! PacketLinkQuality = RF212PacketC.PacketLinkQuality;
! PacketTransmitPower = RF212PacketC.PacketTransmitPower;
! PacketRSSI = RF212PacketC.PacketRSSI;
! PacketTimeStampRadio = RF212PacketC;
! PacketTimeStampMilli = RF212PacketC;
! LowPowerListening = LowPowerListeningLayerC;
! RadioChannel = MessageBufferLayerC;
components ActiveMessageLayerC;
#ifdef TFRAMES_ENABLED
components new DummyLayerC() as IEEE154NetworkLayerC;
--- 63,86 ----
#endif
! RF212ActiveMessageP.IEEE154PacketLayer -> IEEE154PacketLayerC;
RF212ActiveMessageP.RadioAlarm -> RadioAlarmC.RadioAlarm[unique("RadioAlarm")];
+ RF212ActiveMessageP.PacketTimeStamp -> TimeStampingLayerC;
! Packet = RF212ActiveMessageP;
!
! // -------- ActiveMessage
components ActiveMessageLayerC;
+ ActiveMessageLayerC.Config -> RF212ActiveMessageP;
+ ActiveMessageLayerC.AMPacket -> IEEE154PacketLayerC;
+ ActiveMessageLayerC.SubSend -> IEEE154NetworkLayerC;
+ ActiveMessageLayerC.SubReceive -> IEEE154NetworkLayerC;
+ AMSend = ActiveMessageLayerC;
+ Receive = ActiveMessageLayerC.Receive;
+ Snoop = ActiveMessageLayerC.Snoop;
+ AMPacket = IEEE154PacketLayerC;
+
+ // -------- IEEE154Network
+
#ifdef TFRAMES_ENABLED
components new DummyLayerC() as IEEE154NetworkLayerC;
***************
*** 85,151 ****
components IEEE154NetworkLayerC;
#endif
#ifdef LOW_POWER_LISTENING
components LowPowerListeningLayerC;
! LowPowerListeningLayerC.PacketSleepInterval -> RF230PacketC;
! LowPowerListeningLayerC.IEEE154Packet2 -> IEEE154Packet2C;
! LowPowerListeningLayerC.PacketAcknowledgements -> RF230PacketC;
#else
! components new DummyLayerC() as LowPowerListeningLayerC;
#endif
#ifdef PACKET_LINK
components PacketLinkLayerC;
PacketLink = PacketLinkLayerC;
! PacketLinkLayerC.PacketData -> RF230PacketC;
! PacketLinkLayerC.PacketAcknowledgements -> RF230PacketC;
#else
components new DummyLayerC() as PacketLinkLayerC;
#endif
-
- components MessageBufferLayerC;
- components UniqueLayerC;
- components TrafficMonitorLayerC;
-
- #ifdef SLOTTED_MAC
- components SlottedCollisionLayerC as CollisionAvoidanceLayerC;
- #else
- components RandomCollisionLayerC as CollisionAvoidanceLayerC;
- #endif
-
- components SoftwareAckLayerC;
- components new DummyLayerC() as CsmaLayerC;
- components RF212DriverLayerC;
-
- SplitControl = LowPowerListeningLayerC;
- AMSend = ActiveMessageLayerC;
- Receive = ActiveMessageLayerC.Receive;
- Snoop = ActiveMessageLayerC.Snoop;
-
- ActiveMessageLayerC.Config -> RF212ActiveMessageP;
- ActiveMessageLayerC.AMPacket -> IEEE154Packet2C;
- ActiveMessageLayerC.SubSend -> IEEE154NetworkLayerC;
- ActiveMessageLayerC.SubReceive -> IEEE154NetworkLayerC;
-
- IEEE154NetworkLayerC.SubSend -> UniqueLayerC;
- IEEE154NetworkLayerC.SubReceive -> LowPowerListeningLayerC;
-
- // the UniqueLayer is wired at two points
- UniqueLayerC.Config -> RF212ActiveMessageP;
- UniqueLayerC.SubSend -> LowPowerListeningLayerC;
-
- LowPowerListeningLayerC.SubControl -> MessageBufferLayerC;
- LowPowerListeningLayerC.SubSend -> PacketLinkLayerC;
- LowPowerListeningLayerC.SubReceive -> MessageBufferLayerC;
-
PacketLinkLayerC.SubSend -> MessageBufferLayerC;
! MessageBufferLayerC.Packet -> RF212PacketC;
MessageBufferLayerC.RadioSend -> TrafficMonitorLayerC;
MessageBufferLayerC.RadioReceive -> UniqueLayerC;
MessageBufferLayerC.RadioState -> TrafficMonitorLayerC;
UniqueLayerC.SubReceive -> TrafficMonitorLayerC;
TrafficMonitorLayerC.Config -> RF212ActiveMessageP;
TrafficMonitorLayerC.SubSend -> CollisionAvoidanceLayerC;
--- 88,144 ----
components IEEE154NetworkLayerC;
#endif
+ IEEE154NetworkLayerC.SubSend -> UniqueLayerC;
+ IEEE154NetworkLayerC.SubReceive -> LowPowerListeningLayerC;
+
+ // -------- UniqueLayer Send part (wired twice)
+
+ components UniqueLayerC;
+ UniqueLayerC.Config -> RF212ActiveMessageP;
+ UniqueLayerC.SubSend -> LowPowerListeningLayerC;
+
+ // -------- Low Power Listening
#ifdef LOW_POWER_LISTENING
components LowPowerListeningLayerC;
! LowPowerListeningLayerC.PacketLplMetadata -> RF212ActiveMessageP;
! LowPowerListeningLayerC.IEEE154PacketLayer -> IEEE154PacketLayerC;
! LowPowerListeningLayerC.PacketAcknowledgements -> SoftwareAckLayerC;
#else
! components LowPowerListeningDummyC as LowPowerListeningLayerC;
#endif
+ LowPowerListeningLayerC.SubControl -> MessageBufferLayerC;
+ LowPowerListeningLayerC.SubSend -> PacketLinkLayerC;
+ LowPowerListeningLayerC.SubReceive -> MessageBufferLayerC;
+ SplitControl = LowPowerListeningLayerC;
+ LowPowerListening = LowPowerListeningLayerC;
+
+ // -------- Packet Link
#ifdef PACKET_LINK
components PacketLinkLayerC;
PacketLink = PacketLinkLayerC;
! PacketLinkLayerC.PacketLinkMetadata -> RF212ActiveMessageP;
! PacketLinkLayerC.PacketAcknowledgements -> SoftwareAckLayerC;
#else
components new DummyLayerC() as PacketLinkLayerC;
#endif
PacketLinkLayerC.SubSend -> MessageBufferLayerC;
! // -------- MessageBuffer
!
! components MessageBufferLayerC;
! MessageBufferLayerC.Packet -> RF212ActiveMessageP;
MessageBufferLayerC.RadioSend -> TrafficMonitorLayerC;
MessageBufferLayerC.RadioReceive -> UniqueLayerC;
MessageBufferLayerC.RadioState -> TrafficMonitorLayerC;
+ RadioChannel = MessageBufferLayerC;
+
+ // -------- UniqueLayer receive part (wired twice)
UniqueLayerC.SubReceive -> TrafficMonitorLayerC;
+ // -------- Traffic Monitor
+
+ components TrafficMonitorLayerC;
TrafficMonitorLayerC.Config -> RF212ActiveMessageP;
TrafficMonitorLayerC.SubSend -> CollisionAvoidanceLayerC;
***************
*** 153,168 ****
--- 146,197 ----
TrafficMonitorLayerC.SubState -> RF212DriverLayerC;
+ // -------- CollisionAvoidance
+
+ #ifdef SLOTTED_MAC
+ components SlottedCollisionLayerC as CollisionAvoidanceLayerC;
+ #else
+ components RandomCollisionLayerC as CollisionAvoidanceLayerC;
+ #endif
CollisionAvoidanceLayerC.Config -> RF212ActiveMessageP;
CollisionAvoidanceLayerC.SubSend -> SoftwareAckLayerC;
CollisionAvoidanceLayerC.SubReceive -> SoftwareAckLayerC;
+ // -------- SoftwareAcknowledgement
+
+ components SoftwareAckLayerC;
SoftwareAckLayerC.Config -> RF212ActiveMessageP;
SoftwareAckLayerC.SubSend -> CsmaLayerC;
SoftwareAckLayerC.SubReceive -> RF212DriverLayerC;
+ PacketAcknowledgements = SoftwareAckLayerC;
+ // -------- Carrier Sense
+
+ components new DummyLayerC() as CsmaLayerC;
CsmaLayerC.Config -> RF212ActiveMessageP;
CsmaLayerC -> RF212DriverLayerC.RadioSend;
CsmaLayerC -> RF212DriverLayerC.RadioCCA;
+ // -------- RF212 Driver
+
+ components RF212DriverLayerC;
+ RF212DriverLayerC.PacketRF212Metadata -> RF212ActiveMessageP;
RF212DriverLayerC.RF212DriverConfig -> RF212ActiveMessageP;
+ RF212DriverLayerC.PacketTimeStamp -> TimeStampingLayerC;
+ PacketTransmitPower = RF212DriverLayerC.PacketTransmitPower;
+ PacketLinkQuality = RF212DriverLayerC.PacketLinkQuality;
+ PacketRSSI = RF212DriverLayerC.PacketRSSI;
+ LocalTimeRadio = RF212DriverLayerC;
+
+ // -------- MetadataFlags
+
+ components MetadataFlagsLayerC;
+ MetadataFlagsLayerC.PacketFlagsMetadata -> RF212ActiveMessageP;
+
+ // -------- TimeStamping
+
+ components TimeStampingLayerC;
+ TimeStampingLayerC.LocalTimeRadio -> RF212DriverLayerC;
+ TimeStampingLayerC.PacketTimeStampMetadata -> RF212ActiveMessageP;
+ PacketTimeStampRadio = TimeStampingLayerC;
+ PacketTimeStampMilli = TimeStampingLayerC;
}
Index: RF212ActiveMessageP.nc
===================================================================
RCS file: /cvsroot/tinyos/tinyos-2.x/tos/chips/rf2xx/rf212/RF212ActiveMessageP.nc,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** RF212ActiveMessageP.nc 29 Mar 2009 21:12:06 -0000 1.3
--- RF212ActiveMessageP.nc 2 Apr 2009 22:10:07 -0000 1.4
***************
*** 22,26 ****
*/
! #include <RF212Packet.h>
#include <RadioConfig.h>
#include <Tasklet.h>
--- 22,26 ----
*/
! #include <RF212ActiveMessage.h>
#include <RadioConfig.h>
#include <Tasklet.h>
***************
*** 39,49 ****
interface ActiveMessageConfig;
interface DummyConfig;
}
uses
{
! interface IEEE154Packet2;
! interface Packet;
interface RadioAlarm;
}
}
--- 39,63 ----
interface ActiveMessageConfig;
interface DummyConfig;
+
+ interface Packet;
+
+ interface PacketData<flags_metadata_t> as PacketFlagsMetadata;
+ interface PacketData<rf212_metadata_t> as PacketRF212Metadata;
+ interface PacketData<timestamp_metadata_t> as PacketTimeStampMetadata;
+
+ #ifdef LOW_POWER_LISTENING
+ interface PacketData<lpl_metadata_t> as PacketLplMetadata;
+ #endif
+ #ifdef PACKET_LINK
+ interface PacketData<link_metadata_t> as PacketLinkMetadata;
+ #endif
}
uses
{
! interface IEEE154PacketLayer;
interface RadioAlarm;
+
+ interface PacketTimeStamp<TRadio, uint32_t>;
}
}
***************
*** 55,74 ****
async command uint8_t RF212DriverConfig.getLength(message_t* msg)
{
! return call IEEE154Packet2.getLength(msg);
}
async command void RF212DriverConfig.setLength(message_t* msg, uint8_t len)
{
! call IEEE154Packet2.setLength(msg, len);
}
async command uint8_t* RF212DriverConfig.getPayload(message_t* msg)
{
! return ((uint8_t*)(call IEEE154Packet2.getHeader(msg))) + 1;
! }
!
! inline rf212packet_metadata_t* getMeta(message_t* msg)
! {
! return (rf212packet_metadata_t*)(msg->metadata);
}
--- 69,83 ----
async command uint8_t RF212DriverConfig.getLength(message_t* msg)
{
! return call IEEE154PacketLayer.getLength(msg);
}
async command void RF212DriverConfig.setLength(message_t* msg, uint8_t len)
{
! call IEEE154PacketLayer.setLength(msg, len);
}
async command uint8_t* RF212DriverConfig.getPayload(message_t* msg)
{
! return ((uint8_t*)(call IEEE154PacketLayer.getHeader(msg))) + 1;
}
***************
*** 87,91 ****
async command bool RF212DriverConfig.requiresRssiCca(message_t* msg)
{
! return call IEEE154Packet2.isDataFrame(msg);
}
--- 96,100 ----
async command bool RF212DriverConfig.requiresRssiCca(message_t* msg)
{
! return call IEEE154PacketLayer.isDataFrame(msg);
}
***************
*** 94,126 ****
async command bool SoftwareAckConfig.requiresAckWait(message_t* msg)
{
! return call IEEE154Packet2.requiresAckWait(msg);
}
async command bool SoftwareAckConfig.isAckPacket(message_t* msg)
{
! return call IEEE154Packet2.isAckFrame(msg);
}
async command bool SoftwareAckConfig.verifyAckPacket(message_t* data, message_t* ack)
{
! return call IEEE154Packet2.verifyAckReply(data, ack);
}
! async command bool SoftwareAckConfig.requiresAckReply(message_t* msg)
{
! return call IEEE154Packet2.requiresAckReply(msg);
}
! async command void SoftwareAckConfig.createAckPacket(message_t* data, message_t* ack)
{
! call IEEE154Packet2.createAckReply(data, ack);
}
! async command void SoftwareAckConfig.setAckReceived(message_t* msg, bool acked)
{
! if( acked )
! getMeta(msg)->flags |= RF212PACKET_WAS_ACKED;
! else
! getMeta(msg)->flags &= ~RF212PACKET_WAS_ACKED;
}
--- 103,132 ----
async command bool SoftwareAckConfig.requiresAckWait(message_t* msg)
{
! return call IEEE154PacketLayer.requiresAckWait(msg);
}
async command bool SoftwareAckConfig.isAckPacket(message_t* msg)
{
! return call IEEE154PacketLayer.isAckFrame(msg);
}
async command bool SoftwareAckConfig.verifyAckPacket(message_t* data, message_t* ack)
{
! return call IEEE154PacketLayer.verifyAckReply(data, ack);
}
! async command void SoftwareAckConfig.setAckRequired(message_t* msg, bool ack)
{
! call IEEE154PacketLayer.setAckRequired(msg, ack);
}
! async command bool SoftwareAckConfig.requiresAckReply(message_t* msg)
{
! return call IEEE154PacketLayer.requiresAckReply(msg);
}
! async command void SoftwareAckConfig.createAckPacket(message_t* data, message_t* ack)
{
! call IEEE154PacketLayer.createAckReply(data, ack);
}
***************
*** 139,153 ****
async command uint8_t UniqueConfig.getSequenceNumber(message_t* msg)
{
! return call IEEE154Packet2.getDSN(msg);
}
async command void UniqueConfig.setSequenceNumber(message_t* msg, uint8_t dsn)
{
! call IEEE154Packet2.setDSN(msg, dsn);
}
async command am_addr_t UniqueConfig.getSender(message_t* msg)
{
! return call IEEE154Packet2.getSrcAddr(msg);
}
--- 145,159 ----
async command uint8_t UniqueConfig.getSequenceNumber(message_t* msg)
{
! return call IEEE154PacketLayer.getDSN(msg);
}
async command void UniqueConfig.setSequenceNumber(message_t* msg, uint8_t dsn)
{
! call IEEE154PacketLayer.setDSN(msg, dsn);
}
async command am_addr_t UniqueConfig.getSender(message_t* msg)
{
! return call IEEE154PacketLayer.getSrcAddr(msg);
}
***************
*** 162,166 ****
{
// the user forgot to call clear, we should return EINVAL
! if( ! call IEEE154Packet2.isDataFrame(msg) )
call Packet.clear(msg);
--- 168,172 ----
{
// the user forgot to call clear, we should return EINVAL
! if( ! call IEEE154PacketLayer.isDataFrame(msg) )
call Packet.clear(msg);
***************
*** 172,176 ****
async command bool CsmaConfig.requiresSoftwareCCA(message_t* msg)
{
! return call IEEE154Packet2.isDataFrame(msg);
}
--- 178,182 ----
async command bool CsmaConfig.requiresSoftwareCCA(message_t* msg)
{
! return call IEEE154PacketLayer.isDataFrame(msg);
}
***************
*** 197,207 ****
*/
! uint8_t len = call IEEE154Packet2.getLength(msg);
! return call IEEE154Packet2.getAckRequired(msg) ? len + 6 + 16 + 11 + 10 : len + 6 + 10;
}
async command am_addr_t TrafficMonitorConfig.getSender(message_t* msg)
{
! return call IEEE154Packet2.getSrcAddr(msg);
}
--- 203,213 ----
*/
! uint8_t len = call IEEE154PacketLayer.getLength(msg);
! return call IEEE154PacketLayer.getAckRequired(msg) ? len + 6 + 16 + 11 + 10 : len + 6 + 10;
}
async command am_addr_t TrafficMonitorConfig.getSender(message_t* msg)
{
! return call IEEE154PacketLayer.getSrcAddr(msg);
}
***************
*** 245,249 ****
// estimated response time (download the message, etc) is 5-8 bytes
! if( call IEEE154Packet2.requiresAckReply(msg) )
time += (uint16_t)(32 * (-5 + 16 + 11 + 5) * RADIO_ALARM_MICROSEC);
else
--- 251,255 ----
// estimated response time (download the message, etc) is 5-8 bytes
! if( call IEEE154PacketLayer.requiresAckReply(msg) )
time += (uint16_t)(32 * (-5 + 16 + 11 + 5) * RADIO_ALARM_MICROSEC);
else
***************
*** 270,274 ****
{
// TODO: check if the timestamp is correct
! return getMeta(msg)->timestamp;
}
--- 276,280 ----
{
// TODO: check if the timestamp is correct
! return call PacketTimeStamp.timestamp(msg);
}
***************
*** 276,280 ****
{
// the preamble (4 bytes), SFD (1 byte), plus two extra for safety
! return getMeta(msg)->timestamp - (uint16_t)(7 * 32 * RADIO_ALARM_MICROSEC);
}
--- 282,286 ----
{
// the preamble (4 bytes), SFD (1 byte), plus two extra for safety
! return (call PacketTimeStamp.timestamp(msg)) - (uint16_t)(7 * 32 * RADIO_ALARM_MICROSEC);
}
***************
*** 291,293 ****
--- 297,381 ----
{
}
+
+ /*----------------- Metadata -----------------*/
+
+ inline rf212packet_metadata_t* getMeta(message_t* msg)
+ {
+ return (rf212packet_metadata_t*)(msg->metadata);
+ }
+
+ async command flags_metadata_t* PacketFlagsMetadata.get(message_t* msg)
+ {
+ return &(getMeta(msg)->flags);
+ }
+
+ async command rf212_metadata_t* PacketRF212Metadata.get(message_t* msg)
+ {
+ return &(getMeta(msg)->rf212);
+ }
+
+ async command timestamp_metadata_t* PacketTimeStampMetadata.get(message_t* msg)
+ {
+ return &(getMeta(msg)->timestamp);
+ }
+
+ #ifdef LOW_POWER_LISTENING
+ async command lpl_metadata_t* PacketLplMetadata.get(message_t* msg)
+ {
+ return &(getMeta(msg)->lpl);
+ }
+ #endif
+
+ #ifdef PACKET_LINK
+ async command link_metadata_t* PacketLinkMetadata.get(message_t* msg)
+ {
+ return &(getMeta(msg)->link);
+ }
+ #endif
+
+ /*----------------- Packet -----------------*/
+
+ enum
+ {
+ PACKET_LENGTH_INCREASE =
+ sizeof(rf212packet_header_t) - 1 // the 8-bit length field is not counted
+ + sizeof(ieee154_footer_t), // the CRC is not stored in memory
+ };
+
+ command void Packet.clear(message_t* msg)
+ {
+ signal PacketFlagsMetadata.clear(msg);
+ signal PacketRF212Metadata.clear(msg);
+ signal PacketTimeStampMetadata.clear(msg);
+ #ifdef LOW_POWER_LISTENING
+ signal PacketLplMetadata.clear(msg);
+ #endif
+ #ifdef PACKET_LINK
+ signal PacketLinkMetadata.clear(msg);
+ #endif
+ call IEEE154PacketLayer.createDataFrame(msg);
+ }
+
+ inline command void Packet.setPayloadLength(message_t* msg, uint8_t len)
+ {
+ call IEEE154PacketLayer.setLength(msg, len + PACKET_LENGTH_INCREASE);
+ }
+
+ inline command uint8_t Packet.payloadLength(message_t* msg)
+ {
+ return call IEEE154PacketLayer.getLength(msg) - PACKET_LENGTH_INCREASE;
+ }
+
+ inline command uint8_t Packet.maxPayloadLength()
+ {
+ return TOSH_DATA_LENGTH;
+ }
+
+ command void* Packet.getPayload(message_t* msg, uint8_t len)
+ {
+ if( len > TOSH_DATA_LENGTH )
+ return NULL;
+
+ return msg->data;
+ }
}
Index: RF212DriverLayerC.nc
===================================================================
RCS file: /cvsroot/tinyos/tinyos-2.x/tos/chips/rf2xx/rf212/RF212DriverLayerC.nc,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** RF212DriverLayerC.nc 10 Mar 2009 21:43:26 -0000 1.1
--- RF212DriverLayerC.nc 2 Apr 2009 22:10:07 -0000 1.2
***************
*** 1,4 ****
/*
! * Copyright (c) 2007, Vanderbilt University
* All rights reserved.
*
--- 1,4 ----
/*
! * Copyright (c) 2009, Vanderbilt University
* All rights reserved.
*
***************
*** 22,25 ****
--- 22,28 ----
*/
+ #include <RadioConfig.h>
+ #include <RF212DriverLayer.h>
+
configuration RF212DriverLayerC
{
***************
*** 30,41 ****
interface RadioReceive;
interface RadioCCA;
}
! uses interface RF212DriverConfig;
}
implementation
{
! components RF212DriverLayerP, HplRF212C, BusyWaitMicroC, TaskletC, MainC, RadioAlarmC, RF212PacketC, LocalTimeMicroC as LocalTimeRadioC;
RadioState = RF212DriverLayerP;
--- 33,56 ----
interface RadioReceive;
interface RadioCCA;
+
+ interface PacketField<uint8_t> as PacketTransmitPower;
+ interface PacketField<uint8_t> as PacketRSSI;
+ interface PacketField<uint8_t> as PacketTimeSyncOffset;
+ interface PacketField<uint8_t> as PacketLinkQuality;
+
+ interface LocalTime<TRadio> as LocalTimeRadio;
}
! uses
! {
! interface RF212DriverConfig;
! interface PacketTimeStamp<TRadio, uint32_t>;
! interface PacketData<rf212_metadata_t> as PacketRF212Metadata;
! }
}
implementation
{
! components RF212DriverLayerP, HplRF212C, BusyWaitMicroC, TaskletC, MainC, RadioAlarmC;
RadioState = RF212DriverLayerP;
***************
*** 44,55 ****
RadioCCA = RF212DriverLayerP;
RF212DriverConfig = RF212DriverLayerP;
! RF212DriverLayerP.PacketLinkQuality -> RF212PacketC.PacketLinkQuality;
! RF212DriverLayerP.PacketTransmitPower -> RF212PacketC.PacketTransmitPower;
! RF212DriverLayerP.PacketRSSI -> RF212PacketC.PacketRSSI;
! RF212DriverLayerP.PacketTimeSyncOffset -> RF212PacketC.PacketTimeSyncOffset;
! RF212DriverLayerP.PacketTimeStamp -> RF212PacketC;
! RF212DriverLayerP.LocalTime -> LocalTimeRadioC;
RF212DriverLayerP.RadioAlarm -> RadioAlarmC.RadioAlarm[unique("RadioAlarm")];
--- 59,83 ----
RadioCCA = RF212DriverLayerP;
+ LocalTimeRadio = HplRF212C;
+
RF212DriverConfig = RF212DriverLayerP;
+ PacketRF212Metadata = RF212DriverLayerP;
! PacketTransmitPower = RF212DriverLayerP.PacketTransmitPower;
! components new MetadataFlagC() as TransmitPowerFlagC;
! RF212DriverLayerP.TransmitPowerFlag -> TransmitPowerFlagC;
!
! PacketRSSI = RF212DriverLayerP.PacketRSSI;
! components new MetadataFlagC() as RSSIFlagC;
! RF212DriverLayerP.RSSIFlag -> RSSIFlagC;
!
! PacketTimeSyncOffset = RF212DriverLayerP.PacketTimeSyncOffset;
! components new MetadataFlagC() as TimeSyncFlagC;
! RF212DriverLayerP.TimeSyncFlag -> TimeSyncFlagC;
!
! PacketLinkQuality = RF212DriverLayerP.PacketLinkQuality;
! PacketTimeStamp = RF212DriverLayerP.PacketTimeStamp;
!
! RF212DriverLayerP.LocalTime -> HplRF212C;
RF212DriverLayerP.RadioAlarm -> RadioAlarmC.RadioAlarm[unique("RadioAlarm")];
Index: RF212DriverLayerP.nc
===================================================================
RCS file: /cvsroot/tinyos/tinyos-2.x/tos/chips/rf2xx/rf212/RF212DriverLayerP.nc,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** RF212DriverLayerP.nc 27 Mar 2009 21:54:56 -0000 1.2
--- RF212DriverLayerP.nc 2 Apr 2009 22:10:07 -0000 1.3
***************
*** 22,26 ****
*/
! #include <RF212.h>
#include <Tasklet.h>
#include <RadioAssert.h>
--- 22,26 ----
*/
! #include <RF212DriverLayer.h>
#include <Tasklet.h>
#include <RadioAssert.h>
***************
*** 39,42 ****
--- 39,47 ----
interface RadioReceive;
interface RadioCCA;
+
+ interface PacketField<uint8_t> as PacketTransmitPower;
+ interface PacketField<uint8_t> as PacketRSSI;
+ interface PacketField<uint8_t> as PacketTimeSyncOffset;
+ interface PacketField<uint8_t> as PacketLinkQuality;
}
***************
*** 54,67 ****
interface BusyWait<TMicro, uint16_t>;
! interface PacketField<uint8_t> as PacketLinkQuality;
! interface PacketField<uint8_t> as PacketTransmitPower;
! interface PacketField<uint8_t> as PacketRSSI;
! interface PacketField<uint8_t> as PacketTimeSyncOffset;
interface PacketTimeStamp<TRadio, uint32_t>;
- interface LocalTime<TRadio>;
- interface RF212DriverConfig;
interface Tasklet;
interface RadioAlarm;
--- 59,73 ----
interface BusyWait<TMicro, uint16_t>;
+ interface LocalTime<TRadio>;
! interface RF212DriverConfig;
!
! interface PacketData<rf212_metadata_t> as PacketRF212Metadata;
! interface PacketFlag as TransmitPowerFlag;
! interface PacketFlag as RSSIFlag;
! interface PacketFlag as TimeSyncFlag;
interface PacketTimeStamp<TRadio, uint32_t>;
interface Tasklet;
interface RadioAlarm;
***************
*** 549,553 ****
{
uint8_t length;
! uint8_t crc;
call SELN.clr();
--- 555,559 ----
{
uint8_t length;
! uint8_t crc = 0;
call SELN.clr();
***************
*** 609,613 ****
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.hex8s(call RF212DriverConfig.getPayload(rxMsg), length - 2);
--- 615,619 ----
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.hex8s(call RF212DriverConfig.getPayload(rxMsg), length - 2);
***************
*** 817,819 ****
--- 823,933 ----
call SpiResource.release();
}
+
+ /*----------------- PACKET -----------------*/
+
+ async event void PacketRF212Metadata.clear(message_t* msg)
+ {
+ }
+
+ // --- TransmitPower
+
+ async command bool PacketTransmitPower.isSet(message_t* msg)
+ {
+ return call TransmitPowerFlag.get(msg);
+ }
+
+ async command uint8_t PacketTransmitPower.get(message_t* msg)
+ {
+ return (call PacketRF212Metadata.get(msg))->power;
+ }
+
+ async command void PacketTransmitPower.clear(message_t* msg)
+ {
+ call TransmitPowerFlag.clear(msg);
+ }
+
+ async command void PacketTransmitPower.set(message_t* msg, uint8_t value)
+ {
+ call TransmitPowerFlag.set(msg);
+ (call PacketRF212Metadata.get(msg))->power = value;
+ }
+
+ // --- RSSI
+
+ async command bool PacketRSSI.isSet(message_t* msg)
+ {
+ return call RSSIFlag.get(msg);
+ }
+
+ async command uint8_t PacketRSSI.get(message_t* msg)
+ {
+ return (call PacketRF212Metadata.get(msg))->rssi;
+ }
+
+ async command void PacketRSSI.clear(message_t* msg)
+ {
+ call RSSIFlag.clear(msg);
+ }
+
+ async command void PacketRSSI.set(message_t* msg, uint8_t value)
+ {
+ // just to be safe if the user fails to clear the packet
+ call TransmitPowerFlag.clear(msg);
+
+ call RSSIFlag.set(msg);
+ (call PacketRF212Metadata.get(msg))->rssi = value;
+ }
+
+ // --- TimeSyncOffset
+
+ enum
+ {
+ PACKET_LENGTH_INCREASE =
+ sizeof(rf212packet_header_t) - 1 // the 8-bit length field is not counted
+ + sizeof(ieee154_footer_t), // the CRC is not stored in memory
+ };
+
+ async command bool PacketTimeSyncOffset.isSet(message_t* msg)
+ {
+ return call TimeSyncFlag.get(msg);
+ }
+
+ async command uint8_t PacketTimeSyncOffset.get(message_t* msg)
+ {
+ return call RF212DriverConfig.getLength(msg) - PACKET_LENGTH_INCREASE - sizeof(timesync_absolute_t);
+ }
+
+ async command void PacketTimeSyncOffset.clear(message_t* msg)
+ {
+ call TimeSyncFlag.clear(msg);
+ }
+
+ async command void PacketTimeSyncOffset.set(message_t* msg, uint8_t value)
+ {
+ // we do not store the value, the time sync field is always the last 4 bytes
+ ASSERT( call RF212DriverConfig.getLength(msg) - PACKET_LENGTH_INCREASE - sizeof(timesync_absolute_t) == value );
+
+ call TimeSyncFlag.set(msg);
+ }
+
+ // --- LinkQuality
+
+ async command bool PacketLinkQuality.isSet(message_t* msg)
+ {
+ return TRUE;
+ }
+
+ async command uint8_t PacketLinkQuality.get(message_t* msg)
+ {
+ return (call PacketRF212Metadata.get(msg))->lqi;
+ }
+
+ async command void PacketLinkQuality.clear(message_t* msg)
+ {
+ }
+
+ async command void PacketLinkQuality.set(message_t* msg, uint8_t value)
+ {
+ (call PacketRF212Metadata.get(msg))->lqi = value;
+ }
}
--- RF212.h DELETED ---
--- RF212Packet.h DELETED ---
--- RF212PacketC.nc DELETED ---
--- RF212PacketP.nc DELETED ---
- Previous message: [Tinyos-2-commits] CVS: tinyos-2.x/tos/chips/rf2xx/layers IEEE154PacketLayer.h, NONE, 1.1 IEEE154PacketLayer.nc, NONE, 1.1 IEEE154PacketLayerC.nc, NONE, 1.1 IEEE154PacketLayerP.nc, NONE, 1.1 LowPowerListeningDummyC.nc, NONE, 1.1 LowPowerListeningDummyP.nc, NONE, 1.1 LowPowerListeningLayer.h, NONE, 1.1 MetadataFlagsLayer.h, NONE, 1.1 MetadataFlagsLayerC.nc, NONE, 1.1 TimeStampingLayer.h, NONE, 1.1 TimeStampingLayerC.nc, NONE, 1.1 TimeStampingLayerP.nc, NONE, 1.1 DummyLayerC.nc, 1.1, 1.2 IEEE154NetworkLayerC.nc, 1.2, 1.3 IEEE154NetworkLayerP.nc, 1.2, 1.3 LowPowerListeningLayerC.nc, 1.2, 1.3 LowPowerListeningLayerP.nc, 1.2, 1.3 PacketLinkLayer.h, 1.1, 1.2 PacketLinkLayerC.nc, 1.1, 1.2 PacketLinkLayerP.nc, 1.1, 1.2 SoftwareAckConfig.nc, 1.1, 1.2 SoftwareAckLayerC.nc, 1.1, 1.2 SoftwareAckLayerP.nc, 1.1, 1.2 DummyLayerP.nc, 1.1, NONE
- Next message: [Tinyos-2-commits] CVS: tinyos-2.x/tos/chips/rf2xx/rf230 RF230ActiveMessage.h, NONE, 1.1 RF230DriverLayer.h, NONE, 1.1 RF230ActiveMessageC.nc, 1.3, 1.4 RF230ActiveMessageP.nc, 1.4, 1.5 RF230DriverLayerC.nc, 1.1, 1.2 RF230DriverLayerP.nc, 1.4, 1.5 RF230.h, 1.2, NONE RF230Packet.h, 1.3, NONE RF230PacketC.nc, 1.3, NONE RF230PacketP.nc, 1.3, NONE
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the Tinyos-2-commits
mailing list