[Ovmsdev] RETOOLS web
Michael Balzer
dexter at expeedo.de
Sat Feb 23 17:18:58 HKT 2019
Side note: starting the RE server from the web shell currently consistently results in a crash from xQueueReceive() that looks like our "old friend", the memory
corruption.
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.
D (38792) webcommand: HttpCommandStream[0x3fa2c358] init: handler=0x3fa2f6a0 command='re start' verbosity=65535
I (38812) webcommand: HttpCommandStream[0x3fa2c358]: 1996204 bytes free, executing: re start
*assertion "res == coreID || res == portMUX_FREE_VAL" failed: file "/home/balzer/esp/esp-idf/components/freertos/portmux_impl.inc.h", line 105, function:
vPortCPUAcquireMutexIntsDisabledExtram*
abort() was called at PC 0x40112f67 on core 1
Backtrace: 0x40091188:0x3ffea650 0x40091383:0x3ffea670 0x40112f67:0x3ffea690 0x40093ce3:0x3ffea6c0 0x40095ac0:0x3ffea6f0 0x4016c08a:0x3ffea730 0x4016c0c1:0x3ffea770
Rebooting...
balzer at leela:~/esp/Open-Vehicle-Monitoring-System-3/vehicle/OVMS.V3> a2l 0x40091188 0x40091383 0x40112f67 0x40093ce3 0x40095ac0 0x4016c08a 0x4016c0c1
Using elf file: /home/balzer/esp/Open-Vehicle-Monitoring-System-3/vehicle/OVMS.V3/build/ovms3.elf
0x40091188 is in invoke_abort (/home/balzer/esp/esp-idf/components/esp32/panic.c:140).
135 #endif
136 while (1) {
137 if (esp_cpu_in_ocd_debug_mode()) {
138 __asm__ ("break 0,0");
139 }
140 *((int *) 0) = 0;
141 }
142 }
143
144 void abort()
0x40091383 is in abort (/home/balzer/esp/esp-idf/components/esp32/panic.c:149).
144 void abort()
145 {
146 #if !CONFIG_ESP32_PANIC_SILENT_REBOOT
147 ets_printf("abort() was called at PC 0x%08x on core %d\r\n", (intptr_t)__builtin_return_address(0) - 3, xPortGetCoreID());
148 #endif
149 invoke_abort();
150 }
151
152
153 static const char *edesc[] = {
0x40112f67 is in __assert_func (../../../.././newlib/libc/stdlib/assert.c:63).
0x40093ce3 is in vTaskEnterCritical (/home/balzer/esp/esp-idf/components/freertos/portmux_impl.inc.h:105).
100 return false;
101 }
102 }
103 } while (1);
104
*105 assert(res == coreID || res == portMUX_FREE_VAL); /* any other value implies memory corruption or uninitialized mux */*
106 assert((res == portMUX_FREE_VAL) == (mux->count == 0)); /* we're first to lock iff count is zero */
107 assert(mux->count < 0xFF); /* Bad count value implies memory corruption */
108
109 /* now we own it, we can increment the refcount */
0x40095ac0 is in xQueueGenericReceive (/home/balzer/esp/esp-idf/components/freertos/queue.c:1455).
1450 statements within the function itself. This is done in the interest
1451 of execution time efficiency. */
1452
1453 for( ;; )
1454 {
1455 taskENTER_CRITICAL(&pxQueue->mux);
1456 {
1457 /* Is there data in the queue now? To be running the calling task
1458 must be the highest priority task wanting to access the queue. */
1459 if( pxQueue->uxMessagesWaiting > ( UBaseType_t ) 0 )
0x4016c08a is in re::Task() (/home/balzer/esp/Open-Vehicle-Monitoring-System-3/vehicle/OVMS.V3/components/retools/src/retools.cpp:243).
238 {
239 CAN_frame_t frame;
240
241 while(1)
242 {
243 if (xQueueReceive(m_rxqueue, &frame, (portTickType)portMAX_DELAY)==pdTRUE)
244 {
245 if (MyRE != NULL) // Protect against MyRE not set (during init)
246 {
247 switch (m_mode)
0x4016c0c1 is in RE_task(void*) (/home/balzer/esp/Open-Vehicle-Monitoring-System-3/vehicle/OVMS.V3/components/retools/src/retools.cpp:234).
229 #endif // #ifdef CONFIG_OVMS_SC_GPL_MONGOOSE
230
231 static void RE_task(void *pvParameters)
232 {
233 re *me = (re*)pvParameters;
234 me->Task();
235 }
236
237 void re::Task()
238 {
Am 16.02.19 um 14:00 schrieb Mark Webb-Johnson:
> Thanks, Michael.
>
> 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.
>
> Just need a basic UI framework, and some way to push the data from RE.
>
> No hurry.
>
> Regards, Mark
>
> On 16 Feb 2019, at 8:43 PM, Michael Balzer <dexter at expeedo.de <mailto:dexter at expeedo.de>> wrote:
>
>> Mark,
>>
>> 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.
>>
>> DataTables adds a lot of features and simplifies manipulations of the data. I like the automatic responsive drilldown shown here:
>> https://datatables.net/extensions/responsive/examples/styling/bootstrap.html
>>
>> 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.
>>
>> What do others think? And which of the extensions should be included?
>>
>> 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.
>>
>> Regards,
>> Michael
>>
>>
>> Am 13.02.19 um 13:05 schrieb Mark Webb-Johnson:
>>>
>>> Michael, this is probably for you - but if anybody else can help please do…
>>>
>>> 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:
>>>
>>> +----------------------------------------------------------------------------------------------------+
>>> | |
>>> | +----------+ +------+-------+------------------------------------+------+ +--------------------+ |
>>> | | | | hdr1 | hdr2 | hdr3 | hdr4 | | | |
>>> | | | +------+-------+------------------------------------+------+ | | |
>>>
>>> | | Controls | | | | | | | Info | |
>>> | | | | col1 | col2 | col3 | col4 | | | |
>>> | | | | | | | | | | |
>>> | | | | | | | | | | |
>>> | | | | | | | | | | |
>>> | +----------+ | | | | | +--------------------+ |
>>> | | | | | | |
>>> | +----------+ | | | | | +--------------------+ |
>>> | | | | | | | | | | |
>>> | | | | | | | | | | |
>>> | | | | | | | | | | |
>>> | | Status | | | | | | | | |
>>> | | | | | | TABLE | | | | |
>>> | | | | | | | | | Extra | |
>>> | | | | | | | | | | |
>>> | | | | | | | | | | |
>>> | | | | | | | | | | |
>>> | | | | | | | | | | |
>>> | | | | | | | | | | |
>>> | | | | | | | | | | |
>>> | +----------+ | | | | | +--------------------+ |
>>> | | | | | | |
>>> | | | | | | |
>>>
>>> | | | | | | |
>>>
>>> | | | | | | |
>>>
>>> | | | | | | |
>>>
>>> | | | | | | |
>>>
>>> | | | | | | |
>>>
>>> | | | | | | |
>>>
>>> | | | | | | |
>>>
>>> | | | | | | |
>>>
>>> | +------+-------+------------------------------------+------+ |
>>> | |
>>> +----------------------------------------------------------------------------------------------------+
>>>
>>>
>>> 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.
>>>
>>> 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.
>>>
>>> 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
>>> datatables.net <http://datatables.net>).
>>>
>>> For example, look at this output:
>>>
>>> OVMS# re dbc list
>>> key records ms last
>>> can1/100:0081 2 22000 01 02 03 04 05 | .....
>>> can1/101 1 44000 01 02 03 04 | ....
>>> dbc/DI_Signal1: 129 km
>>> dbc/DI_Signal2: 1 km
>>> dbc/DI_Signal3: 130 kWh
>>> dbc/DI_Signal4: 122 Degrees
>>>
>>>
>>> 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.
>>>
>>> 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)?
>>>
>>> Any idea how complex this is?
>>>
>>> Regards, Mark.
>>>
>>>
>>> _______________________________________________
>>> OvmsDev mailing list
>>> OvmsDev at lists.openvehicles.com
>>> http://lists.openvehicles.com/mailman/listinfo/ovmsdev
>>
>> --
>> Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal
>> Fon 02333 / 833 5735 * Handy 0176 / 206 989 26
>> _______________________________________________
>> OvmsDev mailing list
>> OvmsDev at lists.openvehicles.com <mailto:OvmsDev at lists.openvehicles.com>
>> http://lists.openvehicles.com/mailman/listinfo/ovmsdev
>
> _______________________________________________
> OvmsDev mailing list
> OvmsDev at lists.openvehicles.com
> http://lists.openvehicles.com/mailman/listinfo/ovmsdev
--
Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal
Fon 02333 / 833 5735 * Handy 0176 / 206 989 26
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openvehicles.com/pipermail/ovmsdev/attachments/20190223/22d7464d/attachment.htm>
More information about the OvmsDev
mailing list