Skip to content

Commit

Permalink
Expose API for hardware unique ID (#16869)
Browse files Browse the repository at this point in the history
  • Loading branch information
zvecr authored Apr 18, 2022
1 parent 7aa9a35 commit b8245a5
Show file tree
Hide file tree
Showing 7 changed files with 93 additions and 0 deletions.
28 changes: 28 additions & 0 deletions keyboards/handwired/onekey/keymaps/hardware_id/keymap.c
Original file line number Diff line number Diff line change
@@ -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 changes: 9 additions & 0 deletions platforms/arm_atsam/hardware_id.c
Original file line number Diff line number Diff line change
@@ -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 changes: 13 additions & 0 deletions platforms/avr/hardware_id.c
Original file line number Diff line number Diff line change
@@ -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 changes: 15 additions & 0 deletions platforms/chibios/hardware_id.c
Original file line number Diff line number Diff line change
@@ -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;
}
1 change: 1 addition & 0 deletions platforms/common.mk
Original file line number Diff line number Diff line change
Expand Up @@ -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 \
Expand Down
18 changes: 18 additions & 0 deletions platforms/hardware_id.h
Original file line number Diff line number Diff line change
@@ -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 changes: 9 additions & 0 deletions platforms/test/hardware_id.c
Original file line number Diff line number Diff line change
@@ -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 comments on commit b8245a5

Please sign in to comment.