Index: firmware/App/Modes/ModeTreatment.c =================================================================== diff -u -r4ddf1777acc4298a9ed034e56b66916256d22c18 -re5fc9a1e8898da7bc6d26f1e333ee44f6544d214 --- firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision 4ddf1777acc4298a9ed034e56b66916256d22c18) +++ firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision e5fc9a1e8898da7bc6d26f1e333ee44f6544d214) @@ -8,7 +8,7 @@ * @file ModeTreatment.c * * @author (last) Sean Nash -* @date (last) 07-Feb-2023 +* @date (last) 15-Mar-2023 * * @author (original) Dara Navaei * @date (original) 05-Nov-2019 @@ -1077,7 +1077,7 @@ pendingParamChangesTimer = getMSTimerCount(); // Verify UF rate change would be valid (leave zero if not valid - UI will disable option) - if ( uFRate <= (F32)MAX_UF_RATE_ML_MIN ) + if ( ( uFRate <= (F32)MAX_UF_RATE_ML_MIN ) && ( uFRate >= MIN_UF_RATE_ML_MIN ) ) { result = TRUE; pendingUFVolumeChange = uFVolume; Index: firmware/App/Modes/OperationModes.c =================================================================== diff -u -r4ddf1777acc4298a9ed034e56b66916256d22c18 -re5fc9a1e8898da7bc6d26f1e333ee44f6544d214 --- firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision 4ddf1777acc4298a9ed034e56b66916256d22c18) +++ firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision e5fc9a1e8898da7bc6d26f1e333ee44f6544d214) @@ -7,8 +7,8 @@ * * @file OperationModes.c * -* @author (last) Michael Garthwaite -* @date (last) 31-Jan-2023 +* @author (last) Sean Nash +* @date (last) 13-Mar-2023 * * @author (original) Dara Navaei * @date (original) 05-Nov-2019 @@ -42,7 +42,7 @@ #define BROADCAST_HD_OP_MODE_INTERVAL ( 250 / TASK_GENERAL_INTERVAL ) ///< HD operation mode broadcast interval (in task interval/sec). #define DATA_PUBLISH_COUNTER_START_COUNT 11 ///< Data publish counter start count. -#define NUM_CONFIRM_REQUESTS 4 ///< Number of available confirmation requests. +#define MAX_PENDING_CONFIRM_REQUESTS 4 ///< Maximum number of confirmation requests allowed at any given time. #define CONFIRMATION_REQUEST_TIMEOUT_MS ( SEC_PER_MIN * MS_PER_SECOND ) ///< Confirmation response timeout in ms /// Structure for confirmation request. @@ -64,7 +64,7 @@ /// Interval (in task intervals) at which to publish operation mode data to CAN bus. static OVERRIDE_U32_T opModePublishInterval = { BROADCAST_HD_OP_MODE_INTERVAL, BROADCAST_HD_OP_MODE_INTERVAL, BROADCAST_HD_OP_MODE_INTERVAL, 0 }; /// Local structure init for saving confirmation requests -static CONFIRMATION_REQUEST_T confirmRequests[NUM_CONFIRM_REQUESTS] = +static CONFIRMATION_REQUEST_T confirmRequests[ MAX_PENDING_CONFIRM_REQUESTS ] = { GENERIC_CONFIRM_ID_NONE, GENERIC_CONFIRM_CMD_REQUEST_OPEN, 0, CONFIRMATION_REQUEST_STATUS_UNUSED, GENERIC_CONFIRM_ID_NONE, GENERIC_CONFIRM_CMD_REQUEST_OPEN, 0, CONFIRMATION_REQUEST_STATUS_UNUSED, GENERIC_CONFIRM_ID_NONE, GENERIC_CONFIRM_CMD_REQUEST_OPEN, 0, CONFIRMATION_REQUEST_STATUS_UNUSED, @@ -433,14 +433,13 @@ * all active confirmation requests and updates the timeout. * @details Inputs: confirmRequests[] * @details Outputs: confirmRequests[] status updated if timeout. - * @param none * @return none *************************************************************************/ void updateConfirmationRequestTimeouts( void ) { U08 i; - for ( i = 0; i < NUM_CONFIRM_REQUESTS; i++ ) + for ( i = 0; i < MAX_PENDING_CONFIRM_REQUESTS; i++ ) { if ( CONFIRMATION_REQUEST_STATUS_PENDING == confirmRequests[ i ].status ) { @@ -456,9 +455,9 @@ * @brief * The getConfirmationRequestStatus function returns the status of a confirmation request * @details Inputs: confirmRequests[] - * @details Outputs: confirmRequests[] cleared if completed. - * @param request ID - * @return CONFIRMATION_REQUEST_STATUS_T + * @details Outputs: confirmRequests[] consumed/cleared if completed. + * @param request_id ID of confirmation being requested + * @return Status of given confirmation *************************************************************************/ CONFIRMATION_REQUEST_STATUS_T getConfirmationRequestStatus( GENERIC_CONFIRM_ID_T request_id ) { @@ -467,15 +466,15 @@ BOOL pending = FALSE; U08 pending_index = 0; - for ( i = 0; i < NUM_CONFIRM_REQUESTS; i++ ) + for ( i = 0; i < MAX_PENDING_CONFIRM_REQUESTS; i++ ) { if ( confirmRequests[ i ].requestID == request_id ) { status = confirmRequests[ i ].status; if ( CONFIRMATION_REQUEST_STATUS_PENDING != status) { // Send UI clear - if ( CONFIRMATION_REQUEST_STATUS_TIMEOUT == confirmRequests[ i ].status ) + if ( CONFIRMATION_REQUEST_STATUS_TIMEOUT == status ) { sendConfirmationRequest( confirmRequests[ i ].requestID, GENERIC_CONFIRM_CMD_TIMEOUT_CLOSE, 0 ); } @@ -522,16 +521,16 @@ * @brief * The setConfirmationRequestStatus function sets the status of a confirmation request * @details Inputs: confirmRequests[] - * @details Outputs: confirmRequests[] status. - * @param request ID - * @param new status - * @return CONFIRMATION_REQUEST_STATUS_T + * @details Outputs: confirmRequests[]. + * @param request_id ID of confirmation being requested + * @param status Status to set for given confirmation (open, close, reject) + * @return none *************************************************************************/ void setConfirmationRequestStatus( GENERIC_CONFIRM_ID_T request_id, CONFIRMATION_REQUEST_STATUS_T status ) { U08 i; - for ( i = 0; i < NUM_CONFIRM_REQUESTS; i++ ) + for ( i = 0; i < MAX_PENDING_CONFIRM_REQUESTS; i++ ) { if ( confirmRequests[ i ].requestID == request_id ) { @@ -546,18 +545,19 @@ * The addConfirmationRequest function sends a confirmation request to UI * @details Inputs: confirmRequests[] * @details Outputs: confirmRequests[] new added. - * @param request_id - confirm id / type - * @param request_type - confirm command + * @param request_id ID of confirmation being requested + * @param request_type Type of confirmation being requested (open, close, reject) + * @param reject_Reason Reason for reject if type is reject * @return request ID - will be non-zero if added *************************************************************************/ GENERIC_CONFIRM_ID_T addConfirmationRequest( GENERIC_CONFIRM_ID_T request_id, GENERIC_CONFIRM_COMMAND_T request_type, U32 reject_reason ) { U08 i; GENERIC_CONFIRM_ID_T new_id = GENERIC_CONFIRM_ID_NONE; - for ( i = 0; i < NUM_CONFIRM_REQUESTS; i++ ) + for ( i = 0; i < MAX_PENDING_CONFIRM_REQUESTS; i++ ) { - if ( confirmRequests[ i ].status == CONFIRMATION_REQUEST_STATUS_UNUSED ) + if ( CONFIRMATION_REQUEST_STATUS_UNUSED == confirmRequests[ i ].status ) { // Save the confirmation request info confirmRequests[ i ].requestID = request_id; @@ -566,7 +566,6 @@ confirmRequests[ i ].status = CONFIRMATION_REQUEST_STATUS_PENDING; new_id = request_id; sendConfirmationRequest( request_id, request_type, reject_reason ); - break; } } Index: firmware/App/Services/AlarmMgmt.c =================================================================== diff -u -r7dae221794a30c403c06d90e12f3ab28830dffbe -re5fc9a1e8898da7bc6d26f1e333ee44f6544d214 --- firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision 7dae221794a30c403c06d90e12f3ab28830dffbe) +++ firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision e5fc9a1e8898da7bc6d26f1e333ee44f6544d214) @@ -8,7 +8,7 @@ * @file AlarmMgmt.c * * @author (last) Sean Nash -* @date (last) 05-Feb-2023 +* @date (last) 13-Mar-2023 * * @author (original) Sean Nash * @date (original) 07-Nov-2019 @@ -521,7 +521,8 @@ break; case ALARM_USER_ACTION_END_TREATMENT: - initiateAlarmAction( ALARM_ACTION_END_TREATMENT ); + // Send message to UI to get user confirmation to end treatment - action initiated only upon receipt of user confirmation from UI + addConfirmationRequest( GENERIC_CONFIRM_ID_TREATMENT_END, GENERIC_CONFIRM_CMD_REQUEST_OPEN, 0 ); break; case ALARM_USER_ACTION_ACK: @@ -819,6 +820,12 @@ alarmPrimaryAudioCurrentLG.data = getIntADCVoltageConverted( INT_ADC_PRIMARY_ALARM_CURRENT_LG ); alarmBackupAudioCurrent.data = getFPGABackupAlarmAudioCurrent(); + // Check for user confirmation of end treatment alarm response + if ( CONFIRMATION_REQUEST_STATUS_ACCEPTED == getConfirmationRequestStatus( GENERIC_CONFIRM_ID_TREATMENT_END ) ) + { + initiateAlarmAction( ALARM_ACTION_END_TREATMENT ); + } + // TODO - Check current vs. expected audio output } Index: firmware/App/Services/SystemComm.c =================================================================== diff -u -r8c195e4b22d63a6b8de9089ff6bf704282f54885 -re5fc9a1e8898da7bc6d26f1e333ee44f6544d214 --- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 8c195e4b22d63a6b8de9089ff6bf704282f54885) +++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision e5fc9a1e8898da7bc6d26f1e333ee44f6544d214) @@ -7,8 +7,8 @@ * * @file SystemComm.c * -* @author (last) Dara Navaei -* @date (last) 13-Feb-2023 +* @author (last) Sean Nash +* @date (last) 10-Mar-2023 * * @author (original) Dara Navaei * @date (original) 05-Nov-2019 @@ -761,21 +761,21 @@ } } - // Only alarm on DG comm loss while in the treatment workflow - if ( MODE_PRET == opMode || MODE_TREA == opMode || MODE_POST == opMode ) + if ( TRUE == didTimeout( timeOfLastDGCheckIn, DG_COMM_TIMEOUT_IN_MS ) ) { - if ( TRUE == didTimeout( timeOfLastDGCheckIn, DG_COMM_TIMEOUT_IN_MS ) ) - { #ifndef RUN_WITHOUT_DG + // Only alarm on DG comm loss while in the treatment workflow + if ( MODE_PRET == opMode || MODE_TREA == opMode || MODE_POST == opMode ) + { activateAlarmNoData( ALARM_ID_DG_COMM_TIMEOUT ); - dgIsCommunicating = FALSE; -#endif } + else // Otherwise clear the alarm + { + clearAlarmCondition( ALARM_ID_DG_COMM_TIMEOUT ); + } + dgIsCommunicating = FALSE; +#endif } - else // Otherwise clear the alarm - { - clearAlarmCondition( ALARM_ID_DG_COMM_TIMEOUT ); - } } } Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -r96b0388afcefcd34c63b79c89c3d9b1585c54d31 -re5fc9a1e8898da7bc6d26f1e333ee44f6544d214 --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 96b0388afcefcd34c63b79c89c3d9b1585c54d31) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision e5fc9a1e8898da7bc6d26f1e333ee44f6544d214) @@ -8,7 +8,7 @@ * @file SystemCommMessages.c * * @author (last) Sean Nash -* @date (last) 08-Mar-2023 +* @date (last) 13-Mar-2023 * * @author (original) Dara Navaei * @date (original) 05-Nov-2019 @@ -3329,10 +3329,10 @@ * The sendConfirmationRequest function sends a confirmation request to UI * @details Inputs: none * @details Outputs: none - * @param request ID - * @param request type - * @param reject reason - * @return request ID - will be non-zero if sent + * @param request_id ID of confirmation being requested + * @param request_type Type of confirmation being requested + * @param reject_reason Reason Reason for reject if type is reject + * @return none *************************************************************************/ void sendConfirmationRequest( GENERIC_CONFIRM_ID_T request_id, GENERIC_CONFIRM_COMMAND_T request_type, U32 reject_reason ) {