########################################################################### # # Copyright (c) 2020-2023 Diality Inc. - All Rights Reserved. # # THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN # WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. # # @file dd_ui_request_handler.py # @author (last) Mohammad Suleiman # @date (original) 11--2023 # ############################################################################ from ..common import * from ..protocols.CAN import DenaliChannels from ..utils import * from copy import deepcopy from . import pressure_ranges as pr def ui_post_final_test_result(parent): rsp_id = None rsp_payload = None parent.demoSelection = 1 # setup event to change Mode parent.demoCount = 0 parent.demoCounter = 1 return rsp_id, rsp_payload def ui_confirmation_result_response_99(parent): rsp_id = MsgIds.MSG_ID_HD_UI_CONFIRMATION_REQUEST rsp_payload = integer_to_bytearray(98) rsp_payload += integer_to_bytearray(0) # TBD use consts rsp_payload += integer_to_bytearray(0) parent.pause_demoSelection = parent.demoSelection # setup event to change state on demoTimer parent.pause_demoCount = parent.demoCount parent.pause_demoId = parent.demoCountdownId parent.demoGroupCounter += parent.demoCounter parent.demoSelection = 0 # setup event to change state on demoTimer parent.demoCount = 0 return rsp_id, rsp_payload def ui_confirmation_result_98(parent): rsp_id = MsgIds.MSG_ID_HD_UI_CONFIRMATION_REQUEST rsp_payload = integer_to_bytearray(98) # TBD! Use const for 99 rsp_payload += integer_to_bytearray(3) # TBD use consts rsp_payload += integer_to_bytearray(0) if parent.params.data_int[1] == EResponse.Accepted: # Reset the Demo parent.demoSelection = 1 # setup event to change Mode parent.demoCount = 0 parent.demoCounter = 1 else: # EResponse.Rejected - Just Jump Forward on any current counter parent.demoSelection = parent.pause_demoSelection # setup event to change state on demoTimer parent.demoCountdownId = parent.pause_demoId parent.demoCount = parent.pause_demoCount parent.demoCounter = parent.demoCount - 1 if parent.demoSelection == 42: # Rinseback in process; short cycle it parent.rinseback_volume_out_ml = parent.rinseback_volume_set_ml - 1 parent.rinseback_volume_all_ml = parent.rinseback_volume_out_ml if parent.demoSelection == 5: parent.demoCountdownChannel = DenaliChannels.dg_to_ui_ch_id return rsp_id, rsp_payload def ui_confirmation_result_response_6(parent): # UI sends this when rsp_id = MsgIds.MSG_ID_HD_UI_CONFIRMATION_REQUEST rsp_payload = integer_to_bytearray(6) if parent.params.data_int[1] == EResponse.Accepted: rsp_payload += integer_to_bytearray(1) rsp_payload += integer_to_bytearray(0) parent.demoSelection = 61 # setup event to change Mode elif parent.params.data_int[1] == 0: rsp_payload += integer_to_bytearray(3) rsp_payload += integer_to_bytearray(0) parent.demoCount = 0 parent.demoCounter = 0 return rsp_id, rsp_payload def ui_service_mode_request(parent): rsp_id = MsgIds.MSG_ID_HD_OP_MODE_DATA # 37, 0x2500 rsp_payload = integer_to_bytearray(HDOpModes.MODE_SERV.value) rsp_payload += integer_to_bytearray(RequestRejectReasons.REQUEST_REJECT_REASON_NONE.value) #integer_to_bytearray(RequestRejectReasons.REQUEST_REJECT_REASON_NONE.value) return rsp_id, rsp_payload def ui_initiate_treatment_request(parent): rsp_id = MsgIds.MSG_ID_HD_OP_MODE_DATA if parent.params.data_int[0] == EResponse.Accepted: rsp_payload = integer_to_bytearray(HDOpModes.MODE_TPAR.value) else: rsp_payload = integer_to_bytearray(HDOpModes.MODE_STAN.value) rsp_payload += integer_to_bytearray(0) return rsp_id, rsp_payload def ui_new_treatment_params_request(parent): rsp_id = MsgIds.MSG_ID_HD_NEW_TREATMENT_PARAMS_RESPONSE rsp_payload = struct.pack("<" + str(TreatmentParameters.NUM_OF_TREATMENT_PARAMS.value + 1) + "i", 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ) parent.demo_treatment_params = deepcopy(parent.params) # keep a complete copy # UF Treatment parent.treatment_time_sec = parent.params.data_int[TreatmentParameters.TREATMENT_PARAM_TREATMENT_DURATION_MIN.value] * 60 parent.uf_volume_set_l = 0 # TBD not in this message parent.uf_volume_out_l = 0 # reset status parent.uf_rate_l_per_sec = 0 parent.salineVolume_ml = 0.0 # status parent.salineVolCum_ml = 0.0 # status parent.dialysate_flow_set_point_ml_per_min = parent.params.data_int[TreatmentParameters.TREATMENT_PARAM_DIALYSATE_FLOW_RATE_ML_MIN.value] parent.blood_flow_set_point_ml_per_min = parent.params.data_int[TreatmentParameters.TREATMENT_PARAM_BLOOD_FLOW_RATE_ML_MIN.value] # rsp_id = MsgIds.MSG_ID_HD_PRESSURE_LIMITS_CHANGE_RESPONSE parent.cmd_send_treatment_adjust_pressures_limit_response( accepted=EResponse.Accepted, reason=RequestRejectReasons.REQUEST_REJECT_REASON_NONE.value, arterial_pressure_limit_window=parent.demo_treatment_params.data_int[TreatmentParameters.TREATMENT_PARAM_ART_PRES_LIMIT_WINDOW.value], venous_pressure_limit_window=parent.demo_treatment_params.data_int[TreatmentParameters.TREATMENT_PARAM_VEN_PRES_LIMIT_WINDOW.value], venous_pressure_limit_asymmetric=parent.demo_treatment_params.data_int[TreatmentParameters.TREATMENT_PARAM_VEN_PRES_LIMIT_ASYMMETRIC.value] ) parent.arterial_pressure_mid_mmHg = ( pr.PressureRanges.ARTERIAL_PRESSURE_LIMIT_MIN_MMHG + pr.PressureRanges.ARTERIAL_PRESSURE_LIMIT_MAX_MMHG ) / 2 parent.venous_pressure_mid_mmHg = ( pr.PressureRanges.VENOUS_PRESSURE_LIMIT_MIN_MMHG + pr.PressureRanges.VENOUS_PRESSURE_LIMIT_MAX_MMHG ) / 2 parent.arterial_pressure_mmHg = parent.arterial_pressure_mid_mmHg - 32.0 # simulation parent.venous_pressure_mmHg = parent.venous_pressure_mid_mmHg + 32 # simulation # Rinseback parent.rinseback_volume_set_ml = 80 + 120 # TBD! 80 + should be based on dialyzer blood volume? parent.rinsebackVelocity_ml_per_sec = parent.params.data_int[TreatmentParameters.TREATMENT_PARAM_RINSEBACK_FLOW_RATE_ML_MIN.value] / 60.0 parent.rinseback_volume_out_ml = 0 # reset status parent.rinseback_volume_all_ml = 0 # Heparin parent.heparin_stop_min = parent.params.data_int[TreatmentParameters.TREATMENT_PARAM_HEPARIN_PRESTOP_MIN.value] parent.heparin_rate_ml_per_hr = parent.params.data_float[TreatmentParameters.TREATMENT_PARAM_HEPARIN_DISPENSE_RATE_ML_HR.value] parent.heparin_rate_ml_per_s = parent.heparin_rate_ml_per_hr / 3600.0 parent.heparin_bolus_ml = parent.params.data_float[TreatmentParameters.TREATMENT_PARAM_HEPARIN_BOLUS_VOLUME_ML.value] parent.heparin_out_ml = 0 # reset status parent.heparin_pause = False # setting parent.heparin_expected_ml = (((parent.treatment_time_sec / 60.0) - parent.heparin_stop_min) / 60.0 * parent.heparin_rate_ml_per_hr + parent.heparin_bolus_ml) # 'Secret' speed setting: 10x heparin bolus volume, when heparinStopTime=430 and heparinRate is OFF # if math.isclose(sto, 430) and math.isclose(hdr, 0) and (hbv > 0.199): # parent.demoSpeed = int(hbv * 10 + 0.5) # else: # parent.demoSpeed = 1 return rsp_id, rsp_payload def ui_user_confirm_treatment_request(parent): if parent.params.data_int[0] == EResponse.Accepted: parent.salineVolume_ml = 0.0 parent.salineVolCum_ml = 0.0 rsp_id = MsgIds.MSG_ID_PRE_TREATMENT_STATE_DATA rsp_payload = struct.pack( "<" + str(PreTreatmentSubModes.NUM_OF_HD_PRE_TREATMENT_STATES.value + 1) + "i", PreTreatmentSubModes.HD_PRE_TREATMENT_WATER_SAMPLE_STATE.value, PreTreatmentSampleWaterStates.SAMPLE_WATER_SETUP_STATE.value, # 0 Water sample state 0, # 1 Consumable self-tests state 0, # 2 No cartridge self-tests state 0, # 3 Consumable and cartridge installation state 0, # 4 Self-tests when the cartridge is dry state 0, # 5 Prime blood and dialysate circuits and run wet self-tests state 0, # 6 Re-circulate blood and dialysate circuits state 0, # 7 Patient connection state 0, 0 ) parent.demoSelection = 4 # TBD setup event to change to Filter Flush parent.demoCount = 0 # immediately act on next timer tick parent.demoCounter = 0 else: # elif request_val == EResponse.Rejected: rsp_id = MsgIds.MSG_ID_HD_NEW_TREATMENT_PARAMS_RESPONSE rsp_payload = integer_to_bytearray(EResponse.Rejected) rsp_payload += integer_to_bytearray(0) return rsp_id, rsp_payload def ui_sample_water_result(parent): if parent.params.data_int[0] == EResponse.Accepted: ## TBD!!! FOLLOWING IS FUTILE ATTEMPT TO SET UF MAX calc_max_uf_volume = min(int(parent.MAX_UF_RATE_ML_PER_SEC * parent.treatment_time_sec / 100.0) * 100.0, parent.MAX_UF_ML_PER_TX) parent.cmd_set_treatment_parameter_ranges(min_treatment_duration=0, max_treatment_duration=480, min_uf_volume=0.0, max_uf_volume=calc_max_uf_volume, min_dialysate_flow_rate=100, max_dialysate_flow_rate=600) parent.demoTimedIncValue = PreTreatmentConsumableSelfTestStates.CONSUMABLE_SELF_TESTS_INSTALL_STATE.value rsp_id = MsgIds.MSG_ID_PRE_TREATMENT_STATE_DATA rsp_payload = struct.pack( "<" + str(PreTreatmentSubModes.NUM_OF_HD_PRE_TREATMENT_STATES.value + 1) + "i", PreTreatmentSubModes.HD_PRE_TREATMENT_SELF_TEST_CONSUMABLE_STATE.value, 0, # 0 Water sample state parent.demoTimedIncValue, # 1 Consumable self-tests state 0, # 2 No cartridge self-tests state 0, # 3 Consumable and cartridge installation state 0, # 4 Self-tests when the cartridge is dry state 0, # 5 Prime blood and dialysate circuits and run wet self-tests state 0, # 6 Re-circulate blood and dialysate circuits state 0, # 7 Patient connection state 0, 0 ) parent.demoSelection = 0 # Wait for user parent.demoCount = 3 # TBD! setup quick action: 3 timer ticks each step parent.demoCounter = 0 else: # elif request_val == EResponse.Rejected: # 'Secret' jump over pre-treatment when user fails the water test rsp_id = MsgIds.MSG_ID_PRE_TREATMENT_STATE_DATA rsp_payload = struct.pack( "<" + str(PreTreatmentSubModes.NUM_OF_HD_PRE_TREATMENT_STATES.value + 1) + "i", PreTreatmentSubModes.HD_PRE_TREATMENT_PATIENT_CONNECTION_STATE.value, 0, # 0 Water sample state 0, # 1 Consumable self-tests state 0, # 2 No cartridge self-tests state 0, # 3 Consumable and cartridge installation state 0, # 4 Self-tests when the cartridge is dry state 0, # 5 Prime blood and dialysate circuits and run wet self-tests state 0, # 6 Re-circulate blood and dialysate circuits state 0, # 7 TBD! Patient connection state 0, 0 ) parent.demoSelection = 0 # Wait for user return rsp_id, rsp_payload def ui_consumable_install_confirm_request(parent): rsp_id = None rsp_payload = None ## TBD!!! Does this work? calc_max_uf_volume = min(int(parent.MAX_UF_RATE_ML_PER_SEC * parent.treatment_time_sec / 100.0) * 100.0, parent.MAX_UF_ML_PER_TX) # assuming everything is setup in preceding MSG_ID_UI_SAMPLE_WATER_RESULT handling parent.demoSelection = 6 # TBD setup event to change to parent.demoCounter = parent.demoCount # next tick parent.demoCount = 3 # TBD redundant with above? parent.demoCounter = parent.demoCount # immediate # 1. TBD Note: this will be skipped as an output parent.demoTimedIncValue = PreTreatmentConsumableSelfTestStates.CONSUMABLE_SELF_TESTS_PRIME_STATE.value return rsp_id, rsp_payload def ui_installation_confirm_request(parent): rsp_id = None rsp_payload = None # TBD!! Is this needed to clear UI from presenting old data? parent.cmd_set_treatment_saline_bolus_data(target=parent.demo_treatment_params.data_int[ TreatmentParameters.TREATMENT_PARAM_SALINE_BOLUS_VOLUME_ML.value], cumulative=0.0, delivered=0.0) parent.demoTimedIncValue = PreTreatmentDrySelfTestsStates.DRY_SELF_TESTS_START_STATE.value parent.demoSelection = 9 # TBD setup event to change to test completions parent.demoCount = 4 # 4 timer ticks each for 12-16 TBD?? parent.demoCounter = parent.demoCount parent.demoCountdownId = MsgIds.MSG_ID_HD_DRY_SELF_TEST_PROGRESS_DATA # aggregate # PreTreatmentDrySelfTestsStates.NUM_OF_DRY_SELF_TESTS_STATES * 2 parent.demoGroupCounter = -parent.demoCounter # start displayed timer progressing with the Counter # aggregate counter TBD! calc the 13 parent.demoGroupCount = PreTreatmentDrySelfTestsStates.NUM_OF_DRY_SELF_TESTS_STATES.value * parent.demoCount return rsp_id, rsp_payload def ui_start_prime_request(parent): rsp_id = None rsp_payload = None parent.demoSelection = 10 # continue on, picking up from previous state setup by selection 9 parent.demoCount = 5 parent.demoCounter = parent.demoCount # TBD! creates illusion of starting parent.demoGroupCount = PreTreatmentPrimeStates.NUM_OF_HD_PRIME_STATES.value * parent.demoCount # aggregate counter parent.demoGroupCounter = 0 # aggregate counter TBD SHOULD be handled by previous group end logic (?) return rsp_id, rsp_payload def ui_patient_connection_begin_request(parent): rsp_id = None rsp_payload = None # TBD!!! Setup UF Range before this rsp_id = MsgIds.MSG_ID_HD_PATIENT_CONNECTION_BEGIN_RESPONSE rsp_payload = integer_to_bytearray(EResponse.Accepted) rsp_payload += integer_to_bytearray(RequestRejectReasons.REQUEST_REJECT_REASON_NONE.value) parent.demoSelection = 12 return rsp_id, rsp_payload def ui_set_uf_volume_parameter_request(parent): rsp_id = MsgIds.MSG_ID_HD_SET_UF_VOLUME_PARAMETER_RESPONSE rsp_payload = integer_to_bytearray(EResponse.Accepted) rsp_payload += integer_to_bytearray(RequestRejectReasons.REQUEST_REJECT_REASON_NONE.value) rsp_payload += integer_to_bytearray(parent.params.data_int[0]) # echo back setting parent.uf_volume_set_l = parent.params.data_float[0] / 1000.0 # TBD!! passed as mL instead if (parent.uf_volume_set_l is not None) and (parent.uf_volume_set_l >= 0.0009) and ( parent.uf_stop_time_sec is not None): parent.uf_rate_l_per_sec = parent.uf_volume_set_l / (parent.treatment_time_sec - parent.uf_stop_time_sec) else: parent.uf_rate_l_per_sec = 0 parent.demoSelection = 0 # Wait for user return rsp_id, rsp_payload def ui_patient_connection_confirm_request(parent): rsp_id = MsgIds.MSG_ID_HD_PATIENT_CONNECTION_CONFIRM_RESPONSE rsp_payload = integer_to_bytearray(EResponse.Accepted) rsp_payload += integer_to_bytearray(RequestRejectReasons.REQUEST_REJECT_REASON_NONE.value) parent.demoSelection = 0 # Wait for user return rsp_id, rsp_payload def ui_start_treatment_request(parent): rsp_id = MsgIds.MSG_ID_HD_START_TREATMENT_RESPONSE rsp_payload = integer_to_bytearray(EResponse.Accepted) rsp_payload += integer_to_bytearray(RequestRejectReasons.REQUEST_REJECT_REASON_NONE.value) parent.demoSelection = 20 # Start Treatment parent.demoCount = 0 # immediately return rsp_id, rsp_payload def ui_user_treatment_time_change_request(parent): rsp_id = MsgIds.MSG_ID_USER_TREATMENT_TIME_CHANGE_RESPONSE if parent.params.data_int[0] is not None: if parent.params.data_int[0] == 4 * 60 + 30: # 'secret' means to force end if 0 duration is unavailable parent.params.data_int[0] = 0 parent.treatment_time_sec = parent.params.data_int[0] * 60 rsp_payload = integer_to_bytearray(EResponse.Accepted) rsp_payload += integer_to_bytearray(RequestRejectReasons.REQUEST_REJECT_REASON_NONE.value) else: rsp_payload = integer_to_bytearray(EResponse.Rejected) rsp_payload += integer_to_bytearray( RequestRejectReasons.REQUEST_REJECT_REASON_TREATMENT_TIME_OUT_OF_RANGE.value) rsp_payload += integer_to_bytearray(int(parent.treatment_time_sec / 60)) rsp_payload += float_to_bytearray(parent.uf_volume_set_l * 1000.0) return rsp_id, rsp_payload def ui_user_saline_bolus_request(parent): rsp_id = MsgIds.MSG_ID_USER_SALINE_BOLUS_RESPONSE rsp_payload = integer_to_bytearray(EResponse.Accepted) rsp_payload += integer_to_bytearray(RequestRejectReasons.REQUEST_REJECT_REASON_NONE.value) rsp_payload += integer_to_bytearray( parent.demo_treatment_params.data_int[TreatmentParameters.TREATMENT_PARAM_SALINE_BOLUS_VOLUME_ML.value]) if parent.params.data_int[0] == EResponse.Accepted: parent.demoSelection = 31 # Saline Bolus else: parent.demoSelection = 33 # Bolus Stop request return rsp_id, rsp_payload def ui_heparin_pause_resume_request(parent): rsp_id = MsgIds.MSG_ID_HD_HEPARIN_PAUSE_RESUME_RESPONSE rsp_payload = integer_to_bytearray(EResponse.Accepted) rsp_payload += integer_to_bytearray(RequestRejectReasons.REQUEST_REJECT_REASON_NONE.value) if parent.params.data_int[0] != EResponse.Accepted: parent.heparin_pause = True # Heparin Pause else: parent.heparin_pause = False # Heparin Resume return rsp_id, rsp_payload def ui_pressure_limits_change_request(parent): rsp_id = MsgIds.MSG_ID_HD_PRESSURE_LIMITS_CHANGE_RESPONSE rsp_payload = integer_to_bytearray(EResponse.Accepted) rsp_payload += integer_to_bytearray(RequestRejectReasons.REQUEST_REJECT_REASON_NONE.value) # apply new settings parent.demo_treatment_params.data_int[TreatmentParameters.TREATMENT_PARAM_ART_PRES_LIMIT_WINDOW.value] = \ parent.params.data_int[0] parent.demo_treatment_params.data_int[TreatmentParameters.TREATMENT_PARAM_VEN_PRES_LIMIT_WINDOW.value] = \ parent.params.data_int[1] parent.demo_treatment_params.data_int[TreatmentParameters.TREATMENT_PARAM_VEN_PRES_LIMIT_ASYMMETRIC.value] = \ parent.params.data_int[2] rsp_payload += integer_to_bytearray(parent.params.data_int[0]) # reply with as set rsp_payload += integer_to_bytearray(parent.params.data_int[1]) rsp_payload += integer_to_bytearray(parent.params.data_int[2]) return rsp_id, rsp_payload def ui_user_blood_dial_rate_change_request(parent): rsp_id = MsgIds.MSG_ID_USER_BLOOD_DIAL_RATE_CHANGE_RESPONSE rsp_payload = integer_to_bytearray(EResponse.Accepted) rsp_payload += integer_to_bytearray(RequestRejectReasons.REQUEST_REJECT_REASON_NONE.value) # apply new settings parent.demo_treatment_params.data_int[TreatmentParameters.TREATMENT_PARAM_BLOOD_FLOW_RATE_ML_MIN.value] = \ parent.params.data_int[0] parent.demo_treatment_params.data_int[TreatmentParameters.TREATMENT_PARAM_DIALYSATE_FLOW_RATE_ML_MIN.value] = \ parent.params.data_int[1] parent.dialysate_flow_set_point_ml_per_min = parent.params.data_int[1] parent.blood_flow_set_point_ml_per_min = parent.params.data_int[0] rsp_payload += integer_to_bytearray(parent.blood_flow_set_point_ml_per_min) rsp_payload += integer_to_bytearray(parent.dialysate_flow_set_point_ml_per_min) # reply with as set return rsp_id, rsp_payload def ui_rinseback_cmd_request(parent): rsp_id = MsgIds.MSG_ID_HD_RINSEBACK_CMD_RESPONSE rsp_payload = integer_to_bytearray(EResponse.Accepted) rsp_payload += integer_to_bytearray(RequestRejectReasons.REQUEST_REJECT_REASON_NONE.value) if parent.params.data_int[0] == 0: # 0 Start Rinseback parent.rinseback_volume_out_ml = 0 # reset these parent.demoSelection = 41 elif parent.params.data_int[0] == 1: # 1 Accelerate ++25 mL/min (R) parent.rinsebackVelocity_ml_per_sec = min(parent.rinsebackVelocity_ml_per_sec + 25.0 / 60.0, parent.rinsebackVelocity_max_ml_per_sec) elif parent.params.data_int[0] == 2: # 2 Decelerate --25 mL/min (R) parent.rinsebackVelocity_ml_per_sec = max(parent.rinsebackVelocity_ml_per_sec - 25.0 / 60.0, parent.rinsebackVelocity_min_ml_per_sec) elif parent.params.data_int[0] == 3: # 3 Pause parent.demoSelection = 44 elif parent.params.data_int[0] == 4: # 4 Resume parent.demoSelection = 41 elif parent.params.data_int[0] == 5: # 5 = "End" during rinseback rsp_id = MsgIds.MSG_ID_HD_OP_MODE_DATA rsp_payload = integer_to_bytearray(HDOpModes.MODE_POST.value) rsp_payload += integer_to_bytearray(PostTreatmentStates.HD_POST_TREATMENT_DRAIN_RESERVOIRS_STATE.value) parent.demoSelection = 0 # Complete Treatment parent.demoCount = 0 # immediately elif parent.params.data_int[0] == 6: # TBD!! Additional # TreatmentRinsebackStates.RINSEBACK_RUN_ADDITIONAL_STATE.value # #TBD!! # 4 Additional rinseback volume (10 mL) state of the rinseback sub-mode state machine parent.rinseback_volume_set_ml += 10.0 # ++10 mL (R) parent.demoSelection = 45 elif parent.params.data_int[0] == 8: # "END" 8 = Disconnect without further rinseback parent.demoSelection = 60 # Prompt User parent.demoCount = 0 # immediately elif parent.params.data_int[0] == 9: # TBD!! Additional not implemented 9 = return to treatment rsp_payload = integer_to_bytearray(EResponse.Rejected) return rsp_id, rsp_payload def ui_displosal_removal_confirm_request(parent): rsp_id = MsgIds.MSG_ID_HD_DISPOSABLE_REMOVAL_CONFIRM_RESPONSE rsp_payload = integer_to_bytearray(EResponse.Accepted) rsp_payload += integer_to_bytearray(RequestRejectReasons.REQUEST_REJECT_REASON_NONE.value) parent.demoSelection = 1 # Reset to beginning (rather than Disinfect choices '= 50') parent.demoCount = 0 # immediately return rsp_id, rsp_payload def ui_post_tx_next_request(parent): rsp_id = MsgIds.MSG_ID_HD_POST_TX_NEXT_CMD_RESPONSE rsp_payload = integer_to_bytearray(EResponse.Accepted) rsp_payload += integer_to_bytearray(RequestRejectReasons.REQUEST_REJECT_REASON_NONE.value) parent.demoCount = 0 # immediately return rsp_id, rsp_payload