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

Go to the source code of this file.

Classes

struct  PWMState

Enumerations

enum class  ActuatorControllerState : uint8_t {
  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 void otaFreezeAddress (void *, uint32_t)
 Freeze our address before a single byte reaches flash.
static uint8_t getStateNumber (ActuatorControllerState s)
static const char * stateName (ActuatorControllerState s)
static void setState (ActuatorControllerState new_state)
static void updateLedNonBlocking ()
static daq::BoardState getBoardStateForHeartbeat ()
static void sendBoardHeartbeatTo (IPAddress dest_ip, int dest_port)
static void sendBoardHeartbeat ()
static uint32_t getSelfIP ()
static IPAddress uint32ToIPAddress (uint32_t ip)
static bool isIPInPTLocations (uint32_t ip)
static size_t create_no_connection_abort_packet (uint8_t *buffer, size_t buffer_size)
static size_t create_abort_done_packet (uint8_t *buffer, size_t buffer_size)
static void applyVentToAllActuators ()
static void applyAbortToAllActuators ()
static void applyVentLocalOnly ()
static void applyAbortLocalOnly ()
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 void processPWMActuatorCommand (const std::vector< daq::PWMActuatorCommand > &commands)
static bool stateAcceptsActuatorCommand (uint32_t remote_ip32)
static const char * actuatorPacketTypeName (uint8_t type)
static IncomingPacketKind processIncomingPacket (const uint8_t *buffer, size_t len, IPAddress remoteIP)
static void updatePWM ()
static void readCurrentSensePinsAndSend ()
static bool heartbeatTimedOut ()
static void streamSensorDataIfDue ()
static void sendNoConnectionAbortToAllPTs ()
static void sendAbortDoneToAllBoards ()
static void run_WaitingForServer ()
static void run_Active ()
static void run_NoConnectionAbort ()
static void run_PTAbort ()
static void run_NoPTAbort ()
static void run_AbortFinished ()
static void run_ConnectionLossDetected ()
static void run_NoConnAbortFollower ()
static void applyPacketTransition (IncomingPacketKind kind)
static void initializeActuators ()
static void initializeCurrentSensePins ()
static void initializePWMStates ()
static void flushLogs ()
void setup ()
void loop ()

Variables

static uint8_t board_id = 0
byte mac [6]
IPAddress gateway (0, 0, 0, 0)
IPAddress subnet (255, 255, 255, 0)
IPAddress dns (192, 168, 2, 1)
IPAddress serverIP (192, 168, 2, HOTFIRE_SERVER_IP_OCTET_4)
const int udpListenPort = 5005
const int serverPort = HOTFIRE_SERVER_PORT
const int ptBoardPort = 5005
EthernetUDP udp
static StarOTA::Server otaServer (HOTFIRE_OTA_PORT)
static BoardNet::State net
bool g_verbose = true
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 bool no_conn_abort_vent_sent = false
static bool no_conn_abort_pt_sent = false
static std::vector< bool > pt_received_during_no_conn
static std::set< uint32_t > connection_loss_received_ips
static std::vector< bool > pt_below_threshold
static bool pt_abort_vent_done = false
static bool pt_abort_abort_done = false
static bool no_pt_abort_vent_done = false
static bool no_pt_abort_abort_done = 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 PWMState pwm_states [NUM_ACTUATORS]
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 : uint8_t
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 79 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 442 of file main.cpp.

◆ LedPhase

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

Definition at line 144 of file main.cpp.

Function Documentation

◆ actuatorPacketTypeName()

const char * actuatorPacketTypeName ( uint8_t type)
static

Definition at line 500 of file main.cpp.

Referenced by loop().

◆ applyAbortLocalOnly()

void applyAbortLocalOnly ( )
static

◆ applyAbortToAllActuators()

◆ applyPacketTransition()

◆ applyVentLocalOnly()

void applyVentLocalOnly ( )
static

◆ applyVentToAllActuators()

◆ create_abort_done_packet()

size_t create_abort_done_packet ( uint8_t * buffer,
size_t buffer_size )
static

Definition at line 329 of file main.cpp.

References daq::ABORT_DONE, and millis().

Referenced by sendAbortDoneToAllBoards().

◆ create_no_connection_abort_packet()

size_t create_no_connection_abort_packet ( uint8_t * buffer,
size_t buffer_size )
static

Definition at line 315 of file main.cpp.

References millis(), and daq::NO_CONNECTION_ABORT.

Referenced by sendNoConnectionAbortToAllPTs().

◆ flushLogs()

void flushLogs ( )
static

◆ getBoardStateForHeartbeat()

◆ getSelfIP()

uint32_t getSelfIP ( )
static

◆ getStateNumber()

uint8_t getStateNumber ( ActuatorControllerState s)
static

Definition at line 152 of file main.cpp.

Referenced by updateLedNonBlocking().

◆ heartbeatTimedOut()

bool heartbeatTimedOut ( )
static

Definition at line 797 of file main.cpp.

References HEARTBEAT_TIMEOUT_MS, last_server_heartbeat_ms, and millis().

Referenced by run_Active().

◆ initializeActuators()

void initializeActuators ( )
static

◆ initializeCurrentSensePins()

void initializeCurrentSensePins ( )
static

Definition at line 1044 of file main.cpp.

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

Referenced by setup().

◆ initializePWMStates()

void initializePWMStates ( )
static

Definition at line 1052 of file main.cpp.

References actuator_board_pins::NUM_ACTUATORS, and pwm_states.

Referenced by setup().

◆ isIPInPTLocations()

bool isIPInPTLocations ( uint32_t ip)
static

Definition at line 305 of file main.cpp.

References abort_pt_locations.

◆ loop()

◆ otaFreezeAddress()

void otaFreezeAddress ( void * ,
uint32_t  )
static

Freeze our address before a single byte reaches flash.

Our address is a DHCP lease, and a renewal landing mid-flash would move us and drop the transfer, so this suspends renewals for the duration.

Definition at line 72 of file main.cpp.

References BoardNet::beginOtaHold(), and net.

Referenced by setup().

◆ processActuatorCommands()

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

◆ processIncomingPacket()

◆ processPWMActuatorCommand()

void processPWMActuatorCommand ( const std::vector< daq::PWMActuatorCommand > & commands)
static

◆ readCurrentSensePinsAndSend()

◆ readPacketHeader()

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

Definition at line 434 of file main.cpp.

Referenced by processIncomingPacket().

◆ run_AbortFinished()

void run_AbortFinished ( )
static

Definition at line 959 of file main.cpp.

Referenced by loop().

◆ run_Active()

void run_Active ( )
static

◆ run_ConnectionLossDetected()

◆ run_NoConnAbortFollower()

void run_NoConnAbortFollower ( )
static

Definition at line 983 of file main.cpp.

Referenced by loop().

◆ run_NoConnectionAbort()

◆ run_NoPTAbort()

◆ run_PTAbort()

◆ run_WaitingForServer()

void run_WaitingForServer ( )
static

Definition at line 863 of file main.cpp.

Referenced by loop().

◆ sendAbortDoneToAllBoards()

◆ sendBoardHeartbeat()

void sendBoardHeartbeat ( )
static

Definition at line 283 of file main.cpp.

References sendBoardHeartbeatTo(), serverIP, and serverPort.

Referenced by loop().

◆ sendBoardHeartbeatTo()

void sendBoardHeartbeatTo ( IPAddress dest_ip,
int dest_port )
static

◆ sendNoConnectionAbortToAllPTs()

void sendNoConnectionAbortToAllPTs ( )
static

◆ setState()

◆ setup()

◆ stateAcceptsActuatorCommand()

bool stateAcceptsActuatorCommand ( uint32_t remote_ip32)
static

◆ stateName()

const char * stateName ( ActuatorControllerState s)
static

◆ streamSensorDataIfDue()

void streamSensorDataIfDue ( )
static

Definition at line 803 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

◆ updateLedNonBlocking()

◆ updatePWM()

void updatePWM ( )
static

Variable Documentation

◆ abort_actuator_locations

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

Definition at line 97 of file main.cpp.

◆ abort_pt_locations

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

Definition at line 98 of file main.cpp.

◆ actuator_states

uint8_t actuator_states[NUM_ACTUATORS]
static

Definition at line 124 of file main.cpp.

◆ board_id

uint8_t board_id = 0
static

Definition at line 42 of file main.cpp.

◆ config_valid

bool config_valid = false
static

Definition at line 99 of file main.cpp.

◆ connection_loss_received_ips

std::set<uint32_t> connection_loss_received_ips
static

Definition at line 110 of file main.cpp.

Referenced by loop(), processIncomingPacket(), run_Active(), and run_ConnectionLossDetected().

◆ dns

IPAddress dns(192, 168, 2, 1) ( 192 ,
168 ,
2 ,
1  )

◆ g_verbose

bool g_verbose = true

Definition at line 65 of file main.cpp.

Referenced by processIncomingPacket(), and SensorHotfire::processIncomingPacket().

◆ gateway

IPAddress gateway(0, 0, 0, 0) ( 0 ,
0 ,
0 ,
0  )

◆ is_abort_controller

bool is_abort_controller = false
static

Definition at line 96 of file main.cpp.

◆ last_adc_read_ms

unsigned long last_adc_read_ms = 0
static

Definition at line 123 of file main.cpp.

◆ last_led_state

ActuatorControllerState last_led_state
static
Initial value:

Definition at line 149 of file main.cpp.

◆ last_server_heartbeat_ms

unsigned long last_server_heartbeat_ms = 0
static

Definition at line 92 of file main.cpp.

◆ lastHeartbeatMillis

unsigned long lastHeartbeatMillis = 0
static

Definition at line 125 of file main.cpp.

◆ led_blink_index

uint8_t led_blink_index = 0
static

Definition at line 147 of file main.cpp.

◆ led_cycle_start_ms

unsigned long led_cycle_start_ms = 0
static

Definition at line 146 of file main.cpp.

◆ led_phase

LedPhase led_phase = LedPhase::Idle
static

Definition at line 145 of file main.cpp.

◆ led_phase_start_ms

unsigned long led_phase_start_ms = 0
static

Definition at line 148 of file main.cpp.

◆ mac

byte mac[6]

Definition at line 43 of file main.cpp.

◆ net

◆ no_conn_abort_pt_sent

bool no_conn_abort_pt_sent = false
static

Definition at line 104 of file main.cpp.

◆ no_conn_abort_vent_sent

bool no_conn_abort_vent_sent = false
static

Definition at line 103 of file main.cpp.

Referenced by run_ConnectionLossDetected(), and run_NoConnectionAbort().

◆ no_pt_abort_abort_done

bool no_pt_abort_abort_done = false
static

Definition at line 119 of file main.cpp.

Referenced by run_NoConnectionAbort(), and run_NoPTAbort().

◆ no_pt_abort_vent_done

bool no_pt_abort_vent_done = false
static

Definition at line 118 of file main.cpp.

Referenced by run_NoConnectionAbort(), and run_NoPTAbort().

◆ NUM_SENSORS

const uint8_t NUM_SENSORS = NUM_ACTUATORS

Definition at line 122 of file main.cpp.

◆ otaServer

◆ pt_abort_abort_done

bool pt_abort_abort_done = false
static

Definition at line 115 of file main.cpp.

Referenced by run_NoConnectionAbort(), and run_PTAbort().

◆ pt_abort_vent_done

bool pt_abort_vent_done = false
static

Definition at line 114 of file main.cpp.

Referenced by run_NoConnectionAbort(), and run_PTAbort().

◆ pt_below_threshold

std::vector<bool> pt_below_threshold
static

Definition at line 113 of file main.cpp.

Referenced by processIncomingPacket(), run_NoConnectionAbort(), and run_PTAbort().

◆ pt_received_during_no_conn

std::vector<bool> pt_received_during_no_conn
static

◆ ptBoardPort

const int ptBoardPort = 5005

Definition at line 50 of file main.cpp.

◆ pwm_states

PWMState pwm_states[NUM_ACTUATORS]
static

Definition at line 138 of file main.cpp.

◆ serverIP

IPAddress serverIP(192, 168, 2, HOTFIRE_SERVER_IP_OCTET_4) ( 192 ,
168 ,
2 ,
HOTFIRE_SERVER_IP_OCTET_4  )

◆ serverPort

const int serverPort = HOTFIRE_SERVER_PORT

Definition at line 49 of file main.cpp.

◆ state

Initial value:

Definition at line 90 of file main.cpp.

◆ state_enter_ms

unsigned long state_enter_ms = 0
static

Definition at line 93 of file main.cpp.

◆ subnet

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

◆ udp

EthernetUDP udp

Definition at line 51 of file main.cpp.

◆ udpListenPort

const int udpListenPort = 5005

Definition at line 48 of file main.cpp.