概要
Windows PC上で、libusbを使ったC言語プログラムをビルドして、動かした。
背景と目的
Windows PC上で、libusbを使いたいので、方法をメモる。
詳細
参考
- https://www.javadrive.jp/cstart/install/index6.html
- https://sites.google.com/site/memomuteki/tinylinux/linuxdepentabumojuruwozuochengshiyou
- https://text.baldanders.info/remark/2018/03/mingw-w64/
0. 環境
1. MinGWをダウンロード、インストール
2. libusbをダウンロード、インストール
2.1 ダウンロード
https://github.com/libusb/libusb
2.2 インストール
VS2019のdllを使うので、VS2019/MS64/dll/libusb-1.0.dllを以下のフォルダにコピーする。 これで、出来上がった実行ファイルがlibusb-1.0.dllを参照できる。
C:\Windows\System32
3. コンパイルしてみる
3.1 ソースコード
https://sites.google.com/site/memomuteki/tinylinux/linuxdepentabumojuruwozuochengshiyou
上記を参考に、使うものに合わせて編集。 PC側からの送信に使うエンドポイントアドレスがあるデバイスなので、そのアドレスでlibusb_interrupt_transfer関数を使って送信。
#define VID 0x**** // 使用するものに合わせる #define PID 0x**** // 使用するものに合わせる #define INTF_NUM 0 #define EP_ADDR 0x81 #define EP_ADDR2 0x01 // PC側からの送信に使うエンドポイントアドレス #define MAX_PACKET_SIZE 64 // 変更 : // libusb_set_auto_detach_kernel_driver() failed: LIBUSB_ERROR_NOT_SUPPORTEDと出るのでコメントアウト // r = libusb_set_auto_detach_kernel_driver(handle, TRUE); // if (r != LIBUSB_SUCCESS) { // printf("libusb_set_auto_detach_kernel_driver() failed: %s\n", libusb_error_name(r)); // goto exit; // } : // 送信用にコードを追加 int transferred2 = 1; buffer2[0] = 0x52; libusb_interrupt_transfer(handle, EP_ADDR2, buffer2, sizeof(buffer2), &transferred2, 100);
3.2 コンパイル
include/libusb-1.0のlibusb.hとVS2019フォルダのdllを参照する。
gcc -I./include/libusb-1.0 -L./VS2019/MS64/dll -lusb-1.0 -o test test.c
4. 動かす
実行した結果、正しく通信できた。
52 02 00 4a 02 53 39 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00