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:
committed by
Thomas Ingleby
parent
a8bbd55562
commit
9cf6cad45a
@@ -166,6 +166,26 @@ mraa_result_t mraa_pwm_owner(mraa_pwm_context dev, mraa_boolean_t owner);
|
||||
*/
|
||||
mraa_result_t mraa_pwm_close(mraa_pwm_context dev);
|
||||
|
||||
/**
|
||||
* Set Both Period and DutyCycle on a PWM context
|
||||
*
|
||||
* @param dev The pwm context to use
|
||||
* @param period represented in ms.
|
||||
* @param duty dutycycle of the pwm signal.
|
||||
* @return Result of operation
|
||||
*/
|
||||
mraa_result_t mraa_pwm_config_ms(mraa_pwm_context dev, int period, float duty);
|
||||
|
||||
/**
|
||||
* Set Both Period and DutyCycle on a PWM context. Duty represented as percentage.
|
||||
*
|
||||
* @param dev The pwm context to use
|
||||
* @param period represented in ms.
|
||||
* @param duty duty percantage. i.e. 50% = 0.5f
|
||||
* @return Result of operation
|
||||
*/
|
||||
mraa_result_t mraa_pwm_config_percent(mraa_pwm_context dev, int period, float duty);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -150,6 +150,27 @@ class Pwm {
|
||||
else
|
||||
return mraa_pwm_enable(m_pwm, 0);
|
||||
}
|
||||
/**
|
||||
* Set the period and duty of a PWM object.
|
||||
*
|
||||
* @param period represented in ms.
|
||||
* @param duty represnted in ms as float.
|
||||
* @return Result of operation
|
||||
*/
|
||||
mraa_result_t config_ms(int period, float duty) {
|
||||
return mraa_pwm_config_ms(m_pwm, period, duty);
|
||||
}
|
||||
/**
|
||||
* Set the period and duty (percent) of a PWM object.
|
||||
*
|
||||
* @param period as represented in ms.
|
||||
* @param duty percentage i.e. 50% = 0.5f
|
||||
* @return Result of operation
|
||||
*/
|
||||
mraa_result_t config_percent(int period, float duty) {
|
||||
return mraa_pwm_config_percent(m_pwm, period, duty);
|
||||
}
|
||||
|
||||
private:
|
||||
mraa_pwm_context m_pwm;
|
||||
};
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user