0

我是一个通信库的作者,它需要能够通过 libusb 和对应于我们案例的本机驱动程序(CESG502,由 CASIO 制造)与串行设备和 USB 设备进行通信。串口和 libusb 通信都是托管的,我现在想集成使用 CESG502(为我们想要的驱动程序)。

主要问题来自这个驱动程序:而不是像串行驱动程序那样管理缓冲(如果接收到更多数据,它会存储直到用户请求它),它希望开发人员提供比接收到的数据更大的缓冲区。这导致了 的两种不兼容的用法ReadFile,我必须只输入我想要实际接收的字节数(串行,否则它只会等待其余的永远不会到来)或缓冲区的大小(CESG502;如果我不'不这样做,驱动程序返回一个ERROR_GEN_FAILURE)。

驱动程序是专有的,所以我无法更正它。由于我的库的设计,我需要确定驱动程序是否为 CESG502,以便在大多数情况下使该库正常工作。我查看并找到了IOCTL_CHANGER_GET_PRODUCT_DATA,它看起来可以带来我的信息米找。所以我尝试在这里使用它:

/* get product data */
CHANGER_PRODUCT_DATA ProductData; DWORD ReturnedBytes = 0;
DWORD wsuccess = DeviceIoControl(fhandle, IOCTL_CHANGER_GET_PRODUCT_DATA,
    NULL, 0, &ProductData, sizeof(CHANGER_PRODUCT_DATA),
    &ReturnedBytes, 0);
if (wsuccess) logr_info("SUCCESS!");
else logr_info("Error #0x%08lx occurred", GetLastError());

不幸的是,我不断收到 0x57 ( ERROR_INVALID_PARAMETER) 错误,这也发生在串行设备上。我正在按照页面上所说的内容进行操作,我已经尝试了很多事情(设置ReturnedBytessizeof(CHANGER_PRODUCT_DATA),初始化ProductData,无论如何读取数据,......),我发现了这个错误来自哪里......

如果您知道如何解决此问题,请提前感谢:)

4

0 回答 0