[英]Device firmware update and libusbx API in Windows CE
我正在尝试从Windows CE环境更新Atmel设备上的固件。 这是我的源代码片段:
uint8_t buf[127];
struct libusb_device_handle *handle=NULL;
fp = fopen("\\Nandflash\\a.hex", "r+");
size_t re = fread(buf, 4, 1, fp);
cstatus = libusb_control_transfer(
handle,
LIBUSB_ENDPOINT_OUT|
LIBUSB_REQUEST_TYPE_VENDOR|
LIBUSB_RECIPIENT_INTERFACE,
0xA0, //Upload
0x01, //Address of the device
0,buf, sizeof(buf), 100);
由于控制转移,我一直得到-9
。 我该如何解决这个问题?
您在libusb_control_transfer函数中使用NULL句柄值。 您需要初始化libusb并打开设备才能与它通信:
uint8_t buf[127];
struct libusb_device_handle *handle=NULL;
struct libusb_context *context;
libusb_device **list;
libusb_device *found = NULL;
// Init libusb
libusb_init(&context);
// Open device your device
ssize_t cnt = libusb_get_device_list(NULL, &list);
for (i = 0; i < cnt; i++) {
libusb_device *device = list[i];
if (is_my_device(device)) {
found = device;
break;
}
}
// If your device is found, open it and perform transfer, then close
if (found) {
err = libusb_open(found, &handle);
if (!err) {
fp=fopen("\\Nandflash\\a.hex", "r+");
size_t re=fread(buf, 4, 1, fp);
cstatus=libusb_control_transfer(handle, LIBUSB_ENDPOINT_OUT|LIBUSB_REQUEST_TYPE_VENDOR|LIBUSB_RECIPIENT_INTERFACE,
0xA0,//upload
0x01, //address of device
0,buf, sizeof(buf), 100);
libusb_close(handle);
}
}
// Cleanup
libusb_free_device_list(list, 1);
libusb_exit(context);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.