ユーザ用ツール

サイト用ツール


pocketterm35のキーマップを変更する

PocketTerm35のキーマップを変更する

概要

WaveShareが提供するPocketTerm35のキーボードコントローラはRP2040である

ファームウェアをカスタマイズすることで任意のキーマップを実装できる

そこで、サポートに、ファームウェアのソースを公開してほしいと連絡すると、Circuit Pythonだから、code.pyを変更すればキーマップをカスタマイズできるよ、といわれた

なるほど、それならばそれでやってみよう

CIRCUITPYをマウントする

Circuit Pythonのデバイスは、CIRCUITPYというUSBマスストレージとターミナルにつながるUSBシリアルデバイスを提供する

なので、ホスト端末からは CIRCUITPYが見えるはずだが、PocketTerm35には存在していない

サポート曰く「(RP2040の)リセットボタンを押せばみえるよ」とのことだが、リセットを押したとて出てこない

のちにわかるのだが、boot.pyのなかでCIRCUITPYを無効化しているので、基本的に出てこないのだ

boot.py
import storage
sotrage.disable_usb_drive()

ではどうするのか

いい感じにRESETボタンを連打する

これしかないので、いい感じにRESETボタンを連打してください

この問題についても、改造の過程で解消していきたいと思う

準備

Circuit Pythonの改造は比較的難易度は低いが、不完全なコードをデプロイすると PocketTerm35のキーボードが一切効かないなどということになりかねないリスクがある

なので、必ず以下の準備をする

  • CIRCUITPYのバックアップ
  • USBキーボード

できれば以下のものもあるとよい

  • ファームウェアの回復用のuf2ファイルセット1)

キーマップの設計

不便であると感じているのは以下の点

  • 左シフトキーがない
  • ゲームパッド風のキーがあるのにただ英字が割り当てられているだけでゲームパッドとして機能しない
  • マウスがないと困る場面でマウスとして使える機能が欲しい
  • CIRCUITPYの存在が不安定

の なので、以下のようにキーマップを変更することにする

  • TABキーは左シフトにして Fn+TABでTABキーとする
  • 右シフトキーには右シフトを割り当てる(デフォルトでは左シフトになっている)
  • Fn+上, Fn+下, Fn+左, Fn+右, Fn+L, Fn+Rはマウスカーソルの移動および左クリック、右クリックとする
  • Select, Start は常時ゲームパッドの Select/Start にする
  • 刻印通り Fn+SelectをPrint Screen、Fn+Start を Pauseとする
  • Fn+BでカーソルキーとABXYLRのアクションキーをゲームパッドとしてふるまうようにする
  • Fn+AでカーソルキーとABXYLRのアクションキーをデフォルトのカーソルキーとABXYLRの英字に戻す
  • 左Fnキーを押したままRP2040をRESETすると CIRCUITPYが有効化される(デフォルトでは無効)

依存するライブラリ

デフォルトのファームウェアとして入っている Circuit Pythonは Adafruit hidを利用しているが、なぜかhidという名前になっている

互換性を鑑みて adafruit_hid と入れ替えたい

Circuit Python LibirariesからVersion 10.x用のライブラリを取得し、中にある adafruit_hid のフォルダを丸ごと CIRCUITPY/libの下にコピーする

hidは消してしまっても構わない

hid_gamepad.pyはAdafruit CircuitPython_HIDのexamplesの中にある

これを同じく CIRCUITPY/libにコピーしておく

コード

boot.py

code.py

1)
Waveshareのサポートに頼むともらえるかもしれない
pocketterm35のキーマップを変更する.txt · 最終更新: by araki