[Ovmsdev] OVMS Poller module/singleton

Michael Balzer dexter at expeedo.de
Mon May 6 18:11:53 HKT 2024


Michael,

did you notice the Leaf is special in polling two buses (1 & 2) by 
default? No other vehicle does that. Possibly some sort of deadlock 
situation with interleaved bus responses?

Any frame dropped is an indicator for something bad happening, as that 
means there's already a rather long backlog = response processing is too 
slow.

On alerting when the queue grows, see `OvmsDuktape::EventScript()` -- I 
added an alert there for this situation, when the Duktape queue grows 
larger than 10 entries. But you probably should restrict the actual log 
message creation e.g. using a modulo 10 check.

Maybe Derek can provide a CAN log catching the specific overflow case 
along with the system log? That should show which frames lead to the 
processing delay.

Regards,
Michael


Am 06.05.24 um 01:45 schrieb Michael Geddes:
> I realise that I was only using the standard cable to test - which 
> probably is not sufficient - I haven't looked closely at how the Leaf 
> OBD to Db9 cable is different from standard.
>
> Ah, my bad out the queue length.   We are definitely queueing more 
> messages though.   From my log of when the overflow happened, the 
> poller was in state 0 which means OFF - ie nothing was being sent!!
>
> I'll look at the TX message thing - opt in sounds good - though it 
> shouldn't be playing that much of a part here as the TXs are 
> infrequent in this case (or zero when the leaf is off or driving) - On 
> the ioniq 5 when I'm using the HUD - I'm polling quite frequently - 
> multiple times per second and that seems to be fine!.
>
> I did find an issue with the throttling .. but it would still mostly 
> apply the throttling where it matters, so again, it shouldn't be the 
> problem (also, we aren't transmitting in the leaf case).
>
> The change I made to the logging of RX messages showed how many in a 
> row were dropped... and it was mostly 1 only in a run - which means 
> even if it is a short time between - that means that the drops are 
> being interleaved by at least one success!
>
> Sooo.. I'm still wondering what is going on.  Some things I'm going to 
> try:
>
> * If the number of messages on the Can bus (coming in through RX) 
> means that the queue is slowly getting longer and not quite catching 
> up, then making the queue longer will help it last longer... but only 
> pushes the problem down the road.
>   - Add 'current queue length' to the poller status information to see 
> if this is indeed the case?
>   - Add some kind of alert when the queue reaches a % full?
> * Once you start overflowing and getting overflow log messages, I 
> wonder if this is then contributing to the problem.
>   - Push the overflow logging into Poller Task which can look at how 
> many drops occurred since last received item.
> * Split up the flags for the poller messages into 2:
>    - Messages that are/could be happening in the TX/RX tasks
>    - Other noisy messages that always happen in the poller task.
>
> Thoughts on what else we might measure to figure out what is going on?
>
> //.ichael
>
>
> On Sun, 5 May 2024, 19:29 Michael Balzer via OvmsDev, 
> <ovmsdev at lists.openvehicles.com> wrote:
>
>     Michael,
>
>     the queue size isn't in bytes, it's in messages:
>
>>      * @param uxQueueLength The maximum number of items that the
>>     queue can contain.
>>      *
>>      * @param uxItemSize The number of bytes each item in the queue
>>     will require.
>
>     Also, from the time stamps in Dereks log excerpt, there were quite
>     some dropped frames in that time window -- at least 23 frames in
>     40 ms, that's bad.
>
>     Queue sizes are currently:
>
>     CONFIG_OVMS_HW_CAN_RX_QUEUE_SIZE=60
>     CONFIG_OVMS_VEHICLE_CAN_RX_QUEUE_SIZE=60
>
>     The new poller now channels all TX callbacks through the task
>     queue additionally to RX and commands. So setting the queue size
>     to be larger than the CAN RX queue size seems appropriate.
>
>     Nevertheless, an overflow with more than 60 waiting messages still
>     indicates some too long processing time in the vehicle task.
>
>     TX callbacks previously were done directly in the CAN context, and
>     no current vehicle overrides the empty default handler, so this
>     imposed almost no additional overhead. By requiring a queue entry
>     for each TX callback, this feature now has a potentially high
>     impact for all vehicles. If passing these to the task is actually
>     necessary, it needs to become an opt-in feature, so only vehicles
>     subscribing to the callback actually need to cope with that
>     additional load & potential processing delays involved.
>
>     Regards,
>     Michael
>
>
>     Am 05.05.24 um 11:59 schrieb Michael Geddes via OvmsDev:
>>     OK.
>>
>>     I did some logging changes to confirm that it's only _just_
>>     getting overwhelmed..ie dropping 1 (or occasionally 2) RX frames
>>     in a row but then  picking the next ones up...
>>
>>     So increasing the queue size (I doubled it but maybe that was
>>     excessive) seems to do the trick.  I think the queue size is in 
>>     bytes and the queue packet size has increased at least a little bit.
>>
>>     Michael
>>
>>     On Sat, 4 May 2024, 09:24 Michael Geddes,
>>     <frog at bunyip.wheelycreek.net> wrote:
>>
>>         Hey Derek,
>>
>>         I do have a friend with a Leaf in his EV collection,  so I
>>         can try grab some more info from his car and work out exactly
>>         what (tf) is going on.
>>
>>         //.
>>
>>         On Sat, 4 May 2024 at 08:13, <frog at bunyip.wheelycreek.net> wrote:
>>
>>             HI Derek,
>>
>>             For a start, I’m very sorry that the ovms put your car in
>>             limp mode.  That’s quite bad.
>>
>>             Just FYI those overflows that you have copied are about
>>             receiving and not sending information, so maybe the
>>             poller thread is being overwhelmed or stalled somehow.
>>
>>             I’ve been looking at the code and wondered if you have
>>             the ‘can write’ flag set to true or not?  (Though it
>>             shouldn’t make that much difference)
>>
>>             Even if it were somehow mistakenly polling (ie in the
>>             wrong pollstate), it should not be doing it that
>>             frequently – (at most once a minute). And the poll
>>             throttle would still be on 1 per second.. so that should
>>             put a limit  on sends.. and so it is really worrying that
>>             somehow that is not happening :/
>>
>>             If you have more logs that you send me that don’t just
>>             include that particular overflow message that would be
>>             good.  Did it crash/reboot?  Maybe it crashed repeatedly?
>>
>>             //.ichael
>>
>>             *From:*OvmsDev <ovmsdev-bounces at lists.openvehicles.com>
>>             *On Behalf Of *Derek Caudwell via OvmsDev
>>             *Sent:* Friday, May 3, 2024 6:54 PM
>>             *To:* OVMS Developers <ovmsdev at lists.openvehicles.com>
>>             *Cc:* Derek Caudwell <d.caudwell at gmail.com>
>>             *Subject:* Re: [Ovmsdev] OVMS Poller module/singleton
>>
>>             Hi Michael,
>>
>>             When running firmware 3.3.004-74-gbd4e7196 on my Nissan
>>             Leaf I suspect (but can't be 100% sure as it's only been
>>             24h without fault) the new poller caused the car to throw
>>             the attached faults from overloading the can bus whilst
>>             driving. The fault was sufficient to send the car into
>>             limp mode and could not be driven until cleared with
>>             LeafSpy. Ovms should not be polling in the driving state,
>>             so I'm not sure why the poller is overflowing.
>>
>>             The ovms log repeats this overflow in rapid succession
>>             right before the failure occurred. I have since reverted
>>             to an earlier version and it might be advisable for
>>             other Leaf owners to do so until the new poller is fully
>>             operational.
>>
>>             2024-05-02 12:22:28.316 NZST I (36847486) vehicle-poll:
>>             Poller[Frame]: Task Queue Overflow
>>
>>             2024-05-02 12:22:28.316 NZST I (36847486) vehicle-poll:
>>             Poller[Frame]: Task Queue Overflow
>>
>>             2024-05-02 12:22:28.316 NZST I (36847486) vehicle-poll:
>>             Poller[Frame]: Task Queue Overflow
>>
>>             2024-05-02 12:22:28.326 NZST I (36847496) vehicle-poll:
>>             Poller[Frame]: Task Queue Overflow
>>
>>             2024-05-02 12:22:28.326 NZST I (36847496) vehicle-poll:
>>             Poller[Frame]: Task Queue Overflow
>>
>>             2024-05-02 12:22:28.326 NZST I (36847496) vehicle-poll:
>>             Poller[Frame]: Task Queue Overflow
>>
>>             2024-05-02 12:22:28.326 NZST I (36847496) vehicle-poll:
>>             Poller[Frame]: Task Queue Overflow
>>
>>             2024-05-02 12:22:28.326 NZST I (36847496) vehicle-poll:
>>             Poller[Frame]: Task Queue Overflow
>>
>>             2024-05-02 12:22:28.326 NZST I (36847496) vehicle-poll:
>>             Poller[Frame]: Task Queue Overflow
>>
>>             2024-05-02 12:22:28.326 NZST I (36847496) vehicle-poll:
>>             Poller[Frame]: Task Queue Overflow
>>
>>             2024-05-02 12:22:28.326 NZST I (36847496) vehicle-poll:
>>             Poller[Frame]: Task Queue Overflow
>>
>>             2024-05-02 12:22:28.336 NZST I (36847506) vehicle-poll:
>>             Poller[Frame]: Task Queue Overflow
>>
>>             2024-05-02 12:22:28.336 NZST I (36847506) vehicle-poll:
>>             Poller[Frame]: Task Queue Overflow
>>
>>             2024-05-02 12:22:28.336 NZST I (36847506) vehicle-poll:
>>             Poller[Frame]: Task Queue Overflow
>>
>>             2024-05-02 12:22:28.336 NZST I (36847506) vehicle-poll:
>>             Poller[Frame]: Task Queue Overflow
>>
>>             2024-05-02 12:22:28.346 NZST I (36847516) vehicle-poll:
>>             Poller[Frame]: Task Queue Overflow
>>
>>             2024-05-02 12:22:28.346 NZST I (36847516) vehicle-poll:
>>             Poller[Frame]: Task Queue Overflow
>>
>>             2024-05-02 12:22:28.346 NZST I (36847516) vehicle-poll:
>>             Poller[Frame]: Task Queue Overflow
>>
>>             2024-05-02 12:22:28.346 NZST I (36847516) vehicle-poll:
>>             Poller[Frame]: Task Queue Overflow
>>
>>             2024-05-02 12:22:28.356 NZST I (36847526) vehicle-poll:
>>             Poller[Frame]: Task Queue Overflow
>>
>>             2024-05-02 12:22:28.356 NZST I (36847526) vehicle-poll:
>>             Poller[Frame]: Task Queue Overflow
>>
>>             2024-05-02 12:22:28.356 NZST I (36847526) vehicle-poll:
>>             Poller[Frame]: Task Queue Overflow
>>
>>             2024-05-02 12:22:28.356 NZST I (36847526) vehicle-poll:
>>             Poller[Frame]: Task Queue Overflow
>>
>>             On Fri, 3 May 2024 at 05:40, Michael Balzer via OvmsDev
>>             <ovmsdev at lists.openvehicles.com> wrote:
>>
>>                 A task may delete itself by calling vTaskDelete(NULL)
>>                 as the final statement, and that's normally a better
>>                 way to shutdown a task, if you can signal the task it
>>                 should terminate. Deleting a task from outside may
>>                 always result in resources taken by the task not
>>                 being freed, as the task gets terminated wherever it
>>                 just is.
>>
>>                 As the vehicle task also needs to access vehicle data
>>                 memory, vehicle destruction should not begin until
>>                 the task has finished, otherwise a task job already
>>                 running while the vehicle destruction takes place may
>>                 run into an illegal memory access (access after
>>                 free). Keep in mind, destructors are executed bottom
>>                 up, so waiting for the task shutdown within the
>>                 destructor won't help.
>>
>>                 Also, I think "MyCan.DeregisterCallback(TAG)" in
>>                 ShuttingDown() is now obsolete.
>>
>>                 Regards,
>>                 Michael
>>
>>                 Am 02.05.24 um 15:23 schrieb Michael Geddes:
>>
>>                     Thanks.
>>
>>                     On that race condition... do you think we are
>>                     better to just delete the task  or I saw one
>>                     recommendation that
>>
>>                     We can delete it outside the while loop in the
>>                     task itself!
>>
>>                     //.ichael
>>
>>                     On Tue, 30 Apr 2024, 17:46 Michael Balzer via
>>                     OvmsDev, <ovmsdev at lists.openvehicles.com> wrote:
>>
>>                         OK, understood & merged, thanks for the quick
>>                         fix/workaround.
>>
>>                         I'll ask the Twizy driver to test this.
>>
>>                         Regards,
>>                         Michael
>>
>>                         PS: side note: there's a shutdown race
>>                         condition arising from `while
>>                         (!m_is_shutdown)` in the new
>>                         `OvmsVehicle::VehicleTask()`: if the task
>>                         receives a message while m_is_shutdown
>>                         already has been set, it will exit the loop
>>                         and return from the task function, which
>>                         isn't allowed. I think FreeRTOS will abort in
>>                         that case.
>>
>>
>>                         Am 30.04.24 um 08:55 schrieb Michael Geddes:
>>
>>                             No it will start the poll thread of the
>>                             poller fine for those that don't use it. 
>>                             That's the last commit.... so that should
>>                             be covered. When the callback is
>>                             registered the thread is force started.
>>
>>                             This is not to say that what you are
>>                             suggesting isn't a better way forward...
>>                             just that it should work.
>>
>>                             Michael
>>
>>                             On Tue, 30 Apr 2024, 14:51 Michael Balzer
>>                             via OvmsDev,
>>                             <ovmsdev at lists.openvehicles.com> wrote:
>>
>>                                 Michael,
>>
>>                                 (taking this back to the list, as
>>                                 other developers may have helpful
>>                                 ideas or suggestions)
>>
>>                                 from a first check, your new patch
>>                                 (PR #1008) won't help for vehicles
>>                                 that don't use the poller, like the
>>                                 generic DBC vehicle or the Fiat 500
>>                                 (plus possibly non-public third party
>>                                 vehicles). As the poller is normally
>>                                 compiled in, these would need a run
>>                                 time switch to re-enable the vehicle
>>                                 task, or more suitably default into
>>                                 that configuration and switch to the
>>                                 poller task only when the poller gets
>>                                 initialized.
>>
>>                                 How about moving the task back into
>>                                 the vehicle class, but keeping your
>>                                 task message extensions while doing
>>                                 so, and adding a way for the poller
>>                                 to hook into the task? The dedicated
>>                                 vehicle task is an essential part of
>>                                 the vehicle framework, but I do
>>                                 remember some occasions where a
>>                                 general way to pass custom messages
>>                                 to the vehicle task would have been
>>                                 helpful to use the task for more than
>>                                 CAN processing.
>>
>>                                 If the poller shall become avaible as
>>                                 a separate service that can be used
>>                                 without any vehicle instance
>>                                 (currently not a defined use case),
>>                                 the construct of a CAN processor task
>>                                 that can be extended for custom
>>                                 messages (or a message processor task
>>                                 that can subscribe to CAN frames)
>>                                 could be factored out into a
>>                                 dedicated class or template. The
>>                                 poller could then create his own
>>                                 instance of that class, if it cannot
>>                                 hook into an existing one.
>>
>>                                 Btw, in case you're not aware of
>>                                 this, FreeRTOS also provides queue
>>                                 sets
>>                                 (https://www.freertos.org/RTOS-queue-sets.html).
>>                                 We haven't used them in the OVMS yet,
>>                                 but they could be useful, especially
>>                                 if message unions become large or
>>                                 tasks shall be able to dynamically
>>                                 subscribe to different message sources.
>>
>>                                 Regards,
>>                                 Michael
>>
>>                                 Am 30.04.24 um 01:20 schrieb Michael
>>                                 Geddes:
>>
>>                                     It might be worth reverting, but,
>>                                     I've got a patch suggestion that
>>                                     I'll push up which will let me
>>                                     know if I understand everything
>>                                     and which might provide a solution.
>>
>>                                     If this isn't going to work then
>>                                     revert. (P/R coming)
>>
>>                                     While the poller was still a part
>>                                     of the vehicle class it was
>>                                     probably still all ok.   The
>>                                     poller had taken over what I
>>                                     assume you are talking about as
>>                                     the vehicle task. A call-back
>>                                     fromthe poller was calling
>>                                     IncomingPollRxFrame which was
>>                                     then coming from the (now) poller
>>                                     task (is that correct?)
>>
>>                                     While we have OVMS_COMP_POLLER
>>                                     config defined, we could just use
>>                                     the poller task to provide the
>>                                     IncomingPollRxFrame call-back
>>                                     from the poller (was vehicle?) task.
>>
>>                                     The problem is when
>>                                     OVMS_COMP_POLLER is undefined, we
>>                                     need an alternate (maybe we could
>>                                     use the 'Event' loop then) which
>>                                     is when I hacked that bad solution.
>>
>>                                     //.ichael
>>
>>                                     I was thinking though that
>>                                     because everything is being
>>                                     queued we could divert some calls
>>                                     into the car
>>
>>                                     On Mon, 29 Apr 2024, 18:58
>>                                     Michael Balzer,
>>                                     <dexter at expeedo.de> wrote:
>>
>>                                         Michael,
>>
>>                                         I've found a severe design
>>                                         flaw with your poller change.
>>                                         Sorry, I should have seen
>>                                         that before, and shouldn't
>>                                         have merged this.
>>
>>                                         You have moved the standard
>>                                         CAN frame processing from the
>>                                         vehicle task into the CAN
>>                                         task by changing the vehicle
>>                                         from a CAN listener to a CAN
>>                                         callback processor. That will
>>                                         break all kind of things,
>>                                         vehicles like the Twizy,
>>                                         Smart and many others rely on
>>                                         frame processing being done
>>                                         in the dedicated vehicle task.
>>
>>                                         This especially induces
>>                                         issues regarding CAN
>>                                         processing capacity, as the
>>                                         vehicles rely on having a
>>                                         separate context and not
>>                                         needing to decouple complex
>>                                         processing of incoming
>>                                         frames. So this will degrade
>>                                         the CAN processing
>>                                         performance seriously in many
>>                                         cases, where additional steps
>>                                         involving file or network I/O
>>                                         need to be done.
>>
>>                                         So this needs to be changed back.
>>
>>                                         I assumed you introduced a
>>                                         new dedicated poller task but
>>                                         kept the vehicle task intact.
>>                                         From your naming
>>                                         (OvmsVehicle::IncomingPollRxFrame),
>>                                         it seems you misinterpreted
>>                                         the vehicle task's purpose as
>>                                         only being used for polling.
>>
>>                                         I assume this isn't a small
>>                                         change…? If so we should
>>                                         revert the poller merge, to
>>                                         avoid having a defunctional
>>                                         edge build state until the fix.
>>
>>
>>                                         Secondly: logging is
>>                                         generally expensive
>>                                         regardless of the log level
>>                                         control and log channels
>>                                         enabled. Any log message
>>                                         needs to be queued to the log
>>                                         system, so involves a lock
>>                                         and a potential wait state
>>                                         (for the queue) & resulting
>>                                         context switch (= minimum
>>                                         delay of 10 ms). Therefore,
>>                                         logging must be avoided as
>>                                         far as possible in any time
>>                                         critical context, and is
>>                                         forbidden under some
>>                                         circumstances, e.g. in a
>>                                         timer callback (see FreeRTOS
>>                                         docs on this). The log system
>>                                         load multiplies with
>>                                         connected web clients or
>>                                         enabled file logging and
>>                                         enabled debug / verbose level
>>                                         logging -- that quickly
>>                                         becomes too much, usually
>>                                         triggering the task watchdog.
>>
>>                                         Your logging of nearly all
>>                                         bus events passing to/from
>>                                         the poller (especially the
>>                                         log entry in
>>                                         Queue_PollerFrame) becomes an
>>                                         issue on any vehicle that has
>>                                         high frequency running
>>                                         process data frames on the
>>                                         bus, like the Twizy or Smart.
>>                                         As a counter measure, I've
>>                                         just added a runtime control
>>                                         for all the poller's verbose
>>                                         logging (by default now off),
>>                                         and changed some debug level
>>                                         logs to verbose. Not sure if
>>                                         I've catched all that may
>>                                         need to be silenced by
>>                                         default. Please check all
>>                                         your log calls and place them
>>                                         under the new "trace" control
>>                                         flag wherever appropriate.
>>
>>                                         This won't help avoiding
>>                                         issues with process data
>>                                         frame buses though.
>>
>>
>>                                         Shall I revert the poller
>>                                         merge for now?
>>
>>                                         Regards,
>>                                         Michael
>>
>>
>>                                         Am 29.04.24 um 06:18 schrieb
>>                                         Michael Geddes:
>>
>>                                             Btw I included the log
>>                                             changes in the p/r which
>>                                             is a few small commits
>>                                             for the poller.
>>
>>                                             //.
>>
>>                                             On Mon, 29 Apr 2024,
>>                                             07:20 Michael Geddes,
>>                                             <frog at bunyip.wheelycreek.net>
>>                                             wrote:
>>
>>                                                 Hey Michael,
>>
>>                                                 I've got to work now
>>                                                 (it's Monday), but I
>>                                                 suspect those 'giving
>>                                                 up' are from
>>                                                 unsolicited messages
>>                                                 on the bus.
>>
>>                                                 I can re-order things
>>                                                 so that the message
>>                                                 will likely be 
>>                                                 'dropped (no poll
>>                                                 entry)' rather than
>>                                                 the time-out message.
>>
>>                                                 And make it a
>>                                                 verbose log.
>>
>>                                                 //.ichael
>>
>>                                                 On Mon, 29 Apr 2024
>>                                                 at 00:25, Michael
>>                                                 Balzer
>>                                                 <dexter at expeedo.de>
>>                                                 wrote:
>>
>>                                                     Michael,
>>
>>                                                     forwarding the
>>                                                     Twizy logs to you
>>                                                     directly, as they
>>                                                     contain the user
>>                                                     location.
>>
>>                                                     He has just
>>                                                     verified it's the
>>                                                     new version, he
>>                                                     says the module
>>                                                     stops responding
>>                                                     as soon as he
>>                                                     turns on the Twizy.
>>
>>                                                     His description
>>                                                     of his actions is
>>                                                     a bit ambiguous,
>>                                                     and it seems he
>>                                                     didn't enable
>>                                                     logging to the
>>                                                     file persistently.
>>
>>                                                     According to the
>>                                                     server, these
>>                                                     were the version
>>                                                     boot times:
>>
>>                                                     2024-04-28
>>                                                     15:30:56 0
>>                                                     3.3.004-32-g125e0841/ota_0/edge
>>                                                     (build idf
>>                                                     v3.3.4-849-g6e214dc335
>>                                                     Apr 26 2024 19:16:50)
>>                                                     2024-04-28
>>                                                     16:21:08 0
>>                                                     3.3.004-32-g125e0841/ota_0/edge
>>                                                     (build idf
>>                                                     v3.3.4-849-g6e214dc335
>>                                                     Apr 26 2024 19:16:50)
>>                                                     2024-04-28
>>                                                     16:38:33 0
>>                                                     3.3.004-63-gf3595561/ota_1/edge
>>                                                     (build idf
>>                                                     v3.3.4-849-g6e214dc335
>>                                                     Apr 27 2024 07:44:50)
>>                                                     2024-04-28
>>                                                     16:40:57 0
>>                                                     3.3.004-63-gf3595561/ota_1/edge
>>                                                     (build idf
>>                                                     v3.3.4-849-g6e214dc335
>>                                                     Apr 27 2024 07:44:50)
>>                                                     2024-04-28
>>                                                     16:43:14 0
>>                                                     3.3.004-63-gf3595561/ota_1/edge
>>                                                     (build idf
>>                                                     v3.3.4-849-g6e214dc335
>>                                                     Apr 27 2024 07:44:50)
>>                                                     2024-04-28
>>                                                     16:46:39 0
>>                                                     3.3.004-63-gf3595561/ota_1/edge
>>                                                     (build idf
>>                                                     v3.3.4-849-g6e214dc335
>>                                                     Apr 27 2024 07:44:50)
>>                                                     2024-04-28
>>                                                     16:54:44 0
>>                                                     3.3.004-32-g125e0841/ota_0/edge
>>                                                     (build idf
>>                                                     v3.3.4-849-g6e214dc335
>>                                                     Apr 26 2024 19:16:50)
>>
>>                                                     Attached is also
>>                                                     his crash debug
>>                                                     log -- a2ll
>>                                                     doesn't tell much
>>                                                     about what
>>                                                     happened, but
>>                                                     maybe you get an
>>                                                     idea from this.
>>
>>                                                     After the boot at
>>                                                     16:46, there are
>>                                                     immediately lots
>>                                                     of these messages:
>>
>>                                                     2024-04-28
>>                                                     16:46:33.792 CEST
>>                                                     D (39042)
>>                                                     vehicle-poll:
>>                                                     Poller: Queue
>>                                                     PollerFrame()
>>                                                     2024-04-28
>>                                                     16:46:33.792 CEST
>>                                                     D (39042)
>>                                                     vehicle-poll:
>>                                                     [1]Poller:
>>                                                     Incoming - giving up
>>
>>                                                     Regards,
>>                                                     Michael
>>
>>                                                     Am 28.04.24 um
>>                                                     16:44 schrieb
>>                                                     Michael Geddes:
>>
>>                                                         Ah. OK.
>>
>>                                                         I could try
>>                                                         to fix the
>>                                                         vin thing
>>                                                         using the new
>>                                                         way of doing
>>                                                         it and get
>>                                                         rid of a
>>                                                         semaphore?
>>
>>                                                         It would at
>>                                                         least
>>                                                         identify the
>>                                                         problem possibly?
>>
>>                                                         Michael
>>
>>                                                         On Sun, 28
>>                                                         Apr 2024,
>>                                                         22:32 Michael
>>                                                         Balzer via
>>                                                         OvmsDev,
>>                                                         <ovmsdev at lists.openvehicles.com>
>>                                                         wrote:
>>
>>                                                             Not sure
>>                                                             if that's
>>                                                             the
>>                                                             problem,
>>                                                             but I've
>>                                                             found a
>>                                                             different
>>                                                             behaviour
>>                                                             with the
>>                                                             new
>>                                                             PollSetState()
>>                                                             implementation.
>>
>>                                                             The old
>>                                                             version
>>                                                             only did
>>                                                             anything
>>                                                             if the
>>                                                             new state
>>                                                             actually
>>                                                             was
>>                                                             different
>>                                                             from the
>>                                                             previous
>>                                                             one. The
>>                                                             Twizy
>>                                                             relies on
>>                                                             this
>>                                                             behaviour,
>>                                                             calling
>>                                                             PollSetState()
>>                                                             from the
>>                                                             per
>>                                                             second
>>                                                             ticker
>>                                                             (see
>>                                                             OvmsVehicleRenaultTwizy::ObdTicker1).
>>
>>                                                             The new
>>                                                             implementation
>>                                                             apparently
>>                                                             always
>>                                                             sends the
>>                                                             PollState
>>                                                             command
>>                                                             to the
>>                                                             task, and
>>                                                             that in
>>                                                             turn
>>                                                             always at
>>                                                             least
>>                                                             locks the
>>                                                             poller
>>                                                             mutex.
>>                                                             Not sure
>>                                                             if/how
>>                                                             that
>>                                                             could
>>                                                             cause the
>>                                                             observed
>>                                                             issues,
>>                                                             but it
>>                                                             definitely
>>                                                             adds
>>                                                             quite
>>                                                             some
>>                                                             (unnecessary?)
>>                                                             lock/unlock
>>                                                             operations.
>>
>>
>>                                                             Am
>>                                                             28.04.24
>>                                                             um 16:05
>>                                                             schrieb
>>                                                             Michael
>>                                                             Balzer
>>                                                             via OvmsDev:
>>
>>                                                                 The
>>                                                                 Twizy
>>                                                                 uses
>>                                                                 the
>>                                                                 poller
>>                                                                 to
>>                                                                 query
>>                                                                 the
>>                                                                 VIN
>>                                                                 (once)
>>                                                                 and
>>                                                                 DTCs
>>                                                                 (every
>>                                                                 10
>>                                                                 seconds
>>                                                                 while
>>                                                                 driving),
>>                                                                 see
>>                                                                 rt_obd2.cpp.
>>
>>                                                                 It
>>                                                                 also
>>                                                                 has
>>                                                                 its
>>                                                                 own
>>                                                                 version
>>                                                                 of
>>                                                                 the
>>                                                                 OBD
>>                                                                 single
>>                                                                 request
>>                                                                 (OvmsVehicleRenaultTwizy::ObdRequest),
>>                                                                 which
>>                                                                 was
>>                                                                 the
>>                                                                 precursor
>>                                                                 for
>>                                                                 the
>>                                                                 generalized
>>                                                                 version.
>>                                                                 This
>>                                                                 is
>>                                                                 used
>>                                                                 by
>>                                                                 custom/user
>>                                                                 Twizy
>>                                                                 plugins
>>                                                                 and
>>                                                                 scripts
>>                                                                 to
>>                                                                 access
>>                                                                 ECU
>>                                                                 internals.
>>
>>                                                                 The
>>                                                                 Twizy
>>                                                                 doesn't
>>                                                                 use
>>                                                                 IncomingPollRxFrame,
>>                                                                 but
>>                                                                 the
>>                                                                 Twizy's
>>                                                                 IncomingPollReply
>>                                                                 handler
>>                                                                 will
>>                                                                 log
>>                                                                 any
>>                                                                 poll
>>                                                                 responses
>>                                                                 it
>>                                                                 doesn't
>>                                                                 know
>>                                                                 about,
>>                                                                 so
>>                                                                 that
>>                                                                 could
>>                                                                 lead
>>                                                                 to a
>>                                                                 lot
>>                                                                 of
>>                                                                 log
>>                                                                 output
>>                                                                 if
>>                                                                 something
>>                                                                 goes
>>                                                                 wrong
>>                                                                 there.
>>
>>                                                                 Am
>>                                                                 28.04.24
>>                                                                 um
>>                                                                 15:49
>>                                                                 schrieb
>>                                                                 Michael
>>                                                                 Geddes
>>                                                                 via
>>                                                                 OvmsDev:
>>
>>                                                                     AFAICT
>>                                                                     the
>>                                                                     twizzy
>>                                                                     doesn't
>>                                                                     use
>>                                                                     the
>>                                                                     poller
>>                                                                     list
>>                                                                     at
>>                                                                     all.
>>                                                                     So
>>                                                                     is
>>                                                                     it
>>                                                                     missing
>>                                                                     a
>>                                                                     call-back
>>                                                                     or
>>                                                                     something??
>>
>>                                                                     I
>>                                                                     can
>>                                                                     see
>>                                                                     a
>>                                                                     potential
>>                                                                     problem
>>                                                                     with
>>                                                                     IncomingPollRxFrame
>>                                                                     being
>>                                                                     called
>>                                                                     twice
>>                                                                     as
>>                                                                     much
>>                                                                     as
>>                                                                     it
>>                                                                     should
>>                                                                     be
>>                                                                     but
>>                                                                     only
>>                                                                     when
>>                                                                     there
>>                                                                     is
>>                                                                     a
>>                                                                     poll
>>                                                                     list.
>>                                                                     Maybe
>>                                                                     commenting
>>                                                                     out
>>                                                                     this
>>                                                                     would
>>                                                                     do
>>                                                                     it. 
>>                                                                     (I
>>                                                                     can
>>                                                                     find
>>                                                                     another
>>                                                                     away
>>                                                                     to
>>                                                                     get
>>                                                                     this
>>                                                                     called
>>                                                                     on
>>                                                                     the
>>                                                                     thread
>>                                                                     I
>>                                                                     want). 
>>                                                                     This
>>                                                                     might
>>                                                                     be
>>                                                                     the
>>                                                                     problem
>>                                                                     with
>>                                                                     the
>>                                                                     smarted
>>
>>                                                                     void
>>                                                                     OvmsVehicle::OvmsVehicleSignal::IncomingPollRxFrame(canbus*
>>                                                                     bus,
>>                                                                     CAN_frame_t
>>                                                                     *frame,
>>                                                                     bool
>>                                                                     success)
>>                                                                       {
>>                                                                      
>>                                                                     //if
>>                                                                     (Ready())
>>                                                                      
>>                                                                     //
>>                                                                     m_parent->IncomingPollRxFrame(frame,
>>                                                                     success);
>>                                                                       }
>>
>>                                                                     //.
>>
>>                                                                     On
>>                                                                     Sun,
>>                                                                     28
>>                                                                     Apr
>>                                                                     2024
>>                                                                     at
>>                                                                     21:10,
>>                                                                     Michael
>>                                                                     Balzer
>>                                                                     via
>>                                                                     OvmsDev
>>                                                                     <ovmsdev at lists.openvehicles.com>
>>                                                                     wrote:
>>
>>                                                                         There
>>                                                                         may
>>                                                                         also
>>                                                                         be
>>                                                                         an
>>                                                                         issue
>>                                                                         with
>>                                                                         the
>>                                                                         Renault
>>                                                                         Twizy,
>>                                                                         I've
>>                                                                         received
>>                                                                         a
>>                                                                         report
>>                                                                         of
>>                                                                         a
>>                                                                         user
>>                                                                         who
>>                                                                         is
>>                                                                         using
>>                                                                         the
>>                                                                         edge
>>                                                                         builds,
>>                                                                         that
>>                                                                         the
>>                                                                         latest
>>                                                                         build
>>                                                                         wouldn't
>>                                                                         work.
>>
>>                                                                         He
>>                                                                         reports
>>                                                                         all
>>                                                                         kinds
>>                                                                         of
>>                                                                         errors
>>                                                                         and
>>                                                                         warnings
>>                                                                         signaled
>>                                                                         by
>>                                                                         the
>>                                                                         car
>>                                                                         during
>>                                                                         driving,
>>                                                                         and
>>                                                                         switching
>>                                                                         back
>>                                                                         to
>>                                                                         the
>>                                                                         previous
>>                                                                         build
>>                                                                         fixed
>>                                                                         the
>>                                                                         issues.
>>
>>                                                                         I've
>>                                                                         asked
>>                                                                         him
>>                                                                         to
>>                                                                         provide
>>                                                                         a
>>                                                                         debug
>>                                                                         log
>>                                                                         excerpt
>>                                                                         if
>>                                                                         possible.
>>
>>                                                                         Regards,
>>                                                                         Michael
>>
>>                                                                         Am
>>                                                                         28.04.24
>>                                                                         um
>>                                                                         14:29
>>                                                                         schrieb
>>                                                                         Michael
>>                                                                         Geddes
>>                                                                         via
>>                                                                         OvmsDev:
>>
>>                                                                             OK.
>>                                                                             That's
>>                                                                             bad.
>>
>>                                                                             Does
>>                                                                             the
>>                                                                             reading
>>                                                                             work
>>                                                                             in
>>                                                                             general?
>>
>>                                                                             Is
>>                                                                             it
>>                                                                             just
>>                                                                             the
>>                                                                             writing
>>                                                                             commands?
>>
>>                                                                             Raise
>>                                                                             a
>>                                                                             ticket
>>                                                                             on
>>                                                                             github
>>                                                                             and
>>                                                                             tag
>>                                                                             me
>>                                                                             in
>>                                                                             and
>>                                                                             we
>>                                                                             can
>>                                                                             address
>>                                                                             it
>>                                                                             that
>>                                                                             way.
>>
>>                                                                             Michael
>>
>>                                                                             On
>>                                                                             Sun,
>>                                                                             28
>>                                                                             Apr
>>                                                                             2024,
>>                                                                             19:49
>>                                                                             Thomas
>>                                                                             Heuer
>>                                                                             via
>>                                                                             OvmsDev,
>>                                                                             <ovmsdev at lists.openvehicles.com>
>>                                                                             wrote:
>>
>>                                                                                 Hi,
>>
>>                                                                                 The
>>                                                                                 new
>>                                                                                 poller
>>                                                                                 code
>>                                                                                 doesn't
>>                                                                                 seem
>>                                                                                 to
>>                                                                                 work
>>                                                                                 properly
>>                                                                                 with
>>                                                                                 the
>>                                                                                 smarted.
>>
>>                                                                                 D
>>                                                                                 (218831)
>>                                                                                 vehicle-poll:
>>                                                                                 [1]PollerNextTick(PRI):
>>                                                                                 cycle
>>                                                                                 complete
>>                                                                                 for
>>                                                                                 ticker=215
>>
>>                                                                                 V
>>                                                                                 (218831)
>>                                                                                 vehicle-poll:
>>                                                                                 Standard
>>                                                                                 Poll
>>                                                                                 Series:
>>                                                                                 List
>>                                                                                 reset
>>
>>                                                                                 D
>>                                                                                 (218831)
>>                                                                                 vehicle-poll:
>>                                                                                 PollSeriesList::NextPollEntry[!v.standard]:
>>                                                                                 ReachedEnd
>>
>>                                                                                 V
>>                                                                                 (218831)
>>                                                                                 vehicle-poll:
>>                                                                                 [1]PollerSend:
>>                                                                                 Poller
>>                                                                                 Reached
>>                                                                                 End
>>
>>                                                                                 D
>>                                                                                 (219691)
>>                                                                                 vehicle-poll:
>>                                                                                 Poller:
>>                                                                                 Queue
>>                                                                                 PollerFrame()
>>
>>                                                                                 D
>>                                                                                 (219691)
>>                                                                                 vehicle-poll:
>>                                                                                 Poller:
>>                                                                                 Queue
>>                                                                                 PollerFrame()
>>
>>                                                                                 V
>>                                                                                 (219691)
>>                                                                                 vehicle-poll:
>>                                                                                 Pollers:
>>                                                                                 FrameRx(bus=2)
>>
>>                                                                                 D
>>                                                                                 (219691)
>>                                                                                 vehicle-poll:
>>                                                                                 Poller:
>>                                                                                 Queue
>>                                                                                 PollerFrame()
>>
>>                                                                                 V
>>                                                                                 (219691)
>>                                                                                 vehicle-poll:
>>                                                                                 Pollers:
>>                                                                                 FrameRx(bus=2)
>>
>>                                                                                 V
>>                                                                                 (219691)
>>                                                                                 vehicle-poll:
>>                                                                                 Pollers:
>>                                                                                 FrameRx(bus=2)
>>
>>                                                                                 D
>>                                                                                 (219691)
>>                                                                                 vehicle-poll:
>>                                                                                 Poller:
>>                                                                                 Queue
>>                                                                                 PollerFrame()
>>
>>                                                                                 *OVMS#*unlock
>>                                                                                 22
>>                                                                                 Vehicle
>>                                                                                 unlocked
>>
>>                                                                                 V
>>                                                                                 (219691)
>>                                                                                 vehicle-poll:
>>                                                                                 Pollers:
>>                                                                                 FrameRx(bus=2)
>>

-- 
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/20240506/ff6a7098/attachment-0001.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature.asc
Type: application/pgp-signature
Size: 203 bytes
Desc: OpenPGP digital signature
URL: <http://lists.openvehicles.com/pipermail/ovmsdev/attachments/20240506/ff6a7098/attachment-0001.sig>


More information about the OvmsDev mailing list