X-Git-Url: https://git.enpas.org/?a=blobdiff_plain;f=vw-nm.c;h=16631ad247fcb598157c5695d76a467777f03db0;hb=619746cf21fadd0bddc675083c7899e88fbc0774;hp=a181fce00866871671c1bd9f3dca7cdac0c15b08;hpb=93a111710a794d7c602d2b31387e4f882df4a7cd;p=revag-nm.git diff --git a/vw-nm.c b/vw-nm.c index a181fce..16631ad 100644 --- a/vw-nm.c +++ b/vw-nm.c @@ -79,10 +79,10 @@ static void nm_handle_can_frame(struct NM_Main *nm, struct can_frame *frame) } /* If we're currently stuck in Limp Home mode, and we can see - * someone else's messages, reset and re-login. + * someone else's messages: reset counters, reset NM, re-login. */ if (nm->nodes[nm->my_id].state == NM_MAIN_LIMPHOME) { - nm_reset(nm); + nm_initreset(nm); return; } @@ -179,27 +179,36 @@ 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_buildframe(nm, frame); - switch(nm->timer_reason) { case NM_TIMER_NOW: /* We're due to log in */ + nm_buildframe(nm, frame); + + if ((nm->nodes[nm->my_id].state & NM_MAIN_MASK) + != NM_MAIN_LOGIN) { + + printf("BUG: TIMER_NOW expired in non-ON state %u\n", + nm->nodes[nm->my_id].state & NM_MAIN_MASK); + } /* We're going to be ready, let's * change state (RCD 310 behavior) */ nm->nodes[nm->my_id].state = NM_MAIN_ON; + nm_set_timer_normal(nm); break; case NM_TIMER_NORMAL: /* We're due to send our own ring message */ - switch(nm->nodes[nm->my_id].state & NM_MAIN_MASK) { - case NM_MAIN_ON: - break; - default: - printf("BUG: TIMER_NORMAL expired in non-ON state\n"); - break; + nm_buildframe(nm, frame); + + if ((nm->nodes[nm->my_id].state & NM_MAIN_MASK) + != NM_MAIN_ON) { + + printf("BUG: TIMER_NORMAL expired in non-ON state %u\n", + nm->nodes[nm->my_id].state & NM_MAIN_MASK); } + nm_set_timer_awol(nm); break; case NM_TIMER_AWOL: @@ -208,8 +217,12 @@ static void nm_timeout_callback(struct NM_Main *nm, struct can_frame *frame) * Reset everything and start over. */ nm_reset(nm); + nm_buildframe(nm, frame); break; case NM_TIMER_LIMPHOME: + printf("Limp home timer expired again :(\n"); + + nm_buildframe(nm, frame); nm_set_timer_limphome(nm); break; }