# 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`