0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

libmcp2221を使ってみた

Posted at

まったく同じタイトルで @yamori813 さんが記事を書かれています。

すごく助かりました! ここでは @yamori813 さんの記事を補足するかたちで投稿いたします。

Win10環境でビルドする

[1] https://github.com/ZakKemble/libmcp2221
[2] https://github.com/signal11/hidapi

結論から書きますと... MinGW w/ PowerShell および WSL2でコンパイルできました。

PS >mingw32-gcc.exe  ..\..\libmcp2221\hid.c ..\..\libmcp2221\libmcp2221.c main.c  -lsetupapi -o gpio.exe
$ x86_64-w64-mingw32-gcc ../../libmcp2221/hid.c ../../libmcp2221/libmcp2221.c main.c -lsetupapi -o gpio.exe
  • [1] と [2] を適当な場所に展開します。
  • [1] の example/gpio に移動します。
  • ../../libmcp2221/ に, [2]のwindowフォルダーにあるhid.cと,[2]のhidapiフォルダーにあるhidapi.hをコピーします。
  • MinGWを用意してPATHを通します。WSL2では sudo apt install mingw-w64 で導入しました。

補足 はまったところ

[1] で用意されたMakefileではコンパイルできませんでした。「未定義だよ!」的なエラーが出ます。

よくよく調べると,MinGWのリンク時に出ているようなのです。[2] は MinGW でビルド成功しましたので,そのMakefileを参考に,ソースファイルの指定,ライブラリーの指定を[2]にならって修正したところ,[1]のコンパイルに成功しました。

休日のほぼ2日間費やしました... いやー,Cのコンパイルの基本がわかっていないようです... 勉強になりました(前向き)

Makefileを使う場合は,以下のような感じになりました。

5c5
< 	main.c
---
> 	../../libmcp2221/hid.c ../../libmcp2221/libmcp2221.c main.c # 追加
21c21
< 	-lmcp2221
---
> 	-lsetupapi # 変更
23c23,26
< EXECUTABLE=$(PROJECT)
---
> EXECUTABLE=$(PROJECT).exe # 変更
> 
> #CC=x86_64-w64-mingw32-gcc # for WSL
> CC=mingw32-gcc # for Win
25d27
< CC=gcc
38c40,41
< 	rm -rf *.o $(EXECUTABLE)
---
> 	del *.o ..\..\libmcp2221\*.o $(EXECUTABLE) # win
> 	#rm -rf *.o ..\..\libmcp2221\*.o $(EXECUTABLE) # WSL

実行例

PS >mingw32-make.exe -f .\Makefile.mingw-win

Mac Big Sureの場合

@yamori813 の記事のとおり,ビルドできました。

$ pwd
/Users/numeru55/Documents/libmcp2221-master/examples/gpio
$ cc -o main ../../libmcp2221/hid.c ../../libmcp2221/libmcp2221.c main.c -framework IOKit -framework CoreFoundation
$ ls
Makefile        libmcp2221.dll  main.c
gpio.exe        main*           main.o
$

参考

以下のサンプルは,[2]で展開したディレクトリーに直接ソースを置いて,Makefile.mingwを少し手直ししてコンパイルできました。若干コンパイルエラー出ましたが,私が理解できる範囲で修正して乗り越えました。(uint8_t -> unsigned char等)

このソースをデータシートと比較しながら読むことで,とてもよく理解ができました。これをもとに一つ一つ再構築していくのもいいですが,せっかくなので [1] を利用する方法を模索してみました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?