drivers: Add hwinfo API

This commit adds a new hardware info API.
With this API it is possible to read out the device ID.

Signed-off-by: Alexander Wachter <alexander.wachter@student.tugraz.at>
This commit is contained in:
Alexander Wachter 2018-12-21 11:58:41 +01:00 committed by Anas Nashif
commit 5b59c10fc4
7 changed files with 105 additions and 0 deletions

View file

@ -29,6 +29,7 @@ add_subdirectory_if_kconfig(watchdog)
add_subdirectory_if_kconfig(wifi)
add_subdirectory_if_kconfig(can)
add_subdirectory_if_kconfig(audio)
add_subdirectory_if_kconfig(hwinfo)
add_subdirectory_ifdef(CONFIG_FLASH_HAS_DRIVER_ENABLED flash)
add_subdirectory_ifdef(CONFIG_SERIAL_HAS_DRIVER serial)

View file

@ -85,4 +85,6 @@ source "drivers/audio/Kconfig"
source "drivers/neural_net/Kconfig"
source "drivers/hwinfo/Kconfig"
endmenu

View file

@ -0,0 +1,2 @@
zephyr_sources_ifdef(CONFIG_USERSPACE hwinfo_handlers.c)
zephyr_sources_ifdef(CONFIG_HWINFO hwinfo_weak_impl.c)

16
drivers/hwinfo/Kconfig Normal file
View file

@ -0,0 +1,16 @@
# Kconfig -HW Info driver configuration options
#
# Copyright (c) 2019 Alexander Wachter
#
# SPDX-License-Identifier: Apache-2.0
#
menuconfig HWINFO
bool "Hardware Information driver"
help
Enable hwinfo driver.
if HWINFO
endif

View file

@ -0,0 +1,15 @@
/*
* Copyright (c) 2018 Alexander Wachter
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <syscall_handler.h>
#include <hwinfo.h>
Z_SYSCALL_HANDLER(hwinfo_get_device_id, buffer, length) {
Z_OOPS(Z_SYSCALL_MEMORY_WRITE(buffer, length));
return _impl_hwinfo_get_device_id((u8_t *)buffer, (size_t)length);
}

View file

@ -0,0 +1,12 @@
/*
* Copyright (c) 2018 Alexander Wachter
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <hwinfo.h>
ssize_t __weak _impl_hwinfo_get_device_id(u8_t *buffer, size_t length)
{
return -ENOTSUP;
}

57
include/hwinfo.h Normal file
View file

@ -0,0 +1,57 @@
/**
* @file
*
* @brief Public APIs to get device Information.
*/
/*
* Copyright (c) 2018 Alexander Wachter
*
* SPDX-License-Identifier: Apache-2.0
*/
#ifndef ZEPHYR_INCLUDE_HWINFO_H_
#define ZEPHYR_INCLUDE_HWINFO_H_
#include <zephyr/types.h>
#include <sys/types.h>
#include <stddef.h>
#include <errno.h>
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief Device ID
* @{
*/
/**
* @brief Copy the device id to a buffer
*
* This routine copies "length" number of bytes of the device ID to the buffer.
* If the device ID is smaller then length, the rest of the buffer is left unchanged.
* The ID depends on the hardware and is not guaranteed unique.
*
* @param buffer Buffer to write the ID to.
* @param length Max length of the buffer.
*
* @retval size of the device ID copied or negative on error.
*/
__syscall ssize_t hwinfo_get_device_id(u8_t *buffer, size_t length);
ssize_t _impl_hwinfo_get_device_id(u8_t *buffer, size_t length);
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#include <syscalls/hwinfo.h>
#endif /* ZEPHYR_INCLUDE_HWINFO_H_ */