<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body text="#000000" bgcolor="#FFFFFF">
Side note: starting the RE server from the web shell currently
consistently results in a crash from <tt>xQueueReceive()</tt> that
looks like our "old friend", the memory corruption.<br>
<br>
Starting from the async console or ssh or via MP works. No idea yet
how that could make a difference for xQueueReceive(), I'll assume
it's the PSRAM bug for now.<br>
<br>
<br>
<tt>D (38792) webcommand: HttpCommandStream[0x3fa2c358] init:
handler=0x3fa2f6a0 command='re start' verbosity=65535</tt><tt><br>
</tt><tt>I (38812) webcommand: HttpCommandStream[0x3fa2c358]:
1996204 bytes free, executing: re start</tt><tt><br>
</tt><b><tt>assertion "res == coreID || res == portMUX_FREE_VAL"
failed: file
"/home/balzer/esp/esp-idf/components/freertos/portmux_impl.inc.h",
line 105, function: vPortCPUAcquireMutexIntsDisabledExtram</tt></b><tt><br>
</tt><tt>abort() was called at PC 0x40112f67 on core 1</tt><tt><br>
</tt><tt><br>
</tt><tt>Backtrace: 0x40091188:0x3ffea650 0x40091383:0x3ffea670
0x40112f67:0x3ffea690 0x40093ce3:0x3ffea6c0 0x40095ac0:0x3ffea6f0
0x4016c08a:0x3ffea730 0x4016c0c1:0x3ffea770</tt><tt><br>
</tt><tt><br>
</tt><tt>Rebooting...</tt><tt><br>
</tt><tt><br>
</tt><tt><br>
</tt><tt><a class="moz-txt-link-abbreviated" href="mailto:balzer@leela:~/esp/Open-Vehicle-Monitoring-System-3/vehicle/OVMS.V3">balzer@leela:~/esp/Open-Vehicle-Monitoring-System-3/vehicle/OVMS.V3</a>>
a2l 0x40091188 0x40091383 0x40112f67 0x40093ce3 0x40095ac0
0x4016c08a 0x4016c0c1</tt><tt><br>
</tt><tt>Using elf file:
/home/balzer/esp/Open-Vehicle-Monitoring-System-3/vehicle/OVMS.V3/build/ovms3.elf</tt><tt><br>
</tt><tt>0x40091188 is in invoke_abort
(/home/balzer/esp/esp-idf/components/esp32/panic.c:140).</tt><tt><br>
</tt><tt>135 #endif</tt><tt><br>
</tt><tt>136 while (1) {</tt><tt><br>
</tt><tt>137 if (esp_cpu_in_ocd_debug_mode()) {</tt><tt><br>
</tt><tt>138 __asm__ ("break 0,0");</tt><tt><br>
</tt><tt>139 }</tt><tt><br>
</tt><tt>140 *((int *) 0) = 0;</tt><tt><br>
</tt><tt>141 }</tt><tt><br>
</tt><tt>142 }</tt><tt><br>
</tt><tt>143 </tt><tt><br>
</tt><tt>144 void abort()</tt><tt><br>
</tt><tt>0x40091383 is in abort
(/home/balzer/esp/esp-idf/components/esp32/panic.c:149).</tt><tt><br>
</tt><tt>144 void abort()</tt><tt><br>
</tt><tt>145 {</tt><tt><br>
</tt><tt>146 #if !CONFIG_ESP32_PANIC_SILENT_REBOOT</tt><tt><br>
</tt><tt>147 ets_printf("abort() was called at PC 0x%08x on
core %d\r\n", (intptr_t)__builtin_return_address(0) - 3,
xPortGetCoreID());</tt><tt><br>
</tt><tt>148 #endif</tt><tt><br>
</tt><tt>149 invoke_abort();</tt><tt><br>
</tt><tt>150 }</tt><tt><br>
</tt><tt>151 </tt><tt><br>
</tt><tt>152 </tt><tt><br>
</tt><tt>153 static const char *edesc[] = {</tt><tt><br>
</tt><tt>0x40112f67 is in __assert_func
(../../../.././newlib/libc/stdlib/assert.c:63).</tt><tt><br>
</tt><tt>0x40093ce3 is in vTaskEnterCritical
(/home/balzer/esp/esp-idf/components/freertos/portmux_impl.inc.h:105).</tt><tt><br>
</tt><tt>100 return false;</tt><tt><br>
</tt><tt>101 }</tt><tt><br>
</tt><tt>102 }</tt><tt><br>
</tt><tt>103 } while (1);</tt><tt><br>
</tt><tt>104 </tt><tt><br>
</tt><b><tt>105 assert(res == coreID || res ==
portMUX_FREE_VAL); /* any other value implies memory corruption
or uninitialized mux */</tt></b><tt><br>
</tt><tt>106 assert((res == portMUX_FREE_VAL) ==
(mux->count == 0)); /* we're first to lock iff count is zero */</tt><tt><br>
</tt><tt>107 assert(mux->count < 0xFF); /* Bad count
value implies memory corruption */</tt><tt><br>
</tt><tt>108 </tt><tt><br>
</tt><tt>109 /* now we own it, we can increment the refcount
*/</tt><tt><br>
</tt><tt>0x40095ac0 is in xQueueGenericReceive
(/home/balzer/esp/esp-idf/components/freertos/queue.c:1455).</tt><tt><br>
</tt><tt>1450 statements within the function itself. This is
done in the interest</tt><tt><br>
</tt><tt>1451 of execution time efficiency. */</tt><tt><br>
</tt><tt>1452 </tt><tt><br>
</tt><tt>1453 for( ;; )</tt><tt><br>
</tt><tt>1454 {</tt><tt><br>
</tt><tt>1455 taskENTER_CRITICAL(&pxQueue->mux);</tt><tt><br>
</tt><tt>1456 {</tt><tt><br>
</tt><tt>1457 /* Is there data in the queue now? To
be running the calling task</tt><tt><br>
</tt><tt>1458 must be the highest priority task
wanting to access the queue. */</tt><tt><br>
</tt><tt>1459 if( pxQueue->uxMessagesWaiting >
( UBaseType_t ) 0 )</tt><tt><br>
</tt><tt>0x4016c08a is in re::Task()
(/home/balzer/esp/Open-Vehicle-Monitoring-System-3/vehicle/OVMS.V3/components/retools/src/retools.cpp:243).</tt><tt><br>
</tt><tt>238 {</tt><tt><br>
</tt><tt>239 CAN_frame_t frame;</tt><tt><br>
</tt><tt>240 </tt><tt><br>
</tt><tt>241 while(1)</tt><tt><br>
</tt><tt>242 {</tt><tt><br>
</tt><tt>243 if (xQueueReceive(m_rxqueue, &frame,
(portTickType)portMAX_DELAY)==pdTRUE)</tt><tt><br>
</tt><tt>244 {</tt><tt><br>
</tt><tt>245 if (MyRE != NULL) // Protect against MyRE not
set (during init)</tt><tt><br>
</tt><tt>246 {</tt><tt><br>
</tt><tt>247 switch (m_mode)</tt><tt><br>
</tt><tt>0x4016c0c1 is in RE_task(void*)
(/home/balzer/esp/Open-Vehicle-Monitoring-System-3/vehicle/OVMS.V3/components/retools/src/retools.cpp:234).</tt><tt><br>
</tt><tt>229 #endif // #ifdef CONFIG_OVMS_SC_GPL_MONGOOSE</tt><tt><br>
</tt><tt>230 </tt><tt><br>
</tt><tt>231 static void RE_task(void *pvParameters)</tt><tt><br>
</tt><tt>232 {</tt><tt><br>
</tt><tt>233 re *me = (re*)pvParameters;</tt><tt><br>
</tt><tt>234 me->Task();</tt><tt><br>
</tt><tt>235 }</tt><tt><br>
</tt><tt>236 </tt><tt><br>
</tt><tt>237 void re::Task()</tt><tt><br>
</tt><tt>238 {</tt><br>
<br>
<br>
<br>
<div class="moz-cite-prefix">Am 16.02.19 um 14:00 schrieb Mark
Webb-Johnson:<br>
</div>
<blockquote type="cite"
cite="mid:3700E7C1-6156-467F-8977-EC7AB5F06FD8@webb-johnson.net">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<div dir="ltr">Thanks, Michael.</div>
<div dir="ltr"><br>
</div>
<div dir="ltr">I can handle the RE side of things - just haven’t
done a lot of work in JavaScript (too many people better at it
than me at my day job, so I leave it to them). I can also
probably extend it once the basics are working.</div>
<div dir="ltr"><br>
</div>
<div dir="ltr">Just need a basic UI framework, and some way to
push the data from RE.</div>
<div dir="ltr"><br>
</div>
<div dir="ltr">No hurry.</div>
<div dir="ltr"><br>
</div>
<div dir="ltr">Regards, Mark</div>
<div dir="ltr"><br>
</div>
<div dir="ltr">On 16 Feb 2019, at 8:43 PM, Michael Balzer <<a
href="mailto:dexter@expeedo.de" moz-do-not-send="true">dexter@expeedo.de</a>>
wrote:<br>
<br>
</div>
<blockquote type="cite">
<div dir="ltr">
<meta http-equiv="Content-Type" content="text/html;
charset=UTF-8">
Mark,<br>
<br>
I haven't seen the necessity for a complex plugin just for
table views up to now. Normally it's pretty simple to make
dynamic tables just using HTML5 and jQuery. For example, see
the file selector widget I created. That uses a table to
display the file entries, it's dynamic, sortable &
responsive with just a few lines of code.<br>
<br>
DataTables adds a lot of features and simplifies manipulations
of the data. I like the automatic responsive drilldown shown
here:<br>
<a class="moz-txt-link-freetext"
href="https://datatables.net/extensions/responsive/examples/styling/bootstrap.html"
moz-do-not-send="true">https://datatables.net/extensions/responsive/examples/styling/bootstrap.html</a><br>
<br>
It's got some weight of course (about half of the charts lib
with just the most basic extensions), so we would add it as an
optional asset. On a first look it will need some
customization for us, as it uses the glyphicons for the
bootstrap 3 variant, which we don't include for size reasons.<br>
<br>
What do others think? And which of the extensions should be
included?<br>
<br>
Overall, the UI as drafted shouldn't be hard to implement.
I'll see if I can create a first version, but probably won't
have the time before next weekend.<br>
<br>
Regards,<br>
Michael<br>
<br>
<br>
<div class="moz-cite-prefix">Am 13.02.19 um 13:05 schrieb Mark
Webb-Johnson:<br>
</div>
<blockquote type="cite"
cite="mid:6468ACDE-F656-41BC-A868-92985B5DE2B8@webb-johnson.net">
<meta http-equiv="Content-Type" content="text/html;
charset=UTF-8">
<div class=""><br class="">
</div>
<div class="">Michael, this is probably for you - but if
anybody else can help please do…</div>
<div class=""><br class="">
</div>
<div class="">I am trying to see how hard it would be to do
a web based interface to the RETOOLS system. Presumably
this would appear in the menu as Tools / Reverse
Engineering (or some such abbreviation if that is too
long). The basic screen would look something like this:</div>
<div class=""><br class="">
</div>
<blockquote style="margin: 0 0 0 40px; border: none;
padding:
 0px;" class="">
<div class=""><font class="" face="Andale Mono"><span
style="font-size: 12px;" class="">+----------------------------------------------------------------------------------------------------+</span></font></div>
<div class=""><font class="" face="Andale Mono"><span
style="font-size: 12px;" class="">|
|</span></font></div>
<div class=""><font class="" face="Andale Mono"><span
style="font-size: 12px;" class="">| +----------+
+------+-------+------------------------------------+------+
+--------------------+ |</span></font></div>
<div class=""><font class="" face="Andale Mono"><span
style="font-size: 12px;" class="">| | | |
hdr1 | hdr2 | hdr3 |
hdr4 | | | |</span></font></div>
<font class="" face="Andale Mono"><span style="font-size:
12px;" class="">| | |
+------+-------+------------------------------------+------+
| </span></font><span style="font-family:
"Andale
 Mono"; font-size: 12px;" class="">
</span><span style="font-family: "Andale
Mono"; font-size: 12px;" class=""> </span><span
style="font-size: 12px; font-family:
 "Andale
Mono";" class=""> |</span><span
style="font-size: 12px; font-family: "Andale
Mono";" class=""> |</span></blockquote>
<blockquote style="margin: 0 0 0 40px; border: none;
padding:
 0px;" class="">
<div class=""><font class="" face="Andale Mono"><span
style="font-size: 12px;" class="">| | Controls | |
| | |
| | Info | |</span></font></div>
<div class=""><font class="" face="Andale Mono"><span
style="font-size: 12px;" class="">| | | |
col1 | col2 | col3 |
col4 | | | |</span></font></div>
<div class=""><font class="" face="Andale Mono"><span
style="font-size: 12px;" class="">| | | |
| | |
| | | |</span></font></div>
<div class=""><font class="" face="Andale Mono"><span
style="font-size: 12px;" class="">| | | |
| | |
| | | |</span></font></div>
<div class=""><font class="" face="Andale Mono"><span
style="font-size: 12px;" class="">| | | |
| | |
| | | |</span></font></div>
<div class=""><font class="" face="Andale Mono"><span
style="font-size: 12px;" class="">| +----------+ |
| | |
| +--------------------+ |</span></font></div>
<div class=""><font class="" face="Andale Mono"><span
style="font-size: 12px;" class="">| |
| | |
| |</span></font></div>
<div class=""><font class="" face="Andale Mono"><span
style="font-size: 12px;" class="">| +----------+ |
| | |
| +--------------------+ |</span></font></div>
<div class=""><font class="" face="Andale Mono"><span
style="font-size: 12px;" class="">| | | |
| | |
| | | |</span></font></div>
<div class=""><font class="" face="Andale Mono"><span
style="font-size: 12px;" class="">| | | |
| | |
| | | |</span></font></div>
<div class=""><font class="" face="Andale Mono"><span
style="font-size: 12px;" class="">| | | |
| | |
| | | |</span></font></div>
<div class=""><font class="" face="Andale Mono"><span
style="font-size: 12px;" class="">| | Status | |
| | |
| | | |</span></font></div>
<div class=""><font class="" face="Andale Mono"><span
style="font-size: 12px;" class="">| | | |
| | TABLE |
| | | |</span></font></div>
<div class=""><font class="" face="Andale Mono"><span
style="font-size: 12px;" class="">| | | |
| | |
| | Extra | |</span></font></div>
<div class=""><font class="" face="Andale Mono"><span
style="font-size: 12px;" class="">| | | |
| | |
| | | |</span></font></div>
<div class=""><font class="" face="Andale Mono"><span
style="font-size: 12px;" class="">| | | |
| | |
| | | |</span></font></div>
<div class=""><font class="" face="Andale Mono"><span
style="font-size: 12px;" class="">| | | |
| | |
| | | |</span></font></div>
<div class=""><font class="" face="Andale Mono"><span
style="font-size: 12px;" class="">| | | |
| | |
| | | |</span></font></div>
<div class=""><font class="" face="Andale Mono"><span
style="font-size: 12px;" class="">| | | |
| | |
| | | |</span></font></div>
<div class=""><font class="" face="Andale Mono"><span
style="font-size: 12px;" class="">| | | |
| | |
| | | |</span></font></div>
<div class=""><font class="" face="Andale Mono"><span
style="font-size: 12px;" class="">| +----------+ |
| | |
| +--------------------+ |</span></font></div>
<div class=""><font class="" face="Andale Mono"><span
style="font-size: 12px;" class="">| |
| | |
| |</span></font></div>
<font class="" face="Andale Mono"><span style="font-size:
12px;" class="">| | | |
| |
|</span></font></blockquote>
<blockquote style="margin: 0 0 0 40px; border: none;
padding:
 0px;" class=""><font class="" face="Andale
Mono"><span style="font-size: 12px;" class="">|
| | |
| | |</span></font></blockquote>
<blockquote style="margin: 0 0 0 40px; border: none;
padding:
 0px;" class=""><font class="" face="Andale
Mono"><span style="font-size: 12px;" class="">|
| | |
| | |</span></font></blockquote>
<blockquote style="margin: 0 0 0 40px; border: none;
padding:
 0px;" class=""><font class="" face="Andale
Mono"><span style="font-size: 12px;" class="">|
| | |
| | |</span></font></blockquote>
<blockquote style="margin: 0 0 0 40px; border: none;
padding:
 0px;" class=""><font class="" face="Andale
Mono"><span style="font-size: 12px;" class="">|
| | |
| | |</span></font></blockquote>
<blockquote style="margin: 0 0 0 40px; border: none;
padding:
 0px;" class=""><font class="" face="Andale
Mono"><span style="font-size: 12px;" class="">|
| | |
| | |</span></font></blockquote>
<blockquote style="margin: 0 0 0 40px; border: none;
padding:
 0px;" class=""><font class="" face="Andale
Mono"><span style="font-size: 12px;" class="">|
| | |
| | |</span></font></blockquote>
<blockquote style="margin: 0 0 0 40px; border: none;
padding:
 0px;" class=""><font class="" face="Andale
Mono"><span style="font-size: 12px;" class="">|
| | |
| | |</span></font></blockquote>
<blockquote style="margin: 0 0 0 40px; border: none;
padding:
 0px;" class=""><font class="" face="Andale
Mono"><span style="font-size: 12px;" class="">|
| | |
| | |</span></font></blockquote>
<blockquote style="margin: 0 0 0 40px; border: none;
padding:
 0px;" class="">
<div class=""><font class="" face="Andale Mono"><span
style="font-size: 12px;" class="">|
+------+-------+------------------------------------+------+
|</span></font></div>
<div class=""><font class="" face="Andale Mono"><span
style="font-size: 12px;" class="">|
|</span></font></div>
<div class=""><font class="" face="Andale Mono"><span
style="font-size: 12px;" class="">+----------------------------------------------------------------------------------------------------+</span></font></div>
</blockquote>
<div class=""><br class="">
</div>
<div class="">The controls are just a set of controls -
things that bring up dialogs for more information or
perform actions. Like start/stop RE, switch modes,
manipulate DBC files, etc. Left justified in the frame,
and perhaps 10% of the width. Height can dynamically
adjust with the text content.</div>
<div class=""><br class="">
</div>
<div class="">The Status, Info, and Extra panes are just a
dynamically updated text panes. Main code needs to be able
to send text here and have it shown in the appropriate
pane. Right justified in the frame and perhaps 30% of the
width. Height can dynamically adjust with the text
content.</div>
<div class=""><br class="">
</div>
<div class="">The TABLE is a table. Probably 5 columns by
many rows (anywhere from 20 to 200 or so). Either paged,
scrolling, or just very tall. Paged is probably
preferable. Would need a simple mechanism to dynamically
add/update a row (identified by ‘key’ column and in sorted
order), presumably using the web socket. Also need
something to be able to dynamically clear the entire
table. The RETOOLS code would use this to update the table
in realtime (presumably over a web socket). It would be
good if the table could do things like search filtering of
displayed rows, column sorting, etc (all client side -
something like <a href="http://datatables.net" class=""
moz-do-not-send="true">datatables.net</a>).</div>
<div class=""><br class="">
</div>
<div class="">For example, look at this output:</div>
<div class=""><br class="">
</div>
<blockquote style="margin: 0 0 0 40px; border: none;
padding:
 0px;" class="">
<div class="">
<div class=""><font class="" face="Andale Mono"><span
style="font-size: 12px;" class="">OVMS# re dbc
list</span></font></div>
<div class=""><font class="" face="Andale Mono"><span
style="font-size: 12px;" class="">key
records ms last</span></font></div>
<div class=""><font class="" face="Andale Mono"><span
style="font-size: 12px;" class="">can1/100:0081
2 22000 01 02 03 04 05 |
.....</span></font></div>
<div class=""><font class="" face="Andale Mono"><span
style="font-size: 12px;" class="">can1/101
1 44000 01 02 03 04 |
....</span></font></div>
<div class=""><font class="" face="Andale Mono"><span
style="font-size: 12px;" class="">
dbc/DI_Signal1: 129 km</span></font></div>
<div class=""><font class="" face="Andale Mono"><span
style="font-size: 12px;" class="">
dbc/DI_Signal2: 1 km</span></font></div>
<div class=""><font class="" face="Andale Mono"><span
style="font-size: 12px;" class="">
dbc/DI_Signal3: 130 kWh</span></font></div>
<div class=""><font class="" face="Andale Mono"><span
style="font-size: 12px;" class="">
dbc/DI_Signal4: 122 Degrees</span></font></div>
</div>
</blockquote>
<div class=""><br class="">
</div>
<div class="">The idea is to be able to show the key,
records, ms, last, and ascii dump in the main table. Then,
clicking on a row would show the statistics for that
message in the Info pane, and DBC signals in the Extra
pane.</div>
<div class=""><br class="">
</div>
<div class="">I can handle the RETOOLS side, but the
javascript is beyond me. I also had a look at the ovms web
server framework, but it doesn’t seem to be able to do the
table part (yet)?</div>
<div class=""><br class="">
</div>
<div class="">Any idea how complex this is?</div>
<div class=""><br class="">
</div>
<div class="">Regards, Mark.</div>
<div class=""><br class="">
</div>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<pre class="moz-quote-pre" wrap="">_______________________________________________
OvmsDev mailing list
<a class="moz-txt-link-abbreviated" href="mailto:OvmsDev@lists.openvehicles.com" moz-do-not-send="true">OvmsDev@lists.openvehicles.com</a>
<a class="moz-txt-link-freetext" href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev" moz-do-not-send="true">http://lists.openvehicles.com/mailman/listinfo/ovmsdev</a>
</pre>
</blockquote>
<br>
<pre class="moz-signature" cols="160">--
Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal
Fon 02333 / 833 5735 * Handy 0176 / 206 989 26
</pre>
</div>
</blockquote>
<blockquote type="cite">
<div dir="ltr"><span>_______________________________________________</span><br>
<span>OvmsDev mailing list</span><br>
<span><a href="mailto:OvmsDev@lists.openvehicles.com"
moz-do-not-send="true">OvmsDev@lists.openvehicles.com</a></span><br>
<span><a
href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev"
moz-do-not-send="true">http://lists.openvehicles.com/mailman/listinfo/ovmsdev</a></span><br>
</div>
</blockquote>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<pre class="moz-quote-pre" wrap="">_______________________________________________
OvmsDev mailing list
<a class="moz-txt-link-abbreviated" href="mailto:OvmsDev@lists.openvehicles.com">OvmsDev@lists.openvehicles.com</a>
<a class="moz-txt-link-freetext" href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev">http://lists.openvehicles.com/mailman/listinfo/ovmsdev</a>
</pre>
</blockquote>
<br>
<pre class="moz-signature" cols="160">--
Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal
Fon 02333 / 833 5735 * Handy 0176 / 206 989 26
</pre>
</body>
</html>