Expose API for hardware unique ID (#16869)
parent
7aa9a353ac
commit
b8245a5507
@ -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; |
||||||
|
}; |
@ -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; |
||||||
|
} |
@ -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; |
||||||
|
} |
@ -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; |
||||||
|
} |
@ -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); |
@ -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 new issue