ゲームボーイを無線マウスにした際に、Bluetooth側はESP32を使って実装しました。キーボードのサンプルコードに記載の関数群でマウスまでまかなえたので、使い方を記載しておきます。
ESP-IDFを使う
ESP-IDFのBluetooth Low Energyサンプルのうち、HID over GATTを使います。
ble_hidd_demo_main.cではほとんどConsumer Keyの送信しかしていないのですが、esp_hidd_prf_api.hにはきちんと関数が実装されています。
- void esp_hidd_send_consumer_value(uint16_t conn_id, uint8_t key_cmd, bool key_pressed);
- void esp_hidd_send_keyboard_value(uint16_t conn_id, key_mask_t special_key_mask, uint8_t *keyboard_cmd, uint8_t num_key);
- void esp_hidd_send_mouse_value(uint16_t conn_id, uint8_t mouse_button, int8_t mickeys_x, int8_t mickeys_y);
いずれも、キー操作情報等の最低限のデータを入れればよしなに成形して無線で飛ばしてくれます。
マウス利用時のmouse_buttonは、レポートディスクリプタの0バイト目にああたります。下位3ビットに3ボタンマウスのそれぞれが割り当てられています。下から右・左・中ボタンになります。