]> oss.titaniummirror.com Git - tinyos-2.x.git/blobdiff - tos/chips/rf230/RF230ActiveMessageP.nc
Merge TinyOS 2.1.1 into master.
[tinyos-2.x.git] / tos / chips / rf230 / RF230ActiveMessageP.nc
diff --git a/tos/chips/rf230/RF230ActiveMessageP.nc b/tos/chips/rf230/RF230ActiveMessageP.nc
deleted file mode 100644 (file)
index 0337bbd..0000000
+++ /dev/null
@@ -1,298 +0,0 @@
-/*
- * 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
- */
-
-#include <RF230Packet.h>
-#include <HplRF230.h>
-#include <Tasklet.h>
-
-module RF230ActiveMessageP
-{
-       provides
-       {
-               interface RF230Config;
-               interface SoftwareAckConfig;
-               interface UniqueConfig;
-               interface CsmaConfig;
-               interface TrafficMonitorConfig;
-               interface RandomCollisionConfig;
-               interface SlottedCollisionConfig;
-               interface ActiveMessageConfig;
-               interface DummyConfig;
-       }
-
-       uses
-       {
-               interface IEEE154Packet;
-               interface Packet;
-               interface RadioAlarm;
-       }
-}
-
-implementation
-{
-/*----------------- RF230Config -----------------*/
-
-       async command uint8_t RF230Config.getLength(message_t* msg)
-       {
-               return call IEEE154Packet.getLength(msg);
-       }
-
-       async command void RF230Config.setLength(message_t* msg, uint8_t len)
-       {
-               call IEEE154Packet.setLength(msg, len);
-       }
-
-       async command uint8_t* RF230Config.getPayload(message_t* msg)
-       {
-               return ((uint8_t*)(call IEEE154Packet.getHeader(msg))) + 1;
-       }
-
-       inline rf230packet_metadata_t* getMeta(message_t* msg)
-       {
-               return (rf230packet_metadata_t*)(msg->metadata);
-       }
-
-       async command uint8_t RF230Config.getHeaderLength()
-       {
-               // we need the fcf, dsn, destpan and dest
-               return 7;
-       }
-
-       async command uint8_t RF230Config.getMaxLength()
-       {
-               // note, that the ieee154_footer_t is not stored, but we should include it here
-               return sizeof(rf230packet_header_t) - 1 + TOSH_DATA_LENGTH + sizeof(ieee154_footer_t);
-       }
-
-       async command uint8_t RF230Config.getDefaultChannel()
-       {
-               return RF230_DEF_CHANNEL;
-       }
-
-       async command bool RF230Config.requiresRssiCca(message_t* msg)
-       {
-               return call IEEE154Packet.isDataFrame(msg);
-       }
-
-/*----------------- SoftwareAckConfig -----------------*/
-
-       async command bool SoftwareAckConfig.requiresAckWait(message_t* msg)
-       {
-               return call IEEE154Packet.requiresAckWait(msg);
-       }
-
-       async command bool SoftwareAckConfig.isAckPacket(message_t* msg)
-       {
-               return call IEEE154Packet.isAckFrame(msg);
-       }
-
-       async command bool SoftwareAckConfig.verifyAckPacket(message_t* data, message_t* ack)
-       {
-               return call IEEE154Packet.verifyAckReply(data, ack);
-       }
-
-       async command bool SoftwareAckConfig.requiresAckReply(message_t* msg)
-       {
-               return call IEEE154Packet.requiresAckReply(msg);
-       }
-
-       async command void SoftwareAckConfig.createAckPacket(message_t* data, message_t* ack)
-       {
-               call IEEE154Packet.createAckReply(data, ack);
-       }
-
-       async command void SoftwareAckConfig.setAckReceived(message_t* msg, bool acked)
-       {
-               if( acked )
-                       getMeta(msg)->flags |= RF230PACKET_WAS_ACKED;
-               else
-                       getMeta(msg)->flags &= ~RF230PACKET_WAS_ACKED;
-       }
-
-       async command uint16_t SoftwareAckConfig.getAckTimeout()
-       {
-               return (uint16_t)(800 * RF230_ALARM_MICROSEC);
-       }
-
-       tasklet_async command void SoftwareAckConfig.reportChannelError()
-       {
-               signal TrafficMonitorConfig.channelError();
-       }
-
-/*----------------- UniqueConfig -----------------*/
-
-       async command uint8_t UniqueConfig.getSequenceNumber(message_t* msg)
-       {
-               return call IEEE154Packet.getDSN(msg);
-       }
-
-       async command void UniqueConfig.setSequenceNumber(message_t* msg, uint8_t dsn)
-       {
-               call IEEE154Packet.setDSN(msg, dsn);
-       }
-
-       async command am_addr_t UniqueConfig.getSender(message_t* msg)
-       {
-               return call IEEE154Packet.getSrcAddr(msg);
-       }
-
-       tasklet_async command void UniqueConfig.reportChannelError()
-       {
-               signal TrafficMonitorConfig.channelError();
-       }
-
-/*----------------- ActiveMessageConfig -----------------*/
-
-       command error_t ActiveMessageConfig.checkPacket(message_t* msg)
-       {
-               // the user forgot to call clear, we should return EINVAL
-               if( ! call IEEE154Packet.isDataFrame(msg) )
-                       call Packet.clear(msg);
-
-               return SUCCESS;
-       }
-
-/*----------------- CsmaConfig -----------------*/
-
-       async command bool CsmaConfig.requiresSoftwareCCA(message_t* msg)
-       {
-               return call IEEE154Packet.isDataFrame(msg);
-       }
-
-/*----------------- TrafficMonitorConfig -----------------*/
-
-       enum
-       {
-               TRAFFIC_UPDATE_PERIOD = 100,    // in milliseconds
-               TRAFFIC_MAX_BYTES = (uint16_t)(TRAFFIC_UPDATE_PERIOD * 1000UL / 32),    // 3125
-       };
-
-       async command uint16_t TrafficMonitorConfig.getUpdatePeriod()
-       {
-               return TRAFFIC_UPDATE_PERIOD;
-       }
-
-       async command uint16_t TrafficMonitorConfig.getChannelTime(message_t* msg)
-       {
-               /* We count in bytes, one byte is 32 microsecond. We are conservative here.
-                *
-                * pure airtime: preable (4 bytes), SFD (1 byte), length (1 byte), payload + CRC (len bytes)
-                * frame separation: 5-10 bytes
-                * ack required: 8-16 byte separation, 11 bytes airtime, 5-10 bytes separation
-                */
-
-               uint8_t len = call IEEE154Packet.getLength(msg);
-               return call IEEE154Packet.getAckRequired(msg) ? len + 6 + 16 + 11 + 10 : len + 6 + 10;
-       }
-
-       async command am_addr_t TrafficMonitorConfig.getSender(message_t* msg)
-       {
-               return call IEEE154Packet.getSrcAddr(msg);
-       }
-
-       tasklet_async command void TrafficMonitorConfig.timerTick()
-       {
-               signal SlottedCollisionConfig.timerTick();
-       }
-
-/*----------------- RandomCollisionConfig -----------------*/
-
-       /*
-        * We try to use the same values as in CC2420
-        *
-        * CC2420_MIN_BACKOFF = 10 jiffies = 320 microsec
-        * CC2420_BACKOFF_PERIOD = 10 jiffies
-        * initial backoff = 0x1F * CC2420_BACKOFF_PERIOD = 310 jiffies = 9920 microsec
-        * congestion backoff = 0x7 * CC2420_BACKOFF_PERIOD = 70 jiffies = 2240 microsec
-        */
-
-       async command uint16_t RandomCollisionConfig.getMinimumBackoff()
-       {
-               return (uint16_t)(320 * RF230_ALARM_MICROSEC);
-       }
-
-       async command uint16_t RandomCollisionConfig.getInitialBackoff(message_t* msg)
-       {
-               return (uint16_t)(9920 * RF230_ALARM_MICROSEC);
-       }
-
-       async command uint16_t RandomCollisionConfig.getCongestionBackoff(message_t* msg)
-       {
-               return (uint16_t)(2240 * RF230_ALARM_MICROSEC);
-       }
-
-       async command uint16_t RandomCollisionConfig.getTransmitBarrier(message_t* msg)
-       {
-               uint16_t time;
-
-               // TODO: maybe we should use the embedded timestamp of the message
-               time = call RadioAlarm.getNow();
-
-               // estimated response time (download the message, etc) is 5-8 bytes
-               if( call IEEE154Packet.requiresAckReply(msg) )
-                       time += (uint16_t)(32 * (-5 + 16 + 11 + 5) * RF230_ALARM_MICROSEC);
-               else
-                       time += (uint16_t)(32 * (-5 + 5) * RF230_ALARM_MICROSEC);
-
-               return time;
-       }
-
-       tasklet_async event void RadioAlarm.fired()     { }
-
-/*----------------- SlottedCollisionConfig -----------------*/
-
-       async command uint16_t SlottedCollisionConfig.getInitialDelay()
-       {
-               return 300;
-       }
-
-       async command uint8_t SlottedCollisionConfig.getScheduleExponent()
-       {
-               return 11;
-       }
-
-       async command uint16_t SlottedCollisionConfig.getTransmitTime(message_t* msg)
-       {
-               // TODO: check if the timestamp is correct
-               return getMeta(msg)->timestamp;
-       }
-
-       async command uint16_t SlottedCollisionConfig.getCollisionWindowStart(message_t* msg)
-       {
-               // the preamble (4 bytes), SFD (1 byte), plus two extra for safety
-               return getMeta(msg)->timestamp - (uint16_t)(7 * 32 * RF230_ALARM_MICROSEC);
-       }
-
-       async command uint16_t SlottedCollisionConfig.getCollisionWindowLength(message_t* msg)
-       {
-               return (uint16_t)(2 * 7 * 32 * RF230_ALARM_MICROSEC);
-       }
-
-       default tasklet_async event void SlottedCollisionConfig.timerTick() { }
-
-/*----------------- Dummy -----------------*/
-
-       async command void DummyConfig.nothing()
-       {
-       }
-}