Expose API for hardware unique ID (#16869)
This commit is contained in:
parent
7aa9a353ac
commit
b8245a5507
7 changed files with 93 additions and 0 deletions
28
keyboards/handwired/onekey/keymaps/hardware_id/keymap.c
Normal file
28
keyboards/handwired/onekey/keymaps/hardware_id/keymap.c
Normal file
|
@ -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;
|
||||||
|
};
|
9
platforms/arm_atsam/hardware_id.c
Normal file
9
platforms/arm_atsam/hardware_id.c
Normal file
|
@ -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;
|
||||||
|
}
|
13
platforms/avr/hardware_id.c
Normal file
13
platforms/avr/hardware_id.c
Normal file
|
@ -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;
|
||||||
|
}
|
15
platforms/chibios/hardware_id.c
Normal file
15
platforms/chibios/hardware_id.c
Normal file
|
@ -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;
|
||||||
|
}
|
|
@ -2,6 +2,7 @@ PLATFORM_COMMON_DIR = $(PLATFORM_PATH)/$(PLATFORM_KEY)
|
||||||
|
|
||||||
TMK_COMMON_SRC += \
|
TMK_COMMON_SRC += \
|
||||||
$(PLATFORM_PATH)/suspend.c \
|
$(PLATFORM_PATH)/suspend.c \
|
||||||
|
$(PLATFORM_COMMON_DIR)/hardware_id.c \
|
||||||
$(PLATFORM_COMMON_DIR)/platform.c \
|
$(PLATFORM_COMMON_DIR)/platform.c \
|
||||||
$(PLATFORM_COMMON_DIR)/suspend.c \
|
$(PLATFORM_COMMON_DIR)/suspend.c \
|
||||||
$(PLATFORM_COMMON_DIR)/timer.c \
|
$(PLATFORM_COMMON_DIR)/timer.c \
|
||||||
|
|
18
platforms/hardware_id.h
Normal file
18
platforms/hardware_id.h
Normal file
|
@ -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);
|
9
platforms/test/hardware_id.c
Normal file
9
platforms/test/hardware_id.c
Normal file
|
@ -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;
|
||||||
|
}
|
Loading…
Reference in a new issue