STAR
Cal STAR — firmware, DAQ server, and engine design
Loading...
Searching...
No Matches
fsw::routing::HeartbeatRouter Class Reference

Routes incoming BOARD_HEARTBEAT packets to Elodin DB. More...

#include <HeartbeatRouter.hpp>

Collaboration diagram for fsw::routing::HeartbeatRouter:
[legend]

Classes

struct  PerBoardState

Public Types

enum class  BoardEvent { NONE , RECONNECTED , SETUP_REENTRY }

Public Member Functions

 HeartbeatRouter (elodin::ElodinClient &elodin_client)
 ~HeartbeatRouter ()=default
BoardEvent process_heartbeat (const daq::PacketHeader &header, const daq::BoardHeartbeatPacket &heartbeat, uint8_t board_type_wire, uint64_t receive_ts_ns, int elodin_board_id_if_known=-1)
 Process one BOARD_HEARTBEAT and publish to Elodin.

Private Attributes

elodin::ElodinClient & elodin_client_
std::map< uint8_t, PerBoardState > board_states_

Static Private Attributes

static constexpr auto RECONNECT_THRESHOLD = std::chrono::milliseconds(2500)

Detailed Description

Routes incoming BOARD_HEARTBEAT packets to Elodin DB.

On each heartbeat:

  • Publishes a BoardHeartbeatElodinMessage to packet_id {0x10, board_id}.
  • Tracks per-board last-seen time to detect reconnects and Setup re-entry.
  • Returns a BoardEvent so the caller (daq_bridge_main) can gate SENSOR_CONFIG re-sends.

Definition at line 23 of file HeartbeatRouter.hpp.

Member Enumeration Documentation

◆ BoardEvent

Enumerator
NONE 
RECONNECTED 
SETUP_REENTRY 

Definition at line 25 of file HeartbeatRouter.hpp.

Constructor & Destructor Documentation

◆ HeartbeatRouter()

fsw::routing::HeartbeatRouter::HeartbeatRouter ( elodin::ElodinClient & elodin_client)
explicit

Definition at line 11 of file HeartbeatRouter.cpp.

References elodin_client_.

◆ ~HeartbeatRouter()

fsw::routing::HeartbeatRouter::~HeartbeatRouter ( )
default

Member Function Documentation

◆ process_heartbeat()

HeartbeatRouter::BoardEvent fsw::routing::HeartbeatRouter::process_heartbeat ( const daq::PacketHeader & header,
const daq::BoardHeartbeatPacket & heartbeat,
uint8_t board_type_wire,
uint64_t receive_ts_ns,
int elodin_board_id_if_known = -1 )

Process one BOARD_HEARTBEAT and publish to Elodin.

Parameters
headerParsed packet header (for timestamp).
heartbeatParsed heartbeat body (DAQv2: firmware hash + id + states; no board_type on wire).
board_type_wireLegacy wire enum byte for Elodin (from config when known, else 0).
receive_ts_nsMonotonic receive timestamp (nanoseconds).
elodin_board_id_if_knownWhen >= 0 and <= 255, use this for Elodin packet_id {0x10, id} and for reconnect state keys — must match config.toml board_id so the thin backend boardsStatus and GUI stay aligned. Firmware often uses a slot index (1–8) while config uses composite IDs (e.g. 21 = PT board 1). Sensor streams still work via slot-based [0x20,…] IDs, so a wire/config mismatch only breaks board status / heartbeats UI unless overridden.

Definition at line 15 of file HeartbeatRouter.cpp.

References board_states_, elodin_client_, NONE, RECONNECT_THRESHOLD, RECONNECTED, comms::CommsMessage< Fields >::setField(), daq::SETUP, SETUP_REENTRY, and state.

Referenced by main().

Member Data Documentation

◆ board_states_

std::map<uint8_t, PerBoardState> fsw::routing::HeartbeatRouter::board_states_
private

Definition at line 62 of file HeartbeatRouter.hpp.

Referenced by process_heartbeat().

◆ elodin_client_

elodin::ElodinClient& fsw::routing::HeartbeatRouter::elodin_client_
private

Definition at line 61 of file HeartbeatRouter.hpp.

Referenced by HeartbeatRouter(), and process_heartbeat().

◆ RECONNECT_THRESHOLD

auto fsw::routing::HeartbeatRouter::RECONNECT_THRESHOLD = std::chrono::milliseconds(2500)
staticconstexprprivate

Definition at line 64 of file HeartbeatRouter.hpp.

Referenced by process_heartbeat().


The documentation for this class was generated from the following files: