Index: firmware/App/Controllers/ConcentratePumps.c =================================================================== diff -u -r830213bc6dcc1a684610caf78c79d55f2cb41e93 -r25dfec9cbd60f1fc9f22c00342a1d009c95533ff --- firmware/App/Controllers/ConcentratePumps.c (.../ConcentratePumps.c) (revision 830213bc6dcc1a684610caf78c79d55f2cb41e93) +++ firmware/App/Controllers/ConcentratePumps.c (.../ConcentratePumps.c) (revision 25dfec9cbd60f1fc9f22c00342a1d009c95533ff) @@ -36,12 +36,12 @@ #define CONCENTRATE_PUMP_REVERSE_DIR 0x0 ///< Concentrate pump reverse direction configuration. #define CONCENTRATE_PUMP_RAMP_SPEED_INCREMENT 10.0F ///< Speed increase (mL/min) when controlling concentrate pump to target step speed. -#define CONCENTRATE_PUMP_MIN_SPEED 3.0F ///< Minimum speed for concentrate pump in mL per min. +#define CONCENTRATE_PUMP_MIN_SPEED 0.0F ///< Minimum speed for concentrate pump in mL per min. #define CONCENTRATE_PUMP_SPD_OUT_OF_RANGE_TOL_WHEN_ON_PCT 0.01F ///< Concentrate pump speed out of range tolerance when on in percentage. #define CONCENTRATE_PUMP_CLEANING_SPD_OUT_OF_RANGE_TOL_PCT 0.05F ///< Concentrate pump cleaning mode speed out of range tolerance when on in percentage. #define CONCENTRATE_PUMP_SPD_OUT_OF_RANGE_TOL_WHEN_SLOW_MLPM 1.0F ///< Concentrate pump speed out of range tolerance when slow in mL/min. #define CONCENTRATE_PUMP_LOW_SPEED_THRESHOLD_MLPM 10.0F ///< Concentrate pump low speed threshold in mL/min. -#define CONCENTRATE_PUMP_ZERO_FLOW_RATE 0xFFFF ///< Pulse width value when zero flow rate or pump is off. +#define CONCENTRATE_PUMP_ZERO_FLOW_RATE 0xFFFFFFFF ///< Pulse width value when zero flow rate or pump is off. #define CONCENTRATE_PUMP_VOLUME_PER_REV_DIENER 0.4F ///< Volume output every revolution (mL). #define CONCENTRATE_PUMP_VOLUME_PER_REV 0.1F ///< Volume output every revolution (mL). @@ -107,7 +107,7 @@ CONCENTRATE_PUMP_STATE_T execState; ///< Concentrate pump execute current state. BOOL hasTurnOnPumpsBeenRequested; ///< Flag indicates a request to turn concentrate pumps on. F32 currentPumpSpeed; ///< Current controlled concentrate pumps' speed (mL/min). - U16 togglePeriodCount; ///< Converted pump speed (mL/min) to toggle period counts (0.5 uS increment counts per step). + U32 togglePeriodCount; ///< Converted pump speed (mL/min) to toggle period counts (0.5 uS increment counts per step). U08 direction; ///< Concentrate pump motor direction. U08 controlSet; ///< Concentrate pump control set. (Used in DVT) F32 pulseWidthUS; ///< Concentrate pump pulse width in microseconds. @@ -576,8 +576,8 @@ } /* - * If 3.0 <= speed <= 60 set it - * If speed < 3.0 set to 0 + * If 0.0 <= speed <= 60 set it + * If speed < 0.0 set to 0 * else speed > 60 set to 60 */ if ( ( CONCENTRATE_PUMP_MIN_SPEED <= targetSpeed_ml_min ) && ( targetSpeed_ml_min <= CONCENTRATE_PUMP_MAX_SPEED ) ) @@ -1057,7 +1057,7 @@ timePerStep = CONCENTRATE_PUMP_VOLUME_PER_REV_DIENER / ( concentratePumps[ pumpId ].currentPumpSpeed * CONCENTRATE_PUMP_STEP_PER_REV ); stepPeriodCounts = timePerStep / ( CONCENTRATE_PUMP_STEP_PERIOD_RESOLUTION * CONCENTRATE_PUMP_MICRO_STEPS_PER_STEP ); - concentratePumps[ pumpId ].togglePeriodCount = (U16)( stepPeriodCounts + FLOAT_TO_INT_ROUNDUP_OFFSET ); + concentratePumps[ pumpId ].togglePeriodCount = (U32)( stepPeriodCounts + FLOAT_TO_INT_ROUNDUP_OFFSET ); } else { @@ -1097,7 +1097,7 @@ static void calcMeasuredPumpsSpeed( void ) { CONCENTRATE_PUMPS_T pumpId; - U16 pulseWidthCount = 0; + U32 pulseWidthCount = 0; F32 pulseWidthInMicroSeconds = 0.0F; BOOL isPulseWidthOut = FALSE; CONCENTRATE_PUMPS_T pumpInAlarm = CONCENTRATEPUMPS_FIRST; Index: firmware/App/Controllers/Heaters.c =================================================================== diff -u -rd66ded5492dd8a760b235b12cb6767f0427ba573 -r25dfec9cbd60f1fc9f22c00342a1d009c95533ff --- firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision d66ded5492dd8a760b235b12cb6767f0427ba573) +++ firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision 25dfec9cbd60f1fc9f22c00342a1d009c95533ff) @@ -1,6 +1,6 @@ /************************************************************************** * -* Copyright (c) 2024-2025 Diality Inc. - All Rights Reserved. +* Copyright (c) 2024-2026 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. Index: firmware/App/Controllers/Ultrafiltration.c =================================================================== diff -u -r830213bc6dcc1a684610caf78c79d55f2cb41e93 -r25dfec9cbd60f1fc9f22c00342a1d009c95533ff --- firmware/App/Controllers/Ultrafiltration.c (.../Ultrafiltration.c) (revision 830213bc6dcc1a684610caf78c79d55f2cb41e93) +++ firmware/App/Controllers/Ultrafiltration.c (.../Ultrafiltration.c) (revision 25dfec9cbd60f1fc9f22c00342a1d009c95533ff) @@ -104,9 +104,22 @@ // Calculate UF volume and determine UF pause/run updateUFRequest(); - // Compensate balancing error at defined interval - UpdateUFCompensation(); + // Trimmer heater enabled, hence UF temp compensation is optional + if ( getTestConfigStatus( TEST_CONFIG_ENABLE_UF_TEMP_COMPENSATION ) == TRUE ) + { + // Compensate balancing error at defined interval + UpdateUFCompensation(); + } + else if ( TRUE == isUFRateUpdated ) + { + //get updated UF rate + compUFrate = getTDUFRate(); + // Update UF rate + setConcentratePumpTargetSpeed( D76_PUMP, compUFrate, DOSING_CONT_VOLUME ); + isUFRateUpdated = FALSE; + } + // execute current ultrafiltration exec state switch ( ufExecState ) { @@ -181,10 +194,10 @@ /*********************************************************************//** * @brief - * The updateUFRequest function updates the ultrafiltration rate per iteration - * and of the ultrafiltration. + * The updateUFRequest function updates the ultrafiltration requested + * flag to true or false based on the conditions. * @details \b Inputs: TD Uf rate, TD Dialysate flow rate and bypass flag - * @details \b Outputs: ufVolumeperIteration , isUltrafiltrationRequested + * @details \b Outputs: isUltrafiltrationRequested * @return none. *************************************************************************/ static void updateUFRequest( void ) Index: firmware/App/DDCommon.h =================================================================== diff -u -r6dd41ba21a4a1f7b8dd62627306f71c5d055307d -r25dfec9cbd60f1fc9f22c00342a1d009c95533ff --- firmware/App/DDCommon.h (.../DDCommon.h) (revision 6dd41ba21a4a1f7b8dd62627306f71c5d055307d) +++ firmware/App/DDCommon.h (.../DDCommon.h) (revision 25dfec9cbd60f1fc9f22c00342a1d009c95533ff) @@ -1,6 +1,6 @@ /************************************************************************** * -* Copyright (c) 2024-2025 Diality Inc. - All Rights Reserved. +* Copyright (c) 2024-2026 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. @@ -25,7 +25,7 @@ #define DD_VERSION_MAJOR 0 #define DD_VERSION_MINOR 0 #define DD_VERSION_MICRO 0 -#define DD_VERSION_BUILD 26 +#define DD_VERSION_BUILD 34 // ********** development build switches ********** Index: firmware/App/Modes/ModeGenDialysate.c =================================================================== diff -u -r830213bc6dcc1a684610caf78c79d55f2cb41e93 -r25dfec9cbd60f1fc9f22c00342a1d009c95533ff --- firmware/App/Modes/ModeGenDialysate.c (.../ModeGenDialysate.c) (revision 830213bc6dcc1a684610caf78c79d55f2cb41e93) +++ firmware/App/Modes/ModeGenDialysate.c (.../ModeGenDialysate.c) (revision 25dfec9cbd60f1fc9f22c00342a1d009c95533ff) @@ -226,6 +226,10 @@ setD28TempFeedbackControl( TRUE ); startHeater( D5_HEAT ); + //Turn on Trimmer heater + setHeaterTargetTemperature( D45_HEAT, getD4AverageTemperature() ); + startHeater( D45_HEAT ); + //Testing : Enable close loop once testing is complete //setDialysatePumpTargetRPM( D12_PUMP, FRESH_DIAL_PUMP_INITIAL_RPM, FALSE ); setDialysatePumpTargetRPM( D12_PUMP, FRESH_DIAL_PUMP_INITIAL_RPM, TRUE ); @@ -255,6 +259,10 @@ setD28TempFeedbackControl( TRUE ); startHeater( D5_HEAT ); + //Turn on Trimmer heater + setHeaterTargetTemperature( D45_HEAT, getD4AverageTemperature() ); + startHeater( D45_HEAT ); + //setDialysatePumpTargetRPM( D12_PUMP, FRESH_DIAL_PUMP_INITIAL_RPM, FALSE ); setDialysatePumpTargetRPM( D12_PUMP, FRESH_DIAL_PUMP_INITIAL_RPM, TRUE ); //setDialysatePumpTargetRPM( D48_PUMP, SPENT_DIAL_PUMP_INITIAL_RPM, FALSE ); @@ -475,7 +483,7 @@ BOOL result = FALSE; LEVEL_STATE_T floaterLevel = getLevelStatus( D6_LEVL ); BOOL balancingChambFillInProgress = getBalancingChamberFillinProgressStatus(); - +#if 0 // High level is met if ( LEVEL_STATE_HIGH == floaterLevel ) { @@ -490,7 +498,23 @@ // if level is not met,allow inlet water to hydraulics chamber setValveState( D3_VALV, VALVE_STATE_OPEN ); } +#else + // High level is met + if ( LEVEL_STATE_HIGH == floaterLevel ) + { + //turn off inlet water valve + setValveState( D3_VALV, VALVE_STATE_CLOSED ); + // Water level reached high. + result = TRUE; + } + else + { + // if level is not met,allow inlet water to hydraulics chamber + setValveState( D3_VALV, VALVE_STATE_OPEN ); + } +#endif + return result; } Index: firmware/App/Monitors/Temperature.c =================================================================== diff -u -r6dd41ba21a4a1f7b8dd62627306f71c5d055307d -r25dfec9cbd60f1fc9f22c00342a1d009c95533ff --- firmware/App/Monitors/Temperature.c (.../Temperature.c) (revision 6dd41ba21a4a1f7b8dd62627306f71c5d055307d) +++ firmware/App/Monitors/Temperature.c (.../Temperature.c) (revision 25dfec9cbd60f1fc9f22c00342a1d009c95533ff) @@ -1,14 +1,14 @@ /************************************************************************** * -* Copyright (c) 2024-2025 Diality Inc. - All Rights Reserved. +* Copyright (c) 2024-2026 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 Temperature.c * -* @author (last) Zoltan Miskolci -* @date (last) 10-Dec-2025 +* @author (last) “rkallala” +* @date (last) 19-Jan-2026 * * @author (original) Vinayakam Mani * @date (original) 25-Sep-2024 @@ -493,15 +493,17 @@ { TEMPERATURE_SENSORS_FP_DATA_T data; - data.m3Temp = getFilteredPressureSensorTemperature( M3_PRES ); - data.p10Temp = getFilteredConductivitySensorTemperature( P9_COND ); - data.p19Temp = getFilteredConductivitySensorTemperature( P18_COND ); - data.p8Temp = getFilteredPressureSensorTemperature( P8_PRES ); - data.p13Temp = getFilteredPressureSensorTemperature( P13_PRES ); - data.p17Temp = getFilteredPressureSensorTemperature( P17_PRES ); - data.p7Temp = getFilteredFlowSensorTemperature( P7_FLOW ); - data.p16Temp = getFilteredFlowSensorTemperature( P16_FLOW ); - data.p46Temp = getFilteredPressureSensorTemperature( P46_PRES ); + data.m3Temp = getFilteredPressureSensorTemperature( M3_PRES ); + data.p10Temp = getFilteredConductivitySensorTemperature( P9_COND ); + data.p19Temp = getFilteredConductivitySensorTemperature( P18_COND ); + data.p8Temp = getFilteredPressureSensorTemperature( P8_PRES ); + data.p13Temp = getFilteredPressureSensorTemperature( P13_PRES ); + data.p17Temp = getFilteredPressureSensorTemperature( P17_PRES ); + data.p7Temp = getFilteredFlowSensorTemperature( P7_FLOW ); + data.p16Temp = getFilteredFlowSensorTemperature( P16_FLOW ); + data.p46Temp = getFilteredPressureSensorTemperature( P46_PRES ); + data.p7InternalTemp = getFlowInternalTemperature( P7_FLOW ); + data.p16InternalTemp = getFlowInternalTemperature( P16_FLOW ); broadcastData( MSG_ID_FP_TEMPERATURE_DATA, COMM_BUFFER_OUT_CAN_FP_BROADCAST, (U08*)&data, sizeof( TEMPERATURE_SENSORS_FP_DATA_T ) ); fpTempDataPublicationTimerCounter = 0; Index: firmware/App/Services/FpgaDD.c =================================================================== diff -u -rbef932558c7e8e50ab60c5f8c0c1967b8d7d4ca4 -r25dfec9cbd60f1fc9f22c00342a1d009c95533ff --- firmware/App/Services/FpgaDD.c (.../FpgaDD.c) (revision bef932558c7e8e50ab60c5f8c0c1967b8d7d4ca4) +++ firmware/App/Services/FpgaDD.c (.../FpgaDD.c) (revision 25dfec9cbd60f1fc9f22c00342a1d009c95533ff) @@ -178,8 +178,8 @@ U08 fpgaValveSpPWMStates; ///< Reg 599. Spare Valves PWM states U08 fpgaD11_D10_PumpFault; ///< Reg 600. Concentrate pump fault register for D11_Pump and D10_Pump U08 fpgaRTDCountErrorCycles; ///< Reg 601. Count of each incomplete seq of reads from RTD ADC. - U16 fpgaD11PumpHallSense; ///< Reg 602. Concentrate pump D11_Pump hall sensor pulse width - U16 fpgaD10PumpHallSense; ///< Reg 604. Concentrate pump D10_Pump hall sensor pulse width + U16 fpga_UnUsed_4; ///< Reg 602. Not Used + U16 fpga_UnUsed_5; ///< Reg 604. Not Used U32 fpgaD78Temp; ///< Reg 606. Outlet heat exchanger temperature U32 fpgaD1Temp; ///< Reg 610. Inlet heat exchanger temperature U32 fpgaD4Temp; ///< Reg 614. Hydraulics primary heater temperature @@ -204,10 +204,10 @@ U16 fpgaAdcVpVn; ///< Reg 648. TBD U16 fpgaD12PumpSpeedFeedback; ///< Reg 650. D12 Pump speed feedback U16 fpgaD48PumpSpeedFeedback; ///< Reg 652. D48 Pump Speed feedback - U16 fpgaD76PumpHallSense; ///< Reg 654. UF D76_Pump hall sensor pulse width + U16 fpga_UnUsed_6; ///< Reg 654. Not used U16 fpgaD76PumpStepCountStatus; ///< Reg 656. UF pump revolution down count status U08 fpgaD76PumpFault; ///< Reg 658: UF pump fault - U08 fpga_UnUsed_3; ///< reg 659: Not used + U08 fpga_UnUsed_3; ///< Reg 659: Not used S16 pressureP46; ///< Reg 660. P46 pressure data. U16 temperatureP46; ///< Reg 662. P46 temperature data. @@ -262,6 +262,10 @@ U16 fpgaD74CondTemp; ///< Reg 756. D74 Temperature U08 fpgaD74CondReadCnt; ///< Reg 758. D74 successful read count U08 fpgaD74CondErrorCnt; ///< Reg 759. D74 error read count + U32 fpgaD11PumpHallSense; ///< Reg 760. Concentrate pump D11_Pump hall sensor pulse width + U32 fpgaD10PumpHallSense; ///< Reg 764. Concentrate pump D10_Pump hall sensor pulse width + U32 fpgaD76PumpHallSense; ///< Reg 768. UF D76_Pump hall sensor pulse width + U32 fpgaTestBytes; ///< Reg 772. FPGA Test 4 bytes } DD_FPGA_SENSORS_T; typedef struct @@ -286,10 +290,10 @@ U08 fpgaD12PumpControl; ///< Reg 36. DGP Control U08 fpgaD48PumpControl; ///< Reg 37. SDP Control U16 fpgaD48PumpSpeed; ///< Reg 38. SDP Speed/RPM Control - U16 fpgaD11PumpSpeed; ///< Reg 40. Acid Concentrate Pump Speed/RPM Control + U16 fpgaNotUsed_1; ///< Reg 40. Not used U08 fpgaD11PumpControl; ///< Reg 42. Acid Concentrate Pump Control U08 fpgaD10PumpControl; ///< Reg 43. BiCarb Concentrate Pump Control - U16 fpgaD10PumpSpeed; ///< Reg 44. BiCarb Concentrate Pump Speed/RPM Control + U16 fpgaNotUsed_2; ///< Reg 44. Not used U08 fpgaD42SensorTest; ///< Reg 46. Blood leak sensor test U08 fpgaD42UARTControl; ///< Reg 47. Blood leak sensor UART control U08 fpgaD42FIFOTx; ///< Reg 48. Blood leak sensor FIFO transmit control @@ -308,7 +312,7 @@ U08 fpgaGPIOControl; ///< Reg 69. FPGA GPIO control interface U16 fpgaACRelayPWMLow; ///< Reg 70. Length of time in 10us resoultion that PWM output stays low. U16 fpgaACRelayPWMPeriod; ///< Reg 72. PWM period for AC relay/heater. - U16 fpgaD76PumpSpeed; ///< Reg 74. UF Pump Speed/RPM Control + U16 fpgaNotUsed_3; ///< Reg 74. Not Used U16 fpgaD76PumpRevCount; ///< Reg 76. UF pump revolution count U08 fpgaD76PumpControl; ///< Reg 78. UF Pump Control @@ -341,7 +345,10 @@ U08 fpgaConSensD43Control; ///< Reg 118. Conductivity/Temperature Sensors D43 Control registers U16 fpgaConSensD43_Addrs; ///< Reg 119. D43 Initialization Address register U32 fpgaConSensD43_Data_In; ///< Reg 121. D43 Initialization data register - + U08 fpgaNotUsed_4; ///< Reg 125. Not used + U32 fpgaD11PumpSpeed; ///< Reg 126. Acid Concentrate Pump Speed/RPM Control + U32 fpgaD10PumpSpeed; ///< Reg 130. BiCarb Concentrate Pump Speed/RPM Control + U32 fpgaD76PumpSpeed; ///< Reg 134. UF Pump Speed/RPM Control } FPGA_ACTUATORS_T; #pragma pack(pop) @@ -843,7 +850,7 @@ * @param stepSpeed The concentrate pump step speed period * @return none *************************************************************************/ -void setFPGAD11PumpSetStepSpeed( U16 stepSpeed ) +void setFPGAD11PumpSetStepSpeed( U32 stepSpeed ) { fpgaActuatorSetPoints.fpgaD11PumpSpeed = stepSpeed; } @@ -857,7 +864,7 @@ * @param stepSpeed The concentrate pump step speed period * @return none *************************************************************************/ -void setFPGAD10PumpSetStepSpeed( U16 stepSpeed ) +void setFPGAD10PumpSetStepSpeed( U32 stepSpeed ) { fpgaActuatorSetPoints.fpgaD10PumpSpeed = stepSpeed; } @@ -871,7 +878,7 @@ * @param stepSpeed The concentrate pump step speed period * @return none *************************************************************************/ -void setFPGAD76PumpSetStepSpeed( U16 stepSpeed ) +void setFPGAD76PumpSetStepSpeed( U32 stepSpeed ) { fpgaActuatorSetPoints.fpgaD76PumpSpeed = stepSpeed; } @@ -2223,7 +2230,7 @@ * @details \b Outputs: none * @return concentrate pump D11_Pump hall sense pulse width *************************************************************************/ -U16 getFPGAD11PumpHallSensePulseWidth( void ) +U32 getFPGAD11PumpHallSensePulseWidth( void ) { return fpgaSensorReadings.fpgaD11PumpHallSense; } @@ -2236,7 +2243,7 @@ * @details \b Outputs: none * @return concentrate pump D10_Pump hall sense pulse width *************************************************************************/ -U16 getFPGAD10PumpHallSensePulseWidth( void ) +U32 getFPGAD10PumpHallSensePulseWidth( void ) { return fpgaSensorReadings.fpgaD10PumpHallSense; } @@ -2249,7 +2256,7 @@ * @details \b Outputs: none * @return ultrafiltration pump D76_Pump hall sense pulse width *************************************************************************/ -U16 getFPGAD76PumpHallSensePulseWidth( void ) +U32 getFPGAD76PumpHallSensePulseWidth( void ) { return fpgaSensorReadings.fpgaD76PumpHallSense; } Index: firmware/App/Services/FpgaDD.h =================================================================== diff -u -r1d22a723272b4225b10b296c25339bdc90b4236d -r25dfec9cbd60f1fc9f22c00342a1d009c95533ff --- firmware/App/Services/FpgaDD.h (.../FpgaDD.h) (revision 1d22a723272b4225b10b296c25339bdc90b4236d) +++ firmware/App/Services/FpgaDD.h (.../FpgaDD.h) (revision 25dfec9cbd60f1fc9f22c00342a1d009c95533ff) @@ -1,14 +1,14 @@ /************************************************************************** * -* Copyright (c) 2024-2025 Diality Inc. - All Rights Reserved. +* Copyright (c) 2024-2026 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 FpgaDD.h * -* @author (last) Michael Garthwaite -* @date (last) 08-Dec-2025 +* @author (last) “rkallala” +* @date (last) 19-Jan-2026 * * @author (original) Vinayakam Mani * @date (original) 26-Aug-2024 @@ -253,6 +253,11 @@ U08 getFPGABloodLeakRxErrorCount( void ); U08 getFPGABloodLeakRxFIFODataOut( void ); +// Rinse pump +void setFPGAD79RinsePumpControl( U08 value ); +void setFPGAD79RinsePumpPWMControl( U08 value ); +U16 getFPGAD79RinsePumpPulseWidth( void ); + //*************** IOFP ******************* void setFPGAFPValveStates( U08 valveStates ); @@ -296,8 +301,10 @@ U16 getFPGAFlowP16( void ); U16 getFPGAFlowP16Temp( void ); +U16 getFPGAFlowP16InternalTemp( void ); U16 getFPGAFlowP7( void ); U16 getFPGAFlowP7Temp( void ); +U16 getFPGAFlowP7InternalTemp( void ); void setFPGAP9Control( U08 control ); void setFPGAP9Address( U16 address );