Index: leahi_dialin/common/dd_defs.py =================================================================== diff -u -r01af2d84b2cb4aa87c58f10eb8af669820e71f49 -r7ec1428451adfb2aabf7a64794e818a9916250c7 --- leahi_dialin/common/dd_defs.py (.../dd_defs.py) (revision 01af2d84b2cb4aa87c58f10eb8af669820e71f49) +++ leahi_dialin/common/dd_defs.py (.../dd_defs.py) (revision 7ec1428451adfb2aabf7a64794e818a9916250c7) @@ -831,13 +831,13 @@ @unique -class DDDialysatePumpsStates(DialinEnum): +class DDDialysatePumpStates(DialinEnum): DIALYSATE_PUMP_OFF_STATE = 0 # Dialysate Pump Off State DIALYSATE_PUMP_RAMP_UP_STATE = 1 # Dialysate Pump Ramp Up State DIALYSATE_PUMP_CONTROL_TO_TARGET_STATE = 2 # Dialysate Pump Control to Target State NUM_OF_DIALYSATE_PUMP_STATES = 3 # Number of Dialysate Pump States -DDDialysatePumpsStates._str_list = { +DDDialysatePumpStates._str_list = { # Official Name : Accepted strings 'DIALYSATE_PUMP_OFF_STATE': ['off'], 'DIALYSATE_PUMP_RAMP_UP_STATE': ['ramp up'], Index: leahi_dialin/dd/modules/events.py =================================================================== diff -u -r8b54f610f3b5c0610bea0a481b892e8c70935765 -r7ec1428451adfb2aabf7a64794e818a9916250c7 --- leahi_dialin/dd/modules/events.py (.../events.py) (revision 8b54f610f3b5c0610bea0a481b892e8c70935765) +++ leahi_dialin/dd/modules/events.py (.../events.py) (revision 7ec1428451adfb2aabf7a64794e818a9916250c7) @@ -18,6 +18,7 @@ import struct from logging import Logger from datetime import datetime +from typing import Tuple # Project imports from leahi_dialin.common import dd_enum_repository @@ -26,6 +27,7 @@ from leahi_dialin.protocols.CAN import CanMessenger, CanChannels from leahi_dialin.utils.abstract_classes import AbstractSubSystem from leahi_dialin.utils.base import publish +from leahi_dialin.utils.enums import DialinEnum @@ -72,6 +74,14 @@ dd_enum_repository.DDOpModes.MODE_ROPS.name: dd_enum_repository.DDROPermeateStates, dd_enum_repository.DDOpModes.MODE_NLEG.name: dd_enum_repository.DDNotLegalStates} + # Dictionary of the sub mode as key and the state states enum class as the valued + self._sub_mode_2_states = { dd_enum_repository.DDFaultStates.DD_FAULT_STATE_START.name: dd_enum_repository.DDFaultNVDataStates, + dd_enum_repository.DDStandbyStates.DD_STANDBY_MODE_STATE_IDLE.name: dd_enum_repository.DDStanDisinfectStates, + dd_enum_repository.DDPreGenDialysateStates.DD_PRE_GEN_WET_SELF_TEST.name: dd_enum_repository.DDPreGenWetSelfTestStates } + + # Dictionary of the state as key and the sub state states enum class as the valued + self._state_2_sub_states = { } + # Loop through the list of the DD events enums and initial the event dictionary. Each event is a key in the # dictionary and the value is a list. self._event_dictionary = dict() @@ -283,7 +293,8 @@ event_tuple = (current_timestamp, event_enum.name, event_data_1, event_data_2) elif event_enum is dd_enum_repository.DDEventList.DD_EVENT_OPERATION_STATUS: - event_tuple = (current_timestamp, op_mode, sub_mode, sub_state) + op_mode_enum, sub_mode_enum, state_enum, _ = self._operation_status_match(op_mode=op_mode, sub_mode=sub_mode, state=sub_state) + event_tuple = (current_timestamp, op_mode_enum, sub_mode_enum, state_enum) # Update event dictionary self._event_dictionary[event_enum.name].append(event_tuple) @@ -307,3 +318,27 @@ self.process_into_vars(decoder_list = msg_list, message = message) self.event_op_mode_timestamp = timestamp + + + def _operation_status_match(self, op_mode: int, sub_mode: int=None, state:int=None, sub_state: int=None) -> Tuple[DialinEnum, DialinEnum, DialinEnum, DialinEnum]: + """ + Convert operation status values to enums. + + :param op_mode: (Integer) The operation mode value + :param sub_mode: (Integer) The operation sub mode value + :param state: (Integer) The operation state value + :param sub_state: (Integer) The operation sub state value + :return: Returns the DialinEnum for each provied mode/state + """ + op_mode_enum = dd_enum_repository.TDOpModes(op_mode) + sub_mode_enum = None + state_enum = None + sub_state_enum = None + if sub_mode is not None: + sub_mode_enum = self._op_mode_2_sub_mode[op_mode_enum.name](sub_mode) + if state is not None: + state_enum = self._sub_mode_2_states[sub_mode_enum.name](state) + if sub_state is not None: + sub_state_enum = self._state_2_sub_states[state_enum.name](sub_state) + + return op_mode_enum, sub_mode_enum, state_enum, sub_state_enum Index: leahi_dialin/fp/modules/events.py =================================================================== diff -u -r1f7b5ac840adf6740b023706fcb73691c33a9be7 -r7ec1428451adfb2aabf7a64794e818a9916250c7 --- leahi_dialin/fp/modules/events.py (.../events.py) (revision 1f7b5ac840adf6740b023706fcb73691c33a9be7) +++ leahi_dialin/fp/modules/events.py (.../events.py) (revision 7ec1428451adfb2aabf7a64794e818a9916250c7) @@ -14,17 +14,20 @@ # ############################################################################ +# Module imports import struct from logging import Logger from datetime import datetime -from time import time +from typing import Tuple +# Project imports from leahi_dialin.common import dd_enum_repository, fp_enum_repository from leahi_dialin.common.generic_defs import DataTypes from leahi_dialin.common.msg_defs import MsgIds, MsgFieldPositions from leahi_dialin.protocols.CAN import CanMessenger, CanChannels, CanMessenger from leahi_dialin.utils.abstract_classes import AbstractSubSystem from leahi_dialin.utils.base import publish +from leahi_dialin.utils.enums import DialinEnum class FPEvents(AbstractSubSystem): @@ -67,6 +70,17 @@ fp_enum_repository.FPOpModes.MODE_DEGP.name: fp_enum_repository.FPGenPermeateDefStates, fp_enum_repository.FPOpModes.MODE_NLEG.name: fp_enum_repository.FPNotLegalStates} + # Dictionary of the sub mode as key and the state states enum class as the valued + self._sub_mode_2_states = { fp_enum_repository.FPFaultStates.DD_FAULT_STATE_START.name: fp_enum_repository.FPFaultNVDataStates, + fp_enum_repository.FPPreGenPermeateStates.FP_PRE_GENP_INLET_PRES_CHECK.name: fp_enum_repository.FPInletPresCheckStates, + fp_enum_repository.FPPreGenPermeateStates.FP_PRE_GENP_FILTER_FLUSH.name: fp_enum_repository.FPFilterFlushStates, + fp_enum_repository.FPPreGenPermeateStates.FP_PRE_GENP_PERMEATE_FLUSH.name: fp_enum_repository.FPPermeateFlushStates, + fp_enum_repository.FPPreGenPermeateStates.FP_PRE_GENP_CONCENTRATE_FLUSH.name: fp_enum_repository.FPConcentrateFlushStates, + fp_enum_repository.FPPreGenPDefStates.FP_PRE_GENP_DEF_FLUSH.name: fp_enum_repository.FPDefFlushStates } + + # Dictionary of the state as key and the sub state states enum class as the valued + self._state_2_sub_states = { } + # Loop through the list of the FP events enums and initial the event dictionary. Each event is a key in the # dictionary and the value is a list. self._event_dictionary = dict() @@ -283,7 +297,8 @@ event_tuple = (current_timestamp, event_enum.name, event_data_1, event_data_2) elif event_enum is fp_enum_repository.FPEventList.FP_EVENT_OPERATION_STATUS: - event_tuple = (current_timestamp, op_mode, sub_mode, sub_state) + op_mode_enum, sub_mode_enum, state_enum, _ = self._operation_status_match(op_mode=op_mode, sub_mode=sub_mode, state=sub_state) + event_tuple = (current_timestamp, op_mode_enum, sub_mode_enum, state_enum) # Update event dictionary self._event_dictionary[event_enum.name].append(event_tuple) @@ -306,3 +321,27 @@ self.process_into_vars(decoder_list = msg_list, message = message) self.event_op_mode_timestamp = timestamp + + + def _operation_status_match(self, op_mode: int, sub_mode: int=None, state:int=None, sub_state: int=None) -> Tuple[DialinEnum, DialinEnum, DialinEnum, DialinEnum]: + """ + Convert operation status values to enums. + + :param op_mode: (Integer) The operation mode value + :param sub_mode: (Integer) The operation sub mode value + :param state: (Integer) The operation state value + :param sub_state: (Integer) The operation sub state value + :return: Returns the DialinEnum for each provied mode/state + """ + op_mode_enum = fp_enum_repository.TDOpModes(op_mode) + sub_mode_enum = None + state_enum = None + sub_state_enum = None + if sub_mode is not None: + sub_mode_enum = self._op_mode_2_sub_mode[op_mode_enum.name](sub_mode) + if state is not None: + state_enum = self._sub_mode_2_states[sub_mode_enum.name](state) + if sub_state is not None: + sub_state_enum = self._state_2_sub_states[state_enum.name](sub_state) + + return op_mode_enum, sub_mode_enum, state_enum, sub_state_enum Index: leahi_dialin/td/modules/events.py =================================================================== diff -u -r8b54f610f3b5c0610bea0a481b892e8c70935765 -r7ec1428451adfb2aabf7a64794e818a9916250c7 --- leahi_dialin/td/modules/events.py (.../events.py) (revision 8b54f610f3b5c0610bea0a481b892e8c70935765) +++ leahi_dialin/td/modules/events.py (.../events.py) (revision 7ec1428451adfb2aabf7a64794e818a9916250c7) @@ -14,12 +14,11 @@ # ############################################################################ +# Module imports import struct from logging import Logger from datetime import datetime -from time import time -# Module imports -from logging import Logger +from typing import Tuple # Project imports from leahi_dialin.common import td_enum_repository @@ -28,6 +27,7 @@ from leahi_dialin.protocols.CAN import CanMessenger, CanChannels from leahi_dialin.utils.abstract_classes import AbstractSubSystem from leahi_dialin.utils.base import publish +from leahi_dialin.utils.enums import DialinEnum class TDEvents(AbstractSubSystem): @@ -66,8 +66,32 @@ td_enum_repository.TDOpModes.MODE_PRET.name: td_enum_repository.TDPreTreatmentModesStates, td_enum_repository.TDOpModes.MODE_TREA.name: td_enum_repository.TDTreatmentStates, td_enum_repository.TDOpModes.MODE_POST.name: td_enum_repository.TDPostTreatmentStates, - td_enum_repository.TDOpModes.MODE_NLEG.name: td_enum_repository.TDNotLegalStates} + td_enum_repository.TDOpModes.MODE_NLEG.name: td_enum_repository.TDNotLegalStates } + # Dictionary of the sub mode as key and the state states enum class as the valued + self._sub_mode_2_states = {td_enum_repository.TDPreTreatmentModesStates.TD_PRE_TREATMENT_WATER_SAMPLE_STATE.name: td_enum_repository.TDPreTreaSampleWaterStates, + td_enum_repository.TDPreTreatmentModesStates.TD_PRE_TREATMENT_SELF_TEST_NO_CART_STATE.name: td_enum_repository.TDPreTreaNoCartSelfTestStates, + td_enum_repository.TDPreTreatmentModesStates.TD_PRE_TREATMENT_SELF_TEST_DRY_STATE.name: td_enum_repository.TDPreTreaDrySelfTestStates, + td_enum_repository.TDPreTreatmentModesStates.TD_PRE_TREATMENT_PRIME_STATE.name: td_enum_repository.TDPreTreaPrimeStates, + td_enum_repository.TDPreTreatmentModesStates.TD_PRE_TREATMENT_RECIRCULATE_STATE.name: td_enum_repository.TDPreTreaRecircStates, + td_enum_repository.TDPreTreatmentModesStates.TD_PRE_TREATMENT_PATIENT_CONNECTION_STATE.name: td_enum_repository.TDPreTreaPatientConnectStates, + td_enum_repository.TDTreatmentStates.TREATMENT_BLOOD_PRIME_STATE.name: td_enum_repository.TDTreaBloodPrimeStates, + td_enum_repository.TDTreatmentStates.TREATMENT_DIALYSIS_STATE.name:td_enum_repository.TDTreaDialysisStates, + td_enum_repository.TDTreatmentStates.TREATMENT_PAUSED_STATE.name:td_enum_repository.TDTreaPausedStates, + td_enum_repository.TDTreatmentStates.TREATMENT_RINSEBACK_STATE.name:td_enum_repository.TDTreaRinsebackStates, + td_enum_repository.TDTreatmentStates.TREATMENT_RECIRC_STATE.name:td_enum_repository.TDTreaRecircStates, + td_enum_repository.TDTreatmentStates.TREATMENT_SALINE_BOLUS_STATE.name:td_enum_repository.TDTreaBolusStates, + td_enum_repository.TDTreatmentStates.TREATMENT_HEPARIN_STATE.name:td_enum_repository.TDTreaHeparinStates, + td_enum_repository.TDTreatmentStates.TREATMENT_END_STATE.name:td_enum_repository.TDTreaEndStates } + + # Dictionary of the state as key and the sub state states enum class as the valued + self._state_2_sub_states = {td_enum_repository.TDPreTreaSampleWaterStates.SAMPLE_WATER_STATE.name: td_enum_repository.TDPreTreaSamplWaterUserActionStates, + td_enum_repository.TDPreTreaPrimeStates.TD_PRIME_WET_SELF_TESTS_STATE.name: td_enum_repository.TDWetSelfTestsStates, + td_enum_repository.TDTreaBloodPrimeStates.BLOOD_PRIME_RUN_STATE.name: td_enum_repository.TDTreaBloodPrimeUserActionStates, + td_enum_repository.TDTreaRinsebackStates.RINSEBACK_RUN_STATE.name: td_enum_repository.TDTreaRinsebackUserActionStates, + td_enum_repository.TDTreaRecircStates.TREATMENT_RECIRC_RECIRC_STATE.name: td_enum_repository.TDTreaRecircUserActionStates, + td_enum_repository.TDTreaEndStates.TREATMENT_END_WAIT_FOR_RINSEBACK_STATE.name: td_enum_repository.TDTreaEndUserActionStates } + # Loop through the list of the TD events enums and initial the event dictionary. Each event is a key in the # dictionary and the value is a list. self._event_dictionary = dict() @@ -278,7 +302,8 @@ event_tuple = (current_timestamp, event_enum.name, event_data_1, event_data_2) elif event_enum is td_enum_repository.TDEventList.TD_EVENT_OPERATION_STATUS: - event_tuple = (current_timestamp, op_mode, sub_mode, sub_state) + op_mode_enum, sub_mode_enum, state_enum, _ = self._operation_status_match(op_mode=op_mode, sub_mode=sub_mode, state=sub_state) + event_tuple = (current_timestamp, op_mode_enum, sub_mode_enum, state_enum) # Update event dictionary self._event_dictionary[event_enum.name].append(event_tuple) @@ -301,3 +326,27 @@ self.process_into_vars(decoder_list = msg_list, message = message) self.event_op_mode_timestamp = timestamp + + + def _operation_status_match(self, op_mode: int, sub_mode: int=None, state:int=None, sub_state: int=None) -> Tuple[DialinEnum, DialinEnum, DialinEnum, DialinEnum]: + """ + Convert operation status values to enums. + + :param op_mode: (Integer) The operation mode value + :param sub_mode: (Integer) The operation sub mode value + :param state: (Integer) The operation state value + :param sub_state: (Integer) The operation sub state value + :return: Returns the DialinEnum for each provied mode/state + """ + op_mode_enum = td_enum_repository.TDOpModes(op_mode) + sub_mode_enum = None + state_enum = None + sub_state_enum = None + if sub_mode is not None: + sub_mode_enum = self._op_mode_2_sub_mode[op_mode_enum.name](sub_mode) + if state is not None: + state_enum = self._sub_mode_2_states[sub_mode_enum.name](state) + if sub_state is not None: + sub_state_enum = self._state_2_sub_states[state_enum.name](sub_state) + + return op_mode_enum, sub_mode_enum, state_enum, sub_state_enum