diff options
author | Paweł Szewczyk <p.szewczyk@samsung.com> | 2018-06-25 12:42:28 +0200 |
---|---|---|
committer | Hyotaek Shim <hyotaek.shim@samsung.com> | 2018-06-28 07:40:30 +0000 |
commit | 2714ea2ec53cc3c63bedb53b17b798d17b37a092 (patch) | |
tree | 70d259e8b0e107a3e4fdaa4191b6bab7427b2bb4 | |
parent | ade85488827517ade03ddd84563b9cb207841175 (diff) | |
download | device-manager-plugin-odroid-2714ea2ec53cc3c63bedb53b17b798d17b37a092.tar.gz device-manager-plugin-odroid-2714ea2ec53cc3c63bedb53b17b798d17b37a092.tar.bz2 device-manager-plugin-odroid-2714ea2ec53cc3c63bedb53b17b798d17b37a092.zip |
Add board HAL
Change-Id: I83180a22b97805113ac8e43e6df536611a5de85c
Signed-off-by: Paweł Szewczyk <p.szewczyk@samsung.com>
Signed-off-by: lokilee73 <changjoo.lee@samsung.com>
-rw-r--r-- | CMakeLists.txt | 1 | ||||
-rw-r--r-- | hw/board/CMakeLists.txt | 19 | ||||
-rwxr-xr-x | hw/board/board.c | 107 |
3 files changed, 127 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 90a976c..cb4c8be 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,6 +3,7 @@ PROJECT(device-manager-odroid C) SET(PREFIX ${CMAKE_INSTALL_PREFIX}) +ADD_SUBDIRECTORY(hw/board) ADD_SUBDIRECTORY(hw/display) ADD_SUBDIRECTORY(hw/usb_gadget) ADD_SUBDIRECTORY(hw/usb_client) diff --git a/hw/board/CMakeLists.txt b/hw/board/CMakeLists.txt new file mode 100644 index 0000000..5b8b5b4 --- /dev/null +++ b/hw/board/CMakeLists.txt @@ -0,0 +1,19 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 2.6) +PROJECT(board C) + +SET(PREFIX ${CMAKE_INSTALL_PREFIX}) + +INCLUDE(FindPkgConfig) +pkg_check_modules(usb_gadget_pkgs REQUIRED hwcommon) + +FOREACH(flag ${usb_gadget_pkgs_CFLAGS}) + SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}") +ENDFOREACH(flag) + +SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} -fvisibility=hidden") +SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}") + +ADD_LIBRARY(${PROJECT_NAME} MODULE board.c) +TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${usb_gadget_pkgs_LDFLAGS}) +SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES PREFIX "") +INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${LIB_INSTALL_DIR}/hw COMPONENT RuntimeLibraries) diff --git a/hw/board/board.c b/hw/board/board.c new file mode 100755 index 0000000..2c7e2b5 --- /dev/null +++ b/hw/board/board.c @@ -0,0 +1,107 @@ +/* + * libdevice-node + * + * Copyright (c) 2016 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define _GNU_SOURCE +#include <hw/board.h> + +#include <stdio.h> +#include <stdlib.h> +#include <errno.h> +#include <string.h> + +#define CPUINFO_DIR "/proc/cpuinfo" +#define SERIAL_TAG "Serial" +#define LINE_LEN 64 + +static int get_device_serial(char **out) +{ + FILE *fp; + char line[LINE_LEN], *p, *q; + + fp = fopen(CPUINFO_DIR, "r"); + if (!fp) + return -1; + + while ((p = fgets(line, LINE_LEN, fp)) != NULL) { + p = strchr(p, '\t'); + if (!p) + continue; + + *p = '\0'; + + if (strncmp(line, SERIAL_TAG, LINE_LEN) != 0) + continue; + + ++p; + p = strchr(p, ':'); + if (!p) + continue; + p += 2; + + q = strchrnul(p, '\n'); + *q = '\0'; + *out = strdup(p); + fclose(fp); + return 0; + } + + fclose(fp); + return -1; +} + +static int board_open(struct hw_info *info, + const char *id, struct hw_common **common) +{ + struct hw_board *b; + + if (!info || !common) + return -EINVAL; + + b = calloc(1, sizeof(*b)); + if (!b) + return -ENOMEM; + + b->common.info = info; + b->get_device_serial = get_device_serial; + + *common = &b->common; + return 0; +} + +static int board_close(struct hw_common *common) +{ + struct hw_board *b; + + if (!common) + return -EINVAL; + + b = container_of(common, struct hw_board, common); + free(b); + + return 0; +} + +HARDWARE_MODULE_STRUCTURE = { + .magic = HARDWARE_INFO_TAG, + .hal_version = HARDWARE_INFO_VERSION, + .device_version = BOARD_HARDWARE_DEVICE_VERSION, + .id = BOARD_HARDWARE_DEVICE_ID, + .name = "device", + .open = board_open, + .close = board_close, +}; |