]> rtime.felk.cvut.cz Git - arc.git/commitdiff
EcuM refactored for readability.
authoreija <devnull@localhost>
Tue, 1 Feb 2011 14:20:25 +0000 (15:20 +0100)
committereija <devnull@localhost>
Tue, 1 Feb 2011 14:20:25 +0000 (15:20 +0100)
system/EcuM/EcuM.c
system/EcuM/EcuM_Main.c

index 4f9f336b0a872bd03846bde0a7044706ab1396b2..cc0c810238df3f1683596ae705d79d2318da4184 100644 (file)
@@ -49,8 +49,7 @@ void EcuM_Init( void )
        // Determine PostBuild configuration\r
        internal_data.config = EcuM_DeterminePbConfiguration();\r
 \r
-       // Check consistency of PB configuration\r
-       // TODO\r
+       // TODO: Check consistency of PB configuration\r
 \r
        // Initialize drivers needed before the OS-starts\r
        EcuM_AL_DriverInitOne(internal_data.config);\r
@@ -59,7 +58,7 @@ void EcuM_Init( void )
        // TODO Mcu_ResetType type = Mcu_GetResetReason();\r
 \r
        // Set default shutdown target\r
-       // TODO: Skriva om till funktion(EcuM_SelectShutdownTarget), och testa om satt! //REQ:Ecum2181\r
+       // TODO: Rewrite into function (EcuM_SelectShutdownTarget). //REQ:Ecum2181\r
        internal_data.shutdown_target = internal_data.config->EcuMDefaultShutdownTarget;\r
        internal_data.shutdown_mode = internal_data.config->EcuMDefaultShutdownMode;\r
 \r
@@ -123,8 +122,7 @@ void EcuM_StartupTwo(void)
        EcuM_AL_DriverInitThree(internal_data.config);\r
 #endif\r
 \r
-       // Indicate mode change to RTE\r
-       // TODO\r
+       // TODO: Indicate mode change to RTE\r
 \r
        // If coming from startup sequence, enter Run mode\r
 //     if (internal_data.current_state == ECUM_STATE_STARTUP_TWO)\r
@@ -275,11 +273,10 @@ Std_ReturnType EcuM_ComM_ReleaseRUN(NetworkHandleType user)
        return E_OK;\r
 }\r
 \r
-// TODO: Fix this function, should only return bool, but do also return Std_ReturnType.\r
 boolean EcuM_ComM_HasRequestedRUN(NetworkHandleType user)\r
 {\r
-       VALIDATE_RV(internal_data.initiated, ECUM_COMM_HASREQUESTEDRUN_ID, ECUM_E_NOT_INITIATED, E_NOT_OK);\r
-       VALIDATE_RV(user < 32, ECUM_COMM_HASREQUESTEDRUN_ID, ECUM_E_INVALID_PAR, E_NOT_OK);\r
+       VALIDATE_RV(internal_data.initiated, ECUM_COMM_HASREQUESTEDRUN_ID, ECUM_E_NOT_INITIATED, FALSE);\r
+       VALIDATE_RV(user < 32, ECUM_COMM_HASREQUESTEDRUN_ID, ECUM_E_INVALID_PAR, FALSE);\r
 \r
        return (internal_data.run_comm_requests &((uint32)1 << user)) != 0;\r
 }\r
index f669b0251a0b7954883c991ba71086dd582ab461..464e3e357989a992627f3aef6f4727b57167f31c 100644 (file)
 static uint32 internal_data_run_state_timeout = 0;\r
 #if defined(USE_NVM)\r
 static uint32 internal_data_go_off_one_state_timeout = 0;\r
+static NvM_RequestResultType writeAllResult;\r
 #endif\r
 \r
 \r
-void EcuM_enter_run_mode(void)\r
-{\r
+void EcuM_enter_run_mode(void){\r
        internal_data.current_state = ECUM_STATE_APP_RUN;\r
        EcuM_OnEnterRUN(); /** @req EcuM2308 */\r
        //TODO: Call ComM_EcuM_RunModeIndication(NetworkHandleType Channel) for all channels that have requested run.\r
        internal_data_run_state_timeout = internal_data.config->EcuMRunMinimumDuration / ECUM_MAIN_FUNCTION_PERIOD; /** @req EcuM2310 */\r
 }\r
 \r
-static inline void enter_post_run_mode(void)\r
-{\r
-       internal_data.current_state = ECUM_STATE_APP_POST_RUN;\r
-}\r
 \r
-static inline void enter_prep_shutdown_mode(void)\r
-{\r
-       internal_data.current_state = ECUM_STATE_PREP_SHUTDOWN;\r
-       EcuM_OnPrepShutdown();\r
-}\r
+//--------- Local functions ------------------------------------------------------------------------------------------------\r
 \r
-static inline void enter_go_sleep_mode(void)\r
-{\r
+static inline void enter_go_sleep_mode(void){\r
        internal_data.current_state = ECUM_STATE_GO_SLEEP;\r
        EcuM_OnGoSleep();\r
 }\r
 \r
-static inline void enter_go_off_one_mode(void)\r
-{\r
+static inline void enter_go_off_one_mode(void){\r
        internal_data.current_state = ECUM_STATE_GO_OFF_ONE;\r
        EcuM_OnGoOffOne();\r
 \r
@@ -74,8 +64,8 @@ static inline void enter_go_off_one_mode(void)
 #endif\r
 }\r
 \r
-static inline boolean hasRunRequests(void)\r
-{\r
+\r
+static inline boolean hasRunRequests(void){\r
        uint32 result = internal_data.run_requests;\r
 \r
 #if defined(USE_COMM)\r
@@ -85,86 +75,100 @@ static inline boolean hasRunRequests(void)
        return (result != 0);\r
 }\r
 \r
-static inline boolean hasPostRunRequests(void)\r
-{\r
+static inline boolean hasPostRunRequests(void){\r
        return (internal_data.postrun_requests != 0);\r
 }\r
 \r
-void EcuM_MainFunction(void)\r
-{\r
-#if defined(USE_NVM)\r
-static NvM_RequestResultType writeAllResult;\r
-#endif\r
 \r
-VALIDATE_NO_RV(internal_data.initiated, ECUM_MAINFUNCTION_ID, ECUM_E_NOT_INITIATED);\r
 \r
+static inline void in_state_appRun(void){\r
+       if (internal_data_run_state_timeout){\r
+               internal_data_run_state_timeout--;\r
+       }\r
 \r
-switch(internal_data.current_state){\r
+       if ((!hasRunRequests()) && (internal_data_run_state_timeout == 0)){\r
+               EcuM_OnExitRun();       /** @req EcuM2865 */\r
+               internal_data.current_state = ECUM_STATE_APP_POST_RUN;/** @req EcuM2865 */\r
+       }\r
+}\r
 \r
-       case ECUM_STATE_APP_RUN:\r
-               if (internal_data_run_state_timeout)\r
-               {\r
-                       internal_data_run_state_timeout--;\r
-               }\r
 \r
-               if ((!hasRunRequests()) && (internal_data_run_state_timeout == 0))\r
-               {\r
-                       EcuM_OnExitRun();       /** @req EcuM2865 */\r
-                       enter_post_run_mode();/** @req EcuM2865 */\r
-                       /*lint --e(904)*/ return;\r
-               }\r
-               break;\r
-       case ECUM_STATE_APP_POST_RUN:\r
-               if (hasRunRequests())\r
-               {\r
-                       EcuM_enter_run_mode(); /** @req EcuM2866 */\r
-                       /*lint --e(904)*/ return;\r
-               }\r
+static inline void in_state_appPostRun(void){\r
+       if (hasRunRequests()){\r
+               internal_data.current_state = ECUM_STATE_APP_RUN;/** @req EcuM2866 */ /** @req EcuM2308 */\r
+               EcuM_OnEnterRUN(); /** @req EcuM2308 */\r
+               //TODO: Call ComM_EcuM_RunModeIndication(NetworkHandleType Channel) for all channels that have requested run.\r
+               internal_data_run_state_timeout = internal_data.config->EcuMRunMinimumDuration / ECUM_MAIN_FUNCTION_PERIOD; /** @req EcuM2310 */\r
 \r
-               if (!hasPostRunRequests())\r
-               {\r
-                       EcuM_OnExitPostRun(); /** @req EcuM2761 */\r
-                       enter_prep_shutdown_mode();/** @req EcuM2761 */\r
-                       /*lint --e(904)*/ return;\r
-               }\r
-               break;\r
-       case ECUM_STATE_PREP_SHUTDOWN:\r
+       } else if (!hasPostRunRequests()){\r
+               EcuM_OnExitPostRun(); /** @req EcuM2761 */\r
+               internal_data.current_state = ECUM_STATE_PREP_SHUTDOWN;/** @req EcuM2761 */\r
+\r
+               EcuM_OnPrepShutdown();\r
+       }\r
+}\r
+\r
+static inline void in_state_prepShutdown(void){\r
 #if defined(USE_DEM)\r
-               // DEM shutdown\r
-               Dem_Shutdown();\r
+       // DEM shutdown\r
+       Dem_Shutdown();\r
 #endif\r
 \r
-               // Switch shutdown mode\r
-               if ((internal_data.shutdown_target == ECUM_STATE_OFF) || (internal_data.shutdown_target == ECUM_STATE_RESET)) {\r
+       // Switch shutdown mode\r
+       switch(internal_data.shutdown_target){\r
+               //If in state Off or Reset go into Go_Off_One:\r
+               case ECUM_STATE_OFF:\r
+               case ECUM_STATE_RESET:\r
                        enter_go_off_one_mode();\r
-               }\r
-\r
-               if (internal_data.shutdown_target == ECUM_STATE_SLEEP) {\r
+                       break;\r
+               case ECUM_STATE_SLEEP:\r
                        enter_go_sleep_mode();\r
-               }\r
-               break;\r
-       case ECUM_STATE_GO_OFF_ONE:\r
+                       break;\r
+               default:\r
+                       //TODO: Report error.\r
+                       break;\r
+       }\r
+}\r
+\r
+static inline void in_state_goOffOne(void){\r
 #if defined(USE_NVM)\r
                if (internal_data_go_off_one_state_timeout){\r
                        internal_data_go_off_one_state_timeout--;\r
                }\r
-\r
                // Wait for the NVM job (NvmWriteAll) to terminate\r
                NvM_GetErrorStatus(0, &writeAllResult);\r
-               if ((writeAllResult != NVM_REQ_PENDING) || (internal_data_go_off_one_state_timeout == 0))\r
-               {\r
+               if ((writeAllResult != NVM_REQ_PENDING) || (internal_data_go_off_one_state_timeout == 0)){\r
                        ShutdownOS(E_OK);\r
                }\r
 #else\r
                ShutdownOS(E_OK);\r
 #endif\r
-               break;\r
-       case ECUM_STATE_GO_SLEEP:\r
-               // TODO: Fill out\r
-               break;\r
-       default:\r
-               //TODO: Do something if the state does not belong to main at all?\r
-               break;\r
 }\r
 \r
+\r
+//----- MAIN -----------------------------------------------------------------------------------------------------------------\r
+void EcuM_MainFunction(void){\r
+       VALIDATE_NO_RV(internal_data.initiated, ECUM_MAINFUNCTION_ID, ECUM_E_NOT_INITIATED);\r
+\r
+       switch(internal_data.current_state){\r
+\r
+               case ECUM_STATE_APP_RUN:\r
+                       in_state_appRun();\r
+                       break;\r
+               case ECUM_STATE_APP_POST_RUN:\r
+                       in_state_appPostRun();\r
+                       break;\r
+               case ECUM_STATE_PREP_SHUTDOWN:\r
+                       in_state_prepShutdown();\r
+                       break;\r
+               case ECUM_STATE_GO_OFF_ONE:\r
+                       in_state_goOffOne();\r
+                       break;\r
+               case ECUM_STATE_GO_SLEEP:\r
+                       // TODO: Fill out\r
+                       break;\r
+               default:\r
+                       //TODO: Report error.\r
+                       break;\r
+       }\r
 }\r