|
STAR
Cal STAR — firmware, DAQ server, and engine design
|
Board Discovery and Configuration Manager. More...
#include <BoardDiscovery.hpp>
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_ |
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.
|
strong |
| Enumerator | |
|---|---|
| PT_BOARD | |
| TC_BOARD | |
| RTD_BOARD | |
| LC_BOARD | |
| MIXED_BOARD | |
| UNKNOWN | |
Definition at line 94 of file BoardDiscovery.hpp.
|
strong |
| Enumerator | |
|---|---|
| PASSIVE | |
| ACTIVE | |
| HYBRID | |
Definition at line 104 of file BoardDiscovery.hpp.
| 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_.
|
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().
| std::optional< std::string > fsw::config::BoardDiscovery::assign_ip | ( | const BoardSignature & | signature | ) |
Assign IP address to board based on signature.
| signature | Board signature |
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_.
|
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().
|
private |
Definition at line 236 of file BoardDiscovery.cpp.
|
private |
Definition at line 212 of file BoardDiscovery.cpp.
References chunks, info, and daq::parse_sensor_data_packet().
|
private |
Definition at line 371 of file BoardDiscovery.cpp.
References board().
Referenced by generate_config().
| std::map< std::string, std::map< std::string, std::string > > fsw::config::BoardDiscovery::generate_config | ( | ) |
Generate configuration from discovered boards.
Definition at line 350 of file BoardDiscovery.cpp.
References board(), boards_mutex_, discovered_boards_, generate_board_config(), generate_sensor_config(), and lock.
|
private |
Definition at line 386 of file BoardDiscovery.cpp.
References channels.
Referenced by generate_config().
| std::optional< DiscoveredBoard > fsw::config::BoardDiscovery::get_board | ( | const BoardSignature & | signature | ) |
Get board by signature.
| 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().
| 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().
|
inline |
Definition at line 207 of file BoardDiscovery.hpp.
References stats_.
| 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.
| network_interface | Network interface to use (e.g., "eth0", "wlan0") |
| base_ip | Base IP address for assignment (e.g., "192.168.1.0") |
| ip_range_start | Starting IP in range (e.g., 100) |
| ip_range_end | Ending 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().
|
private |
Definition at line 305 of file BoardDiscovery.cpp.
References ip_to_signature_.
Referenced by assign_ip(), and process_board_announcement().
|
private |
Definition at line 437 of file BoardDiscovery.cpp.
Referenced by start_discovery().
| void fsw::config::BoardDiscovery::process_board_announcement | ( | const uint8_t * | data, |
| size_t | size, | ||
| const std::string & | source_ip ) |
Process incoming board announcement packet.
| data | Packet data |
| size | Packet size |
| source_ip | Source IP address |
Definition at line 78 of file BoardDiscovery.cpp.
References add_or_update_board(), base_ip_, board(), fsw::config::BoardSignature::board_id, fsw::config::BoardSignature::board_type, fsw::util::calculate_ip_from_mac(), discovery_callbacks_, fsw::config::BoardSignature::firmware_version, fsw::config::BoardSignature::hardware_version, ip_range_end_, ip_range_start_, ip_to_signature_, is_ip_available(), fsw::daq_wire::kUnknown, mac, daq::parse_board_heartbeat_packet(), fsw::config::BoardSignature::serial_number, signature_to_ip_, static_ip_overrides_, stats_, and fsw::config::BoardSignature::to_string().
Referenced by main().
| void fsw::config::BoardDiscovery::process_sensor_data | ( | const uint8_t * | data, |
| size_t | size, | ||
| const std::string & | source_ip ) |
Process sensor data packet to detect sensors.
| data | Packet data |
| size | Packet size |
| source_ip | Source IP address |
Definition at line 145 of file BoardDiscovery.cpp.
References add_or_update_board(), board(), fsw::config::BoardSignature::board_id, fsw::config::BoardSignature::board_type, chunks, discovered_boards_, fsw::config::BoardSignature::firmware_version, fsw::config::BoardSignature::hardware_version, info, ip_to_signature_, fsw::daq_wire::kPressureTransducer, fsw::daq_wire::kUnknown, daq::parse_sensor_data_packet(), fsw::config::BoardSignature::serial_number, and stats_.
| 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_.
|
private |
References board().
|
private |
Definition at line 432 of file BoardDiscovery.cpp.
Referenced by start_discovery().
| 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().
| void fsw::config::BoardDiscovery::start_discovery | ( | DiscoveryMode | mode = DiscoveryMode::HYBRID | ) |
Start discovery process.
| mode | Discovery 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().
| void fsw::config::BoardDiscovery::stop_discovery | ( | ) |
Stop discovery process.
Definition at line 73 of file BoardDiscovery.cpp.
References discovery_active_.
| bool fsw::config::BoardDiscovery::update_config_file | ( | const std::string & | config_path | ) | const |
Update configuration file with discovered boards.
| config_path | Path to config file |
|
private |
Definition at line 239 of file BoardDiscovery.hpp.
Referenced by calculate_ip_from_signature(), initialize(), and process_board_announcement().
|
private |
Definition at line 250 of file BoardDiscovery.hpp.
Referenced by add_or_update_board(), generate_config(), get_board_by_ip(), and get_discovered_boards().
|
private |
Definition at line 245 of file BoardDiscovery.hpp.
Referenced by BoardDiscovery(), and start_discovery().
|
private |
Definition at line 234 of file BoardDiscovery.hpp.
Referenced by add_or_update_board(), assign_ip(), generate_config(), get_board_by_ip(), get_discovered_boards(), and process_sensor_data().
|
private |
Definition at line 244 of file BoardDiscovery.hpp.
Referenced by BoardDiscovery(), start_discovery(), and stop_discovery().
|
private |
Definition at line 247 of file BoardDiscovery.hpp.
Referenced by process_board_announcement(), and register_discovery_callback().
|
private |
Definition at line 241 of file BoardDiscovery.hpp.
Referenced by BoardDiscovery(), calculate_ip_from_signature(), initialize(), and process_board_announcement().
|
private |
Definition at line 240 of file BoardDiscovery.hpp.
Referenced by BoardDiscovery(), calculate_ip_from_signature(), initialize(), and process_board_announcement().
|
private |
Definition at line 235 of file BoardDiscovery.hpp.
Referenced by assign_ip(), get_board_by_ip(), is_ip_available(), process_board_announcement(), and process_sensor_data().
|
private |
Definition at line 238 of file BoardDiscovery.hpp.
Referenced by initialize().
|
private |
Definition at line 236 of file BoardDiscovery.hpp.
Referenced by assign_ip(), and process_board_announcement().
|
private |
Definition at line 242 of file BoardDiscovery.hpp.
Referenced by process_board_announcement(), and set_static_ip_for_board().
|
private |
Definition at line 249 of file BoardDiscovery.hpp.
Referenced by assign_ip(), BoardDiscovery(), get_stats(), process_board_announcement(), and process_sensor_data().