Import last changes from 2017-03-26, including MDI hack
authornorly <ny-git@enpas.org>
Thu, 2 Jul 2020 10:20:09 +0000 (12:20 +0200)
committernorly <ny-git@enpas.org>
Thu, 2 Jul 2020 10:20:43 +0000 (12:20 +0200)
vw-nm.c

diff --git a/vw-nm.c b/vw-nm.c
index e5872a7860c4168a0902d498c8ec0b172e10c61c..329f95e4b38fa8a52db1476faf67915afbca0aca 100644 (file)
--- a/vw-nm.c
+++ b/vw-nm.c
@@ -30,7 +30,8 @@
 
 
 
-static void nm_update_my_next_id(struct NM_Main *nm) {
+static void nm_update_my_next_id(struct NM_Main *nm)
+{
        unsigned id = nm->my_id;
 
        do {
@@ -53,6 +54,28 @@ static void nm_update_my_next_id(struct NM_Main *nm) {
 
 
 
+
+static unsigned nm_num_active_nodes(struct NM_Main *nm)
+{
+       unsigned id = 0;
+       unsigned active = 0;
+
+       for (id = 0; id < nm->max_nodes; id++) {
+               NM_State state;
+
+               state = nm->nodes[id].state & NM_MAIN_MASK;
+
+               if (state == NM_MAIN_ON || state == NM_MAIN_LOGIN) {
+                       /* We skip limp home nodes */
+                       active++;
+               }
+       }
+
+       return active;
+}
+
+
+
 static void nm_handle_can_frame(struct NM_Main *nm, struct can_frame *frame)
 {
        NM_ID sender, next;
@@ -152,6 +175,15 @@ static void nm_handle_can_frame(struct NM_Main *nm, struct can_frame *frame)
                         * round.
                         */
 
+                       /* HACK:
+                        * Special case: The Media-In's NM implementation
+                        * doesn't auto-switch to NM_ON. Let's say hello,
+                        * even if it ends up being a little late.
+                        */
+                       if (nm_num_active_nodes(nm) >= 2) {
+                               nm_set_timer_normal(nm);
+                       }
+
                        /* Nothing else to do. */
                        break;
                case NM_MAIN_LIMPHOME: