1#ifndef DAQ_BOARD_DISCOVERY_HPP
2#define DAQ_BOARD_DISCOVERY_HPP
47 return "Board{id=0x" + std::to_string(
board_id) +
", type=" + std::to_string(
board_type) +
120 bool initialize(
const std::string& network_interface,
const std::string& base_ip,
121 uint8_t ip_range_start = 100, uint8_t ip_range_end = 200);
182 std::map<std::string, std::map<std::string, std::string>>
generate_config();
227 const std::vector<SensorInfo>& sensors)
const;
276 std::map<std::string, std::map<std::string, std::string>>
get_config()
const {
281 std::map<std::string, std::map<std::string, std::string>>
config_;
void start_discovery(DiscoveryMode mode=DiscoveryMode::HYBRID)
Start discovery process.
std::atomic< bool > discovery_active_
std::vector< SensorInfo > detect_sensors_from_packet(const uint8_t *data, size_t size) const
std::string network_interface_
void remove_stale_boards(std::chrono::seconds timeout=std::chrono::seconds(30))
std::map< std::string, BoardSignature > ip_to_signature_
std::map< BoardSignature, std::string > signature_to_ip_
BoardType detect_board_type(const std::vector< SensorInfo > &sensors) const
void add_or_update_board(const DiscoveredBoard &board)
void set_static_ip_for_board(uint8_t board_id, const std::string &ip)
Set static IP for board_id (from config).
std::optional< std::string > assign_ip(const BoardSignature &signature)
Assign IP address to board based on signature.
std::map< BoardSignature, DiscoveredBoard > discovered_boards_
DiscoveryStats get_stats() const
void process_board_announcement(const uint8_t *data, size_t size, const std::string &source_ip)
Process incoming board announcement packet.
std::map< std::string, std::map< std::string, std::string > > generate_config()
Generate configuration from discovered boards.
void register_discovery_callback(std::function< void(const DiscoveredBoard &)> callback)
Register callback for board discovery events.
std::string calculate_ip_from_signature(const BoardSignature &signature) const
void stop_discovery()
Stop discovery process.
std::map< std::string, std::string > generate_board_config(const DiscoveredBoard &board) const
void process_sensor_data(const uint8_t *data, size_t size, const std::string &source_ip)
Process sensor data packet to detect sensors.
bool update_config_file(const std::string &config_path) const
Update configuration file with discovered boards.
std::optional< DiscoveredBoard > get_board_by_ip(const std::string &ip)
Get board by IP address.
~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 listen_for_announcements()
std::map< uint8_t, std::string > static_ip_overrides_
std::map< std::string, std::string > generate_sensor_config(const std::vector< SensorInfo > &sensors) const
std::vector< std::function< void(const DiscoveredBoard &)> > discovery_callbacks_
std::optional< DiscoveredBoard > get_board(const BoardSignature &signature)
Get board by signature.
DiscoveryMode current_mode_
bool is_ip_available(const std::string &ip) const
std::vector< DiscoveredBoard > get_discovered_boards()
Get all discovered boards.
std::string base_config_path_
std::map< std::string, std::map< std::string, std::string > > config_
bool load_base_config(const std::string &config_path)
Load base configuration.
std::map< std::string, std::map< std::string, std::string > > get_config() const
Get current configuration.
bool update_with_boards(const std::vector< DiscoveredBoard > &boards)
Update configuration with discovered boards.
~DynamicConfigManager()=default
fsw::config::ActiveBoardKind BoardType
Motorized ball valve position: raw ADC counts -> % open.
std::chrono::steady_clock::time_point last_discovery
Board signature/identifier structure.
std::string to_string() const
bool operator<(const BoardSignature &other) const
bool operator==(const BoardSignature &other) const
Discovered board information.
std::chrono::steady_clock::time_point last_seen
bool supports_dynamic_config
std::vector< SensorInfo > sensors
Detected sensor information from board.
std::string board(const std::string &name, const std::string &id, bool enabled=true)