From 35e17ee25a534110d960a59fee6e6e83d31a9bbf Mon Sep 17 00:00:00 2001 From: Sanrio Alvares Date: Fri, 28 Apr 2017 14:55:31 -0700 Subject: [PATCH] periphmraa: fix pwm calls to PIO Signed-off-by: Sanrio Alvares Signed-off-by: Noel Eck --- include/mraa_adv_func.h | 1 - src/peripheralman/peripheralman.c | 13 ++++--------- src/pwm/pwm.c | 5 +++++ 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/include/mraa_adv_func.h b/include/mraa_adv_func.h index 82c6407..d6b0a56 100644 --- a/include/mraa_adv_func.h +++ b/include/mraa_adv_func.h @@ -90,7 +90,6 @@ typedef struct { mraa_result_t (*pwm_init_pre) (int pin); mraa_result_t (*pwm_init_post) (mraa_pwm_context pwm); mraa_result_t (*pwm_period_replace) (mraa_pwm_context dev, int period); - mraa_result_t (*pwm_duty_cycle_replace) (mraa_pwm_context dev, int duty_cycle); float (*pwm_read_replace) (mraa_pwm_context dev); mraa_result_t (*pwm_write_replace) (mraa_pwm_context dev, float duty); mraa_result_t (*pwm_write_pre) (mraa_pwm_context dev, float percentage); diff --git a/src/peripheralman/peripheralman.c b/src/peripheralman/peripheralman.c index b084b69..69f7bab 100644 --- a/src/peripheralman/peripheralman.c +++ b/src/peripheralman/peripheralman.c @@ -68,14 +68,16 @@ mraa_pman_pwm_period_replace(mraa_pwm_context dev, int period) } static mraa_result_t -mraa_pman_pwm_duty_cycle_replace(mraa_pwm_context dev, int duty_cycle) +mraa_pman_pwm_write_replace(mraa_pwm_context dev, float duty) { if (!dev) { syslog(LOG_ERR, "pwm: stop: context is NULL"); return 0; } - if (APwm_setDutyCycle(dev->bpwm, duty_cycle) != 0) { + // PIO can only take values between 0 <= duty <= 100 + int d = (int) (duty > 100 ) ? 100 : duty; + if (APwm_setDutyCycle(dev->bpwm, d) != 0) { return 0; } @@ -103,12 +105,6 @@ mraa_pman_pwm_read_replace(mraa_pwm_context dev) return -MRAA_ERROR_FEATURE_NOT_SUPPORTED; } -static mraa_result_t -mraa_pman_pwm_write_replace(mraa_pwm_context dev, float duty) -{ - return -MRAA_ERROR_FEATURE_NOT_SUPPORTED; -} - static mraa_result_t mraa_pman_uart_init_raw_replace(mraa_uart_context dev, const char* path) { @@ -867,7 +863,6 @@ mraa_peripheralman_plat_init() b->adv_func->pwm_init_raw_replace = &mraa_pman_pwm_init_raw_replace; b->adv_func->pwm_period_replace = &mraa_pman_pwm_period_replace; - b->adv_func->pwm_duty_cycle_replace = &mraa_pman_pwm_duty_cycle_replace; b->adv_func->pwm_enable_replace = &mraa_pman_pwm_enable_replace; b->adv_func->pwm_read_replace = &mraa_pman_pwm_read_replace; b->adv_func->pwm_write_replace = &mraa_pman_pwm_write_replace; diff --git a/src/pwm/pwm.c b/src/pwm/pwm.c index 133aaf2..3753fc8 100644 --- a/src/pwm/pwm.c +++ b/src/pwm/pwm.c @@ -269,7 +269,12 @@ mraa_pwm_init(int pin) } return pret; } + +#if defined(PERIPHERALMAN) + return mraa_pwm_init_raw(chip, pin); +#else return mraa_pwm_init_raw(chip, pinn); +#endif } mraa_pwm_context