[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