From 26718a67a2e1914d279ef5c81258c3e6fc8c2b29 Mon Sep 17 00:00:00 2001 From: Alex Tereschenko Date: Thu, 21 Jul 2016 21:53:22 +0200 Subject: [PATCH] mock: split out aio and gpio implementations to separate files Signed-off-by: Alex Tereschenko Signed-off-by: Brendan Le Foll --- include/mock/mock_board_aio.h | 44 +++++++++++ include/mock/mock_board_gpio.h | 65 +++++++++++++++++ src/CMakeLists.txt | 2 + src/mock/mock_board.c | 126 +------------------------------- src/mock/mock_board_aio.c | 52 +++++++++++++ src/mock/mock_board_gpio.c | 130 +++++++++++++++++++++++++++++++++ 6 files changed, 295 insertions(+), 124 deletions(-) create mode 100644 include/mock/mock_board_aio.h create mode 100644 include/mock/mock_board_gpio.h create mode 100644 src/mock/mock_board_aio.c create mode 100644 src/mock/mock_board_gpio.c diff --git a/include/mock/mock_board_aio.h b/include/mock/mock_board_aio.h new file mode 100644 index 0000000..87a5d76 --- /dev/null +++ b/include/mock/mock_board_aio.h @@ -0,0 +1,44 @@ +/* + * Author: Alex Tereschenko + * Copyright (c) 2016 Alex Tereschenko. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + +#include "mraa_internal.h" + +mraa_result_t +mraa_mock_aio_init_internal_replace(mraa_aio_context dev, int pin); + +mraa_result_t +mraa_mock_aio_close_replace(mraa_aio_context dev); + +int +mraa_mock_aio_read_replace(mraa_aio_context dev); + +#ifdef __cplusplus +} +#endif diff --git a/include/mock/mock_board_gpio.h b/include/mock/mock_board_gpio.h new file mode 100644 index 0000000..e9360a0 --- /dev/null +++ b/include/mock/mock_board_gpio.h @@ -0,0 +1,65 @@ +/* + * Author: Alex Tereschenko + * Copyright (c) 2016 Alex Tereschenko. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + +#include "mraa_internal.h" + +mraa_result_t +mraa_mock_gpio_init_internal_replace(mraa_gpio_context dev, int pin); + +mraa_result_t +mraa_mock_gpio_close_replace(mraa_gpio_context dev); + +mraa_result_t +mraa_mock_gpio_dir_replace(mraa_gpio_context dev, mraa_gpio_dir_t dir); + +mraa_result_t +mraa_mock_gpio_read_dir_replace(mraa_gpio_context dev, mraa_gpio_dir_t* dir); + +int +mraa_mock_gpio_read_replace(mraa_gpio_context dev); + +mraa_result_t +mraa_mock_gpio_write_replace(mraa_gpio_context dev, int value); + +mraa_result_t +mraa_mock_gpio_edge_mode_replace(mraa_gpio_context dev, mraa_gpio_edge_t mode); + +mraa_result_t +mraa_mock_gpio_isr_replace(mraa_gpio_context dev, mraa_gpio_edge_t mode, void (*fptr)(void*), void* args); + +mraa_result_t +mraa_mock_gpio_isr_exit_replace(mraa_gpio_context dev); + +mraa_result_t +mraa_mock_gpio_mode_replace(mraa_gpio_context dev, mraa_gpio_mode_t mode); + +#ifdef __cplusplus +} +#endif diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 03f7ae1..e6f8f6a 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -87,6 +87,8 @@ set (mraa_LIB_ARM_SRCS_NOAUTO set (mraa_LIB_MOCK_SRCS_NOAUTO ${PROJECT_SOURCE_DIR}/src/mock/mock.c ${PROJECT_SOURCE_DIR}/src/mock/mock_board.c + ${PROJECT_SOURCE_DIR}/src/mock/mock_board_gpio.c + ${PROJECT_SOURCE_DIR}/src/mock/mock_board_aio.c ) set (mraa_LIBS ${CMAKE_THREAD_LIBS_INIT}) diff --git a/src/mock/mock_board.c b/src/mock/mock_board.c index f27aaf0..e945acf 100644 --- a/src/mock/mock_board.c +++ b/src/mock/mock_board.c @@ -27,133 +27,11 @@ #include "common.h" #include "mock/mock_board.h" +#include "mock/mock_board_gpio.h" +#include "mock/mock_board_aio.h" #define PLATFORM_NAME "MRAA mock platform" -mraa_result_t -mraa_mock_gpio_init_internal_replace(mraa_gpio_context dev, int pin) -{ - dev->value_fp = -1; - dev->isr_value_fp = -1; - dev->isr_thread_terminating = 0; - dev->phy_pin = pin; - // We are always the owner - dev->owner = 1; -#ifndef HAVE_PTHREAD_CANCEL - dev->isr_control_pipe[0] = dev->isr_control_pipe[1] = -1; -#endif - - // We start as INPUT and LOW - dev->mock_dir = MRAA_GPIO_IN; - dev->mock_state = 0; - - return MRAA_SUCCESS; -} - -mraa_result_t -mraa_mock_gpio_close_replace(mraa_gpio_context dev) -{ - free(dev); - return MRAA_SUCCESS; -} - -mraa_result_t -mraa_mock_gpio_dir_replace(mraa_gpio_context dev, mraa_gpio_dir_t dir) -{ - switch (dir) { - case MRAA_GPIO_OUT_HIGH: - dev->mock_dir = MRAA_GPIO_OUT; - return mraa_gpio_write(dev, 1); - case MRAA_GPIO_OUT_LOW: - dev->mock_dir = MRAA_GPIO_OUT; - return mraa_gpio_write(dev, 0); - case MRAA_GPIO_IN: - case MRAA_GPIO_OUT: - dev->mock_dir = dir; - return MRAA_SUCCESS; - default: - syslog(LOG_ERR, "gpio: dir: invalid direction '%d' to set", (int) dir); - return MRAA_ERROR_INVALID_PARAMETER; - } -} - -mraa_result_t -mraa_mock_gpio_read_dir_replace(mraa_gpio_context dev, mraa_gpio_dir_t* dir) -{ - *dir = dev->mock_dir; - return MRAA_SUCCESS; -} - -int -mraa_mock_gpio_read_replace(mraa_gpio_context dev) -{ - return dev->mock_state; -} - -mraa_result_t -mraa_mock_gpio_write_replace(mraa_gpio_context dev, int value) -{ - if ((value < 0) || (value > 1)) { - syslog(LOG_ERR, "gpio: write: incorrect value '%d' passed to write(), must be 0 or 1", value); - return MRAA_ERROR_INVALID_PARAMETER; - } - - if (dev->mock_dir == MRAA_GPIO_IN) { - syslog(LOG_ERR, "gpio: write: cannot write to pin set to INPUT"); - return MRAA_ERROR_INVALID_RESOURCE; - } - - dev->mock_state = value; - return MRAA_SUCCESS; -} - -mraa_result_t -mraa_mock_gpio_edge_mode_replace(mraa_gpio_context dev, mraa_gpio_edge_t mode) -{ - return MRAA_ERROR_FEATURE_NOT_IMPLEMENTED; -} - -mraa_result_t -mraa_mock_gpio_isr_replace(mraa_gpio_context dev, mraa_gpio_edge_t mode, void (*fptr)(void*), void* args) -{ - return MRAA_ERROR_FEATURE_NOT_IMPLEMENTED; -} - -mraa_result_t -mraa_mock_gpio_isr_exit_replace(mraa_gpio_context dev) -{ - return MRAA_ERROR_FEATURE_NOT_IMPLEMENTED; -} - -mraa_result_t -mraa_mock_gpio_mode_replace(mraa_gpio_context dev, mraa_gpio_mode_t mode) -{ - return MRAA_ERROR_FEATURE_NOT_IMPLEMENTED; -} - -mraa_result_t -mraa_mock_aio_init_internal_replace(mraa_aio_context dev, int pin) -{ - dev->channel = pin; - return MRAA_SUCCESS; -} - -mraa_result_t -mraa_mock_aio_close_replace(mraa_aio_context dev) -{ - free(dev); - return MRAA_SUCCESS; -} - -int -mraa_mock_aio_read_replace(mraa_aio_context dev) -{ - // return some random number between 0 and max value, based on the resolution - int max_value = (1 << dev->value_bit) - 1; - srand(time(NULL)); - return rand() % max_value; -} - mraa_board_t* mraa_mock_board() { diff --git a/src/mock/mock_board_aio.c b/src/mock/mock_board_aio.c new file mode 100644 index 0000000..fa96a9d --- /dev/null +++ b/src/mock/mock_board_aio.c @@ -0,0 +1,52 @@ +/* + * Author: Alex Tereschenko + * Copyright (c) 2016 Alex Tereschenko. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include +#include + +#include "common.h" +#include "mock/mock_board_aio.h" + +mraa_result_t +mraa_mock_aio_init_internal_replace(mraa_aio_context dev, int pin) +{ + dev->channel = pin; + return MRAA_SUCCESS; +} + +mraa_result_t +mraa_mock_aio_close_replace(mraa_aio_context dev) +{ + free(dev); + return MRAA_SUCCESS; +} + +int +mraa_mock_aio_read_replace(mraa_aio_context dev) +{ + // return some random number between 0 and max value, based on the resolution + int max_value = (1 << dev->value_bit) - 1; + srand(time(NULL)); + return rand() % max_value; +} diff --git a/src/mock/mock_board_gpio.c b/src/mock/mock_board_gpio.c new file mode 100644 index 0000000..4ec3b66 --- /dev/null +++ b/src/mock/mock_board_gpio.c @@ -0,0 +1,130 @@ +/* + * Author: Alex Tereschenko + * Copyright (c) 2016 Alex Tereschenko. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include +#include + +#include "common.h" +#include "mock/mock_board_gpio.h" + +mraa_result_t +mraa_mock_gpio_init_internal_replace(mraa_gpio_context dev, int pin) +{ + dev->value_fp = -1; + dev->isr_value_fp = -1; + dev->isr_thread_terminating = 0; + dev->phy_pin = pin; + // We are always the owner + dev->owner = 1; +#ifndef HAVE_PTHREAD_CANCEL + dev->isr_control_pipe[0] = dev->isr_control_pipe[1] = -1; +#endif + + // We start as INPUT and LOW + dev->mock_dir = MRAA_GPIO_IN; + dev->mock_state = 0; + + return MRAA_SUCCESS; +} + +mraa_result_t +mraa_mock_gpio_close_replace(mraa_gpio_context dev) +{ + free(dev); + return MRAA_SUCCESS; +} + +mraa_result_t +mraa_mock_gpio_dir_replace(mraa_gpio_context dev, mraa_gpio_dir_t dir) +{ + switch (dir) { + case MRAA_GPIO_OUT_HIGH: + dev->mock_dir = MRAA_GPIO_OUT; + return mraa_gpio_write(dev, 1); + case MRAA_GPIO_OUT_LOW: + dev->mock_dir = MRAA_GPIO_OUT; + return mraa_gpio_write(dev, 0); + case MRAA_GPIO_IN: + case MRAA_GPIO_OUT: + dev->mock_dir = dir; + return MRAA_SUCCESS; + default: + syslog(LOG_ERR, "gpio: dir: invalid direction '%d' to set", (int) dir); + return MRAA_ERROR_INVALID_PARAMETER; + } +} + +mraa_result_t +mraa_mock_gpio_read_dir_replace(mraa_gpio_context dev, mraa_gpio_dir_t* dir) +{ + *dir = dev->mock_dir; + return MRAA_SUCCESS; +} + +int +mraa_mock_gpio_read_replace(mraa_gpio_context dev) +{ + return dev->mock_state; +} + +mraa_result_t +mraa_mock_gpio_write_replace(mraa_gpio_context dev, int value) +{ + if ((value < 0) || (value > 1)) { + syslog(LOG_ERR, "gpio: write: incorrect value '%d' passed to write(), must be 0 or 1", value); + return MRAA_ERROR_INVALID_PARAMETER; + } + + if (dev->mock_dir == MRAA_GPIO_IN) { + syslog(LOG_ERR, "gpio: write: cannot write to pin set to INPUT"); + return MRAA_ERROR_INVALID_RESOURCE; + } + + dev->mock_state = value; + return MRAA_SUCCESS; +} + +mraa_result_t +mraa_mock_gpio_edge_mode_replace(mraa_gpio_context dev, mraa_gpio_edge_t mode) +{ + return MRAA_ERROR_FEATURE_NOT_IMPLEMENTED; +} + +mraa_result_t +mraa_mock_gpio_isr_replace(mraa_gpio_context dev, mraa_gpio_edge_t mode, void (*fptr)(void*), void* args) +{ + return MRAA_ERROR_FEATURE_NOT_IMPLEMENTED; +} + +mraa_result_t +mraa_mock_gpio_isr_exit_replace(mraa_gpio_context dev) +{ + return MRAA_ERROR_FEATURE_NOT_IMPLEMENTED; +} + +mraa_result_t +mraa_mock_gpio_mode_replace(mraa_gpio_context dev, mraa_gpio_mode_t mode) +{ + return MRAA_ERROR_FEATURE_NOT_IMPLEMENTED; +}