static void send_cmd(libusb_device_handle *h, int e, uint8_t flag, uint32_t command, uint32_t offset, uint8_t size) { cmd[RKFT_CID ] = cid++; cmd[RKFT_FLAG] = flag; cmd[RKFT_SIZE] = size; SETBE32(&cmd[RKFT_COMMAND], command); SETBE32(&cmd[RKFT_OFFSET ], offset ); libusb_bulk_transfer(h, e|LIBUSB_ENDPOINT_OUT, cmd, sizeof(cmd), &tmp, 0); }
static void send_reset(uint8_t flag) { long int r = random(); memset(cmd, 0 , 31); memcpy(cmd, "USBC", 4); SETBE32(cmd+4, r); SETBE32(cmd+12, RKFT_CMD_RESETDEVICE); cmd[16] = flag; libusb_bulk_transfer(h, 2|LIBUSB_ENDPOINT_OUT, cmd, sizeof(cmd), &tmp, 0); }
static void send_cmd(uint32_t command, uint32_t offset, uint16_t nsectors) { long int r = random(); memset(cmd, 0 , 31); memcpy(cmd, "USBC", 4); if (r) SETBE32(cmd+4, r); if (offset) SETBE32(cmd+17, offset); if (nsectors) SETBE16(cmd+22, nsectors); if (command) SETBE32(cmd+12, command); libusb_bulk_transfer(h, 2|LIBUSB_ENDPOINT_OUT, cmd, sizeof(cmd), &tmp, 0); }
static void send_exec(uint32_t krnl_addr, uint32_t parm_addr) { long int r = random(); memset(cmd, 0 , 31); memcpy(cmd, "USBC", 4); if (r) SETBE32(cmd+4, r); if (krnl_addr) SETBE32(cmd+17, krnl_addr); if (parm_addr) SETBE32(cmd+22, parm_addr); SETBE32(cmd+12, RKFT_CMD_EXECUTESDRAM); libusb_bulk_transfer(h, 2|LIBUSB_ENDPOINT_OUT, cmd, sizeof(cmd), &tmp, 0); }