私は、libusb と私たちのケースに対応するネイティブ ドライバー (CESG502、CASIO 製) を介して、シリアル デバイスと USB デバイスと通信できるようにする必要がある通信ライブラリの作成者です。シリアル通信と libusb 通信の両方が管理されています。現在、CESG502 (目的のために作成されたドライバー) の使用を統合したいと考えています。
主な問題は、このドライバーに起因します。シリアル ドライバーと同じ方法でバッファリングを管理するのではなく (より多くのデータを受信した場合、ユーザーが要求するまで保存されます)、受信したデータよりも大きなバッファーを開発者が提供することを期待しています。これはReadFile
、実際に受信したいバイト数(シリアル、そうでなければ、決して来ない残りを待つだけ)またはバッファのサイズ(CESG502;これをしないと、ドライバーは ) を返しますERROR_GEN_FAILURE
。
ドライバーはプロプライエタリなので、修正できません。ライブラリの設計上、ほとんどの場合、ライブラリが動作するように作られているため、ドライバが CESG502 であるかどうかを特定する必要があります。探しています。だから私はここでそれを使用しようとしました:
/* 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());
残念ながら、ERROR_INVALID_PARAMETER
シリアル デバイスでも発生する 0x57 ( ) エラーが継続的に発生します。私はページが言ったことに従っています、私はたくさんのことを試しました(ReturnedBytes
への設定sizeof(CHANGER_PRODUCT_DATA)
、初期化ProductData
、とにかくデータの読み取り、...)そして私はこのエラーがどこから来たのかを見つけました...
これを解決する方法を知っている場合は、事前に感謝します:)