X-Git-Url: https://oss.titaniummirror.com/gitweb/?a=blobdiff_plain;f=tos%2Fchips%2Fcc2420%2Fpacket%2FCC2420PacketP.nc;h=50b138fcf19280a03a228bb5e6d5718cf3663a77;hb=e9bfab607e051bae6afb47b44892ce37541d1b44;hp=41002d5b37637f8fad706d2b2e4434019ca6cde4;hpb=0ab1429a57148045a74254930442ecddd47d63a3;p=tinyos-2.x.git diff --git a/tos/chips/cc2420/packet/CC2420PacketP.nc b/tos/chips/cc2420/packet/CC2420PacketP.nc index 41002d5b..50b138fc 100644 --- a/tos/chips/cc2420/packet/CC2420PacketP.nc +++ b/tos/chips/cc2420/packet/CC2420PacketP.nc @@ -38,8 +38,9 @@ #include "IEEE802154.h" #include "message.h" #include "CC2420.h" +#include "CC2420TimeSyncMessage.h" -module CC2420PacketP { +module CC2420PacketP @safe() { provides { interface CC2420Packet; @@ -94,6 +95,21 @@ implementation { return (call CC2420PacketBody.getMetadata( p_msg ))->lqi; } + async command uint8_t CC2420Packet.getNetwork( message_t* p_msg ) { +#if defined(TFRAMES_ENABLED) + return TINYOS_6LOWPAN_NETWORK_ID; +#else + return (call CC2420PacketBody.getHeader( p_msg ))->network; +#endif + } + + async command void CC2420Packet.setNetwork( message_t* p_msg , uint8_t networkId ) { +#if ! defined(TFRAMES_ENABLED) + (call CC2420PacketBody.getHeader( p_msg ))->network = networkId; +#endif + } + + /***************** CC2420PacketBody Commands ****************/ async command cc2420_header_t * ONE CC2420PacketBody.getHeader( message_t* ONE msg ) { return TCAST(cc2420_header_t* ONE, (uint8_t *)msg + offsetof(message_t, data) - sizeof( cc2420_header_t )); @@ -137,10 +153,13 @@ implementation { return call PacketTimeStamp32khz.isValid(msg); } + //timestmap is always represented in 32khz + //28.1 is coefficient difference between T32khz and TMilli on MicaZ async command uint32_t PacketTimeStampMilli.timestamp(message_t* msg) { - int32_t offset = call PacketTimeStamp32khz.timestamp(msg) - call LocalTime32khz.get(); - return (offset >> 5) + call LocalTimeMilli.get(); + int32_t offset = (call LocalTime32khz.get()-call PacketTimeStamp32khz.timestamp(msg)); + offset/=28.1; + return call LocalTimeMilli.get() - offset; } async command void PacketTimeStampMilli.clear(message_t* msg) @@ -159,12 +178,18 @@ implementation { return ((call CC2420PacketBody.getMetadata( msg ))->timesync); } + //returns offset of timestamp from the beginning of cc2420 header which is + // sizeof(cc2420_header_t)+datalen-sizeof(timesync_radio_t) + //uses packet length of the message which is + // MAC_HEADER_SIZE+MAC_FOOTER_SIZE+datalen async command uint8_t PacketTimeSyncOffset.get(message_t* msg) { - // minus 1 because one less byte is transmitted - return (call CC2420PacketBody.getHeader(msg))->length - 1 - sizeof(uint32_t); + return (call CC2420PacketBody.getHeader(msg))->length + + (sizeof(cc2420_header_t) - MAC_HEADER_SIZE) + - MAC_FOOTER_SIZE + - sizeof(timesync_radio_t); } - + async command void PacketTimeSyncOffset.set(message_t* msg) { (call CC2420PacketBody.getMetadata( msg ))->timesync = TRUE;