Index: firmware/App/Modes/ModeInitPOST.c =================================================================== diff -u -r72dd42b6a116e62d1b3ad5d60088c29e067d10d4 -r056ecedb3542bab60491702e621e503948563a65 --- firmware/App/Modes/ModeInitPOST.c (.../ModeInitPOST.c) (revision 72dd42b6a116e62d1b3ad5d60088c29e067d10d4) +++ firmware/App/Modes/ModeInitPOST.c (.../ModeInitPOST.c) (revision 056ecedb3542bab60491702e621e503948563a65) @@ -47,6 +47,7 @@ // ********** private function prototypes ********** static DG_POST_STATE_T handlePOSTStatus( SELF_TEST_STATUS_T testStatus ); +static SELF_TEST_STATUS_T execFWCompatibilityTest( void ); /*********************************************************************//** * @brief @@ -92,7 +93,7 @@ switch ( postState ) { case DG_POST_STATE_START: - postState = DG_POST_STATE_FPGA; + postState = DG_POST_STATE_FW_COMPATIBILITY; #ifdef SKIP_POST postState = DG_POST_STATE_COMPLETED; #endif @@ -102,6 +103,11 @@ #endif break; + case DG_POST_STATE_FW_COMPATIBILITY: + testStatus = execFWCompatibilityTest(); + postState = handlePOSTStatus( testStatus ); + break; + case DG_POST_STATE_FPGA: testStatus = execFPGATest(); postState = handlePOSTStatus( testStatus ); @@ -174,6 +180,7 @@ break; #endif + // Should be last POST case DG_POST_STATE_WATCHDOG: testStatus = execWatchdogTest(); handlePOSTStatus( testStatus ); // ignoring return value because last test @@ -275,4 +282,20 @@ return postState; } +/*********************************************************************//** + * @brief + * The execFWCompatibilityTest function executes the firmware compatibility test. + * @details Inputs: none + * @details Outputs: none + * @return in progress, passed, or failed + *************************************************************************/ +static SELF_TEST_STATUS_T execFWCompatibilityTest( void ) +{ + SELF_TEST_STATUS_T result = SELF_TEST_STATUS_PASSED; + + // TODO - implement + + return result; +} + /**@}*/ Index: firmware/App/Services/FPGA.c =================================================================== diff -u -r76f413c7bde4ca9d12cc61e0191daddb1e86e9f1 -r056ecedb3542bab60491702e621e503948563a65 --- firmware/App/Services/FPGA.c (.../FPGA.c) (revision 76f413c7bde4ca9d12cc61e0191daddb1e86e9f1) +++ firmware/App/Services/FPGA.c (.../FPGA.c) (revision 056ecedb3542bab60491702e621e503948563a65) @@ -23,6 +23,7 @@ #include "FPGA.h" #include "Comm.h" +#include "Compatible.h" #include "SystemCommMessages.h" #include "Utilities.h" @@ -722,12 +723,28 @@ if ( 1 ) #endif { - result = SELF_TEST_STATUS_PASSED; + // Check FPGA compatibility w/ firmware + if ( fpgaHeader.fpgaRevMajor > MIN_DG_FPGA_MAJOR ) + { + result = SELF_TEST_STATUS_PASSED; + } + else + { + if ( ( MIN_DG_FPGA_MAJOR == fpgaHeader.fpgaRevMajor ) && ( fpgaHeader.fpgaRevMinor >= MIN_DG_FPGA_MINOR ) ) + { + result = SELF_TEST_STATUS_PASSED; + } + else + { + result = SELF_TEST_STATUS_FAILED; + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_FPGA_POST_TEST_FAILED, (U32)fpgaHeader.fpgaRevMajor, (U32)fpgaHeader.fpgaRevMinor ) + } + } } else { result = SELF_TEST_STATUS_FAILED; - SET_ALARM_WITH_1_U32_DATA( ALARM_ID_FPGA_POST_TEST_FAILED, (U32)fpgaHeader.fpgaId ) + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_DG_FPGA_POST_TEST_FAILED, (U32)fpgaHeader.fpgaId ) } return result;