openpilot is an open source driver assistance system. openpilot performs the functions of Automated Lane Centering and Adaptive Cruise Control for over 200 supported car makes and models.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

57 lines
1.7 KiB

#pragma once
#include <memory>
#include "J2534Frame.h"
class J2534Connection;
/**
An Action represents a unit of work that can be scheduled for execution at a later time.
Actions are not guaranteed to be run at their specified time, but a best effort is made.
An Action will never execute early, but can execute later depending on what is in the
queus.
Many different operations are based on this base class. Instead of making a thread,
consider if the work can be offloaded to the Task Queue.
*/
class Action
{
public:
Action(
std::weak_ptr<J2534Connection> connection,
std::chrono::microseconds delay
) : connection(connection), delay(delay) { };
Action(
std::weak_ptr<J2534Connection> connection
) : connection(connection), delay(std::chrono::microseconds(0)) { };
//The function called by the task runner when this action is to be invoked.
virtual void execute() = 0;
//Reschedule this Action for now().
void scheduleImmediate() {
expire = std::chrono::steady_clock::now();
}
//Reschedule this Action relative to its last expiration time.
void scheduleDelay() {
expire += this->delay;
}
//Reschedule this action {delay} after now().
void scheduleImmediateDelay() {
expire = std::chrono::steady_clock::now() + this->delay;
}
//Reschedule this Action based on a specific base time.
void schedule(std::chrono::time_point<std::chrono::steady_clock> starttine, BOOL adddelayed) {
this->expire = starttine;
if (adddelayed)
expire += this->delay;
}
std::weak_ptr<J2534Connection> connection;
std::chrono::microseconds delay;
//The timestamp at which point this Action is ready to be executed.
std::chrono::time_point<std::chrono::steady_clock> expire;
};