Index: firmware/App/Controllers/BPModule.c =================================================================== diff -u -r5ad0389d9abad0f0a523fc44ae6c00ca8b12f313 -r9c4cdc42d3bcef089a9627b206496cb23bc3f643 --- firmware/App/Controllers/BPModule.c (.../BPModule.c) (revision 5ad0389d9abad0f0a523fc44ae6c00ca8b12f313) +++ firmware/App/Controllers/BPModule.c (.../BPModule.c) (revision 9c4cdc42d3bcef089a9627b206496cb23bc3f643) @@ -128,7 +128,7 @@ * @brief * The resetBPModuleFlags function resets BP module flags. * @details \b Inputs: none -* @details \b Outputs: BP module flags reset. +* @details \b Outputs: pendingVitalsRequest * @return none *************************************************************************/ static void resetBPModuleFlags( void ) @@ -141,7 +141,7 @@ * The initiateAdultBPReading function initiates an adult blood pressure * measurement. * @details \b Inputs: none -* @details \b Outputs: bpModuleState +* @details \b Outputs: requestAdultBPReading * @return none ***************************************************************************/ void initiateAdultBPReading( void ) @@ -154,7 +154,7 @@ * The initiatePedsBPReading function initiates a pediatric blood pressure * measurement. * @details \b Inputs: none -* @details \b Outputs: bpModuleState +* @details \b Outputs: requestPedsBPReading * @return none ***************************************************************************/ void initiatePedsBPReading( void ) @@ -167,7 +167,7 @@ * The abortBPReading function aborts the active blood pressure * measurement. * @details \b Inputs: none -* @details \b Outputs: bpModuleState +* @details \b Outputs: requestAbortBPReading * @return none ***************************************************************************/ void abortBPReading( void ) @@ -181,7 +181,7 @@ * measurement results against configured thresholds and activates * corresponding blood pressure alarms. * @details \b Inputs: bpResults - * @details \b Outputs: activate BP alarms + * @details \b Outputs: activateAlarm * @return none ***************************************************************************/ static void checkBloodPressureReading( BP_RESULTS_T *bpResults ) @@ -346,7 +346,7 @@ * The publishVitalsData function publishes blood pressure data. * @details \b Message \b Sent: MSG_ID_TD_BLOOD_PRESSURE_DATA * @details \b Inputs: bpResults -* @details \b Outputs: blood pressure data published to CAN bus. +* @details \b Outputs: bpPublishTimerCtr * @return none *************************************************************************/ static void publishVitalsData( void ) Index: firmware/App/Services/AlarmMgmtSWFaults.h =================================================================== diff -u -rd8321750d630eb1826d43f4fc9e4adf8ff4b07b0 -r9c4cdc42d3bcef089a9627b206496cb23bc3f643 --- firmware/App/Services/AlarmMgmtSWFaults.h (.../AlarmMgmtSWFaults.h) (revision d8321750d630eb1826d43f4fc9e4adf8ff4b07b0) +++ firmware/App/Services/AlarmMgmtSWFaults.h (.../AlarmMgmtSWFaults.h) (revision 9c4cdc42d3bcef089a9627b206496cb23bc3f643) @@ -7,8 +7,8 @@ * * @file AlarmMgmtSWFaults.h * -* @author (last) Praneeth Bunne -* @date (last) 21-May-2026 +* @author (last) Dara Navaei +* @date (last) 27-May-2026 * * @author (original) Sean Nash * @date (original) 01-Aug-2024 @@ -61,7 +61,7 @@ SW_FAULT_ID_CAN_PARITY_ERROR = 30, SW_FAULT_ID_CAN_OFF_ERROR = 31, SW_FAULT_ID_UNEXPECTED_DMA_INTERRUPT = 32, - SW_FAULT_ID_AVAILABLE1 = 33, + SW_FAULT_ID_MODE_UPDATE_INVALID_STATE = 33, SW_FAULT_ID_MSG_PENDING_ACK_LIST_FULL = 34, SW_FAULT_ID_MSG_QUEUES_ADD_QUEUE_FULL = 35, SW_FAULT_ID_MSG_QUEUES_ADD_INVALID_QUEUE = 36, Index: firmware/App/Services/Messaging.c =================================================================== diff -u -r5ad0389d9abad0f0a523fc44ae6c00ca8b12f313 -r9c4cdc42d3bcef089a9627b206496cb23bc3f643 --- firmware/App/Services/Messaging.c (.../Messaging.c) (revision 5ad0389d9abad0f0a523fc44ae6c00ca8b12f313) +++ firmware/App/Services/Messaging.c (.../Messaging.c) (revision 9c4cdc42d3bcef089a9627b206496cb23bc3f643) @@ -7,8 +7,8 @@ * * @file Messaging.c * -* @author (last) Praneeth Bunne -* @date (last) 21-May-2026 +* @author (last) Dara Navaei +* @date (last) 27-May-2026 * * @author (original) Sean Nash * @date (original) 01-Aug-2024 @@ -122,6 +122,7 @@ { MSG_ID_UI_ADJUST_DISPOSABLES_CONFIRM_REQUEST, &handleAutoLoadRequest }, { MSG_ID_UI_ADJUST_DISPOSABLES_REMOVAL_CONFIRM_REQUEST, &handleAutoEjectRequest }, { MSG_ID_UI_BLOOD_PRESSURE_REQUEST, &bpModuleHandleVitalsRequest }, + { MSG_ID_FFU_SIGNAL_TD_UPDATE_AVAILABLE, &handleUpdateAvailable }, { MSG_ID_TD_SOFTWARE_RESET_REQUEST, &testTDSoftwareResetRequest }, { MSG_ID_TD_BUBBLE_OVERRIDE_REQUEST, &testBubbleDetectOverride }, { MSG_ID_TD_BUBBLE_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testBubblesDataPublishIntervalOverride }, @@ -617,6 +618,18 @@ /*********************************************************************//** * @brief + * The resetMicroControllerUnit function resets the MCU. + * @details \b Inputs: none + * @details \b Outputs: none + * @return none + *************************************************************************/ +void resetMicroControllerUnit( void ) +{ + setSystemREG1_SYSECR( (0x2) << 14 ); // Reset processor +} + +/*********************************************************************//** + * @brief * The sendTestAckResponseMsg function constructs a simple response message * for a handled test message and queues it for transmit on the TD=>PC CAN * channel. @@ -685,6 +698,32 @@ /*********************************************************************//** * @brief + * The handleUpdateAvailable function handles a request from the + * Firmware FPGA Updater (FFU) to reset the TD firmware processor. + * @note If reset is successful, this function will not return. + * @details \b Inputs: none + * @details \b Outputs: TD processor soft reset if request is valid + * @param message Pointer to the reset request message + * @return FALSE if reset command rejected + *************************************************************************/ +BOOL handleUpdateAvailable( MESSAGE_T *message ) +{ + BOOL result = FALSE; + + // Verify payload length + if ( 0 == message->hdr.payloadLen ) + { // S/w reset of processor + result = TRUE; // Reset will prevent this from getting transmitted though + requestNewOperationMode( MODE_UPDT ); + } + + sendAckResponseMsg( (MSG_ID_T)message->hdr.msgID, COMM_BUFFER_OUT_CAN_TD_2_UI, result ); + + return result; +} + +/*********************************************************************//** + * @brief * The testTDSoftwareResetRequest function handles a request to reset the * TD firmware processor. * @note If reset is successful, this function will not return. @@ -701,7 +740,7 @@ if ( 0 == message->hdr.payloadLen ) { // S/w reset of processor result = TRUE; // Reset will prevent this from getting transmitted though - setSystemREG1_SYSECR( (0x2) << 14 ); // Reset processor + resetMicroControllerUnit(); } sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result );