dpdu-wrapper 0.2.0

High-level Rust wrapper for D-PDU implementations.
use crate::api::{ApiResult, PduApi};
use crate::types::PduModuleHandle;
use crate::types::pdu_io_ctl::{PduIoCtlCommand, PduIoCtlData, PduIoCtlTarget};
use dpdu_api_types::PduError;
use tracing::error;

impl PduApi {
    pub fn vt_io_ctl_read_ignition_sense_state(
        &self,
        h_mod: PduModuleHandle,
        pin: Option<u32>,
    ) -> ApiResult<bool> {
        match self.pdu_io_ctl(
            &PduIoCtlTarget::Module(h_mod),
            &PduIoCtlCommand::from("PDU_IOCTL_READ_IGNITION_SENSE_STATE"),
            Some(&PduIoCtlData::U32(pin.unwrap_or(0))),
        )? {
            Some(PduIoCtlData::U32(v)) => Ok(if v > 0 { true } else { false }),
            Some(_) => {
                error!(
                    h_mod,
                    "IoCtl output data is wrong. Emulation of PduError::FctFailed..."
                );
                Err(PduError::FctFailed)?
            }
            None => {
                error!(
                    h_mod,
                    "IoCtl output data is null. Emulation of PduError::FctFailed..."
                );
                Err(PduError::FctFailed)?
            }
        }
    }
}