mirror of
https://github.com/alexhopeoconnor/firmware.git
synced 2026-10-16 00:21:35 +10:00
* Add USB camera and uhubctl support for new test suite. Also added some bug fixes * Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> * Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> * Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> * Refactor test messages for clarity and consistency in regex tests --------- Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
68 lines
1.9 KiB
Python
68 lines
1.9 KiB
Python
"""Python mirror of firmware `enum input_broker_event` (src/input/InputBroker.h).
|
|
|
|
Used by `admin.send_input_event` + `tests/ui/` so callers can say
|
|
`InputEventCode.RIGHT` instead of hard-coding 20. Values MUST stay in sync
|
|
with the firmware enum — unit test `tests/unit/test_input_event_codes.py`
|
|
pins the mapping.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from enum import IntEnum
|
|
|
|
|
|
class InputEventCode(IntEnum):
|
|
"""Button / key / gesture events dispatched by the firmware InputBroker."""
|
|
|
|
NONE = 0
|
|
SELECT = 10
|
|
SELECT_LONG = 11
|
|
UP_LONG = 12
|
|
DOWN_LONG = 13
|
|
UP = 17
|
|
DOWN = 18
|
|
LEFT = 19
|
|
RIGHT = 20
|
|
CANCEL = 24
|
|
BACK = 27
|
|
# Auto-incremented values in the C enum (27 + 1, +2, +3):
|
|
USER_PRESS = 28
|
|
ALT_PRESS = 29
|
|
ALT_LONG = 30
|
|
SHUTDOWN = 0x9B
|
|
GPS_TOGGLE = 0x9E
|
|
SEND_PING = 0xAF
|
|
FN_F1 = 0xF1
|
|
FN_F2 = 0xF2
|
|
FN_F3 = 0xF3
|
|
FN_F4 = 0xF4
|
|
FN_F5 = 0xF5
|
|
MATRIXKEY = 0xFE
|
|
ANYKEY = 0xFF
|
|
|
|
|
|
def coerce_event_code(value: int | str | InputEventCode) -> int:
|
|
"""Accept an int, a case-insensitive name, or an `InputEventCode` and return
|
|
the u8 wire value. Raises ValueError on unknown names / out-of-range ints.
|
|
"""
|
|
if isinstance(value, InputEventCode):
|
|
return int(value)
|
|
if isinstance(value, int):
|
|
if not 0 <= value <= 255:
|
|
raise ValueError(f"event_code out of u8 range: {value}")
|
|
return value
|
|
if isinstance(value, str):
|
|
key = value.upper().replace("-", "_")
|
|
if key.startswith("INPUT_BROKER_"):
|
|
key = key[len("INPUT_BROKER_") :]
|
|
try:
|
|
return int(InputEventCode[key])
|
|
except KeyError as exc:
|
|
known = ", ".join(m.name for m in InputEventCode)
|
|
raise ValueError(
|
|
f"unknown event code name {value!r}; known: {known}"
|
|
) from exc
|
|
raise TypeError(
|
|
f"event_code must be int|str|InputEventCode, got {type(value).__name__}"
|
|
)
|