Private
Public Access
2
0

pwm: add config_ms and config_percent.

* Allows user to set both at the same time. Will reset to previous if
* period for duty cycle fails to write

Signed-off-by: Thomas Ingleby <thomas.c.ingleby@intel.com>
This commit is contained in:
Mark Ceisel
2014-09-01 12:18:01 +01:00
committed by Thomas Ingleby
parent a8bbd55562
commit 9cf6cad45a
3 changed files with 89 additions and 0 deletions

View File

@@ -301,3 +301,51 @@ mraa_pwm_owner(mraa_pwm_context dev, mraa_boolean_t owner_new)
dev->owner = owner_new;
return MRAA_SUCCESS;
}
mraa_result_t
mraa_pwm_config_ms(mraa_pwm_context dev, int ms ,float ms_float)
{
int old_dutycycle, old_period, status;
old_dutycycle = mraa_pwm_read_duty(dev);
old_period = mraa_pwm_read_period(dev);
status = mraa_pwm_write_duty(dev, 0);
if (status != MRAA_SUCCESS) {
return status;
}
status = mraa_pwm_period_us(dev, ms*1000);
if (status != MRAA_SUCCESS) {
mraa_pwm_write_duty(dev, old_dutycycle);
return status;
}
status = mraa_pwm_pulsewidth_us(dev, ms_float*1000);
if (status != MRAA_SUCCESS) {
mraa_pwm_write_duty(dev, old_dutycycle);
mraa_pwm_write_period(dev, old_period);
return status;
}
return MRAA_SUCCESS;
}
mraa_result_t
mraa_pwm_config_percent(mraa_pwm_context dev, int ms ,float percentage)
{
int old_dutycycle, old_period, status;
old_dutycycle = mraa_pwm_read_duty(dev);
old_period = mraa_pwm_read_period(dev);
status = mraa_pwm_write_duty(dev, 0);
if (status != MRAA_SUCCESS) {
return status;
}
status = mraa_pwm_period_us(dev, ms*1000);
if (status != MRAA_SUCCESS) {
mraa_pwm_write_duty(dev, old_dutycycle);
return status;
}
status = mraa_pwm_pulsewidth_us(dev, (ms*1000)*percentage);
if (status != MRAA_SUCCESS) {
mraa_pwm_write_duty(dev, old_dutycycle);
mraa_pwm_write_period(dev, old_period);
return status;
}
return MRAA_SUCCESS;
}