196 </xsl:text> |
196 </xsl:text> |
197 <xsl:text> type: "</xsl:text> |
197 <xsl:text> type: "</xsl:text> |
198 <xsl:value-of select="$widget/@type"/> |
198 <xsl:value-of select="$widget/@type"/> |
199 <xsl:text>", |
199 <xsl:text>", |
200 </xsl:text> |
200 </xsl:text> |
201 <xsl:text> frequency: </xsl:text> |
|
202 <xsl:apply-templates mode="refresh_frequency" select="$widget"/> |
|
203 <xsl:text>, |
|
204 </xsl:text> |
|
205 <xsl:text> args: [ |
201 <xsl:text> args: [ |
206 </xsl:text> |
202 </xsl:text> |
207 <xsl:for-each select="$widget/arg"> |
203 <xsl:for-each select="$widget/arg"> |
208 <xsl:text> "</xsl:text> |
204 <xsl:text> "</xsl:text> |
209 <xsl:value-of select="@value"/> |
205 <xsl:value-of select="@value"/> |
234 <xsl:text>,</xsl:text> |
230 <xsl:text>,</xsl:text> |
235 </xsl:if> |
231 </xsl:if> |
236 <xsl:text> |
232 <xsl:text> |
237 </xsl:text> |
233 </xsl:text> |
238 </xsl:for-each> |
234 </xsl:for-each> |
239 <xsl:text> ] |
235 <xsl:text> ], |
240 </xsl:text> |
236 </xsl:text> |
|
237 <xsl:text> element: document.getElementById("</xsl:text> |
|
238 <xsl:value-of select="@id"/> |
|
239 <xsl:text>"), |
|
240 </xsl:text> |
|
241 <xsl:apply-templates mode="widget_defs" select="$widget"> |
|
242 <xsl:with-param name="hmi_element" select="."/> |
|
243 </xsl:apply-templates> |
241 <xsl:text>}</xsl:text> |
244 <xsl:text>}</xsl:text> |
242 <xsl:if test="position()!=last()"> |
245 <xsl:if test="position()!=last()"> |
243 <xsl:text>,</xsl:text> |
246 <xsl:text>,</xsl:text> |
244 </xsl:if> |
247 </xsl:if> |
245 <xsl:text> |
248 <xsl:text> |
317 </xsl:text> |
320 </xsl:text> |
318 <xsl:text> |
321 <xsl:text> |
319 </xsl:text> |
322 </xsl:text> |
320 <xsl:text>function dispatch_value(index, value) { |
323 <xsl:text>function dispatch_value(index, value) { |
321 </xsl:text> |
324 </xsl:text> |
322 <xsl:text> console.log("dispatch_value("+index+", "+value+")"); |
325 <xsl:text> let widgets = subscribers[index]; |
|
326 </xsl:text> |
|
327 <xsl:text> |
|
328 </xsl:text> |
|
329 <xsl:text> if(widgets.size > 0) { |
|
330 </xsl:text> |
|
331 <xsl:text> for(let widget of widgets){ |
|
332 </xsl:text> |
|
333 <xsl:text> let idxidx = widget.indexes.indexOf(index); |
|
334 </xsl:text> |
|
335 <xsl:text> if(idxidx == -1){ |
|
336 </xsl:text> |
|
337 <xsl:text> throw new Error("Dispatching to widget not interested, should not happen."); |
|
338 </xsl:text> |
|
339 <xsl:text> } |
|
340 </xsl:text> |
|
341 <xsl:text> let d = widget.dispatch; |
|
342 </xsl:text> |
|
343 <xsl:text> if(typeof(d) == "function" && idxidx == 0){ |
|
344 </xsl:text> |
|
345 <xsl:text> return d.call(widget,value); |
|
346 </xsl:text> |
|
347 <xsl:text> }else if(typeof(d) == "object" && d.length >= idxidx){ |
|
348 </xsl:text> |
|
349 <xsl:text> d[idxidx].call(widget,value); |
|
350 </xsl:text> |
|
351 <xsl:text> }/* else dispatch_0, ..., dispatch_n ? */ |
|
352 </xsl:text> |
|
353 <xsl:text> /*else { |
|
354 </xsl:text> |
|
355 <xsl:text> throw new Error("Dunno how to dispatch to widget at index = " + index); |
|
356 </xsl:text> |
|
357 <xsl:text> }*/ |
|
358 </xsl:text> |
|
359 <xsl:text> } |
|
360 </xsl:text> |
|
361 <xsl:text> } |
323 </xsl:text> |
362 </xsl:text> |
324 <xsl:text>}; |
363 <xsl:text>}; |
325 </xsl:text> |
364 </xsl:text> |
326 <xsl:text> |
365 <xsl:text> |
327 </xsl:text> |
366 </xsl:text> |
355 </xsl:text> |
394 </xsl:text> |
356 <xsl:text> let dv = new DataView(data); |
395 <xsl:text> let dv = new DataView(data); |
357 </xsl:text> |
396 </xsl:text> |
358 <xsl:text> let i = 0; |
397 <xsl:text> let i = 0; |
359 </xsl:text> |
398 </xsl:text> |
360 <xsl:text> console.log("Recv something."); |
399 <xsl:text> //console.log("Recv something."); |
361 </xsl:text> |
400 </xsl:text> |
362 <xsl:text> try { |
401 <xsl:text> try { |
363 </xsl:text> |
402 </xsl:text> |
364 <xsl:text> for(let hash_int of hmi_hash) { |
403 <xsl:text> for(let hash_int of hmi_hash) { |
365 </xsl:text> |
404 </xsl:text> |
366 <xsl:text> if(hash_int != dv.getUint8(i)){ |
405 <xsl:text> if(hash_int != dv.getUint8(i)){ |
367 </xsl:text> |
406 </xsl:text> |
368 <xsl:text> throw new Error("Hash doesn't match") |
407 <xsl:text> throw new Error("Hash doesn't match"); |
369 </xsl:text> |
408 </xsl:text> |
370 <xsl:text> }; |
409 <xsl:text> }; |
371 </xsl:text> |
410 </xsl:text> |
372 <xsl:text> i++; |
411 <xsl:text> i++; |
373 </xsl:text> |
412 </xsl:text> |
374 <xsl:text> }; |
413 <xsl:text> }; |
375 </xsl:text> |
414 </xsl:text> |
376 <xsl:text> |
415 <xsl:text> |
377 </xsl:text> |
416 </xsl:text> |
378 <xsl:text> console.log("Recv something GOOD."); |
417 <xsl:text> //console.log("Recv something GOOD."); |
379 </xsl:text> |
418 </xsl:text> |
380 <xsl:text> |
419 <xsl:text> |
381 </xsl:text> |
420 </xsl:text> |
382 <xsl:text> while(i < data.byteLength){ |
421 <xsl:text> while(i < data.byteLength){ |
383 </xsl:text> |
422 </xsl:text> |
384 <xsl:text> let index = dv.getUint32(i, true); |
423 <xsl:text> let index = dv.getUint32(i, true); |
385 </xsl:text> |
424 </xsl:text> |
386 <xsl:text> console.log("Recv something index is "+index); |
425 <xsl:text> //console.log("Recv something index is "+index); |
387 </xsl:text> |
426 </xsl:text> |
388 <xsl:text> i += 4; |
427 <xsl:text> i += 4; |
389 </xsl:text> |
428 </xsl:text> |
390 <xsl:text> let iectype = hmitree_types[index]; |
429 <xsl:text> let iectype = hmitree_types[index]; |
391 </xsl:text> |
430 </xsl:text> |
720 <xsl:with-param name="indent"> |
759 <xsl:with-param name="indent"> |
721 <xsl:value-of select="concat($indent,'>')"/> |
760 <xsl:value-of select="concat($indent,'>')"/> |
722 </xsl:with-param> |
761 </xsl:with-param> |
723 </xsl:apply-templates> |
762 </xsl:apply-templates> |
724 </xsl:template> |
763 </xsl:template> |
725 <xsl:template mode="refresh_frequency" match="widget"> |
764 <xsl:template mode="widget_defs" match="widget[@type='Display']"> |
726 <xsl:text>10</xsl:text> |
765 <xsl:param name="hmi_element"/> |
727 </xsl:template> |
766 <xsl:text>frequency: 5, |
728 <xsl:template mode="refresh_frequency" match="widget[@type='Meter']"> |
767 </xsl:text> |
729 <xsl:text>10</xsl:text> |
768 <xsl:text>dispatch: function(value) { |
730 </xsl:template> |
769 </xsl:text> |
731 <xsl:template mode="refresh_frequency" match="widget[@type='Display']"> |
770 <xsl:choose> |
732 <xsl:text>5</xsl:text> |
771 <xsl:when test="$hmi_element[self::svg:text]"> |
733 </xsl:template> |
772 <xsl:text> this.element.textContent = String(value); |
734 <xsl:template mode="refresh_frequency" match="widget[@type='Input']"> |
773 </xsl:text> |
735 <xsl:text>5</xsl:text> |
774 </xsl:when> |
|
775 <xsl:otherwise> |
|
776 <xsl:message terminate="yes">Display widget as a group not implemented</xsl:message> |
|
777 </xsl:otherwise> |
|
778 </xsl:choose> |
|
779 <xsl:text>}, |
|
780 </xsl:text> |
|
781 </xsl:template> |
|
782 <xsl:template mode="widget_defs" match="widget[@type='Meter']"> |
|
783 <xsl:text> frequency: 10, |
|
784 </xsl:text> |
|
785 </xsl:template> |
|
786 <xsl:template mode="widget_defs" match="widget[@type='Input']"> |
|
787 <xsl:text> frequency: 5, |
|
788 </xsl:text> |
736 </xsl:template> |
789 </xsl:template> |
737 </xsl:stylesheet> |
790 </xsl:stylesheet> |