update.この記事についてドライバを書いたことのない自分が、調べながらドライバを書くまでの記録を行う。最終的に実装したのはユーザーアプリケーションなので、OSとハードウェアを橋渡しするという意味でのドライバにはマッチしないかもしれない。なる言い回しがあったため、広義な意味でのドライバにはマッチすると考えている。動作の定義は「押したボタンに対応するキーイベントが発生すること」とする。ちなみにすでに似たようなソリューションはあるものの、相性の問題なのか斜めキーがうまく動作しなかったため今に至る。ドライバの区分についていきなり実装に入る前に、概要だけは把握した方がいいと思った。公式ドキュメントは親切な印象。以下、特に重要だと感じた部分を抜粋する。ユーザー空間Introductionに詳しい。多くのドライバはユーザー空間で動作させることができるネットワークカーネルエクステンションとファイルシステムに関するものは原則としてカーネルで動作する必要がある今回はユーザー空間での動作を想定する。Kitという、I/Oをラップしたフレームワークが提供されている。多くのドライバはこのフレームワークを利用して実装できる。Supportから判断できる。利用して入力を制御できることが先ほどのリストから分かる。Optionsで概要を把握することができる。手元のUSBデバイスのベンダーIDとプロダクトIDを調べる以下のコマンドを実行しデバイスの情報を取得する。SPUSBDataType以下の出力が得られた。Toolとして実装する。作成した時点でのファイルは以下のようになる。利用すると手軽にHIDからの入力を扱うことができる。マッチングするデバイスのIDに先ほどの情報を設定する。実装についてはMacOSXでUSBデバイスからの入力を取得するを参考にした。以下のimport文を追加する。IOHIDManagerをデフォルトの設定で作成する。マッチングするデバイスの条件を定義する。上記の条件を設定する。作成したIOHIDManagerを現在のループに紐付ける。デバイスを作成したIOHIDManagerで扱うように設定する。第二引数にkIOHIDOptionsTypeSeizeDeviceを渡すことで、排他的に扱うように設定している。入力ハンドラを設定する。ループに入り入力を待ち受ける。