Index: dialin/ui/dg_simulator.py =================================================================== diff -u -r3a70bfb451b74106348c064c34f19934aadd9119 -r31253b275668037e04d308fae4ffdd533ba5b19a --- dialin/ui/dg_simulator.py (.../dg_simulator.py) (revision 3a70bfb451b74106348c064c34f19934aadd9119) +++ dialin/ui/dg_simulator.py (.../dg_simulator.py) (revision 31253b275668037e04d308fae4ffdd533ba5b19a) @@ -445,28 +445,43 @@ self.can_interface.send(message, 0) def cmd_send_version_dg_data(self, major: int, minor: int, micro: int, build: int, - fpga_id: int, fpga_major: int, fpga_minor: int, fpga_lab: int) -> None: + fpga_id: int, fpga_major: int, fpga_minor: int, fpga_lab: int, + compatibility_rev: int) -> None: """ + [0x1E00] # 30 0x080 Rsp Y DG All + DG f/w version + U08=Major + U08=Minor + U08=Micro + U16=Build + U08=FPGA ID + U08=FPGA Major + U08=FPGA Minor + U08=FPGA Lab + U32=compatibility rev + --- the dg version response message method - @param major: integer - Major version number - @param minor: integer - Minor version number - @param micro: integer - Micro version number - @param build: integer - Build version number - @param fpga_id: integer - FPGA id version number - @param fpga_major: integer - FPGA Major version number - @param fpga_minor: integer - FPGA Minor version number - @param fpga_lab: integer - FPGA Lab version number + @param major: (uint) - Major version number + @param minor: (uint) - Minor version number + @param micro: (uint) - Micro version number + @param build: (uint) - Build version number + @param fpga_id: (int) - FPGA id version number + @param fpga_major: (int) - FPGA Major version number + @param fpga_minor: (int) - FPGA Minor version number + @param fpga_lab: (int) - FPGA Lab version number + @param compatibility_rev: (uint) - The FWs/UI compatibility revision @return: None """ - payload = byte_to_bytearray(major) - payload += byte_to_bytearray(minor) - payload += byte_to_bytearray(micro) - payload += short_to_bytearray(build) - payload += byte_to_bytearray(fpga_id) - payload += byte_to_bytearray(fpga_major) - payload += byte_to_bytearray(fpga_minor) - payload += byte_to_bytearray(fpga_lab) + payload = unsigned_byte_to_bytearray(major) + payload += unsigned_byte_to_bytearray(minor) + payload += unsigned_byte_to_bytearray(micro) + payload += unsigned_short_to_bytearray(build) + payload += unsigned_byte_to_bytearray(fpga_id) + payload += unsigned_byte_to_bytearray(fpga_major) + payload += unsigned_byte_to_bytearray(fpga_minor) + payload += unsigned_byte_to_bytearray(fpga_lab) + payload += unsigned_integer_to_bytearray(compatibility_rev) message = DenaliMessage.build_message(channel_id=DenaliChannels.dg_sync_broadcast_ch_id, message_id=MsgIds.MSG_ID_DG_VERSION.value, @@ -591,7 +606,7 @@ has_parameters: bool = False, parameters_payload: any = 0x00) -> None: """ - a general method to send any standard response message, by it's id and list of paramters. + a general method to send any standard response message, by it's id and list of parameters. @param message_id: the id of the message @param accepted: the standard accepted parameter of any response message @param reason: the standard rejection reason parameter of any response message @@ -607,7 +622,7 @@ payload += integer_to_bytearray(reason) if has_parameters: - payload += parameters_payload + payload = parameters_payload message = DenaliMessage.build_message(channel_id=DenaliChannels.dg_to_ui_ch_id, message_id=message_id, Index: dialin/ui/hd_simulator.py =================================================================== diff -u -r8ff49bb248b9b98b18dde057d836b5c2d308922c -r31253b275668037e04d308fae4ffdd533ba5b19a --- dialin/ui/hd_simulator.py (.../hd_simulator.py) (revision 8ff49bb248b9b98b18dde057d836b5c2d308922c) +++ dialin/ui/hd_simulator.py (.../hd_simulator.py) (revision 31253b275668037e04d308fae4ffdd533ba5b19a) @@ -1458,28 +1458,43 @@ self.can_interface.send(message, 0) def cmd_send_version_hd_data(self, major: int, minor: int, micro: int, build: int, - fpga_id: int, fpga_major: int, fpga_minor: int, fpga_lab: int) -> None: + fpga_id: int, fpga_major: int, fpga_minor: int, fpga_lab: int, + compatibility_rev: int) -> None: """ - the hd version response message method - @param major: integer - Major version number - @param minor: integer - Minor version number - @param micro: integer - Micro version number - @param build: integer - Build version number - @param fpga_id: integer - FPGA id version number - @param fpga_major: integer - FPGA Major version number - @param fpga_minor: integer - FPGA Minor version number - @param fpga_lab: integer - FPGA Lab version number + [0x1D00] # 29 0x040 Rsp Y HD All + HD f/w version + U08=Major + U08=Minor + U08=Micro + U16=Build + U08=FPGA ID + U08=FPGA Major + U08=FPGA Minor + U08=FPGA Lab + U32=compatibility rev + --- + the dg version response message method + @param major: (uint) - Major version number + @param minor: (uint) - Minor version number + @param micro: (uint) - Micro version number + @param build: (uint) - Build version number + @param fpga_id: (int) - FPGA id version number + @param fpga_major: (int) - FPGA Major version number + @param fpga_minor: (int) - FPGA Minor version number + @param fpga_lab: (int) - FPGA Lab version number + @param compatibility_rev: (uint) - The FWs/UI compatibility revision @return: None """ - payload = byte_to_bytearray(major) - payload += byte_to_bytearray(minor) - payload += byte_to_bytearray(micro) - payload += short_to_bytearray(build) - payload += byte_to_bytearray(fpga_id) - payload += byte_to_bytearray(fpga_major) - payload += byte_to_bytearray(fpga_minor) - payload += byte_to_bytearray(fpga_lab) + payload = unsigned_byte_to_bytearray(major) + payload += unsigned_byte_to_bytearray(minor) + payload += unsigned_byte_to_bytearray(micro) + payload += unsigned_short_to_bytearray(build) + payload += unsigned_byte_to_bytearray(fpga_id) + payload += unsigned_byte_to_bytearray(fpga_major) + payload += unsigned_byte_to_bytearray(fpga_minor) + payload += unsigned_byte_to_bytearray(fpga_lab) + payload += unsigned_integer_to_bytearray(compatibility_rev) message = DenaliMessage.build_message(channel_id=DenaliChannels.hd_sync_broadcast_ch_id, message_id=MsgIds.MSG_ID_HD_VERSION.value, @@ -1743,20 +1758,20 @@ payload = integer_to_bytearray(accepted) payload += integer_to_bytearray(reason) - payload += unsigned_to_bytearray(int(bood_flow_rate)) - payload += unsigned_to_bytearray(int(dialysate_flow_rate)) - payload += unsigned_to_bytearray(int(treatment_duration)) - payload += unsigned_to_bytearray(int(actual_treatment_duration)) - payload += unsigned_to_bytearray(int(acid_concentrate_type)) - payload += unsigned_to_bytearray(int(bicarbonate_concentrate_type)) - payload += unsigned_to_bytearray(int(potassium_concentration)) - payload += unsigned_to_bytearray(int(calcium_concentration)) - payload += unsigned_to_bytearray(int(bicarbonate_concentration)) - payload += unsigned_to_bytearray(int(sodium_concentration)) + payload += unsigned_integer_to_bytearray(int(bood_flow_rate)) + payload += unsigned_integer_to_bytearray(int(dialysate_flow_rate)) + payload += unsigned_integer_to_bytearray(int(treatment_duration)) + payload += unsigned_integer_to_bytearray(int(actual_treatment_duration)) + payload += unsigned_integer_to_bytearray(int(acid_concentrate_type)) + payload += unsigned_integer_to_bytearray(int(bicarbonate_concentrate_type)) + payload += unsigned_integer_to_bytearray(int(potassium_concentration)) + payload += unsigned_integer_to_bytearray(int(calcium_concentration)) + payload += unsigned_integer_to_bytearray(int(bicarbonate_concentration)) + payload += unsigned_integer_to_bytearray(int(sodium_concentration)) payload += float_to_bytearray(float(dialysate_temperature)) - payload += unsigned_to_bytearray(int(dialyzer_type)) - payload += unsigned_to_bytearray(int(treatment_start_date_time)) - payload += unsigned_to_bytearray(int(treatment_end_date_time)) + payload += unsigned_integer_to_bytearray(int(dialyzer_type)) + payload += unsigned_integer_to_bytearray(int(treatment_start_date_time)) + payload += unsigned_integer_to_bytearray(int(treatment_end_date_time)) payload += float_to_bytearray(float(average_blood_flow)) payload += float_to_bytearray(float(average_dialysate_flow)) payload += float_to_bytearray(float(dialysate_volume_used)) @@ -1765,15 +1780,15 @@ payload += float_to_bytearray(float(actual_uf_volume)) payload += float_to_bytearray(float(target_uf_rate)) payload += float_to_bytearray(float(actual_uf_rate)) - payload += unsigned_to_bytearray(int(saline_bolus_volume)) + payload += unsigned_integer_to_bytearray(int(saline_bolus_volume)) payload += float_to_bytearray(float(heparin_bolus_volume)) payload += float_to_bytearray(float(heparin_dispense_rate)) - payload += unsigned_to_bytearray(int(heparin_pre_stop)) + payload += unsigned_integer_to_bytearray(int(heparin_pre_stop)) payload += float_to_bytearray(float(heparin_delivered_volume)) payload += float_to_bytearray(float(average_arterial_pressure)) payload += float_to_bytearray(float(average_venous_pressure)) - payload += unsigned_to_bytearray(int(device_id)) - payload += unsigned_to_bytearray(int(water_sample_test_result)) + payload += unsigned_integer_to_bytearray(int(device_id)) + payload += unsigned_integer_to_bytearray(int(water_sample_test_result)) message = DenaliMessage.build_message(channel_id=DenaliChannels.hd_to_ui_ch_id, message_id=MsgIds.MSG_ID_HD_TREATMENT_LOG_DATA_RESPONSE.value, @@ -1950,7 +1965,7 @@ has_parameters: bool = False, parameters_payload: any = 0x00) -> None: """ - a general method to send any standard response message, by it's id and list of paramters. + a general method to send any standard response message, by it's id and list of parameters. @param message_id: the id of the message @param accepted: the standard accepted parameter of any response message @param reason: the standard rejection reason parameter of any response message @@ -1966,7 +1981,7 @@ payload += integer_to_bytearray(reason) if has_parameters: - payload += parameters_payload + payload = parameters_payload message = DenaliMessage.build_message(channel_id=DenaliChannels.hd_to_ui_ch_id, message_id=message_id, Index: dialin/utils/conversions.py =================================================================== diff -u -r3a70bfb451b74106348c064c34f19934aadd9119 -r31253b275668037e04d308fae4ffdd533ba5b19a --- dialin/utils/conversions.py (.../conversions.py) (revision 3a70bfb451b74106348c064c34f19934aadd9119) +++ dialin/utils/conversions.py (.../conversions.py) (revision 31253b275668037e04d308fae4ffdd533ba5b19a) @@ -16,7 +16,9 @@ import struct from typing import List, Union +# https://docs.python.org/3/library/struct.html#format-characters + def byte_to_bytearray(val: int) -> bytes: """ Converts a byte value into a byte array (little endian) @@ -29,6 +31,18 @@ return struct.pack(" bytes: + """ + Converts a byte value into a byte array (little endian) + + @param val: (int) integer to convert to byte array + @return: byte array + """ + if type(val) != int: + raise ValueError("Expected integer but received {0} with type {1}".format(val, type(val))) + return struct.pack(" bytes: """ Converts a short integer (2 bytes) value into a byte array (little endian) @@ -65,7 +79,7 @@ return struct.pack(" bytes: +def unsigned_integer_to_bytearray(val: int) -> bytes: """ Converts an integer value into a byte array (little endian)