2013-12-05 3 views
0

Я пытаюсь обновить прошивку на устройстве Atmel от среды Windows CE. Вот фрагмент из моего исходного кода:Прошивка устройства udpate и libusbx API в Windows CE

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); 

Я постоянно получаю в результате передачи управления. Как я могу исправить эту проблему?

ответ

2

Вы используете значение дескриптора NULL в своей функции libusb_control_transfer. Вы должны инициализировать 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); 
+0

могли бы вы просветить меня с тем, что должно быть функцией is_my_device – user3068597

+0

Вы, вероятно, хотите сделать некоторые соответствия на вашем VID и PID для убедитесь, что вы знаете, о чем говорите. Все зависит от вашей реализации. – Preston

+0

Я пробовал r = libusb_get_device_descriptor (dev, &desc); сравнить desc vid и pid с известными vid и pid.Я также попытался получить дескриптор через devh = libusb_open_device_with_vid_pid (NULL, 0x05ba, 0x000a), я все еще получаю -9. правильный параметр для libusb_control_transfer? какие значения являются четвертым и пятым, предположительно? – user3068597

Смежные вопросы