/*********************** * Message Definitions * ***********************/ #include #define MSG_HEADER 0x1234 #define MSG_VALID_DEVICE 0x0001 // device id is valid #define MSG_VALID_WORLD 0x0002 // world time is valid #define MSG_VALID_START 0x0004 // start time is valid #define MSG_VALID_PERIOD 0x0008 // period is valid #define MSG_VALID_SYNC 0x8000 // begin time sync #pragma pack(1) typedef enum { MSG_ID_INIT, // Device initialization MSG_ID_SYNC, // Time synchronization MSG_ID_EVENT, // Event occurred MSG_MAX_ID, // Maximum message ID } msgid_t; typedef struct { uint32_t seconds; // Seconds since 1970 uint32_t nanosec; // Nanoseconds since 'seconds' } ntime_t; typedef struct { uint16_t header; // Message Header uint16_t msgid; // Message ID uint16_t length; // Body length uint16_t cksum; // Body checksum } header_t; typedef struct { uint16_t valid; // Message valid bits uint16_t device; // Device ID to use ntime_t world; // World time (since 1970) ntime_t start; // Transmit start time ntime_t period; // Transmit period } init_msg_t; typedef struct { uint32_t seq; // Current sequence counter ntime_t time; // Time of previous message } sync_msg_t; typedef struct { uint16_t device; // Device ID uint16_t event; // Event ID ntime_t world; // UTC Time of event ntime_t local; // Time since turn-on } event_msg_t; #pragma pack()