* Communication functions *
***************************/
-static uint32_t comm_device_id = 0;
+static int comm_device_id = 0;
+static int comm_relay_mode = 0;
const uint64_t comm_sync_delay = NSEC_PER_SEC / 100;
static uint64_t comm_sync_due = 0;
// Debug output
sirq_printf("initialize: %s %s %s %s %s\r\n",
- body->valid & MSG_VALID_DEVICE ? "DEV" : "dev",
- body->valid & MSG_VALID_START ? "START" : "start",
- body->valid & MSG_VALID_PERIOD ? "PERIOD" : "period",
- body->valid & MSG_VALID_WORLD ? "WORLD" : "world",
- body->valid & MSG_VALID_SYNC ? "SYNC" : "sync");
+ body->control & MSG_CTL_VALID_DEVICE ? "DEV" : "dev",
+ body->control & MSG_CTL_VALID_START ? "START" : "start",
+ body->control & MSG_CTL_VALID_PERIOD ? "PERIOD" : "period",
+ body->control & MSG_CTL_VALID_WORLD ? "WORLD" : "world",
+ body->control & MSG_CTL_VALID_SYNC ? "SYNC" : "sync");
sirq_printf(" dev -- %d\r\n", body->device);
time_printf(" start ", comm_read_time(body->start));
time_printf(" period", comm_read_time(body->period));
time_printf(" world ", comm_read_time(body->world));
// Validate message parts and initialize
- if (body->valid & MSG_VALID_DEVICE)
+ if (body->control & MSG_CTL_VALID_DEVICE)
comm_device_id = body->device;
- if (body->valid & MSG_VALID_START ||
- body->valid & MSG_VALID_PERIOD) {
+ if (body->control & MSG_CTL_VALID_START ||
+ body->control & MSG_CTL_VALID_PERIOD) {
uint64_t start = comm_read_time(body->start);
uint64_t period = comm_read_time(body->period);
emit_enable(start, period);
}
- if (body->valid & MSG_VALID_WORLD) {
+ if (body->control & MSG_CTL_VALID_WORLD) {
uint64_t world = comm_read_time(body->world);
uint64_t local = tdma_time();
time_ext_init(local, world);
}
- if (body->valid & MSG_VALID_SYNC)
+ if (body->control & MSG_CTL_RELAY_MODE)
+ comm_relay_mode = 1;
+ else
+ comm_relay_mode = 0;
+
+ if (body->control & MSG_CTL_VALID_SYNC)
comm_sync_due = tdma_time() + comm_sync_delay;
}
*/
void comm_handle_event(header_t *head, event_msg_t *body)
{
- // Relay event from mbed to bbb
- if (comm_device_id == 1) {
- sirq_write(comm_sirq_bbb, head, sizeof(*head));
- sirq_write(comm_sirq_bbb, body, sizeof(*body));
- }
+ // Relay events from other mbeds
+ sirq_write(comm_sirq_bbb, head, sizeof(*head));
+ sirq_write(comm_sirq_bbb, body, sizeof(*body));
}