It's been brought to my attention that my patch did not make it through to
the mailing list in general. For the archives and anyone who needs a dirty
hack to get BLIP & RF212 working, here is the patch in-line. See my earlier
email for details on what is wrong with it :)
diff --git a/tos/chips/rf212/BareMessageC.nc
b/tos/chips/rf212/BareMessageC.nc
new file mode 100644
index 0000000..29c2913
--- /dev/null
+++ b/tos/chips/rf212/BareMessageC.nc
@@ -0,0 +1,25 @@
+configuration BareMessageC
+{
+ provides
+ {
+ interface BareSend;
+ interface BareReceive;
+ interface Packet as BarePacket;
+ interface PacketLink;
+ interface LowPowerListening;
+ interface SplitControl as RadioControl;
+ interface ShortAddressConfig;
+ }
+}
+implementation
+{
+ components RF212RadioC;
+
+ BareSend = RF212RadioC;
+ BareReceive = RF212RadioC;
+ BarePacket = RF212RadioC.BarePacket;
+ PacketLink = RF212RadioC;
+ LowPowerListening = RF212RadioC;
+ RadioControl = RF212RadioC.SplitControl;
+ ShortAddressConfig = RF212RadioC;
+}
diff --git a/tos/chips/rf212/RF212BarePacketP.nc
b/tos/chips/rf212/RF212BarePacketP.nc
new file mode 100644
index 0000000..3764047
--- /dev/null
+++ b/tos/chips/rf212/RF212BarePacketP.nc
@@ -0,0 +1,35 @@
+module RF212BarePacketP
+{
+ provides interface Packet as BarePacket;
+ uses interface RadioPacket;
+}
+implementation
+{
+ command void BarePacket.clear(message_t *msg)
+ {
+ call RadioPacket.clear(msg);
+ }
+
+ command uint8_t BarePacket.payloadLength(message_t *msg)
+ {
+ return call RadioPacket.payloadLength(msg);
+ }
+
+ command void BarePacket.setPayloadLength(message_t *msg, uint8_t len)
+ {
+ call RadioPacket.setPayloadLength(msg, len);
+ }
+
+ command uint8_t BarePacket.maxPayloadLength()
+ {
+ return call RadioPacket.maxPayloadLength();
+ }
+
+ command void *BarePacket.getPayload(message_t *msg, uint8_t len)
+ {
+ if (len > call RadioPacket.maxPayloadLength())
+ return NULL;
+ else
+ return (void*)msg;
+ }
+}
diff --git a/tos/chips/rf212/RF212RadioC.nc b/tos/chips/rf212/RF212RadioC.nc
index ffbb23a..40cec20 100644
--- a/tos/chips/rf212/RF212RadioC.nc
+++ b/tos/chips/rf212/RF212RadioC.nc
@@ -56,13 +56,17 @@ configuration RF212RadioC
#ifndef TFRAMES_ENABLED
interface Ieee154Send;
+ interface BareSend;
interface Receive as Ieee154Receive;
+ interface BareReceive;
interface SendNotifier as Ieee154Notifier;
interface Resource as SendResource[uint8_t clint];
interface Ieee154Packet;
interface Packet as PacketForIeee154Message;
+ interface Packet as BarePacket;
+ interface ShortAddressConfig;
#endif
interface PacketAcknowledgements;
@@ -96,6 +100,15 @@ implementation
components RF212RadioP as RadioP;
+ BareSend = TinyosNetworkLayerC.Ieee154Send;
+ BareReceive = TinyosNetworkLayerC.Ieee154Receive;
+ ShortAddressConfig = RadioP;
+
+ components RF212BarePacketP as BarePacketP;
+ BarePacket = BarePacketP;
+ BarePacketP.RadioPacket -> RadioDriverLayerC;
+
+
#ifdef RADIO_DEBUG
components AssertC;
#endif
diff --git a/tos/chips/rf212/RF212RadioP.nc b/tos/chips/rf212/RF212RadioP.nc
index 273e85b..feeab36 100644
--- a/tos/chips/rf212/RF212RadioP.nc
+++ b/tos/chips/rf212/RF212RadioP.nc
@@ -50,6 +50,8 @@ module RF212RadioP
interface ActiveMessageConfig;
interface DummyConfig;
+ interface ShortAddressConfig;
+
#ifdef LOW_POWER_LISTENING
interface LowPowerListeningConfig;
#endif
@@ -309,6 +311,18 @@ implementation
{
}
+/*----------------- ShortAddressConfig-----------------*/
+
+ command void ShortAddressConfig.setShortAddr(uint16_t address)
+ {
+ // TODO: actually write the new ID
+ signal ShortAddressConfig.setShortAddrDone(FAIL);
+ }
+
+ default event void ShortAddressConfig.setShortAddrDone(error_t error)
+ {
+ }
+
/*----------------- LowPowerListening -----------------*/
#ifdef LOW_POWER_LISTENING
diff --git a/tos/lib/net/blip/IPAddressP.nc b/tos/lib/net/blip/IPAddressP.nc
index 755c45f..6555975 100644
--- a/tos/lib/net/blip/IPAddressP.nc
+++ b/tos/lib/net/blip/IPAddressP.nc
@@ -31,7 +31,7 @@ module IPAddressP {
interface Ieee154Address;
}
} implementation {
- bool m_valid_addr = FALSE, m_short_addr = FALSE;
+ bool m_valid_addr = FALSE, m_short_addr = TRUE;
struct in6_addr m_addr;
command bool IPAddress.getLLAddr(struct in6_addr *addr) {
diff --git a/tos/lib/net/blip/IPDispatchC.nc
b/tos/lib/net/blip/IPDispatchC.nc
index d346367..67840a2 100644
--- a/tos/lib/net/blip/IPDispatchC.nc
+++ b/tos/lib/net/blip/IPDispatchC.nc
@@ -40,7 +40,7 @@ configuration IPDispatchC {
/* IPDispatchP wiring -- fragment rassembly and lib6lowpan bindings */
components IPDispatchP;
- components CC2420RadioC as MessageC;
+ components BareMessageC as MessageC;
components ReadLqiC;
components new TimerMilliC();
@@ -58,8 +58,8 @@ configuration IPDispatchC {
IPDispatchP.RadioControl -> MessageC;
IPDispatchP.BarePacket -> MessageC.BarePacket;
- IPDispatchP.Ieee154Send -> MessageC.BareSend;
- IPDispatchP.Ieee154Receive -> MessageC.BareReceive;
+ IPDispatchP.BareSend -> MessageC;
+ IPDispatchP.BareReceive -> MessageC;
#ifdef LOW_POWER_LISTENING
IPDispatchP.LowPowerListening -> MessageC;
diff --git a/tos/lib/net/blip/IPDispatchP.nc
b/tos/lib/net/blip/IPDispatchP.nc
index 6e4e5e2..d73937b 100644
--- a/tos/lib/net/blip/IPDispatchP.nc
+++ b/tos/lib/net/blip/IPDispatchP.nc
@@ -55,8 +55,8 @@ module IPDispatchP {
interface SplitControl as RadioControl;
interface Packet as BarePacket;
- interface Send as Ieee154Send;
- interface Receive as Ieee154Receive;
+ interface BareSend;
+ interface BareReceive;
/* context lookup */
interface NeighborDiscovery;
@@ -334,9 +334,11 @@ void SENDINFO_DECR(struct send_info *si) {
return ret;
}
- event message_t *Ieee154Receive.receive(message_t *msg, void
*msg_payload, uint8_t len) {
+ event message_t *BareReceive.receive(message_t *msg) {
struct packed_lowmsg lowmsg;
struct ieee154_frame_addr frame_address;
+ uint8_t len = call BarePacket.payloadLength(msg);
+ void *msg_payload = call BarePacket.getPayload(msg, len);
uint8_t *buf = msg_payload;
// printf(" -- RECEIVE -- len : %i\n", len);
@@ -437,8 +439,7 @@ void SENDINFO_DECR(struct send_info *si) {
goto fail;
}
- if ((call Ieee154Send.send(s_entry->msg,
- call
BarePacket.payloadLength(s_entry->msg))) != SUCCESS) {
+ if (call BareSend.send(s_entry->msg) != SUCCESS) {
dbg("Drops", "drops: sendTask: send failed\n");
goto fail;
} else {
@@ -480,6 +481,7 @@ void SENDINFO_DECR(struct send_info *si) {
struct send_entry *s_entry;
message_t *outgoing;
+ uint8_t max_len;
int frag_len = 1;
error_t rc = SUCCESS;
@@ -519,8 +521,9 @@ void SENDINFO_DECR(struct send_info *si) {
}
call BarePacket.clear(outgoing);
- frag_len = lowpan_frag_get(call Ieee154Send.getPayload(outgoing, 0),
- call BarePacket.maxPayloadLength(),
+ max_len = call BarePacket.maxPayloadLength();
+ frag_len = lowpan_frag_get(call BarePacket.getPayload(outgoing,
max_len),
+ max_len,
msg,
frame_addr,
&ctx);
@@ -568,7 +571,7 @@ void SENDINFO_DECR(struct send_info *si) {
return rc;
}
- event void Ieee154Send.sendDone(message_t *msg, error_t error) {
+ event void BareSend.sendDone(message_t *msg, error_t error) {
struct send_entry *s_entry = call SendQueue.head();
radioBusy = FALSE;
diff --git a/tos/lib/net/blip/Ieee154AddressC.nc
b/tos/lib/net/blip/Ieee154AddressC.nc
index 74d83eb..896e0f8 100644
--- a/tos/lib/net/blip/Ieee154AddressC.nc
+++ b/tos/lib/net/blip/Ieee154AddressC.nc
@@ -5,13 +5,11 @@ configuration Ieee154AddressC {
} implementation {
components Ieee154AddressP;
components LocalIeeeEui64C;
+ components BareMessageC;
components MainC;
Ieee154Address = Ieee154AddressP;
MainC.SoftwareInit -> Ieee154AddressP;
Ieee154AddressP.LocalIeeeEui64 -> LocalIeeeEui64C;
-
- // workaround until the radio stack uses this interface
- components CC2420ControlC;
- Ieee154AddressP.CC2420Config -> CC2420ControlC;
+ Ieee154AddressP.ShortAddressConfig -> BareMessageC;
}
diff --git a/tos/lib/net/blip/Ieee154AddressP.nc
b/tos/lib/net/blip/Ieee154AddressP.nc
index 82a58a8..205d238 100644
--- a/tos/lib/net/blip/Ieee154AddressP.nc
+++ b/tos/lib/net/blip/Ieee154AddressP.nc
@@ -6,7 +6,7 @@ module Ieee154AddressP {
}
uses {
interface LocalIeeeEui64;
- interface CC2420Config;
+ interface ShortAddressConfig;
}
} implementation {
ieee154_saddr_t m_saddr;
@@ -40,11 +40,12 @@ module Ieee154AddressP {
command error_t Ieee154Address.setShortAddr(ieee154_saddr_t addr) {
m_saddr = addr;
- call CC2420Config.setShortAddr(addr);
- call CC2420Config.sync();
+ call ShortAddressConfig.setShortAddr(addr);
signal Ieee154Address.changed();
return SUCCESS;
}
- event void CC2420Config.syncDone(error_t err) {}
+ event void ShortAddressConfig.setShortAddrDone(error_t error)
+ {
+ }
}
diff --git a/tos/lib/net/blip/interfaces/ShortAddressConfig.nc
b/tos/lib/net/blip/interfaces/ShortAddressConfig.nc
new file mode 100644
index 0000000..1b8c051
--- /dev/null
+++ b/tos/lib/net/blip/interfaces/ShortAddressConfig.nc
@@ -0,0 +1,6 @@
+interface ShortAddressConfig
+{
+ command void setShortAddr(uint16_t address);
+
+ event void setShortAddrDone(error_t error);
+}
--
Johny Mattsson
Senior Software Engineer
DiUS Computing Pty. Ltd.
*where ideas are engineered
*
_______________________________________________
Tinyos-help mailing list
[email protected]
https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help