首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Windows CE中的设备固件更新和libusbx API

Windows CE中的设备固件更新和libusbx API
EN

Stack Overflow用户
提问于 2013-12-05 12:35:24
回答 1查看 249关注 0票数 0

我正在尝试从Windows CE环境更新Atmel设备上的固件。下面是我的源代码片段:

代码语言:javascript
复制
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。我如何解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2013-12-05 23:15:03

您在libusb_control_transfer函数中使用了NULL句柄值。您需要初始化libusb并打开设备才能与其对话:

代码语言:javascript
复制
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);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20391514

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档