ユーザ用ツール

サイト用ツール


bleについて

差分

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

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
bleについて [2024/12/09 03:10] arakibleについて [2024/12/22 04:52] (現在) – [コード片] araki
行 484: 行 484:
 カウンターがオーバーフローした場合の処理を入れていませんが、32bitでも2500日くらい押し続けないと溢れないので、実用上問題はないと思っています。頑張って2500日押し続けてオーバーフローしたら教えてください。 カウンターがオーバーフローした場合の処理を入れていませんが、32bitでも2500日くらい押し続けないと溢れないので、実用上問題はないと思っています。頑張って2500日押し続けてオーバーフローしたら教えてください。
 直します。 直します。
 +
 +=== キーが押されているか? ===
 +
 +まあ、[[フルーツフィールド]]については、オートリピートでもゲームになりますが、結局ゲームの場合、キーが押されているかどうかを読んで、動作させる必要性があります。
 +
 +実際、PC-6001mkII版だって、キーが押されているかどうかを調べるシステムコールを使って動作させているので、BLE版だってそうさせたい。
 +
 +実装は簡単なのですが、どういう実装にするのかが問題。
 +
 +PC-6001mkII版のように、上下左右+SPC+ESC+何か二つ、をuint8_tのビットマップにパックするのも考えたんですが、ビットマップに畳み込んで、ビットマップを展開してとかやるんだったら、BLEの通信バッファの方を直接スキャンしても大差ないだろうということで、
 +<code>
 +キーコード, 文字コード
 +</code>
 +のペアの配列を用意して、そこに定義されているキーが押されているかどうかをチェックして、押されてたら文字コードの方を返すようにしました。
 +
 +<code>
 +static uint8_t _keymap[] = { 
 +    0x50, 28, 
 +    0x4f, 29, 
 +    0x52, 30,  
 +    0x51, 31, 
 +    0x2c, ' ',  
 +    0x29, 27,  
 +    0x16, 's', 
 +    0x1f, '@', 
 +    0, 0 
 +};
 +
 +bool
 +keyscan(uint8_t &code)
 +{
 +    for (int i = 0 ; _keymap[2 * i] != 0 ; i++)
 +    {
 +        if (_keyboard->is_pressed(_keymap[2 * i]))
 +        {
 +            code = _keymap[2 * i + 1];
 +            return true;
 +        }
 +    }
 +    return false;
 +}
 +</code>
 +
bleについて.1733713802.txt.gz · 最終更新: 2024/12/09 03:10 by araki