Finished parsing, multi-threading, and file write.

Message and Object write string creation added but need to be checked.
This commit is contained in:
Kyle Kiteveles 2023-08-14 12:59:03 -04:00
parent 602902ab6f
commit b87eb06a11
19 changed files with 4892 additions and 48 deletions

258
CCO2Family.xml Normal file
View file

@ -0,0 +1,258 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<FAMILY name="FmCO2">
<!--====================================-->
<!--Species Key Reference -->
<!-- ====================================-->
<SPECIES_KEY>
<GENUS name="GnDATA">
<SPECIES name="SpDATA" defaultvalue="0"/>
</GENUS>
<GENUS name="GnCONFIG">
<SPECIES name="SpCALIBRATION" defaultvalue="0"/>
<SPECIES name="SpSTANDARD" defaultvalue="1"/>
</GENUS>
<GENUS name="GnPARAMETER">
<SPECIES name="SpMSG_ARGUMENTS" defaultvalue="0" />
</GENUS>
</SPECIES_KEY>
<!--====================================-->
<!--GnDATA-->
<!--====================================-->
<DEFINITION class="CCO2DData" abrv="CCO2DDTA" version="205" family="FmCO2" genus="GnDATA" species="SpDATA">
<MEMBERS>
<MEMBER type="uint16" name="Status" minversion="200" maxversion="CURRENT_VERSION" comment="Overall Status of the object"/>
<MEMBER type="uint32" name="ExtStatus" minversion="200" maxversion="CURRENT_VERSION" comment="Bitwise value of the Extended Status of the object" format="BITMASK"/>
<MEMBER type="uint16" name="Source" minversion="200" maxversion="CURRENT_VERSION" comment="Source of data. Sensor Specified."/>
<MEMBER type="uint8" name="Mode" minversion="200" maxversion="CURRENT_VERSION" comment="Mode of operation"/>
<MEMBER type="uint8" name="Method" minversion="200" maxversion="CURRENT_VERSION" comment="Method used"/>
<MEMBER type="OBJECT" name="EtCO2" class="CNumDStd" minversion="200" maxversion="CURRENT_VERSION" comment="End Tidal CO2. In mmHg. 100 for overrange. In case of extended CO2 range configuration, 151 for overrange."/>
<MEMBER type="OBJECT" name="FiCO2" class="CNumDStd" minversion="200" maxversion="CURRENT_VERSION" comment="Fraction of inspired CO2. In mmHg. 100 for overrange. In case of extended CO2 range configuration, 151 for overrange."/>
<MEMBER type="OBJECT" name="RR" class="CNumDStd" minversion="200" maxversion="CURRENT_VERSION" comment="Respiration Rate per minute"/>
<MEMBER type="OBJECT" name="IPI" class="CNumDStd" minversion="200" maxversion="CURRENT_VERSION" comment="Integrated pulmonary index. Valid range: 0-10"/>
<MEMBER type="OBJECT" name="S_EtCO2" class="CNumDStd" minversion="201" maxversion="CURRENT_VERSION" comment="Spontaneous End Tidal CO2. Valid range: 0-10"/>
<MEMBER type="OBJECT" name="S_FiCO2" class="CNumDStd" minversion="201" maxversion="CURRENT_VERSION" comment="Spontaneous Fraction of inspired CO2"/>
<MEMBER type="OBJECT" name="ContCO2" class="CNumDStd" minversion="201" maxversion="CURRENT_VERSION" comment="Continuous CO2. "/>
<MEMBER type="OBJECT" name="S_Density_5" class="CNumDStd" minversion="201" maxversion="CURRENT_VERSION" comment="Continuous CO2 Spontaneous breath density (%) over the last 5 minutes"/>
<MEMBER type="OBJECT" name="S_Density_10" class="CNumDStd" minversion="201" maxversion="CURRENT_VERSION" comment="Continuous CO2 Spontaneous breath density (%) over the last 10 minutes "/>
<MEMBER type="OBJECT" name="S_Density_30" class="CNumDStd" minversion="201" maxversion="CURRENT_VERSION" comment="Continuous CO2 Spontaneous breath density (%) over the last 30 minutes"/>
<MEMBER type="OBJECT" name="ApneaIndex_Total" class="CNumDStd" minversion="201" maxversion="CURRENT_VERSION" comment="Apnea index total"/>
<MEMBER type="OBJECT" name="ApneaIndex_10_19" class="CNumDStd" minversion="201" maxversion="CURRENT_VERSION" comment="Apnea index of 10-19 seconds"/>
<MEMBER type="OBJECT" name="ApneaIndex_20_29" class="CNumDStd" minversion="201" maxversion="CURRENT_VERSION" comment="Apnea index of 20-29 seconds"/>
<MEMBER type="OBJECT" name="ApneaIndex_30" class="CNumDStd" minversion="201" maxversion="CURRENT_VERSION" comment="Apnea index of greater than or equal to 30 seconds"/>
<MEMBER type="OBJECT" name="DesatCount" class="CNumDStd" minversion="201" maxversion="CURRENT_VERSION" comment="Desaturation count"/>
<MEMBER type="TIME" name="STime" minversion="205" maxversion="CURRENT_VERSION" comment="Time reading was taken. Host specified. Not Sensor."/>
</MEMBERS>
<ENUMERATION name="Status">
<!-- ====== -->
<!-- Status -->
<!-- ====== -->
<!-- Generic Status codes -->
<ENUM name="DATA_NOT_AVAIL" defaultvalue="0"/>
<ENUM name="DATA_COMPLETE"/>
<ENUM name="DATA_FAILURE"/>
<ENUM name="DATA_EXCEPTION"/>
<ENUM name="DATA_PROCESSING"/>
<!-- No Class Status codes -->
</ENUMERATION>
<ENUMERATION name="ExtStatus">
<!-- =============== -->
<!-- Extended Status -->
<!-- =============== -->
<!--Data failures: Bitwise value-->
<ENUM name="INITIALIZATION" defaultvalue="0" comment="Initialization"/>
<ENUM name="SFM_REQUIRED" defaultvalue="1" comment="Self Maitenance(SFM)is required"/>
<ENUM name="SFM_IN_PROGRESS" defaultvalue="2" comment="Self Maintenance is in progress"/>
<ENUM name="PURGING_IN_PROGRESS" defaultvalue="3" comment="Purging in progress"/>
<ENUM name="FILTER_LINE_NO_CONNECT" defaultvalue="4" comment="FilterLine not connected"/>
<ENUM name="CHECK_CALIBRATION" defaultvalue="5" comment="Check calibration."/>
<ENUM name="CHECK_FLOW" defaultvalue="6" comment="Check flow."/>
<ENUM name="OCCLUSION_IN_GAS_LINE" defaultvalue="7" comment="Occlusion in the gas input line"/>
<ENUM name="TEMPERATURE_OUT_OF_RANGE" defaultvalue="8" comment="Temperature out of range"/>
<ENUM name="PUMP_OFF" defaultvalue="9" comment="Pump off"/>
</ENUMERATION>
<ENUMERATION name="Source">
<!-- ====== -->
<!-- Source -->
<!-- ====== -->
<!-- Generic Source codes -->
<ENUM name="NONE" defaultvalue="0"/>
<ENUM name="UNKNOWN"/>
<ENUM name="BREATH_DETECTED" comment="Breath detected"/>
<ENUM name="INTERVAL" comment="Breath interval attained"/>
</ENUMERATION>
<ENUMERATION name="Method">
<!-- ====== -->
<!-- Method -->
<!-- ====== -->
<!-- Generic Method codes -->
<ENUM name="NONE" defaultvalue="0"/>
<ENUM name="UNKNOWN"/>
<ENUM name="MANUAL"/>
<ENUM name="DEVICE"/>
<ENUM name="REMOTE"/>
<!-- Class Method codes begin at 10 -->
</ENUMERATION>
<ENUMERATION name="Mode">
<!-- ==== -->
<!-- Mode -->
<!-- ==== -->
<!-- Generic Mode codes -->
<ENUM name="NONE" defaultvalue="0"/>
<ENUM name="UNKNOWN"/>
<!-- Class Mode codes begin at 10 -->
</ENUMERATION>
<SPECIES_TABLE>
<SPECIES name="SpDATA" defaultvalue="1" comment="Default species."/>
</SPECIES_TABLE>
</DEFINITION>
<!--====================================-->
<!--GnPARAMETER-->
<!--====================================-->
<DEFINITION class="CCO2PMsgArg" abrv="CCO2PMSA" version="204" family="FmCO2" genus="GnPARAMETER" species="SpMSG_ARGUMENTS">
<MEMBERS>
<MEMBER type="uint16" name="IOParameterA" minversion="200" maxversion="CURRENT_VERSION" comment="Generic parameter used for configuration selector (CONFIG_ITEM) to retrieve a configuration module."/>
<MEMBER type="uint16" name="IOParameterB" minversion="200" maxversion="CURRENT_VERSION" comment="Generic parameter to contain an enumerated value or numeric value based on configuration module in IOParameterA"/>
</MEMBERS>
<ENUMERATION name="BTPS">
<ENUM name="NONE" defaultvalue="0" comment="None specified"/>
<ENUM name="NO_BTPS" defaultvalue="1" comment="No BTPS"/>
<ENUM name="BTPS" defaultvalue="2" comment="BTPS"/>
</ENUMERATION>
<ENUMERATION name="PICK_MODE">
<ENUM name="NONE" defaultvalue="0" comment="None specified"/>
<ENUM name="BREATH_TO_BREATH" defaultvalue="1" comment="Breath to breath"/>
<ENUM name="TEN_SECONDS" defaultvalue="2" comment="10 Seconds"/>
<ENUM name="TWENTY_SECONDS" defaultvalue="3" comment="20 Seconds"/>
<ENUM name="THIRTY_SECONDS" defaultvalue="4" comment="30 Seconds"/>
</ENUMERATION>
<ENUMERATION name="PUMP_CONTROL">
<ENUM name="NONE" defaultvalue="0" comment="None specified"/>
<ENUM name="DISABLED" defaultvalue="1" comment="Pump Disabled"/>
<ENUM name="ENABLED" defaultvalue="2" comment="Pump enabled"/>
</ENUMERATION>
<ENUMERATION name="PATIENT_MODE">
<ENUM name="NONE" defaultvalue="0" comment="None specified"/>
<ENUM name="ADULT" defaultvalue="1" comment="Adult"/>
<ENUM name="NEONATE" defaultvalue="2" comment="Neonate"/>
<ENUM name="PEDIATRIC_1" defaultvalue="3" comment="Pediatric 1-3 years"/>
<ENUM name="PEDIATRIC_2" defaultvalue="4" comment="Pediatric 3-6 years"/>
<ENUM name="PEDIATRIC_3" defaultvalue="5" comment="Pediatric 6-12 years"/>
</ENUMERATION>
<ENUMERATION name="CO2_RANGE">
<ENUM name="NONE" defaultvalue="0" comment="None specified"/>
<ENUM name="NINETY_NINE_MAX" defaultvalue="1" comment="0-99 mmHg"/>
<ENUM name="ONE_HUNDRED_FIFTY_MAX" defaultvalue="2" comment="0-150 mmHg"/>
</ENUMERATION>
<ENUMERATION name="MEASUREMENT_MODE">
<ENUM name="NONE" defaultvalue="0" comment="None specified"/>
<ENUM name="EtCO2" defaultvalue="1" comment="End Tidal CO2"/>
<ENUM name="CONTCO2" defaultvalue="2" comment="Continuous CO2"/>
</ENUMERATION>
<ENUMERATION name="CONFIG_ITEM">
<ENUM name="NONE" defaultvalue="0" comment="None specified"/>
<ENUM name="BTPS" defaultvalue="1" comment="Configuration for the BTPS setting. The BTPS enumeration is used in the IOParameterB member."/>
<ENUM name="PICK_MODE" defaultvalue="2" comment="Configuration for the Pick Mode."/>
<ENUM name="STANDBY" defaultvalue="7" comment="Configuration for the standby mode."/>
<ENUM name="PATIENT_MODE" defaultvalue="8" comment="Configuration for the patient mode. The PATIENT_MODE enumeration is used in the IOParameterB member."/>
<ENUM name="CO2_RANGE" defaultvalue="9" comment="Configuration for the CO2 range. The CO2_RANGE enumeration is used in the IOParameterB member."/>
<ENUM name="RESET_PARAMETER" defaultvalue="10" comment="Configuration for the Reseting AI and ODI, ContCO2 Breath Density. IOParameterB member contains a bitwise value (xxxx xxxd - reset AI and ODI, xxxx xdxx reset ContCO2 Breath Density)."/>
<ENUM name="MEASUREMENT_MODE" defaultvalue="11" comment="Configuration for the CO2 measurement mode. The MEASUREMENT_MODE enumeration is used in the IOParameterB member."/>
</ENUMERATION>
<SPECIES_TABLE>
<SPECIES name="SpMSG_ARGUMENTS" defaultvalue="1" comment="Default species. Generic Message Argument"/>
</SPECIES_TABLE>
</DEFINITION>
<!--====================================-->
<!--GnCONFIG-->
<!--====================================-->
<DEFINITION class="CCO2CCal" abrv="CCO2CCAL" version="201" family="FmCO2" genus="GnCONFIG" species="SpCALIBRATION">
<MEMBERS>
<MEMBER type="uint32" name="Status" minversion="200" maxversion="CURRENT_VERSION" comment="Bitwise value to indicate the calibration status." format="BITMASK"/>
<MEMBER type="uint8" name="Method" minversion="200" maxversion="CURRENT_VERSION" comment="Enumerated value to indicate the calibration method"/>
<MEMBER type="uint8" name="GasConcentration" minversion="200" maxversion="CURRENT_VERSION" comment="In 0.1% units (This value should be set to 50 decimal (=32h) for 5 Vol% gas. Valid range is 40 to 60"/>
</MEMBERS>
<ENUMERATION name="Method">
<ENUM name="NONE" defaultvalue="0" comment="None Specified"/>
<ENUM name="REGULAR_CALIBRATION" defaultvalue="1" comment="Regular Calibration"/>
<ENUM name="SPECIAL_FACTORY_CALIBRATION" defaultvalue="2" comment="Special Factory Calibration"/>
<ENUM name="CALIBRATION_CHECK" defaultvalue="3" comment="Calibration check"/>
</ENUMERATION>
<ENUMERATION name="Status">
<ENUM name="IN_PROGRESS" defaultvalue="0" comment="Calibration in progress"/>
<ENUM name="NOT_READY" defaultvalue="1" comment="Module not ready for Calibration"/>
<ENUM name="CALCULATING" defaultvalue="2" comment="Calculating - calibration gas can be removed"/>
<ENUM name="COMPLETE_ERROR" defaultvalue="3" comment="Calibration complete with error"/>
<ENUM name="COMPLETE_SUCCESS" defaultvalue="4" comment="Calibration complete successfully"/>
<ENUM name="USER_ABORT" defaultvalue="5" comment="Calibration aborted by user"/>
<!--Errors-->
<ENUM name="MEASUREMENT_ERROR" defaultvalue="6" comment="Measurement error (Purging, FilterLine) - Check wave message"/>
<ENUM name="AZ_FAIL" defaultvalue="7" comment="AZ Fail"/>
<ENUM name="GAS_CONCENTRATION_CHECK" defaultvalue="8" comment="No gas or wrong gas concentration"/>
<ENUM name="GAS_FLOW_UNSTABLE" defaultvalue="9" comment="No stable gas flow"/>
<ENUM name="CALIBRATION_FAILURE" defaultvalue="10" comment="Calibration Failure"/>
</ENUMERATION>
<SPECIES_TABLE>
<SPECIES name="SpCALIBRATION" defaultvalue="11" comment="Default Species."/>
</SPECIES_TABLE>
</DEFINITION>
<!--====================================-->
<!--GnCONFIG-->
<!--==================================== -->
<DEFINITION class="CCO2CStd" abrv="CCO2CSTD" version="100" family="FmCO2" genus="GnCONFIG" species="SpSTANDARD">
<MEMBERS>
<MEMBER type="uint16" name="DisplayUnits" minversion="100" maxversion="CURRENT_VERSION" comment="Display units for CO2 (EtCO2 and FiCO2)"/>
</MEMBERS>
<ENUMERATION name="DisplayUnits">
<ENUM name="UNITS_MMHG" comment="units in mmHG" defaultvalue="0"/>
<ENUM name="UNITS_KPA" comment="units in kpa"/>
</ENUMERATION>
<SPECIES_TABLE>
<SPECIES name="SpSTANDARD" defaultvalue="0"/>
</SPECIES_TABLE>
</DEFINITION>
<MESSAGES>
<!--Adresses section 14.5.4 and 14.6.3-->
<MSG type="Request" name="GET_BREATH" comment="A request to get the breath measurement. No object required in payload"/>
<MSG type="Response" name="PUT_BREATH" comment="A response to the GET_BREATH message. Returns the breath measurement. Requires a CCO2DData object."/>
<MSG type="Stream" name="STREAM_CO2" comment="A periodic message that contains the CO2 measurment. Requires a CCO2DData object."/>
<MSG type="Command" name="RESTART_BREATH_ALG" comment="Sent when the host determines that there is a 'no breath detected' condition in order to ensure correct EtCO2, FiCO2, and RR calculations upon resumption of breathing."/>
<MSG type="Request" name="GET_AMBIENT_PRESSURE" comment="A request to get the ambient pressure. No object required in the payload."/>
<MSG type="Response" name="PUT_AMBIENT_PRESSURE" comment="A response to the GET_AMBIENT_PRESSURE message. Requires a CCO2PMsgArg object."/>
<MSG type="Request" name="GET_MODULE_CONFIG" comment="A request to get a module configuration. Requires a CCO2PMsgArg object with IOParameterA set to CONFIG_ITEM to return"/>
<MSG type="Response" name="PUT_MODULE_CONFIG" comment="A response to the GET_MODULE_CONFIG message. Requires a CCO2PMsgArg object with IOParameterA set to the CONFIG_ITEM and IOParameterB set to the CONFIG_ITEM value."/>
<MSG type="Command" name="START_CALIBRATION" comment="A message to start the calibration. Requires a CCO2Cal object."/>
<MSG type="Command" name="STOP_CALIBRATION" comment="A message to stop the calibration. No object required in payload."/>
<MSG type="Request" name="GET_CALIBRATION" comment="A message to request the calibration status. No object required in payload."/>
<MSG type="Response" name="PUT_CALIBRATION" comment="A response to the PUT_CALIBRATION message. Requires a CCO2CCal"/>
<MSG type="Request" name="GET_SERVICE_TIME" comment="A message to request the remaining hours for calibration. No object required in payload."/>
<MSG type="Response" name="PUT_SERVICE_TIME" comment="A response to the GET_SERVICE_TIME message. Requires a CCO2PMsgArg object. IOParameterA contains the service time."/>
<MSG type="Command" name="FORCE_SFM" comment="A command to force SFM (self maintenance). No object required in payload"/>
<MSG type="Command" name="PUMP_CONTROL" comment="A command to enable or disable the pump. Requires a CCO2PMsgArg object"/>
<MSG type="Command" name="START_SFM" comment="A command to start SFM (self maintenance). This is only sent when a request to begin SFM. No object required in payload"/>
<MSG type="Command" name="SET_MODULE_CONFIG" comment="Set the module configuration. Requires a CCO2PMsgArg object with IOParameterA set to the CONFIG_ITEM and IOParameterB set to the CONFIG_ITEM value."/>
<MSG type="Request" name="GET_CAL_TIME" comment="A message to request the remaining hours for calibration. No object required in payload."/>
<MSG type="Response" name="PUT_CAL_TIME" comment="A response to the GET_CAL_TIME message. Requires a CCO2PMsgArg object. IOParameterA contains the remaining hours to calibration."/>
<MSG type="Command" name="START_ACQUIRE" comment="Command to start sending CO2 periodic readings."/>
<MSG type="Command" name="STOP_ACQUIRE" comment="Command to stop sending CO2 periodic readings."/>
<MSG type="Request" name="GET_CONFIG" comment="Requests the CO2 confguration."/>
<MSG type="Response" name="PUT_CONFIG" comment="Returns the CO2 confguration. Requires a CCO2CStd object."/>
<MSG type="Command" name="WRITE_CONFIG" comment="Command to write the CO2 configuration. Requires a CCO2CStd object."/>
</MESSAGES>
</FAMILY>

583
CECGFamily.xml Normal file
View file

@ -0,0 +1,583 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<FAMILY name="FmECG">
<!--====================================-->
<!--Species Key Reference -->
<!-- ====================================-->
<SPECIES_KEY>
<GENUS name="GnDATA">
<SPECIES name="SpPACER" defaultvalue="0"/>
<SPECIES name="SpGLOBALMEASURE" defaultvalue="1"/>
<SPECIES name="SpLEADMEASURE" defaultvalue="2"/>
<SPECIES name="SpSTATUS" defaultvalue="3"/>
</GENUS>
<GENUS name="GnCONFIG">
<SPECIES name="SpRHYTHMREPORT" defaultvalue="32"/>
<SPECIES name="SpAUTOREPORT" defaultvalue="33"/>
<SPECIES name="SpMISCELLANEOUS" defaultvalue="34"/>
<SPECIES name="SpSTANDARD" defaultvalue="35"/>
<SPECIES name="SpSETTINGS" defaultvalue="36"/>
</GENUS>
<GENUS name="GnPARAMETER">
<SPECIES name="SpSELECTOR" defaultvalue="0"/>
</GENUS>
</SPECIES_KEY>
<!--====================================-->
<!--GnCONFIG-->
<!--==================================== -->
<DEFINITION class="CECGCStd" abrv="CECGCSTD" version="100" family="FmECG" genus="GnDATA" species="SpSTANDARD">
<MEMBERS>
<MEMBER type="uint8" name="PatientMode" minversion="100" maxversion="CURRENT_VERSION" comment="Patient Age Adult,Ped,Neonate" />
<MEMBER type="boolean" name="TraceRestore" minversion="100" maxversion="CURRENT_VERSION"/>
</MEMBERS>
<ENUMERATION name="PatientMode">
<ENUM name="ADULT" defaultvalue="0" comment="Patient mode is Adult" />
<ENUM name="PED" comment="Patient mode is Ped" />
<ENUM name="NEONATE" comment="Patient mode is neonate" />
</ENUMERATION>
<SPECIES_TABLE>
<SPECIES name="SpSTANDARD" defaultvalue="35"/>
</SPECIES_TABLE>
</DEFINITION>
<!--====================================-->
<!--GnDATA-->
<!--==================================== -->
<DEFINITION class="CECGDPacer" abrv="CECGDPAC" version="100" family="FmECG" genus="GnDATA" species="SpPACER">
<MEMBERS>
<MEMBER type="OBJECT" class="CWaveSampleCRPDetect" name="CWaveSamplePacer" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="OBJECT" class="CWaveDStd" name="CWaveDPacer" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="OBJECT" class="CWaveCStd" name="CWaveCPacer" minversion="100" maxversion="CURRENT_VERSION"/>
</MEMBERS>
<SPECIES_TABLE>
<SPECIES name="SpPACER" defaultvalue="0"/>
</SPECIES_TABLE>
</DEFINITION>
<!--====================================-->
<!--GnDATA-->
<!--==================================== -->
<DEFINITION class="CECGDGlobalMeas" abrv="CECGDGMS" version="100" family="FmECG" genus="GnDATA" species="SpGLOBALMEASURE">
<MEMBERS>
<MEMBER type="uint32" name="PDuration" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="uint32" name="PQDuration" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="uint32" name="QRSDuration" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="uint32" name="QTDuration" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="uint32" name="QTcDuration" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="uint32" name="QTdDuration" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="uint32" name="PAxis" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="uint32" name="QRSAxis" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="uint32" name="TAxis" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="uint32" name="HeartRate" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="uint32" name="POnset" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="uint32" name="POffset" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="uint32" name="QRSOnset" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="uint32" name="QRSOffset" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="uint32" name="TOffset" minversion="100" maxversion="CURRENT_VERSION"/>
</MEMBERS>
<SPECIES_TABLE>
<SPECIES name="SpGLOBALMEASURE" defaultvalue="1"/>
</SPECIES_TABLE>
</DEFINITION>
<!--====================================-->
<!--GnDATA-->
<!--==================================== -->
<DEFINITION class="CECGDLeadMeas" abrv="CECGDLMS" version="200" family="FmECG" genus="GnDATA" species="SpLEADMEASURE">
<MEMBERS>
<MEMBER type="uint16" name="LeadIdentifier" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="int32" name="PposAmp" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="int32" name="PnegAmp" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="int32" name="QDuration" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="int32" name="QAmp" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="int32" name="RDuration" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="int32" name="RAmp" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="int32" name="SDuration" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="int32" name="SAmp" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="int32" name="RAccDuration" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="int32" name="RAccAmp" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="int32" name="SAccDuration" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="int32" name="SAccAmp" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="int32" name="IDuration" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="int32" name="ST0" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="int32" name="ST20" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="int32" name="ST40" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="int32" name="ST60" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="int32" name="ST80" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="int32" name="TposAmp" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="int32" name="TnegAmp" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="int32" name="R2AccDuration" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="int32" name="R2AccAmp" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="int32" name="S2AccDuration" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="int32" name="S2AccAmp" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="int32" name="KDuration" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="int32" name="EndT" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="widechar" name="QrsType" size="UNBOUNDED" minversion="100" maxversion="CURRENT_VERSION"/>
</MEMBERS>
<ENUMERATION name="LeadIdentifier">
<ENUM name="I" defaultvalue="0"/>
<ENUM name="II"/>
<ENUM name="III"/>
<ENUM name="AVR"/>
<ENUM name="AVL"/>
<ENUM name="AVF"/>
<ENUM name="V1"/>
<ENUM name="V2"/>
<ENUM name="V3"/>
<ENUM name="V4"/>
<ENUM name="V5"/>
<ENUM name="V6"/>
<ENUM name="V7"/>
<ENUM name="V3R"/>
<ENUM name="V5R"/>
<ENUM name="X"/>
<ENUM name="Y"/>
<ENUM name="Z"/>
<ENUM name="V4R"/>
<ENUM name="V6R"/>
<ENUM name="V8"/>
<ENUM name="V9"/>
<ENUM name="NONE"/>
</ENUMERATION>
<SPECIES_TABLE>
<SPECIES name="SpLEADMEASURE" defaultvalue="2"/>
</SPECIES_TABLE>
</DEFINITION>
<!--====================================-->
<!--GnCONFIG-->
<!--==================================== -->
<DEFINITION class="CECGCRhythmReport" abrv="CECGCRPT" version="102" family="FmECG" genus="GnCONFIG" species="SpRHYTHMREPORT">
<MEMBERS>
<MEMBER type="uint16" name="LeadArrangement" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="uint16" name="DefSpeedSetting" minversion="101" maxversion="CURRENT_VERSION"/>
<MEMBER type="uint8" name="StdLeadOrder" size="12" minversion="102" maxversion="CURRENT_VERSION" comment="Standard Lead Order: Each value within the array holds an enum from RhythmLd"/>
<MEMBER type="uint8" name="AugLeadOrder" size="12" minversion="102" maxversion="CURRENT_VERSION" comment="Augmented Lead Order: Each value within the array holds an enum from RhythmLd"/>
</MEMBERS>
<ENUMERATION name="LeadArrangement">
<ENUM name="3LEAD"/>
<ENUM name="6LEAD"/>
<ENUM name="12LEAD"/>
</ENUMERATION>
<ENUMERATION name="DefSpeedSetting">
<ENUM name="10mm_s"/>
<ENUM name="25mm_s"/>
<ENUM name="50mm_s"/>
</ENUMERATION>
<ENUMERATION name="RhythLd">
<ENUM name="I"/>
<ENUM name="II"/>
<ENUM name="III"/>
<ENUM name="AVR"/>
<ENUM name="AVL"/>
<ENUM name="AVF"/>
<ENUM name="V1"/>
<ENUM name="V2"/>
<ENUM name="V3"/>
<ENUM name="V4"/>
<ENUM name="V5"/>
<ENUM name="V6"/>
<ENUM name="OFF"/>
<ENUM name="V7"/>
<ENUM name="V3R"/>
<ENUM name="V5R"/>
<ENUM name="X"/>
<ENUM name="Y"/>
<ENUM name="Z"/>
<ENUM name="V4R"/>
<ENUM name="V6R"/>
<ENUM name="V8"/>
<ENUM name="V9"/>
</ENUMERATION>
<SPECIES_TABLE>
<SPECIES name="SpRHYTHMREPORT" defaultvalue="32"/>
</SPECIES_TABLE>
</DEFINITION>
<!--====================================-->
<!--GnCONFIG-->
<!--==================================== -->
<DEFINITION class="CECGCAutoReport" abrv="CECGCATR" version="205" family="FmECG" genus="GnCONFIG" species="SpAUTOREPORT">
<MEMBERS>
<MEMBER type="boolean" name="ExtMeasurements" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="boolean" name="Interp" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="boolean" name="CopiesWithInt" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="boolean" name="UnconfReport" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="boolean" name="AbnormalEcg" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="boolean" name="FName" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="boolean" name="SLName" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="boolean" name="MI" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="boolean" name="Wt" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="boolean" name="Ht" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="boolean" name="Gender" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="boolean" name="Race" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="boolean" name="Med" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="boolean" name="ClinicalHist" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="boolean" name="BP" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="boolean" name="Comments" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="boolean" name="CustDef1" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="boolean" name="CustDef2" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="boolean" name="ReasonStatementsEnabled" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="uint16" name="AgeFormat" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="uint16" name="LeadArrangement" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="uint16" name="RhythLd1" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="uint16" name="RhythLd2" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="uint16" name="RhythLd3" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="uint16" name="AvgCycle" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="uint16" name="Copies" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="widechar" name="CustDef1Lbl" size="UNBOUNDED" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="widechar" name="CustDef2Lbl" size="UNBOUNDED" minversion="100" maxversion="CURRENT_VERSION"/>
<!--Added in version 205-->
<MEMBER type="boolean" name="Physician" maxversion="CURRENT_VERSION" minversion="205" comment="Enable/Disable PhysicianID field."/>
<MEMBER type="boolean" name="Technician" maxversion="CURRENT_VERSION" minversion="205" comment="Enable/Disable TechnicianID field."/>
</MEMBERS>
<ENUMERATION name="AgeFormat">
<ENUM name="DOB"/>
<ENUM name="AGE"/>
<ENUM name="OFF"/>
</ENUMERATION>
<ENUMERATION name="LeadArrangement">
<ENUM name="3X4" comment="25mm, 2.5 seconds of data"/>
<ENUM name="3X4_1R" comment="25mm, 2.5 seconds of data, 1 rhythm lead"/>
<ENUM name="3X4_3R" comment="25mm, 2.5 seconds of data, 3 rhythm lead"/>
<ENUM name="6X2" comment="25mm, 5 seconds of data"/>
<ENUM name="12X1" comment="25mm, 10 seconds of data"/>
<ENUM name="6X2_50mm" comment="25mm, 10 seconds of data"/>
<ENUM name="6X2_ext" comment="25mm, 10 seconds of data"/>
<!-- Added in version 101 -->
<ENUM name="2X6_1R" comment="25mm, 1 rhythm lead"/>
<ENUM name="NOPRINT"/>
<!-- Added in version 102 -->
<ENUM name="6X2_1R" comment="25mm, 5 seconds of data, 1 rhythm lead"/>
<!--Added in version 202-->
<ENUM name="2X6" comment="25mm"/>
<!--Added in version 203-->
<ENUM name="3x4_25mm_5sec" comment="25mm, 5 seconds of data"/>
<ENUM name="3x4_50mm" comment="50mm, 2.5 seconds of data"/>
<ENUM name="3x4_50mm_5sec" comment="50mm, 5 seconds of data"/>
<!--Added in version 204-->
<ENUM name="6x2_25mm" comment="25mm, 2.5 seconds of data"/>
<ENUM name="6x2_50mm_5sec" comment="50mm, 5 seconds of data"/>
</ENUMERATION>
<ENUMERATION name="RhythLd1">
<ENUM name="I"/>
<ENUM name="II"/>
<ENUM name="III"/>
<ENUM name="AVR"/>
<ENUM name="AVL"/>
<ENUM name="AVF"/>
<ENUM name="V1"/>
<ENUM name="V2"/>
<ENUM name="V3"/>
<ENUM name="V4"/>
<ENUM name="V5"/>
<ENUM name="V6"/>
<ENUM name="OFF"/>
<!-- Added in version 101 -->
<ENUM name="V7"/>
<ENUM name="V3R"/>
<ENUM name="V5R"/>
<ENUM name="X"/>
<ENUM name="Y"/>
<ENUM name="Z"/>
<!-- Added in version 200 -->
<ENUM name="V4R"/>
<ENUM name="V6R"/>
<ENUM name="V8"/>
<ENUM name="V9"/>
</ENUMERATION>
<ENUMERATION name="RhythLd2">
<ENUM name="I"/>
<ENUM name="II"/>
<ENUM name="III"/>
<ENUM name="AVR"/>
<ENUM name="AVL"/>
<ENUM name="AVF"/>
<ENUM name="V1"/>
<ENUM name="V2"/>
<ENUM name="V3"/>
<ENUM name="V4"/>
<ENUM name="V5"/>
<ENUM name="V6"/>
<ENUM name="OFF"/>
<!-- Added in version 101 -->
<ENUM name="V7"/>
<ENUM name="V3R"/>
<ENUM name="V5R"/>
<ENUM name="X"/>
<ENUM name="Y"/>
<ENUM name="Z"/>
<!-- Added in version 103 -->
<ENUM name="V4R"/>
<ENUM name="V6R"/>
<ENUM name="V8"/>
<ENUM name="V9"/>
</ENUMERATION>
<ENUMERATION name="RhythLd3">
<ENUM name="I"/>
<ENUM name="II"/>
<ENUM name="III"/>
<ENUM name="AVR"/>
<ENUM name="AVL"/>
<ENUM name="AVF"/>
<ENUM name="V1"/>
<ENUM name="V2"/>
<ENUM name="V3"/>
<ENUM name="V4"/>
<ENUM name="V5"/>
<ENUM name="V6"/>
<ENUM name="OFF"/>
<!-- Added in version 101 -->
<ENUM name="V7"/>
<ENUM name="V3R"/>
<ENUM name="V5R"/>
<ENUM name="X"/>
<ENUM name="Y"/>
<ENUM name="Z"/>
<!-- Added in version 103 -->
<ENUM name="V4R"/>
<ENUM name="V6R"/>
<ENUM name="V8"/>
<ENUM name="V9"/>
</ENUMERATION>
<ENUMERATION name="AvgCycle">
<ENUM name="3x4_3R"/>
<ENUM name="6x2_6R"/>
<ENUM name="NOPRINT"/>
<!-- Added in version 201 -->
<ENUM name="3x4_2R_25mm"/>
<ENUM name="3x4_2R"/>
<ENUM name="3x4_3R_25mm"/>
<ENUM name="2x6_1R_25mm"/>
<ENUM name="2x6_1R"/>
<ENUM name="6x2_2R"/>
<!-- Added in version 204 -->
<ENUM name="6x2_1R_25mm"/>
<ENUM name="6x2_1R"/>
</ENUMERATION>
<SPECIES_TABLE>
<SPECIES name="SpAUTOREPORT" defaultvalue="33"/>
</SPECIES_TABLE>
</DEFINITION>
<!--====================================-->
<!--GnCONFIG-->
<!--==================================== -->
<DEFINITION class="CECGCMiscellaneous" abrv="CECGCMSC" version="203" family="FmECG" genus="GnCONFIG" species="SpMISCELLANEOUS">
<MEMBERS>
<MEMBER type="uint16" name="LeadConfig" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="uint16" name="Mains" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="uint16" name="AutoExport" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="uint16" name="ElectrodeLbl" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="uint16" name="LeadTiming" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="uint16" name="DefGainSetting" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="boolean" name="DefMuscleFilter" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="boolean" name="DefBaselineFilter" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="boolean" name="BaselineCenter" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="boolean" name="Autosave" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="boolean" name="AutoReport2" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="boolean" name="PrintArtifactReport" minversion="101" maxversion="CURRENT_VERSION"/>
<MEMBER type="uint16" name="ElectrodePlacement" minversion="102" maxversion="CURRENT_VERSION"/>
<MEMBER type="uint16" name="QTcMethod" minversion="103" maxversion="CURRENT_VERSION"/>
<MEMBER type="boolean" name="SaveReminder" minversion="105" maxversion="CURRENT_VERSION" comment="Only applies if AutoSave is False. True indicates that user will be prompted to save the ECG test. False indicates that the user will not be prompted" />
<MEMBER type="boolean" name="DisableMains" minversion="106" maxversion="CURRENT_VERSION" comment="True indicates Mains can be set to OFF. False indicates that Mains can not be set to OFF." />
<MEMBER type="boolean" name="ECGAutoPrint" minversion="107" maxversion="CURRENT_VERSION" comment="True indicates print report for auto ECG. False indicates do not print report for auto ECG." />
<MEMBER type="boolean" name="ECGSetPatientDemographic" minversion="108" maxversion="CURRENT_VERSION" comment="True indicates user can assign the patient demographic, post ECG." />
<MEMBER type="widechar" name="RemoteFolderPath" size="UNBOUNDED" minversion="200" maxversion="CURRENT_VERSION" comment="This is the remote folder path, its format is '\\Machine Name\[Folder Name]'"/>
<MEMBER type="uint16" name="QRSTone" minversion="200" maxversion="CURRENT_VERSION" comment="This is the tone configuration for the QRS beep"/>
<MEMBER type="uint16" name="PrintLabel" minversion="200" maxversion="CURRENT_VERSION" comment="This is the print label setting. Enumerations are none, PR, and PQ"/>
<MEMBER type="uint16" name="PacerLead" minversion="202" maxversion="CURRENT_VERSION" comment="Selected lead to use for pacer detection"/>
</MEMBERS>
<ENUMERATION name="LeadConfig">
<ENUM name="STANDARD"/>
<ENUM name="CABRERA"/>
<ENUM name="NEHB"/>
<ENUM name="FRANK"/>
</ENUMERATION>
<ENUMERATION name="ElectrodeLbl">
<ENUM name="AHA"/>
<ENUM name="IEC"/>
</ENUMERATION>
<ENUMERATION name="LeadTiming">
<ENUM name="SIMOULTANEOUS"/>
<ENUM name="SEQUENTIAL"/>
</ENUMERATION>
<ENUMERATION name="DefGainSetting">
<ENUM name="5mm_mv"/>
<ENUM name="10mm_mv"/>
<ENUM name="20mm_mv"/>
<ENUM name="AUTO"/>
<ENUM name="2mm5_mv" comment="2.5mm per mv"/>
</ENUMERATION>
<ENUMERATION name="Mains">
<ENUM name="OFF"/>
<ENUM name="50HZ"/>
<ENUM name="60HZ"/>
<ENUM name="AUTO"/>
</ENUMERATION>
<ENUMERATION name="AutoExport">
<ENUM name="OFF"/>
<ENUM name="MEDIACARD"/>
<ENUM name="FAA"/>
<ENUM name="FAX"/>
<ENUM name="WORKSTATION"/>
<!-- Added in version 203 -->
<ENUM name="REMOTE"/>
</ENUMERATION>
<ENUMERATION name="ElectrodePlacement">
<ENUM name="STANDARD"/>
<ENUM name="ALTERNATE"/>
</ENUMERATION>
<ENUMERATION name="QTcMethod">
<ENUM name="BAZETT" defaultvalue="0"/>
<ENUM name="HODGES" defaultvalue="1"/>
<ENUM name="FRIDERICIA" defaultvalue="2"/>
</ENUMERATION>
<ENUMERATION name="QRSTone">
<ENUM name="NONE" defaultvalue="0"/>
<ENUM name="FREQ_1KHZ" defaultvalue="1"/>
<ENUM name="FREQ_2KHZ" defaultvalue="2"/>
<ENUM name="FREQ_2K67HZ" defaultvalue="3"/>
<ENUM name="FREQ_3K2HZ" defaultvalue="4"/>
<ENUM name="FREQ_4KHZ" defaultvalue="5"/>
<ENUM name="FREQ_5K3HZ" defaultvalue="6"/>
<ENUM name="FREQ_6K4HZ" defaultvalue="7"/>
<ENUM name="FREQ_8KHZ" defaultvalue="8"/>
</ENUMERATION>
<ENUMERATION name="PrintLabel">
<ENUM name="NONE" defaultvalue="0"/>
<ENUM name="PR" defaultvalue="1"/>
<ENUM name="PQ" defaultvalue="2"/>
</ENUMERATION>
<ENUMERATION name="PacerLead">
<ENUM name="NONE" defaultvalue="0"/>
<ENUM name="I" defaultvalue="1"/>
<ENUM name="II" defaultvalue="2" comment="Default"/>
<ENUM name="V1" defaultvalue="3"/>
<ENUM name="V2" defaultvalue="4"/>
<ENUM name="V3" defaultvalue="5"/>
<ENUM name="V4" defaultvalue="6"/>
<ENUM name="V5" defaultvalue="7"/>
<ENUM name="V6" defaultvalue="8"/>
<ENUM name="V7" defaultvalue="9"/>
<ENUM name="V8" defaultvalue="10"/>
<ENUM name="V9" defaultvalue="11"/>
<ENUM name="V3R" defaultvalue="12"/>
<ENUM name="V4R" defaultvalue="13"/>
<ENUM name="V5R" defaultvalue="14"/>
<ENUM name="V6R" defaultvalue="15"/>
</ENUMERATION>
<SPECIES_TABLE>
<SPECIES name="SpMISCELLANEOUS" defaultvalue="34"/>
</SPECIES_TABLE>
</DEFINITION>
<!--====================================-->
<!--GnPARAMETER-->
<!--==================================== -->
<DEFINITION class="CECGPSelector" abrv="CECGPSEL" version="100" family="FmECG" genus="GnPARAMETER" species="SpSELECTOR">
<MEMBERS>
<MEMBER type="uint32" name="SpeciesSelector" minversion="100" maxversion="CURRENT_VERSION" comment="Species ID of the record."/>
</MEMBERS>
<SPECIES_TABLE>
<SPECIES name="SpSELECTOR" defaultvalue="0"/>
</SPECIES_TABLE>
</DEFINITION>
<!--====================================-->
<!--GnCONFIG-->
<!--====================================-->
<DEFINITION class="CECGCSettings" abrv="CECGCSTG" version="102" family="FmECG" genus="GnCONFIG" species="SpSETTINGS">
<MEMBERS>
<MEMBER type="uint32" name="ActiveLeads" minversion="100" maxversion="CURRENT_VERSION" format="BITMASK" comment="Bitmask, set to 1 if active lead"/>
<MEMBER type="uint8" name="MainsFilter" minversion="100" maxversion="CURRENT_VERSION" comment="Filtering done by module"/>
<MEMBER type="boolean" name="PacerEnabled" minversion="100" maxversion="CURRENT_VERSION" comment="Determines whether or not pacer data will be sent by module"/>
<MEMBER type="uint8" name="LeadMode" minversion="101" maxversion="CURRENT_VERSION" comment="Identifies the lead configuration"/>
<MEMBER type="uint8" name="VTachThreshold" minversion="101" maxversion="CURRENT_VERSION" comment="Beats per minute threshold for ventricular tachycardia alarm to be set" />
<MEMBER type="boolean" name="ImpedanceRespiration" minversion="102" maxversion="CURRENT_VERSION" comment="Impedance respiration enabled or disabled." />
<MEMBER type="uint16" name="AsystoleThreshold" minversion="102" maxversion="CURRENT_VERSION" comment="Threshold in milliseconds before the asystole alarm can be set." />
</MEMBERS>
<ENUMERATION name="MainsFilter">
<ENUM name="NONE" defaultvalue="0" />
<ENUM name="OFF" defaultvalue="1" comment="Mains filter is off" />
<ENUM name="50HZ" defaultvalue="2" comment="Mains filter set to 50Hz" />
<ENUM name="60HZ" defaultvalue="3" comment="Mains filter set to 60Hz" />
</ENUMERATION>
<ENUMERATION name="LeadMode">
<ENUM name="NONE" defaultvalue="0" />
<ENUM name="UNKNOWN" defaultvalue="1" />
<ENUM name="3_LEAD" defaultvalue="2" comment="The device is in 3 lead configuration" />
<ENUM name="5_LEAD" defaultvalue="3" comment="The device is in 5 lead configuration" />
</ENUMERATION>
<ENUMERATION name="ActiveLeads">
<ENUM name="ECG_I" defaultvalue="0"/>
<ENUM name="ECG_II" defaultvalue="1"/>
<ENUM name="ECG_III" defaultvalue="2"/>
<ENUM name="ECG_aVR" defaultvalue="3"/>
<ENUM name="ECG_aVL" defaultvalue="4"/>
<ENUM name="ECG_aVF" defaultvalue="5"/>
<ENUM name="ECG_V" defaultvalue="6"/>
<ENUM name="ECG_V1" defaultvalue="7"/>
<ENUM name="ECG_V2" defaultvalue="8"/>
<ENUM name="ECG_V3" defaultvalue="9"/>
<ENUM name="ECG_V4" defaultvalue="10"/>
<ENUM name="ECG_V5" defaultvalue="11"/>
<ENUM name="ECG_V6" defaultvalue="12"/>
</ENUMERATION>
<SPECIES_TABLE>
<SPECIES name="SpSETTINGS" defaultvalue="36"/>
</SPECIES_TABLE>
</DEFINITION>
<!--====================================-->
<!--GnDATA-->
<!--====================================-->
<DEFINITION class="CECGDStatus" abrv="CECGDSTS" version="102" family="FmECG" genus="GnDATA" species="SpSTATUS">
<MEMBERS>
<MEMBER type="uint32" name="ElectrodeOffStatus" minversion="100" maxversion="CURRENT_VERSION" format="BITMASK" comment="Bitmask, set to 1 if Electrode is OFF. Cleared to 0 if Electrode is properly connected" />
<MEMBER type="byte" name="ArrhythmiaStatus" size="UNBOUNDED" minversion="100" maxversion="CURRENT_VERSION" comment="Byte array of active arrhythmias. The arrhythmias are defined by the IDS"/>
<MEMBER type="uint32" name="ActiveLeads" minversion="100" maxversion="CURRENT_VERSION" format="BITMASK" comment="Bitmask, set to 1 if active lead"/>
<MEMBER type="OBJECT" name="Container" class="ANY_CLASS" size="UNBOUNDED" minversion="100" maxversion="CURRENT_VERSION" comment="Contains an array of objects"/>
</MEMBERS>
<ENUMERATION name="ElectrodeOffStatus">
<ENUM name="ELECTRODE_RL" defaultvalue="0" comment="ECG Electrode RL" />
<ENUM name="ELECTRODE_LL" defaultvalue="1" comment="ECG Electrode LL" />
<ENUM name="ELECTRODE_RA" defaultvalue="2" comment="ECG Electrode RA" />
<ENUM name="ELECTRODE_LA" defaultvalue="3" comment="ECG Electrode LA" />
<ENUM name="ELECTRODE_V" defaultvalue="4" comment="ECG Electrode V. Used for generic placement of V electrode." />
<ENUM name="ELECTRODE_V1" defaultvalue="5" comment="ECG Electrode V1" />
<ENUM name="ELECTRODE_V2" defaultvalue="6" comment="ECG Electrode V2" />
<ENUM name="ELECTRODE_V3" defaultvalue="7" comment="ECG Electrode V3" />
<ENUM name="ELECTRODE_V4" defaultvalue="8" comment="ECG Electrode V4" />
<ENUM name="ELECTRODE_V5" defaultvalue="9" comment="ECG Electrode V5" />
<ENUM name="ELECTRODE_V6" defaultvalue="10" comment="ECG Electrode V6" />
</ENUMERATION>
<ENUMERATION name="ActiveLeads">
<ENUM name="ECG_I" defaultvalue="0"/>
<ENUM name="ECG_II" defaultvalue="1"/>
<ENUM name="ECG_III" defaultvalue="2"/>
<ENUM name="ECG_aVR" defaultvalue="3"/>
<ENUM name="ECG_aVL" defaultvalue="4"/>
<ENUM name="ECG_aVF" defaultvalue="5"/>
<ENUM name="ECG_V" defaultvalue="6"/>
<ENUM name="ECG_V1" defaultvalue="7"/>
<ENUM name="ECG_V2" defaultvalue="8"/>
<ENUM name="ECG_V3" defaultvalue="9"/>
<ENUM name="ECG_V4" defaultvalue="10"/>
<ENUM name="ECG_V5" defaultvalue="11"/>
<ENUM name="ECG_V6" defaultvalue="12"/>
</ENUMERATION>
<SPECIES_TABLE>
<SPECIES name="SpSTATUS" defaultvalue="3"/>
</SPECIES_TABLE>
</DEFINITION>
<!--====================================-->
<!--Messages -->
<!-- ====================================-->
<MESSAGES>
<MSG type="Request" name="GET_CONFIG"/>
<MSG type="Response" name="PUT_CONFIG"/>
<MSG type="Command" name="WRITE_CONFIG"/>
<MSG type="Request" name="GET_LEADMEASUREMENT"/>
<MSG type="Response" name="PUT_LEADMEASUREMENT"/>
<MSG type="Request" name="GET_MEASURMENTS"/>
<MSG type="Response" name="PUT_MEASUREMENTS"/>
<MSG type="Request" name="GET_LEADIMPEDANCE"/>
<MSG type="Response" name="PUT_LEADIMPEDANCE"/>
<MSG type="Request" name="GET_QRSCOMPLEX"/>
<MSG type="Response" name="PUT_QRSCOMPLEX"/>
<MSG type="Command" name="START_TEST"/>
<MSG type="Command" name="STOP_TEST"/>
<MSG type="Command" name="ECG_MODE"/>
</MESSAGES>
</FAMILY>

641
CNIBPFamily.xml Normal file
View file

@ -0,0 +1,641 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<FAMILY name="FmNIBP">
<!--====================================-->
<!--Species Key Reference -->
<!-- ====================================-->
<SPECIES_KEY>
<GENUS name="GnDATA">
<SPECIES name="SpSTANDARD" defaultvalue="0"/>
<SPECIES name="SpDATA" defaultvalue="1"/>
<SPECIES name="SpENGCHUNK" defaultvalue="2"/>
<SPECIES name="SpEVENTCHUNK" defaultvalue="3"/>
<SPECIES name="SpHARDWARESTATE" defaultvalue="4"/>
<SPECIES name="SpLOCK" defaultvalue="5"/>
<SPECIES name="SpRAWDATA" defaultvalue="6"/>
<SPECIES name="SpPRESSUREDATA" defaultvalue="7"/>
<SPECIES name="SpSTATUS" defaultvalue="8"/>
<SPECIES name="SpDATAMODIFIED" defaultvalue="9" />
</GENUS>
<GENUS name="GnCONFIG">
<SPECIES name="SpSTANDARD" defaultvalue="0"/>
<SPECIES name="SpDATA" defaultvalue="1"/>
<SPECIES name="SpCALIBRATION" defaultvalue="2"/>
</GENUS>
<GENUS name="GnPARAMETER">
<SPECIES name="SpDATA" defaultvalue="1"/>
<SPECIES name="SpSELECTOR" defaultvalue="2" comment="Used to indicate that the Value is a selector"/>
<SPECIES name="SpCHUNK_SELECTOR" defaultvalue="3" comment="Used to indicate that the Value is a chunk selector"/>
</GENUS>
<GENUS name="GnDATAEXT">
<SPECIES name="SpSTANDARD" defaultvalue="0"/>
</GENUS>
</SPECIES_KEY>
<!--Platform BP Objects-->
<!--BP Status-->
<DEFINITION class="CNIBPDStatus" abrv="CNBPDST" version="200" family="FmNIBP" genus="GnDATA" species="SpSTATUS">
<MEMBERS>
<MEMBER type="uint16" name="moduleState" minversion="100" maxversion="CURRENT_VERSION" comment="Value describing the current state of the module"/>
<MEMBER type="uint16" name="error" minversion="100" maxversion="CURRENT_VERSION" comment="Error state of the module 0 = no error, anything else the module is in error. Request CErrEStd for the Platform error object."/>
<MEMBER type="uint16" name="hardwareStates" minversion="100" maxversion="CURRENT_VERSION" comment="Hardware states {0 - FALSE, 1 - TRUE}"/>
<MEMBER type="uint16" name="safetyStates" minversion="100" maxversion="CURRENT_VERSION" comment="Safety states"/>
<MEMBER type="int16" name="cuffPressure" minversion="100" maxversion="CURRENT_VERSION" comment="Scale/Units: 0.01 mmHg"/>
<MEMBER type="int16" name="batVoltage" minversion="100" maxversion="CURRENT_VERSION" comment="Scale/Units: 0.001 volts"/>
<MEMBER type="int16" name="ambTemp" minversion="100" maxversion="CURRENT_VERSION" comment="Scale/Units: 0.1 degrees C"/>
<MEMBER type="int16" name="statusType" minversion="200" maxversion="CURRENT_VERSION" comment="The status type"/>
</MEMBERS>
<ENUMERATION name="moduleState">
<ENUM name="IDLE" defaultvalue="0" comment="Device idle, cuff-deflating, no cycles active"/>
<ENUM name="AUTOZERO" defaultvalue="1" comment="Auto-zeroing the transducers"/>
<ENUM name="INFLATING" defaultvalue="2" comment="Inflating the BP cuff"/>
<ENUM name="STABILIZING" defaultvalue="3" comment="Waiting for the pressure to stabilize"/>
<ENUM name="BLEEDING" defaultvalue="4" comment="Controlled deflations"/>
<ENUM name="DUMPING" defaultvalue="5" comment="Fast deflating getting below residual pressure limit"/>
<ENUM name="REPUMP" defaultvalue="6" comment="Re-inflating the cuff"/>
<ENUM name="ERROR" defaultvalue="7" comment="There is a POST or safety error"/>
<ENUM name="BOOT" defaultvalue="8" comment="Boot-loader is active"/>
<ENUM name="POST" defaultvalue="9" comment="In POST"/>
</ENUMERATION>
<ENUMERATION name="hardwareState">
<ENUM name="valveClosed" defaultvalue="32768" comment="bit 15 - valve state"/>
<ENUM name="pumpOn" defaultvalue="16384" comment="bit 14 - pump state"/>
<ENUM name="ECGPulseReceived" defaultvalue="8192" comment="bit 13 - ECG synchronization pulse received"/>
<ENUM name="savingCal" defaultvalue="4096" comment="bit 12 - Saving the cal record to nonvolatile memory"/>
<ENUM name="savingSettings" defaultvalue="2048" comment="bit 11 - Saving the settings record to nonvolatile memory"/>
<ENUM name="SingleLHoseConnect" defaultvalue="1024" comment="bit 10 - Single Lumen Hose Connected"/>
</ENUMERATION>
<ENUMERATION name="safetyStates">
<ENUM name="belowResidual" defaultvalue="32768" comment="bit 15 - is pressure below residual"/>
<ENUM name="longAutoTimerClear" defaultvalue="16384" comment="bit 14 - has enough time passed since last cycle"/>
<ENUM name="statAutoTimerClear" defaultvalue="8192" comment="bit 13 - has enough time passed since last cycle"/>
<ENUM name="failsafeFault" defaultvalue="4096" comment="bit 12 - has enough time passed since last cycle"/>
<ENUM name="autoZeroFault" defaultvalue="2048" comment="bit 11 - has enough time passed since last cycle"/>
<ENUM name="transducerFault" defaultvalue="1024" comment="bit 10 - has enough time passed since last cycle"/>
</ENUMERATION>
<ENUMERATION name="statusType">
<ENUM name="NONE" defaultvalue="0" comment="Not specified"/>
<ENUM name="PRIMARY" defaultvalue="1" comment="Primary processor status"/>
<ENUM name="SECONDARY" defaultvalue="2" comment="Secondary processor status"/>
</ENUMERATION>
<SPECIES_TABLE>
<SPECIES name="SpSTATUS" defaultvalue="8"/>
</SPECIES_TABLE>
</DEFINITION>
<!--BP Calibration-->
<DEFINITION class="CNIBPCCal" abrv="CNBPCCL" version="100" family="FmNIBP" genus="GnCONFIG" species="SpCALIBRATION">
<MEMBERS>
<MEMBER type="uint8" name="calType" minversion="100" maxversion="CURRENT_VERSION" comment="The calibration type."/>
<MEMBER type="int32" name="calSignature" minversion="100" maxversion="CURRENT_VERSION" comment="The calibration signature"/>
<MEMBER type="TIME" name="calDateTime" minversion="100" maxversion="CURRENT_VERSION" comment="The calibration date and time"/>
<MEMBER type="int16" name="modConfig" minversion="100" maxversion="CURRENT_VERSION" comment="The module configuration bits"/>
<MEMBER type="int16" name="spanCorr" minversion="100" maxversion="CURRENT_VERSION" comment="The transducer span correction factor"/>
<MEMBER type="int16" name="zeroCorr" minversion="100" maxversion="CURRENT_VERSION" comment="The transducer zero correction factor"/>
<MEMBER type="int16" name="battCal" minversion="100" maxversion="CURRENT_VERSION" comment="The battery calibration signature"/>
<MEMBER type="int16" name="tempCal" minversion="100" maxversion="CURRENT_VERSION" comment="The temperature calibration value"/>
</MEMBERS>
<ENUMERATION name="calType">
<ENUM name="NONE" defaultvalue="0" comment="Not specified"/>
<ENUM name="PRIMARY" defaultvalue="1" comment="Primary calibration"/>
<ENUM name="SECONDARY" defaultvalue="2" comment="Secondary calibration"/>
</ENUMERATION>
<SPECIES_TABLE>
<SPECIES name="SpCALIBRATION" defaultvalue="2"/>
</SPECIES_TABLE>
</DEFINITION>
<!--Engineering Chunk Data/Event log-->
<DEFINITION class="CNIBPDChunk" abrv="CNBPDCHK" version="100" family="FmNIBP" genus="GnDATA" species="SpENGCHUNK">
<MEMBERS>
<MEMBER type="int8" name="tag" size="4" minversion="100" maxversion="CURRENT_VERSION" comment="The 4 character tag code"/>
<MEMBER type="uint16" name="chunkId" minversion="100" maxversion="CURRENT_VERSION" comment="The identifier for the chunk we want"/>
<MEMBER type="uint16" name="chunkIndex" minversion="100" maxversion="CURRENT_VERSION" comment="The index of chunks for this device"/>
<MEMBER type="uint8" name="chunkData" size="100" minversion="100" maxversion="CURRENT_VERSION" comment="The actual chunk data"/>
</MEMBERS>
<SPECIES_TABLE>
<SPECIES name="SpENGCHUNK" defaultvalue="2"/>
<SPECIES name="SpEVENTCHUNK" defaultvalue="3"/>
</SPECIES_TABLE>
</DEFINITION>
<!--Hardware State-->
<DEFINITION class="CNIBPDHState" abrv="CNBPDHST" version="100" family="FmNIBP" genus="GnDATA" species="SpHARDWARESTATE">
<MEMBERS>
<MEMBER type="int16" name="hardware" minversion="100" maxversion="CURRENT_VERSION" comment="The index of the hardware to get/set the state of"/>
<MEMBER type="int16" name="state" minversion="100" maxversion="CURRENT_VERSION" comment="The state of the hardware"/>
</MEMBERS>
<ENUMERATION name="hardware">
<ENUM name="PRIM_VALVE" defaultvalue="0" comment="The primary valve"/>
<ENUM name="SEC_VALVE" comment="The secondary valve"/>
<ENUM name="PUMP" comment="The pump"/>
</ENUMERATION>
<SPECIES_TABLE>
<SPECIES name="SpHARDWARESTATE" defaultvalue="4"/>
</SPECIES_TABLE>
</DEFINITION>
<!--Device Test Locks-->
<DEFINITION class="CNIBPDLock" abrv="CNBPDLCK" version="100" family="FmNIBP" genus="GnDATA" species="SpLOCK">
<MEMBERS>
<MEMBER type="int16" name="lock" minversion="100" maxversion="CURRENT_VERSION" comment="The lock to get/set"/>
<MEMBER type="int8" name="state" minversion="100" maxversion="CURRENT_VERSION" comment="state The state of the lock"/>
</MEMBERS>
<ENUMERATION name="lock">
<ENUM name="AMB_TEMP_CHECK" defaultvalue="0" comment="Locks the ambient temperature check"/>
<ENUM name="PRIM_SAFETY_CHECK" comment="Locks the primary processors safety checks"/>
<ENUM name="SAFE_SAFETY_CHECK" comment="Locks the safety processors safety checks"/>
<ENUM name="SINGLE_LUMEN_CHECK" comment="Locks the single lumen detection test"/>
<ENUM name="AD_CHANNEL" comment="Locks the AD channel"/>
<ENUM name="FAILSAFE_TEST_MODE" comment="Locks the failsafe test mode"/>
</ENUMERATION>
<SPECIES_TABLE>
<SPECIES name="SpLOCK" defaultvalue="5"/>
</SPECIES_TABLE>
</DEFINITION>
<!--AD Raw Data-->
<DEFINITION class="CNIBPDRData" abrv="CNIBPDRDT" version="100" family="FmNIBP" genus="GnDATA" species="SpRAWDATA">
<MEMBERS>
<MEMBER type="uint32" name="raw5V" minversion="100" maxversion="CURRENT_VERSION" comment="The raw counts of the 5V/2 rail"/>
<MEMBER type="uint32" name="raw1V" minversion="100" maxversion="CURRENT_VERSION" comment="The raw counts for the 1V rail"/>
<MEMBER type="uint32" name="raw2V" minversion="100" maxversion="CURRENT_VERSION" comment="The raw counts for the 2V rail"/>
<MEMBER type="uint32" name="raw4V" minversion="100" maxversion="CURRENT_VERSION" comment="The raw counts for the 4V rail"/>
<MEMBER type="int16" name="rawBat" minversion="100" maxversion="CURRENT_VERSION" comment="The raw battery counts"/>
<MEMBER type="uint32" name="rawAmbTemp" minversion="100" maxversion="CURRENT_VERSION" comment="The raw ambient temperature counts"/>
<MEMBER type="uint32" name="rawPrimTrans" minversion="100" maxversion="CURRENT_VERSION" comment="The raw primary transducer counts"/>
<MEMBER type="int16" name="rawSecTrans" minversion="100" maxversion="CURRENT_VERSION" comment="The raw secondary transducer counts"/>
<MEMBER type="int16" name="rawSecBat" minversion="100" maxversion="CURRENT_VERSION" comment="The raw secondary battery counts"/>
<MEMBER type="int16" name="rawSecCorr" minversion="100" maxversion="CURRENT_VERSION" comment="The raw secondary correction factor counts"/>
</MEMBERS>
<SPECIES_TABLE>
<SPECIES name="SpRAWDATA" defaultvalue="6"/>
</SPECIES_TABLE>
</DEFINITION>
<!--Pressure Data-->
<DEFINITION class="CNIBPDPData" abrv="CNIBPDPDT" version="100" family="FmNIBP" genus="GnDATA" species="SpPRESSUREDATA">
<MEMBERS>
<MEMBER type="int16" name="primPress" minversion="100" maxversion="CURRENT_VERSION" comment="The primary pressure transducer pressure"/>
<MEMBER type="int16" name="primPressNoise" minversion="100" maxversion="CURRENT_VERSION" comment="The primary pressure transducer noise value"/>
<MEMBER type="int16" name="primAzeroOffset" minversion="100" maxversion="CURRENT_VERSION" comment="The primary pressure transducer autozero offset"/>
<MEMBER type="int16" name="secPress" minversion="100" maxversion="CURRENT_VERSION" comment="The secondary pressure transducer pressure"/>
<MEMBER type="int16" name="secPressNoise" minversion="100" maxversion="CURRENT_VERSION" comment="The secondary pressure transducer noise value"/>
<MEMBER type="int16" name="secAzeroOffset" minversion="100" maxversion="CURRENT_VERSION" comment="The secondary pressure transducer autozero offset"/>
</MEMBERS>
<SPECIES_TABLE>
<SPECIES name="SpPRESSUREDATA" defaultvalue="7"/>
</SPECIES_TABLE>
</DEFINITION>
<!--Formerly CNIBPPConfigStart - BP parameter-->
<DEFINITION class="CNIBPPData" abrv="CNBPPDTA" version="200" family="FmNIBP" genus="GnPARAMETER" species="SpDATA">
<MEMBERS>
<MEMBER type="int16" name="targPress" minversion="200" maxversion="CURRENT_VERSION"
comment="The default adult target pressure (0 equals default)"/>
<!-- Adult Range: 80 mmHg to 280 mmHg
Ped Range: 80 mmHg to 20 mmHg less than ped Max Press Limit
Neo Range; 50 mmHg to 130 mmHg
-->
<MEMBER type="int8" name="patientMode" minversion="200" maxversion="CURRENT_VERSION"
comment="The default patient mode for the sensor"/>
<MEMBER type="int8" name="cycleMode" minversion="200" maxversion="CURRENT_VERSION"
comment="Specifies the type of cycle to perform"/>
<MEMBER type="int8" name="algorithm" minversion="200" maxversion="CURRENT_VERSION"
comment="The algorithm to use"/>
<MEMBER type="int8" name="disableNeoCheck" minversion="200" maxversion="CURRENT_VERSION"
comment="This value specifies whether the neonate protection check is enabled in adult mode"/>
<MEMBER type="boolean" name="firstReading" minversion="200" maxversion="CURRENT_VERSION"
comment="Indicates if this is the first reading of the sequence."/>
</MEMBERS>
<ENUMERATION name="patientMode">
<ENUM name="DEFAULT" defaultvalue="0" comment="Use the default option"/>
<ENUM name="ADULT" comment="The adult patient mode (greater than 29 days)"/>
<ENUM name="PEDIATRIC" comment="The pediatric patient mode (age TBD (subset of adult)))"/>
<ENUM name="NEONATE" comment="The neonate patient mode (less than 29 days)"/>
</ENUMERATION>
<ENUMERATION name="cycleMode">
<ENUM name="MANUAL" defaultvalue="0" comment="Manual reading (user initiated)"/>
<ENUM name="LONG_AUTO" comment="Long term automatic mode cycle"/>
<ENUM name="STAT" comment="Short term automatic mode"/>
</ENUMERATION>
<ENUMERATION name="algorithm">
<ENUM name="DEFAULT" defaultvalue="0" comment="Use the default option"/>
<ENUM name="FAST_BP" comment="The fast BP algorithm valid for adults and peds"/>
<ENUM name="STEP_BP" comment="The step BP algorithm valid for adults and peds)"/>
<ENUM name="NEO_BP" comment="The neonate BP algorithm valid for neonates"/>
</ENUMERATION>
<SPECIES_TABLE>
<SPECIES name="SpDATA" defaultvalue="1"/>
</SPECIES_TABLE>
</DEFINITION>
<!--Formerly CNIBPCSettings - BP Settings-->
<DEFINITION class="CNIBPCData" abrv="CNBPCDTA" version="200" family="FmNIBP" genus="GnCONFIG" species="SpDATA">
<MEMBERS>
<MEMBER type="int16" name="dfltAdultTargPress" minversion="200" maxversion="CURRENT_VERSION"
comment="The default adult target pressure, Range: 80 mmHg to 280 mmHg"/>
<MEMBER type="int16" name="dfltPedTargPress" minversion="200" maxversion="CURRENT_VERSION"
comment="The default pediatric target pressure, Range: 80 mmHg to 20 mmHg less than ped Max pressure limit"/>
<MEMBER type="int16" name="dfltNeoTargPress" minversion="200" maxversion="CURRENT_VERSION"
comment="The default neonate target pressure, Range: 50 mmHg to 130 mmHg"/>
<MEMBER type="int16" name="pedMaxPressLimit" minversion="200" maxversion="CURRENT_VERSION"
comment="The pediatric maximum pressure limit, Range: 100 mmHg to 300 mmHg"/>
<MEMBER type="int16" name="residualMaxPressLimit" minversion="200" maxversion="CURRENT_VERSION"
comment="The pediatric residual pressure limit, Range: 90 seconds to 150 seconds"/>
<MEMBER type="int8" name="dfltPatientMode" minversion="200" maxversion="CURRENT_VERSION"
comment="The default patient mode for the sensor"/>
<MEMBER type="int8" name="dfltAdultAlg" minversion="200" maxversion="CURRENT_VERSION"
comment="The default adult algorithm, use dfltAlg"/>
<MEMBER type="int8" name="dfltPedAlg" minversion="200" maxversion="CURRENT_VERSION"
comment="The default pediatric algorithm, use dfltAlg"/>
<MEMBER type="int8" name="dfltNeoAlg" minversion="200" maxversion="CURRENT_VERSION"
comment="The default neonate algorithm, use dfltAlg"/>
<MEMBER type="boolean" name="SAOEnabled" minversion="200" maxversion="CURRENT_VERSION"
comment="True indicates SAO algorithms are enabled"/>
</MEMBERS>
<ENUMERATION name="dfltPatientMode">
<ENUM name="ADULT" defaultvalue="0" comment="The adult patient mode (greater than 29 days)"/>
<ENUM name="PEDIATRIC" comment="The pediatric patient mode (age TBD (subset of adult)))"/>
<ENUM name="NEONATE" comment="The neonate patient mode (less than 29 days)"/>
</ENUMERATION>
<ENUMERATION name="dfltAlg">
<ENUM name="FAST_BP" defaultvalue="0" comment="The fast BP algorithm valid for adults and peds"/>
<ENUM name="STEP_BP" comment="The step BP algorithm valid for adults and peds"/>
<ENUM name="NEO_BP" comment="The neonate BP algorithm valid for neonates"/>
</ENUMERATION>
<SPECIES_TABLE>
<SPECIES name="SpDATA" defaultvalue="1"/>
</SPECIES_TABLE>
</DEFINITION>
<!--BP Reading -->
<DEFINITION class="CNIBPDData" abrv="CNBPDDTA" version="201" family="FmNIBP" genus="GnDATA" species="SpDATA">
<MEMBERS>
<MEMBER type="int16" name="Status" minversion="200" maxversion="CURRENT_VERSION"
comment="The status for the entire reading"/>
<MEMBER type="OBJECT" class="CNumDStd" name="Systolic" minversion="200" maxversion="CURRENT_VERSION"
comment="Systolic BP {in 0.01 mmHg units}"/>
<MEMBER type="OBJECT" class="CNumDStd" name="Diastolic" minversion="200" maxversion="CURRENT_VERSION"
comment="Diastolic BP {in 0.01 mmHg units}"/>
<MEMBER type="OBJECT" class="CNumDStd" name="MAP" minversion="200" maxversion="CURRENT_VERSION"
comment="Mean Art. Pressure {in 0.01 mmHg units}"/>
<MEMBER type="OBJECT" class="CNumDStd" name="PR" minversion="200" maxversion="CURRENT_VERSION"
comment="NIBP Pulse Rate (in Beats/Minute units}"/>
</MEMBERS>
<ENUMERATION name="Status">
<ENUM name="RD_OK" defaultvalue="0" comment="Reading is okay"/>
<ENUM name="RD_ABORT" comment="Reading aborted"/>
<ENUM name="RD_NOT_AVAIL" comment="Reading is not yet available"/>
<ENUM name="RD_SPLAT" comment="Reading splat"/>
<ENUM name="RD_ARTIFACT" comment="Too much artifact to calculate a reading"/>
<ENUM name="RD_LOW_INFLAT" comment="Reading couldn't be obtained because a high enough inflation couldn't be reached"/>
<ENUM name="RD_KINKED_TUBE" comment="Inflation was too quick check for a kinked hose"/>
<ENUM name="RD_EARLY_DUMP" comment="Reading couldn't be obtained because the system dumped too soon"/>
<ENUM name="RD_NOT_ENOUGH_DATA" comment="Not enough data could be obtained"/>
<ENUM name="RD_PATIENT_INVALID" comment="The patient is outside of the modules capability to measure"/>
<ENUM name="RD_REINF_TOO_LATE" comment="The device needed to re-inflate after it was safe"/>
<ENUM name="RD_REINF_LIMIT" comment="Too many re-inflates requested"/>
<ENUM name="RD_BLEED" comment="Pressure could not be bleed below SVRP"/>
<ENUM name="RD_LEAK" comment="An air leak has been detected"/>
<ENUM name="RD_SAFETY_FAULT" comment="An air leak has been detected"/>
<ENUM name="RD_ZERO_FAULT" comment="Transducers could not be zeroed" /> <!-- Added version 201 of object -->
</ENUMERATION>
<!-- ======= -->
<!-- Species -->
<!-- ======= -->
<SPECIES_TABLE>
<SPECIES name="SpDATA" defaultvalue="1"/>
</SPECIES_TABLE>
</DEFINITION>
<DEFINITION class="CNIBPDDataModified" abrv="CNBPDDTAM" version="202" family="FmNIBP" genus="GnDATA" species="SpDATAMODIFIED">
<MEMBERS>
<MEMBER type="OBJECT" name="NIBPData" class="CNIBPDData" minversion="100" maxversion="CURRENT_VERSION" />
<MEMBER type="uint16" name="Status" minversion="100" maxversion="CURRENT_VERSION" comment="DATA_NOT_AVAIL, DATA_COMPLETE, etc" />
<MEMBER type="TIME" name="STime" minversion="100" maxversion="CURRENT_VERSION" comment="Time reading was taken. Host specified. Not Sensor." />
<MEMBER type="uint8" name="Mode" minversion="100" maxversion="CURRENT_VERSION" comment="Mode of operation"/>
<MEMBER type="uint16" name="PatientPosition" minversion="100" maxversion="CURRENT_VERSION" comment="Describes the patient's position during reading, Sitting, Standing, etc." />
<MEMBER type="uint16" name="CuffSize" minversion="100" maxversion="CURRENT_VERSION" comment="Describes what size cuff was on the patient during the reading." />
<MEMBER type="uint16" name="CuffLocation" minversion="100" maxversion="CURRENT_VERSION" comment="Describes where on the patient the cuff was located during the reading." />
<MEMBER type="uint16" name="Source" minversion="201" maxversion="CURRENT_VERSION" comment="Source of data"/>
<MEMBER type="uint8" name="Method" minversion="201" maxversion="CURRENT_VERSION" comment="Method used"/>
</MEMBERS>
<ENUMERATION name="Status">
<!-- ====== -->
<!-- Status -->
<!-- ====== -->
<!-- Generic Status codes -->
<ENUM name="DATA_NOT_AVAIL" defaultvalue="0" />
<ENUM name="DATA_COMPLETE" />
<ENUM name="DATA_FAILURE" />
<ENUM name="DATA_EXCEPTION" />
<ENUM name="DATA_PROCESSING" />
</ENUMERATION>
<ENUMERATION name="Mode">
<!-- ===== -->
<!-- Mode -->
<!-- ===== -->
<ENUM name="NONE" defaultvalue="0"/>
<ENUM name="UNKNOWN"/>
<ENUM name="ADULT" defaultvalue="10"/>
<ENUM name="NEONATAL"/>
<ENUM name="PEDIATRIC"/>
</ENUMERATION>
<ENUMERATION name="PatientPosition">
<!-- =========== -->
<!-- PatientPosition -->
<!-- =========== -->
<!-- Generic PatientPosition codes -->
<ENUM name="NONE" defaultvalue="0" />
<ENUM name="UNKNOWN" />
<ENUM name="LYING" />
<ENUM name="SITTING" />
<ENUM name="STANDING" />
</ENUMERATION>
<ENUMERATION name="CuffSize">
<!-- ====== -->
<!-- CuffSize -->
<!-- ====== -->
<!-- Generic CuffSize codes -->
<ENUM name="NONE" defaultvalue="0" />
<ENUM name="UNKNOWN" />
<ENUM name="NEONATAL_1" />
<ENUM name="NEONATAL_2" />
<ENUM name="NEONATAL_3" />
<ENUM name="NEONATAL_4" />
<ENUM name="NEONATAL_5" />
<ENUM name="SMALL_INFANT" />
<ENUM name="INFANT" />
<ENUM name="SMALL_CHILD" />
<ENUM name="CHILD" />
<ENUM name="SMALL_ADULT" />
<ENUM name="ADULT" />
<ENUM name="ADULT_LONG" />
<ENUM name="LARGE_ADULT" />
<ENUM name="LARGE_ADULT_LONG" />
<ENUM name="THIGH" />
</ENUMERATION>
<ENUMERATION name="CuffLocation">
<!-- ========= -->
<!-- CuffLocation -->
<!-- ========= -->
<!-- Generic CuffLocation codes -->
<ENUM name="NONE" defaultvalue="0" />
<ENUM name="UNKNOWN" />
<ENUM name="LEFT_ARM" />
<ENUM name="RIGHT_ARM" />
<ENUM name="LEFT_LEG" />
<ENUM name="RIGHT_LEG" />
</ENUMERATION>
<ENUMERATION name="Source">
<!-- Extended Status codes when Status is Data Failure or Data Exception -->
<!-- ====== -->
<!-- Source -->
<!-- ====== -->
<!-- Generic Source codes -->
<ENUM name="NONE" defaultvalue="0"/>
<ENUM name="UNKNOWN"/>
<!-- Class Source codes begin at 10 -->
<ENUM name="CVSM" defaultvalue="10"/>
<ENUM name="MODB"/>
<ENUM name="MODF"/>
<ENUM name="POEM"/>
<ENUM name="MODG"/>
</ENUMERATION>
<ENUMERATION name="Method">
<!-- ====== -->
<!-- Method -->
<!-- ====== -->
<!-- Generic Method codes -->
<ENUM name="NONE" defaultvalue="0"/>
<ENUM name="UNKNOWN"/>
<ENUM name="MANUAL"/>
<ENUM name="DEVICE"/>
<ENUM name="REMOTE"/>
<!-- Class Method codes begin at 10 -->
<ENUM name="FAST_BP" defaultvalue="10"/>
<ENUM name="STEP_BP"/>
<ENUM name="NEONATAL_STEP_BP"/>
<ENUM name="LINEAR_DEFLATION_BP"/>
<!--Added v202-->
<ENUM name="AVERAGE_BP"/>
</ENUMERATION>
<SPECIES_TABLE>
<SPECIES name="SpDATAMODIFIED" defaultvalue="9" />
</SPECIES_TABLE>
</DEFINITION>
<DEFINITION class="CNIBPPChunkSelector" abrv="CNBPPCHK" version="200" family="FmNIBP" genus="GnPARAMETER" species="SpCHUNK_SELECTOR">
<MEMBERS>
<MEMBER type="uint32" name="chunk" minversion="200" maxversion="CURRENT_VERSION" comment="Value is used to specify Max Chunk ID when used with SpRESULT "/>
<MEMBER type="uint32" name="index" minversion="200" maxversion="CURRENT_VERSION" comment="Value is used to specify the index of the chunk we want to recieve"/>
</MEMBERS>
<SPECIES_TABLE>
<SPECIES name="SpCHUNK_SELECTOR" defaultvalue="3" comment="Used to indicate that the Value is a chunk selector"/>
</SPECIES_TABLE>
</DEFINITION>
<DEFINITION class="CNIBPPSelector" abrv="CNBPPSEL" version="200" family="FmNIBP" genus="GnPARAMETER" species="SpSELECTOR">
<MEMBERS>
<MEMBER type="uint32" name="Value" minversion="200" maxversion="CURRENT_VERSION" comment="Value is used to specify the desired option when needed."/>
</MEMBERS>
<SPECIES_TABLE>
<SPECIES name="SpSELECTOR" defaultvalue="2" comment="Used to indicate that the Value is a selector"/>
</SPECIES_TABLE>
</DEFINITION>
<!--====================================-->
<!--GnDATA-->
<!--==================================== -->
<DEFINITION class="CNIBPDStd" abrv="CNBPDSTD" version="106" family="FmNIBP" genus="GnDATA" species="SpSTANDARD">
<MEMBERS>
<!-- Version 001 -->
<MEMBER type="TIME" name="STime" minversion="100" maxversion="CURRENT_VERSION" comment="Time reading was taken"/>
<MEMBER type="uint16" name="Status" minversion="100" maxversion="CURRENT_VERSION" comment="DATA_NOT_AVAIL, DATA_AVAIL, etc"/>
<MEMBER type="int16" name="Systolic" minversion="100" maxversion="CURRENT_VERSION" comment="Systolic BP {in 0.01 mmHg units}"/>
<MEMBER type="int16" name="Diastolic" minversion="100" maxversion="CURRENT_VERSION" comment="Diastolic BP {in 0.01 mmHg units}"/>
<MEMBER type="int16" name="MAP" minversion="100" maxversion="CURRENT_VERSION" comment="Mean Arterial Pressre {in 0.01 mmHg units}"/>
<MEMBER type="uint16" name="HR" minversion="100" maxversion="CURRENT_VERSION" comment="NIBP Heart Rate (in BPM (Beats/Minute) units}"/>
<!-- Version 002 -->
<MEMBER type="uint16" name="ExtStatus" minversion="100" maxversion="CURRENT_VERSION" comment="Extended status/error code"/>
<MEMBER type="uint16" name="Source" minversion="100" maxversion="CURRENT_VERSION" comment="Source of data"/>
<MEMBER type="uint8" name="Mode" minversion="100" maxversion="CURRENT_VERSION" comment="Mode of operation"/>
<MEMBER type="uint8" name="Method" minversion="100" maxversion="CURRENT_VERSION" comment="Method used"/>
</MEMBERS>
<ENUMERATION name="Status">
<!-- ====== -->
<!-- Status -->
<!-- ====== -->
<!-- Generic Status codes -->
<ENUM name="DATA_NOT_AVAIL" defaultvalue="0"/>
<ENUM name="DATA_COMPLETE"/>
<ENUM name="DATA_FAILURE"/>
<ENUM name="DATA_EXCEPTION"/>
<ENUM name="DATA_PROCESSING"/>
<!-- No Class Status codes -->
</ENUMERATION>
<ENUMERATION name="ExtStatus">
<!-- =============== -->
<!-- Extended Status -->
<!-- =============== -->
<!-- One Generic Extended Status codes -->
<ENUM name="NONE" defaultvalue="0"/>
</ENUMERATION>
<ENUMERATION name="Source">
<!-- Extended Status codes when Status is Data Failure or Data Exception -->
<!-- ====== -->
<!-- Source -->
<!-- ====== -->
<!-- Generic Source codes -->
<ENUM name="NONE" defaultvalue="0"/>
<ENUM name="UNKNOWN"/>
<!-- Class Source codes begin at 10 -->
<ENUM name="CVSM" defaultvalue="10"/>
<ENUM name="MODB"/>
<ENUM name="MODF"/>
<ENUM name="POEM"/>
<ENUM name="MODG"/>
</ENUMERATION>
<ENUMERATION name="Mode">
<!-- ==== -->
<!-- Mode -->
<!-- ==== -->
<!-- Generic Mode codes -->
<ENUM name="NONE" defaultvalue="0"/>
<ENUM name="UNKNOWN"/>
<!-- Class Mode codes begin at 10 -->
<ENUM name="ADULT" defaultvalue="10"/>
<ENUM name="NEONATAL"/>
<ENUM name="PEDIATRIC"/>
</ENUMERATION>
<ENUMERATION name="Method">
<!-- ====== -->
<!-- Method -->
<!-- ====== -->
<!-- Generic Method codes -->
<ENUM name="NONE" defaultvalue="0"/>
<ENUM name="UNKNOWN"/>
<ENUM name="MANUAL"/>
<ENUM name="DEVICE"/>
<ENUM name="REMOTE"/>
<!-- Class Method codes begin at 10 -->
<ENUM name="FAST_BP" defaultvalue="10"/>
<ENUM name="STEP_BP"/>
<ENUM name="NEONATAL_STEP_BP"/>
<ENUM name="LINEAR_DEFLATION_BP"/>
<!--Added v106-->
<ENUM name="AVERAGE_BP"/>
</ENUMERATION>
<SPECIES_TABLE>
<SPECIES name="SpSTANDARD" defaultvalue="0"/>
</SPECIES_TABLE>
</DEFINITION>
<!--====================================-->
<!--GnCONFIG-->
<!--==================================== -->
<DEFINITION class="CNIBPCStd" abrv="CNBPCSTD" version="102" family="FmNIBP" genus="GnCONFIG" species="SpSTANDARD">
<MEMBERS>
<MEMBER type="uint16" name="DisplayUnits" minversion="100" maxversion="CURRENT_VERSION" comment="Display units for BP and MAP"/>
<MEMBER type="boolean" name="MAPDisplay" minversion="100" maxversion="CURRENT_VERSION" comment="MAP Display enabled/disabled"/>
</MEMBERS>
<ENUMERATION name="DisplayUnits">
<ENUM name="NIBP_MMHG" defaultvalue="0"/>
<ENUM name="NIBP_KPA"/>
</ENUMERATION>
<ENUMERATION name="MAPDisplay">
<ENUM name="DISABLE" defaultvalue="0"/>
<ENUM name="ENABLE"/>
</ENUMERATION>
<SPECIES_TABLE>
<SPECIES name="SpSTANDARD" defaultvalue="0"/>
</SPECIES_TABLE>
</DEFINITION>
<!--====================================-->
<!--GnDATAEXT-->
<!--==================================== -->
<DEFINITION class="CNIBPDExtStd" abrv="CNBPDXTSTD" version="201" family="FmNIBP" genus="GnDATAEXT" species="SpSTANDARD">
<MEMBERS>
<MEMBER type="OBJECT" class="ANY_CLASS" name="Container" size="UNBOUNDED" minversion="200" maxversion="CURRENT_VERSION" comment="Contains a list of NIBP objects" />
</MEMBERS>
<SPECIES_TABLE>
<SPECIES name="SpSTANDARD" defaultvalue="0"/>
</SPECIES_TABLE>
</DEFINITION>
<!--====================================-->
<!--Messages -->
<!-- ====================================-->
<MESSAGES>
<MSG type="Request" name="GET_BP"/>
<MSG type="Request" name="GET_CONFIG"/>
<MSG type="Response" name="PUT_BP" comment="Requires a CNIBPDData object"/>
<MSG type="Response" name="PUT_CONFIG"/>
<MSG type="Command" name="START_NIBP" comment="Requires a CNIBPPData"/>
<MSG type="Command" name="STOP_NIBP"/>
<MSG type="Command" name="WRITE_CONFIG"/>
<MSG type="Status" name="REPORT_BP"/>
<!--New BP Messages -->
<MSG type="Command" name="ZERO_NIBP"/>
<MSG type="Command" name="MSG_PUSH_ENABLE" comment="Requires a CNIBPPSelector"/>
<MSG type="Stream" name="REPORT_BP" comment="Requires a CNIBPDData object"/>
<!--Platform BP Messages-->
<!--BP Status-->
<MSG type="Request" name="GET_STATUS" comment="Requires CNIBPPSelector object to indicate which processors status to retrieve."/>
<MSG type="Response" name="PUT_STATUS" comment="Requires a CNIBPDStatus"/>
<MSG type="Stream" name="REPORT_STATUS" comment="Requires a CNIBPDStatus, only primary processor status will be reported."/>
<MSG type="Command" name="CLEAR_SAFTEY_STATUS"/>
<MSG type="Command" name="CLEAR_POST_STATUS"/>
<MSG type="Command" name="RESET_DEVICE"/>
<!--BP Calibration-->
<MSG type="Request" name="GET_CALIBRATION" comment="Requires CNIBPPSelector to specify primary or secondary processor cal"/>
<MSG type="Response" name="PUT_CALIBRATION" comment="Requires CNIBPCCal."/>
<MSG type="Command" name="SET_CALIBRATION" comment="Requires CNIBPCCal."/>
<MSG type="Command" name="SAVE_CALIBRATION" comment="Requires CNIBPPSelector to specify primary or secondary processor cal"/>
<MSG type="Command" name="LOAD_CALIBRATION" comment="Requires CNIBPPSelector to specify primary or secondary processor cal"/>
<MSG type="Command" name="RESTORE_DFLT_CALIBRATION" comment="Requires CNIBPPSelector to specify primary or secondary processor cal"/>
<!--BP Settings-->
<MSG type="Request" name="GET_BP_SETTINGS"/>
<MSG type="Response" name="PUT_BP_SETTINGS" comment="Requires CNIBPCData"/>
<MSG type="Command" name="SET_BP_SETTINGS" comment="Requires CNIBPCData"/>
<MSG type="Command" name="SAVE_BP_SETTINGS" />
<MSG type="Command" name="LOAD_BP_SETTINGS"/>
<MSG type="Command" name="RESTORE_DFLT_SETTINGS"/>
<!--Chunk Data Engineering/Event LOG-->
<MSG type="Request" name="GET_CHUNK" comment="Requires a CNIBPPChunkSelector object to indicate the type of chunk to retrieve."/>
<MSG type="Response" name="PUT_CHUNK" comment="Requires a CNIBPDChunk"/>
<MSG type="Request" name="GET_CHUNK_SIZE" comment="Requires a CNIBPPSelector object to indicate what chunk size to retrieve. "/>
<MSG type="Response" name="PUT_CHUNK_SIZE" comment="Requires a CNIBPPSelector object"/>
<MSG type="Request" name="GET_MAX_CHUNK_ID" />
<MSG type="Response" name="PUT_MAX_CHUNK_ID" comment="Requires a CNIBPPSelector object"/>
<!--Hardware State-->
<MSG type="Request" name="GET_HARDWARE_STATE" comment="Requires a CNIBPPSelector to specify the hardware"/>
<MSG type="Response" name="PUT_HARDWARE_STATE" comment="Requires a CNIBPDHState"/>
<MSG type="Command" name="SET_HARDWARE_STATE" comment="Requires a CNIBPDHState"/>
<MSG type="Command" name="PULSE_STEP_VALVE" comment="Requires a CNIBPPSelector to specify time in units 0.0001 seconds"/>
<!--Device Test Locks-->
<MSG type="Request" name="GET_TEST_LOCK" comment="Requires a CNIBPPSelector to specify the lock"/>
<MSG type="Response" name="PUT_TEST_LOCK" comment="Requires a CNIBPDLock"/>
<MSG type="Command" name="SET_TEST_LOCK" comment="Requires a CNIBPDLock"/>
<!--AD Raw Data-->
<MSG type="Request" name="GET_RAW_DATA"/>
<MSG type="Response" name="PUT_RAW_DATA" comment="Requires a CNIBPDRData"/>
<!--Pressure Data-->
<MSG type="Request" name="GET_PRESSURE_DATA"/>
<MSG type="Response" name="PUT_PRESSURE_DATA" comment="Requires a CNIBPDPData"/>
</MESSAGES>
</FAMILY>

355
CSPO2Family.xml Normal file
View file

@ -0,0 +1,355 @@
<FAMILY name="FmSPO2">
<!--====================================-->
<!--Species Key Reference -->
<!-- ====================================-->
<SPECIES_KEY>
<GENUS name="GnDATA">
<SPECIES name="SpSTANDARD" defaultvalue="0"/>
<SPECIES name="SpDATA" defaultvalue="1"/>
<SPECIES name="SpDATAMODIFIED" defaultvalue="2" />
</GENUS>
<GENUS name="GnCONFIG">
<SPECIES name="SpSTANDARD" defaultvalue="0"/>
<SPECIES name="SpDATA" defaultvalue="1"/>
</GENUS>
<GENUS name="GnPARAMETER">
<SPECIES name="SpSELECTOR" defaultvalue="2"/>
</GENUS>
</SPECIES_KEY>
<!--====================================-->
<!--GnDATA-->
<!--==================================== -->
<DEFINITION class="CSpO2DData" abrv="CSP2DDTA" version="213" family="FmSPO2" genus="GnDATA" species="SpDATA">
<MEMBERS>
<MEMBER type="TIME" name="STime" minversion="100" maxversion="CURRENT_VERSION" comment="Time reading was taken. Host specified. Not Sensor."/>
<MEMBER type="uint16" name="ExtStatus" minversion="100" maxversion="CURRENT_VERSION" comment="Sensor Specified."/>
<MEMBER type="uint16" name="Source" minversion="100" maxversion="CURRENT_VERSION" comment="Source of data. Sensor Specified."/>
<MEMBER type="OBJECT" name="Sat" class="CNumDStd" minversion="200" maxversion="CURRENT_VERSION" comment="O2 Saturation {in % units}"/>
<MEMBER type="OBJECT" name="HR" class="CNumDStd" minversion="200" maxversion="CURRENT_VERSION" comment="SpO2 Heart Rate {in BPM (Beats/Minute) units}"/>
<MEMBER type="OBJECT" name="PI" class="CNumDStd" minversion="200" maxversion="CURRENT_VERSION" comment="SpO2 Perfusion Index {in % units}"/>
<MEMBER type="uint16" name="Status" minversion="202" maxversion="CURRENT_VERSION" comment="DATA_NOT_AVAIL, DATA_COMPLETE, etc."/>
<MEMBER type="OBJECT" name="ElapsedSatSeconds" class="CNumDStd" minversion="200" maxversion="CURRENT_VERSION" comment="Elapsed SatSeconds (Nellcor Only)"/>
<MEMBER type="OBJECT" name="TotalSatSeconds" class="CNumDStd" minversion="200" maxversion="CURRENT_VERSION" comment="Total SatSeconds Configured, 0 = SatSeconds disabled (Nellcor Only)"/>
<MEMBER type="OBJECT" name="SatConfidence" class="CNumDStd" minversion="208" maxversion="CURRENT_VERSION" comment="O2 Confidence {in % units}"/>
<MEMBER type="OBJECT" name="HRConfidence" class="CNumDStd" minversion="208" maxversion="CURRENT_VERSION" comment="HR Confidence {in % units}"/>
<MEMBER type="OBJECT" name="PIConfidence" class="CNumDStd" minversion="208" maxversion="CURRENT_VERSION" comment="PI Confidence {in % units}"/>
<MEMBER type="OBJECT" name="PVIConfidence" class="CNumDStd" minversion="208" maxversion="CURRENT_VERSION" comment="PVI Confidence {in % units}"/>
<MEMBER type="OBJECT" name="PVI" class="CNumDStd" minversion="208" maxversion="CURRENT_VERSION" comment="PVI (0 to 100%}"/>
<MEMBER type="uint8" name="Mode" minversion="211" maxversion="CURRENT_VERSION" comment="Mode of operation" />
<MEMBER type="uint8" name="Method" minversion="211" maxversion="CURRENT_VERSION" comment="Method used" />
</MEMBERS>
<ENUMERATION name="Source">
<!-- ====== -->
<!-- Source -->
<!-- ====== -->
<!-- Generic Source codes -->
<ENUM name="NONE" defaultvalue="0"/>
<ENUM name="UNKNOWN"/>
<!-- Class Source codes begin at 10 -->
<ENUM name="NONIN" defaultvalue="10"/>
<ENUM name="NELLCOR_MP205"/>
<ENUM name="NELLCOR_MP506"/>
<ENUM name="MASIMO_MS11"/>
<ENUM name="NELLCOR_NELL3"/>
<ENUM name="NELLCOR_NELL1"/>
<ENUM name="MASIMO_MS2011"/>
<ENUM name="MASIMO_MX"/>
<ENUM name="NELLCOR"/>
<!-- Added in version 213 -->
<ENUM name="NELLCOR_PMB05N"/>
</ENUMERATION>
<ENUMERATION name="ExtStatus">
<ENUM name="PULSE_FOUND" comment="Pulse detected" defaultvalue="0"/>
<ENUM name="SEARCHING_FOR_BOARD" comment="Identifying SpO2 board"/>
<ENUM name="NO_PROBE" comment="Sensor is not attached"/>
<ENUM name="INCORRECT_PROBE" comment="Incorrect sensor is attached"/>
<ENUM name="SEARCHING_FOR_PULSE" comment="Searching for pulse"/>
<ENUM name="BAD_PROBE" comment="Bad sensor is attached"/>
<ENUM name="PROBE_EXPIRED" comment="Probe is expired"/>
<ENUM name="NO_CABLE" comment="Cable is not attached"/>
<ENUM name="INCORRECT_CABLE" comment="Incorrect cable is attached"/>
<ENUM name="BAD_CABLE" comment="Bad cable is attached"/>
<ENUM name="CABLE_EXPIRED" comment="Cable is expired"/>
<ENUM name="VALUE_NOT_ACQUIRED" comment="A value could not be acquired."/>
</ENUMERATION>
<ENUMERATION name="Status">
<!-- ====== -->
<!-- Status -->
<!-- ====== -->
<!-- Generic Status codes -->
<ENUM name="DATA_NOT_AVAIL" defaultvalue="0"/>
<ENUM name="DATA_COMPLETE"/>
<ENUM name="DATA_FAILURE"/>
<ENUM name="DATA_EXCEPTION"/>
<ENUM name="DATA_PROCESSING"/>
<!-- No Class Status codes -->
</ENUMERATION>
<ENUMERATION name="Mode">
<!-- ==== -->
<!-- Mode -->
<!-- ==== -->
<!-- Generic Mode codes -->
<ENUM name="NONE" defaultvalue="0"/>
<ENUM name="UNKNOWN"/>
<!-- Class Mode codes begin at 10 -->
</ENUMERATION>
<ENUMERATION name="Method">
<!-- ====== -->
<!-- Method -->
<!-- ====== -->
<!-- Generic Method codes -->
<ENUM name="NONE" defaultvalue="0"/>
<ENUM name="UNKNOWN"/>
<ENUM name="MANUAL"/>
<ENUM name="DEVICE"/>
<ENUM name="REMOTE"/>
<!-- Class Method codes begin at 10 -->
</ENUMERATION>
<SPECIES_TABLE>
<SPECIES name="SpDATA" defaultvalue="1"/>
</SPECIES_TABLE>
</DEFINITION>
<!--====================================-->
<!--GnCONFIG-->
<!--==================================== -->
<DEFINITION class="CSpO2CData" abrv="CSP2CDTA" version="205" family="FmSPO2" genus="GnCONFIG" species="SpDATA">
<MEMBERS>
<MEMBER type="int8" name="SatExponent" minversion="200" maxversion="CURRENT_VERSION" comment="Exponent value that indicates the place value for the Sat member within CSpO2DData"/>
<MEMBER type="int8" name="PIExponent" minversion="200" maxversion="CURRENT_VERSION" comment="Exponent value that indicates the place value for the PI member within CSpO2DData"/>
<MEMBER type="OBJECT" name="SatAlarms" class="CNumCStd" minversion="201" maxversion="CURRENT_VERSION" comment="O2 Saturation Alarms {in % units}"/>
<MEMBER type="OBJECT" name="HRAlarms" class="CNumCStd" minversion="201" maxversion="CURRENT_VERSION" comment="SpO2 Heart Rate Alarms {in BPM (Beats/Minute) units}"/>
<MEMBER type="uint8" name="FastSat" minversion="201" maxversion="CURRENT_VERSION" comment="Saturation averaging time is long and short respectively for OFF (default) and ON"/>
<MEMBER type="uint8" name="Sensitivity" minversion="201" maxversion="CURRENT_VERSION" comment="(Masimo only) Algorithm mode NORMAL (default) or MAXIMUM"/>
<MEMBER type="uint8" name="AveragingTime" minversion="201" maxversion="CURRENT_VERSION" comment="(Masimo only) Averaging time of the saturation measurement. Default is 8_SEC"/>
<MEMBER type="uint8" name="SatSecondsLimit" minversion="201" maxversion="CURRENT_VERSION" comment="(Nellcor only) SatSeconds(TM) limit. Default DISABLED"/>
<MEMBER type="uint8" name="SmartTone" minversion="202" maxversion="CURRENT_VERSION" comment="SmartTone for Signal IQ and Beep. Default is OFF"/>
<MEMBER type="int8" name="PVIExponent" minversion="203" maxversion="CURRENT_VERSION" comment="Exponent value that indicates the place value for the PVI member (read only)"/>
</MEMBERS>
<ENUMERATION name="FastSat">
<ENUM name="NONE" defaultvalue="0" />
<ENUM name="OFF" defaultvalue="1" />
<ENUM name="ON" defaultvalue="2" />
</ENUMERATION>
<ENUMERATION name="Sensitivity">
<ENUM name="NONE" defaultvalue="0" />
<ENUM name="NORMAL" defaultvalue="1" />
<ENUM name="MAXIMUM" defaultvalue="2" />
<ENUM name="APOD" defaultvalue="3" />
</ENUMERATION>
<ENUMERATION name="AveragingTime">
<ENUM name="NONE" defaultvalue="0" />
<ENUM name="2_TO_4_SEC" defaultvalue="1" />
<ENUM name="4_TO_6_SEC" defaultvalue="2" />
<ENUM name="8_SEC" defaultvalue="3" />
<ENUM name="10_SEC" defaultvalue="4" />
<ENUM name="12_SEC" defaultvalue="5" />
<ENUM name="14_SEC" defaultvalue="6" />
<ENUM name="16_SEC" defaultvalue="7" />
</ENUMERATION>
<ENUMERATION name="SatSecondsLimit">
<ENUM name="NONE" defaultvalue="0" />
<ENUM name="DISABLED" defaultvalue="1" />
<ENUM name="10_SEC" defaultvalue="2" />
<ENUM name="25_SEC" defaultvalue="3" />
<ENUM name="50_SEC" defaultvalue="4" />
<ENUM name="100_SEC" defaultvalue="5" />
</ENUMERATION>
<ENUMERATION name="SmartTone">
<ENUM name="NONE" defaultvalue="0" />
<ENUM name="OFF" defaultvalue="1" />
<ENUM name="ON" defaultvalue="2" />
</ENUMERATION>
<SPECIES_TABLE>
<SPECIES name="SpDATA" defaultvalue="1"/>
</SPECIES_TABLE>
</DEFINITION>
<!--====================================-->
<!--GnDATA-->
<!--==================================== -->
<DEFINITION class="CSpO2DDataModified" abrv="CSP2DDTAM" version="201" family="FmSPO2" genus="GnDATA" species="SpDATAMODIFIED">
<MEMBERS>
<MEMBER type="OBJECT" name="SpO2Data" class="CSpO2DData" minversion="100" maxversion="CURRENT_VERSION" />
<MEMBER type="uint8" name="O2FlowRate" minversion="100" maxversion="CURRENT_VERSION" comment="User Inputs numeric (1 - 20 liters increment of 1)" />
<MEMBER type="uint8" name="O2Concentration" minversion="100" maxversion="CURRENT_VERSION" comment="User Inputs numeric (21 - 100% increment of 1)" />
<MEMBER type="uint8" name="O2Method" minversion="100" maxversion="CURRENT_VERSION" comment="Selection" />
<MEMBER type="uint8" name="Location" minversion="100" maxversion="CURRENT_VERSION" comment="Where the SpO2 sensor is attached to the patient." />
</MEMBERS>
<ENUMERATION name="O2Method">
<!-- ====== -->
<!-- Method -->
<!-- ====== -->
<!-- Generic O2Method codes -->
<ENUM name="NONE" defaultvalue="0" />
<ENUM name="UNKNOWN" />
<ENUM name="AEROSOL_HUMIDIFIED_MASK" />
<ENUM name="FACE_TENT" />
<ENUM name="MASK" />
<ENUM name="NASAL_CANNULA" />
<ENUM name="NON_REBREATHER" />
<ENUM name="PARTIAL_REBREATHER" />
<ENUM name="T_PIECE" />
<!--v201: Fixed spelling from TRACHEOTOMY to TRACHEOSTOMY -->
<ENUM name="TRACHEOSTOMY_COLLAR" />
<ENUM name="VENTILATOR" />
<ENUM name="VENTURI_MASK" />
<ENUM name="ROOM_AIR" />
<ENUM name="OXYMIZER" />
</ENUMERATION>
<ENUMERATION name="Location">
<!-- ====== -->
<!-- Location -->
<!-- ====== -->
<!-- Generic Location codes -->
<ENUM name="NONE" defaultvalue="0" />
<ENUM name="UNKNOWN" />
<ENUM name="EAR" />
<ENUM name="FINGER" />
<ENUM name="TOE" />
<ENUM name="FOREHEAD" />
</ENUMERATION>
<SPECIES_TABLE>
<SPECIES name="SpDATAMODIFIED" defaultvalue="2" />
</SPECIES_TABLE>
</DEFINITION>
<!--====================================-->
<!--GnDATA-->
<!--==================================== -->
<DEFINITION class="CSpO2DStd" abrv="CSP2DSTD" version="102" family="FmSPO2" genus="GnDATA" species="SpSTANDARD">
<MEMBERS>
<MEMBER type="TIME" name="STime" minversion="100" maxversion="CURRENT_VERSION" comment="Time reading was taken"/>
<MEMBER type="uint16" name="Status" minversion="100" maxversion="CURRENT_VERSION" comment="DATA_NOT_AVAIL, DATA_COMPLETE, etc"/>
<MEMBER type="uint16" name="Sat" minversion="100" maxversion="CURRENT_VERSION" comment="O2 Saturation {in % units}"/>
<MEMBER type="uint16" name="HR" minversion="100" maxversion="CURRENT_VERSION" comment="SpO2 Heart Rate (in BPM (Beats/Minute) units}"/>
<MEMBER type="uint16" name="ExtStatus" minversion="100" maxversion="CURRENT_VERSION" comment="Extended status/error code"/>
<MEMBER type="uint16" name="Source" minversion="100" maxversion="CURRENT_VERSION" comment="Source of data "/>
<MEMBER type="uint8" name="Mode" minversion="100" maxversion="CURRENT_VERSION" comment="Mode of operation"/>
<MEMBER type="uint8" name="Method" minversion="100" maxversion="CURRENT_VERSION" comment="Method used"/>
</MEMBERS>
<ENUMERATION name="Status">
<!-- ====== -->
<!-- Status -->
<!-- ====== -->
<!-- Generic Status codes -->
<ENUM name="DATA_NOT_AVAIL" defaultvalue="0"/>
<ENUM name="DATA_COMPLETE"/>
<ENUM name="DATA_FAILURE"/>
<ENUM name="DATA_EXCEPTION"/>
<ENUM name="DATA_PROCESSING"/>
<!-- No Class Status codes -->
</ENUMERATION>
<ENUMERATION name="ExtStatus">
<!-- =============== -->
<!-- Extended Status -->
<!-- =============== -->
<!-- One Generic Extended Status codes -->
<ENUM name="NONE" defaultvalue="0"/>
<!-- Extended Status codes when Status is Data Processing Error -->
<ENUM name="SPO2_NOPROBE"/>
<ENUM name="SPO2_NOTAVAIL"/>
<ENUM name="SPO2_OUT_OF_TRACK"/>
<ENUM name="SPO2_BAD"/>
<ENUM name="SPO2_WAIT"/>
<ENUM name="SPO2_SENSOR_BAD"/>
<ENUM name="SPO2_FROZEN"/>
</ENUMERATION>
<ENUMERATION name="Source">
<!-- ====== -->
<!-- Source -->
<!-- ====== -->
<!-- Generic Source codes -->
<ENUM name="NONE" defaultvalue="0"/>
<ENUM name="UNKNOWN"/>
<!-- Class Source codes begin at 10 -->
<ENUM name="NONIN" defaultvalue="10"/>
<ENUM name="NELLCOR_MP205"/>
<ENUM name="NELLCOR_MP506"/>
<ENUM name="MASIMO_MS11"/>
<ENUM name="NELLCOR_NELL3"/>
<ENUM name="NELLCOR_NELL1"/>
<ENUM name="MASIMO_MS2011"/>
<ENUM name="MASIMO_MX"/>
<ENUM name="NELLCOR"/>
<!-- Added in version 102 -->
<ENUM name="NELLCOR_PMB05N"/>
</ENUMERATION>
<ENUMERATION name="Mode">
<!-- ==== -->
<!-- Mode -->
<!-- ==== -->
<!-- Generic Mode codes -->
<ENUM name="NONE" defaultvalue="0"/>
<ENUM name="UNKNOWN"/>
<!-- Class Mode codes begin at 10 -->
</ENUMERATION>
<ENUMERATION name="Method">
<!-- ====== -->
<!-- Method -->
<!-- ====== -->
<!-- Generic Method codes -->
<ENUM name="NONE" defaultvalue="0"/>
<ENUM name="UNKNOWN"/>
<ENUM name="MANUAL"/>
<ENUM name="DEVICE"/>
<ENUM name="REMOTE"/>
<!-- Class Method codes begin at 10 -->
</ENUMERATION>
<SPECIES_TABLE>
<SPECIES name="SpSTANDARD" defaultvalue="0"/>
</SPECIES_TABLE>
</DEFINITION>
<!--====================================-->
<!--GnCONFIG-->
<!--==================================== -->
<DEFINITION class="CSpO2CStd" abrv="CSP2CSTD" version="102" family="FmSPO2" genus="GnCONFIG" species="SpSTANDARD">
<MEMBERS>
<MEMBER type="boolean" name="Enabled" minversion="100" maxversion="CURRENT_VERSION"/>
<MEMBER type="uint16" name="InstalledModule" minversion="100" maxversion="CURRENT_VERSION"/>
</MEMBERS>
<ENUMERATION name="InstalledModule">
<ENUM name="NONE" defaultvalue="0"/>
<ENUM name="UNKNOWN"/>
<ENUM name="NONIN" defaultvalue="10"/>
<ENUM name="NELLCOR_MP205"/>
<ENUM name="NELLCOR_MP506"/>
<ENUM name="MASIMO_MS11"/>
<ENUM name="NELLCOR_NELL3"/>
<ENUM name="NELLCOR_NELL1"/>
<ENUM name="MASIMO_MS2011"/>
<ENUM name="MASIMO_MX"/>
<ENUM name="NELLCOR"/>
<!-- Added in version 102 -->
<ENUM name="NELLCOR_PMB05N"/>
</ENUMERATION>
<SPECIES_TABLE>
<SPECIES name="SpSTANDARD" defaultvalue="0"/>
</SPECIES_TABLE>
</DEFINITION>
<!--====================================-->
<!--GnPARAMETER-->
<!--==================================== -->
<DEFINITION class="CSpO2PSelector" abrv="CSP2PSEL" version="200" family="FmSPO2" genus="GnPARAMETER" species="SpSELECTOR">
<MEMBERS>
<MEMBER type="uint32" name="Value" minversion="200" maxversion="CURRENT_VERSION" comment="Value is used to specify the desired option when needed."/>
</MEMBERS>
<SPECIES_TABLE>
<SPECIES name="SpSELECTOR" defaultvalue="2" comment="Used to indicate that the Value is a selector"/>
</SPECIES_TABLE>
</DEFINITION>
<!--====================================-->
<!--Messages -->
<!-- ====================================-->
<MESSAGES>
<MSG type="Request" name="GET_SPO2" comment="Requests the last SpO2 reading."/>
<MSG type="Request" name="GET_CONFIG" comment="Requests the SpO2 confguration."/>
<MSG type="Response" name="PUT_SPO2" comment="Returns the last SpO2 reading. Requires a CSpO2DData object."/>
<MSG type="Response" name="PUT_CONFIG" comment="Returns the SpO2 confguration. Requires a CSpO2CData object."/>
<MSG type="Command" name="WRITE_CONFIG" comment="Command to write the SpO2 configuration. Requires a CSpO2CData object."/>
<MSG type="Status" name="REPORT_SPO2" comment="Returns the last SpO2 reading. Requires a CSpO2DData object."/>
<MSG type="Command" name="START_ACQUIRE" comment="Command to start sending SpO2 reading."/>
<MSG type="Command" name="STOP_ACQUIRE" comment="Command to stop sending SpO2 reading."/>
<MSG type="Stream" name="STREAM_SPO2" comment="Returns the last SpO2 reading. Requires a CSpO2DData object."/>
</MESSAGES>
</FAMILY>

95
Cargo.lock generated
View file

@ -7,6 +7,7 @@ name = "RustXMLParseTest"
version = "0.1.0"
dependencies = [
"clap",
"crossbeam",
"enum_index",
"enum_index_derive",
"lazy_static",
@ -64,6 +65,12 @@ dependencies = [
"windows-sys",
]
[[package]]
name = "autocfg"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
[[package]]
name = "bitflags"
version = "2.3.3"
@ -79,6 +86,12 @@ dependencies = [
"libc",
]
[[package]]
name = "cfg-if"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
[[package]]
name = "clap"
version = "4.3.19"
@ -126,6 +139,73 @@ version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
[[package]]
name = "crossbeam"
version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2801af0d36612ae591caa9568261fddce32ce6e08a7275ea334a06a4ad021a2c"
dependencies = [
"cfg-if",
"crossbeam-channel",
"crossbeam-deque",
"crossbeam-epoch",
"crossbeam-queue",
"crossbeam-utils",
]
[[package]]
name = "crossbeam-channel"
version = "0.5.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200"
dependencies = [
"cfg-if",
"crossbeam-utils",
]
[[package]]
name = "crossbeam-deque"
version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
dependencies = [
"cfg-if",
"crossbeam-epoch",
"crossbeam-utils",
]
[[package]]
name = "crossbeam-epoch"
version = "0.9.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7"
dependencies = [
"autocfg",
"cfg-if",
"crossbeam-utils",
"memoffset",
"scopeguard",
]
[[package]]
name = "crossbeam-queue"
version = "0.3.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d1cfb3ea8a53f37c40dea2c7bedcbd88bdfae54f5e2175d6ecaff1c988353add"
dependencies = [
"cfg-if",
"crossbeam-utils",
]
[[package]]
name = "crossbeam-utils"
version = "0.8.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294"
dependencies = [
"cfg-if",
]
[[package]]
name = "enum_index"
version = "0.2.0"
@ -204,6 +284,15 @@ version = "0.4.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "57bcfdad1b858c2db7c38303a6d2ad4dfaf5eb53dfeb0910128b2c26d6158503"
[[package]]
name = "memoffset"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
dependencies = [
"autocfg",
]
[[package]]
name = "once_cell"
version = "1.18.0"
@ -313,6 +402,12 @@ dependencies = [
"windows-sys",
]
[[package]]
name = "scopeguard"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
[[package]]
name = "siphasher"
version = "0.3.10"

View file

@ -13,3 +13,4 @@ enum_index_derive = "0.2.0"
phf = { version = "0.11.2", features = ["macros"] }
lazy_static = "1.4.0"
clap = { version = "4.3.19", features = ["derive"] }
crossbeam = "0.8.2"

31
FmCO2_members.rs Normal file
View file

@ -0,0 +1,31 @@
use super::MessageSpecies;
pub enum FmCO2Message{
GET_BREATH, //Request 0
GET_AMBIENT_PRESSURE, //Request 1
GET_MODULE_CONFIG, //Request 2
GET_CALIBRATION, //Request 3
GET_SERVICE_TIME, //Request 4
GET_CAL_TIME, //Request 5
GET_CONFIG, //Request 6
PUT_BREATH, //Response 0
PUT_AMBIENT_PRESSURE, //Response 1
PUT_MODULE_CONFIG, //Response 2
PUT_CALIBRATION, //Response 3
PUT_SERVICE_TIME, //Response 4
PUT_CAL_TIME, //Response 5
PUT_CONFIG, //Response 6
RESTART_BREATH_ALG, //Command 0
START_CALIBRATION, //Command 1
STOP_CALIBRATION, //Command 2
FORCE_SFM, //Command 3
PUMP_CONTROL, //Command 4
START_SFM, //Command 5
SET_MODULE_CONFIG, //Command 6
START_ACQUIRE, //Command 7
STOP_ACQUIRE, //Command 8
WRITE_CONFIG, //Command 9
STREAM_CO2, //Stream 0
}
impl MessageSpecies for FmCO2Message{}

168
FmCO2_objects.rs Normal file
View file

@ -0,0 +1,168 @@
use crate::datatypes;
use super::{Object, ObjectSpecies, RawObject};
use derive_getters::Getters;
use derive_builder::Builder;
#[derive(Clone,Debug)]
pub enum FmCO2Species{
SpDATA
SpCALIBRATION
SpSTANDARD
SpMSG_ARGUMENTS
}
impl ObjectSpecies for FmCO2Species{}
#[derive(Getters,Builder,Clone)]
pub struct CCO2DData{
Status:uint16,
ExtStatus:uint32,
Source:uint16,
Mode:uint8,
Method:uint8,
EtCO2:OBJECT,
FiCO2:OBJECT,
RR:OBJECT,
IPI:OBJECT,
S_EtCO2:OBJECT,
S_FiCO2:OBJECT,
ContCO2:OBJECT,
S_Density_5:OBJECT,
S_Density_10:OBJECT,
S_Density_30:OBJECT,
ApneaIndex_Total:OBJECT,
ApneaIndex_10_19:OBJECT,
ApneaIndex_20_29:OBJECT,
ApneaIndex_30:OBJECT,
DesatCount:OBJECT,
STime:TIME,
}
#[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,
}
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<dyn super::ObjectSpecies> { Box::new(FmCO2Species:CCO2DData) }
fn get_raw_object(&self) -> RawObject { self.raw_object.clone() }
}
#[derive(Getters,Builder,Clone)]
pub struct CCO2CCal{
Status:uint32,
Method:uint8,
GasConcentration:uint8,
}
#[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,
}
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<dyn super::ObjectSpecies> { Box::new(FmCO2Species:CCO2CCal) }
fn get_raw_object(&self) -> RawObject { self.raw_object.clone() }
}
#[derive(Getters,Builder,Clone)]
pub struct CCO2CStd{
DisplayUnits:uint16,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum DisplayUnits{
#[default]
UNITS_MMHG,
UNITS_KPA,
}
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<dyn super::ObjectSpecies> { Box::new(FmCO2Species:CCO2CStd) }
fn get_raw_object(&self) -> RawObject { self.raw_object.clone() }
}
#[derive(Getters,Builder,Clone)]
pub struct CCO2PMsgArg{
IOParameterA:uint16,
IOParameterB:uint16,
}
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<dyn super::ObjectSpecies> { Box::new(FmCO2Species:CCO2PMsgArg) }
fn get_raw_object(&self) -> RawObject { self.raw_object.clone() }
}

20
FmECG_members.rs Normal file
View file

@ -0,0 +1,20 @@
use super::MessageSpecies;
pub enum FmECGMessage{
GET_CONFIG, //Request 0
GET_LEADMEASUREMENT, //Request 1
GET_MEASURMENTS, //Request 2
GET_LEADIMPEDANCE, //Request 3
GET_QRSCOMPLEX, //Request 4
PUT_CONFIG, //Response 0
PUT_LEADMEASUREMENT, //Response 1
PUT_MEASUREMENTS, //Response 2
PUT_LEADIMPEDANCE, //Response 3
PUT_QRSCOMPLEX, //Response 4
WRITE_CONFIG, //Command 0
START_TEST, //Command 1
STOP_TEST, //Command 2
ECG_MODE, //Command 3
}
impl MessageSpecies for FmECGMessage{}

587
FmECG_objects.rs Normal file
View file

@ -0,0 +1,587 @@
use crate::datatypes;
use super::{Object, ObjectSpecies, RawObject};
use derive_getters::Getters;
use derive_builder::Builder;
#[derive(Clone,Debug)]
pub enum FmECGSpecies{
SpPACER
SpGLOBALMEASURE
SpLEADMEASURE
SpSTATUS
SpRHYTHMREPORT
SpAUTOREPORT
SpMISCELLANEOUS
SpSTANDARD
SpSETTINGS
SpSELECTOR
}
impl ObjectSpecies for FmECGSpecies{}
#[derive(Getters,Builder,Clone)]
pub struct CECGDPacer{
CWaveSamplePacer:OBJECT,
CWaveDPacer:OBJECT,
CWaveCPacer:OBJECT,
}
impl Object for CECGDPacer{
fn get_family(&self) -> datatypes::Family { datatypes::Family::FmECG }
fn get_genus(&self) -> datatypes::Genus { datatypes::Genus::GnDATA }
fn get_species(&self) -> Box<dyn super::ObjectSpecies> { Box::new(FmECGSpecies:CECGDPacer) }
fn get_raw_object(&self) -> RawObject { self.raw_object.clone() }
}
#[derive(Getters,Builder,Clone)]
pub struct CECGDGlobalMeas{
PDuration:uint32,
PQDuration:uint32,
QRSDuration:uint32,
QTDuration:uint32,
QTcDuration:uint32,
QTdDuration:uint32,
PAxis:uint32,
QRSAxis:uint32,
TAxis:uint32,
HeartRate:uint32,
POnset:uint32,
POffset:uint32,
QRSOnset:uint32,
QRSOffset:uint32,
TOffset:uint32,
}
impl Object for CECGDGlobalMeas{
fn get_family(&self) -> datatypes::Family { datatypes::Family::FmECG }
fn get_genus(&self) -> datatypes::Genus { datatypes::Genus::GnDATA }
fn get_species(&self) -> Box<dyn super::ObjectSpecies> { Box::new(FmECGSpecies:CECGDGlobalMeas) }
fn get_raw_object(&self) -> RawObject { self.raw_object.clone() }
}
#[derive(Getters,Builder,Clone)]
pub struct CECGDLeadMeas{
LeadIdentifier:uint16,
PposAmp:int32,
PnegAmp:int32,
QDuration:int32,
QAmp:int32,
RDuration:int32,
RAmp:int32,
SDuration:int32,
SAmp:int32,
RAccDuration:int32,
RAccAmp:int32,
SAccDuration:int32,
SAccAmp:int32,
IDuration:int32,
ST0:int32,
ST20:int32,
ST40:int32,
ST60:int32,
ST80:int32,
TposAmp:int32,
TnegAmp:int32,
R2AccDuration:int32,
R2AccAmp:int32,
S2AccDuration:int32,
S2AccAmp:int32,
KDuration:int32,
EndT:int32,
QrsType:widechar,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum LeadIdentifier{
#[default]
I,
II,
III,
AVR,
AVL,
AVF,
V1,
V2,
V3,
V4,
V5,
V6,
V7,
V3R,
V5R,
X,
Y,
Z,
V4R,
V6R,
V8,
V9,
NONE,
}
impl Object for CECGDLeadMeas{
fn get_family(&self) -> datatypes::Family { datatypes::Family::FmECG }
fn get_genus(&self) -> datatypes::Genus { datatypes::Genus::GnDATA }
fn get_species(&self) -> Box<dyn super::ObjectSpecies> { Box::new(FmECGSpecies:CECGDLeadMeas) }
fn get_raw_object(&self) -> RawObject { self.raw_object.clone() }
}
#[derive(Getters,Builder,Clone)]
pub struct CECGDStatus{
ElectrodeOffStatus:uint32,
ArrhythmiaStatus:byte,
ActiveLeads:uint32,
Container:OBJECT,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum ElectrodeOffStatus{
#[default]
ELECTRODE_RL,
ELECTRODE_LL,
ELECTRODE_RA,
ELECTRODE_LA,
ELECTRODE_V,
ELECTRODE_V1,
ELECTRODE_V2,
ELECTRODE_V3,
ELECTRODE_V4,
ELECTRODE_V5,
ELECTRODE_V6,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum ActiveLeads{
#[default]
ECG_I,
ECG_II,
ECG_III,
ECG_aVR,
ECG_aVL,
ECG_aVF,
ECG_V,
ECG_V1,
ECG_V2,
ECG_V3,
ECG_V4,
ECG_V5,
ECG_V6,
}
impl Object for CECGDStatus{
fn get_family(&self) -> datatypes::Family { datatypes::Family::FmECG }
fn get_genus(&self) -> datatypes::Genus { datatypes::Genus::GnDATA }
fn get_species(&self) -> Box<dyn super::ObjectSpecies> { Box::new(FmECGSpecies:CECGDStatus) }
fn get_raw_object(&self) -> RawObject { self.raw_object.clone() }
}
#[derive(Getters,Builder,Clone)]
pub struct CECGCRhythmReport{
LeadArrangement:uint16,
DefSpeedSetting:uint16,
StdLeadOrder:uint8,
AugLeadOrder:uint8,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum LeadArrangement{
#[default]
3LEAD,
6LEAD,
12LEAD,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum DefSpeedSetting{
#[default]
10mm_s,
25mm_s,
50mm_s,
}
impl Object for CECGCRhythmReport{
fn get_family(&self) -> datatypes::Family { datatypes::Family::FmECG }
fn get_genus(&self) -> datatypes::Genus { datatypes::Genus::GnCONFIG }
fn get_species(&self) -> Box<dyn super::ObjectSpecies> { Box::new(FmECGSpecies:CECGCRhythmReport) }
fn get_raw_object(&self) -> RawObject { self.raw_object.clone() }
}
#[derive(Getters,Builder,Clone)]
pub struct CECGCAutoReport{
ExtMeasurements:boolean,
Interp:boolean,
CopiesWithInt:boolean,
UnconfReport:boolean,
AbnormalEcg:boolean,
FName:boolean,
SLName:boolean,
MI:boolean,
Wt:boolean,
Ht:boolean,
Gender:boolean,
Race:boolean,
Med:boolean,
ClinicalHist:boolean,
BP:boolean,
Comments:boolean,
CustDef1:boolean,
CustDef2:boolean,
ReasonStatementsEnabled:boolean,
AgeFormat:uint16,
LeadArrangement:uint16,
RhythLd1:uint16,
RhythLd2:uint16,
RhythLd3:uint16,
AvgCycle:uint16,
Copies:uint16,
CustDef1Lbl:widechar,
CustDef2Lbl:widechar,
Physician:boolean,
Technician:boolean,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum AgeFormat{
#[default]
DOB,
AGE,
OFF,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum LeadArrangement{
#[default]
3X4,
3X4_1R,
3X4_3R,
6X2,
12X1,
6X2_50mm,
6X2_ext,
2X6_1R,
NOPRINT,
6X2_1R,
2X6,
3x4_25mm_5sec,
3x4_50mm,
3x4_50mm_5sec,
6x2_25mm,
6x2_50mm_5sec,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum RhythLd1{
#[default]
I,
II,
III,
AVR,
AVL,
AVF,
V1,
V2,
V3,
V4,
V5,
V6,
OFF,
V7,
V3R,
V5R,
X,
Y,
Z,
V4R,
V6R,
V8,
V9,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum RhythLd2{
#[default]
I,
II,
III,
AVR,
AVL,
AVF,
V1,
V2,
V3,
V4,
V5,
V6,
OFF,
V7,
V3R,
V5R,
X,
Y,
Z,
V4R,
V6R,
V8,
V9,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum RhythLd3{
#[default]
I,
II,
III,
AVR,
AVL,
AVF,
V1,
V2,
V3,
V4,
V5,
V6,
OFF,
V7,
V3R,
V5R,
X,
Y,
Z,
V4R,
V6R,
V8,
V9,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum AvgCycle{
#[default]
3x4_3R,
6x2_6R,
NOPRINT,
3x4_2R_25mm,
3x4_2R,
3x4_3R_25mm,
2x6_1R_25mm,
2x6_1R,
6x2_2R,
6x2_1R_25mm,
6x2_1R,
}
impl Object for CECGCAutoReport{
fn get_family(&self) -> datatypes::Family { datatypes::Family::FmECG }
fn get_genus(&self) -> datatypes::Genus { datatypes::Genus::GnCONFIG }
fn get_species(&self) -> Box<dyn super::ObjectSpecies> { Box::new(FmECGSpecies:CECGCAutoReport) }
fn get_raw_object(&self) -> RawObject { self.raw_object.clone() }
}
#[derive(Getters,Builder,Clone)]
pub struct CECGCMiscellaneous{
LeadConfig:uint16,
Mains:uint16,
AutoExport:uint16,
ElectrodeLbl:uint16,
LeadTiming:uint16,
DefGainSetting:uint16,
DefMuscleFilter:boolean,
DefBaselineFilter:boolean,
BaselineCenter:boolean,
Autosave:boolean,
AutoReport2:boolean,
PrintArtifactReport:boolean,
ElectrodePlacement:uint16,
QTcMethod:uint16,
SaveReminder:boolean,
DisableMains:boolean,
ECGAutoPrint:boolean,
ECGSetPatientDemographic:boolean,
RemoteFolderPath:widechar,
QRSTone:uint16,
PrintLabel:uint16,
PacerLead:uint16,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum LeadConfig{
#[default]
STANDARD,
CABRERA,
NEHB,
FRANK,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum Mains{
#[default]
OFF,
50HZ,
60HZ,
AUTO,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum AutoExport{
#[default]
OFF,
MEDIACARD,
FAA,
FAX,
WORKSTATION,
REMOTE,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum ElectrodeLbl{
#[default]
AHA,
IEC,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum LeadTiming{
#[default]
SIMOULTANEOUS,
SEQUENTIAL,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum DefGainSetting{
#[default]
5mm_mv,
10mm_mv,
20mm_mv,
AUTO,
2mm5_mv,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum ElectrodePlacement{
#[default]
STANDARD,
ALTERNATE,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum QTcMethod{
#[default]
BAZETT,
HODGES,
FRIDERICIA,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum QRSTone{
#[default]
NONE,
FREQ_1KHZ,
FREQ_2KHZ,
FREQ_2K67HZ,
FREQ_3K2HZ,
FREQ_4KHZ,
FREQ_5K3HZ,
FREQ_6K4HZ,
FREQ_8KHZ,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum PrintLabel{
#[default]
NONE,
PR,
PQ,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum PacerLead{
#[default]
NONE,
I,
II,
V1,
V2,
V3,
V4,
V5,
V6,
V7,
V8,
V9,
V3R,
V4R,
V5R,
V6R,
}
impl Object for CECGCMiscellaneous{
fn get_family(&self) -> datatypes::Family { datatypes::Family::FmECG }
fn get_genus(&self) -> datatypes::Genus { datatypes::Genus::GnCONFIG }
fn get_species(&self) -> Box<dyn super::ObjectSpecies> { Box::new(FmECGSpecies:CECGCMiscellaneous) }
fn get_raw_object(&self) -> RawObject { self.raw_object.clone() }
}
#[derive(Getters,Builder,Clone)]
pub struct CECGCSettings{
ActiveLeads:uint32,
MainsFilter:uint8,
PacerEnabled:boolean,
LeadMode:uint8,
VTachThreshold:uint8,
ImpedanceRespiration:boolean,
AsystoleThreshold:uint16,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum ActiveLeads{
#[default]
ECG_I,
ECG_II,
ECG_III,
ECG_aVR,
ECG_aVL,
ECG_aVF,
ECG_V,
ECG_V1,
ECG_V2,
ECG_V3,
ECG_V4,
ECG_V5,
ECG_V6,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum MainsFilter{
#[default]
NONE,
OFF,
50HZ,
60HZ,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum LeadMode{
#[default]
NONE,
UNKNOWN,
3_LEAD,
5_LEAD,
}
impl Object for CECGCSettings{
fn get_family(&self) -> datatypes::Family { datatypes::Family::FmECG }
fn get_genus(&self) -> datatypes::Genus { datatypes::Genus::GnCONFIG }
fn get_species(&self) -> Box<dyn super::ObjectSpecies> { Box::new(FmECGSpecies:CECGCSettings) }
fn get_raw_object(&self) -> RawObject { self.raw_object.clone() }
}
#[derive(Getters,Builder,Clone)]
pub struct CECGPSelector{
SpeciesSelector:uint32,
}
impl Object for CECGPSelector{
fn get_family(&self) -> datatypes::Family { datatypes::Family::FmECG }
fn get_genus(&self) -> datatypes::Genus { datatypes::Genus::GnPARAMETER }
fn get_species(&self) -> Box<dyn super::ObjectSpecies> { Box::new(FmECGSpecies:CECGPSelector) }
fn get_raw_object(&self) -> RawObject { self.raw_object.clone() }
}

52
FmNIBP_members.rs Normal file
View file

@ -0,0 +1,52 @@
use super::MessageSpecies;
pub enum FmNIBPMessage{
GET_BP, //Request 0
GET_CONFIG, //Request 1
GET_STATUS, //Request 2
GET_CALIBRATION, //Request 3
GET_BP_SETTINGS, //Request 4
GET_CHUNK, //Request 5
GET_CHUNK_SIZE, //Request 6
GET_MAX_CHUNK_ID, //Request 7
GET_HARDWARE_STATE, //Request 8
GET_TEST_LOCK, //Request 9
GET_RAW_DATA, //Request 10
GET_PRESSURE_DATA, //Request 11
PUT_BP, //Response 0
PUT_CONFIG, //Response 1
PUT_STATUS, //Response 2
PUT_CALIBRATION, //Response 3
PUT_BP_SETTINGS, //Response 4
PUT_CHUNK, //Response 5
PUT_CHUNK_SIZE, //Response 6
PUT_MAX_CHUNK_ID, //Response 7
PUT_HARDWARE_STATE, //Response 8
PUT_TEST_LOCK, //Response 9
PUT_RAW_DATA, //Response 10
PUT_PRESSURE_DATA, //Response 11
START_NIBP, //Command 0
STOP_NIBP, //Command 1
WRITE_CONFIG, //Command 2
ZERO_NIBP, //Command 3
MSG_PUSH_ENABLE, //Command 4
CLEAR_SAFTEY_STATUS, //Command 5
CLEAR_POST_STATUS, //Command 6
RESET_DEVICE, //Command 7
SET_CALIBRATION, //Command 8
SAVE_CALIBRATION, //Command 9
LOAD_CALIBRATION, //Command 10
RESTORE_DFLT_CALIBRATION, //Command 11
SET_BP_SETTINGS, //Command 12
SAVE_BP_SETTINGS, //Command 13
LOAD_BP_SETTINGS, //Command 14
RESTORE_DFLT_SETTINGS, //Command 15
SET_HARDWARE_STATE, //Command 16
PULSE_STEP_VALVE, //Command 17
SET_TEST_LOCK, //Command 18
REPORT_BP, //Status 0
REPORT_BP, //Stream 0
REPORT_STATUS, //Stream 1
}
impl MessageSpecies for FmNIBPMessage{}

608
FmNIBP_objects.rs Normal file
View file

@ -0,0 +1,608 @@
use crate::datatypes;
use super::{Object, ObjectSpecies, RawObject};
use derive_getters::Getters;
use derive_builder::Builder;
#[derive(Clone,Debug)]
pub enum FmNIBPSpecies{
SpSTANDARD,
SpDATA,
SpENGCHUNK,
SpEVENTCHUNK,
SpHARDWARESTATE,
SpLOCK,
SpRAWDATA,
SpPRESSUREDATA,
SpSTATUS,
SpDATAMODIFIED,
SpCALIBRATION,
SpSELECTOR,
SpCHUNK_SELECTOR,
}
impl ObjectSpecies for FmNIBPSpecies{}
#[derive(Getters,Builder,Clone)]
pub struct CNIBPDStd{
STime:TIME,
Status:uint16,
Systolic:int16,
Diastolic:int16,
MAP:int16,
HR:uint16,
ExtStatus:uint16,
Source:uint16,
Mode:uint8,
Method:uint8,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum Status{
#[default]
DATA_NOT_AVAIL,
DATA_COMPLETE,
DATA_FAILURE,
DATA_EXCEPTION,
DATA_PROCESSING,
#[getter(skip)]
raw_object:RawObject,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum ExtStatus{
#[default]
NONE,
#[getter(skip)]
raw_object:RawObject,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum Source{
#[default]
NONE,
UNKNOWN,
CVSM,
MODB,
MODF,
POEM,
MODG,
#[getter(skip)]
raw_object:RawObject,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum Mode{
#[default]
NONE,
UNKNOWN,
ADULT,
NEONATAL,
PEDIATRIC,
#[getter(skip)]
raw_object:RawObject,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum Method{
#[default]
NONE,
UNKNOWN,
MANUAL,
DEVICE,
REMOTE,
FAST_BP,
STEP_BP,
NEONATAL_STEP_BP,
LINEAR_DEFLATION_BP,
AVERAGE_BP,
#[getter(skip)]
raw_object:RawObject,
}
impl Object for CNIBPDStd{
fn get_family(&self) -> datatypes::Family { datatypes::Family::FmNIBP }
fn get_genus(&self) -> datatypes::Genus { datatypes::Genus::GnDATA }
fn get_species(&self) -> Box<dyn super::ObjectSpecies> { Box::new(FmNIBPSpecies:CNIBPDStd) }
fn get_raw_object(&self) -> RawObject { self.raw_object.clone() }
}
#[derive(Getters,Builder,Clone)]
pub struct CNIBPDData{
Status:int16,
Systolic:OBJECT::CNumDStd,
Diastolic:OBJECT::CNumDStd,
MAP:OBJECT::CNumDStd,
PR:OBJECT::CNumDStd,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum Status{
#[default]
RD_OK,
RD_ABORT,
RD_NOT_AVAIL,
RD_SPLAT,
RD_ARTIFACT,
RD_LOW_INFLAT,
RD_KINKED_TUBE,
RD_EARLY_DUMP,
RD_NOT_ENOUGH_DATA,
RD_PATIENT_INVALID,
RD_REINF_TOO_LATE,
RD_REINF_LIMIT,
RD_BLEED,
RD_LEAK,
RD_SAFETY_FAULT,
RD_ZERO_FAULT,
#[getter(skip)]
raw_object:RawObject,
}
impl Object for CNIBPDData{
fn get_family(&self) -> datatypes::Family { datatypes::Family::FmNIBP }
fn get_genus(&self) -> datatypes::Genus { datatypes::Genus::GnDATA }
fn get_species(&self) -> Box<dyn super::ObjectSpecies> { Box::new(FmNIBPSpecies:CNIBPDData) }
fn get_raw_object(&self) -> RawObject { self.raw_object.clone() }
}
#[derive(Getters,Builder,Clone)]
pub struct CNIBPDChunk{
tag:int8,
chunkId:uint16,
chunkIndex:uint16,
chunkData:uint8,
}
impl Object for CNIBPDChunk{
fn get_family(&self) -> datatypes::Family { datatypes::Family::FmNIBP }
fn get_genus(&self) -> datatypes::Genus { datatypes::Genus::GnDATA }
fn get_species(&self) -> Box<dyn super::ObjectSpecies> { Box::new(FmNIBPSpecies:CNIBPDChunk) }
fn get_raw_object(&self) -> RawObject { self.raw_object.clone() }
}
#[derive(Getters,Builder,Clone)]
pub struct CNIBPDHState{
hardware:int16,
state:int16,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum hardware{
#[default]
PRIM_VALVE,
SEC_VALVE,
PUMP,
#[getter(skip)]
raw_object:RawObject,
}
impl Object for CNIBPDHState{
fn get_family(&self) -> datatypes::Family { datatypes::Family::FmNIBP }
fn get_genus(&self) -> datatypes::Genus { datatypes::Genus::GnDATA }
fn get_species(&self) -> Box<dyn super::ObjectSpecies> { Box::new(FmNIBPSpecies:CNIBPDHState) }
fn get_raw_object(&self) -> RawObject { self.raw_object.clone() }
}
#[derive(Getters,Builder,Clone)]
pub struct CNIBPDLock{
lock:int16,
state:int8,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum lock{
#[default]
AMB_TEMP_CHECK,
PRIM_SAFETY_CHECK,
SAFE_SAFETY_CHECK,
SINGLE_LUMEN_CHECK,
AD_CHANNEL,
FAILSAFE_TEST_MODE,
#[getter(skip)]
raw_object:RawObject,
}
impl Object for CNIBPDLock{
fn get_family(&self) -> datatypes::Family { datatypes::Family::FmNIBP }
fn get_genus(&self) -> datatypes::Genus { datatypes::Genus::GnDATA }
fn get_species(&self) -> Box<dyn super::ObjectSpecies> { Box::new(FmNIBPSpecies:CNIBPDLock) }
fn get_raw_object(&self) -> RawObject { self.raw_object.clone() }
}
#[derive(Getters,Builder,Clone)]
pub struct CNIBPDRData{
raw5V:uint32,
raw1V:uint32,
raw2V:uint32,
raw4V:uint32,
rawBat:int16,
rawAmbTemp:uint32,
rawPrimTrans:uint32,
rawSecTrans:int16,
rawSecBat:int16,
rawSecCorr:int16,
}
impl Object for CNIBPDRData{
fn get_family(&self) -> datatypes::Family { datatypes::Family::FmNIBP }
fn get_genus(&self) -> datatypes::Genus { datatypes::Genus::GnDATA }
fn get_species(&self) -> Box<dyn super::ObjectSpecies> { Box::new(FmNIBPSpecies:CNIBPDRData) }
fn get_raw_object(&self) -> RawObject { self.raw_object.clone() }
}
#[derive(Getters,Builder,Clone)]
pub struct CNIBPDPData{
primPress:int16,
primPressNoise:int16,
primAzeroOffset:int16,
secPress:int16,
secPressNoise:int16,
secAzeroOffset:int16,
}
impl Object for CNIBPDPData{
fn get_family(&self) -> datatypes::Family { datatypes::Family::FmNIBP }
fn get_genus(&self) -> datatypes::Genus { datatypes::Genus::GnDATA }
fn get_species(&self) -> Box<dyn super::ObjectSpecies> { Box::new(FmNIBPSpecies:CNIBPDPData) }
fn get_raw_object(&self) -> RawObject { self.raw_object.clone() }
}
#[derive(Getters,Builder,Clone)]
pub struct CNIBPDStatus{
moduleState:uint16,
error:uint16,
hardwareStates:uint16,
safetyStates:uint16,
cuffPressure:int16,
batVoltage:int16,
ambTemp:int16,
statusType:int16,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum moduleState{
#[default]
IDLE,
AUTOZERO,
INFLATING,
STABILIZING,
BLEEDING,
DUMPING,
REPUMP,
ERROR,
BOOT,
POST,
#[getter(skip)]
raw_object:RawObject,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum safetyStates{
#[default]
belowResidual,
longAutoTimerClear,
statAutoTimerClear,
failsafeFault,
autoZeroFault,
transducerFault,
#[getter(skip)]
raw_object:RawObject,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum statusType{
#[default]
NONE,
PRIMARY,
SECONDARY,
#[getter(skip)]
raw_object:RawObject,
}
impl Object for CNIBPDStatus{
fn get_family(&self) -> datatypes::Family { datatypes::Family::FmNIBP }
fn get_genus(&self) -> datatypes::Genus { datatypes::Genus::GnDATA }
fn get_species(&self) -> Box<dyn super::ObjectSpecies> { Box::new(FmNIBPSpecies:CNIBPDStatus) }
fn get_raw_object(&self) -> RawObject { self.raw_object.clone() }
}
#[derive(Getters,Builder,Clone)]
pub struct CNIBPDDataModified{
NIBPData:OBJECT::CNIBPDData,
Status:uint16,
STime:TIME,
Mode:uint8,
PatientPosition:uint16,
CuffSize:uint16,
CuffLocation:uint16,
Source:uint16,
Method:uint8,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum Status{
#[default]
DATA_NOT_AVAIL,
DATA_COMPLETE,
DATA_FAILURE,
DATA_EXCEPTION,
DATA_PROCESSING,
#[getter(skip)]
raw_object:RawObject,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum Mode{
#[default]
NONE,
UNKNOWN,
ADULT,
NEONATAL,
PEDIATRIC,
#[getter(skip)]
raw_object:RawObject,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum PatientPosition{
#[default]
NONE,
UNKNOWN,
LYING,
SITTING,
STANDING,
#[getter(skip)]
raw_object:RawObject,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum CuffSize{
#[default]
NONE,
UNKNOWN,
NEONATAL_1,
NEONATAL_2,
NEONATAL_3,
NEONATAL_4,
NEONATAL_5,
SMALL_INFANT,
INFANT,
SMALL_CHILD,
CHILD,
SMALL_ADULT,
ADULT,
ADULT_LONG,
LARGE_ADULT,
LARGE_ADULT_LONG,
THIGH,
#[getter(skip)]
raw_object:RawObject,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum CuffLocation{
#[default]
NONE,
UNKNOWN,
LEFT_ARM,
RIGHT_ARM,
LEFT_LEG,
RIGHT_LEG,
#[getter(skip)]
raw_object:RawObject,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum Source{
#[default]
NONE,
UNKNOWN,
CVSM,
MODB,
MODF,
POEM,
MODG,
#[getter(skip)]
raw_object:RawObject,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum Method{
#[default]
NONE,
UNKNOWN,
MANUAL,
DEVICE,
REMOTE,
FAST_BP,
STEP_BP,
NEONATAL_STEP_BP,
LINEAR_DEFLATION_BP,
AVERAGE_BP,
#[getter(skip)]
raw_object:RawObject,
}
impl Object for CNIBPDDataModified{
fn get_family(&self) -> datatypes::Family { datatypes::Family::FmNIBP }
fn get_genus(&self) -> datatypes::Genus { datatypes::Genus::GnDATA }
fn get_species(&self) -> Box<dyn super::ObjectSpecies> { Box::new(FmNIBPSpecies:CNIBPDDataModified) }
fn get_raw_object(&self) -> RawObject { self.raw_object.clone() }
}
#[derive(Getters,Builder,Clone)]
pub struct CNIBPCStd{
DisplayUnits:uint16,
MAPDisplay:boolean,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum DisplayUnits{
#[default]
NIBP_MMHG,
NIBP_KPA,
#[getter(skip)]
raw_object:RawObject,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum MAPDisplay{
#[default]
DISABLE,
ENABLE,
#[getter(skip)]
raw_object:RawObject,
}
impl Object for CNIBPCStd{
fn get_family(&self) -> datatypes::Family { datatypes::Family::FmNIBP }
fn get_genus(&self) -> datatypes::Genus { datatypes::Genus::GnCONFIG }
fn get_species(&self) -> Box<dyn super::ObjectSpecies> { Box::new(FmNIBPSpecies:CNIBPCStd) }
fn get_raw_object(&self) -> RawObject { self.raw_object.clone() }
}
#[derive(Getters,Builder,Clone)]
pub struct CNIBPCData{
dfltAdultTargPress:int16,
dfltPedTargPress:int16,
dfltNeoTargPress:int16,
pedMaxPressLimit:int16,
residualMaxPressLimit:int16,
dfltPatientMode:int8,
dfltAdultAlg:int8,
dfltPedAlg:int8,
dfltNeoAlg:int8,
SAOEnabled:boolean,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum dfltPatientMode{
#[default]
ADULT,
PEDIATRIC,
NEONATE,
#[getter(skip)]
raw_object:RawObject,
}
impl Object for CNIBPCData{
fn get_family(&self) -> datatypes::Family { datatypes::Family::FmNIBP }
fn get_genus(&self) -> datatypes::Genus { datatypes::Genus::GnCONFIG }
fn get_species(&self) -> Box<dyn super::ObjectSpecies> { Box::new(FmNIBPSpecies:CNIBPCData) }
fn get_raw_object(&self) -> RawObject { self.raw_object.clone() }
}
#[derive(Getters,Builder,Clone)]
pub struct CNIBPCCal{
calType:uint8,
calSignature:int32,
calDateTime:TIME,
modConfig:int16,
spanCorr:int16,
zeroCorr:int16,
battCal:int16,
tempCal:int16,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum calType{
#[default]
NONE,
PRIMARY,
SECONDARY,
#[getter(skip)]
raw_object:RawObject,
}
impl Object for CNIBPCCal{
fn get_family(&self) -> datatypes::Family { datatypes::Family::FmNIBP }
fn get_genus(&self) -> datatypes::Genus { datatypes::Genus::GnCONFIG }
fn get_species(&self) -> Box<dyn super::ObjectSpecies> { Box::new(FmNIBPSpecies:CNIBPCCal) }
fn get_raw_object(&self) -> RawObject { self.raw_object.clone() }
}
#[derive(Getters,Builder,Clone)]
pub struct CNIBPPData{
targPress:int16,
patientMode:int8,
cycleMode:int8,
algorithm:int8,
disableNeoCheck:int8,
firstReading:boolean,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum patientMode{
#[default]
DEFAULT,
ADULT,
PEDIATRIC,
NEONATE,
#[getter(skip)]
raw_object:RawObject,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum cycleMode{
#[default]
MANUAL,
LONG_AUTO,
STAT,
#[getter(skip)]
raw_object:RawObject,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum algorithm{
#[default]
DEFAULT,
FAST_BP,
STEP_BP,
NEO_BP,
#[getter(skip)]
raw_object:RawObject,
}
impl Object for CNIBPPData{
fn get_family(&self) -> datatypes::Family { datatypes::Family::FmNIBP }
fn get_genus(&self) -> datatypes::Genus { datatypes::Genus::GnPARAMETER }
fn get_species(&self) -> Box<dyn super::ObjectSpecies> { Box::new(FmNIBPSpecies:CNIBPPData) }
fn get_raw_object(&self) -> RawObject { self.raw_object.clone() }
}
#[derive(Getters,Builder,Clone)]
pub struct CNIBPPSelector{
Value:uint32,
}
impl Object for CNIBPPSelector{
fn get_family(&self) -> datatypes::Family { datatypes::Family::FmNIBP }
fn get_genus(&self) -> datatypes::Genus { datatypes::Genus::GnPARAMETER }
fn get_species(&self) -> Box<dyn super::ObjectSpecies> { Box::new(FmNIBPSpecies:CNIBPPSelector) }
fn get_raw_object(&self) -> RawObject { self.raw_object.clone() }
}
#[derive(Getters,Builder,Clone)]
pub struct CNIBPPChunkSelector{
chunk:uint32,
index:uint32,
}
impl Object for CNIBPPChunkSelector{
fn get_family(&self) -> datatypes::Family { datatypes::Family::FmNIBP }
fn get_genus(&self) -> datatypes::Genus { datatypes::Genus::GnPARAMETER }
fn get_species(&self) -> Box<dyn super::ObjectSpecies> { Box::new(FmNIBPSpecies:CNIBPPChunkSelector) }
fn get_raw_object(&self) -> RawObject { self.raw_object.clone() }
}
#[derive(Getters,Builder,Clone)]
pub struct CNIBPDExtStd{
Container:OBJECT::ANY_CLASS,
}
impl Object for CNIBPDExtStd{
fn get_family(&self) -> datatypes::Family { datatypes::Family::FmNIBP }
fn get_genus(&self) -> datatypes::Genus { datatypes::Genus::GnDATAEXT }
fn get_species(&self) -> Box<dyn super::ObjectSpecies> { Box::new(FmNIBPSpecies:CNIBPDExtStd) }
fn get_raw_object(&self) -> RawObject { self.raw_object.clone() }
}

15
FmSPO2_members.rs Normal file
View file

@ -0,0 +1,15 @@
use super::MessageSpecies;
pub enum FmSPO2Message{
GET_SPO2, //Request 0
GET_CONFIG, //Request 1
PUT_SPO2, //Response 0
PUT_CONFIG, //Response 1
WRITE_CONFIG, //Command 0
START_ACQUIRE, //Command 1
STOP_ACQUIRE, //Command 2
REPORT_SPO2, //Status 0
STREAM_SPO2, //Stream 0
}
impl MessageSpecies for FmSPO2Message{}

336
FmSPO2_objects.rs Normal file
View file

@ -0,0 +1,336 @@
use crate::datatypes;
use super::{Object, ObjectSpecies, RawObject};
use derive_getters::Getters;
use derive_builder::Builder;
#[derive(Clone,Debug)]
pub enum FmSPO2Species{
SpSTANDARD
SpDATA
SpDATAMODIFIED
SpSELECTOR
}
impl ObjectSpecies for FmSPO2Species{}
#[derive(Getters,Builder,Clone)]
pub struct CSpO2DStd{
STime:TIME,
Status:uint16,
Sat:uint16,
HR:uint16,
ExtStatus:uint16,
Source:uint16,
Mode:uint8,
Method:uint8,
}
#[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,
}
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<dyn super::ObjectSpecies> { Box::new(FmSPO2Species:CSpO2DStd) }
fn get_raw_object(&self) -> RawObject { self.raw_object.clone() }
}
#[derive(Getters,Builder,Clone)]
pub struct CSpO2DData{
STime:TIME,
ExtStatus:uint16,
Source:uint16,
Sat:OBJECT,
HR:OBJECT,
PI:OBJECT,
Status:uint16,
ElapsedSatSeconds:OBJECT,
TotalSatSeconds:OBJECT,
SatConfidence:OBJECT,
HRConfidence:OBJECT,
PIConfidence:OBJECT,
PVIConfidence:OBJECT,
PVI:OBJECT,
Mode:uint8,
Method:uint8,
}
#[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,
}
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<dyn super::ObjectSpecies> { Box::new(FmSPO2Species:CSpO2DData) }
fn get_raw_object(&self) -> RawObject { self.raw_object.clone() }
}
#[derive(Getters,Builder,Clone)]
pub struct CSpO2DDataModified{
SpO2Data:OBJECT,
O2FlowRate:uint8,
O2Concentration:uint8,
O2Method:uint8,
Location:uint8,
}
#[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,
}
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<dyn super::ObjectSpecies> { Box::new(FmSPO2Species:CSpO2DDataModified) }
fn get_raw_object(&self) -> RawObject { self.raw_object.clone() }
}
#[derive(Getters,Builder,Clone)]
pub struct CSpO2CStd{
Enabled:boolean,
InstalledModule:uint16,
}
#[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,
}
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<dyn super::ObjectSpecies> { Box::new(FmSPO2Species:CSpO2CStd) }
fn get_raw_object(&self) -> RawObject { self.raw_object.clone() }
}
#[derive(Getters,Builder,Clone)]
pub struct CSpO2CData{
SatExponent:int8,
PIExponent:int8,
SatAlarms:OBJECT,
HRAlarms:OBJECT,
FastSat:uint8,
Sensitivity:uint8,
AveragingTime:uint8,
SatSecondsLimit:uint8,
SmartTone:uint8,
PVIExponent:int8,
}
#[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,
}
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<dyn super::ObjectSpecies> { Box::new(FmSPO2Species:CSpO2CData) }
fn get_raw_object(&self) -> RawObject { self.raw_object.clone() }
}
#[derive(Getters,Builder,Clone)]
pub struct CSpO2PSelector{
Value:uint32,
}
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<dyn super::ObjectSpecies> { Box::new(FmSPO2Species:CSpO2PSelector) }
fn get_raw_object(&self) -> RawObject { self.raw_object.clone() }
}

1
FmTEMP_family.rs Normal file

File diff suppressed because one or more lines are too long

59
FmTEMP_members.rs Normal file
View file

@ -0,0 +1,59 @@
use super::MessageSpecies;
pub enum FmTEMPMessage{
GET_TEMP, //Request 0
GET_CONFIG, //Request 1
GET_ENG_STATUS, //Request 2
STATUS, //Request 3
GET_PROBE_INFO, //Request 4
GET_CALIBRATION, //Request 5
GET_SETTINGS, //Request 6
GET_HARDWARE_STATE, //Request 7
GET_TEST_LOCK, //Request 8
GET_RAW_DATA, //Request 9
GET_SAMPLE, //Request 10
GET_TOUCH, //Request 11
GET_THERM, //Request 12
GET_THERMOMETER_SETTINGS, //Request 13
PUT_TEMP, //Response 0
PUT_CONFIG, //Response 1
PUT_ENG_STATUS, //Response 2
PUT_STATUS, //Response 3
PUT_PROBE_INFO, //Response 4
PUT_CALIBRATION, //Response 5
PUT_SETTINGS, //Response 6
PUT_HARDWARE_STATE, //Response 7
PUT_TEST_LOCK, //Response 8
PUT_RAW_DATA, //Response 9
PUT_SAMPLE, //Response 10
PUT_TOUCH, //Response 11
PUT_THERM, //Response 12
PUT_THERMOMETER_SETTINGS, //Response 13
WRITE_CONFIG, //Command 0
MSG_PUSH_ENABLE, //Command 1
MSG_SET_ALG, //Command 2
MSG_SET_MODE, //Command 3
RESET_DEVICE, //Command 4
SET_CALIBRATION, //Command 5
SAVE_CALIBRATION, //Command 6
LOAD_CALIBRATION, //Command 7
RESTORE_DFLT_CALIBRATION, //Command 8
SET_SETTINGS, //Command 9
SAVE_SETTINGS, //Command 10
LOAD_SETTINGS, //Command 11
RESTORE_DFLT_SETTINGS, //Command 12
SET_HARDWARE_STATE, //Command 13
SET_TEST_LOCK, //Command 14
SET_THERM, //Command 15
START_ACQUIRE, //Command 16
STOP_ACQUIRE, //Command 17
WRITE_THERMOMETER_SETTINGS, //Command 18
REPORT_TEMPERATURE, //Status 0
REPORT_ENG_STATUS, //Stream 0
REPORT_STATUS, //Stream 1
REPORT_SAMPLE, //Stream 2
REPORT_TOUCH, //Stream 3
REPORT_THERM, //Stream 4
}
impl MessageSpecies for FmTEMPMessage{}

813
FmTEMP_objects.rs Normal file
View file

@ -0,0 +1,813 @@
use crate::datatypes;
use super::{Object, ObjectSpecies, RawObject};
use derive_getters::Getters;
use derive_builder::Builder;
#[derive(Clone,Debug)]
pub enum FmTEMPSpecies{
SpSTANDARD,
SpDATA,
SpENGDATA,
SpPROBEDATA,
SpHARDWARESTATE,
SpLOCK,
SpRAWDATA,
SpSTATUS,
SpADSAMPLEDATA,
SpTOUCHDATA,
SpTHERMDATA,
SpCALIBRATION,
SpMSG_ARGUMENTS,
SpSELECTOR,
}
impl ObjectSpecies for FmTEMPSpecies{}
#[derive(Getters,Builder,Clone)]
pub struct CTempDStd{
STime:TIME,
Status:uint16,
ExtStatus:uint16,
Source:uint16,
Mode:uint8,
Method:uint8,
Temperature:float,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum Status{
#[default]
DATA_NOT_AVAIL,
DATA_COMPLETE,
DATA_FAILURE,
DATA_EXCEPTION,
DATA_PROCESSING,
#[getter(skip)]
raw_object:RawObject,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum ExtStatus{
#[default]
NONE,
FINAL_POSITION,
FINAL_OVER_TEMP,
FINAL_OVER_TEMP_POSITION,
FINAL_UNDER_TEMP,
FINAL_UNDER_TEMP_POSITION,
MONITOR_POSITION,
MONITOR_OVER_TEMP,
MONITOR_OVER_TEMP_POSITION,
MONITOR_UNDER_TEMP,
MONITOR_UNDER_TEMP_POSITION,
CRC_FAILURE,
COMM_FAILURE,
FINAL_UNADJUSTED,
BUTTON_RANGE_ERROR,
AMB_RANGE_ERROR,
ENTRY_RANGE_ERROR,
TT_RANGE_ERROR,
TT_SLOPE_RANGE_ERROR,
OUTPUT_RANGE_ERROR,
CAP_STABILITY_ERROR,
CAP_ENTRY_ERROR,
PREMATURE_BUTTON_PRESS,
CALIBRATION,
UNADJUSTED_NO_OFFSETS,
#[getter(skip)]
raw_object:RawObject,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum Source{
#[default]
NONE,
UNKNOWN,
SURETEMP_SW,
SURETEMP,
SURETEMP_PLUS,
BRAUN_PRO4000,
BRAUN_PRO6000,
#[getter(skip)]
raw_object:RawObject,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum Mode{
#[default]
NONE,
UNKNOWN,
ORAL,
RECTAL,
PED_AXIL,
CAL_KEY,
ADULT_AXIL,
TYMPANIC,
#[getter(skip)]
raw_object:RawObject,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum Method{
#[default]
NONE,
UNKNOWN,
MANUAL,
DEVICE,
REMOTE,
PREDICT,
MONITOR,
IR,
BRAUN_CALC,
TECHNIQUE_COMPENSATION_CALC,
#[getter(skip)]
raw_object:RawObject,
}
impl Object for CTempDStd{
fn get_family(&self) -> datatypes::Family { datatypes::Family::FmTEMP }
fn get_genus(&self) -> datatypes::Genus { datatypes::Genus::GnDATA }
fn get_species(&self) -> Box<dyn super::ObjectSpecies> { Box::new(FmTEMPSpecies:CTempDStd) }
fn get_raw_object(&self) -> RawObject { self.raw_object.clone() }
}
#[derive(Getters,Builder,Clone)]
pub struct CTempDData{
STime:TIME,
Status:uint16,
ExtStatus:uint16,
Source:uint16,
Mode:uint8,
Method:uint8,
Temperature:OBJECT::CNumDFloat,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum Status{
#[default]
DATA_NOT_AVAIL,
DATA_COMPLETE,
DATA_FAILURE,
DATA_EXCEPTION,
DATA_PROCESSING,
#[getter(skip)]
raw_object:RawObject,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum ExtStatus{
#[default]
NONE,
FINAL_POSITION,
FINAL_OVER_TEMP,
FINAL_OVER_TEMP_POSITION,
FINAL_UNDER_TEMP,
FINAL_UNDER_TEMP_POSITION,
MONITOR_POSITION,
MONITOR_OVER_TEMP,
MONITOR_OVER_TEMP_POSITION,
MONITOR_UNDER_TEMP,
MONITOR_UNDER_TEMP_POSITION,
CRC_FAILURE,
COMM_FAILURE,
FINAL_UNADJUSTED,
BUTTON_RANGE_ERROR,
AMB_RANGE_ERROR,
ENTRY_RANGE_ERROR,
TT_RANGE_ERROR,
TT_SLOPE_RANGE_ERROR,
OUTPUT_RANGE_ERROR,
CAP_STABILITY_ERROR,
CAP_ENTRY_ERROR,
PREMATURE_BUTTON_PRESS,
CALIBRATION,
UNADJUSTED_NO_OFFSETS,
#[getter(skip)]
raw_object:RawObject,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum Source{
#[default]
NONE,
UNKNOWN,
SURETEMP_SW,
SURETEMP,
SURETEMP_PLUS,
BRAUN_PRO4000,
BRAUN_PRO6000,
#[getter(skip)]
raw_object:RawObject,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum Mode{
#[default]
NONE,
UNKNOWN,
ORAL,
RECTAL,
PED_AXIL,
CAL_KEY,
ADULT_AXIL,
TYMPANIC,
#[getter(skip)]
raw_object:RawObject,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum Method{
#[default]
NONE,
UNKNOWN,
MANUAL,
DEVICE,
REMOTE,
PREDICT,
MONITOR,
IR,
BRAUN_CALC,
TECHNIQUE_COMPENSATION_CALC,
#[getter(skip)]
raw_object:RawObject,
}
impl Object for CTempDData{
fn get_family(&self) -> datatypes::Family { datatypes::Family::FmTEMP }
fn get_genus(&self) -> datatypes::Genus { datatypes::Genus::GnDATA }
fn get_species(&self) -> Box<dyn super::ObjectSpecies> { Box::new(FmTEMPSpecies:CTempDData) }
fn get_raw_object(&self) -> RawObject { self.raw_object.clone() }
}
#[derive(Getters,Builder,Clone)]
pub struct CSTPTempDEng{
temp:float,
probe_temp:float,
heater:uint16,
reserved_1:uint16,
method:uint16,
algo:uint16,
status:uint16,
error:uint16,
active:uint8,
probe_type:uint16,
resistance:float,
ambient_temp:float,
ptb_resistance:float,
battery:uint16,
probe_temp_min:float,
probe_temp_max:float,
complete:uint8,
sample:uint32,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum method{
#[default]
PREDICT,
MONITOR,
CLINICAL,
#[getter(skip)]
raw_object:RawObject,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum algo{
#[default]
NONE,
ORAL_ALG,
PED_AX_ALG,
ADULT_AX_ALG,
RECTAL_ALG,
#[getter(skip)]
raw_object:RawObject,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum status{
#[default]
IDLE,
NOT_READY,
READY,
PREDICT,
PREDICT_DISPLAY,
PREDICT_POS,
FINAL,
FINAL_POS,
FINAL_OVER_TEMP,
FINAL_UNDER_TEMP,
FINAL_OVER_TEMP_POS,
FINAL_UNDER_TEMP_POS,
NO_PREDICT,
ERROR,
MONITOR,
#[getter(skip)]
raw_object:RawObject,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum error{
#[default]
NO_ERROR,
ERROR_ALG_PROBE_OVER_TEMP,
ERROR_ALG_EXCESSIVE_HTR_ENERGY,
ERROR_ALG_OVER_AMB_TEMP,
ERROR_ALG_UNDER_AMB_TEMP,
ERROR_ALG_NO_PROBE_TEMP_RISE,
ERROR_ALG_BAD_PROBE_GAIN,
ERROR_ALG_BAD_PROBE_RESP_VAL,
ERROR_HTR_ON_NOT_OFF,
ERROR_HTR_OFF_NOT_ON,
ERROR_HTR_VOLT_HIGH_Q,
ERROR_HTR_VOLT_Q_HIGH_IMP,
ERROR_HTR_VOLT_LOW,
ERROR_HTR_FAILSAFE,
ERROR_AD_PULSE_LONG,
ERROR_AD_PULSE_SHORT,
ERROR_AD_RCAL_LONG,
ERROR_AD_RCAL_SHORT,
ERROR_AD_PTB_OVER,
ERROR_AD_PTB_UNDER,
ERROR_AD_TIMEOUT,
ERROR_CFG_XFER,
ERROR_CFG_SET_CRC,
ERROR_CFG_PROBE_CRC,
ERROR_CFG_CAL_CRC,
ERROR_CFG_LOG_CRC,
ERROR_CFG_NO_PROBE,
ERROR_CFG_UNIT_PROBE,
ERROR_CFG_ACK,
ERROR_CFG_INIT,
ERROR_BAT_HIGH,
ERROR_BAT_LOW,
ERROR_BAD_VIBES,
ERROR_NO_PROBE_WELL,
ERROR_POST_FAIL,
ERROR_INTERNAL_FAULT,
#[getter(skip)]
raw_object:RawObject,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum probe_type{
#[default]
NO_PROBE,
ORAL,
RECTAL,
CALKEY,
#[getter(skip)]
raw_object:RawObject,
}
impl Object for CSTPTempDEng{
fn get_family(&self) -> datatypes::Family { datatypes::Family::FmTEMP }
fn get_genus(&self) -> datatypes::Genus { datatypes::Genus::GnDATA }
fn get_species(&self) -> Box<dyn super::ObjectSpecies> { Box::new(FmTEMPSpecies:CSTPTempDEng) }
fn get_raw_object(&self) -> RawObject { self.raw_object.clone() }
}
#[derive(Getters,Builder,Clone)]
pub struct CSTPDProbe{
probeType:int8,
partNumber:int8,
lotCode:uint32,
lotSeqNum:int16,
probeArrayLoc:int16,
testPassFailCode:int16,
calSignature:int32,
calDateTime:TIME,
heaterGain:float,
heaterTimeDelay:float,
responses:float,
thermCalM:float,
thermCalB:float,
coefA:float,
coefB:float,
coefC:float,
coefD:float,
coefE:float,
probeCycleCount:uint32,
deviceCount:uint16,
lastDeviceSN:int8,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum probeType{
#[default]
ORAL,
CALKEY,
RECTAL,
NONE,
#[getter(skip)]
raw_object:RawObject,
}
impl Object for CSTPDProbe{
fn get_family(&self) -> datatypes::Family { datatypes::Family::FmTEMP }
fn get_genus(&self) -> datatypes::Genus { datatypes::Genus::GnDATA }
fn get_species(&self) -> Box<dyn super::ObjectSpecies> { Box::new(FmTEMPSpecies:CSTPDProbe) }
fn get_raw_object(&self) -> RawObject { self.raw_object.clone() }
}
#[derive(Getters,Builder,Clone)]
pub struct CSTPDHState{
hardware:int16,
state:int16,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum hardware{
#[default]
PROBE_WELL_SW,
PROBE_SW,
PROBE_CONNECTED_SW,
#[getter(skip)]
raw_object:RawObject,
}
impl Object for CSTPDHState{
fn get_family(&self) -> datatypes::Family { datatypes::Family::FmTEMP }
fn get_genus(&self) -> datatypes::Genus { datatypes::Genus::GnDATA }
fn get_species(&self) -> Box<dyn super::ObjectSpecies> { Box::new(FmTEMPSpecies:CSTPDHState) }
fn get_raw_object(&self) -> RawObject { self.raw_object.clone() }
}
#[derive(Getters,Builder,Clone)]
pub struct CSTPDLock{
lock:int16,
state:int8,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum lock{
#[default]
DIGITAL_INPUT_LOCK,
AD_CHANNEL,
#[getter(skip)]
raw_object:RawObject,
}
impl Object for CSTPDLock{
fn get_family(&self) -> datatypes::Family { datatypes::Family::FmTEMP }
fn get_genus(&self) -> datatypes::Genus { datatypes::Genus::GnDATA }
fn get_species(&self) -> Box<dyn super::ObjectSpecies> { Box::new(FmTEMPSpecies:CSTPDLock) }
fn get_raw_object(&self) -> RawObject { self.raw_object.clone() }
}
#[derive(Getters,Builder,Clone)]
pub struct CSTPDRData{
thermistor:uint32,
PTBResistor:uint32,
rCalResistor:uint32,
vRef:uint32,
}
impl Object for CSTPDRData{
fn get_family(&self) -> datatypes::Family { datatypes::Family::FmTEMP }
fn get_genus(&self) -> datatypes::Genus { datatypes::Genus::GnDATA }
fn get_species(&self) -> Box<dyn super::ObjectSpecies> { Box::new(FmTEMPSpecies:CSTPDRData) }
fn get_raw_object(&self) -> RawObject { self.raw_object.clone() }
}
#[derive(Getters,Builder,Clone)]
pub struct CSTPDStat{
state:uint16,
error:uint16,
hardwareState:uint16,
finalTemp:float,
probeTemp:float,
method:uint16,
probeType:uint16,
algorithm:uint16,
battery:uint16,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum state{
#[default]
IDLE,
NOT_READY,
READY,
PREDICT,
PREDICT_DISPLAY,
PREDICT_POS,
FINAL,
FINAL_POS,
FINAL_OVER_TEMP,
FINAL_UNDER_TEMP,
FINAL_OVER_TEMP_POS,
FINAL_UNDER_TEMP_POS,
NO_PREDICT,
ERROR,
MONITOR,
#[getter(skip)]
raw_object:RawObject,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum error{
#[default]
NO_ERROR,
ERROR_ALG_PROBE_OVER_TEMP,
ERROR_ALG_EXCESSIVE_HTR_ENERGY,
ERROR_ALG_OVER_AMB_TEMP,
ERROR_ALG_UNDER_AMB_TEMP,
ERROR_ALG_NO_PROBE_TEMP_RISE,
ERROR_ALG_BAD_PROBE_GAIN,
ERROR_ALG_BAD_PROBE_RESP_VAL,
ERROR_HTR_ON_NOT_OFF,
ERROR_HTR_OFF_NOT_ON,
ERROR_HTR_VOLT_HIGH_Q,
ERROR_HTR_VOLT_Q_HIGH_IMP,
ERROR_HTR_VOLT_LOW,
ERROR_HTR_FAILSAFE,
ERROR_AD_PULSE_LONG,
ERROR_AD_PULSE_SHORT,
ERROR_AD_RCAL_LONG,
ERROR_AD_RCAL_SHORT,
ERROR_AD_PTB_OVER,
ERROR_AD_PTB_UNDER,
ERROR_AD_TIMEOUT,
ERROR_CFG_XFER,
ERROR_CFG_SET_CRC,
ERROR_CFG_PROBE_CRC,
ERROR_CFG_CAL_CRC,
ERROR_CFG_LOG_CRC,
ERROR_CFG_NO_PROBE,
ERROR_CFG_UNIT_PROBE,
ERROR_CFG_ACK,
ERROR_CFG_INIT,
ERROR_BAT_HIGH,
ERROR_BAT_LOW,
ERROR_BAD_VIBES,
ERROR_NO_PROBE_WELL,
ERROR_POST_FAIL,
ERROR_INTERNAL_FAULT,
#[getter(skip)]
raw_object:RawObject,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum hardwareState{
#[default]
probeConnected,
probePulled,
probeWellIn,
savingCal,
savingSettings,
takeReadingActive,
#[getter(skip)]
raw_object:RawObject,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum method{
#[default]
PREDICT,
MONITOR,
CLINICAL,
#[getter(skip)]
raw_object:RawObject,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum probeType{
#[default]
NO_PROBE,
ORAL,
RECTAL,
CALKEY,
#[getter(skip)]
raw_object:RawObject,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum algorithm{
#[default]
NONE,
ORAL_ALG,
PED_AX_ALG,
ADULT_AX_ALG,
RECTAL_ALG,
#[getter(skip)]
raw_object:RawObject,
}
impl Object for CSTPDStat{
fn get_family(&self) -> datatypes::Family { datatypes::Family::FmTEMP }
fn get_genus(&self) -> datatypes::Genus { datatypes::Genus::GnDATA }
fn get_species(&self) -> Box<dyn super::ObjectSpecies> { Box::new(FmTEMPSpecies:CSTPDStat) }
fn get_raw_object(&self) -> RawObject { self.raw_object.clone() }
}
#[derive(Getters,Builder,Clone)]
pub struct CSTPDSample{
channel:uint8,
error:uint8,
sample:uint32,
data:uint32,
temperature:float,
resistance:float,
last_rcal:uint32,
}
impl Object for CSTPDSample{
fn get_family(&self) -> datatypes::Family { datatypes::Family::FmTEMP }
fn get_genus(&self) -> datatypes::Genus { datatypes::Genus::GnDATA }
fn get_species(&self) -> Box<dyn super::ObjectSpecies> { Box::new(FmTEMPSpecies:CSTPDSample) }
fn get_raw_object(&self) -> RawObject { self.raw_object.clone() }
}
#[derive(Getters,Builder,Clone)]
pub struct CTempDTouch{
ele0:uint16,
ele1:uint16,
ele2:uint16,
touchStatus:uint16,
ele0bv:uint8,
ele1bv:uint8,
ele2bv:uint8,
hardwareStateIR:uint16,
sampleCount:uint32,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum hardwareStateIR{
#[default]
TAKE_READING_ACTIVE,
PROBE_COVER_ON,
#[getter(skip)]
raw_object:RawObject,
}
impl Object for CTempDTouch{
fn get_family(&self) -> datatypes::Family { datatypes::Family::FmTEMP }
fn get_genus(&self) -> datatypes::Genus { datatypes::Genus::GnDATA }
fn get_species(&self) -> Box<dyn super::ObjectSpecies> { Box::new(FmTEMPSpecies:CTempDTouch) }
fn get_raw_object(&self) -> RawObject { self.raw_object.clone() }
}
#[derive(Getters,Builder,Clone)]
pub struct CTempDTherm{
ambient:float,
ambient_count:int32,
thermopile:float,
thermopile_count:int32,
sampleCount:uint32,
heaterPWM:int16,
heaterState:int16,
heaterError:int16,
braun_ambient:float,
TCValue:float,
pre_num:uint8,
post_num:uint8,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum heaterState{
#[default]
IDLE,
HEATER_TEST,
HEATER_ON,
READY,
ERROR,
#[getter(skip)]
raw_object:RawObject,
}
impl Object for CTempDTherm{
fn get_family(&self) -> datatypes::Family { datatypes::Family::FmTEMP }
fn get_genus(&self) -> datatypes::Genus { datatypes::Genus::GnDATA }
fn get_species(&self) -> Box<dyn super::ObjectSpecies> { Box::new(FmTEMPSpecies:CTempDTherm) }
fn get_raw_object(&self) -> RawObject { self.raw_object.clone() }
}
#[derive(Getters,Builder,Clone)]
pub struct CTempCStd{
Enabled:boolean,
InstalledModule:uint16,
DisplayUnits:uint16,
Mode:uint16,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum InstalledModule{
#[default]
NONE,
UNKNOWN,
SURETEMP_SW,
SURETEMP,
SURETEMP_PLUS,
BRAUN_PRO4000,
BRAUN_PRO6000,
#[getter(skip)]
raw_object:RawObject,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum DisplayUnits{
#[default]
DEG_F,
DEG_C,
#[getter(skip)]
raw_object:RawObject,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum Mode{
#[default]
NONE,
UNKNOWN,
ORAL,
ADULT_AXIL,
PED_AXIL,
LAST,
#[getter(skip)]
raw_object:RawObject,
}
impl Object for CTempCStd{
fn get_family(&self) -> datatypes::Family { datatypes::Family::FmTEMP }
fn get_genus(&self) -> datatypes::Genus { datatypes::Genus::GnCONFIG }
fn get_species(&self) -> Box<dyn super::ObjectSpecies> { Box::new(FmTEMPSpecies:CTempCStd) }
fn get_raw_object(&self) -> RawObject { self.raw_object.clone() }
}
#[derive(Getters,Builder,Clone)]
pub struct CSTPCStd{
clinicalPause:uint16,
deviceType:uint8,
dfltAlgorithm:uint8,
ambientBias:float,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum deviceType{
#[default]
PREDICT_DEVICE,
MONITOR_DEVICE,
#[getter(skip)]
raw_object:RawObject,
}
#[derive(Clone,Copy,Debug,Default)]
pub enum dfltAlgorithm{
#[default]
ORAL,
PED_AXILLARY,
ADULT_AXILLARY,
LAST,
#[getter(skip)]
raw_object:RawObject,
}
impl Object for CSTPCStd{
fn get_family(&self) -> datatypes::Family { datatypes::Family::FmTEMP }
fn get_genus(&self) -> datatypes::Genus { datatypes::Genus::GnCONFIG }
fn get_species(&self) -> Box<dyn super::ObjectSpecies> { Box::new(FmTEMPSpecies:CSTPCStd) }
fn get_raw_object(&self) -> RawObject { self.raw_object.clone() }
}
#[derive(Getters,Builder,Clone)]
pub struct CSTPCCal{
signature:uint32,
dateTime:TIME,
modConfig:float,
Yp0:float,
Rp0:float,
RPTBEff:float,
RCalEff:float,
vRef:float,
}
impl Object for CSTPCCal{
fn get_family(&self) -> datatypes::Family { datatypes::Family::FmTEMP }
fn get_genus(&self) -> datatypes::Genus { datatypes::Genus::GnCONFIG }
fn get_species(&self) -> Box<dyn super::ObjectSpecies> { Box::new(FmTEMPSpecies:CSTPCCal) }
fn get_raw_object(&self) -> RawObject { self.raw_object.clone() }
}
#[derive(Getters,Builder,Clone)]
pub struct CTempPMsgArg{
IOParameterA:uint32,
IOParameterB:uint32,
}
impl Object for CTempPMsgArg{
fn get_family(&self) -> datatypes::Family { datatypes::Family::FmTEMP }
fn get_genus(&self) -> datatypes::Genus { datatypes::Genus::GnPARAMETER }
fn get_species(&self) -> Box<dyn super::ObjectSpecies> { Box::new(FmTEMPSpecies:CTempPMsgArg) }
fn get_raw_object(&self) -> RawObject { self.raw_object.clone() }
}
#[derive(Getters,Builder,Clone)]
pub struct CSTPPSelector{
Value:uint32,
}
impl Object for CSTPPSelector{
fn get_family(&self) -> datatypes::Family { datatypes::Family::FmTEMP }
fn get_genus(&self) -> datatypes::Genus { datatypes::Genus::GnPARAMETER }
fn get_species(&self) -> Box<dyn super::ObjectSpecies> { Box::new(FmTEMPSpecies:CSTPPSelector) }
fn get_raw_object(&self) -> RawObject { self.raw_object.clone() }
}

View file

@ -1,13 +1,11 @@
mod oop;
use std::{thread::{self, JoinHandle}, io::Write};
use roxmltree;
use crossbeam;
fn main() {
let args: Vec<String> = std::env::args().collect();
let mut objects_filenames: Vec<String> = Vec::new();
let mut messages_filenames: Vec<String> = Vec::new();
let mut file_names: Vec<String> = Vec::new();
let mut handles:Vec<JoinHandle<()>> = Vec::new();
let opt = roxmltree::ParsingOptions {
@ -17,8 +15,6 @@ fn main() {
for arg in args[1..].iter().cloned(){
file_names.push(arg.to_string());
objects_filenames.push(file_names.last().unwrap().trim_end_matches(".xml").to_string() + "_objects.rs");
messages_filenames.push(file_names.last().unwrap().trim_end_matches(".xml").to_string() + "_messages.rs");
handles.push(thread::spawn(move || {
println!("{:?}", arg);
if arg.to_string().contains(".xml") {
@ -28,8 +24,21 @@ fn main() {
match doc {
Ok(doc_good) => {
//output(parse(&doc_good));
#[allow(unused_variables)]
let output:oop::Family = new_parse(&doc_good).unwrap();
//#[allow(unused_variables)]
let family = new_parse(&doc_good).unwrap();
let output_paths = [family.get_name() + "_objects.rs", family.get_name() + "_members.rs"];
match crossbeam::scope(|s| {
for output_path in output_paths {
s.spawn(|_| {
write_file(output_gen(family.clone(), output_path))
});
}
}) {
Ok(no_panic) => println!("Subthreads didn't panic: {:?}", no_panic),
Err(thread_panic) => println!("Subthread panic: {:?}", thread_panic)
}
},
Err(doc_bad) => {
println!("{:?}", doc_bad);
@ -45,16 +54,17 @@ fn main() {
}
}
fn new_parse(doc:&roxmltree::Document) -> Result<oop::Family,core::fmt::Error>{
let current = oop::Current::new();
let mut wrapped_family:Option<oop::Family> = None;
let mut messages: oop::Messages = oop::Messages::new(Vec::new(), Vec::new(), Vec::new(), Vec::new(), Vec::new());
let root = doc.root_element();
println!("{:?}",doc.root_element());
println!("{:?}",doc.root_element().first_element_child());
//println!("{:?}",doc.root_element());
//println!("{:?}",doc.root_element().first_element_child());
if let Some(_) = doc.root_element().first_element_child(){
match root.tag_name().name() {
"FAMILY" => {
for attribute in root.attributes().filter(|attribute| { println!("{:?}",attribute.name()); attribute.name() == "name" }){
for attribute in root.attributes().filter(|attribute| { attribute.name() == "name" }){
println!("successful match");
wrapped_family = Some(oop::Family::new(attribute.value().to_string(), Vec::new(), Vec::new()));
}
@ -63,7 +73,7 @@ fn new_parse(doc:&roxmltree::Document) -> Result<oop::Family,core::fmt::Error>{
}
if let Some(ref mut family) = wrapped_family{
root.children().for_each(|child| nested_parse(family, child));
root.children().for_each(|child| nested_parse(family, child, current.clone()));
}
root.children().filter(|outer_child| outer_child.tag_name().name() == "MESSAGES" )
.for_each(|message_group| {
@ -73,19 +83,20 @@ fn new_parse(doc:&roxmltree::Document) -> Result<oop::Family,core::fmt::Error>{
});
});
if let Some(family) = wrapped_family{
if let Some(mut family) = wrapped_family{
family.push_messages(messages);
return Ok(family);
}
}
return Err(core::fmt::Error);
}
fn nested_parse(input_family:&mut oop::Family, node: roxmltree::Node) {
fn nested_parse(input_family:&mut oop::Family, node: roxmltree::Node, mut current: oop::Current) {
if node.is_text() || node.is_comment() { return; }
println!("{:?}",node);
//println!("{:?}",node);
match node.tag_name().name() {
"SPECIES_KEY" => {
node.children().for_each(|child| nested_parse(input_family, child));
node.children().for_each(|child| nested_parse(input_family, child, current.clone()));
},
"GENUS" => {
node.attributes()
@ -95,7 +106,7 @@ fn nested_parse(input_family:&mut oop::Family, node: roxmltree::Node) {
input_family.push_genus(oop::Genus::new(attr.value().to_string(), Vec::new()));
};
});
node.children().for_each(|child| nested_parse(input_family, child));
node.children().for_each(|child| nested_parse(input_family, child, current.clone()));
},
"SPECIES" => {
input_family.get_genera().last_mut().unwrap()
@ -106,20 +117,20 @@ fn nested_parse(input_family:&mut oop::Family, node: roxmltree::Node) {
));
},
"DEFINITION" => {
let Some(attr_family) = node.attribute("family")
else { todo!() };
let Some(attr_genus) = node.attribute("genus")
else { todo!() };
let Some(attr_species) = node.attribute("species")
else { todo!() };
if attr_family != input_family.get_name() {
current.attr_family = node.attribute("family").unwrap().to_string();
current.attr_genus = node.attribute("genus").unwrap().to_string();
current.attr_species = node.attribute("species").unwrap().to_string();
if current.attr_family != input_family.get_name() {
println!("Inconsistent family naming scheme. Check XML file.");
panic!();
}
input_family.get_genera().as_mut_slice().iter_mut().filter(|genus| genus.get_name().as_str() == attr_genus)
input_family.get_genera().as_mut_slice().iter_mut()
.filter(|genus| genus.get_name().as_str() == current.attr_genus)
.for_each(|genus| {
genus.get_species().as_mut_slice().iter_mut().filter(|species| species.get_name().as_str() == attr_species)
genus.get_species().as_mut_slice().iter_mut()
.filter(|species| species.get_name().as_str() == current.attr_species)
.for_each(|species|{
current.attr_object = node.attribute("class").unwrap().to_string();
species.push_object(oop::Object::new(
node.attribute("class").unwrap().to_string(),
node.attribute("abrv").unwrap().to_string(),
@ -129,42 +140,47 @@ fn nested_parse(input_family:&mut oop::Family, node: roxmltree::Node) {
});
}
);
node.children().for_each(|child| nested_parse(input_family, child));
node.children().for_each(|child| nested_parse(input_family, child, current.clone()));
},
"MEMBERS" => {
node.children().for_each(|child| nested_parse(input_family, child));
node.children().for_each(|child| nested_parse(input_family, child, current.clone()));
},
"MEMBER" => {
input_family.get_genera().as_mut_slice().iter_mut()
.filter(|genus| genus.get_name().as_str() == current.attr_genus)
.for_each(|genus| {
genus.get_species().as_mut_slice().iter_mut()
.filter(|species| species.get_name().as_str() == current.attr_species)
.for_each(|species|{
species.get_objects().as_mut_slice().iter_mut()
.for_each(|object| {
object.push_object_member(oop::ObjectMember::new(
current.attr_member = node.attribute("name").unwrap().to_string();
species.get_objects().last_mut().unwrap().push_object_member(oop::ObjectMember::new(
node.attribute("type").unwrap().to_string(),
node.attribute("name").unwrap().to_string(),
node.attribute("class").unwrap_or("").to_string(),
node.attribute("minversion").unwrap().to_string(),
node.attribute("maxversion").unwrap().to_string(),
Vec::new(),
node.attribute("format").unwrap_or("").to_string()
));
});
});
}
);
},
"ENUMERATION" => {
node.children().for_each(|child| nested_parse(input_family, child));
current.attr_member = node.attribute("name").unwrap().to_string();
node.children().for_each(|child| nested_parse(input_family, child, current.clone()));
},
"ENUM" => {
input_family.get_genera().as_mut_slice().iter_mut()
.filter(|genus| genus.get_name().as_str() == current.attr_genus)
.for_each(|genus| {
genus.get_species().as_mut_slice().iter_mut()
.filter(|species| species.get_name().as_str() == current.attr_species)
.for_each(|species|{
species.get_objects().as_mut_slice().iter_mut()
species.get_objects().as_mut_slice().iter_mut().filter(|object| object.get_name().as_str() == current.attr_object)
.for_each(|object| {
object.get_members().as_mut_slice().iter_mut()
object.get_members().as_mut_slice().iter_mut().filter(|member| member.get_member_name().as_str() == current.attr_member)
.for_each(|member| {
member.get_enumerations().push(
oop::MemberEnumeration::new(
@ -187,13 +203,170 @@ fn nested_parse(input_family:&mut oop::Family, node: roxmltree::Node) {
}
}
fn output(family: oop::Family) {
let mut write_string = String::new();
fn output_gen(family: oop::Family, output_path: String) -> (String, String){
let mut write_string: String;
//TODO: Append contents of file, including line breaks and spacing where necessary to
//write_string
match output_path.as_str() {
o if o.contains("objects") => {
write_string = format!(
"{}{}{}",
"use crate::datatypes;\nuse super::{Object, ObjectSpecies, RawObject};\nuse derive_getters::Getters;\nuse derive_builder::Builder;\n\n#[derive(Clone,Debug)]\npub enum ",
family.get_name().as_str(),
"Species{\n"
);
for species_name in family.list_species() {
write_string = format!(
"{}{}{}{}",
write_string,
"\t",
species_name,
",\n"
);
}
write_string = format!(
"{}{}{}{}",
write_string,
"}\nimpl ObjectSpecies for ",
family.get_name().as_str(),
"Species{}\n\n"
);
let mut genus_name:String;
for genus in family.clone().get_genera() {
genus_name = genus.get_name();
for species in genus.get_species() {
for object in species.get_objects() {
write_string = format!(
"{}{}{}{}",
write_string,
"#[derive(Getters,Builder,Clone)]\npub struct ",
object.get_name(),
"{\n"
);
let mut enums = Vec::new();
for member in object.get_members() {
if member.get_member_type() != "OBJECT" {
write_string = format!(
"{}{}{}{}{}{}",
write_string,
"\t",
member.get_member_name(),
":",
member.get_member_type(),
",\n"
);
} else {
write_string = format!(
"{}{}{}{}{}{}{}{}",
write_string,
"\t",
member.get_member_name(),
":",
member.get_member_type(),
"::",
member.get_member_class(),
",\n"
);
}
if !member.get_enumerations().is_empty() && member.get_enumerations().first().unwrap().get_name() != "" {
enums.push(member)
}
}
if !enums.is_empty() {
for member in enums {
write_string = format!(
"{}{}{}{}",
write_string,
"}\n\n#[derive(Clone,Copy,Debug,Default)]\npub enum ",
member.get_member_name(),
"{\n\t#[default]\n"
);
for e in member.get_enumerations() {
write_string = format!(
"{}{}{}{}",
write_string,
"\t",
e.get_name(),
",\n"
);
}
write_string = format!(
"{}{}",
write_string,
"\t#[getter(skip)]\n\traw_object:RawObject,\n"
);
}
}
write_string = format!(
"{}{}{}{}{}{}{}{}{}{}{}{}",
write_string,
"}\n\nimpl Object for ",
object.get_name(),
"{\n\tfn get_family(&self) -> datatypes::Family { datatypes::Family::",
family.get_name(),
" }\n\tfn get_genus(&self) -> datatypes::Genus { datatypes::Genus::",
genus_name,
" }\n\tfn get_species(&self) -> Box<dyn super::ObjectSpecies> { Box::new(",
family.get_name().as_str(),
"Species:",
object.get_name(),
") }\n\tfn get_raw_object(&self) -> RawObject { self.raw_object.clone() }\n}\n\n"
);
}
}
}
},
m if m.contains("members") => {
write_string = format!(
"{}{}{}",
"use super::MessageSpecies;\n\npub enum ",
family.get_name().as_str(), "Message{\n"
);
for messages in family.get_messages() {
#[allow(unused_assignments)]
let mut message_type = "";
match family.get_messages().iter().position(|x| x.eq(&messages)) {
Some(0) => message_type = "Request",
Some(1) => message_type = "Response",
Some(2) => message_type = "Command",
Some(3) => message_type = "Status",
Some(4) => message_type = "Stream",
None => panic!("When writing file, message type error"),
Some(_) => panic!("When writing file, message type error")
}
let mut message_num = 0x00;
for message in messages {
write_string = format!(
"{}{}{}{}{}{}{}{}",
write_string,
"\t",
message,
",\t\t\t//",
message_type,
" ",
message_num,
"\n"
);
message_num += 0x01;
}
}
write_string = format!(
"{}{}{}{}",
write_string,
"}\n\nimpl MessageSpecies for ",
family.get_name().as_str(), "Message{}"
);
},
&_ => panic!("Output path format error")
}
let output_path = family.get_name() + "_family.rs";
return (write_string, output_path);
}
fn write_file(args: (String, String)) {
let write_string = args.0;
let output_path = args.1;
if !std::path::Path::new(&output_path).exists(){
let file_create_return = std::fs::File::create(&output_path);
match file_create_return {
@ -212,7 +385,7 @@ fn output(family: oop::Family) {
let write_result = output_file.write_all(write_string.as_bytes());
match write_result{
Err(write_error) => {
println!("Failed to write to file! Error: {:?}",write_error);
println!("Failed to write to file! Error: {:?}", write_error);
todo!();
}
_ => {}
@ -224,5 +397,4 @@ fn output(family: oop::Family) {
todo!();
}
}
}
}

View file

@ -1,5 +1,6 @@
use phf::phf_ordered_map;
use crate::roxmltree::Node;
use std::fmt;
const MESSAGETYPE: phf::OrderedMap<&'static str, &'static str> = phf_ordered_map! {
"Request" => "requests",
@ -51,6 +52,24 @@ impl Family {
self.messages.push(messages.statuses);
self.messages.push(messages.streams);
}
pub fn list_species(&self) -> Vec<String> {
let mut list: Vec<String> = Vec::new();
for genus in &self.genera {
for species in &genus.species {
if !list.contains(&species.get_name()) {
list.push(species.get_name())
}
}
}
return list;
}
}
impl fmt::Display for Family {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "Name: {}, Genera: {:?}, Messages: {:?}", self.name, self.genera, self.messages)
}
}
#[derive(Debug, Clone)]
@ -149,6 +168,7 @@ impl Object {
pub struct ObjectMember {
member_type: String,
name: String,
class: String,
minversion: String,
maxversion: String,
enumerations: Vec<MemberEnumeration>,
@ -156,11 +176,11 @@ pub struct ObjectMember {
}
impl ObjectMember {
pub fn new(member_type: String, name: String, minversion: String, maxversion: String, enumerations: Vec<MemberEnumeration>, format: String) -> Self {
Self { member_type, name, minversion, maxversion, enumerations, format }
pub fn new(member_type: String, name: String, class: String, minversion: String, maxversion: String, enumerations: Vec<MemberEnumeration>, format: String) -> Self {
Self { member_type, name, class, minversion, maxversion, enumerations, format }
}
pub fn get_name(&self) -> String{
pub fn get_member_name(&self) -> String{
return self.name.clone()
}
@ -169,6 +189,10 @@ impl ObjectMember {
return self.member_type.clone()
}
pub fn get_member_class(&self) -> String{
return self.class.clone();
}
#[allow(unused)]
pub fn get_minversion(&self) -> String{
return self.minversion.clone()
@ -190,8 +214,12 @@ impl ObjectMember {
}
#[allow(unused)]
pub fn get_format(&mut self) -> &mut String{
return &mut self.format
pub fn get_format(&self) -> Option<String>{
if self.class != "" {
return None;
} else {
return Some(self.format.clone());
}
}
}
@ -218,7 +246,7 @@ impl MemberEnumeration {
}
}
#[derive(Debug)]
#[derive(Debug, Clone)]
pub struct Messages {
requests: Vec<String>,
responses: Vec<String>,
@ -280,4 +308,25 @@ impl Messages {
}
}
}
}
#[derive(Debug, Clone)]
pub(crate) struct Current {
pub attr_family:String,
pub attr_genus:String,
pub attr_species:String,
pub attr_object:String,
pub attr_member:String,
}
impl Current {
pub fn new() -> Self{
Current {
attr_family: "".to_string(),
attr_genus: "".to_string(),
attr_member: "".to_string(),
attr_object: "".to_string(),
attr_species: "".to_string()
}
}
}