diff options
author | Joel Challis <git@zvecr.com> | 2022-04-18 11:51:40 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-04-18 20:51:40 +1000 |
commit | b8245a550752ed3826902f63a75203c67282ace7 (patch) | |
tree | 967e46a6a071dffb14f3fe44a11771ad64cc5ba0 | |
parent | 7aa9a353ac6e2ee095ad8c6695f62f0bafe7b6f3 (diff) | |
download | qmk_firmware-b8245a550752ed3826902f63a75203c67282ace7.tar.gz qmk_firmware-b8245a550752ed3826902f63a75203c67282ace7.zip |
Expose API for hardware unique ID (#16869)
-rw-r--r-- | keyboards/handwired/onekey/keymaps/hardware_id/keymap.c | 28 | ||||
-rw-r--r-- | platforms/arm_atsam/hardware_id.c | 9 | ||||
-rw-r--r-- | platforms/avr/hardware_id.c | 13 | ||||
-rw-r--r-- | platforms/chibios/hardware_id.c | 15 | ||||
-rw-r--r-- | platforms/common.mk | 1 | ||||
-rw-r--r-- | platforms/hardware_id.h | 18 | ||||
-rw-r--r-- | platforms/test/hardware_id.c | 9 |
7 files changed, 93 insertions, 0 deletions
diff --git a/keyboards/handwired/onekey/keymaps/hardware_id/keymap.c b/keyboards/handwired/onekey/keymaps/hardware_id/keymap.c new file mode 100644 index 0000000000..bcec8b3ca1 --- /dev/null +++ b/keyboards/handwired/onekey/keymaps/hardware_id/keymap.c @@ -0,0 +1,28 @@ +#include QMK_KEYBOARD_H +#include "hardware_id.h" +#include <stdio.h> +enum custom_keycodes { + DUMP_ID = SAFE_RANGE, +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + LAYOUT_ortho_1x1(DUMP_ID) +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case DUMP_ID: + if (record->event.pressed) { + hardware_id_t id = get_hardware_id(); + char buffer[100]; + sprintf(buffer, "ID:%lu:%lu:%lu:%lu\n", id.data[0], id.data[1], id.data[2], id.data[3]); +#ifdef CONSOLE_ENABLE + printf(buffer); +#else + send_string(buffer); +#endif + } + break; + } + return false; +}; diff --git a/platforms/arm_atsam/hardware_id.c b/platforms/arm_atsam/hardware_id.c new file mode 100644 index 0000000000..8b3b35a492 --- /dev/null +++ b/platforms/arm_atsam/hardware_id.c @@ -0,0 +1,9 @@ +// Copyright 2022 QMK +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "hardware_id.h" + +hardware_id_t get_hardware_id(void) { + hardware_id_t id = {0}; + return id; +} diff --git a/platforms/avr/hardware_id.c b/platforms/avr/hardware_id.c new file mode 100644 index 0000000000..073834c19c --- /dev/null +++ b/platforms/avr/hardware_id.c @@ -0,0 +1,13 @@ +// Copyright 2022 QMK +// SPDX-License-Identifier: GPL-2.0-or-later + +#include <avr/boot.h> +#include "hardware_id.h" + +hardware_id_t get_hardware_id(void) { + hardware_id_t id = {0}; + for (uint8_t i = 0; i < 10; i += 1) { + ((uint8_t*)&id)[i] = boot_signature_byte_get(i + 0x0E); + } + return id; +} diff --git a/platforms/chibios/hardware_id.c b/platforms/chibios/hardware_id.c new file mode 100644 index 0000000000..888a275465 --- /dev/null +++ b/platforms/chibios/hardware_id.c @@ -0,0 +1,15 @@ +// Copyright 2022 QMK +// SPDX-License-Identifier: GPL-2.0-or-later + +#include <ch.h> +#include "hardware_id.h" + +hardware_id_t get_hardware_id(void) { + hardware_id_t id = {0}; +#ifdef UID_BASE + id.data[0] = (uint32_t)(*((uint32_t *)UID_BASE)); + id.data[1] = (uint32_t)(*((uint32_t *)(UID_BASE + 4))); + id.data[1] = (uint32_t)(*((uint32_t *)(UID_BASE + 8))); +#endif + return id; +} diff --git a/platforms/common.mk b/platforms/common.mk index 2a1fc8d377..693bdc8cf0 100644 --- a/platforms/common.mk +++ b/platforms/common.mk @@ -2,6 +2,7 @@ PLATFORM_COMMON_DIR = $(PLATFORM_PATH)/$(PLATFORM_KEY) TMK_COMMON_SRC += \ $(PLATFORM_PATH)/suspend.c \ + $(PLATFORM_COMMON_DIR)/hardware_id.c \ $(PLATFORM_COMMON_DIR)/platform.c \ $(PLATFORM_COMMON_DIR)/suspend.c \ $(PLATFORM_COMMON_DIR)/timer.c \ diff --git a/platforms/hardware_id.h b/platforms/hardware_id.h new file mode 100644 index 0000000000..0c161863d6 --- /dev/null +++ b/platforms/hardware_id.h @@ -0,0 +1,18 @@ +// Copyright 2022 QMK +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include <stdint.h> + +/** \brief Storage for a hardware ID + * + * Ensure this is sized to cover all hardware scenarios + */ +typedef struct hardware_id_t { + uint32_t data[4]; +} hardware_id_t; + +/** \brief Query the devices "unique" ID + */ +hardware_id_t get_hardware_id(void); diff --git a/platforms/test/hardware_id.c b/platforms/test/hardware_id.c new file mode 100644 index 0000000000..8b3b35a492 --- /dev/null +++ b/platforms/test/hardware_id.c @@ -0,0 +1,9 @@ +// Copyright 2022 QMK +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "hardware_id.h" + +hardware_id_t get_hardware_id(void) { + hardware_id_t id = {0}; + return id; +} |