~ruther/qmk_firmware

b8245a550752ed3826902f63a75203c67282ace7 — Joel Challis 3 years ago 7aa9a35
Expose API for hardware unique ID (#16869)

A keyboards/handwired/onekey/keymaps/hardware_id/keymap.c => keyboards/handwired/onekey/keymaps/hardware_id/keymap.c +28 -0
@@ 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;
};

A platforms/arm_atsam/hardware_id.c => platforms/arm_atsam/hardware_id.c +9 -0
@@ 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;
}

A platforms/avr/hardware_id.c => platforms/avr/hardware_id.c +13 -0
@@ 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;
}

A platforms/chibios/hardware_id.c => platforms/chibios/hardware_id.c +15 -0
@@ 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;
}

M platforms/common.mk => platforms/common.mk +1 -0
@@ 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 \

A platforms/hardware_id.h => platforms/hardware_id.h +18 -0
@@ 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);

A platforms/test/hardware_id.c => platforms/test/hardware_id.c +9 -0
@@ 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;
}