10#define ETH_MOSI_PIN 40
23byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xEE};
31 Serial.println(
"Ethernet Test Receive Packet Suite");
32 Serial.println(
"===================================");
50 Serial.println(
"\nInitial Board Configuration:");
52 Serial.println(
"\nListening for UDP packets...\n");
63 Serial.println(
"--- Board Network Information ---");
66 Serial.print(
"Static IP: ");
70 Serial.print(
"Subnet Mask: ");
72 Serial.print(
"DNS Server: ");
76 Serial.print(
"MAC Address: ");
77 for (
int i = 0; i < 6; i++) {
87 Serial.print(
"UDP Local Port: ");
91 Serial.print(
"Ethernet Link Status: ");
92 if (
Ethernet.linkStatus() == LinkON) {
93 Serial.println(
"Connected");
94 }
else if (
Ethernet.linkStatus() == LinkOFF) {
95 Serial.println(
"Disconnected");
100 Serial.println(
"--------------------------------");
111 Serial.println(
"Raw packet data (hex):");
112 for (
size_t i = 0; i < size; i++) {
113 if (buffer[i] < 0x10)
117 if ((i + 1) % 16 == 0)
128 Serial.println(
"--- Packet Header ---");
129 Serial.print(
"Packet Type: ");
130 Serial.print(
static_cast<int>(header.packet_type));
134 switch (header.packet_type) {
136 Serial.print(
"BOARD_HEARTBEAT");
139 Serial.print(
"SERVER_HEARTBEAT");
142 Serial.print(
"SENSOR_DATA");
145 Serial.print(
"ACTUATOR_COMMAND");
148 Serial.print(
"SENSOR_CONFIG");
151 Serial.print(
"ACTUATOR_CONFIG");
157 Serial.print(
"ABORT_DONE");
160 Serial.print(
"CLEAR_ABORT");
167 Serial.print(
"Version: ");
168 Serial.println(header.version);
169 Serial.print(
"Timestamp: ");
170 Serial.println(header.timestamp);
171 Serial.println(
"---------------------");
178 const daq::BoardHeartbeatPacket& data) {
179 Serial.println(
"=== Board Heartbeat Packet ===");
182 Serial.println(
"--- Packet Data ---");
184 "(Board role is implied by board_id / deployment; no board_type "
186 Serial.print(
"Board ID: ");
187 Serial.println(data.board_id);
189 Serial.print(
"Engine State: ");
190 Serial.print(
static_cast<int>(data.engine_state));
192 switch (data.engine_state) {
197 Serial.print(
"PRESSURIZING");
206 Serial.print(
"POST_FIRE");
214 Serial.print(
"Board State: ");
215 Serial.print(
static_cast<int>(data.board_state));
217 switch (data.board_state) {
225 Serial.print(
"CONNECTION_LOSS_DETECTED");
228 Serial.print(
"NO_CONNECTION_ABORT");
231 Serial.print(
"NO_CONN_ABORT_FOLLOWER");
237 Serial.print(
"NO_PT_ABORT");
240 Serial.print(
"ABORT_FINISHED");
243 Serial.print(
"STANDALONE_ABORT");
246 Serial.print(
"SELF_TEST");
253 Serial.println(
"==============================");
260 const daq::ServerHeartbeatPacket& data) {
261 Serial.println(
"=== Server Heartbeat Packet ===");
264 Serial.println(
"--- Packet Data ---");
265 Serial.print(
"Engine State: ");
266 Serial.print(
static_cast<int>(data.engine_state));
268 switch (data.engine_state) {
273 Serial.print(
"PRESSURIZING");
282 Serial.print(
"POST_FIRE");
289 Serial.println(
"===============================");
298 if (!buffer || size == 0) {
299 Serial.println(
"Error: Invalid buffer or size");
304 const size_t min_header_size =
sizeof(daq::PacketHeader);
305 if (size < min_header_size) {
306 Serial.println(
"Error: Packet too small to contain header");
307 Serial.print(
"Received size: ");
309 Serial.print(
" bytes, minimum required: ");
310 Serial.print(min_header_size);
317 daq::PacketHeader header;
318 memcpy(&header, buffer, min_header_size);
321 Serial.println(
"\n--- Attempting to decode packet ---");
325 bool decoded =
false;
327 switch (header.packet_type) {
329 daq::BoardHeartbeatPacket heartbeatData;
335 Serial.println(
"Error: Failed to parse Board Heartbeat packet");
336 Serial.print(
"Expected size: ");
337 Serial.print(
sizeof(daq::PacketHeader) +
338 sizeof(daq::BoardHeartbeatPacket));
339 Serial.print(
" bytes, received: ");
347 daq::ServerHeartbeatPacket heartbeatData;
354 "Error: Failed to parse Server Heartbeat packet");
355 Serial.print(
"Expected size: ");
356 Serial.print(
sizeof(daq::PacketHeader) +
357 sizeof(daq::ServerHeartbeatPacket));
358 Serial.print(
" bytes, received: ");
367 "Packet type: SENSOR_DATA (not yet implemented for full "
369 Serial.print(
"Packet size: ");
378 "Packet type: ACTUATOR_COMMAND (not yet implemented for "
380 Serial.print(
"Packet size: ");
389 "Packet type: SENSOR_CONFIG (not yet implemented for full "
391 Serial.print(
"Packet size: ");
400 "Packet type: ACTUATOR_CONFIG (not yet implemented for full "
402 Serial.print(
"Packet size: ");
411 "Packet type: ABORT (not yet implemented for full decoding)");
412 Serial.print(
"Packet size: ");
421 "Packet type: ABORT_DONE (not yet implemented for full "
423 Serial.print(
"Packet size: ");
432 "Packet type: CLEAR_ABORT (not yet implemented for full "
434 Serial.print(
"Packet size: ");
442 Serial.print(
"Error: Unknown packet type: ");
443 Serial.println(
static_cast<int>(header.packet_type));
449 Serial.println(
"\n--- Decoding failed, showing raw data ---");
453 Serial.println(
"----------------------------------------\n");
462 int packetSize =
udp.parsePacket();
464 Serial.print(
"Received packet of size ");
466 Serial.print(
" bytes from ");
478 Serial.println(
"Error: Failed to read packet data");
static EthernetClass Ethernet
IPAddress dns(192, 168, 2, 1)
IPAddress subnet(255, 255, 255, 0)
IPAddress staticIP(192, 168, 2, BOARD_ID_DEFAULT)
IPAddress gateway(0, 0, 0, 0)
static IPAddress subnet(255, 255, 255, 0)
static IPAddress gateway(192, 168, 2, 1)
char packetBuffer[UDP_TX_PACKET_MAX_SIZE]
IPAddress dns(192, 168, 2, 1)
IPAddress staticIP(192, 168, 2, 101)
void printBoardHeartbeat(const daq::PacketHeader &header, const daq::BoardHeartbeatPacket &data)
Prints Board Heartbeat packet information.
void decodeAndPrintPacket(const uint8_t *buffer, size_t size)
Attempts to decode and print packet information.
void printBoardInfo()
Prints all board networking information to Serial.
void printServerHeartbeat(const daq::PacketHeader &header, const daq::ServerHeartbeatPacket &data)
Prints Server Heartbeat packet information.
void printPacketHeader(const daq::PacketHeader &header)
Prints packet header information.
void printRawPacketData(const uint8_t *buffer, size_t size)
Prints raw packet data in hex format for debugging.
bool parse_server_heartbeat_packet(const uint8_t *buffer, size_t buffer_size, PacketHeader &header_out, ServerHeartbeatPacket &data_out)
Parses a Server Heartbeat 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.
@ CONNECTION_LOSS_DETECTED