ハイハイスクールアドベンチャー_m5stack_m5cardputer版
差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン | |||
ハイハイスクールアドベンチャー_m5stack_m5cardputer版 [2024/10/29 02:20] – [ビルド] araki | ハイハイスクールアドベンチャー_m5stack_m5cardputer版 [2024/10/29 02:27] (現在) – [BTキーボードをつなごう] araki | ||
---|---|---|---|
行 266: | 行 266: | ||
手抜きの極みのキー処理である。 | 手抜きの極みのキー処理である。 | ||
キーボードからの通知が来るたびに、これが呼び出される。 | キーボードからの通知が来るたびに、これが呼び出される。 | ||
+ | Handle == 41は modifiers + 10文字分のキーバッファだが Handle == 29は modifiers + res + 6文字分のキーバッファとなっている。 | ||
+ | そもそも Handle で見分けるのが正しいのかさえよくわかっていないがとにかく試して動いたキーボードはこのどちらかだった。 | ||
- | データは | + | 動作は単純で、前回渡されたデータと、今回渡ってきたデータとでキーバッファ部分を比べて、新しいのがあったらそれが今回入力されたキーだとみなして、keybufに積んでいく。 |
+ | これは、例えば、A, | ||
+ | |||
+ | データは | ||
< | < | ||
- | typedef struct __attribute__((__packed__)) | + | typedef |
- | { | + | |
- | uint8_t modifiers; | + | { |
- | uint8_t keys[10]; | + | uint8_t modifiers; |
+ | uint8_t keys[10]; | ||
+ | } k1; | ||
+ | struct __attribute__((__packed__)) | ||
+ | { | ||
+ | uint8_t modifiers; | ||
+ | uint8_t reserved; | ||
+ | uint8_t keys[6]; | ||
+ | uint8_t padding[3]; | ||
+ | } k2; | ||
+ | uint8_t raw[11]; | ||
} keyboard_t; | } keyboard_t; | ||
+ | |||
static keyboard_t keyboardReport; | static keyboard_t keyboardReport; | ||
- | static | + | static |
static void | static void | ||
行 289: | 行 305: | ||
for (int i = 0 ; i < 10 ; i++) | for (int i = 0 ; i < 10 ; i++) | ||
{ | { | ||
- | uint8_t c = newKeyReport-> | + | uint8_t c = newKeyReport-> |
if (c == 0) break; | if (c == 0) break; | ||
- | if (memchr(& | + | if (memchr(& |
} | } | ||
memcpy(& | memcpy(& | ||
+ | } | ||
+ | else if (pRemoteCharacteristic-> | ||
+ | { | ||
+ | keyboard_t *newKeyReport = (keyboard_t*)pData; | ||
+ | if(newKeyReport-> | ||
+ | for (int i = 0 ; i < 6 ; i++) | ||
+ | { | ||
+ | uint8_t c = newKeyReport-> | ||
+ | if (c == 0) break; | ||
+ | if (memchr(& | ||
+ | } | ||
+ | memcpy(& | ||
} | } | ||
} | } | ||
+ | |||
</ | </ | ||
ハイハイスクールアドベンチャー_m5stack_m5cardputer版.txt · 最終更新: 2024/10/29 02:27 by araki