From 2a9405a5a87e268a9b1d9cd5438888338cc91622 Mon Sep 17 00:00:00 2001 From: Ilya Zhuravlev Date: Sun, 18 Oct 2020 14:36:45 -0400 Subject: [PATCH] vial: support retrieving keyboard ID and protocol version --- quantum/vial.c | 14 ++++++++++++++ quantum/vial.h | 4 ++++ util/vial_generate_keyboard_uid.py | 12 ++++++++++++ 3 files changed, 30 insertions(+) create mode 100755 util/vial_generate_keyboard_uid.py diff --git a/quantum/vial.c b/quantum/vial.c index da3946662f..f12c017029 100644 --- a/quantum/vial.c +++ b/quantum/vial.c @@ -14,12 +14,15 @@ * along with this program. If not, see . */ +#include "vial.h" + #include #include "protocol/usb_descriptor.h" #include "vial_generated_keyboard_definition.h" enum { + vial_get_keyboard_id = 0x00, vial_get_size = 0x01, vial_get_def = 0x02, }; @@ -31,6 +34,17 @@ void vial_handle_cmd(uint8_t *msg, uint8_t length) { /* msg[0] is 0xFE -- prefix vial magic */ switch (msg[1]) { + /* Get keyboard ID and Vial protocol version */ + case vial_get_keyboard_id: { + uint8_t keyboard_uid[] = VIAL_KEYBOARD_UID; + + msg[0] = VIAL_PROTOCOL_VERSION & 0xFF; + msg[1] = (VIAL_PROTOCOL_VERSION >> 8) & 0xFF; + msg[2] = (VIAL_PROTOCOL_VERSION >> 16) & 0xFF; + msg[3] = (VIAL_PROTOCOL_VERSION >> 24) & 0xFF; + memcpy(&msg[4], keyboard_uid, 8); + break; + } /* Retrieve keyboard definition size */ case vial_get_size: { uint32_t sz = sizeof(keyboard_definition); diff --git a/quantum/vial.h b/quantum/vial.h index 5c79843c83..c1ff05d39a 100644 --- a/quantum/vial.h +++ b/quantum/vial.h @@ -16,4 +16,8 @@ #pragma once +#include + +#define VIAL_PROTOCOL_VERSION 0x00000000 + void vial_handle_cmd(uint8_t *data, uint8_t length); diff --git a/util/vial_generate_keyboard_uid.py b/util/vial_generate_keyboard_uid.py new file mode 100755 index 0000000000..daac8fa252 --- /dev/null +++ b/util/vial_generate_keyboard_uid.py @@ -0,0 +1,12 @@ +#!/usr/bin/env python3 +import secrets + + +def main(): + print("#define VIAL_KEYBOARD_UID {{{}}}".format( + ", ".join(["0x{:02X}".format(x) for x in secrets.token_bytes(8)]) + )) + + +if __name__ == "__main__": + main()