#ifndef PROTOCOL_H #define PROTOCOL_H #include #include #define PROTOCOL_MAX_PATH_LEN 32U typedef enum { PS_WAIT_SYNC = 0, PS_READ_FRAME_TYPE, PS_READ_REQ, PS_READ_REQ_DATA, } protocol_state_t; typedef enum { CMD_GET_PROTOCOL_VERSION = 0x00, CMD_GET_FIRMWARE_STATUS = 0x01, CMD_GET_FLASH_STATUS = 0x02, CMD_CONFIRM_FIRMWARE = 0x03, CMD_REBOOT = 0x04, CMD_LIST_DIR = 0x10, CMD_CHECK_FILE_CRC = 0x11, CMD_MKDIR = 0x12, CMD_RM = 0x13, CMD_STAT = 0x18, CMD_RENAME = 0x19, CMD_PUT_FILE = 0x20, CMD_PUT_FW = 0x21, CMD_GET_FILE = 0x22, CMD_PUT_TAGS = 0x24, CMD_GET_TAGS = 0x25, CMD_PLAY = 0x30, CMD_STOP = 0x31, CMD_SET_SETTING = 0x40, CMD_GET_SETTING = 0x41, } protocol_cmd_t; typedef enum { FRAME_REQ = 0x01, FRAME_REQ_DATA = 0x02, FRAME_RESP_ACK = 0x10, FRAME_RESP_DATA = 0x11, FRAME_RESP_STREAM_START = 0x12, // FRAME_RESP_STREAM_CHUNK = 0x13, FRAME_RESP_STREAM_END = 0x14, FRAME_RESP_LIST_START = 0x15, FRAME_RESP_LIST_CHUNK = 0x16, FRAME_RESP_LIST_END = 0x17, FRAME_RESP_ERROR = 0xFF, } protocol_frame_type_t; typedef enum { P_ERR_NONE = 0x00, P_ERR_INVALID_COMMAND = 0x01, P_ERR_INVALID_PARAMETERS = 0x02, P_ERR_COMMAND_TOO_LONG = 0x03, P_ERR_FILE_NOT_FOUND = 0x10, P_ERR_ALREADY_EXISTS = 0x11, P_ERR_NOT_A_DIRECTORY = 0x12, P_ERR_IS_A_DIRECTORY = 0x13, P_ERR_ACCESS_DENIED = 0x14, P_ERR_NO_SPACE = 0x15, P_ERR_FILE_TOO_LARGE = 0x16, P_ERR_IO = 0x20, P_ERR_TIMEOUT = 0x21, P_ERR_CRC_MISMATCH = 0x22, P_ERR_TRANSFER_ABORTED = 0x23, P_ERR_NOT_SUPPORTED = 0x30, P_ERR_BUSY = 0x31, P_ERR_INTERNAL = 0x32, } protocol_error_t; typedef enum { FW_STATUS_CONFIRMED = 0x00, FW_STATUS_PENDING = 0x01, FW_STATUS_TESTING = 0x02, } firmware_status_t; void protocol_thread_entry(void *p1, void *p2, void *p3); #endif // PROTOCOL_H