64 bool load(
const std::string& config_content,
const std::string& csv_path,
65 const std::string& delay_csv_path =
"");
121 std::map<std::string, int>
positionsForState(
const std::string& state_name)
const;
131 double delayForRole(
const std::string& state_name,
const std::string& role)
const;
183 std::map<std::string, ActuatorRole>
roles_;
223 const std::string& state_name)
const;
227 bool sendBatch(
const std::map<std::string, std::vector<std::pair<uint8_t, uint8_t>>>& by_board);
228 bool sendUDP(
const std::string& board_ip,
229 const std::vector<std::pair<uint8_t, uint8_t>>& id_state_pairs);
Standalone Elodin database client.
Sends UDP actuator commands based on state transitions.
void clearAllManualOverrides()
Clear all manual overrides (e.g.
std::map< std::string, int > manual_overrides_
void stopContinuousLoop()
Stop the continuous re-send loop (blocks until the thread exits).
void setFireState(State s)
Set the Elodin client for publishing commanded state [0x32, ch] to the DB.
std::mutex script_positions_mutex_
static void logOverrideShadowingScript(const std::string &role)
Warn once per role that a manual override is fighting a running script for a valve.
State fire_state_
Bumped on every transition so an in-flight delayed stage from the previous state aborts instead of la...
std::map< std::string, std::map< std::string, int > >::const_iterator findStateActuators(const std::string &state_name) const
void applyForState(State state, bool is_transition=false)
Send actuator commands for the given state (one shot).
void publishCommandedState(uint8_t table_hi, uint8_t global_channel, uint8_t logical_pos)
fsw::elodin::ElodinClient * elodin_
bool sendBatch(const std::map< std::string, std::vector< std::pair< uint8_t, uint8_t > > > &by_board)
Send to every board with the retransmits interleaved, so boards stay in step.
void setDefaultBindAddress(const std::string &address)
Pin outgoing actuator commands to a NIC, unless [actuator_service].bind_address already named one exp...
bool sendUDP(const std::string &board_ip, const std::vector< std::pair< uint8_t, uint8_t > > &id_state_pairs)
std::map< std::string, int > positionsForState(const std::string &state_name) const
The logical positions the CSV declares for state_name (role -> 0 CLOSED / 1 OPEN).
std::set< std::string > pending_roles_
Roles whose delayed stage has not fired yet.
void startContinuousLoop(State state, bool allow_delays=true, bool defer_first_pass=false)
Start the 1 Hz continuous re-send loop for the given state.
double delayForRole(const std::string &state_name, const std::string &role) const
The staged delay, in seconds, that role waits before moving on entry to state_name.
bool load(const std::string &config_content, const std::string &csv_path, const std::string &delay_csv_path="")
Load actuator roles from config content and state→actuator map from CSV.
std::atomic< bool > loop_running_
std::map< std::string, int > script_positions_
Valves a running script has taken over, role -> logical position.
std::mutex overrides_mutex_
void setElodinClient(fsw::elodin::ElodinClient *client)
std::map< std::string, std::map< std::string, int > > state_actuators_
void setManualOverride(const std::string &name, int pos)
Debug: hold this logical position for the role until cleared or state transition.
void setScriptPosition(const std::string &name, int pos)
A running script's position for one valve — the script layering on top of its state's CSV column.
std::atomic< uint64_t > schedule_gen_
bool sendSingleActuator(const std::string &name, int pos)
Send one UDP packet for a single role (debug manual command).
std::map< std::string, ActuatorRole > roles_
std::mutex pending_roles_mutex_
void clearScriptPositions()
Drop every script position.
void publishInitialState()
Publish initial de-energized state for all actuators to Elodin DB [0x32].
std::map< std::string, std::map< std::string, double > > state_actuator_delays_
state -> actuator -> delay in seconds, from state_machine_actuator_delays.csv.
static ActuatorControllerState state
typename Container::const_iterator const_iterator
State
System state IDs — must match the TypeScript SystemState enum in web-gui/shared/types....
Config entry for one named actuator role loaded from config.toml [actuator_roles].