107 lines
2.3 KiB
C
107 lines
2.3 KiB
C
#ifndef UF2_HID_H
|
|
#define UF2_HID_H 1
|
|
|
|
#define HF2_CMD_BININFO 0x0001
|
|
// no arguments
|
|
#define HF2_MODE_BOOTLOADER 0x01
|
|
#define HF2_MODE_USERSPACE 0x02
|
|
struct HF2_BININFO_Result {
|
|
uint32_t mode;
|
|
uint32_t flash_page_size;
|
|
uint32_t flash_num_pages;
|
|
uint32_t max_message_size;
|
|
};
|
|
|
|
#define HF2_CMD_INFO 0x0002
|
|
// no arguments
|
|
// results is utf8 character array
|
|
|
|
#define HF2_CMD_RESET_INTO_APP 0x0003
|
|
// no arguments, no result
|
|
|
|
#define HF2_CMD_RESET_INTO_BOOTLOADER 0x0004
|
|
// no arguments, no result
|
|
|
|
#define HF2_CMD_START_FLASH 0x0005
|
|
// no arguments, no result
|
|
|
|
#define HF2_CMD_WRITE_FLASH_PAGE 0x0006
|
|
struct HF2_WRITE_FLASH_PAGE_Command {
|
|
uint32_t target_addr;
|
|
uint32_t data[0];
|
|
};
|
|
// no result
|
|
|
|
#define HF2_CMD_CHKSUM_PAGES 0x0007
|
|
struct HF2_CHKSUM_PAGES_Command {
|
|
uint32_t target_addr;
|
|
uint32_t num_pages;
|
|
};
|
|
struct HF2_CHKSUM_PAGES_Result {
|
|
uint16_t chksums[0 /* num_pages */];
|
|
};
|
|
|
|
#define HF2_CMD_READ_WORDS 0x0008
|
|
struct HF2_READ_WORDS_Command {
|
|
uint32_t target_addr;
|
|
uint32_t num_words;
|
|
};
|
|
struct HF2_READ_WORDS_Result {
|
|
uint32_t words[0 /* num_words */];
|
|
};
|
|
|
|
#define HF2_CMD_WRITE_WORDS 0x0009
|
|
struct HF2_WRITE_WORDS_Command {
|
|
uint32_t target_addr;
|
|
uint32_t num_words;
|
|
uint32_t words[0 /* num_words */];
|
|
};
|
|
// no result
|
|
|
|
#define HF2_CMD_DMESG 0x0010
|
|
// no arguments
|
|
// results is utf8 character array
|
|
|
|
typedef struct {
|
|
uint32_t command_id;
|
|
uint16_t tag;
|
|
uint8_t reserved0;
|
|
uint8_t reserved1;
|
|
|
|
union {
|
|
struct HF2_WRITE_FLASH_PAGE_Command write_flash_page;
|
|
struct HF2_WRITE_WORDS_Command write_words;
|
|
struct HF2_READ_WORDS_Command read_words;
|
|
struct HF2_CHKSUM_PAGES_Command chksum_pages;
|
|
};
|
|
} HF2_Command;
|
|
|
|
typedef struct {
|
|
uint16_t tag;
|
|
union {
|
|
struct {
|
|
uint8_t status;
|
|
uint8_t status_info;
|
|
};
|
|
uint16_t status16;
|
|
};
|
|
union {
|
|
struct HF2_BININFO_Result bininfo;
|
|
uint8_t data8[0];
|
|
uint16_t data16[0];
|
|
uint32_t data32[0];
|
|
};
|
|
} HF2_Response;
|
|
|
|
#define HF2_FLAG_SERIAL_OUT 0x80
|
|
#define HF2_FLAG_SERIAL_ERR 0xC0
|
|
#define HF2_FLAG_CMDPKT_LAST 0x40
|
|
#define HF2_FLAG_CMDPKT_BODY 0x00
|
|
#define HF2_FLAG_MASK 0xC0
|
|
#define HF2_SIZE_MASK 63
|
|
|
|
#define HF2_STATUS_OK 0x00
|
|
#define HF2_STATUS_INVALID_CMD 0x01
|
|
|
|
#endif
|