From 0e5dadeb8c2e91aa711b6e6fb2a16c48f35a08cb Mon Sep 17 00:00:00 2001 From: Mihai Tudor Panu Date: Tue, 15 Mar 2016 16:34:29 -0700 Subject: [PATCH] pwm: removed unused code and optimized flow for subplatform support Signed-off-by: Mihai Tudor Panu Signed-off-by: Brendan Le Foll --- api/mraa/pwm.h | 6 ++++-- api/mraa/pwm.hpp | 9 +++------ src/pwm/pwm.c | 36 +++++++++++++++++++++++++----------- 3 files changed, 32 insertions(+), 19 deletions(-) diff --git a/api/mraa/pwm.h b/api/mraa/pwm.h index ef78110..48b5e77 100644 --- a/api/mraa/pwm.h +++ b/api/mraa/pwm.h @@ -189,16 +189,18 @@ mraa_result_t mraa_pwm_config_percent(mraa_pwm_context dev, int period, float du /** * Get the maximum pwm period in us * + * @param dev The pwm context to use * @return max pwm in us */ -int mraa_pwm_get_max_period(); +int mraa_pwm_get_max_period(mraa_pwm_context dev); /** * Get the minimum pwm period in us * + * @param dev The pwm context to use * @return min pwm in us */ -int mraa_pwm_get_min_period(); +int mraa_pwm_get_min_period(mraa_pwm_context dev); #ifdef __cplusplus } diff --git a/api/mraa/pwm.hpp b/api/mraa/pwm.hpp index a449a43..9f0efc2 100644 --- a/api/mraa/pwm.hpp +++ b/api/mraa/pwm.hpp @@ -176,10 +176,7 @@ class Pwm Result enable(bool enable) { - if (enable) - return (Result) mraa_pwm_enable(m_pwm, 1); - else - return (Result) mraa_pwm_enable(m_pwm, 0); + return (Result) mraa_pwm_enable(m_pwm, enable); } /** * Set the period and duty of a PWM object. @@ -213,7 +210,7 @@ class Pwm int max_period() { - return mraa_pwm_get_max_period(); + return mraa_pwm_get_max_period(m_pwm); } /** * Get the minimum pwm period in us @@ -223,7 +220,7 @@ class Pwm int min_period() { - return mraa_pwm_get_min_period(); + return mraa_pwm_get_min_period(m_pwm); } private: diff --git a/src/pwm/pwm.c b/src/pwm/pwm.c index d7179ac..9b24231 100644 --- a/src/pwm/pwm.c +++ b/src/pwm/pwm.c @@ -98,6 +98,10 @@ mraa_pwm_write_duty(mraa_pwm_context dev, int duty) static int mraa_pwm_read_period(mraa_pwm_context dev) { + if (IS_FUNC_DEFINED(dev, pwm_read_replace)) { + return dev->period; + } + char bu[MAX_SIZE]; char output[MAX_SIZE]; snprintf(bu, MAX_SIZE, "/sys/class/pwm/pwmchip%d/pwm%d/period", dev->chipid, dev->pin); @@ -134,6 +138,10 @@ mraa_pwm_read_period(mraa_pwm_context dev) static int mraa_pwm_read_duty(mraa_pwm_context dev) { + if (IS_FUNC_DEFINED(dev, pwm_read_replace)) { + return dev->advance_func->pwm_read_replace(dev); + } + if (dev->duty_fp == -1) { if (mraa_pwm_setup_duty_fp(dev) == 1) { return MRAA_ERROR_INVALID_HANDLE; @@ -316,9 +324,6 @@ mraa_pwm_write(mraa_pwm_context dev, float percentage) float mraa_pwm_read(mraa_pwm_context dev) { - if (IS_FUNC_DEFINED(dev, pwm_read_replace)) { - return dev->advance_func->pwm_read_replace(dev); - } int period = mraa_pwm_read_period(dev); if (period > 0) { return (mraa_pwm_read_duty(dev) / (float) period); @@ -341,7 +346,15 @@ mraa_pwm_period_ms(mraa_pwm_context dev, int ms) mraa_result_t mraa_pwm_period_us(mraa_pwm_context dev, int us) { - if (us < plat->pwm_min_period || us > plat->pwm_max_period) { + int min, max; + if (mraa_is_sub_platform_id(dev->chipid)) { + min = plat->sub_platform->pwm_min_period; + max = plat->sub_platform->pwm_max_period; + } else { + min = plat->pwm_min_period; + max = plat->pwm_max_period; + } + if (us < min || us > max) { syslog(LOG_ERR, "pwm: period value outside platform range"); return MRAA_ERROR_INVALID_PARAMETER; } @@ -373,11 +386,6 @@ mraa_pwm_enable(mraa_pwm_context dev, int enable) return dev->advance_func->pwm_enable_replace(dev, enable); } int status; - if (enable != 0) { - status = 1; - } else { - status = enable; - } char bu[MAX_SIZE]; snprintf(bu, MAX_SIZE, "/sys/class/pwm/pwmchip%d/pwm%d/enable", dev->chipid, dev->pin); @@ -498,19 +506,25 @@ mraa_pwm_config_percent(mraa_pwm_context dev, int ms, float percentage) } int -mraa_pwm_get_max_period() +mraa_pwm_get_max_period(mraa_pwm_context dev) { if (plat == NULL) { return -1; } + if (mraa_is_sub_platform_id(dev->chipid)) { + return plat->sub_platform->pwm_max_period; + } return plat->pwm_max_period; } int -mraa_pwm_get_min_period() +mraa_pwm_get_min_period(mraa_pwm_context dev) { if (plat == NULL) { return -1; } + if (mraa_is_sub_platform_id(dev->chipid)) { + return plat->sub_platform->pwm_min_period; + } return plat->pwm_min_period; }