Index: firmware/App/Services/Reservoirs.c =================================================================== diff -u -rb607a94701f5844f2e850783239d1cb2df87fcd5 -r09cde48e11d32be58fe9e1e7c88ada33cff664f5 --- firmware/App/Services/Reservoirs.c (.../Reservoirs.c) (revision b607a94701f5844f2e850783239d1cb2df87fcd5) +++ firmware/App/Services/Reservoirs.c (.../Reservoirs.c) (revision 09cde48e11d32be58fe9e1e7c88ada33cff664f5) @@ -499,8 +499,12 @@ *************************************************************************/ void setHDOperationMode( U32 mode, U32 subMode ) { + // thread protection for queue operations + _disable_IRQ(); hdModes.hdMode = (HD_OP_MODE_T)mode; hdModes.hdSubMode = subMode; + // release thread protection + _enable_IRQ(); } /*********************************************************************//** @@ -514,7 +518,8 @@ *************************************************************************/ void getHDOperationMode( HD_MODE_SUB_MODE_T* mode ) { - memcpy( mode, &hdModes, sizeof( HD_MODE_SUB_MODE_T ) ); + mode->hdMode = hdModes.hdMode; + mode->hdSubMode = hdModes.hdSubMode; } /*********************************************************************//** Index: firmware/App/Services/SystemComm.c =================================================================== diff -u -r821d1609f976b1fc01389f2e865aebcaa6434a78 -r09cde48e11d32be58fe9e1e7c88ada33cff664f5 --- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 821d1609f976b1fc01389f2e865aebcaa6434a78) +++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 09cde48e11d32be58fe9e1e7c88ada33cff664f5) @@ -7,8 +7,8 @@ * * @file SystemComm.c * -* @author (last) Dara Navaei -* @date (last) 11-Jun-2023 +* @author (last) Michael Garthwaite +* @date (last) 21-Aug-2023 * * @author (original) Dara Navaei * @date (original) 05-Nov-2019 @@ -106,6 +106,7 @@ static U32 canXmitRetryCtr = 0; ///< counter for CAN transmit retries. static OVERRIDE_U32_T hdCommunicationStatus = {0, 0, 0, 0}; ///< has HD sent a message since last check static volatile U32 timeOfLastHDCheckIn = 0; ///< last time we received an HD broadcast +static OVERRIDE_U32_T pendingACKOverride = { 0, 0, 0, 0 }; ///< Pending ACK override data structure. // ********** private function prototypes ********** @@ -781,7 +782,7 @@ { for ( i = 0; i < PENDING_ACK_LIST_SIZE; i++ ) { // pending ACK expired? - if ( ( TRUE == pendingAckList[ i ].used ) && ( TRUE == didTimeout( pendingAckList[ i ].timeStamp, MSG_NOT_ACKED_TIMEOUT_MS ) ) ) + if ( ( TRUE == pendingAckList[ i ].used ) && ( ( TRUE == didTimeout( pendingAckList[ i ].timeStamp, MSG_NOT_ACKED_TIMEOUT_MS ) ) || ( getU32OverrideValue( &pendingACKOverride ) > 0 ) ) ) { // if retries left, reset and resend pending message. Do not retry when in POST since the UI might not still be responsive if ( pendingAckList[ i ].retries > 0 ) { @@ -1029,7 +1030,7 @@ handleTestValveStateOverrideRequest( message ); break; - case MSG_ID_VALVES_STATES_PUBLISH_INTERVAL_OVERRIDE: + case MSG_ID_DG_VALVES_STATES_PUBLISH_INTERVAL_OVERRIDE: handleTestValvesStatesPublishIntervalOverrideRequest( message ); break; @@ -1357,6 +1358,26 @@ handleTestDGSetRecoverFromFaultModeSignal( message ); break; + case MSG_ID_DG_DRAIN_MODE_BROADCAST_INTERVAL_OVERRIDE: + handleTestDGDrainModeBroadcastOverrideRequest( message ); + break; + + case MSG_ID_DG_DIALIN_RO_ONLY_MODE_STATUS_REQUEST: + handleDGROStatusRequest( message ); + break; + + case MSG_ID_DG_RAM_STATUS_OVERRIDE: + handleTestDGRAMStatusOverrideRequest( message ); + break; + + case MSG_ID_DG_RESERVOIR_BROADCAST_INTERVAL_OVERRIDE: + handleTestDGReservoirOverrideRequest( message ); + break; + + case MSG_ID_DG_CAN_RECEIVE_ACK_MESSAGE_OVERRIDE: + handleTestDGPendingACKOverrideRequest( message ); + break; + default: // TODO - unrecognized message ID received - ignore break; @@ -1414,4 +1435,48 @@ return result; } +/*********************************************************************//** + * @brief + * The testSetPendingACKOverride function overrides the + * pendingACKOverride variable. + * @details Inputs: none + * @details Outputs: pendingACKOverride + * @param value override for pendingACKOverride + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testSetPendingACKOverride( U32 value ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + pendingACKOverride.ovData = value; + pendingACKOverride.override = OVERRIDE_KEY; + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testResetPendingACKOverride function resets the override + * of the pendingACKOverride variable. + * @details Inputs: none + * @details Outputs: pendingACKOverride + * @return TRUE if override reset successful, FALSE if not + *************************************************************************/ +BOOL testResetPendingACKOverride( void ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + pendingACKOverride.override = OVERRIDE_RESET; + pendingACKOverride.ovData = pendingACKOverride.ovInitData; + } + + return result; +} /**@}*/ Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -rb607a94701f5844f2e850783239d1cb2df87fcd5 -r09cde48e11d32be58fe9e1e7c88ada33cff664f5 --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision b607a94701f5844f2e850783239d1cb2df87fcd5) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 09cde48e11d32be58fe9e1e7c88ada33cff664f5) @@ -341,7 +341,7 @@ // create a message record blankMessage( &msg ); msg.hdr.msgID = MSG_ID_ALARM_TRIGGERED; - msg.hdr.payloadLen = sizeof( U32 ) * 5; + msg.hdr.payloadLen = sizeof( U32 ) * 8; memcpy( payloadPtr, &alarm, sizeof( U32 ) ); payloadPtr += sizeof( U32 ); @@ -1551,9 +1551,9 @@ U32 mode = 0; U32 subMode = 0; - memcpy( payloadPtr, &mode, sizeof( U32 ) ); + memcpy( &mode, payloadPtr, sizeof( U32 ) ); payloadPtr += sizeof( U32 ); - memcpy( payloadPtr, &subMode, sizeof( U32 ) ); + memcpy( &subMode, payloadPtr, sizeof( U32 ) ); setHDOperationMode( mode, subMode ); status = TRUE;