From 5845350283bdcb7a97496a3e180c976bc0ef0d22 Mon Sep 17 00:00:00 2001 From: Brendan Le Foll Date: Thu, 10 Jul 2014 22:03:11 +0100 Subject: [PATCH 1/4] cmake: add -fno-omit-frame-pointer to CXX Debug flags Signed-off-by: Thomas Ingleby --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index dee9b80..d1b8449 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,7 +3,7 @@ project (mraa) FIND_PACKAGE (Threads) -set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall") +set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall -fno-omit-frame-pointer") set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wall") # Appends the cmake/modules path to MAKE_MODULE_PATH variable. From b5b7dec441e0e1ef30b67bf975083f79283e0001 Mon Sep 17 00:00:00 2001 From: Brendan Le Foll Date: Thu, 10 Jul 2014 22:08:05 +0100 Subject: [PATCH 2/4] mraa_internal: add extern "C" to internal headers Signed-off-by: Thomas Ingleby --- include/intel_galileo_rev_d.h | 8 ++++++++ include/intel_galileo_rev_g.h | 8 ++++++++ include/mraa_internal.h | 12 +++++++----- include/smbus.h | 8 ++++++++ include/version.h | 8 ++++++++ 5 files changed, 39 insertions(+), 5 deletions(-) diff --git a/include/intel_galileo_rev_d.h b/include/intel_galileo_rev_d.h index d1ff21d..fa6ad46 100644 --- a/include/intel_galileo_rev_d.h +++ b/include/intel_galileo_rev_d.h @@ -24,9 +24,17 @@ #pragma once +#ifdef __cplusplus +extern "C" { +#endif + #include "mraa_adv_func.h" #define MRAA_INTEL_GALILEO_REV_D_PINCOUNT 25 mraa_board_t* mraa_intel_galileo_rev_d(mraa_adv_func* adv); + +#ifdef __cplusplus +} +#endif diff --git a/include/intel_galileo_rev_g.h b/include/intel_galileo_rev_g.h index 478b178..472b403 100644 --- a/include/intel_galileo_rev_g.h +++ b/include/intel_galileo_rev_g.h @@ -24,9 +24,17 @@ #pragma once +#ifdef __cplusplus +extern "C" { +#endif + #include "mraa_adv_func.h" #define MRAA_INTEL_GALILEO_GEN_2_PINCOUNT 25 mraa_board_t* mraa_intel_galileo_gen2(mraa_adv_func* adv); + +#ifdef __cplusplus +} +#endif diff --git a/include/mraa_internal.h b/include/mraa_internal.h index 536c2eb..b8e5441 100644 --- a/include/mraa_internal.h +++ b/include/mraa_internal.h @@ -24,6 +24,10 @@ #pragma once +#ifdef __cplusplus +extern "C" { +#endif + #include "common.h" #include "mraa_adv_func.h" #include "mraa_internal_types.h" @@ -79,8 +83,6 @@ mraa_mmap_pin_t* mraa_setup_mmap_gpio(int pin); */ mraa_result_t mraa_swap_complex_gpio(int pin, int out); -/** Get the advance structure. - * - * @return struct containing internal advance information for hooks - */ -mraa_adv_func* mraa_get_advance(); +#ifdef __cplusplus +} +#endif diff --git a/include/smbus.h b/include/smbus.h index 469f0f9..740256e 100644 --- a/include/smbus.h +++ b/include/smbus.h @@ -30,6 +30,10 @@ #pragma once +#ifdef __cplusplus +extern "C" { +#endif + #include #include #include @@ -91,3 +95,7 @@ extern int i2c_smbus_write_i2c_block_data(int fd, uint8_t command, uint8_t lengt extern int i2c_smbus_block_process_call(int fd, uint8_t command, uint8_t length, uint8_t *values); + +#ifdef __cplusplus +} +#endif diff --git a/include/version.h b/include/version.h index eeff667..d60f189 100644 --- a/include/version.h +++ b/include/version.h @@ -24,5 +24,13 @@ #pragma once +#ifdef __cplusplus +extern "C" { +#endif + const char* gVERSION; const char* gVERSION_SHORT; + +#ifdef __cplusplus +} +#endif From 1fafd97f5eb03bb3a5ba89c3ee91c737507a56ed Mon Sep 17 00:00:00 2001 From: Thomas Ingleby Date: Thu, 10 Jul 2014 22:19:00 +0100 Subject: [PATCH 3/4] hook: rename from declared struct to adance_func * Removed bitfield, now checks if pointer NULL. Signed-off-by: Thomas Ingleby --- include/mraa_adv_func.h | 21 ++------------ include/mraa_internal.h | 2 ++ src/gpio/gpio.c | 62 ++++++++++++++++++++--------------------- src/mraa.c | 20 ++++--------- 4 files changed, 39 insertions(+), 66 deletions(-) diff --git a/include/mraa_adv_func.h b/include/mraa_adv_func.h index 6a71125..6dd45ce 100644 --- a/include/mraa_adv_func.h +++ b/include/mraa_adv_func.h @@ -29,25 +29,8 @@ #include "types.h" typedef struct { - mraa_boolean_t gpio_init_pre:1; - mraa_boolean_t gpio_init_post:1; - mraa_boolean_t gpio_mode_replace:1; - mraa_boolean_t gpio_mode_pre:1; - mraa_boolean_t gpio_mode_post:1; - mraa_boolean_t gpio_dir_replace:1; - mraa_boolean_t gpio_dir_pre:1; - mraa_boolean_t gpio_dir_post:1; - mraa_boolean_t gpio_write_pre:1; - mraa_boolean_t gpio_write_post:1; - mraa_boolean_t gpio_mmaped_write_replace:1; - mraa_boolean_t gpio_mmaped_write_pre:1; - mraa_boolean_t gpio_mmaped_write_post:1; -} mraa_adv_def_t; - -typedef struct { - mraa_adv_def_t defined; - int (*gpio_init_pre) (int pin); - void (*gpio_init_post) (mraa_gpio_context dev); + mraa_result_t (*gpio_init_pre) (int pin); + mraa_result_t (*gpio_init_post) (mraa_gpio_context dev); mraa_result_t (*gpio_mode_replace) (mraa_gpio_context dev, gpio_mode_t mode); mraa_result_t (*gpio_mode_pre) (mraa_gpio_context dev, gpio_mode_t mode); diff --git a/include/mraa_internal.h b/include/mraa_internal.h index b8e5441..f7ca87f 100644 --- a/include/mraa_internal.h +++ b/include/mraa_internal.h @@ -32,6 +32,8 @@ extern "C" { #include "mraa_adv_func.h" #include "mraa_internal_types.h" +extern mraa_adv_func advance_func; + /** Setup gpio * * Will check input is valid for gpio and will also setup required multiplexers. diff --git a/src/gpio/gpio.c b/src/gpio/gpio.c index b929375..f61b172 100644 --- a/src/gpio/gpio.c +++ b/src/gpio/gpio.c @@ -39,8 +39,6 @@ #define MAX_SIZE 64 #define POLL_TIMEOUT -static mraa_adv_func* advance; - static mraa_result_t mraa_gpio_get_valfp(mraa_gpio_context dev) { @@ -69,12 +67,10 @@ mraa_gpio_init(int pin) mraa_gpio_context mraa_gpio_init_raw(int pin) { - advance = mraa_get_advance(); - if (advance->defined.gpio_init_pre) { - if((advance->gpio_init_pre(pin)) != 0) { - printf("MRAA: Error in pre hook\n"); + if (advance_func.gpio_init_pre != NULL) { + printf("Actually entering\n"); + if (advance_func.gpio_init_pre(pin) != MRAA_SUCCESS) return NULL; - } } if (pin < 0) return NULL; @@ -111,18 +107,20 @@ mraa_gpio_init_raw(int pin) close(export); } - if (advance->defined.gpio_init_post) - advance->gpio_init_post(dev); + if (advance_func.gpio_init_post != NULL) { + free(dev); + return NULL; + } return dev; } static mraa_result_t mraa_gpio_write_register(mraa_gpio_context dev,int value) { - if (advance->defined.gpio_mmaped_write_replace) - return advance->gpio_mmaped_write_replace(dev,value); - if (advance->defined.gpio_mmaped_write_pre) { - mraa_result_t pre_ret = (advance->gpio_mmaped_write_pre(dev,value)); + if (advance_func.gpio_mmaped_write_replace != NULL) + return advance_func.gpio_mmaped_write_replace(dev,value); + if (advance_func.gpio_mmaped_write_pre != NULL) { + mraa_result_t pre_ret = (advance_func.gpio_mmaped_write_pre(dev,value)); if(pre_ret != MRAA_SUCCESS) return pre_ret; } @@ -132,8 +130,8 @@ mraa_gpio_write_register(mraa_gpio_context dev,int value) } *((unsigned *)dev->reg) &= ~(1<reg_bit_pos); - if (advance->defined.gpio_mmaped_write_post) - return advance->gpio_mmaped_write_post(dev,value); + if (advance_func.gpio_mmaped_write_post != NULL) + return advance_func.gpio_mmaped_write_post(dev,value); return MRAA_SUCCESS; } @@ -313,18 +311,17 @@ mraa_gpio_isr_exit(mraa_gpio_context dev) // assume our thread will exit either way we just lost it's handle dev->thread_id = 0; dev->isr_value_fp = -1; - return ret; } mraa_result_t mraa_gpio_mode(mraa_gpio_context dev, gpio_mode_t mode) { - if (advance->defined.gpio_mode_replace) - return advance->gpio_mode_replace(dev,mode); + if (advance_func.gpio_mode_replace != NULL) + return advance_func.gpio_mode_replace(dev,mode); - if (advance->defined.gpio_mode_pre) { - mraa_result_t pre_ret = (advance->gpio_mode_pre(dev,mode)); + if (advance_func.gpio_mode_pre != NULL) { + mraa_result_t pre_ret = (advance_func.gpio_mode_pre(dev,mode)); if(pre_ret != MRAA_SUCCESS) return pre_ret; } @@ -370,18 +367,18 @@ mraa_gpio_mode(mraa_gpio_context dev, gpio_mode_t mode) } close(drive); - if (advance->defined.gpio_mode_post) - return advance->gpio_mode_post(dev,mode); + if (advance_func.gpio_mode_post != NULL) + return advance_func.gpio_mode_post(dev,mode); return MRAA_SUCCESS; } mraa_result_t mraa_gpio_dir(mraa_gpio_context dev, gpio_dir_t dir) { - if (advance->defined.gpio_dir_replace) - return advance->gpio_dir_replace(dev,dir); - if (advance->defined.gpio_dir_pre) { - mraa_result_t pre_ret = (advance->gpio_dir_pre(dev,dir)); + if (advance_func.gpio_dir_replace != NULL) + return advance_func.gpio_dir_replace(dev,dir); + if (advance_func.gpio_dir_pre != NULL) { + mraa_result_t pre_ret = (advance_func.gpio_dir_pre(dev,dir)); if(pre_ret != MRAA_SUCCESS) return pre_ret; } @@ -429,8 +426,8 @@ mraa_gpio_dir(mraa_gpio_context dev, gpio_dir_t dir) } close(direction); - if (advance->defined.gpio_dir_post) - return advance->gpio_dir_post(dev,dir); + if (advance_func.gpio_dir_post != NULL) + return advance_func.gpio_dir_post(dev,dir); return MRAA_SUCCESS; } @@ -454,6 +451,7 @@ mraa_gpio_read(mraa_gpio_context dev) int ret = strtol(bu, NULL, 10); return ret; + return 0; } mraa_result_t @@ -462,8 +460,8 @@ mraa_gpio_write(mraa_gpio_context dev, int value) if (dev->mmap == 1) return mraa_gpio_write_register(dev,value); - if (advance->defined.gpio_write_pre) { - mraa_result_t pre_ret = (advance->gpio_write_pre(dev,value)); + if (advance_func.gpio_write_pre != NULL) { + mraa_result_t pre_ret = (advance_func.gpio_write_pre(dev,value)); if(pre_ret != MRAA_SUCCESS) return pre_ret; } @@ -481,8 +479,8 @@ mraa_gpio_write(mraa_gpio_context dev, int value) return MRAA_ERROR_INVALID_HANDLE; } - if (advance->defined.gpio_write_post) - return advance->gpio_write_post(dev,value); + if (advance_func.gpio_write_post != NULL) + return advance_func.gpio_write_post(dev,value); return MRAA_SUCCESS; } diff --git a/src/mraa.c b/src/mraa.c index 09f3c65..2abde86 100644 --- a/src/mraa.c +++ b/src/mraa.c @@ -37,7 +37,7 @@ //static mraa_pininfo_t* pindata; static mraa_board_t* plat = NULL; static mraa_platform_t platform_type = MRAA_UNKNOWN_PLATFORM; -static mraa_adv_func* advance = NULL; +mraa_adv_func advance_func; const char * mraa_get_version() @@ -45,13 +45,8 @@ mraa_get_version() return gVERSION; } -#ifdef SWIG -mraa_result_t -mraa_init() -#else mraa_result_t __attribute__((constructor)) mraa_init() -#endif { /** Once more board definitions have been added, * A method for detecting them will need to be devised. @@ -82,16 +77,16 @@ mraa_init() free(line); fclose(fh); - advance = (mraa_adv_func*) malloc(sizeof(mraa_adv_func)); + memset(&advance_func, 0, sizeof(mraa_adv_func)); switch(platform_type) { case MRAA_INTEL_GALILEO_GEN2: - plat = mraa_intel_galileo_gen2(advance); + plat = mraa_intel_galileo_gen2(&advance_func); break; case MRAA_INTEL_GALILEO_GEN1: - plat = mraa_intel_galileo_rev_d(advance); + plat = mraa_intel_galileo_rev_d(&advance_func); break; default: - plat = mraa_intel_galileo_rev_d(advance); + plat = mraa_intel_galileo_rev_d(&advance_func); fprintf(stderr, "Platform not found, initialising MRAA_INTEL_GALILEO_GEN1\n"); } @@ -445,8 +440,3 @@ mraa_adc_supported_bits() return plat->adc_supported; } - -mraa_adv_func* -mraa_get_advance() { - return advance; -} From d7c8f2a79431b8f9461597b86ef9f046357404c6 Mon Sep 17 00:00:00 2001 From: Thomas Ingleby Date: Fri, 11 Jul 2014 11:41:14 +0100 Subject: [PATCH 4/4] hook: change header of board definition, add internal Signed-off-by: Thomas Ingleby --- include/intel_galileo_rev_d.h | 2 +- include/intel_galileo_rev_g.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/include/intel_galileo_rev_d.h b/include/intel_galileo_rev_d.h index fa6ad46..72f27bf 100644 --- a/include/intel_galileo_rev_d.h +++ b/include/intel_galileo_rev_d.h @@ -28,7 +28,7 @@ extern "C" { #endif -#include "mraa_adv_func.h" +#include "mraa_internal.h" #define MRAA_INTEL_GALILEO_REV_D_PINCOUNT 25 diff --git a/include/intel_galileo_rev_g.h b/include/intel_galileo_rev_g.h index 472b403..d439010 100644 --- a/include/intel_galileo_rev_g.h +++ b/include/intel_galileo_rev_g.h @@ -28,7 +28,7 @@ extern "C" { #endif -#include "mraa_adv_func.h" +#include "mraa_internal.h" #define MRAA_INTEL_GALILEO_GEN_2_PINCOUNT 25