// SPDX-FileCopyrightText: 2024 Geoffrey D. Bennett // SPDX-License-Identifier: GPL-3.0-or-later #pragma once #include // Error codes #define FCP_SOCKET_ERR_INVALID_MAGIC 1 #define FCP_SOCKET_ERR_INVALID_COMMAND 2 #define FCP_SOCKET_ERR_INVALID_LENGTH 3 #define FCP_SOCKET_ERR_INVALID_HASH 4 #define FCP_SOCKET_ERR_INVALID_USB_ID 5 #define FCP_SOCKET_ERR_CONFIG 6 #define FCP_SOCKET_ERR_FCP 7 #define FCP_SOCKET_ERR_TIMEOUT 8 #define FCP_SOCKET_ERR_READ 9 #define FCP_SOCKET_ERR_WRITE 10 #define FCP_SOCKET_ERR_NOT_LEAPFROG 11 #define FCP_SOCKET_ERR_INVALID_STATE 12 #define FCP_SOCKET_ERR_MAX 12 // Protocol constants #define FCP_SOCKET_PROTOCOL_VERSION 1 #define FCP_SOCKET_MAGIC_REQUEST 0x53 #define FCP_SOCKET_MAGIC_RESPONSE 0x73 // Maximum payload length (2MB) #define MAX_PAYLOAD_LENGTH 2 * 1024 * 1024 // Request types #define FCP_SOCKET_REQUEST_REBOOT 0x0001 #define FCP_SOCKET_REQUEST_CONFIG_ERASE 0x0002 #define FCP_SOCKET_REQUEST_APP_FIRMWARE_ERASE 0x0003 #define FCP_SOCKET_REQUEST_APP_FIRMWARE_UPDATE 0x0004 #define FCP_SOCKET_REQUEST_ESP_FIRMWARE_UPDATE 0x0005 // Response types #define FCP_SOCKET_RESPONSE_VERSION 0x00 #define FCP_SOCKET_RESPONSE_SUCCESS 0x01 #define FCP_SOCKET_RESPONSE_ERROR 0x02 #define FCP_SOCKET_RESPONSE_PROGRESS 0x03 extern const char *fcp_socket_error_messages[]; // Message structures #pragma pack(push, 1) struct fcp_socket_msg_header { uint8_t magic; uint8_t msg_type; uint32_t payload_length; }; struct firmware_payload { uint32_t size; uint16_t usb_vid; uint16_t usb_pid; uint8_t sha256[32]; uint8_t md5[16]; uint8_t data[]; }; struct version_msg { struct fcp_socket_msg_header header; uint8_t version; }; struct progress_msg { struct fcp_socket_msg_header header; uint8_t percent; }; struct error_msg { struct fcp_socket_msg_header header; int16_t error_code; }; #pragma pack(pop)