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@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@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).

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@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@lists.openvehicles.com
http://lists.openvehicles.com/mailman/listinfo/ovmsdev

_______________________________________________
OvmsDev mailing list
OvmsDev@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