1mod common;
2use crate::common::{Action, Request, State};
3mod crc;
4mod current;
5mod message;
6mod port;
7mod result;
8pub use result::Hm305pError;
9mod voltage;
10
11pub fn get_switch_state() -> Result<State, Hm305pError> {
12    let state = message::send_and_receive(Request::Read(Action::OnOff))?;
13    match state {
14        0 => Ok(State::Off),
15        1 => Ok(State::On),
16        _ => Err(Hm305pError::InvalidState(state)),
17    }
18}
19
20pub fn get_current_ma() -> Result<u16, Hm305pError> {
22    message::send_and_receive(Request::Read(Action::CurrentmA))
23}
24
25pub fn get_voltage_mv() -> Result<u16, Hm305pError> {
29    message::send_and_receive(Request::Read(Action::VoltagemV))
30}
31
32pub fn switch_on() -> Result<(), Hm305pError> {
33    let _ = message::send_and_receive(Request::Write((Action::OnOff, 0x0001)))?;
34
35    Ok(())
36}
37
38pub fn switch_off() -> Result<(), Hm305pError> {
39    let _ = message::send_and_receive(Request::Write((Action::OnOff, 0x0000)))?;
40
41    Ok(())
42}
43
44pub fn set_current_ma(current_ma: u16) -> Result<(), Hm305pError> {
46    let _ = message::send_and_receive(Request::Write((Action::CurrentmA, current_ma)))?;
47
48    Ok(())
49}
50
51pub fn set_voltage_mv(voltage_mv: u16) -> Result<(), Hm305pError> {
58    let _ = message::send_and_receive(Request::Write((Action::VoltagemV, voltage_mv)))?;
59
60    Ok(())
61}