mirror of
https://github.com/zephyrproject-rtos/zephyr
synced 2025-08-14 17:35:22 +00:00
HWINFO drivers should be responsible for ensuring that the data structure is a sequence of bytes. That is not what the current sam0 and nordic drivers do. The drivers read the data as u32_t and then memcpy the data to a buffer. This ensures the data has the endianness of the underlying MCU, which in this case is Cortex M0 which is little endian. This commit fixes the endianness so the data can be interpreted as a "left to right sequence of bytes". This commit updates the API doc to provide clarification of the data structure. Add to 2.3 release notes. Fixes #23444, #24103 Signed-off-by: Steven Slupsky <sslupsky@gmail.com>
32 lines
599 B
C
32 lines
599 B
C
/*
|
|
* Copyright (c) 2018 Alexander Wachter
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
#include <soc.h>
|
|
#include <drivers/hwinfo.h>
|
|
#include <string.h>
|
|
#include <hal/nrf_ficr.h>
|
|
#include <sys/byteorder.h>
|
|
|
|
struct nrf_uid {
|
|
u32_t id[2];
|
|
};
|
|
|
|
ssize_t z_impl_hwinfo_get_device_id(u8_t *buffer, size_t length)
|
|
{
|
|
struct nrf_uid dev_id;
|
|
|
|
dev_id.id[0] = sys_cpu_to_be32(nrf_ficr_deviceid_get(NRF_FICR, 1));
|
|
dev_id.id[1] = sys_cpu_to_be32(nrf_ficr_deviceid_get(NRF_FICR, 0));
|
|
|
|
if (length > sizeof(dev_id.id)) {
|
|
length = sizeof(dev_id.id);
|
|
}
|
|
|
|
memcpy(buffer, dev_id.id, length);
|
|
|
|
return length;
|
|
}
|