<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    Michael,<br>
    <br>
    I'm sorry I currently don't have the time to support you properly. I
    had a look at your PR some days ago, saw some issues and got the
    impression something must be missing either from your PR or in my
    understanding of your goal with that PR – it seemed the changes now
    wouldn't have any effect on poll frequency at all, which I assumed
    was the initial goal. I didn't have the time to do a proper
    analysis.<br>
    <br>
    Regarding moving the poller to a job worker/client model, that's
    very welcome. I recommend taking a look at my CANopen
    implementation, which implements that model and provides workers per
    bus, asynchronous and synchronous client APIs and a general shell
    interface. While CANopen is quite different from ISOTP, the basic
    principles are the same.<br>
    <br>
    CANopen usage:
<a class="moz-txt-link-freetext" href="https://docs.openvehicles.com/en/latest/components/canopen/docs/index.html">https://docs.openvehicles.com/en/latest/components/canopen/docs/index.html</a><br>
    <br>
    That was my first larger FreeRTOS application, so may be improvable,
    but it works nicely (currently only used by the Twizy adapter).<br>
    <br>
    Regards,<br>
    Michael<br>
    <br>
    <br>
    <div class="moz-cite-prefix">Am 06.04.23 um 11:45 schrieb Michael
      Geddes:<br>
    </div>
    <blockquote type="cite"
cite="mid:CAH0p7uKByGDjCXa7xMx=BaEA6cegdBaT2Ckw2kDiuSujHQ6cKQ@mail.gmail.com">
      <meta http-equiv="content-type" content="text/html; charset=UTF-8">
      <div dir="ltr">This is an example of where I'm headed.  This
        creates and activates a Once-off poll entry that doesn't block
        (and removes itself from the poll list once it is done).
        <div>A success will call Incoming_Full with a std::string
          buffer  and a fail calls Incoming_Fail.</div>
        <div><br>
          <blockquote style="margin:0 0 0 40px;border:none;padding:0px">
            <div><font face="monospace">bool
                OvmsHyundaiIoniqEv::PollRequestVIN()</font></div>
            <div><font face="monospace">{</font></div>
            <div><font face="monospace">  if
                (!StdMetrics.ms_v_env_awake->AsBool()) {</font></div>
            <div><font face="monospace">    ESP_LOGV(TAG,
                "PollRequestVIN: Not Awake Request not sent");</font></div>
            <div><font face="monospace">    return false;</font></div>
            <div><font face="monospace">  }</font></div>
            <div><font face="monospace">  auto poll_entry =
                std::shared_ptr<OvmsVehicle::OnceOffPoll>(</font></div>
            <div><font face="monospace">      new
                OvmsVehicle::OnceOffPoll(m_can1,</font></div>
            <div><font face="monospace">       
                std::bind(&OvmsHyundaiIoniqEv::Incoming_Full, this,
                _1, _2, _3, _4, _5, _6),</font></div>
            <div><font face="monospace">       
                std::bind(&OvmsHyundaiIoniqEv::Incoming_Fail, this,
                _1, _2, _3, _4, _5, _6),</font></div>
            <div><font face="monospace">       
                VEHICLE_OBD_BROADCAST_MODULE_TX,
                VEHICLE_OBD_BROADCAST_MODULE_RX,</font></div>
            <div><font face="monospace">       
                VEHICLE_POLL_TYPE_OBDIIVEHICLE,  2,</font></div>
            <div><font face="monospace">        ISOTP_STD, 0,
                3/*retries*/ ));</font></div>
            <div><font face="monospace">  PollRequest("!xiq.vin",
                poll_entry);</font></div>
            <div><font face="monospace">  return true;</font></div>
            <div><font face="monospace">}</font></div>
          </blockquote>
        </div>
      </div>
      <br>
      <div class="gmail_quote">
        <div dir="ltr" class="gmail_attr">On Tue, 4 Apr 2023 at 07:13,
          Michael Geddes <<a
            href="mailto:frog@bunyip.wheelycreek.net"
            moz-do-not-send="true" class="moz-txt-link-freetext">frog@bunyip.wheelycreek.net</a>>
          wrote:<br>
        </div>
        <blockquote class="gmail_quote" style="margin:0px 0px 0px
          0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
          <div dir="ltr">
            <div>Hi all,<br>
            </div>
            <div>I was after some feedback on </div>
            <a
href="https://github.com/openvehicles/Open-Vehicle-Monitoring-System-3/pull/859"
              target="_blank" moz-do-not-send="true"
              class="moz-txt-link-freetext">https://github.com/openvehicles/Open-Vehicle-Monitoring-System-3/pull/859</a> 
            <div>which moves the ISOTP polling into what is currently
              the ISOTP response thread.</div>
            <div><br>
            </div>
            <div>
              <div>This is part of a larger rework I have been doing to
                add flexibility to the loop and to move the poll-loop
                operations behind a clean interface.<br>
              </div>
            </div>
            <div><br>
            </div>
            <div>I'm interested in feedback on the mechanism in the p/r
              directly, but I'm also happy to provide the usage examples
              I have (which would be the follow-up commits for Ioniq 5).</div>
            <div><br>
            </div>
            <div>I'm also interested in other people's thoughts on where
              they see what improvements might be had to the poll-list
              mechanism.</div>
            <div>Already Done:</div>
            <div>  * Clean up the blocking poll mechanism</div>
            <div>  * Allow for multiple concurrent poll lists (still
              executed sequentially)</div>
            <div>  * Add once-off non-blocking poll mechanism</div>
            <div>  * Add a poll-list that allows repeating
              more-frequently than the primary poll</div>
            <div><br>
            </div>
            <div>Ideas:</div>
            <div>  * Add a user-configurable poller that could possibly
              utilise the DBC framework (on top of the existing vehicle
              framework) to allow exploring/experimenting with both
              passive data as well as polled data. (Given that the DBC
              framework already does the heavy lifting of interpreting
              data - adding a poll request to that seems to be a nice
              way of going)</div>
            <div>  * ??? Have a poll thread per bus ???</div>
            <div>  </div>
            <div>//.ichael</div>
            <div><br>
            </div>
            <div><br>
            </div>
          </div>
        </blockquote>
      </div>
    </blockquote>
    <br>
    <pre class="moz-signature" cols="72">-- 
Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal
Fon 02333 / 833 5735 * Handy 0176 / 206 989 26</pre>
  </body>
</html>