<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    Ah, the vehicle task makes more sense.<br>
    <br>
    Thanks,<br>
    <br>
    Greg<br>
    <br>
    <br>
    <div class="moz-cite-prefix">Mark Webb-Johnson wrote:<br>
    </div>
    <blockquote type="cite"
      cite="mid:B54DFA48-3BC7-4B42-B677-F318FF14F7FB@webb-johnson.net">
      <meta http-equiv="content-type" content="text/html; charset=UTF-8">
      <meta http-equiv="content-type" content="text/html; charset=UTF-8">
      <meta http-equiv="content-type" content="text/html; charset=UTF-8">
      <div style="overflow-wrap: break-word; -webkit-nbsp-mode: space;
        line-break: after-white-space;">Greg,
        <div><br>
        </div>
        <div>On reflection, I think Michael is actually talking about
          the vehicle task (ODBII poller), rather than ECU task (OBDII
          ECU receiver).</div>
        <div><br>
        </div>
        <div>That said, my comment applies equally to the vehicle task.
          Anytime our code has a task and receive queue, the timer
          handling can be implemented by simply injecting messages into
          that queue. Many tasks in freertos follow that model.</div>
        <div><br>
        </div>
        <div>Regards, Mark<br>
          <div><br>
            <blockquote type="cite">
              <div>On 13 Feb 2023, at 11:58 AM, Greg D.
                <a class="moz-txt-link-rfc2396E" href="mailto:gregd2350@gmail.com"><gregd2350@gmail.com></a> wrote:</div>
              <br class="Apple-interchange-newline">
              <div>
                <meta http-equiv="Content-Type" content="text/html;
                  charset=UTF-8">
                <div text="#000000" bgcolor="#FFFFFF"> Hi Michael,<br>
                  <br>
                  I've tried to track what you're proposing to do with
                  the OBD2ECU task, but to be honest I'm confused.  By
                  design it is to be driven by the HUD; HUD sends a
                  request for some metric, and the OBD2ECU task responds
                  with whatever the current value of that metric is.  If
                  something isn't getting updated on the metric side, it
                  can't conger up the data.  Same if the HUD doesn't ask
                  for something; there's no way to push an update to it.<br>
                  <br>
                  What are you trying to do?<br>
                  <br>
                  Greg<br>
                  <br>
                  <br>
                  <div class="moz-cite-prefix">Michael Geddes wrote:<br>
                  </div>
                  <blockquote type="cite"
cite="mid:CAH0p7u+xoSoAZh8itO4itubHwN0SG8WfZc-Nf75mPpRBe9uPUA@mail.gmail.com">
                    <meta http-equiv="content-type" content="text/html;
                      charset=UTF-8">
                    <meta http-equiv="content-type" content="text/html;
                      charset=UTF-8">
                    <div dir="auto">
                      <div>Ah thanks,  this is exactly why I described
                        it rather than just putting up even a draft.
                        I'll do exactly as you recommend... It makes
                        sense. I hadn't thought to feed the subtick
                        through the ECU object. I can't imagine any
                        other place where that kind of responsivness is
                        required... So.. Yes, agreed. (And I'll make it
                        a 200ms timer).</div>
                      <div dir="auto"><br>
                      </div>
                      <div dir="auto">Michael <br>
                        <br>
                        <div class="gmail_quote" dir="auto">
                          <div dir="ltr" class="gmail_attr">On Mon, 13
                            Feb 2023, 9:08 am Mark Webb-Johnson, <<a
                              href="mailto:mark@webb-johnson.net"
                              moz-do-not-send="true">mark@webb-johnson.net</a>>
                            wrote:<br>
                          </div>
                          <blockquote class="gmail_quote"
                            style="margin:0 0 0 .8ex;border-left:1px
                            #ccc solid;padding-left:1ex">
                            <div style="line-break:after-white-space">This
                              approach (<a href="http://ticker.ms/"
                                target="_blank" rel="noreferrer"
                                moz-do-not-send="true">ticker.ms</a>.100
                              event) is a little concerning. Our event
                              queue is of limited size, and often when
                              we see a stuck/busy task the first sign is
                              inability to send the 1 second ticker
                              message. Adding another every 100ms would
                              presumably make this 10 times worse?
                              <div><br>
                              </div>
                              <div>The events are processed in the
                                context of the housekeeping task.</div>
                              <div><br>
                              </div>
                              <div>Given that the OBD2ECU code has it’s
                                own task, with receive queue, perhaps it
                                would be safer to just register a simple
                                100ms freertos timer (running whenever
                                the ECU task is running) and use that to
                                feed a timer notification into the
                                receive queue? That would keep the
                                processing within the ECU task, and also
                                avoid any locking/contention issues.
                                Would either need to add a new custom
                                message type, or just use something like
                                frame.origin=NULL to signal it was a
                                timer event (rather than an incoming can
                                frame).</div>
                              <div><br>
                              </div>
                              <div>Regards, Mark.<br>
                                <div><br>
                                  <blockquote type="cite">
                                    <div>On 11 Feb 2023, at 12:08 PM,
                                      Michael Geddes <<a
                                        href="mailto:frog@bunyip.wheelycreek.net"
                                        target="_blank" rel="noreferrer"
                                        moz-do-not-send="true">frog@bunyip.wheelycreek.net</a>>
                                      wrote:</div>
                                    <br>
                                    <div>
                                      <div dir="ltr">Hi all,<br>
                                        <div><br>
                                        </div>
                                        <div>Now that I have a
                                          functional HUD connection,
                                          I've been tweaking some things
                                          to make sure it is responsive.
                                          The HUD itself is polling
                                          multiple times (4?) per
                                          second, so it's making sure
                                          the speed (particularly)
                                          metric is kept up-to-date.</div>
                                        <div>Initially, it was really
                                          slow because I had left the
                                          message throttle as its
                                          default of 1. Which means that
                                          at most 1 ISOTP message was
                                          being executed a second and
                                          speed was being updated every
                                          3-4 seconds, which was
                                          unusable.</div>
                                        <div>I upped that to 8, and that
                                          was an improvement, and now I
                                          have this sub-ticker mechanism
                                          (below) implemented, and it
                                          appears to increase
                                          responsiveness and decrease
                                          latency between the dashboard
                                          speedo and the HUD speedo. 
                                          It's really hard to observe as
                                          it requires that you be
                                          driving! It's also hard to be
                                          objective. Without the
                                          sub-ticker it's workable. With
                                          the sub-ticker, I think it
                                          just tightens it up that much
                                          more.</div>
                                        <div><br>
                                        </div>
                                        <div>So I have implemented the
                                          following:<br>
                                          a) I added a new ticker timer
                                          in 'housekeeping' which sends
                                          an event every 1 ms
                                          "ticker.ms.100".  (Though I'm
                                          thinking that every 2ms might
                                          be sufficient).  The message
                                          is blocked from being sent to
                                          the web (now). </div>
                                        <div><br>
                                        </div>
                                        <div>b) In vehicle.h I have a
                                          (protected) function
                                          PollSetSubtick(bool) that can
                                          turn off and on the use of
                                          this 'sub-second' ticker
                                          (first time it's turned on is
                                          when it actually registers for
                                          the event).  This then sets up
                                          a count that is reset whenever
                                          the polling ticker is
                                          incremented (m_poll_ticker)
                                          and the sub-ticker is enabled.</div>
                                        <div><br>
                                        </div>
                                        <div>c)  When enabled,  from
                                          sub-ticker count 4 onwards
                                          every 2 sub-ticks (0.1s), it
                                          calls PollerSend(false) as
                                          long as 1) It hasn't reach the
                                          end of the  list, and 2) we
                                          aren't waiting for more parts
                                          of the current ISOTP message. </div>
                                        <div>   The idea of this is that
                                          it keeps the queue moving in
                                          case there were protocol
                                          errors or other hiccoughs that
                                          stopped it continuing! </div>
                                        <div><br>
                                        </div>
                                        <div>d) I have implemented
                                          events for when the ecu is
                                          turned on and
                                          off: vehicle.ecu.start
                                          and vehicle.ecu.stop
                                          respectively called from the
                                          constructor/destructor of the
                                          ECU class.</div>
                                        <div><br>
                                        </div>
                                        <div>e) For (currently) the
                                          Ioniq 5, I register a listener
                                          for these events and then call
                                          a function
                                          ECUStatusChange(bool). </div>
                                        <div>   1)  For 'enabled' this
                                          calls  PollSetThrottling(8)
                                          and PollSetSubtick(true)</div>
                                        <div>    2) For 'disabled' this
                                          calls PollSetThrottling(4) and
                                          PollSetSubtick(false)</div>
                                        <div><br>
                                        </div>
                                        <div>f) The other thing I did
                                          for Ioniq 5 was to put an
                                          extra 'Speed' check at the end
                                          of the poll list - (for car
                                          'on' only). Which means it
                                          checks speed twice per poll
                                          tick.</div>
                                        <div><br>
                                        </div>
                                        <div>Any feedback on any of this
                                          would be greatly appreciated. 
                                          I'm worried about</div>
                                        <div>* Thread safety (would
                                          these events be executed in
                                          the same thread?)</div>
                                        <div>*  Overloading the system
                                          somehow / causing battery
                                          drain when system off.</div>
                                        <div>*  Do I need to turn off
                                          the ticker.ms.100 event at
                                          some point for power-saving?
                                          When?</div>
                                        <div>*  Stuff I haven't thought
                                          of.</div>
                                        <div><br>
                                        </div>
                                        <div>//.ichael Geddes</div>
                                        <div><br>
                                        </div>
                                      </div>
_______________________________________________<br>
                                      OvmsDev mailing list<br>
                                      <a
                                        href="mailto:OvmsDev@lists.openvehicles.com"
                                        target="_blank" rel="noreferrer"
                                        moz-do-not-send="true">OvmsDev@lists.openvehicles.com</a><br>
                                      <a
                                        href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev"
                                        target="_blank" rel="noreferrer"
                                        moz-do-not-send="true">http://lists.openvehicles.com/mailman/listinfo/ovmsdev</a><br>
                                    </div>
                                  </blockquote>
                                </div>
                                <br>
                              </div>
                            </div>
_______________________________________________<br>
                            OvmsDev mailing list<br>
                            <a
                              href="mailto:OvmsDev@lists.openvehicles.com"
                              target="_blank" rel="noreferrer"
                              moz-do-not-send="true">OvmsDev@lists.openvehicles.com</a><br>
                            <a
                              href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev"
                              rel="noreferrer noreferrer"
                              target="_blank" moz-do-not-send="true">http://lists.openvehicles.com/mailman/listinfo/ovmsdev</a><br>
                          </blockquote>
                        </div>
                      </div>
                    </div>
                    <br>
                    <fieldset class="mimeAttachmentHeader"></fieldset>
                    <pre class="moz-quote-pre" wrap="">_______________________________________________
OvmsDev mailing list
<a class="moz-txt-link-abbreviated" href="mailto:OvmsDev@lists.openvehicles.com" moz-do-not-send="true">OvmsDev@lists.openvehicles.com</a>
<a class="moz-txt-link-freetext" href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev" moz-do-not-send="true">http://lists.openvehicles.com/mailman/listinfo/ovmsdev</a>
</pre>
                  </blockquote>
                  <br>
                </div>
                _______________________________________________<br>
                OvmsDev mailing list<br>
                <a class="moz-txt-link-abbreviated" href="mailto:OvmsDev@lists.openvehicles.com">OvmsDev@lists.openvehicles.com</a><br>
                <a class="moz-txt-link-freetext" href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev">http://lists.openvehicles.com/mailman/listinfo/ovmsdev</a><br>
              </div>
            </blockquote>
          </div>
          <br>
        </div>
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <pre class="moz-quote-pre" wrap="">_______________________________________________
OvmsDev mailing list
<a class="moz-txt-link-abbreviated" href="mailto:OvmsDev@lists.openvehicles.com">OvmsDev@lists.openvehicles.com</a>
<a class="moz-txt-link-freetext" href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev">http://lists.openvehicles.com/mailman/listinfo/ovmsdev</a>
</pre>
    </blockquote>
    <br>
  </body>
</html>