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).
A success will call Incoming_Full with a std::string buffer  and a fail calls Incoming_Fail.

bool OvmsHyundaiIoniqEv::PollRequestVIN()
{
  if (!StdMetrics.ms_v_env_awake->AsBool()) {
    ESP_LOGV(TAG, "PollRequestVIN: Not Awake Request not sent");
    return false;
  }
  auto poll_entry = std::shared_ptr<OvmsVehicle::OnceOffPoll>(
      new OvmsVehicle::OnceOffPoll(m_can1,
        std::bind(&OvmsHyundaiIoniqEv::Incoming_Full, this, _1, _2, _3, _4, _5, _6),
        std::bind(&OvmsHyundaiIoniqEv::Incoming_Fail, this, _1, _2, _3, _4, _5, _6),
        VEHICLE_OBD_BROADCAST_MODULE_TX, VEHICLE_OBD_BROADCAST_MODULE_RX,
        VEHICLE_POLL_TYPE_OBDIIVEHICLE,  2,
        ISOTP_STD, 0, 3/*retries*/ ));
  PollRequest("!xiq.vin", poll_entry);
  return true;
}

On Tue, 4 Apr 2023 at 07:13, Michael Geddes <frog@bunyip.wheelycreek.net> wrote:
Hi all,
I was after some feedback on 
https://github.com/openvehicles/Open-Vehicle-Monitoring-System-3/pull/859 
which moves the ISOTP polling into what is currently the ISOTP response thread.

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.

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

I'm also interested in other people's thoughts on where they see what improvements might be had to the poll-list mechanism.
Already Done:
  * Clean up the blocking poll mechanism
  * Allow for multiple concurrent poll lists (still executed sequentially)
  * Add once-off non-blocking poll mechanism
  * Add a poll-list that allows repeating more-frequently than the primary poll

Ideas:
  * 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)
  * ??? Have a poll thread per bus ???
  
//.ichael