]> oss.titaniummirror.com Git - tinyos-2.x.git/blobdiff - tos/chips/cc2420/csma/CC2420CsmaP.nc
Upstream commits to tos/chips/cc2420, Aug 7 2008 thru Jul 16 2009, except one.
[tinyos-2.x.git] / tos / chips / cc2420 / csma / CC2420CsmaP.nc
index fe497824af3b4d4040c4aab3a4f5ee48211b14e2..e67f921763774af7c11d0e2492e7a9973083b020 100644 (file)
  * @version $Revision$ $Date$
  */
 
-module CC2420CsmaP {
+module CC2420CsmaP @safe() {
 
   provides interface SplitControl;
   provides interface Send;
-  provides interface RadioBackoff[am_id_t amId];
+  provides interface RadioBackoff;
 
   uses interface Resource;
   uses interface CC2420Power;
@@ -46,7 +46,6 @@ module CC2420CsmaP {
   uses interface CC2420Transmit;
   uses interface RadioBackoff as SubBackoff;
   uses interface Random;
-  uses interface AMPacket;
   uses interface Leds;
   uses interface CC2420Packet;
   uses interface CC2420PacketBody;
@@ -64,7 +63,7 @@ implementation {
     S_TRANSMITTING,
   };
 
-  message_t* m_msg;
+  message_t* ONE_NOK m_msg;
   
   error_t sendErr = SUCCESS;
   
@@ -73,7 +72,6 @@ implementation {
   
   /****************** Prototypes ****************/
   task void startDone_task();
-  task void startDone_task();
   task void stopDone_task();
   task void sendDone_task();
   
@@ -135,28 +133,34 @@ implementation {
       m_msg = p_msg;
     }
 
-    header->length = len;
+    header->length = len + CC2420_SIZE;
     header->fcf &= 1 << IEEE154_FCF_ACK_REQ;
     header->fcf |= ( ( IEEE154_TYPE_DATA << IEEE154_FCF_FRAME_TYPE ) |
                     ( 1 << IEEE154_FCF_INTRAPAN ) |
                     ( IEEE154_ADDR_SHORT << IEEE154_FCF_DEST_ADDR_MODE ) |
                     ( IEEE154_ADDR_SHORT << IEEE154_FCF_SRC_ADDR_MODE ) );
-    header->src = call AMPacket.address();
+
     metadata->ack = FALSE;
     metadata->rssi = 0;
     metadata->lqi = 0;
-    metadata->time = 0;
-    
+    //metadata->timesync = FALSE;
+    metadata->timestamp = CC2420_INVALID_TIMESTAMP;
+
     ccaOn = TRUE;
-    signal RadioBackoff.requestCca[((cc2420_header_t*)(m_msg->data - 
-        sizeof(cc2420_header_t)))->type](m_msg);
+    signal RadioBackoff.requestCca(m_msg);
+
     call CC2420Transmit.send( m_msg, ccaOn );
     return SUCCESS;
 
   }
 
-  command void* Send.getPayload(message_t* m) {
-    return m->data;
+  command void* Send.getPayload(message_t* m, uint8_t len) {
+    if (len <= call Send.maxPayloadLength()) {
+      return (void* COUNT_NOK(len))m->data;
+    }
+    else {
+      return NULL;
+    }
   }
 
   command uint8_t Send.maxPayloadLength() {
@@ -168,7 +172,7 @@ implementation {
    * Must be called within a requestInitialBackoff event
    * @param backoffTime the amount of time in some unspecified units to backoff
    */
-  async command void RadioBackoff.setInitialBackoff[am_id_t amId](uint16_t backoffTime) {
+  async command void RadioBackoff.setInitialBackoff(uint16_t backoffTime) {
     call SubBackoff.setInitialBackoff(backoffTime);
   }
   
@@ -176,7 +180,7 @@ implementation {
    * Must be called within a requestCongestionBackoff event
    * @param backoffTime the amount of time in some unspecified units to backoff
    */
-  async command void RadioBackoff.setCongestionBackoff[am_id_t amId](uint16_t backoffTime) {
+  async command void RadioBackoff.setCongestionBackoff(uint16_t backoffTime) {
     call SubBackoff.setCongestionBackoff(backoffTime);
   }
       
@@ -185,7 +189,7 @@ implementation {
    * event
    * @param ccaOn TRUE to enable CCA, which is the default.
    */
-  async command void RadioBackoff.setCca[am_id_t amId](bool useCca) {
+  async command void RadioBackoff.setCca(bool useCca) {
     ccaOn = useCca;
   }
   
@@ -213,20 +217,19 @@ implementation {
     call SubBackoff.setInitialBackoff ( call Random.rand16() 
         % (0x1F * CC2420_BACKOFF_PERIOD) + CC2420_MIN_BACKOFF);
         
-    signal RadioBackoff.requestInitialBackoff[((cc2420_header_t*)(msg->data - 
-        sizeof(cc2420_header_t)))->type](msg);
+    signal RadioBackoff.requestInitialBackoff(msg);
   }
 
   async event void SubBackoff.requestCongestionBackoff(message_t *msg) {
     call SubBackoff.setCongestionBackoff( call Random.rand16() 
         % (0x7 * CC2420_BACKOFF_PERIOD) + CC2420_MIN_BACKOFF);
 
-    signal RadioBackoff.requestCongestionBackoff[((cc2420_header_t*)(msg->data - 
-        sizeof(cc2420_header_t)))->type](msg);
+    signal RadioBackoff.requestCongestionBackoff(msg);
   }
   
   async event void SubBackoff.requestCca(message_t *msg) {
     // Lower layers than this do not configure the CCA settings
+    signal RadioBackoff.requestCca(msg);
   }
   
   
@@ -275,17 +278,15 @@ implementation {
   default event void SplitControl.stopDone(error_t error) {
   }
   
-  
-  default async event void RadioBackoff.requestInitialBackoff[am_id_t amId](
-      message_t *msg) {
+  default async event void RadioBackoff.requestInitialBackoff(message_t *msg) {
   }
 
-  default async event void RadioBackoff.requestCongestionBackoff[am_id_t amId](
-      message_t *msg) {
+  default async event void RadioBackoff.requestCongestionBackoff(message_t *msg) {
   }
   
-  default async event void RadioBackoff.requestCca[am_id_t amId](
-      message_t *msg) {
+  default async event void RadioBackoff.requestCca(message_t *msg) {
   }
+  
+  
 }