[Ovmsdev] Porting code from v2 to v3

Nikolay Shishkov nshishkov at yahoo.com
Sat Aug 4 07:59:03 HKT 2018


 Fixed some stuff and added some for the Think City. There is still more to be done but here is the status so far. 
https://github.com/openvehicles/Open-Vehicle-Monitoring-System-3/pull/150




    On Wednesday, August 1, 2018, 9:46:12 PM GMT+2, Michael Balzer <dexter at expeedo.de> wrote:  
 
   Forgot: the streaming mode (feature #8 / config vehicle stream) is an option to raise the location update frequency when the car is on.
 
 It's now interpreted as the interval in seconds, so "1" will give you per second updates.
 
 Regards,
 Michael
 
 
 Am 01.08.2018 um 21:40 schrieb Michael Balzer:
  
 Nikolay,
 
 see config → server v2 → update intervals.
 
 Regarding speed, you do provide it:
       StandardMetrics.ms_v_pos_speed->SetValue(((unsigned char) d[5]) / 2);
 
 …that's line 65 of the thinkcity module. There is no fallback to GPS speed.
 
 Regards,
 Michael
 
 
 Am 01.08.2018 um 21:10 schrieb Nikolay Shishkov:
  
      That same module has not crashed in almost a week now. So maybe there was something that was not connected to Think City code and got fixed by some of the library fixes.  
  I noticed that it takes almost half a minute for the gps location to update in the app. The same goes for the speed and other parameters. Is there a setting to make that more frequent?   Also - I can see speed, but I am not providing it - is it coming from the GPS?
  
  Thanks again! 
 
          On Wednesday, August 1, 2018, 1:11:49 AM GMT+2, Nikolay Shishkov <nshishkov at yahoo.com> wrote:  
  
       Thanks Michael,  
  I did not refresh the mail thread and saw you answer after I posted my solution.  I see about the states and the timing now... I may need to adjust this accordingly. I thought it was in  milliseconds... 
  These are all temperatures that are changing quite slow. So every 1 second or 4 seconds is perfectly fine.  Hopefully I will have access to a car tomorrow and can test this.  
  Thanks again, Nikolay      On Wednesday, August 1, 2018, 1:06:32 AM GMT+2, Nikolay Shishkov <nshishkov at yahoo.com> wrote:  
  
       I think I found a solution. Have not tested it yet. 
    static const OvmsVehicle::poll_pid_t obdii_polls[] =  {  // 0x753 03 22 49 65 - charger temp  { 0x753, 0x75B,VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x4965, { 0, 999, 999 } },   // 0x753 03 22 49 66 - pcu heat sink temp  { 0x753, 0x75B,VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x4966, { 0, 999, 999 } },   // 0x753 03 22 49 67 - motor temp  { 0x753, 0x75B,VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x4967, { 0, 999, 999 } },   // 0x753 03 22 49 68 - sli batt temp and volts  { 0x753, 0x75B,VEHICLE_POLL_TYPE_OBDIIEXTENDED, 0x4968, { 0, 200, 200 } },   { 0, 0, 0x00, 0x00, { 0, 0, 0 } }  };  
  
       On Tuesday, July 31, 2018, 8:57:51 PM GMT+2, Nikolay Shishkov <nshishkov at yahoo.com> wrote:  
  
       Quick question. How do I convert this:   
       while (TXB0CONbits.TXREQ) {} // Loop until TX is done     TXB0CON = 0;     TXB0SIDL = 0b01100000;     TXB0SIDH = 0b11101010;     TXB0D0 = 0x03;     TXB0D1 = 0x22;     TXB0D2 = 0x49;     TXB0D3 = 0x65;     TXB0DLC = 0b00000100; // data length (4)     TXB0CON = 0b00001000; // mark for transmission     delay100b(); // Delay a little... (100ms, approx) 
      while (TXB0CONbits.TXREQ) {} // Loop until TX is done     TXB0CON = 0;     TXB0SIDL = 0b01100000;     TXB0SIDH = 0b11101010;     TXB0D0 = 0x03;     TXB0D1 = 0x22;     TXB0D2 = 0x49;     TXB0D3 = 0x66;     TXB0DLC = 0b00000100; // data length (4)     TXB0CON = 0b00001000; // mark for transmission     delay100b(); // Delay a little... (100ms, approx) 
      while (TXB0CONbits.TXREQ) {} // Loop until TX is done     TXB0CON = 0;     TXB0SIDL = 0b01100000;     TXB0SIDH = 0b11101010;     TXB0D0 = 0x03;     TXB0D1 = 0x22;     TXB0D2 = 0x49;     TXB0D3 = 0x67;     TXB0DLC = 0b00000100; // data length (4)     TXB0CON = 0b00001000; // mark for transmission     delay100b(); // Delay a little... (100ms, approx) 
      while (TXB0CONbits.TXREQ) {} // Loop until TX is done     TXB0CON = 0;     TXB0SIDL = 0b01100000;     TXB0SIDH = 0b11101010;     TXB0D0 = 0x03;     TXB0D1 = 0x22;     TXB0D2 = 0x49;     TXB0D3 = 0x68;     TXB0DLC = 0b00000100; // data length (4)     TXB0CON = 0b00001000; // mark for transmission     delay100b(); // Delay a little... (100ms, approx)    To the new polling framework? I took a look at the leaf code, but the configuration is a mystery  to me. What are the input parameters?  Maybe there is a document that I am missing? 
  Thanks in advance, Nikolay       On Saturday, July 28, 2018, 11:42:13 PM GMT+2, Nikolay Shishkov <nshishkov at yahoo.com> wrote:  
  
       Thank you! Yes the carid is TC003.  I was not running anything extraordinary - just followed the  developer tutorial, but never flashed directly - always flashed  from edge branch OTA.  I will run the commands and provide output, but it will be with  the newer firmware.  I will need to see if updating will have same problems.  
  
  
       On Friday, July 27, 2018, 3:07:09 AM GMT+2, Mark Webb-Johnson <mark at webb-johnson.net> wrote:  
  
    Note that I store the .elf files alongside the .bin, for edge/eap/main  builds. 
  For example: 
  
 http://api.openvehicles.com/firmware/ota/v3.1/edge/3.1.008-29-gaf41242.ovms3.elf 
  
  Regards, Mark. 
 
  On 27 Jul 2018, at 5:51 AM, Michael Balzer <dexter at expeedo.de> wrote: 
    
       Nikolay,
 
 you need to keep the .elf files for your builds to be able to  analyze a backtrace. Do not use addr2line, it shows wrong line numbers. Use the script "a2l" I posted previously (I'll include it again  below). Just feed it the .elf file and the backtrace. Example:
 
 a2ltmp/3.1.008-32-g2fa3ab8-elf/ovms3.elf 0x400dc8ec 0x4008f43d 0x4008e181 0x400818cc 0x40082163 0x40083c4d 0x400dc8e9
 
 (I don't have the -28- version, so my output doesn't make sense)
 
 @Mark: spurious task WDT crashes and heap corruption  crashes still occur, but it seems they have become less often with the internal RAM rework.
 
 
 How is performance and power usage affected when using StandardMetrics.xxxxx->SetValue in the IncomingFrameCan1 method? Most of the messages update value every 100ms, and except  maybe speed, battery current and voltage, most of the parameters are not changing that often. And even for the speed, current and  voltage, it is probably enough to update StandardMetrics  in the 1 second ticker... does this make sense or is the difference  non-existing.  
 
 Extending Mark's answer:
 
 It's normally OK to directly set metrics from IncomingFrameCan1(),  but be aware metrics listeners will be executed synchronously  in the context that changes the metric.
 
 Standard metrics listeners are now for example the  automatic notification generators in the vehicle base class. These may need quite some stack and time.
 
 If you spend too much time handling frames on a high volume  bus, your vehicle task may lose frames. It's possible to raise the queue size (currently 20 frames) and the vehicle task stack  size, but it's better to keep the CAN processing simple.
 
 TL;DR: if you need to handle many CAN frames, I recommend  changing metrics that trigger notifications or other complex  actions from the ticker. If you encounter crashes on some CAN  frames that may be due to the vehicle task stack being too small (CONFIG_OVMS_VEHICLE_RXTASK_STACK=6144).
 
 Regards,
 Michael
 
 
 Script a2l:
 
 #!/bin/bash
 elf=~/esp/Open-Vehicle-Monitoring-System-3/vehicle/OVMS.V3/build/ovms3.elf
 for adr in $* ; do
   if [[ "$adr" =~ "elf" ]] ; then
     elf="$adr"
   else
     cmd+=" -ex 'l *$adr'"
   fi
 done
 cmd+=" -ex 'q'"
 echo "Using elf file: $elf"
 evalxtensa-esp32-elf-gdb -batch $elf $cmd 2>/dev/null #| grep "^0x.* is in "
 
 
 
 
 Am 26.07.2018 um 09:59 schrieb Nikolay Shishkov:
  
 
     Quick update: I managed to do a not so quick update on one of the ovms v.3 boxes that  sits in a Think and can confirm that the porting seems to  work.  I could see speed, parking time, ambient temperature. 
  I had very strange problems doing the OTA update. The  firmware start download and I can see the messages progressing, but it would halt in between 700kB and 1600kB and then stay there until I  refresh the browser.  And when I refresh the browser I am asked of my password which leads me to  that there must have been a crash in the meantime.  
  I was finally able to get the OTA update work by disconnecting  the box from the car and powering it via USB. This is a single  data point but it kind of points to a problem with the code that communicates  with the car.  
  I was not able to get a laptop connected to checkout the  console, but managed to get the following log - not sure how to interpret it.     Last boot was 87 second(s) ago Time at boot: 2018-07-25 18:07:43 GMT This is reset #3 since last power cycle Detected boot reason: Crash (12/12) Crash counters: 3 total, 0 early 
  Last crash: Alloca exception on core 0 Registers: PC : 0x400dc8ec PS : 0x00060234 A0 : 0x8008f440 A1 :  0x3ffc45b0 A2 : 0x00000020 A3 : 0x00000001 A4 : 0x00000000 A5 :  0x3ffb44b8 A6 : 0x3ffb47e4 A7 : 0x3ffb458c A8 : 0x3ffb44d4 A9 :  0x3ffc4590 A10 : 0x00000000 A11 : 0x7fffffff A12 : 0x8008e65b A13 :  0x3ffcc450 A14 : 0x00000003 A15 : 0x00060023 SAR : 0x00000000 EXCCAUSE:  0x00000005 EXCVADDR: 0x00000000 LBEG : 0x00000000 LEND : 0x00000000  LCOUNT : 0x00000000 Backtrace: 0x400dc8ec 0x4008f43d 0x4008e181 0x400818cc 0x40082163 0x40083c4d  0x400dc8e9 Version:3.1.008-29-gaf41242/ota_1/edge (build idf v3.1-dev-987-g55d915e Jul 6 2018 00:14:59) Running partition: ota_1 Boot partition: ota_1 Firmware:3.1.008-29-gaf41242/ota_1/edge (build idf v3.1-dev-987-g55d915e Jul 6 2018 00:14:59)  
  How is performance and power usage affected when using StandardMetrics.xxxxx->SetValue in the IncomingFrameCan1 method? Most of the messages update value every 100ms, and except  maybe speed, battery current and voltage, most of the parameters are not changing that often. And even for the speed, current and  voltage, it is probably enough to update StandardMetrics  in the 1 second ticker... does this make sense or is the difference  non-existing.  
  Thanks for all the hand holding and help,  Nikolay  
   -- 
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
 http://lists.openvehicles.com/mailman/listinfo/ovmsdev
 
    _______________________________________________
 OvmsDev mailing list
 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
 
  
 _______________________________________________
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
http://lists.openvehicles.com/mailman/listinfo/ovmsdev
  
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openvehicles.com/pipermail/ovmsdev/attachments/20180803/62b800a1/attachment-0001.html>


More information about the OvmsDev mailing list