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

Board Discovery and Configuration Manager. More...

#include <BoardDiscovery.hpp>

Collaboration diagram for fsw::config::BoardDiscovery:
[legend]

Classes

struct  DiscoveryStats
 Get statistics. More...

Public Types

enum class  BoardType : uint8_t {
  PT_BOARD = 0x01 , TC_BOARD = 0x02 , RTD_BOARD = 0x03 , LC_BOARD = 0x04 ,
  MIXED_BOARD = 0x05 , UNKNOWN = 0xFF
}
enum class  DiscoveryMode { PASSIVE , ACTIVE , HYBRID }

Public Member Functions

 BoardDiscovery ()
 ~BoardDiscovery ()=default
bool initialize (const std::string &network_interface, const std::string &base_ip, uint8_t ip_range_start=100, uint8_t ip_range_end=200)
 Initialize discovery system.
void set_static_ip_for_board (uint8_t board_id, const std::string &ip)
 Set static IP for board_id (from config).
void start_discovery (DiscoveryMode mode=DiscoveryMode::HYBRID)
 Start discovery process.
void stop_discovery ()
 Stop discovery process.
void process_board_announcement (const uint8_t *data, size_t size, const std::string &source_ip)
 Process incoming board announcement packet.
void process_sensor_data (const uint8_t *data, size_t size, const std::string &source_ip)
 Process sensor data packet to detect sensors.
std::vector< DiscoveredBoard > get_discovered_boards ()
 Get all discovered boards.
std::optional< DiscoveredBoard > get_board (const BoardSignature &signature)
 Get board by signature.
std::optional< DiscoveredBoard > get_board_by_ip (const std::string &ip)
 Get board by IP address.
std::optional< std::string > assign_ip (const BoardSignature &signature)
 Assign IP address to board based on signature.
std::map< std::string, std::map< std::string, std::string > > generate_config ()
 Generate configuration from discovered boards.
bool update_config_file (const std::string &config_path) const
 Update configuration file with discovered boards.
void register_discovery_callback (std::function< void(const DiscoveredBoard &)> callback)
 Register callback for board discovery events.
DiscoveryStats get_stats () const

Private Member Functions

std::string calculate_ip_from_signature (const BoardSignature &signature) const
bool is_ip_available (const std::string &ip) const
std::vector< SensorInfo > detect_sensors_from_packet (const uint8_t *data, size_t size) const
BoardType detect_board_type (const std::vector< SensorInfo > &sensors) const
void add_or_update_board (const DiscoveredBoard &board)
void remove_stale_boards (std::chrono::seconds timeout=std::chrono::seconds(30))
std::map< std::string, std::string > generate_board_config (const DiscoveredBoard &board) const
std::map< std::string, std::string > generate_sensor_config (const std::vector< SensorInfo > &sensors) const
void scan_network ()
void listen_for_announcements ()

Private Attributes

std::map< BoardSignature, DiscoveredBoard > discovered_boards_
std::map< std::string, BoardSignature > ip_to_signature_
std::map< BoardSignature, std::string > signature_to_ip_
std::string network_interface_
std::string base_ip_
uint8_t ip_range_start_
uint8_t ip_range_end_
std::map< uint8_t, std::string > static_ip_overrides_
std::atomic< bool > discovery_active_
DiscoveryMode current_mode_
std::vector< std::function< void(const DiscoveredBoard &)> > discovery_callbacks_
DiscoveryStats stats_
std::mutex boards_mutex_

Detailed Description

Board Discovery and Configuration Manager.

Discovers boards on the network, detects sensors, and assigns IP addresses based on board signatures. Automatically updates configuration based on discovered hardware.

Definition at line 91 of file BoardDiscovery.hpp.

Member Enumeration Documentation

◆ BoardType

enum class fsw::config::BoardDiscovery::BoardType : uint8_t
strong
Enumerator
PT_BOARD 
TC_BOARD 
RTD_BOARD 
LC_BOARD 
MIXED_BOARD 
UNKNOWN 

Definition at line 94 of file BoardDiscovery.hpp.

◆ DiscoveryMode

Enumerator
PASSIVE 
ACTIVE 
HYBRID 

Definition at line 104 of file BoardDiscovery.hpp.

Constructor & Destructor Documentation

◆ BoardDiscovery()

fsw::config::BoardDiscovery::BoardDiscovery ( )

Definition at line 28 of file BoardDiscovery.cpp.

References current_mode_, discovery_active_, ip_range_end_, ip_range_start_, and stats_.

◆ ~BoardDiscovery()

fsw::config::BoardDiscovery::~BoardDiscovery ( )
default

References board_id, and HYBRID.

Member Function Documentation

◆ add_or_update_board()

void fsw::config::BoardDiscovery::add_or_update_board ( const DiscoveredBoard & board)
private

Definition at line 310 of file BoardDiscovery.cpp.

References board(), boards_mutex_, discovered_boards_, and lock.

Referenced by process_board_announcement(), and process_sensor_data().

◆ assign_ip()

std::optional< std::string > fsw::config::BoardDiscovery::assign_ip ( const BoardSignature & signature)

Assign IP address to board based on signature.

Parameters
signatureBoard signature
Returns
Assigned IP address, or empty if assignment failed

Definition at line 270 of file BoardDiscovery.cpp.

References calculate_ip_from_signature(), discovered_boards_, ip_to_signature_, is_ip_available(), signature_to_ip_, and stats_.

◆ calculate_ip_from_signature()

std::string fsw::config::BoardDiscovery::calculate_ip_from_signature ( const BoardSignature & signature) const
private

Definition at line 291 of file BoardDiscovery.cpp.

References base_ip_, fsw::config::BoardSignature::board_id, ip_range_end_, and ip_range_start_.

Referenced by assign_ip().

◆ detect_board_type()

BoardDiscovery::BoardType fsw::config::BoardDiscovery::detect_board_type ( const std::vector< SensorInfo > & sensors) const
private

Definition at line 236 of file BoardDiscovery.cpp.

◆ detect_sensors_from_packet()

std::vector< SensorInfo > fsw::config::BoardDiscovery::detect_sensors_from_packet ( const uint8_t * data,
size_t size ) const
private

Definition at line 212 of file BoardDiscovery.cpp.

References chunks, info, and daq::parse_sensor_data_packet().

◆ generate_board_config()

std::map< std::string, std::string > fsw::config::BoardDiscovery::generate_board_config ( const DiscoveredBoard & board) const
private

Definition at line 371 of file BoardDiscovery.cpp.

References board().

Referenced by generate_config().

◆ generate_config()

std::map< std::string, std::map< std::string, std::string > > fsw::config::BoardDiscovery::generate_config ( )

Generate configuration from discovered boards.

Returns
Configuration map ready to be written to TOML

Definition at line 350 of file BoardDiscovery.cpp.

References board(), boards_mutex_, discovered_boards_, generate_board_config(), generate_sensor_config(), and lock.

◆ generate_sensor_config()

std::map< std::string, std::string > fsw::config::BoardDiscovery::generate_sensor_config ( const std::vector< SensorInfo > & sensors) const
private

Definition at line 386 of file BoardDiscovery.cpp.

References channels.

Referenced by generate_config().

◆ get_board()

std::optional< DiscoveredBoard > fsw::config::BoardDiscovery::get_board ( const BoardSignature & signature)

Get board by signature.

◆ get_board_by_ip()

std::optional< DiscoveredBoard > fsw::config::BoardDiscovery::get_board_by_ip ( const std::string & ip)

Get board by IP address.

Definition at line 339 of file BoardDiscovery.cpp.

References boards_mutex_, discovered_boards_, ip_to_signature_, and lock.

Referenced by main().

◆ get_discovered_boards()

std::vector< DiscoveredBoard > fsw::config::BoardDiscovery::get_discovered_boards ( )

Get all discovered boards.

Definition at line 329 of file BoardDiscovery.cpp.

References board(), boards_mutex_, discovered_boards_, and lock.

Referenced by main().

◆ get_stats()

DiscoveryStats fsw::config::BoardDiscovery::get_stats ( ) const
inline

Definition at line 207 of file BoardDiscovery.hpp.

References stats_.

◆ initialize()

bool fsw::config::BoardDiscovery::initialize ( const std::string & network_interface,
const std::string & base_ip,
uint8_t ip_range_start = 100,
uint8_t ip_range_end = 200 )

Initialize discovery system.

Parameters
network_interfaceNetwork interface to use (e.g., "eth0", "wlan0")
base_ipBase IP address for assignment (e.g., "192.168.1.0")
ip_range_startStarting IP in range (e.g., 100)
ip_range_endEnding IP in range (e.g., 200)

Definition at line 36 of file BoardDiscovery.cpp.

References base_ip_, ip_range_end_, ip_range_start_, and network_interface_.

Referenced by main().

◆ is_ip_available()

bool fsw::config::BoardDiscovery::is_ip_available ( const std::string & ip) const
private

Definition at line 305 of file BoardDiscovery.cpp.

References ip_to_signature_.

Referenced by assign_ip(), and process_board_announcement().

◆ listen_for_announcements()

void fsw::config::BoardDiscovery::listen_for_announcements ( )
private

Definition at line 437 of file BoardDiscovery.cpp.

Referenced by start_discovery().

◆ process_board_announcement()

◆ process_sensor_data()

void fsw::config::BoardDiscovery::process_sensor_data ( const uint8_t * data,
size_t size,
const std::string & source_ip )

◆ register_discovery_callback()

void fsw::config::BoardDiscovery::register_discovery_callback ( std::function< void(const DiscoveredBoard &)> callback)

Register callback for board discovery events.

Definition at line 442 of file BoardDiscovery.cpp.

References discovery_callbacks_.

◆ remove_stale_boards()

void fsw::config::BoardDiscovery::remove_stale_boards ( std::chrono::seconds timeout = std::chrono::seconds(30))
private

References board().

◆ scan_network()

void fsw::config::BoardDiscovery::scan_network ( )
private

Definition at line 432 of file BoardDiscovery.cpp.

Referenced by start_discovery().

◆ set_static_ip_for_board()

void fsw::config::BoardDiscovery::set_static_ip_for_board ( uint8_t board_id,
const std::string & ip )

Set static IP for board_id (from config).

Overrides hash-based assignment. E.g. set_static_ip_for_board(21, "192.168.2.21") so pt_board uses canonical IP.

Definition at line 50 of file BoardDiscovery.cpp.

References board_id, and static_ip_overrides_.

Referenced by main().

◆ start_discovery()

void fsw::config::BoardDiscovery::start_discovery ( DiscoveryMode mode = DiscoveryMode::HYBRID)

Start discovery process.

Parameters
modeDiscovery mode to use

Definition at line 54 of file BoardDiscovery.cpp.

References ACTIVE, current_mode_, discovery_active_, HYBRID, listen_for_announcements(), PASSIVE, and scan_network().

Referenced by main().

◆ stop_discovery()

void fsw::config::BoardDiscovery::stop_discovery ( )

Stop discovery process.

Definition at line 73 of file BoardDiscovery.cpp.

References discovery_active_.

◆ update_config_file()

bool fsw::config::BoardDiscovery::update_config_file ( const std::string & config_path) const

Update configuration file with discovered boards.

Parameters
config_pathPath to config file
Returns
true if update successful

Member Data Documentation

◆ base_ip_

std::string fsw::config::BoardDiscovery::base_ip_
private

◆ boards_mutex_

std::mutex fsw::config::BoardDiscovery::boards_mutex_
private

◆ current_mode_

DiscoveryMode fsw::config::BoardDiscovery::current_mode_
private

Definition at line 245 of file BoardDiscovery.hpp.

Referenced by BoardDiscovery(), and start_discovery().

◆ discovered_boards_

std::map<BoardSignature, DiscoveredBoard> fsw::config::BoardDiscovery::discovered_boards_
private

◆ discovery_active_

std::atomic<bool> fsw::config::BoardDiscovery::discovery_active_
private

Definition at line 244 of file BoardDiscovery.hpp.

Referenced by BoardDiscovery(), start_discovery(), and stop_discovery().

◆ discovery_callbacks_

std::vector<std::function<void(const DiscoveredBoard&)> > fsw::config::BoardDiscovery::discovery_callbacks_
private

Definition at line 247 of file BoardDiscovery.hpp.

Referenced by process_board_announcement(), and register_discovery_callback().

◆ ip_range_end_

uint8_t fsw::config::BoardDiscovery::ip_range_end_
private

◆ ip_range_start_

uint8_t fsw::config::BoardDiscovery::ip_range_start_
private

◆ ip_to_signature_

std::map<std::string, BoardSignature> fsw::config::BoardDiscovery::ip_to_signature_
private

◆ network_interface_

std::string fsw::config::BoardDiscovery::network_interface_
private

Definition at line 238 of file BoardDiscovery.hpp.

Referenced by initialize().

◆ signature_to_ip_

std::map<BoardSignature, std::string> fsw::config::BoardDiscovery::signature_to_ip_
private

Definition at line 236 of file BoardDiscovery.hpp.

Referenced by assign_ip(), and process_board_announcement().

◆ static_ip_overrides_

std::map<uint8_t, std::string> fsw::config::BoardDiscovery::static_ip_overrides_
private

Definition at line 242 of file BoardDiscovery.hpp.

Referenced by process_board_announcement(), and set_static_ip_for_board().

◆ stats_

DiscoveryStats fsw::config::BoardDiscovery::stats_
private

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