Я пытаюсь связаться с контроллером движения galil DMC2070 через интерфейс USB. Интерфейс USB DMC2070 выполнен с чипом NET2888, но он не поддерживается windows 7 или 10. В настоящее время я загружаю драйвер winusb и пытаюсь установить с ним связь с libusb-1.0 (статически связанная 32-битная версия) и компилировать с mingw32-g cc под windows 10 (64 бита). Мне удалось запросить интерфейс, но я не мог отправлять или получать сообщения. Вот моя тестовая программа:
#include <cstring>
#include <stdio.h>
#include "libusb/libusb.h"
int main(){
char entry;
libusb_context *context = nullptr;
int status, nwrite;
unsigned char buffer[64] = "TP\0";
libusb_device_handle *handle = nullptr;
printf("start usb test (y/n) ?");
scanf("%c", &entry);
if(entry=='n') return 0;
libusb_init(&context);
handle = libusb_open_device_with_vid_pid(context, 0x06B3, 0x07D1);
if(handle){
printf("Device %04x:%04x opened with success\n",0x06B3,0x07D1);
}
else {
libusb_exit(nullptr);
printf("device %04x:%04x not found\n",0x06B3,0x07D1);
system("pause");
return 1;
}
libusb_set_auto_detach_kernel_driver(handle, 1);
status = libusb_claim_interface(handle,0);
if(status!=0){
libusb_close(handle);
libusb_exit(nullptr);
fprintf(stderr, "usb_claim_interface error %d\n", status);
system("pause");
return 2;
}
printf("Interface claimed successfully\n");
status = libusb_bulk_transfer(handle, USB_ENDPOINT_OUT,
buffer, 64, &nwrite, TIMEOUT);
if(status==0) printf("send %d bytes to device\n", nwrite);
else printf("error %d, writing to device\n", status);
libusb_release_interface(handle,0);
libusb_close(handle);
libusb_exit(nullptr);
system("pause");
return 0;
}
Вот итоговый результат:
start usb test (y/n) ?y
Device 06b3:07d1 opened with success
Interface claimed successfully
error -5, writing to device
Ошибка -5 соответствует LIBUSB_ERROR_NOT_FOUND, что означает «Объект не найден».
Я не привык иметь дело с интерфейсом USB напрямую, и надеюсь, что кто-то с гораздо большим опытом может пролить свет на мой путь. Я думаю об установке виртуальной машины с windows xp и попробуйте поменять драйвер.