57 bool necessary_for_abort,
71 necessary_for_abort) {
86 if (len <
sizeof(daq::PacketHeader))
88 daq::PacketHeader hdr;
89 memcpy(&hdr, buf,
sizeof(hdr));
90 switch (hdr.packet_type) {
110 daq::PacketHeader hdr_out;
111 std::vector<uint8_t> ids;
114 uint32_t controller_ip;
117 abort_needed, controller_ip,
121 for (
size_t i = 0; i < ids.size() && i < 10; i++) {
222 daq::PacketHeader hdr;
225 hdr.timestamp = 1000;
226 daq::ServerHeartbeatPacket srv;
230 memcpy(buf, &hdr,
sizeof(hdr));
231 memcpy(buf +
sizeof(hdr), &srv,
sizeof(srv));
232 size_t total =
sizeof(hdr) +
sizeof(srv);
241 std::vector<uint8_t> sensor_ids = {1, 2, 3};
244 9001u, buf,
sizeof(buf));
245 TEST_ASSERT_GREATER_THAN(0,
n);
252 TEST_ASSERT_TRUE(cfg.valid);
253 TEST_ASSERT_EQUAL(3, cfg.num_sensors);
254 TEST_ASSERT_EQUAL(1, cfg.sensor_ids[0]);
255 TEST_ASSERT_EQUAL(2, cfg.sensor_ids[1]);
256 TEST_ASSERT_EQUAL(3, cfg.sensor_ids[2]);
260 std::vector<uint8_t> sensor_ids = {5, 10};
261 uint32_t controller_ip = 0xC0A80232;
264 sensor_ids, 1,
true, controller_ip, 1, 9002u, buf,
sizeof(buf));
265 TEST_ASSERT_GREATER_THAN(0,
n);
272 TEST_ASSERT_TRUE(cfg.valid);
273 TEST_ASSERT_TRUE(cfg.necessary_for_abort);
274 TEST_ASSERT_EQUAL(1, cfg.reference_voltage);
275 TEST_ASSERT_EQUAL_HEX32(0xC0A80232, cfg.actuator_controller_ip);
276 TEST_ASSERT_EQUAL(1, cfg.enable_serial_printing);
280 daq::PacketHeader hdr;
285 memcpy(buf, &hdr,
sizeof(hdr));
293 uint8_t buf[2] = {0, 0};
314 for (
auto& m : mappings) {
316 TEST_ASSERT_EQUAL_MESSAGE(
317 (
int)m.expected, (
int)got,
318 "State mapping mismatch in getBoardStateForHeartbeat");
321 daq::BoardHeartbeatPacket hb{};
324 hb.board_state = got;
329 TEST_ASSERT_GREATER_THAN(0,
n);
331 daq::PacketHeader hdr_out;
332 daq::BoardHeartbeatPacket hb_out;
335 TEST_ASSERT_EQUAL((
int)m.expected, (
int)hb_out.board_state);
336 TEST_ASSERT_EQUAL(42, hb_out.board_id);
338 (
int)hb_out.engine_state);
351int main(
int argc,
char** argv) {
static StoredConfig stored_config
static ActuatorControllerState state
static daq::BoardState getBoardStateForHeartbeat()
Sensor state machine unit tests.
static daq::BoardState getBoardStateForHeartbeat(State state)
static IncomingPacketKind readPacketHeader(const uint8_t *buf, size_t len)
static State applyPacketTransition(State state, IncomingPacketKind kind, bool necessary_for_abort, bool run_self_test)
static IncomingPacketKind processIncomingPacket(StoredConfig &stored_config, const uint8_t *buf, size_t len)
bool parse_sensor_config_packet(const uint8_t *buffer, size_t buffer_size, PacketHeader &header_out, std::vector< uint8_t > &sensor_ids_out, uint8_t &reference_voltage_out, bool &necessary_for_abort_out, uint32_t &controller_ip_out, uint8_t &enable_serial_printing_out)
Parses a Sensor Config packet from buffer.
bool parse_board_heartbeat_packet(const uint8_t *buffer, size_t buffer_size, PacketHeader &header_out, BoardHeartbeatPacket &data_out)
Parses a Board Heartbeat packet from buffer.
size_t create_board_heartbeat_packet(const BoardHeartbeatPacket &data, uint32_t timestamp_ms, uint8_t *buffer, size_t buffer_size)
Creates a complete Board Heartbeat packet in the provided buffer.
BoardState
Defines the operational state of a board.
size_t create_sensor_config_packet(const std::vector< uint8_t > &sensor_ids, uint8_t reference_voltage, bool necessary_for_abort, uint32_t controller_ip, uint8_t enable_serial_printing, uint32_t timestamp_ms, uint8_t *buffer, size_t buffer_size)
Creates a complete Sensor Config packet in the provided buffer.
*brief user defined string literal for JSON values *sa std::size_t n
uint32_t actuator_controller_ip
uint8_t reference_voltage
uint8_t enable_serial_printing
void test_sensor_noconn_abort_with_necessary()
void test_sensor_initial_state()
void test_sensor_clear_abort_in_active_stays()
void test_sensor_heartbeat_stays_waiting()
void test_sensor_process_sensor_config_packet()
void test_sensor_process_clear_abort_packet()
void test_sensor_process_too_short_returns_none()
void test_sensor_config_transitions_to_active()
void test_sensor_process_sensor_config_with_abort()
void test_sensor_process_server_heartbeat_packet()
void test_sensor_noconn_abort_without_necessary()
void test_sensor_none_packet_doesnt_transition()
void test_sensor_clear_abort_returns_to_active()
void test_sensor_config_transitions_to_selftest()
void test_sensor_heartbeat_state_mapping_table()