This crude and simple network time synchronization module synchronizes clocks of all nodes in a network.
The time synchronization is implicit in that no explicit time synchronization messages are sent: the module relies on the underlying network device driver to timestamp all radio messages, both outgoing and incoming. The code currently only works on the Tmote Sky platform and the cc2420 driver.
Every node has an authority level, which is included in every outgoing packet. If a message is received from a node with higher authority (lower authority number), the node adjusts its clock towards the clock of the sending node.
The timesynch module is implemented as a meta-MAC protocol, so that the module is invoked for every incoming packet.
Files | |
file | timesynch.h |
Header file for a simple time synchronization mechanism | |
Functions | |
int | timesynch_authority_level (void) |
Get the current authority level of the time-synchronized time. More... | |
void | timesynch_init (void) |
Initialize the timesynch module. More... | |
rtimer_clock_t | timesynch_offset (void) |
Get the current time-synchronized offset from the rtimer clock, which is used mainly for debugging. More... | |
rtimer_clock_t | timesynch_rtimer_to_time (rtimer_clock_t rtimer_time) |
Get the synchronized equivalent of an rtimer time. More... | |
void | timesynch_set_authority_level (int level) |
Set the authority level of the current time. More... | |
rtimer_clock_t | timesynch_time (void) |
Get the current time-synchronized time. More... | |
rtimer_clock_t | timesynch_time_to_rtimer (rtimer_clock_t synched_time) |
Get the current time-synchronized time, suitable for use with the rtimer module. More... | |
int timesynch_authority_level | ( | void | ) |
Get the current authority level of the time-synchronized time.
This function returns the current authority level of the time-synchronized time. A node with a lower authority level is defined to have a better notion of time than a node with a higher authority level. Authority level 0 is best and should be used by a sink node that has a connection to an outside, "true", clock source.
void timesynch_init | ( | void | ) |
Initialize the timesynch module.
This function initializes the timesynch module. This function must not be called before rime_init().
rtimer_clock_t timesynch_offset | ( | void | ) |
Get the current time-synchronized offset from the rtimer clock, which is used mainly for debugging.
This function returns the current time-synchronized offset from the rtimer arch clock. This is mainly useful for debugging the timesynch module.
rtimer_clock_t timesynch_rtimer_to_time | ( | rtimer_clock_t | rtimer_time | ) |
Get the synchronized equivalent of an rtimer time.
This function returns the time synchronized equivalent time corresponding to a (local) rtimer time.
void timesynch_set_authority_level | ( | int | level | ) |
Set the authority level of the current time.
level | The authority level |
rtimer_clock_t timesynch_time | ( | void | ) |
Get the current time-synchronized time.
This function returns the current time-synchronized time.
rtimer_clock_t timesynch_time_to_rtimer | ( | rtimer_clock_t | synched_time | ) |
Get the current time-synchronized time, suitable for use with the rtimer module.
This function returns the (local) rtimer-equivalent time corresponding to the current time-synchronized (global) time. The rtimer-equivalent time is used for setting rtimer timers that are synchronized to other nodes in the network.