#include "IEEE802154.h"
#include "message.h"
#include "CC2420.h"
+#include "CC2420TimeSyncMessage.h"
module CC2420PacketP @safe() {
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)
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;