break;
}
} while (id != nm->my_id);
+
+ if (nm->nodes[nm->my_id].next == nm->my_id) {
+ /* Uh oh, we're the only one left. */
+
+ /* TODO */
+ nm->nodes[nm->my_id].state = NM_MAIN_LOGIN;
+
+ /* TODO: Timeout 140ms (RCD 310) */
+ }
}
* can send its login frame to correct us.
*/
nm->tv.tv_sec = 0;
- nm->tv.tv_usec = NM_USECS_MY_TURN;
+ nm->tv.tv_usec = NM_USECS_NORMAL_TURN;
} else {
/* We just got some random ON message.
* Reset the timer looking out for broken
* connectivity.
*/
nm->tv.tv_sec = 0;
- nm->tv.tv_usec = NM_USECS_OTHER_TURN;
+ nm->tv.tv_usec = NM_USECS_NODE_AWOL;
}
break;
case NM_MAIN_LOGIN:
*/
if (next != sender) {
nm->tv.tv_sec = 0;
- nm->tv.tv_usec = NM_USECS_OTHER_TURN;
+ nm->tv.tv_usec = NM_USECS_NODE_AWOL;
}
break;
+ case NM_MAIN_LIMPHOME:
+ nm_update_my_next_id(nm);
}
nm_dump_all(nm);
static void nm_timeout_callback(struct NM_Main *nm, struct can_frame *frame)
{
nm->tv.tv_sec = 0;
- nm->tv.tv_usec = NM_USECS_OTHER_TURN;
+ nm->tv.tv_usec = NM_USECS_NODE_AWOL;
nm_buildframe(nm, frame);
}
static void nm_start(struct NM_Main *nm, struct can_frame *frame)
{
nm->tv.tv_sec = 0;
- nm->tv.tv_usec = 50000;
+ nm->tv.tv_usec = NM_USECS_NODE_AWOL;
struct NM_Main *nm;
fd_set rdfs;
int s;
+ NM_ID my_id;
- if (argc != 2) {
- printf("syntax: %s IFNAME\n", argv[0]);
+ if (argc != 3) {
+ printf("syntax: %s IFNAME MY_ID\n", argv[0]);
return 1;
}
- nm = nm_alloc(5, 0x0b, 0x420);
+ my_id = strtoul(argv[2], NULL, 0);
+
+ nm = nm_alloc(5, my_id, 0x420);
if (!nm) {
printf("Out of memory allocating NM struct.\n");
return 1;
}
nm_free(nm);
+ close(s);
return 0;
}