*/
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
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;
};
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;
+}