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 +=	\
 | 
			
		||||
	$(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 \
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										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…
	
	Add table
		Add a link
		
	
		Reference in a new issue