From: sdhsdh Date: Mon, 14 Sep 2009 22:57:45 +0000 (+0000) Subject: - fix epic OPTFLAGS X-Git-Tag: rc_6_tinyos_2_1_1~266 X-Git-Url: https://oss.titaniummirror.com/gitweb/?p=tinyos-2.x.git;a=commitdiff_plain;h=c76f0ecb25bc766d836b79552b1659b7a7465b56 - fix epic OPTFLAGS - correctly acquire resource for send --- diff --git a/support/make/epic.target b/support/make/epic.target index 02b6b4b5..c040c96a 100644 --- a/support/make/epic.target +++ b/support/make/epic.target @@ -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 diff --git a/tos/lib/net/blip/IPDispatchC.nc b/tos/lib/net/blip/IPDispatchC.nc index 66a44c0f..407aca65 100644 --- a/tos/lib/net/blip/IPDispatchC.nc +++ b/tos/lib/net/blip/IPDispatchC.nc @@ -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 index 00000000..31f6ff07 --- /dev/null +++ b/tos/lib/net/blip/ResourceSendP.nc @@ -0,0 +1,62 @@ + +#include + +#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); + } + + +}