Index: firmware/App/Services/FPGA.c =================================================================== diff -u -re8511af1e4e9d91cfd3378471869fb0246110870 -ra858229eb2ab05404dba3e29c95e2d5f7800efe6 --- firmware/App/Services/FPGA.c (.../FPGA.c) (revision e8511af1e4e9d91cfd3378471869fb0246110870) +++ firmware/App/Services/FPGA.c (.../FPGA.c) (revision a858229eb2ab05404dba3e29c95e2d5f7800efe6) @@ -119,6 +119,9 @@ { BOOL hasUpdateRegsBeenRqstd; U16 fifoRemainingCount; + BOOL isFlashEraseOk; + BOOL isFlashStatusOk; + U16 flashStatusBits; FPGA_FLASH_STATE_T fpgaFlashState; U32 startTime; } FPGA_FLASH_STATUS_T; @@ -156,7 +159,6 @@ static U32 TESTREMOVE = 0; // TODO remove static U32 countRemove = 0; // TODO remove -static U16 tempFlashStatus; static U08 tempACkStatus = 0; static const U08 STACK_FPGA_ID[ NUM_OF_FW_STACKS ] = { 0x5A, 0x61, 0xFF }; // TODO update with the real FPGA IDs @@ -235,10 +237,10 @@ data[1] = (U08)fpgaState; data[2] = GET_LSB_OF_WORD( fpgaFlashStatus.fifoRemainingCount ); data[3] = GET_MSB_OF_WORD( fpgaFlashStatus.fifoRemainingCount ); - data[4] = GET_LSB_OF_WORD( tempFlashStatus ); - data[5] = GET_MSB_OF_WORD( tempFlashStatus ); + data[4] = GET_LSB_OF_WORD( fpgaFlashStatus.flashStatusBits ); + data[5] = GET_MSB_OF_WORD( fpgaFlashStatus.flashStatusBits ); data[6] = tempACkStatus; - data[7] = 0; + data[7] = (U08)fpgaFlashStatus.isFlashStatusOk; broadcastDataTestRemove(data); // TODO test code remove @@ -486,39 +488,21 @@ U16 fifoStatus = MAKE_WORD_OF_BYTES( fpgaReadResponseBuffer[ FPGA_FLASH_STATUS_INDEX + sizeof( U16 ) ], fpgaReadResponseBuffer[ FPGA_FLASH_STATUS_INDEX + sizeof( U16 ) - 1 ] ); - tempFlashStatus = flashStatus; // TODO remove - fpgaFlashStatus.fpgaFlashState = FPGA_UPDATE_NOT_READY; fpgaFlashStatus.fifoRemainingCount = FPGA_FIFO_SIZE_BYTES - ( FPGA_FIFO_COUNT_MASK & fifoStatus ); fpgaFlashStatus.hasUpdateRegsBeenRqstd = FALSE; + fpgaFlashStatus.flashStatusBits = flashStatus; + fpgaFlashStatus.isFlashStatusOk = FALSE; if ( ( flashStatus & FPGA_ERASE_FIFO_CMD_OK ) == FPGA_ERASE_FIFO_CMD_OK ) { - fpgaFlashStatus.fpgaFlashState = FPGA_UPDATE_READY; + fpgaFlashStatus.isFlashEraseOk = TRUE; } if ( ( flashStatus & FPGA_FLASH_STATUS_OK ) == FPGA_FLASH_STATUS_OK ) { - fpgaFlashStatus.fpgaFlashState = FPGA_UPDATE_READY; + fpgaFlashStatus.isFlashStatusOk = TRUE; } - - if ( fpgaFlashStatus.fifoRemainingCount >= SW_UPDATE_FLASH_BUFFER_SIZE ) - { - fpgaFlashStatus.fpgaFlashState = FPGA_UPDATE_READY; - } - else - { - fpgaFlashStatus.fpgaFlashState = FPGA_UPDATE_FIFO_FULL; - } - - // TODO remove - /* - if ( fpgaFlashStatus.fifoRemainingCount < FPGA_FIFO_SIZE_BYTES ) - { - BOOL dara = FALSE; - } - // TODO remove - */ } } } @@ -690,9 +674,13 @@ { BOOL isDequeueAllowed = TRUE; - if ( ( FPGA_FLASH_WRITE_DATA == peekFromQueue() ) && ( fpgaFlashStatus.fifoRemainingCount < SW_UPDATE_FLASH_BUFFER_SIZE ) ) + if ( FPGA_FLASH_WRITE_DATA == peekFromQueue() ) { - isDequeueAllowed = FALSE; + if ( ( fpgaFlashStatus.fifoRemainingCount < SW_UPDATE_FLASH_BUFFER_SIZE ) || + ( FALSE == fpgaFlashStatus.isFlashStatusOk ) || ( FALSE == fpgaFlashStatus.isFlashEraseOk ) ) + { + isDequeueAllowed = FALSE; + } } if ( TRUE == isDequeueAllowed )