Files
KeyBoard_QT/docs/firmware_proto_transport.md

1.5 KiB

Firmware Proto Transport

Goal

Add CDC and GATT private communication without rewriting the existing keyboard, time, theme, and LED business logic.

The firmware side should:

  • keep standard HID behavior for normal keys
  • receive host commands over CDC and GATT
  • report private state and function key events over CDC and GATT
  • reuse existing modules where possible

Completed Nodes

Node 1: internal function events

Files:

  • src/events/function_bitmap_event.h
  • src/events/function_bitmap_event.c
  • src/events/function_key_event.h
  • src/events/function_key_event.c

Design notes:

  • function_bitmap_event carries the 29-byte function bitmap from host
  • function_key_event carries usage + action when a configured function key is pressed or released
  • these events isolate transport modules from keyboard internals

Planned next nodes

  • keyboard split logic uses function_bitmap_event
  • CDC transport module
  • GATT transport module
  • nanopb integration and generated protocol code

Node 2: keyboard split point

Files updated in this step:

  • src/modules/keyboard_module.c

Design notes:

  • reuse the existing keymap and HID path
  • add one explicit split point before HID submission
  • keep normal keys on HID
  • send configured function keys to private transport only

Implemented behavior:

  • store the 29-byte function bitmap
  • for keyboard usages marked as function keys:
    • stop normal HID reporting
    • emit function_key_event
  • for consumer usages marked as function keys:
    • stop normal HID reporting
    • emit function_key_event