use crate::datatypes; use super::{Object, ObjectSpecies, RawObject}; use derive_getters::Getters; use derive_builder::Builder; use downcast_rs::Downcast pub trait FmCO2:Downcast{} #[derive(Clone,Debug)] pub enum FmCO2Species{ SpDATA, SpCALIBRATION, SpSTANDARD, SpMSG_ARGUMENTS, } impl ObjectSpecies for FmCO2Species{} impl FmCO2 for CCO2DData{} #[derive(Getters,Builder,Clone,Debug)] pub struct CCO2DData{ status:Status, extstatus:ExtStatus, source:Source, mode:Mode, method:Method, etco2:OBJECT::CNumDStd, fico2:OBJECT::CNumDStd, rr:OBJECT::CNumDStd, ipi:OBJECT::CNumDStd, s_etco2:OBJECT::CNumDStd, s_fico2:OBJECT::CNumDStd, contco2:OBJECT::CNumDStd, s_density_5:OBJECT::CNumDStd, s_density_10:OBJECT::CNumDStd, s_density_30:OBJECT::CNumDStd, apneaindex_total:OBJECT::CNumDStd, apneaindex_10_19:OBJECT::CNumDStd, apneaindex_20_29:OBJECT::CNumDStd, apneaindex_30:OBJECT::CNumDStd, desatcount:OBJECT::CNumDStd, stime:chrono::NaiveDateTime, #[getter(skip)] raw_object:RawObject, } #[derive(Clone,Copy,Debug,Default)] pub enum Status{ #[default] DATA_NOT_AVAIL, DATA_COMPLETE, DATA_FAILURE, DATA_EXCEPTION, DATA_PROCESSING, } #[derive(Clone,Copy,Debug,Default)] pub enum ExtStatus{ #[default] INITIALIZATION, SFM_REQUIRED, SFM_IN_PROGRESS, PURGING_IN_PROGRESS, FILTER_LINE_NO_CONNECT, CHECK_CALIBRATION, CHECK_FLOW, OCCLUSION_IN_GAS_LINE, TEMPERATURE_OUT_OF_RANGE, PUMP_OFF, } #[derive(Clone,Copy,Debug,Default)] pub enum Source{ #[default] NONE, UNKNOWN, BREATH_DETECTED, INTERVAL, } #[derive(Clone,Copy,Debug,Default)] pub enum Mode{ #[default] NONE, UNKNOWN, } #[derive(Clone,Copy,Debug,Default)] pub enum Method{ #[default] NONE, UNKNOWN, MANUAL, DEVICE, REMOTE, } pub impl CCO2DData { fn new() -> Self { todo!() } } impl Object for CCO2DData{ fn get_family(&self) -> datatypes::Family { datatypes::Family::FmCO2 } fn get_genus(&self) -> datatypes::Genus { datatypes::Genus::GnDATA } fn get_species(&self) -> Box { Box::new(FmCO2Species::CCO2DData) } fn get_raw_object(&self) -> RawObject { self.raw_object.clone() } } impl FmCO2 for CCO2CCal{} #[derive(Getters,Builder,Clone,Debug)] pub struct CCO2CCal{ status:Status, method:Method, gasconcentration:uint8, #[getter(skip)] raw_object:RawObject, } #[derive(Clone,Copy,Debug,Default)] pub enum Status{ #[default] IN_PROGRESS, NOT_READY, CALCULATING, COMPLETE_ERROR, COMPLETE_SUCCESS, USER_ABORT, MEASUREMENT_ERROR, AZ_FAIL, GAS_CONCENTRATION_CHECK, GAS_FLOW_UNSTABLE, CALIBRATION_FAILURE, } #[derive(Clone,Copy,Debug,Default)] pub enum Method{ #[default] NONE, REGULAR_CALIBRATION, SPECIAL_FACTORY_CALIBRATION, CALIBRATION_CHECK, } pub impl CCO2CCal { fn new() -> Self { todo!() } } impl Object for CCO2CCal{ fn get_family(&self) -> datatypes::Family { datatypes::Family::FmCO2 } fn get_genus(&self) -> datatypes::Genus { datatypes::Genus::GnCONFIG } fn get_species(&self) -> Box { Box::new(FmCO2Species::CCO2CCal) } fn get_raw_object(&self) -> RawObject { self.raw_object.clone() } } impl FmCO2 for CCO2CStd{} #[derive(Getters,Builder,Clone,Debug)] pub struct CCO2CStd{ displayunits:DisplayUnits, #[getter(skip)] raw_object:RawObject, } #[derive(Clone,Copy,Debug,Default)] pub enum DisplayUnits{ #[default] UNITS_MMHG, UNITS_KPA, } pub impl CCO2CStd { fn new() -> Self { todo!() } } impl Object for CCO2CStd{ fn get_family(&self) -> datatypes::Family { datatypes::Family::FmCO2 } fn get_genus(&self) -> datatypes::Genus { datatypes::Genus::GnCONFIG } fn get_species(&self) -> Box { Box::new(FmCO2Species::CCO2CStd) } fn get_raw_object(&self) -> RawObject { self.raw_object.clone() } } impl FmCO2 for CCO2PMsgArg{} #[derive(Getters,Builder,Clone,Debug)] pub struct CCO2PMsgArg{ ioparametera:uint16, ioparameterb:uint16, #[getter(skip)] raw_object:RawObject, } pub impl CCO2PMsgArg { fn new() -> Self { todo!() } } impl Object for CCO2PMsgArg{ fn get_family(&self) -> datatypes::Family { datatypes::Family::FmCO2 } fn get_genus(&self) -> datatypes::Genus { datatypes::Genus::GnPARAMETER } fn get_species(&self) -> Box { Box::new(FmCO2Species::CCO2PMsgArg) } fn get_raw_object(&self) -> RawObject { self.raw_object.clone() } }