Index: leahi_dialin/dd/modules/events.py =================================================================== diff -u -r3f4937e339925dde0b95f08e49969f8983c5cba4 -r862daa5b6357ddaba02aa7d1fb9d0952e4a16e6f --- leahi_dialin/dd/modules/events.py (.../events.py) (revision 3f4937e339925dde0b95f08e49969f8983c5cba4) +++ leahi_dialin/dd/modules/events.py (.../events.py) (revision 862daa5b6357ddaba02aa7d1fb9d0952e4a16e6f) @@ -17,6 +17,7 @@ # Module imports from logging import Logger from datetime import datetime +from typing import Tuple # Project imports from leahi_dialin.common import dd_enum_repository @@ -25,6 +26,7 @@ from leahi_dialin.protocols.CAN import CanMessenger, CanChannels from leahi_dialin.utils.abstract_classes import AbstractSubSystem, LocalVars from leahi_dialin.utils.base import publish +from leahi_dialin.utils.enums import DialinEnum class DDEvents(AbstractSubSystem): @@ -49,7 +51,7 @@ self.events_timestamp = 0.0 #: The timestamp of the last Event message - # Dictionary of the mode as key and the sub mode states enum class as the value + # Dictionary of the mode as key and the sub mode enum class as the value self._op_mode_2_sub_mode = {dd_enum_repository.DDOpModes.MODE_FAUL.name: dd_enum_repository.DDFaultStates, dd_enum_repository.DDOpModes.MODE_SERV.name: dd_enum_repository.DDServiceStates, dd_enum_repository.DDOpModes.MODE_INIT.name: dd_enum_repository.DDInitStates, @@ -62,6 +64,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 enum class as the value + 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 enum class as the value + 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() @@ -208,7 +218,8 @@ event_tuple = (current_timestamp, event_enum.name, data_1.value, data_2.value) elif event_enum is dd_enum_repository.DDEventList.DD_EVENT_OPERATION_STATUS: - event_tuple = (current_timestamp, op_mode.value, sub_mode.value, state.value) + 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) @@ -274,3 +285,27 @@ list_of_events = self._event_dictionary[dd_enum_repository.DDEventList(event_id).name] return list_of_events + + + 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