|
STAR
Cal STAR — firmware, DAQ server, and engine design
|
#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"Go to the source code of this file.
Classes | |
| struct | PWMState |
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 |
|
strong |
|
strong |
|
strong |
|
static |
|
static |
Definition at line 418 of file main.cpp.
References abort_actuator_locations, actuator_states, digitalWrite(), actuator_board_pins::getActuatorPin(), getSelfIP(), HIGH, and LOW.
|
static |
Definition at line 374 of file main.cpp.
References abort_actuator_locations, actuator_states, daq::create_actuator_command_packet(), digitalWrite(), actuator_board_pins::getActuatorPin(), getSelfIP(), HF_VERBOSE, HF_VERBOSELN, HIGH, LOW, MAX_PACKET_SIZE, millis(), packetBuffer, udp, udpListenPort, and uint32ToIPAddress().
Referenced by run_NoPTAbort(), and run_PTAbort().
|
static |
Definition at line 990 of file main.cpp.
References Abort, AbortDone, AbortFinished, Active, ClearAbort, Config, ConnectionLossDetected, ENABLE_ALL_STATE_TRANSITIONS, is_abort_controller, NoConnAbort, NoConnAbortFollower, ServerHeartbeat, setState(), state, and WaitingForServer.
Referenced by loop().
|
static |
Definition at line 405 of file main.cpp.
References abort_actuator_locations, actuator_states, digitalWrite(), actuator_board_pins::getActuatorPin(), getSelfIP(), HIGH, and LOW.
|
static |
Definition at line 343 of file main.cpp.
References abort_actuator_locations, actuator_states, daq::create_actuator_command_packet(), digitalWrite(), actuator_board_pins::getActuatorPin(), getSelfIP(), HF_VERBOSE, HF_VERBOSELN, HIGH, LOW, MAX_PACKET_SIZE, millis(), packetBuffer, udp, udpListenPort, and uint32ToIPAddress().
Referenced by run_NoConnectionAbort(), run_NoPTAbort(), and run_PTAbort().
|
static |
Definition at line 329 of file main.cpp.
References daq::ABORT_DONE, and millis().
Referenced by sendAbortDoneToAllBoards().
|
static |
Definition at line 315 of file main.cpp.
References millis(), and daq::NO_CONNECTION_ABORT.
Referenced by sendNoConnectionAbortToAllPTs().
|
static |
Definition at line 1069 of file main.cpp.
References daq::create_log_packet(), g_logbuf, LOG_BUF_SIZE, millis(), serverIP, serverPort, and udp.
Referenced by loop(), SensorHotfire::loop(), SensorHotfire::setup(), and setup().
|
static |
Definition at line 237 of file main.cpp.
References daq::ABORT_FINISHED, AbortFinished, daq::ACTIVE, Active, daq::CONNECTION_LOSS_DETECTED, ConnectionLossDetected, daq::NO_CONN_ABORT_FOLLOWER, daq::NO_CONNECTION_ABORT, daq::NO_PT_ABORT, NoConnAbortFollower, NoConnectionAbort, NoPTAbort, daq::PT_ABORT, PTAbort, daq::SETUP, state, and WaitingForServer.
Referenced by sendBoardHeartbeatTo().
|
static |
Definition at line 290 of file main.cpp.
References Ethernet.
Referenced by applyAbortLocalOnly(), applyAbortToAllActuators(), applyVentLocalOnly(), applyVentToAllActuators(), and sendAbortDoneToAllBoards().
|
static |
Definition at line 152 of file main.cpp.
Referenced by updateLedNonBlocking().
|
static |
Definition at line 797 of file main.cpp.
References HEARTBEAT_TIMEOUT_MS, last_server_heartbeat_ms, and millis().
Referenced by run_Active().
|
static |
Definition at line 1031 of file main.cpp.
References actuator_states, digitalWrite(), actuator_board_pins::getActuatorPin(), HF_VERBOSELN, LOW, actuator_board_pins::NUM_ACTUATORS, OUTPUT, and pinMode().
Referenced by setup().
|
static |
Definition at line 1044 of file main.cpp.
References actuator_board_pins::getCurrentSensePin(), INPUT, NUM_SENSORS, and pinMode().
Referenced by setup().
|
static |
Definition at line 1052 of file main.cpp.
References actuator_board_pins::NUM_ACTUATORS, and pwm_states.
Referenced by setup().
|
static |
Definition at line 305 of file main.cpp.
References abort_pt_locations.
| void loop | ( | ) |
Definition at line 1190 of file main.cpp.
References AbortFinished, Active, actuatorPacketTypeName(), applyPacketTransition(), BOARD_HEARTBEAT_INTERVAL_MS, board_id, BoardNet::boardId(), connection_loss_received_ips, ConnectionLossDetected, delay(), dns, Ethernet, flushLogs(), g_logbuf, gateway, HEX, HF_LOG, HF_LOGLN_, HF_VERBOSE, HF_VERBOSELN, HOTFIRE_SERVER_IP_OCTET_4, HOTFIRE_SERVER_PORT, IPAddress, lastHeartbeatMillis, LOOP_DELAY_MS, BoardNet::maintainLease(), MAX_PACKET_SIZE, millis(), net, NoConnAbortFollower, NoConnectionAbort, NoPTAbort, otaServer, packetBuffer, StarOTA::printTestMessage(), processIncomingPacket(), PTAbort, BoardNet::retryDhcp(), run_AbortFinished(), run_Active(), run_ConnectionLossDetected(), run_NoConnAbortFollower(), run_NoConnectionAbort(), run_NoPTAbort(), run_PTAbort(), run_WaitingForServer(), sendBoardHeartbeat(), sendBoardHeartbeatTo(), Serial, serverIP, BoardNet::serverWentSilent(), state, udp, updateLedNonBlocking(), updatePWM(), and WaitingForServer.
|
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().
|
static |
Definition at line 666 of file main.cpp.
References active, actuator_states, commands, digitalWrite(), actuator_board_pins::getActuatorPin(), HIGH, LOW, actuator_board_pins::NUM_ACTUATORS, and pwm_states.
Referenced by processIncomingPacket().
|
static |
Definition at line 511 of file main.cpp.
References daq::ABORT, Abort, abort_actuator_locations, daq::ABORT_DONE, abort_pt_locations, AbortDone, daq::ACTUATOR_COMMAND, daq::ACTUATOR_CONFIG, chunks, daq::CLEAR_ABORT, ClearAbort, commands, Config, config_valid, connection_loss_received_ips, g_log_stream_level, g_verbose, HF_VERBOSE, HF_VERBOSELN, is_abort_controller, last_server_heartbeat_ms, millis(), net, daq::NO_CONNECTION_ABORT, NoConnAbort, NoConnectionAbort, None, BoardNet::onServerPacket(), daq::parse_actuator_command_packet(), daq::parse_actuator_config_packet(), daq::parse_pwm_actuator_packet(), daq::parse_sensor_data_packet(), daq::parse_server_heartbeat_packet(), processActuatorCommands(), processPWMActuatorCommand(), pt_below_threshold, pt_received_during_no_conn, PTAbort, daq::PWM_ACTUATOR_COMMAND, readPacketHeader(), daq::SENSOR_DATA, SensorData, Serial, daq::SERVER_HEARTBEAT, ServerHeartbeat, serverIP, state, and stateAcceptsActuatorCommand().
Referenced by loop().
|
static |
Definition at line 686 of file main.cpp.
References actuator_states, array_index(), commands, digitalWrite(), actuator_board_pins::getActuatorPin(), HIGH, LOW, micros(), millis(), actuator_board_pins::NUM_ACTUATORS, and pwm_states.
Referenced by processIncomingPacket().
|
static |
Definition at line 768 of file main.cpp.
References analogRead(), chunk, chunks, daq::create_sensor_data_packet(), actuator_board_pins::getCurrentSensePin(), HF_VERBOSE, HF_VERBOSELN, MAX_PACKET_SIZE, millis(), NUM_SENSORS, packetBuffer, serverIP, serverPort, and udp.
Referenced by streamSensorDataIfDue().
|
static |
Definition at line 434 of file main.cpp.
Referenced by processIncomingPacket().
|
static |
Definition at line 867 of file main.cpp.
References connection_loss_received_ips, ConnectionLossDetected, ENABLE_ALL_STATE_TRANSITIONS, heartbeatTimedOut(), setState(), and streamSensorDataIfDue().
Referenced by loop().
|
static |
Definition at line 963 of file main.cpp.
References abort_pt_locations, Active, CONNECTION_LOSS_GRACE_MS, connection_loss_received_ips, is_abort_controller, millis(), no_conn_abort_pt_sent, no_conn_abort_vent_sent, NoConnAbortFollower, NoConnectionAbort, pt_received_during_no_conn, serverIP, setState(), and state_enter_ms.
Referenced by loop().
|
static |
|
static |
Definition at line 877 of file main.cpp.
References abort_actuator_locations, abort_pt_locations, applyVentToAllActuators(), config_valid, delay(), elapsed(), is_abort_controller, millis(), no_conn_abort_pt_sent, NO_CONN_ABORT_PT_WAIT_MS, no_conn_abort_vent_sent, no_pt_abort_abort_done, no_pt_abort_vent_done, NoPTAbort, pt_abort_abort_done, pt_abort_vent_done, pt_below_threshold, pt_received_during_no_conn, PTAbort, sendNoConnectionAbortToAllPTs(), setState(), and state_enter_ms.
Referenced by loop().
|
static |
Definition at line 944 of file main.cpp.
References AbortFinished, applyAbortToAllActuators(), applyVentToAllActuators(), config_valid, millis(), no_pt_abort_abort_done, no_pt_abort_vent_done, NO_PT_ABORT_VENT_TO_ABORT_MS, sendAbortDoneToAllBoards(), setState(), and state_enter_ms.
Referenced by loop().
|
static |
Definition at line 920 of file main.cpp.
References AbortFinished, applyAbortToAllActuators(), applyVentToAllActuators(), b, config_valid, elapsed(), millis(), pt_abort_abort_done, PT_ABORT_THRESHOLD_TIMEOUT_MS, pt_abort_vent_done, pt_below_threshold, sendAbortDoneToAllBoards(), setState(), and state_enter_ms.
Referenced by loop().
|
static |
Definition at line 834 of file main.cpp.
References abort_actuator_locations, abort_pt_locations, create_abort_done_packet(), getSelfIP(), HF_VERBOSELN, MAX_PACKET_SIZE, packetBuffer, ptBoardPort, udp, udpListenPort, and uint32ToIPAddress().
Referenced by run_NoPTAbort(), and run_PTAbort().
|
static |
Definition at line 283 of file main.cpp.
References sendBoardHeartbeatTo(), serverIP, and serverPort.
Referenced by loop().
|
static |
Definition at line 260 of file main.cpp.
References board_id, daq::create_board_heartbeat_packet(), FirmwareHash::get(), getBoardStateForHeartbeat(), HF_VERBOSE, HF_VERBOSELN, MAX_PACKET_SIZE, millis(), packetBuffer, daq::SAFE, Serial, and udp.
Referenced by loop(), and sendBoardHeartbeat().
|
static |
Definition at line 814 of file main.cpp.
References abort_pt_locations, create_no_connection_abort_packet(), HF_VERBOSE, HF_VERBOSELN, MAX_PACKET_SIZE, packetBuffer, ptBoardPort, udp, and uint32ToIPAddress().
Referenced by run_NoConnectionAbort().
|
static |
Definition at line 179 of file main.cpp.
References millis(), Serial, state, state_enter_ms, and stateName().
Referenced by applyPacketTransition(), run_Active(), run_ConnectionLossDetected(), run_NoConnectionAbort(), run_NoPTAbort(), and run_PTAbort().
| void setup | ( | void | ) |
Definition at line 1087 of file main.cpp.
References actuator_board_pins::Actuator_Board, BoardNet::begin(), BOARD_ID, board_id, BoardNet::boardId(), BoardNet::configure(), delay(), digitalWrite(), dns, Ethernet, ETHERNET_BEGIN_DELAY_MS, ETHERNET_INIT_DELAY_MS, ETHERNET_SPI_DELAY_MS, flushLogs(), gateway, HF_LOG, HF_LOGLN_, initializeActuators(), initializeCurrentSensePins(), initializePWMStates(), IPAddress, last_led_state, last_server_heartbeat_ms, led_cycle_start_ms, LOW, mac, millis(), net, otaFreezeAddress(), otaServer, OUTPUT, pinMode(), FirmwareHash::print(), BoardNet::printMac(), Serial, SERIAL_MONITOR_READY_DELAY_MS, BoardNet::sourceName(), state, state_enter_ms, subnet, udp, udpListenPort, and WaitingForServer.
|
static |
Definition at line 458 of file main.cpp.
References AbortFinished, Active, is_abort_controller, NoConnAbortFollower, NoConnectionAbort, NoPTAbort, PTAbort, serverIP, and state.
Referenced by processIncomingPacket().
|
static |
Definition at line 156 of file main.cpp.
References AbortFinished, Active, ConnectionLossDetected, NoConnAbortFollower, NoConnectionAbort, NoPTAbort, PTAbort, and WaitingForServer.
Referenced by setState().
|
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().
|
static |
Definition at line 300 of file main.cpp.
References IPAddress.
Referenced by applyAbortToAllActuators(), applyVentToAllActuators(), sendAbortDoneToAllBoards(), and sendNoConnectionAbortToAllPTs().
|
static |
Definition at line 189 of file main.cpp.
References actuator_board_pins::Actuator_Board, digitalWrite(), getStateNumber(), HIGH, Idle, last_led_state, led_blink_index, LED_BLINK_OFF_MS, LED_BLINK_ON_MS, LED_CYCLE_MS, led_cycle_start_ms, led_phase, led_phase_start_ms, LOW, millis(), Off, On, and state.
Referenced by loop().
|
static |
Definition at line 716 of file main.cpp.
References active, actuator_states, digitalWrite(), actuator_board_pins::getActuatorPin(), HIGH, LOW, micros(), millis(), actuator_board_pins::NUM_ACTUATORS, and pwm_states.
Referenced by loop().
|
static |
|
static |
|
static |
Definition at line 110 of file main.cpp.
Referenced by loop(), processIncomingPacket(), run_Active(), and run_ConnectionLossDetected().
| IPAddress dns(192, 168, 2, 1) | ( | 192 | , |
| 168 | , | ||
| 2 | , | ||
| 1 | ) |
| bool g_verbose = true |
Definition at line 65 of file main.cpp.
Referenced by processIncomingPacket(), and SensorHotfire::processIncomingPacket().
| IPAddress gateway(0, 0, 0, 0) | ( | 0 | , |
| 0 | , | ||
| 0 | , | ||
| 0 | ) |
|
static |
|
static |
|
static |
Definition at line 57 of file main.cpp.
Referenced by loop(), otaFreezeAddress(), SensorHotfire::otaFreezeAddress(), otaStart(), pollNetwork(), processIncomingPacket(), and setup().
|
static |
Definition at line 103 of file main.cpp.
Referenced by run_ConnectionLossDetected(), and run_NoConnectionAbort().
|
static |
Definition at line 119 of file main.cpp.
Referenced by run_NoConnectionAbort(), and run_NoPTAbort().
|
static |
Definition at line 118 of file main.cpp.
Referenced by run_NoConnectionAbort(), and run_NoPTAbort().
| const uint8_t NUM_SENSORS = NUM_ACTUATORS |
|
static |
|
static |
Definition at line 115 of file main.cpp.
Referenced by run_NoConnectionAbort(), and run_PTAbort().
|
static |
Definition at line 114 of file main.cpp.
Referenced by run_NoConnectionAbort(), and run_PTAbort().
|
static |
Definition at line 113 of file main.cpp.
Referenced by processIncomingPacket(), run_NoConnectionAbort(), and run_PTAbort().
|
static |
Definition at line 106 of file main.cpp.
Referenced by processIncomingPacket(), run_ConnectionLossDetected(), and run_NoConnectionAbort().
|
static |
| IPAddress serverIP(192, 168, 2, HOTFIRE_SERVER_IP_OCTET_4) | ( | 192 | , |
| 168 | , | ||
| 2 | , | ||
| HOTFIRE_SERVER_IP_OCTET_4 | ) |
| const int serverPort = HOTFIRE_SERVER_PORT |
|
static |
| IPAddress subnet(255, 255, 255, 0) | ( | 255 | , |
| 255 | , | ||
| 255 | , | ||
| 0 | ) |