use crate::datatypes; use super::{Object, ObjectSpecies, RawObject}; use derive_getters::Getters; use derive_builder::Builder; use downcast_rs::Downcast pub trait FmSPO2:Downcast{} #[derive(Clone,Debug)] pub enum FmSPO2Species{ SpSTANDARD, SpDATA, SpDATAMODIFIED, SpSELECTOR, } impl ObjectSpecies for FmSPO2Species{} impl FmSPO2 for CSpO2DStd{} #[derive(Getters,Builder,Clone,Debug)] pub struct CSpO2DStd{ stime:chrono::NaiveDateTime, status:Status, sat:uint16, hr:uint16, extstatus:ExtStatus, source:Source, mode:Mode, method:Method, #[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] NONE, SPO2_NOPROBE, SPO2_NOTAVAIL, SPO2_OUT_OF_TRACK, SPO2_BAD, SPO2_WAIT, SPO2_SENSOR_BAD, SPO2_FROZEN, } #[derive(Clone,Copy,Debug,Default)] pub enum Source{ #[default] NONE, UNKNOWN, NONIN, NELLCOR_MP205, NELLCOR_MP506, MASIMO_MS11, NELLCOR_NELL3, NELLCOR_NELL1, MASIMO_MS2011, MASIMO_MX, NELLCOR, NELLCOR_PMB05N, } #[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 CSpO2DStd { fn new() -> Self { todo!() } } impl Object for CSpO2DStd{ fn get_family(&self) -> datatypes::Family { datatypes::Family::FmSPO2 } fn get_genus(&self) -> datatypes::Genus { datatypes::Genus::GnDATA } fn get_species(&self) -> Box { Box::new(FmSPO2Species::CSpO2DStd) } fn get_raw_object(&self) -> RawObject { self.raw_object.clone() } } impl FmSPO2 for CSpO2DData{} #[derive(Getters,Builder,Clone,Debug)] pub struct CSpO2DData{ stime:chrono::NaiveDateTime, extstatus:ExtStatus, source:Source, sat:OBJECT::CNumDStd, hr:OBJECT::CNumDStd, pi:OBJECT::CNumDStd, status:Status, elapsedsatseconds:OBJECT::CNumDStd, totalsatseconds:OBJECT::CNumDStd, satconfidence:OBJECT::CNumDStd, hrconfidence:OBJECT::CNumDStd, piconfidence:OBJECT::CNumDStd, pviconfidence:OBJECT::CNumDStd, pvi:OBJECT::CNumDStd, mode:Mode, method:Method, #[getter(skip)] raw_object:RawObject, } #[derive(Clone,Copy,Debug,Default)] pub enum ExtStatus{ #[default] PULSE_FOUND, SEARCHING_FOR_BOARD, NO_PROBE, INCORRECT_PROBE, SEARCHING_FOR_PULSE, BAD_PROBE, PROBE_EXPIRED, NO_CABLE, INCORRECT_CABLE, BAD_CABLE, CABLE_EXPIRED, VALUE_NOT_ACQUIRED, } #[derive(Clone,Copy,Debug,Default)] pub enum Source{ #[default] NONE, UNKNOWN, NONIN, NELLCOR_MP205, NELLCOR_MP506, MASIMO_MS11, NELLCOR_NELL3, NELLCOR_NELL1, MASIMO_MS2011, MASIMO_MX, NELLCOR, NELLCOR_PMB05N, } #[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 Mode{ #[default] NONE, UNKNOWN, } #[derive(Clone,Copy,Debug,Default)] pub enum Method{ #[default] NONE, UNKNOWN, MANUAL, DEVICE, REMOTE, } pub impl CSpO2DData { fn new() -> Self { todo!() } } impl Object for CSpO2DData{ fn get_family(&self) -> datatypes::Family { datatypes::Family::FmSPO2 } fn get_genus(&self) -> datatypes::Genus { datatypes::Genus::GnDATA } fn get_species(&self) -> Box { Box::new(FmSPO2Species::CSpO2DData) } fn get_raw_object(&self) -> RawObject { self.raw_object.clone() } } impl FmSPO2 for CSpO2DDataModified{} #[derive(Getters,Builder,Clone,Debug)] pub struct CSpO2DDataModified{ spo2data:OBJECT::CSpO2DData, o2flowrate:uint8, o2concentration:uint8, o2method:O2Method, location:Location, #[getter(skip)] raw_object:RawObject, } #[derive(Clone,Copy,Debug,Default)] pub enum O2Method{ #[default] NONE, UNKNOWN, AEROSOL_HUMIDIFIED_MASK, FACE_TENT, MASK, NASAL_CANNULA, NON_REBREATHER, PARTIAL_REBREATHER, T_PIECE, TRACHEOSTOMY_COLLAR, VENTILATOR, VENTURI_MASK, ROOM_AIR, OXYMIZER, } #[derive(Clone,Copy,Debug,Default)] pub enum Location{ #[default] NONE, UNKNOWN, EAR, FINGER, TOE, FOREHEAD, } pub impl CSpO2DDataModified { fn new() -> Self { todo!() } } impl Object for CSpO2DDataModified{ fn get_family(&self) -> datatypes::Family { datatypes::Family::FmSPO2 } fn get_genus(&self) -> datatypes::Genus { datatypes::Genus::GnDATA } fn get_species(&self) -> Box { Box::new(FmSPO2Species::CSpO2DDataModified) } fn get_raw_object(&self) -> RawObject { self.raw_object.clone() } } impl FmSPO2 for CSpO2CStd{} #[derive(Getters,Builder,Clone,Debug)] pub struct CSpO2CStd{ enabled:boolean, installedmodule:InstalledModule, #[getter(skip)] raw_object:RawObject, } #[derive(Clone,Copy,Debug,Default)] pub enum InstalledModule{ #[default] NONE, UNKNOWN, NONIN, NELLCOR_MP205, NELLCOR_MP506, MASIMO_MS11, NELLCOR_NELL3, NELLCOR_NELL1, MASIMO_MS2011, MASIMO_MX, NELLCOR, NELLCOR_PMB05N, } pub impl CSpO2CStd { fn new() -> Self { todo!() } } impl Object for CSpO2CStd{ fn get_family(&self) -> datatypes::Family { datatypes::Family::FmSPO2 } fn get_genus(&self) -> datatypes::Genus { datatypes::Genus::GnCONFIG } fn get_species(&self) -> Box { Box::new(FmSPO2Species::CSpO2CStd) } fn get_raw_object(&self) -> RawObject { self.raw_object.clone() } } impl FmSPO2 for CSpO2CData{} #[derive(Getters,Builder,Clone,Debug)] pub struct CSpO2CData{ satexponent:int8, piexponent:int8, satalarms:OBJECT::CNumCStd, hralarms:OBJECT::CNumCStd, fastsat:FastSat, sensitivity:Sensitivity, averagingtime:AveragingTime, satsecondslimit:SatSecondsLimit, smarttone:SmartTone, pviexponent:int8, #[getter(skip)] raw_object:RawObject, } #[derive(Clone,Copy,Debug,Default)] pub enum FastSat{ #[default] NONE, OFF, ON, } #[derive(Clone,Copy,Debug,Default)] pub enum Sensitivity{ #[default] NONE, NORMAL, MAXIMUM, APOD, } #[derive(Clone,Copy,Debug,Default)] pub enum AveragingTime{ #[default] NONE, 2_TO_4_SEC, 4_TO_6_SEC, 8_SEC, 10_SEC, 12_SEC, 14_SEC, 16_SEC, } #[derive(Clone,Copy,Debug,Default)] pub enum SatSecondsLimit{ #[default] NONE, DISABLED, 10_SEC, 25_SEC, 50_SEC, 100_SEC, } #[derive(Clone,Copy,Debug,Default)] pub enum SmartTone{ #[default] NONE, OFF, ON, } pub impl CSpO2CData { fn new() -> Self { todo!() } } impl Object for CSpO2CData{ fn get_family(&self) -> datatypes::Family { datatypes::Family::FmSPO2 } fn get_genus(&self) -> datatypes::Genus { datatypes::Genus::GnCONFIG } fn get_species(&self) -> Box { Box::new(FmSPO2Species::CSpO2CData) } fn get_raw_object(&self) -> RawObject { self.raw_object.clone() } } impl FmSPO2 for CSpO2PSelector{} #[derive(Getters,Builder,Clone,Debug)] pub struct CSpO2PSelector{ value:uint32, #[getter(skip)] raw_object:RawObject, } pub impl CSpO2PSelector { fn new() -> Self { todo!() } } impl Object for CSpO2PSelector{ fn get_family(&self) -> datatypes::Family { datatypes::Family::FmSPO2 } fn get_genus(&self) -> datatypes::Genus { datatypes::Genus::GnPARAMETER } fn get_species(&self) -> Box { Box::new(FmSPO2Species::CSpO2PSelector) } fn get_raw_object(&self) -> RawObject { self.raw_object.clone() } }