use jetgpio_sys::{gpioInitialise, gpioPWM, gpioSetPWMfrequency};
use valid_pwm::ValidPwmPin;
use crate::gpio::{jetgpio_code_to_result, valid_pins::ValidPin};
pub mod valid_pwm;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct Pwm {
pin: u32,
}
impl Pwm {
pub fn new<PIN: ValidPwmPin + ValidPin>(pin: PIN) -> super::gpio::Result<Self> {
let pin = pin.pin();
let init = unsafe { gpioInitialise() };
jetgpio_code_to_result(init)?;
Ok(Self { pin })
}
pub fn set_frequency(&self, freq: u32) -> super::gpio::Result<()> {
let pwm_set_status = unsafe { gpioSetPWMfrequency(self.pin, freq) };
jetgpio_code_to_result(pwm_set_status)?;
Ok(())
}
pub fn set_duty_cycle(&self, duty_cycle: u32) -> super::gpio::Result<()> {
let res = unsafe { gpioPWM(self.pin, duty_cycle) };
jetgpio_code_to_result(res)?;
Ok(())
}
}