From e961558fd2abc9c869d1b34ea7666d68846ac77f Mon Sep 17 00:00:00 2001 From: Brendan Le Foll Date: Fri, 22 Apr 2016 09:38:30 +0100 Subject: [PATCH] mraa: add mraa_remove_subplatform call Signed-off-by: Brendan Le Foll --- api/mraa/common.h | 9 +++++++++ api/mraa/common.hpp | 6 ++++++ src/mraa.c | 19 +++++++++++++++++++ 3 files changed, 34 insertions(+) diff --git a/api/mraa/common.h b/api/mraa/common.h index eba536e..6bf2db7 100644 --- a/api/mraa/common.h +++ b/api/mraa/common.h @@ -284,6 +284,15 @@ int mraa_get_sub_platform_index(int pin_or_bus_id); */ mraa_result_t mraa_add_subplatform(mraa_platform_t subplatformtype, const char* uart_dev); +/** + * Remove a mraa subplatform + * + * @param subplatform type + * + * @return mraa_result indicating success + */ +mraa_result_t mraa_remove_subplatform(mraa_platform_t subplatformtype); + #ifdef __cplusplus } #endif diff --git a/api/mraa/common.hpp b/api/mraa/common.hpp index 397254d..235e57d 100644 --- a/api/mraa/common.hpp +++ b/api/mraa/common.hpp @@ -303,4 +303,10 @@ addSubplatform(Platform subplatformtype, std::string uart_dev) return (Result) mraa_add_subplatform((mraa_platform_t) subplatformtype, uart_dev.c_str()); } +inline Result +removeSubplatform(Platform subplatformtype) +{ + return (Result) mraa_remove_subplatform((mraa_platform_t) subplatformtype); +} + } diff --git a/src/mraa.c b/src/mraa.c index fc04016..a5e32ff 100644 --- a/src/mraa.c +++ b/src/mraa.c @@ -982,6 +982,9 @@ mraa_add_subplatform(mraa_platform_t subplatformtype, const char* uart_dev) { #if defined(FIRMATA) if (subplatformtype == MRAA_GENERIC_FIRMATA) { + if (plat->sub_platform != NULL) { + return MRAA_ERROR_INVALID_PARAMETER; + } if (mraa_firmata_platform(plat, uart_dev) == MRAA_GENERIC_FIRMATA) { syslog(LOG_NOTICE, "mraa: Added firmata subplatform"); return MRAA_SUCCESS; @@ -993,6 +996,22 @@ mraa_add_subplatform(mraa_platform_t subplatformtype, const char* uart_dev) return MRAA_ERROR_INVALID_PARAMETER; } +mraa_result_t +mraa_remove_subplatform(mraa_platform_t subplatformtype) +{ +#if defined(FIRMATA) + if (subplatformtype == MRAA_GENERIC_FIRMATA) { + if (plat == NULL || plat->sub_platform == NULL) { + return MRAA_ERROR_INVALID_PARAMETER; + } + free(plat->sub_platform->adv_func); + free(plat->sub_platform->pins); + free(plat->sub_platform); + } +#endif + return MRAA_ERROR_INVALID_PARAMETER; +} + #if defined(IMRAA) mraa_result_t mraa_add_from_lockfile(const char* imraa_lock_file)