6 function dispatch_value_to_widget(widget, index, value, oldval) { |
6 function dispatch_value_to_widget(widget, index, value, oldval) { |
7 try { |
7 try { |
8 let idx = widget.offset ? index - widget.offset : index; |
8 let idx = widget.offset ? index - widget.offset : index; |
9 let idxidx = widget.indexes.indexOf(idx); |
9 let idxidx = widget.indexes.indexOf(idx); |
10 let d = widget.dispatch; |
10 let d = widget.dispatch; |
11 console.log(index, idx, idxidx, value); |
|
12 if(typeof(d) == "function" && idxidx == 0){ |
11 if(typeof(d) == "function" && idxidx == 0){ |
13 d.call(widget, value, oldval); |
12 d.call(widget, value, oldval); |
14 } |
13 } |
15 else if(typeof(d) == "object" && d.length >= idxidx){ |
14 else if(typeof(d) == "object" && d.length >= idxidx){ |
16 d[idxidx].call(widget, value, oldval); |
15 d[idxidx].call(widget, value, oldval); |
180 subscribers[heartbeat_index].add({ |
179 subscribers[heartbeat_index].add({ |
181 /* type: "Watchdog", */ |
180 /* type: "Watchdog", */ |
182 frequency: 1, |
181 frequency: 1, |
183 indexes: [heartbeat_index], |
182 indexes: [heartbeat_index], |
184 dispatch: function(value) { |
183 dispatch: function(value) { |
185 // console.log("Heartbeat" + value); |
|
186 change_hmi_value(heartbeat_index, "+1"); |
184 change_hmi_value(heartbeat_index, "+1"); |
187 } |
185 } |
188 }); |
186 }); |
189 |
187 |
190 function update_subscriptions() { |
188 function update_subscriptions() { |
277 function* chain(a,b){ |
275 function* chain(a,b){ |
278 yield* a; |
276 yield* a; |
279 yield* b; |
277 yield* b; |
280 }; |
278 }; |
281 |
279 |
|
280 function unsubscribe(){ |
|
281 widget = this; |
|
282 /* remove subsribers */ |
|
283 for(let index of widget.indexes){ |
|
284 let idx = index + widget.offset; |
|
285 subscribers[idx].delete(widget); |
|
286 } |
|
287 widget.offset = 0; |
|
288 } |
|
289 |
|
290 function subscribe(new_offset=0){ |
|
291 widget = this; |
|
292 /* set the offset because relative */ |
|
293 widget.offset = new_offset; |
|
294 /* add widget's subsribers */ |
|
295 for(let index of widget.indexes){ |
|
296 subscribers[index + new_offset].add(widget); |
|
297 } |
|
298 } |
|
299 |
282 function switch_subscribed_page(page_name, page_index) { |
300 function switch_subscribed_page(page_name, page_index) { |
283 let old_desc = page_desc[current_subscribed_page]; |
301 let old_desc = page_desc[current_subscribed_page]; |
284 let new_desc = page_desc[page_name]; |
302 let new_desc = page_desc[page_name]; |
285 |
303 |
286 if(new_desc == undefined){ |
304 if(new_desc == undefined){ |
291 if(page_index == undefined){ |
309 if(page_index == undefined){ |
292 page_index = new_desc.page_index; |
310 page_index = new_desc.page_index; |
293 } |
311 } |
294 |
312 |
295 if(old_desc){ |
313 if(old_desc){ |
296 for(let widget of old_desc.absolute_widgets){ |
314 old_desc.absolute_widgets.map(w=>w.unsub()); |
297 /* remove subsribers */ |
315 old_desc.relative_widgets.map(w=>w.unsub()); |
298 for(let index of widget.indexes){ |
316 } |
299 subscribers[index].delete(widget); |
317 new_desc.absolute_widgets.map(w=>w.sub()); |
300 } |
|
301 } |
|
302 for(let widget of old_desc.relative_widgets){ |
|
303 /* remove subsribers */ |
|
304 for(let index of widget.indexes){ |
|
305 let idx = widget.offset ? index + widget.offset : index; |
|
306 subscribers[idx].delete(widget); |
|
307 } |
|
308 /* lose the offset */ |
|
309 delete widget.offset; |
|
310 } |
|
311 } |
|
312 for(let widget of new_desc.absolute_widgets){ |
|
313 /* add widget's subsribers */ |
|
314 for(let index of widget.indexes){ |
|
315 subscribers[index].add(widget); |
|
316 } |
|
317 } |
|
318 var new_offset = page_index == undefined ? 0 : page_index - new_desc.page_index; |
318 var new_offset = page_index == undefined ? 0 : page_index - new_desc.page_index; |
319 for(let widget of new_desc.relative_widgets){ |
319 new_desc.relative_widgets.map(w=>w.sub(new_offset)); |
320 /* set the offset because relative */ |
|
321 widget.offset = new_offset; |
|
322 /* add widget's subsribers */ |
|
323 for(let index of widget.indexes){ |
|
324 subscribers[index + new_offset].add(widget); |
|
325 } |
|
326 } |
|
327 |
320 |
328 update_subscriptions(); |
321 update_subscriptions(); |
329 |
322 |
330 current_subscribed_page = page_name; |
323 current_subscribed_page = page_name; |
331 |
324 |