]> rtime.felk.cvut.cz Git - pes-rpp/rpp-lib.git/blobdiff - rpp/src/drv/fr_tms570.c
Reorganize the logic for restarting FlexRay communication to be Autosar compliant
[pes-rpp/rpp-lib.git] / rpp / src / drv / fr_tms570.c
index a0be67edc533947ce28448700622d1e9e7317bc4..3ce63d80b0cbe86d686b0e6ccfaefa8d28b1808c 100644 (file)
@@ -882,15 +882,18 @@ Std_ReturnType Fr_ControllerInit(uint8_t Fr_CtrlIdx) {
        uint8_t totalBufferCount;
 
 #ifdef DET_ACTIVATED
-       if (Fr_DrvState != FR_ST_DRV_INITIALIZED) {
+       if (Fr_DrvState < FR_ST_DRV_INITIALIZED) {
                return E_NOT_OK;
        }
 #endif
 
        /* Switch CC into ‘POC:config’ (from any other POCState) */
-       if (Fr_POC_go_to_config() == E_NOT_OK) {
-               return E_NOT_OK;
+       while (frayREG->CCSV_UN.CCSV_ST.pocs_B6 != FR_POCS_CONFIG) {
+               if (Fr_POC_go_to_config() == E_NOT_OK) {
+                       return E_NOT_OK;
+               }
        }
+
        /* Check Cluster config parameters */
        if (Fr_check_cluster_parameters(Fr_Config->clusterConfiguration, &errCode) == E_NOT_OK) {
                return E_NOT_OK | errCode | FR_INIT_ERR_CLUSTER_CONFIG;
@@ -925,6 +928,12 @@ Std_ReturnType Fr_ControllerInit(uint8_t Fr_CtrlIdx) {
        totalBufferCount = Fr_config_msgRAM_parameters(Fr_Config->msgRAMConfig);
        Fr_MsgRAMDataStartAddress = totalBufferCount*4U; // First data section after headers sections in message RAM.
        Fr_MsgRAMDataOffset = Fr_MsgRAMDataStartAddress;
+
+       /* Reset configured flags */
+       for (i = 0; i < totalBufferCount; i++) {
+               Fr_BuffersConfigured[i] = FALSE;
+       }
+
        /* Configure all transmit/receive resources */
        for (i = 0; i < totalBufferCount; i++) {
                if (Fr_PrepareLPdu(Fr_CtrlIdx, Fr_buffer_slot_map[i].buffer_ptr->slotId) == E_NOT_OK) {
@@ -1550,7 +1559,7 @@ Std_ReturnType Fr_PrepareLPdu(uint8_t Fr_CtrlIdx, uint16_t Fr_LPduIdx) {
        if (Fr_CtrlIdx != 0) {
                return E_NOT_OK;
        }
-       if (Fr_DrvState != FR_ST_DRV_INITIALIZED) {
+       if (Fr_DrvState < FR_ST_DRV_INITIALIZED) {
                return E_NOT_OK;
        }
        if (Fr_LPduIdx > cSlotIDMax) {