macOSからPi Picoを使う - その25 [Pi Pico]
macOSからPi Picoをvendor specific classのデバイスとして接続するため当面libsubを使うことを決めた。本当はIOUSBHostを使いたかったんだけど、使い方を理解するための情報が完全とは言い難い。簡単なサンプルコードひとつあるだけでずいぶん違うはずなんだけど、それは存在しない。
どうもAppleのsample codeって開発者に親切にしよう、分かりやすくしよう、というよりは、新しい機能を開陳するためのものばかりになっているような気がする。古いframeworkはdeprecatedになってそれを使ったsample codeはどんどん削除されるのに、新しいframeworkに対応した、古いものに代わるsample codeはアップされない。
その結果シモジモにわかりやすいsample codeの数はじわじわ減ってる、と言う気がする。最底辺デベロッパへの対応力が余暇+αぐらいのlibusbに比べて、物量的には圧倒しているはずの世界的な超巨大企業Appleがなぜこんなにも劣るのか、というのが僕には全然理解できない。
なぜか、というと簡単には「やる気がない」ということだろうな。気を取り直してlibusbの続き...
で、引数にNULLを渡すとデフォルトコンテクストを使う。libusb_contextへのポインタを渡した固有コンテクストとデフォルトコンテクストが両立できるかはよくわからない。初期化で0が返ると成功。
libusb_set_log_cb()関数にコールバックを渡しておくと、ログメッセージを引数にしてコールバックが呼ばれる。
引数のmodeは
で、コールバックに渡される引数levelは
と言う分類になってる。しかしLIBUSB_LOG_LEVEL_DEBUGを指定しても正常な場合はあまり出力されないようである。
libusb_get_device_list()で接続されているデバイスの情報がlistに入ってデバイス数が返る。デバイス情報はlibusb_deviceというopaqueな構造体になっている。この構造体はレファレンスカウンタ方式になっていて、libusb_get_device_list()から帰ってきた時点でレファレンスカウンタは1で、libusb_free_device_list()でリストされた構造体全部のレファレンスカウンタをunref_devicesだけ減らすようになっている。
個別にレファレンスカウンタを操作するには
の関数を使う。
どうもAppleのsample codeって開発者に親切にしよう、分かりやすくしよう、というよりは、新しい機能を開陳するためのものばかりになっているような気がする。古いframeworkはdeprecatedになってそれを使ったsample codeはどんどん削除されるのに、新しいframeworkに対応した、古いものに代わるsample codeはアップされない。
その結果シモジモにわかりやすいsample codeの数はじわじわ減ってる、と言う気がする。最底辺デベロッパへの対応力が余暇+αぐらいのlibusbに比べて、物量的には圧倒しているはずの世界的な超巨大企業Appleがなぜこんなにも劣るのか、というのが僕には全然理解できない。
なぜか、というと簡単には「やる気がない」ということだろうな。気を取り直してlibusbの続き...
17.3.1 初期化と終了
ライブラリの初期化と終了はint libusb_init(libusb_context **context); void libusb_exit(libusb_context *ctx);
17.3.2 debug
デバグ用にログを書き出せる。この設定は当然初期化した後すぐすべきだろう。typedef void(*libusb_log_cb)(libusb_context *ctx, enum libusb_log_level level, const char *str); void libusb_set_log_cb(libusb_context *ctx, libusb_log_cb cb, int mode);
引数のmodeは
LIBUSB_LOG_CB_GLOBAL | 全部のメッセージ |
LIBUSB_LOG_CB_CONTEXT | コンテクストごと |
で、コールバックに渡される引数levelは
LIBUSB_LOG_LEVEL_NONE | ナシ |
LIBUSB_LOG_LEVEL_ERROR | エラー |
LIBUSB_LOG_LEVEL_WARNING | 警告 |
LIBUSB_LOG_LEVEL_INFO | 情報 |
LIBUSB_LOG_LEVEL_DEBUG | 全部 |
と言う分類になってる。しかしLIBUSB_LOG_LEVEL_DEBUGを指定しても正常な場合はあまり出力されないようである。
17.3.3 デバイス列挙
typedef struct libusb_device libusb_device; ssize_t libusb_get_device_list(libusb_context *ctx, libusb_device ***list); void libusb_free_device_list(libusb_device **list, int unref_devices);
個別にレファレンスカウンタを操作するには
libusb_device *libusb_ref_device(libusb_device *dev); void libusb_unref_device(libusb_device *dev);
2021-08-14 21:09
nice!(0)
コメント(0)
コメント 0