STAR
Cal STAR — firmware, DAQ server, and engine design
Loading...
Searching...
No Matches
main.cpp File Reference
#include <Arduino.h>
#include <Ethernet.h>
#include <EthernetUdp.h>
#include <SPI.h>
#include <SPIFFS.h>
#include <daq-protocol.h>
#include <esp_mac.h>
#include <cstring>
#include <vector>
#include "actuator_board_pins.h"
#include "actuator_config.h"
#include "firmware_hash.h"
Include dependency graph for main.cpp:

Go to the source code of this file.

Enumerations

enum class  ActuatorControllerState {
  WaitingForServer , Active , StandardAbort , NoConnectionAbort ,
  PTAbort , NoPTAbort , AbortFinished , ConnectionLossDetected ,
  StandaloneAbort , WaitingForServer , Active , StandardAbort ,
  NoConnectionAbort , AbortFinished , ConnectionLossDetected , WaitingForServer = 1 ,
  Active = 2 , ConnectionLossDetected = 3 , NoConnectionAbort = 4 , NoConnAbortFollower = 5 ,
  PTAbort = 6 , NoPTAbort = 7 , AbortFinished = 8 , WaitingForServer = 1 ,
  Active = 2 , ConnectionLossDetected = 3 , NoConnectionAbort = 4 , NoConnAbortFollower = 5 ,
  PTAbort = 6 , NoPTAbort = 7 , AbortFinished = 8
}
enum class  LedPhase {
  Idle , On , Off , Idle ,
  On , Off , Idle , On ,
  Off
}
enum class  IncomingPacketKind {
  None , ServerHeartbeat , Config , Abort ,
  AbortDone , ClearAbort , SensorData , None ,
  ServerHeartbeat , Config , Abort , AbortDone ,
  ClearAbort , None , ServerHeartbeat , Config ,
  Abort , AbortDone , ClearAbort , SensorData ,
  NoConnAbort , None , ServerHeartbeat , Config ,
  Abort , AbortDone , ClearAbort , SensorData ,
  NoConnAbort , None , ServerHeartbeat , SensorConfig ,
  ClearAbort , NoConnAbort
}

Functions

static uint8_t getStateNumber (ActuatorControllerState s)
static void updateLedNonBlocking ()
static daq::BoardState getBoardStateForHeartbeat ()
static void sendBoardHeartbeat ()
static bool isIPInPTLocations (uint32_t ip)
static IPAddress uint32ToIPAddress (uint32_t ip)
static bool readPacketHeader (const uint8_t *buffer, size_t buffer_size, daq::PacketHeader &header_out)
static void processActuatorCommands (const std::vector< daq::ActuatorCommand > &commands)
static IncomingPacketKind processIncomingPacket (const uint8_t *buffer, size_t len, IPAddress remoteIP)
static void readCurrentSensePinsAndSend ()
static bool heartbeatTimedOut ()
static void streamSensorDataIfDue ()
static size_t create_no_connection_abort_packet (uint8_t *buffer, size_t buffer_size)
static void sendNoConnectionAbortToAllPTs ()
static void run_WaitingForServer ()
static void run_Active ()
static void run_StandardAbort ()
static void run_NoConnectionAbort ()
static void run_PTAbort ()
static void run_NoPTAbort ()
static void run_AbortFinished ()
static void run_ConnectionLossDetected ()
static void run_StandaloneAbort ()
static void applyPacketTransition (IncomingPacketKind kind)
static void initializeActuators ()
static void initializeCurrentSensePins ()
void setup ()
void loop ()

Variables

static uint8_t board_id = BOARD_ID_DEFAULT
byte mac [6]
IPAddress staticIP (192, 168, 2, BOARD_ID_DEFAULT)
IPAddress gateway (0, 0, 0, 0)
IPAddress subnet (255, 255, 255, 0)
IPAddress dns (192, 168, 2, 1)
IPAddress serverIP (192, 168, 2, 20)
const int udpListenPort = 5005
const int serverPort = 5006
const int ptBoardPort = 5005
EthernetUDP udp
static ActuatorControllerState state
static unsigned long last_server_heartbeat_ms = 0
static unsigned long state_enter_ms = 0
static bool is_abort_controller = false
static std::vector< daq::AbortActuatorLocation > abort_actuator_locations
static std::vector< daq::AbortPTLocation > abort_pt_locations
static bool config_valid = false
static unsigned long last_pt_data_from_config_ms = 0
static bool pt_data_received_during_no_conn_abort_wait = false
static bool no_conn_abort_pt_sent = false
const uint8_t NUM_SENSORS = NUM_ACTUATORS
static unsigned long last_adc_read_ms = 0
static uint8_t actuator_states [NUM_ACTUATORS]
static unsigned long lastHeartbeatMillis = 0
static LedPhase led_phase = LedPhase::Idle
static unsigned long led_cycle_start_ms = 0
static uint8_t led_blink_index = 0
static unsigned long led_phase_start_ms = 0
static ActuatorControllerState last_led_state

Enumeration Type Documentation

◆ ActuatorControllerState

enum class ActuatorControllerState
strong
Enumerator
WaitingForServer 
Active 
StandardAbort 
NoConnectionAbort 
PTAbort 
NoPTAbort 
AbortFinished 
ConnectionLossDetected 
StandaloneAbort 
WaitingForServer 
Active 
StandardAbort 
NoConnectionAbort 
AbortFinished 
ConnectionLossDetected 
WaitingForServer 
Active 
ConnectionLossDetected 
NoConnectionAbort 
NoConnAbortFollower 
PTAbort 
NoPTAbort 
AbortFinished 
WaitingForServer 
Active 
ConnectionLossDetected 
NoConnectionAbort 
NoConnAbortFollower 
PTAbort 
NoPTAbort 
AbortFinished 

Definition at line 45 of file main.cpp.

◆ IncomingPacketKind

enum class IncomingPacketKind
strong
Enumerator
None 
ServerHeartbeat 
Config 
Abort 
AbortDone 
ClearAbort 
SensorData 
None 
ServerHeartbeat 
Config 
Abort 
AbortDone 
ClearAbort 
None 
ServerHeartbeat 
Config 
Abort 
AbortDone 
ClearAbort 
SensorData 
NoConnAbort 
None 
ServerHeartbeat 
Config 
Abort 
AbortDone 
ClearAbort 
SensorData 
NoConnAbort 
None 
ServerHeartbeat 
SensorConfig 
ClearAbort 
NoConnAbort 

Definition at line 237 of file main.cpp.

◆ LedPhase

enum class LedPhase
strong
Enumerator
Idle 
On 
Off 
Idle 
On 
Off 
Idle 
On 
Off 

Definition at line 86 of file main.cpp.

Function Documentation

◆ applyPacketTransition()

void applyPacketTransition ( IncomingPacketKind kind)
static

◆ create_no_connection_abort_packet()

size_t create_no_connection_abort_packet ( uint8_t * buffer,
size_t buffer_size )
static

Definition at line 383 of file main.cpp.

References DIABLO_COMMS_VERSION, millis(), and daq::NO_CONNECTION_ABORT.

Referenced by sendNoConnectionAbortToAllPTs().

◆ getBoardStateForHeartbeat()

◆ getStateNumber()

uint8_t getStateNumber ( ActuatorControllerState s)
static

◆ heartbeatTimedOut()

bool heartbeatTimedOut ( )
static

◆ initializeActuators()

void initializeActuators ( )
static

◆ initializeCurrentSensePins()

void initializeCurrentSensePins ( )
static

Definition at line 560 of file main.cpp.

References actuator_board_pins::getCurrentSensePin(), INPUT, NUM_SENSORS, and pinMode().

Referenced by setup().

◆ isIPInPTLocations()

bool isIPInPTLocations ( uint32_t ip)
static

Definition at line 213 of file main.cpp.

References abort_pt_locations.

Referenced by processIncomingPacket().

◆ loop()

◆ processActuatorCommands()

void processActuatorCommands ( const std::vector< daq::ActuatorCommand > & commands)
static

◆ processIncomingPacket()

◆ readCurrentSensePinsAndSend()

◆ readPacketHeader()

bool readPacketHeader ( const uint8_t * buffer,
size_t buffer_size,
daq::PacketHeader & header_out )
static

Definition at line 229 of file main.cpp.

Referenced by processIncomingPacket().

◆ run_AbortFinished()

void run_AbortFinished ( )
static

Definition at line 474 of file main.cpp.

Referenced by loop().

◆ run_Active()

void run_Active ( )
static

Definition at line 420 of file main.cpp.

References ConnectionLossDetected, heartbeatTimedOut(), millis(), state, state_enter_ms, and streamSensorDataIfDue().

Referenced by loop().

◆ run_ConnectionLossDetected()

◆ run_NoConnectionAbort()

◆ run_NoPTAbort()

void run_NoPTAbort ( )
static

Definition at line 464 of file main.cpp.

References AbortFinished, millis(), NO_CONNECTION_ABORT_DONE_MS, state, and state_enter_ms.

Referenced by loop().

◆ run_PTAbort()

void run_PTAbort ( )
static

Definition at line 455 of file main.cpp.

References AbortFinished, millis(), NO_CONNECTION_ABORT_DONE_MS, state, and state_enter_ms.

Referenced by loop().

◆ run_StandaloneAbort()

void run_StandaloneAbort ( )
static

Definition at line 496 of file main.cpp.

References AbortFinished, millis(), NO_CONNECTION_ABORT_DONE_MS, state, and state_enter_ms.

Referenced by loop().

◆ run_StandardAbort()

void run_StandardAbort ( )
static

◆ run_WaitingForServer()

void run_WaitingForServer ( )
static

Definition at line 416 of file main.cpp.

Referenced by loop().

◆ sendBoardHeartbeat()

◆ sendNoConnectionAbortToAllPTs()

void sendNoConnectionAbortToAllPTs ( )
static

◆ setup()

void setup ( void )

Definition at line 571 of file main.cpp.

References actuator_board_pins::Actuator_Board, b, board_id, delay(), digitalWrite(), dns, Ethernet, ETHERNET_BEGIN_DELAY_MS, ETHERNET_INIT_DELAY_MS, ETHERNET_SPI_DELAY_MS, gateway, initializeActuators(), initializeCurrentSensePins(), IPAddress, last_led_state, last_server_heartbeat_ms, led_cycle_start_ms, LOW, mac, millis(), OUTPUT, pinMode(), Serial, SPIFFS_BOARD_VALUE_PATH, state, state_enter_ms, staticIP, subnet, udp, udpListenPort, and WaitingForServer.

Referenced by radio_link::radio_send(), radio_task_send_frame(), radio_task_start_continuous_rx(), radio_task_start_sniff(), t7_integration::scenario_chain(), t7_integration::scenario_cubic(), t7_integration::scenario_mixed(), t7_integration::scenario_restart(), test_arm_requested_without_heartbeat(), test_battery_read_before_transmit(), test_battery_validity(), test_clock_and_sequence_wraparound(), test_command_drain_is_bounded(), test_deadline_retry_and_unstarted(), test_disarm_stays_idle(), test_disarm_then_arm_in_one_wake(), test_early_lsi_wake_within_tolerance(), test_failure_completes_after_three_attempts(), test_failure_count_saturates(), test_first_wake_sends_heartbeat(), test_full_inventory_budget(), test_heartbeat_boundaries_and_gap(), test_hysteresis(), test_invalid_battery_still_sends(), test_long_gap_sends_one_heartbeat(), test_malformed_driver_results(), test_missing_and_optional(), test_pass_and_inventory(), test_pending_timeout_and_fairness(), test_probe_retry_bounds_and_recovery(), test_publication_retry_and_recovery(), test_radio_wake_does_not_delay_heartbeat(), test_reset_and_copied_dependencies(), test_send_failure_counted_and_sleep_continues(), test_session_deadline(), test_sixty_seconds_gives_six_heartbeats(), test_terminal_results(), test_thresholds(), test_timeout_retry(), test_usb_is_never_battery_health(), and test_wraparound().

◆ streamSensorDataIfDue()

void streamSensorDataIfDue ( )
static

Definition at line 372 of file main.cpp.

References ADC_READ_INTERVAL_MS, last_adc_read_ms, millis(), and readCurrentSensePinsAndSend().

Referenced by run_Active().

◆ uint32ToIPAddress()

IPAddress uint32ToIPAddress ( uint32_t ip)
static

Definition at line 221 of file main.cpp.

References IPAddress.

Referenced by sendNoConnectionAbortToAllPTs().

◆ updateLedNonBlocking()

Variable Documentation

◆ abort_actuator_locations

std::vector<daq::AbortActuatorLocation> abort_actuator_locations
static

◆ abort_pt_locations

std::vector<daq::AbortPTLocation> abort_pt_locations
static

◆ actuator_states

◆ board_id

uint8_t board_id = BOARD_ID_DEFAULT
static

Definition at line 30 of file main.cpp.

Referenced by daq::__attribute__(), sequencer::actuator_elodin_low_byte(), fsw::config::SensorAssignmentManager::assign_board_ip(), fsw::fsw::FSWConfigManager::assign_sensors(), fsw::config::SensorAssignmentManager::assign_sensors_to_board(), fsw::config::anonymous_namespace{Config.cpp}::check_board_slots(), anonymous_namespace{daq_bridge_main.cpp}::BackendLogForwarder::forward(), fsw::config::SensorAssignmentManager::generate_board_config_packet(), fsw::config::SensorAssignmentManager::get_board_config(), fsw::config::SensorAssignmentManager::get_board_sensors(), fsw::fsw::FSWConfigManager::infer_system_state(), fsw::calibration::lc_tare_entity(), loop(), main(), pollNetwork(), fsw::fsw::FSWConfigManager::process_board_heartbeat(), fsw::calibration::CubicCalibrationStore::register_channel(), fsw::elodin::DatabaseConfig::register_heartbeat_tables(), fsw::elodin::DatabaseConfig::register_self_test_tables(), fsw::elodin::register_self_test_vtable(), fsw::fsw::FSWConfigManager::send_config_to_board(), fsw::fsw::FSWConfigManager::send_configs_to_all_boards(), sendBoardHeartbeat(), sendBoardHeartbeat(), sendBoardHeartbeat(), sendBoardHeartbeatTo(), fsw::fsw::FSWConfigManager::set_board_static_ip(), fsw::config::SensorAssignmentManager::set_static_board_ip(), fsw::config::BoardDiscovery::set_static_ip_for_board(), setup(), fsw::calibration::anonymous_namespace{CubicCalibrationStore.cpp}::slot_from_board_id(), t7(), fsw::t7::t7_uid(), fsw::config::SensorAssignmentManager::update_board_config_from_packet(), fsw::config::BoardDiscovery::~BoardDiscovery(), and fsw::config::SensorAssignmentManager::~SensorAssignmentManager().

◆ config_valid

bool config_valid = false
static

◆ dns

◆ gateway

◆ is_abort_controller

◆ last_adc_read_ms

unsigned long last_adc_read_ms = 0
static

Definition at line 79 of file main.cpp.

Referenced by streamSensorDataIfDue(), and streamSensorDataIfDue().

◆ last_led_state

ActuatorControllerState last_led_state
static

◆ last_pt_data_from_config_ms

unsigned long last_pt_data_from_config_ms = 0
static

Definition at line 70 of file main.cpp.

Referenced by processIncomingPacket(), and run_ConnectionLossDetected().

◆ last_server_heartbeat_ms

unsigned long last_server_heartbeat_ms = 0
static

◆ lastHeartbeatMillis

unsigned long lastHeartbeatMillis = 0
static

Definition at line 81 of file main.cpp.

Referenced by loop(), and pollNetwork().

◆ led_blink_index

uint8_t led_blink_index = 0
static

Definition at line 89 of file main.cpp.

Referenced by updateLedNonBlocking(), and updateLedNonBlocking().

◆ led_cycle_start_ms

unsigned long led_cycle_start_ms = 0
static

Definition at line 88 of file main.cpp.

Referenced by setup(), updateLedNonBlocking(), and updateLedNonBlocking().

◆ led_phase

LedPhase led_phase = LedPhase::Idle
static

Definition at line 87 of file main.cpp.

Referenced by updateLedNonBlocking(), and updateLedNonBlocking().

◆ led_phase_start_ms

unsigned long led_phase_start_ms = 0
static

Definition at line 90 of file main.cpp.

Referenced by updateLedNonBlocking(), and updateLedNonBlocking().

◆ mac

◆ no_conn_abort_pt_sent

bool no_conn_abort_pt_sent = false
static

Definition at line 75 of file main.cpp.

Referenced by run_ConnectionLossDetected(), and run_NoConnectionAbort().

◆ NUM_SENSORS

const uint8_t NUM_SENSORS = NUM_ACTUATORS

Definition at line 78 of file main.cpp.

◆ pt_data_received_during_no_conn_abort_wait

bool pt_data_received_during_no_conn_abort_wait = false
static

◆ ptBoardPort

const int ptBoardPort = 5005

Definition at line 39 of file main.cpp.

Referenced by sendAbortDoneToAllBoards(), and sendNoConnectionAbortToAllPTs().

◆ serverIP

◆ serverPort

◆ state

Initial value:

Definition at line 57 of file main.cpp.

Referenced by engine.core.injectors.impinging::_stream_flow(), sequencer::StateMachine::allowedBitmask(), sequencer::StateMachine::allowedFrom(), app_command(), app_set_state(), app_state(), sequencer::ActuatorCommander::applyForState(), applyPacketTransition(), applyPacketTransition(), applyPacketTransition(), SensorSM::applyPacketTransition(), battery_state_name(), fsw::config::SensorAssignmentManager::calculate_ip_from_mac(), anonymous_namespace{idle_e2e.cpp}::check_idle_heartbeat(), fsw::nav::EKFNavigationEnhanced::computeMagnetometerJacobian(), fsw::nav::EKFNavigationEnhanced::computeMagnetometerMeasurement(), emmc_identify(), fsw::control::PressureStateMachine::executeStateActions(), fsw::control::PressureStateMachine::executeStateEntryActions(), flight_state_logs_to_emmc(), flight_state_name(), flight_state_next(), fsw::config::SensorAssignmentManager::get_system_sensors(), getBoardStateForHeartbeat(), getBoardStateForHeartbeat(), getBoardStateForHeartbeat(), SensorSM::getBoardStateForHeartbeat(), fsw::calibration::RobustCalibrationManager::initialize_sensor(), IRQ_Context(), fsw::calibration::RobustCalibrationManager::load_adjustments(), loop(), mode_outputs(), mode_route_command(), osKernelGetState(), osKernelInitialize(), osKernelStart(), osThreadGetState(), fsw::routing::HeartbeatRouter::process_heartbeat(), processActuatorCommands(), processIncomingPacket(), processIncomingPacket(), EngineFSM::register_state(), fsw::calibration::RobustCalibrationManager::reseed_sensor(), fsw::calibration::RobustCalibrationManager::reset_adjustment(), run_Active(), run_Active(), run_ConnectionLossDetected(), run_ConnectionLossDetected(), run_NoConnectionAbort(), run_NoConnectionAbort(), run_NoPTAbort(), run_PTAbort(), run_StandaloneAbort(), run_StandardAbort(), run_StandardAbort(), fsw::calibration::RobustCalibrationManager::save_adjustments(), t7_integration::scenario_restart(), fsw::calibration::CubicCalibrationStore::serialize(), fsw::fsw::FSWConfigManager::set_system_state(), setState(), setState(), setup(), sequencer::ActuatorCommander::startContinuousLoop(), stateAcceptsActuatorCommand(), test_actuator_heartbeat_state_mapping_table(), test_props_reference::test_gamma_and_kinematic_viscosity_are_consistent(), test_props_chain::test_ordinary_states_are_served_by_the_tables(), test_sensor_heartbeat_state_mapping_table(), test_props_chain::test_the_chain_falls_through_to_the_equation_of_state(), test_thresholds(), updateLedNonBlocking(), updateLedNonBlocking(), and fsw::config::SensorAssignmentManager::~SensorAssignmentManager().

◆ state_enter_ms

◆ staticIP

IPAddress staticIP(192, 168, 2, BOARD_ID_DEFAULT) ( 192 ,
168 ,
2 ,
BOARD_ID_DEFAULT  )

Referenced by setup().

◆ subnet

IPAddress subnet(255, 255, 255, 0) ( 255 ,
255 ,
255 ,
0  )

Referenced by printBoardInfo(), and setup().

◆ udp

◆ udpListenPort

const int udpListenPort = 5005