reTerminalのボタン割り当てを変更する

Seeed K.K.の松岡です。
今回は、reTerminalのボタン割り当てを変更する方法を紹介します。

reTerminalの前面ボタン

reTerminalは前面に4つの物理ボタンを持っています。利用シーンによってはタッチパネルよりも、このボタンのほうが便利だったりします。
このボタンを押すと、キーボードから'a', 's', 'd', 'f'が入力される(ように振る舞う)ので、アプリケーションでは'a', 's', 'd', 'f'の入力をキャッチすることでボタンが押されたかどうかが分かります。

'a', 's', 'd', 'f'は困る

しかし、ときにはこれらの文字が入力されてしまうのが邪魔だったり、実際のキーボード入力と区別できなくて困ることがあります。 たとえば、テキストエディタのようなアプリケーションのとき、前面ボタンで'a', 's', 'd', 'f'が入力されてしまったり、キーボードの'a', 's', 'd', 'f'を押したときに前面ボタンを押したと判断してしまいます。

そこで、前面ボタンのキーコードを変更して、前面ボタンとキーボードを区別できるようにしましょう。

前面ボタンのキーコードを変更

ドライバーをインストールする

reTerminalに関連したドライバーを最新にします。

$ git clone --depth 1 https://github.com/Seeed-Studio/seeed-linux-dtoverlays
$ cd seeed-linux-dtoverlays
$ sudo ./scripts/reTerminal.sh
$ sudo reboot

古いreTerminal(Board VersionがV1.6よりも古い)は最新のドライバーをインストールするとボタン入力が動かなくなってしまいます。cat /sys/class/input/event*/device/nameコマンドを実行してgpio_keysが表示されないときは、/boot/config.txtdtoverlay=reTerminal,tp_rotate=1dtoverlay=reTerminal,tp_rotate=1,addr=0x20,mcp23008に変更して再起動してください。

キーコードを変更

前面ボタンを押したときのキーコードは~/seeed-linux-dtoverlays/overlays/rpi/reTerminal-overlay.dtslinux,code = <xxx>;に書かれているので、下記のとおり変更します。

  • linux,code = <30>; -> linux,code = <0x290>;
  • linux,code = <31>; -> linux,code = <0x291>;
  • linux,code = <32>; -> linux,code = <0x292>;
  • linux,code = <33>; -> linux,code = <0x293>;

そして、reTerminal.shを実行してOSに反映します。

$ cd ~/seeed-linux-dtoverlays
$ sudo ./scripts/reTerminal.sh
$ sudo reboot

これで、前面ボタンのキーコードを変更できました。
evtestコマンドで、コードが変わっているのが確認できます。

0x290は10進数で656ですね。

前面ボタンのクリック判定(Python)

さて、アプリケーションで前面ボタンのクリックはどう判定したらいいのでしょうか?
Seeedが公開しているPython Library for reTerminalに、キーコードを指定する機能を追加しました。seeed_python_reterminal.buttonkey_codeに、キーコードを配列で設定できます。

例えば、test_button.pyならdevice = rt.get_button_device()の前に、下記コードを追加すればOKです。

rt_btn.key_code = [0x290, 0x291, 0x292, 0x293]

参考リンク

変更履歴

日付 変更者 変更内容
2022/9/27 松岡 作成