USBジョイスティック製作ツールキット

久々のBLOG更新となった。
暫くあることにハマっていたのだ。
何にハマっていたのかというと次のとおり・・・・・

かれこれ一ヶ月ほど前、基板切削CNCや3Dプリンタが動く様になったので、これらを駆使した工作をしたくなった。今までにラダーペダルやフライトヨークを作ってきたので、そのノウハウを駆使してジョイスティックを作ってみようと考えた。
そして、そこで欲がでた。ペダルもヨークもジョイスティックも、PICマイコン上のファームウェアとしては大した違いはなく、USBのリポートディスクリプタの記述と、それに合わせてスイッチやボリュームの値を読んで転送する部分が違うだけなので、「違う部分」だけをROM上の一箇所にまとめて、そこだけ書き換える仕掛けにすれば、どんなデバイスでもすぐに作れる様になるんではなかろうかと。

図にすると下の様な感じ。一番下の部分だけ書き換えるとペダルにもヨークにもジョイスティックにもなる。 ゆくゆくはこの部分のデータを簡単に生成するツールを作ったら便利だろうと。
とりあえず「オープンスティック」等と名前をつけちゃったりして。。。

OpenStickMemorymap

概念を表す(メモリーマップ)

で、気軽に始めたのだが色々と問題が出てきた。
上記の「デバイス毎に異なる部分」にディスクリプタ類全てを置きたくはない。必要最低限のリポートディスクリプタやベンダID、プロダクトID等だけを置きたいのだ。その為にはどうしてもRAM上にディスクリプタ類を展開してUSBフレームワークに渡したくなる。
しかしPICのUSBフレームワークはディスクリプタの類をROM上に置く設計になっている。PIC18FマイコンはROMとRAMは別のアドレス空間を使うので、ROM上のデータを渡す関数をそのままRAM渡しでは使えないのだ。
そこでUSBフレームワーク(の一部)をRAMから渡せる様に改造した。

その他色々あったのだが少しずつ動き出した。たとえばこんな感じ・・・

OpenStick上でフライトヨーク

OpenStick上でフライトヨークを再現

またはこんな感じ・・・・

OpenStickAllButton

18本ある入力端子を全部ボタンにしてみた

おお、なかなか便利ではないか。もうすこし整理できたら公開します。。。