Index: DialityCoreCanProtocol.py =================================================================== diff -u -r7e8f523c6ecb0a8fe78714e66507af7bc1e286cb -r08bdd97f4bf72851052fd1e44178335bea9401e4 --- DialityCoreCanProtocol.py (.../DialityCoreCanProtocol.py) (revision 7e8f523c6ecb0a8fe78714e66507af7bc1e286cb) +++ DialityCoreCanProtocol.py (.../DialityCoreCanProtocol.py) (revision 08bdd97f4bf72851052fd1e44178335bea9401e4) @@ -18,6 +18,7 @@ import threading import can import math +import time from time import sleep import sys @@ -338,7 +339,7 @@ class DenaliCanMessenger: START_BYTE = DenaliMessage.START_BYTE - DIALIN_MSG_RESP_TO = 1 # number of seconds to wait for a response to a sent command + DIALIN_MSG_RESP_TO = 0.1 # number of seconds to wait for a response to a sent command def __init__(self, can_interface='can0'): """ @@ -415,6 +416,9 @@ channel_id = message.arbitration_id message_length = can_data[DenaliMessage.PAYLOAD_LENGTH_INDEX] + # TEST CODE - REMOVE + #print(str(time.time())+" " + str(channel_id) + " " + str(can_data)) + # if we are building a long message, then proceed to push it to the channel dictionary if channel_id in self.__longMsgChannelIDSet: self.__dialinMessageList = self.__longMessageBuilders[channel_id].push(can_data) @@ -434,7 +438,9 @@ self.__dialinMessageList = None else: # if we do have a builder. This is the first time - self.__dialinMessageList = self.__longMessageBuilders[channel_id].push(can_data, first_packet=True) +# self.__dialinMessageList = self.__longMessageBuilders[channel_id].push(can_data, first_packet=True) + self.__longMessageBuilders[channel_id].push(can_data, first_packet=True) + self.__dialinMessageList = None # Do we have a complete (long or short) Denali Message? if self.__dialinMessageList is not None: @@ -538,6 +544,7 @@ #print(packet) # self.__bus.send(packet, 0.01) self.__bus.send(packet, 0) + #sleep(0.002) # Sending self.__dialinCommandResponseMessage = None @@ -553,6 +560,7 @@ elif time_out == 0: msg_sent = True else: + #msg_sent = False print("No response. Re-sending message.") # We are ready to send again. Reset request ID appropriately Index: HemodialysisDevice.py =================================================================== diff -u -r7e8f523c6ecb0a8fe78714e66507af7bc1e286cb -r08bdd97f4bf72851052fd1e44178335bea9401e4 --- HemodialysisDevice.py (.../HemodialysisDevice.py) (revision 7e8f523c6ecb0a8fe78714e66507af7bc1e286cb) +++ HemodialysisDevice.py (.../HemodialysisDevice.py) (revision 08bdd97f4bf72851052fd1e44178335bea9401e4) @@ -351,6 +351,8 @@ # Alarms message IDs MSG_ID_HD_ALARMS_PUBLISHED_STATUS = 0x0002 + MSG_ID_HD_ALARM_ACTIVATE = 0x0003 + MSG_ID_HD_ALARM_CLEAR = 0x0004 MSG_ID_HD_ALARM_LAMP_OVERRIDE = 0x8004 MSG_ID_HD_ALARM_STATE_OVERRIDE = 0x8006 MSG_ID_HD_ALARM_TIME_OVERRIDE = 0x8007 @@ -374,9 +376,11 @@ START_POS_ALARM_ESCALATES_IN = END_POS_ALARM_SILENCE_EXPIRES_IN END_POS_ALARM_ESCALATES_IN = START_POS_ALARM_ESCALATES_IN + 4 START_POS_ALARMS_FLAGS = END_POS_ALARM_ESCALATES_IN - END_POS_ALARMS_FLAGS = START_POS_ALARMS_FLAGS + 2 + START_POS_ALARM_ID = DenaliMessage.PAYLOAD_START_INDEX + END_POS_ALARM_ID = START_POS_ALARM_ID + 2 + def __init__(self, outer_instance, can_interface=None): """ HD_Alarms constructor @@ -393,12 +397,27 @@ can_interface.registerReceivingPublicationFunction(channel_id, msg_id, self.handlerAlarmsStatusSyncFunction) + channel_id = DenaliChannels.hd_alarm_broadcast_ch_id + msg_id = self.MSG_ID_HD_ALARM_ACTIVATE + can_interface.registerReceivingPublicationFunction(channel_id, msg_id, + self.handlerAlarmActivateFunction) + channel_id = DenaliChannels.hd_alarm_broadcast_ch_id + msg_id = self.MSG_ID_HD_ALARM_CLEAR + can_interface.registerReceivingPublicationFunction(channel_id, msg_id, + self.handlerAlarmClearFunction) + + # composite alarm status based on latest HD alarm status broadcast message self.alarmsState = 0 self.alarmTop = 0 self.alarmsSilenceExpiresIn = 0 self.alarmsEscalatesIn = 0 self.alarmsFlags = 0 + # alarm states based on received HD alarm activation and alarm clear messages + self.alarmStates = [False] * 50 +# for x in range(0,511): +# self.alarmStates.append(False) + def handlerAlarmsStatusSyncFunction(self, message): """ Handles published alarms status messages. Alarms status data are captured @@ -424,6 +443,28 @@ message['message'][self.START_POS_ALARMS_FLAGS:self.END_POS_ALARMS_FLAGS]), byteorder=DenaliMessage.BYTE_ORDER) + def handlerAlarmActivateFunction(self, message): + """ + Handles published HD alarm activation messages. + + \param message: published HD alarm activation message + \returns none + """ + + alarmID = struct.unpack('