projects
/
revag-nm.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Import last changes from 2017-03-26, including MDI hack
[revag-nm.git]
/
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 {
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;
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.
*/
* 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:
/* Nothing else to do. */
break;
case NM_MAIN_LIMPHOME: