]> oss.titaniummirror.com Git - tinyos-2.x.git/commitdiff
- fix epic OPTFLAGS
authorsdhsdh <sdhsdh>
Mon, 14 Sep 2009 22:57:45 +0000 (22:57 +0000)
committersdhsdh <sdhsdh>
Mon, 14 Sep 2009 22:57:45 +0000 (22:57 +0000)
 - correctly acquire resource for send

support/make/epic.target
tos/lib/net/blip/IPDispatchC.nc
tos/lib/net/blip/ResourceSendP.nc [new file with mode: 0644]

index 02b6b4b50bbff3469443881c20f628482f3ec0fa..c040c96a0309fe9a9ee40316985614055fb31313 100644 (file)
@@ -5,7 +5,7 @@ PLATFORM ?= epic
 
 # Disable MSP430 hardware multiply because it makes MSPGCC die
 PFLAGS += -mdisable-hwmul
-OPTFLAGS += -O
+OPTFLAGS += -O
 
 # Default BSL assumes telosb-like programming interface
 MSP_BSL ?= tos-bsl
index 66a44c0f2c8f27308ad69fb14d8a6842f159112d..407aca655fc64673ccff4d9611a9ebfe658912b2 100644 (file)
@@ -39,7 +39,7 @@ configuration IPDispatchC {
   }
 } implementation {
   
-  components Ieee154MessageC as MessageC;
+  components Ieee154MessageC as MessageC, ResourceSendP;
   components MainC, IPDispatchP, IPAddressC, IPRoutingP; 
   components NoLedsC as LedsC;
   components RandomC;
@@ -50,7 +50,10 @@ configuration IPDispatchC {
 
   IPDispatchP.Boot -> MainC;
 
-  IPDispatchP.Ieee154Send -> MessageC;
+  ResourceSendP.SubSend -> MessageC;
+  ResourceSendP.Resource -> MessageC.SendResource[unique(IEEE154_SEND_CLIENT)];
+  IPDispatchP.Ieee154Send -> ResourceSendP.Ieee154Send;
+
   IPDispatchP.Ieee154Receive -> MessageC.Ieee154Receive;
   IPDispatchP.Packet -> MessageC.Packet;
 #ifdef LOW_POWER_LISTENING
diff --git a/tos/lib/net/blip/ResourceSendP.nc b/tos/lib/net/blip/ResourceSendP.nc
new file mode 100644 (file)
index 0000000..31f6ff0
--- /dev/null
@@ -0,0 +1,62 @@
+
+#include <Ieee154.h>
+
+#include "PrintfUART.h"
+
+module ResourceSendP {
+  provides interface Ieee154Send;
+  uses interface Resource;
+  uses interface Ieee154Send as SubSend;
+} implementation {
+  ieee154_saddr_t m_addr;
+  message_t      *m_msg = NULL;
+  uint8_t         m_len;
+  
+  command error_t Ieee154Send.send(ieee154_saddr_t addr,
+                                   message_t* msg,
+                                   uint8_t len) {
+    if (m_msg != NULL) return EBUSY;
+
+    m_addr = addr;
+    m_msg = msg;
+    m_len = len;
+
+    call Resource.request();
+    return SUCCESS;
+  }
+
+  event void SubSend.sendDone(message_t* msg, error_t result) {
+    call Resource.release();
+    signal Ieee154Send.sendDone(msg, result);
+    m_msg = NULL;
+  }
+
+  event void Resource.granted() {
+    error_t rc;
+    if ((rc = (call SubSend.send(m_addr, m_msg, m_len))) != SUCCESS) {
+      signal Ieee154Send.sendDone(m_msg, rc);
+      m_msg = NULL;
+      call Resource.release();
+    }
+  }
+
+  command error_t Ieee154Send.cancel(message_t* msg) {
+    if (m_msg != NULL) {
+      call Resource.release();
+      m_msg = NULL;
+      return call SubSend.cancel(msg);
+    } else {
+      return FAIL;
+    }
+  }
+
+  command uint8_t Ieee154Send.maxPayloadLength() {
+    return call SubSend.maxPayloadLength();
+  }
+
+  command void* Ieee154Send.getPayload(message_t* m, uint8_t len) {
+    return call SubSend.getPayload(m, len);
+  }
+
+
+}