HID protocol is now leaner
This commit is contained in:
parent
f36ddb271c
commit
40f9609b81
3 changed files with 11 additions and 39 deletions
|
|
@ -1,3 +1,3 @@
|
|||
all:
|
||||
mkdir -p ../built
|
||||
$(CC) -g -Wall tool.c ../hidapi/mac/hid.c -I../hidapi/hidapi -I. -framework IOKit -framework CoreFoundation -o ../built/uf2tool
|
||||
$(CC) -g -Wall tool.c ../hidapi/mac/hid.c -I../../uf2-samd21/inc -I../hidapi/hidapi -I. -framework IOKit -framework CoreFoundation -o ../built/uf2tool
|
||||
|
|
|
|||
|
|
@ -116,9 +116,9 @@ void talk_hid(HID_Dev *pkt, int cmd, const void *data, uint32_t len) {
|
|||
uint32_t saved = read32(pkt->buf);
|
||||
send_hid(pkt->dev, pkt->buf, 4 + len);
|
||||
recv_hid(pkt, -1);
|
||||
if (read32(pkt->buf) != saved)
|
||||
if ((read32(pkt->buf) & 0x7fffffff) != saved)
|
||||
fatal("invalid sequence number");
|
||||
if (read32(pkt->buf + 4) != 0)
|
||||
if (read32(pkt->buf) & 0x80000000)
|
||||
fatal("invalid status");
|
||||
}
|
||||
|
||||
|
|
@ -149,7 +149,7 @@ void verify(HID_Dev *cmd, uint8_t *buf, int size, int offset) {
|
|||
write32(cmd->buf + 8, numpages);
|
||||
talk_hid(cmd, HF2_CMD_CHKSUM_PAGES, 0, 8);
|
||||
for (int i = 0; i < numpages; ++i) {
|
||||
int sum = read16(cmd->buf + 8 + i * 2);
|
||||
int sum = read16(cmd->buf + 4 + i * 2);
|
||||
uint16_t crc = 0;
|
||||
for (int j = 0; j < cmd->pageSize; ++j) {
|
||||
crc = add_crc(buf[j], crc);
|
||||
|
|
@ -207,15 +207,15 @@ int main(int argc, char *argv[]) {
|
|||
}
|
||||
|
||||
talk_hid(&cmd, HF2_CMD_INFO, 0, 0);
|
||||
printf("INFO: %s\n", cmd.buf + 8);
|
||||
printf("INFO: %s\n", cmd.buf + 4);
|
||||
|
||||
serial(&cmd);
|
||||
//serial(&cmd);
|
||||
|
||||
talk_hid(&cmd, HF2_CMD_BININFO, 0, 0);
|
||||
if (read32(cmd.buf + 8) != HF2_MODE_BOOTLOADER)
|
||||
if (cmd.buf[4] != HF2_MODE_BOOTLOADER)
|
||||
fatal("not bootloader");
|
||||
|
||||
cmd.pageSize = read32(cmd.buf + 12);
|
||||
cmd.pageSize = read32(cmd.buf + 8);
|
||||
printf("page size: %d\n", cmd.pageSize);
|
||||
|
||||
srand(millis());
|
||||
|
|
@ -238,8 +238,9 @@ int main(int argc, char *argv[]) {
|
|||
|
||||
for (i = 0; i < sizeof(flashbuf); i += cmd.pageSize) {
|
||||
write32(cmd.buf + 4, i + 0x2000);
|
||||
talk_hid(&cmd, HF2_CMD_MEM_READ_PAGE, 0, 4);
|
||||
if (memcmp(cmd.buf + 8, flashbuf + i, cmd.pageSize)) {
|
||||
write32(cmd.buf + 8, cmd.pageSize / 4);
|
||||
talk_hid(&cmd, HF2_CMD_MEM_READ_WORDS, 0, 8);
|
||||
if (memcmp(cmd.buf + 4, flashbuf + i, cmd.pageSize)) {
|
||||
printf("%d,%d,%d != %d?\n", cmd.buf[8], cmd.buf[9], cmd.buf[10], flashbuf[i]);
|
||||
fatal("verification failed");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,29 +0,0 @@
|
|||
#ifndef UF2_HID_H
|
||||
#define UF2_HID_H 1
|
||||
|
||||
#define HF2_FLAG_PKT_LAST 0xC0
|
||||
#define HF2_FLAG_PKT_BODY 0x80
|
||||
#define HF2_FLAG_SERIAL 0x40
|
||||
#define HF2_FLAG_MASK 0xC0
|
||||
#define HF2_FLAG_RESERVED 0x00
|
||||
#define HF2_SIZE_MASK 63
|
||||
|
||||
#define HF2_CMD_INFO 0x0001
|
||||
#define HF2_CMD_RESET_INTO_APP 0x0002
|
||||
#define HF2_CMD_RESET_INTO_BOOTLOADER 0x0003
|
||||
#define HF2_CMD_WRITE_FLASH_PAGE 0x0004
|
||||
#define HF2_CMD_MEM_WRITE_PAGE 0x0005
|
||||
#define HF2_CMD_MEM_READ_PAGE 0x0006
|
||||
#define HF2_CMD_START_FLASH 0x0007
|
||||
#define HF2_CMD_BININFO 0x0008
|
||||
#define HF2_CMD_CHKSUM_PAGES 0x0009
|
||||
|
||||
#define HF2_MODE_BOOTLOADER 0x01
|
||||
#define HF2_MODE_USERSPACE 0x02
|
||||
|
||||
#define HF2_STATUS_OK 0x00000000
|
||||
#define HF2_STATUS_INVALID_CMD 0x00000001
|
||||
#define HF2_STATUS_WRONG_MODE 0x00000002
|
||||
|
||||
|
||||
#endif
|
||||
Loading…
Reference in a new issue