ハイハイスクールアドベンチャー_m5stack_m5cardputer版
差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
| ハイハイスクールアドベンチャー_m5stack_m5cardputer版 [2025/04/25 01:28] – [BTキーボードをつなごう] araki | ハイハイスクールアドベンチャー_m5stack_m5cardputer版 [2025/04/25 01:56] (現在) – [BTキーボードをつなごう] araki | ||
|---|---|---|---|
| 行 47: | 行 47: | ||
| ソースは、GitHubから取得して、Platform IOのプロジェクトとしてビルドする。 | ソースは、GitHubから取得して、Platform IOのプロジェクトとしてビルドする。 | ||
| - | < | + | < |
| $ git clone https:// | $ git clone https:// | ||
| </ | </ | ||
| 行 86: | 行 86: | ||
| Core/ | Core/ | ||
| - | < | + | < |
| cfg.clear_display = true; | cfg.clear_display = true; | ||
| M5.begin(cfg); | M5.begin(cfg); | ||
| 行 119: | 行 119: | ||
| CoreはWireでINTR=5だが、Core2はWire1でINTR=33だ。 | CoreはWireでINTR=5だが、Core2はWire1でINTR=33だ。 | ||
| - | < | + | < |
| class M5StackKeyBoard : public KeyBoard | class M5StackKeyBoard : public KeyBoard | ||
| { | { | ||
| 行 267: | 行 267: | ||
| キーボードからの通知が来るたびに、これが呼び出される。 | キーボードからの通知が来るたびに、これが呼び出される。 | ||
| Handle == 41は modifiers + 10文字分のキーバッファだが Handle == 29は modifiers + res + 6文字分のキーバッファとなっている。 | Handle == 41は modifiers + 10文字分のキーバッファだが Handle == 29は modifiers + res + 6文字分のキーバッファとなっている。 | ||
| - | そもそも Handle で見分けるのが正しいのかさえよくわかっていないがとにかく試して動いたキーボードはこのどちらかだった。 | + | <del>そもそも Handle で見分けるのが正しいのかさえよくわかっていないがとにかく試して動いたキーボードはこのどちらかだった。</ |
| + | 実はキーボードからのキー入力の通知についてはハンドルで見分けることができる。 | ||
| + | |||
| + | btstack でBLEキーボードをつないだ時に知ったのだけれど、Notification で渡されるパケットには実は二種類のハンドルが入っている。 | ||
| + | 一つが attribute handle で、もう一つが value handleだ。 | ||
| + | |||
| + | 私が調べたところ、attribute handle == 0x0040 のものがキーボードからのキー入力の通知になる。 | ||
| + | なので、btstack ではそのようにしてふるっているし、NimBLEでもそうするべきだろうと思ったのだが、NimBLERemoteCharacteristic クラスは、value_handleしか取得できない。 | ||
| + | |||
| + | value_handleの方はキーボードによってまちまちの値を返すので、使い物にならない。 | ||
| + | |||
| + | どうにかして attribute handle を取り出せないものかと NimBLEのコードを掘っていったら、あろうことか、attribute_handleの方は中で捨ててた。 | ||
| + | |||
| + | よって、NimBLEでは Notification Event Handlerの中でハンドルで処理を分けるやり方はできない、というのが結論である。 | ||
| 動作は単純で、前回渡されたデータと、今回渡ってきたデータとでキーバッファ部分を比べて、新しいのがあったらそれが今回入力されたキーだとみなして、keybufに積んでいく。 | 動作は単純で、前回渡されたデータと、今回渡ってきたデータとでキーバッファ部分を比べて、新しいのがあったらそれが今回入力されたキーだとみなして、keybufに積んでいく。 | ||
| 行 595: | 行 608: | ||
| その場合自力でビルドして置き換えておく。 | その場合自力でビルドして置き換えておく。 | ||
| - | < | + | < |
| $ git clone --recursive https:// | $ git clone --recursive https:// | ||
| $ cd mkspiffs | $ cd mkspiffs | ||
ハイハイスクールアドベンチャー_m5stack_m5cardputer版.1745544508.txt.gz · 最終更新: by araki
