|
STAR
Cal STAR — firmware, DAQ server, and engine design
|
#include <arpa/inet.h>#include <netinet/in.h>#include <signal.h>#include <sys/socket.h>#include <unistd.h>#include <algorithm>#include <array>#include <atomic>#include <chrono>#include <cstring>#include <fstream>#include <functional>#include <iomanip>#include <iostream>#include <map>#include <set>#include <sstream>#include <string>#include <thread>#include <vector>#include "comms/messages/board/BoardHeartbeatMessage.hpp"#include "comms/messages/sensor/CalibratedSensorMessages.hpp"#include "comms/messages/sensor/EnvironmentalMessage.hpp"#include "comms/messages/sensor/SensorMessages.hpp"#include "daq-protocol.h"#include "fsw/BoardTypeWire.hpp"#include "calibration/PTCalibration.hpp"#include "calibration/SensorCalibration.hpp"#include "config/BoardDiscovery.hpp"#include "config/Config.hpp"#include "config/LoadActiveBoards.hpp"#include "elodin/DatabaseConfig.hpp"#include "elodin/ElodinClient.hpp"#include "fsw/FSWConfigManager.hpp"#include "net/DaqInterface.hpp"#include "routing/HeartbeatRouter.hpp"#include "routing/SensorRouter.hpp"#include "streams/SensorFramePipeline.hpp"#include "time/BoardClockSync.hpp"Go to the source code of this file.
Classes | |
| class | anonymous_namespace{daq_bridge_main.cpp}::BackendLogForwarder |
| struct | BoardConfig |
| struct | ServerHeartbeatConfig |
Namespaces | |
| namespace | anonymous_namespace{daq_bridge_main.cpp} |
Typedefs | |
| using | BoardType = fsw::config::ActiveBoardKind |
| using | BoardByOctet = std::map<int, BoardConfig> |
Functions | |
| std::vector< uint8_t > | anonymous_namespace{daq_bridge_main.cpp}::build_server_heartbeat_packet () |
| std::atomic< bool > | running (true) |
| void | signal_handler (int) |
| static int | ipv4_host_octet (const std::string &ip) |
| Last octet of a dotted IPv4 string (e.g. | |
| static void | load_board_map_from_config (const std::string &config_path, std::map< std::string, BoardConfig > &board_map, BoardByOctet *out_board_by_octet, std::string &db_host, uint16_t &db_port, uint16_t *out_sensor_port=nullptr, std::string *out_bind_ip=nullptr, ServerHeartbeatConfig *out_hb=nullptr, fsw::time::TimeSyncConfig *out_ts=nullptr, uint16_t *out_log_port=nullptr) |
| static BoardType | discovery_board_type_to_enum (uint8_t t) |
| static uint8_t | config_board_type_to_wire_u8 (BoardType t) |
| static const BoardConfig * | resolve_board_config_by_source_ip (const std::string &source_ip, const std::map< std::string, BoardConfig > &board_map, const BoardByOctet &board_by_octet) |
| Resolve a packet's source IP to its config board. | |
| int | main (int argc, char *argv[]) |
Variables | |
| constexpr uint8_t | anonymous_namespace{daq_bridge_main.cpp}::SERVER_HEARTBEAT_PACKET_TYPE = 2 |
| using BoardByOctet = std::map<int, BoardConfig> |
Definition at line 137 of file daq_bridge_main.cpp.
Definition at line 114 of file daq_bridge_main.cpp.
|
static |
Definition at line 259 of file daq_bridge_main.cpp.
References fsw::daq_wire::kActuator, fsw::daq_wire::kBallValve, fsw::daq_wire::kEnvironmental, fsw::daq_wire::kLoadCell, fsw::daq_wire::kPressureTransducer, fsw::daq_wire::kRtd, fsw::daq_wire::kThermocouple, and fsw::daq_wire::kUnknown.
Referenced by main().
|
static |
Definition at line 236 of file daq_bridge_main.cpp.
References fsw::daq_wire::kActuator, fsw::daq_wire::kBallValve, fsw::daq_wire::kEnvironmental, fsw::daq_wire::kLoadCell, fsw::daq_wire::kPressureTransducer, fsw::daq_wire::kRtd, and fsw::daq_wire::kThermocouple.
Referenced by main().
|
static |
Last octet of a dotted IPv4 string (e.g.
"192.168.2.51" -> 51), or -1 if not parseable.
Definition at line 140 of file daq_bridge_main.cpp.
References tail.
Referenced by load_board_map_from_config(), and resolve_board_config_by_source_ip().
|
static |
Definition at line 153 of file daq_bridge_main.cpp.
References b, fsw::config::LogsConfig::backend_udp_port, fsw::config::NetworkConfig::bind_ip, fsw::config::Config::boards, fsw::config::ServerHeartbeatConfig::broadcast_ip, fsw::config::ServerHeartbeatConfig::broadcast_port, fsw::config::Config::database, fsw::config::DatabaseConfig::host, fsw::config::ServerHeartbeatConfig::interval_ms, ipv4_host_octet(), fsw::config::load(), fsw::config::Config::logs, fsw::config::Config::network, fsw::config::DatabaseConfig::port, fsw::config::ServerHeartbeatConfig::send_from_daq_bridge, fsw::config::NetworkConfig::sensor_port, fsw::config::Config::server_heartbeat, and fsw::config::Config::time_sync.
Referenced by main().
| int main | ( | int | argc, |
| char * | argv[] ) |
Definition at line 307 of file daq_bridge_main.cpp.
References anonymous_namespace{daq_bridge_main.cpp}::BackendLogForwarder::BackendLogForwarder(), fsw::elodin::ElodinClient::begin_batch(), board(), daq::BOARD_HEARTBEAT, board_id, BoardConfig::board_id, fsw::time::TimeSyncConfig::BoardClock, fsw::time::BoardClockSync::boards(), ServerHeartbeatConfig::broadcast_ip, ServerHeartbeatConfig::broadcast_port, anonymous_namespace{daq_bridge_main.cpp}::build_server_heartbeat_packet(), config_board_type_to_wire_u8(), fsw::elodin::ElodinClient::connect(), count(), DIABLO_COMMS_VERSION, discovery_board_type_to_enum(), elapsed(), fsw::config::FLIGHT, fsw::elodin::ElodinClient::flush_batch(), fsw::config::BoardDiscovery::get_board_by_ip(), fsw::calibration::PTCalibrationManager::get_calibrated_count(), fsw::config::BoardDiscovery::get_discovered_boards(), fsw::streams::SensorFramePipeline::get_last_environmental(), fsw::streams::SensorFramePipeline::get_last_heartbeat(), fsw::streams::SensorFramePipeline::get_last_log(), fsw::config::GSE, fsw::config::BoardDiscovery::HYBRID, fsw::config::BoardDiscovery::initialize(), ServerHeartbeatConfig::interval_ms, fsw::elodin::ElodinClient::is_connected(), fsw::streams::SensorFramePipeline::is_ready(), fsw::daq_wire::kUnknown, fsw::streams::SensorFramePipeline::last_error(), fsw::streams::SensorFramePipeline::last_source_ip(), fsw::config::load(), fsw::config::load_active_boards(), fsw::config::DynamicConfigManager::load_base_config(), load_board_map_from_config(), fsw::calibration::PTCalibrationManager::load_calibration(), fsw::calibration::SensorCalibrationManager::load_calibration(), fsw::time::TimeSyncConfig::log_interval_s, mac, fsw::time::TimeSyncConfig::mode, daq::parse_board_heartbeat_packet(), daq::parse_log_packet(), fsw::streams::SensorFramePipeline::poll(), fsw::config::BoardDiscovery::process_board_announcement(), fsw::routing::HeartbeatRouter::process_heartbeat(), fsw::elodin::ElodinClient::publish(), fsw::elodin::ElodinClient::read_data(), fsw::elodin::ElodinClient::reconnect(), fsw::elodin::DatabaseConfig::register_ball_valve_tables(), fsw::elodin::DatabaseConfig::register_calibrated_tables(), fsw::elodin::DatabaseConfig::register_environmental_tables(), fsw::elodin::DatabaseConfig::register_heartbeat_tables(), fsw::elodin::DatabaseConfig::register_self_test_tables(), fsw::elodin::DatabaseConfig::register_tables(), res, resolve_board_config_by_source_ip(), fsw::net::resolveDaqBindAddress(), running, daq::SAFE, ServerHeartbeatConfig::send_from_daq_bridge, fsw::streams::SensorFramePipeline::send_to(), fsw::streams::SensorFramePipeline::set_broadcast(), fsw::config::BoardDiscovery::set_static_ip_for_board(), comms::CommsMessage< Fields >::setField(), daq::SETUP, signal_handler(), fsw::time::BoardClockSync::stamp_packet(), fsw::config::BoardDiscovery::start_discovery(), fsw::time::BoardClockSync::stats(), BoardConfig::type, and fsw::time::TimeSyncConfig::window_seconds.
|
static |
Resolve a packet's source IP to its config board.
Real deployments send from the config IP, so the direct board_map lookup hits. The integration test can't bind the 192.168.2.* config IPs, so the simulator binds each board to 127.0.0.<host-octet> (the last octet of its config IP); those packets resolve by that octet via board_by_octet. This is identity-based — unlike the old index-based scheme it does NOT depend on the bridge and the sim iterating [boards] in the same order, which they don't (toml++ sorts alphabetically; the Python sim uses file order).
Definition at line 290 of file daq_bridge_main.cpp.
References ipv4_host_octet().
Referenced by main().
| std::atomic< bool > running | ( | true | ) |
| void signal_handler | ( | int | ) |