diff --git a/data/templates/xap/client/python/types.py.j2 b/data/templates/xap/client/python/types.py.j2 new file mode 100644 index 00000000000..be9b386e143 --- /dev/null +++ b/data/templates/xap/client/python/types.py.j2 @@ -0,0 +1,25 @@ +from enum import IntFlag, IntEnum + + +class XAPRouteError(Exception): + pass + + +class XAPSecureStatus(IntEnum): + LOCKED = 0x00 + UNLOCKING = 0x01 + UNLOCKED = 0x02 + + +class XAPEventType(IntEnum): +{%- for id, message in xap.broadcast_messages.messages | dictsort %} + {{ message.define }} = {{ id }} +{%- endfor %} + + +class XAPFlags(IntFlag): +{%- for bitnum, bitinfo in xap.response_flags.bits | dictsort %} +{%- if bitinfo.define != "-" %} + {{ bitinfo.define }} = 1 << {{ bitnum }} +{%- endif %} +{%- endfor %} diff --git a/lib/python/qmk/cli/__init__.py b/lib/python/qmk/cli/__init__.py index fa26de65393..ee6e86a56ed 100644 --- a/lib/python/qmk/cli/__init__.py +++ b/lib/python/qmk/cli/__init__.py @@ -80,6 +80,7 @@ subcommands = [ 'qmk.cli.xap', 'qmk.cli.xap.generate_docs', 'qmk.cli.xap.generate_json', + 'qmk.cli.xap.generate_python', 'qmk.cli.xap.generate_qmk', ] diff --git a/lib/python/qmk/cli/xap/generate_python.py b/lib/python/qmk/cli/xap/generate_python.py new file mode 100644 index 00000000000..8dcf3b3eeca --- /dev/null +++ b/lib/python/qmk/cli/xap/generate_python.py @@ -0,0 +1,22 @@ +"""This script generates the python XAP client. +""" +from qmk.constants import QMK_FIRMWARE, GPL2_HEADER_SH_LIKE, GENERATED_HEADER_SH_LIKE + +from qmk.xap.common import latest_xap_defs, render_xap_output +from qmk.commands import dump_lines + +from milc import cli + + +@cli.subcommand('Generates the python XAP client.', hidden=False if cli.config.user.developer else True) +def xap_generate_python(cli): + defs = latest_xap_defs() + + parent = QMK_FIRMWARE / 'lib' / 'python' / 'xap_client' + for name in ['types.py']: + lines = [GPL2_HEADER_SH_LIKE, GENERATED_HEADER_SH_LIKE] + + output = render_xap_output('client/python', f'{name}.j2', defs) + lines += output.split('\n') + + dump_lines(parent / name, lines) diff --git a/lib/python/qmk/cli/xap/xap.py b/lib/python/qmk/cli/xap/xap.py index 7757f8703a0..668cbb155b4 100644 --- a/lib/python/qmk/cli/xap/xap.py +++ b/lib/python/qmk/cli/xap/xap.py @@ -102,7 +102,7 @@ class XAPShell(cmd.Cmd): while 1: (event, data) = self.device.listen() - if event == XAPEventType.SECURE: + if event == XAPEventType.SECURE_STATUS: secure_status = XAPSecureStatus(data[0]).name cli.log.info(' Secure[%s]', secure_status) diff --git a/lib/python/xap_client/device.py b/lib/python/xap_client/device.py index 5d00a1e317a..52d13db8a53 100644 --- a/lib/python/xap_client/device.py +++ b/lib/python/xap_client/device.py @@ -12,7 +12,6 @@ from platform import platform from .types import XAPSecureStatus, XAPFlags, XAPRouteError - RequestPacket = namedtuple('RequestPacket', 'token length data') RequestStruct = Struct('