ユーザ用ツール

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
ハイハイスクールアドベンチャー_m5stack_m5cardputer版 [2025/04/25 01:28] – [M5ATOM + 外部ディスプレイ] arakiハイハイスクールアドベンチャー_m5stack_m5cardputer版 [2025/04/25 01:56] (現在) – [BTキーボードをつなごう] araki
行 47: 行 47:
 ソースは、GitHubから取得して、Platform IOのプロジェクトとしてビルドする。 ソースは、GitHubから取得して、Platform IOのプロジェクトとしてビルドする。
  
-<code>+<code bash>
 $ git clone https://github.com/wildtree/hhsadv.git $ git clone https://github.com/wildtree/hhsadv.git
 </code> </code>
行 86: 行 86:
 Core/Core2なら 用意されているSPIを使えば動くが、Cardputerはそこもまとめて面倒をみないといけない。 Core/Core2なら 用意されているSPIを使えば動くが、Cardputerはそこもまとめて面倒をみないといけない。
  
-<code>+<code cpp>
     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だ。
  
-<code>+<code cpp>
 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 で見分けるのが正しいのかさえよくわかっていないがとにかく試して動いたキーボードはこのどちらかだった。</del> 
 +実はキーボードからのキー入力の通知についてはハンドルで見分けることができる。 
 + 
 +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に積んでいく。

This website uses cookies. By using the website, you agree with storing cookies on your computer. Also, you acknowledge that you have read and understand our Privacy Policy. If you do not agree, please leave the website.

More information