X-Git-Url: https://git.enpas.org/?a=blobdiff_plain;f=vw-nm.c;h=5afa9612738d6da7cb23bb10f9bfdce717e767e1;hb=4beb79252d1c432feceed2e40429900b9ee0cf48;hp=e656e6847224c325845647d7792834684a9ed7c9;hpb=65531f9a117392b6858eec9435830ef168119064;p=revag-nm.git diff --git a/vw-nm.c b/vw-nm.c index e656e68..5afa961 100644 --- a/vw-nm.c +++ b/vw-nm.c @@ -65,6 +65,15 @@ static void nm_update_my_next_id(struct NM_Main *nm) { 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) */ + } } @@ -142,7 +151,7 @@ static void nm_handle_can_frame(struct NM_Main *nm, struct can_frame *frame) * 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: @@ -163,9 +172,11 @@ static void nm_handle_can_frame(struct NM_Main *nm, struct can_frame *frame) */ 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); @@ -190,7 +201,7 @@ static void nm_buildframe(struct NM_Main *nm, struct can_frame *frame) 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); }