]> rtime.felk.cvut.cz Git - arc.git/blob - include/EcuM.h
Merge with prev. default
[arc.git] / include / EcuM.h
1 /* -------------------------------- Arctic Core ------------------------------
2  * Arctic Core - the open source AUTOSAR platform http://arccore.com
3  *
4  * Copyright (C) 2009  ArcCore AB <contact@arccore.com>
5  *
6  * This source code is free software; you can redistribute it and/or modify it
7  * under the terms of the GNU General Public License version 2 as published by the
8  * Free Software Foundation; See <http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt>.
9  *
10  * This program is distributed in the hope that it will be useful, but
11  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
12  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
13  * for more details.
14  * -------------------------------- Arctic Core ------------------------------*/
15
16
17
18
19
20
21
22
23 #ifndef ECUM_H_\r
24 #define ECUM_H_\r
25 \r
26 #include "Std_Types.h"\r
27 #include "Os.h"\r
28 #if defined(USE_COM)\r
29 #include "ComStack_Types.h"\r
30 #endif\r
31 \r
32 // Error codes produced by this module\r
33 #define ECUM_E_NOT_INITIATED (0x10)\r
34 #define ECUM_E_SERVICE_DISABLED (0x11)\r
35 #define ECUM_E_NULL_POINTER (0x12)\r
36 #define ECUM_E_INVALID_PAR (0x13)\r
37 #define ECUM_E_MULTIPLE_RUN_REQUESTS (0x14)\r
38 #define ECUM_E_MISMATCHED_RUN_RELEASE (0x15)\r
39 #define ECUM_E_STATE_PAR_OUT_OF_RANGE (0x16)\r
40 #define ECUM_E_UNKNOWN_WAKEUP_SOURCE (0x17)\r
41 \r
42 // Service ID in this module\r
43 #define ECUM_GETSTATE_ID (0x07)\r
44 #define ECUM_SELECTAPPMODE_ID (0x0f)\r
45 #define ECUM_GETAPPMODE_ID (0x11)\r
46 #define ECUM_SELECT_BOOTARGET_ID (0x12)\r
47 #define ECUM_GET_BOOTARGET_ID (0x13)\r
48 #define ECUM_MAINFUNCTION_ID (0x18)\r
49 \r
50 typedef enum {\r
51         ECUM_STATE_APP_RUN = 0x32,\r
52         ECUM_STATE_SHUTDOWN = 0x40,\r
53         ECUM_STATE_WAKEUP = 0x20,\r
54         ECUM_SUBSTATE_MASK = 0x0F,\r
55         ECUM_STATE_WAKEUP_WAKESLEEP = 0x25,\r
56         ECUM_STATE_WAKEUP_ONE = 0x21,\r
57         ECUM_STATE_OFF = 0x80,\r
58         ECUM_STATE_STARTUP = 0x10,\r
59         ECUM_STATE_PREP_SHUTDOWN = 0x44,\r
60         ECUM_STATE_RUN = 0x30,\r
61         ECUM_STATE_STARTUP_TWO = 0x12,\r
62         ECUM_STATE_WAKEUP_TTII = 0x26,\r
63         ECUM_STATE_WAKEUP_VALIDATION = 0x22,\r
64         ECUM_STATE_GO_SLEEP = 0x49,\r
65         ECUM_STATE_STARTUP_ONE = 0x11,\r
66         ECUM_STATE_WAKEUP_TWO = 0x24,\r
67         ECUM_STATE_SLEEP = 0x50,\r
68         ECUM_STATE_WAKEUP_REACTION = 0x23,\r
69         ECUM_STATE_APP_POST_RUN = 0x33,\r
70         ECUM_STATE_GO_OFF_TWO = 0x4e,\r
71         ECUM_STATE_RESET = 0x90,\r
72         ECUM_STATE_GO_OFF_ONE = 0x4d\r
73 } EcuM_StateType;\r
74 \r
75 typedef uint8 EcuM_UserType;\r
76 \r
77 enum {\r
78         //      Internal reset of µC (bit 2)\r
79         //      The internal reset typically only resets the µC\r
80         //      core but not peripherals or memory\r
81         //      controllers. The exact behavior is hardware\r
82         //      specific.\r
83         //      This source may also indicate an unhandled\r
84         //      exception.\r
85         ECUM_WKSOURCE_INTERNAL_RESET = 0x04,\r
86 \r
87         //      Reset by external watchdog (bit 4), if\r
88         //      detection supported by hardware\r
89         ECUM_WKSOURCE_EXTERNAL_WDG = 0x10,\r
90 \r
91         // Reset by internal watchdog (bit 3)\r
92         ECUM_WKSOURCE_INTERNAL_WDG = 0x08,\r
93 \r
94         // Power cycle (bit 0)\r
95         ECUM_WKSOURCE_POWER = 0x01,\r
96 \r
97         // ~0 to the power of 29\r
98         ECUM_WKSOURCE_ALL_SOURCES = 0x3FFFFFFF,\r
99 \r
100         // Hardware reset (bit 1).\r
101         // If hardware cannot distinguish between a\r
102         // power cycle and a reset reason, then this\r
103         // shall be the default wakeup source\r
104         ECUM_WKSOURCE_RESET = 0x02,\r
105 };\r
106 \r
107 typedef uint32 EcuM_WakeupSourceType;\r
108 \r
109 typedef enum\r
110 {\r
111         ECUM_WKSTATUS_NONE = 0, // No pending wakeup event was detected\r
112         ECUM_WKSTATUS_PENDING = 1, // The wakeup event was detected but not yet validated\r
113         ECUM_WKSTATUS_VALIDATED = 2, // The wakeup event is valid\r
114         ECUM_WKSTATUS_EXPIRED = 3, // The wakeup event has not been validated and has expired therefore\r
115 } EcuM_WakeupStatusType;\r
116 \r
117 typedef enum\r
118 {\r
119         ECUM_WWKACT_RUN = 0, // Initialization into RUN state\r
120         ECUM_WKACT_TTII = 2, // Execute time triggered increased inoperation protocol and shutdown\r
121         ECUM_WKACT_SHUTDOWN = 3, // Immediate shutdown\r
122 } EcuM_WakeupReactionType;\r
123 \r
124 typedef enum\r
125 {\r
126         ECUM_BOOT_TARGET_APP = 0, // The Ecu will boot into the application\r
127         ECUM_BOOT_TARGET_BOOTLOADER = 1, // The Ecu will boot into the bootloader\r
128 } EcuM_BootTargetType;\r
129
130
131 #define ECUM_SW_MAJOR_VERSION           1
132 #define ECUM_SW_MINOR_VERSION           0
133 #define ECUM_SW_PATCH_VERSION           0
134
135 #define ECUM_AR_MAJOR_VERSION     1
136 #define ECUM_AR_MINOR_VERSION     2
137 #define ECUM_AR_PATCH_VERSION     2
138 \r
139 #include "EcuM_Cfg.h"\r
140
141 #if ( ECUM_VERSION_INFO_API == STD_ON)\r
142 void EcuM_GetVersionInfo( Std_VersionInfoType *versionInfo );\r
143 #endif\r
144 \r
145 void EcuM_Init( void );\r
146 void EcuM_StartupTwo();\r
147 void EcuM_Shutdown();\r
148 \r
149 Std_ReturnType EcuM_GetState(EcuM_StateType* state);\r
150 \r
151 Std_ReturnType EcuM_RequestRUN(EcuM_UserType user);\r
152 Std_ReturnType EcuM_ReleaseRUN(EcuM_UserType user);\r
153 \r
154 Std_ReturnType EcuM_RequestPOST_RUN(EcuM_UserType user);\r
155 Std_ReturnType EcuM_ReleasePOST_RUN(EcuM_UserType user);\r
156 \r
157 void EcuM_KillAllRUNRequests();\r
158 \r
159 #if defined(USE_COM)\r
160 Std_ReturnType EcuM_ComM_RequestRUN(NetworkHandleType channel);\r
161 Std_ReturnType EcuM_ComM_ReleaseRUN(NetworkHandleType channel);\r
162 boolean EcuM_ComM_HasRequestedRUN(NetworkHandleType channel);\r
163 #endif\r
164 \r
165 Std_ReturnType EcuM_SelectShutdownTarget(EcuM_StateType target, uint8 mode);\r
166 Std_ReturnType EcuM_GetShutdownTarget(EcuM_StateType* target, uint8* mode);\r
167 Std_ReturnType EcuM_GetLastShutdownTarget(EcuM_StateType* target, uint8* mode);\r
168 \r
169 EcuM_WakeupSourceType EcuM_GetPendingWakeupEvents();\r
170 void EcuM_ClearWakeupEvent(EcuM_WakeupSourceType sources);\r
171 EcuM_WakeupSourceType EcuM_GetValidatedWakeupEvents();\r
172 EcuM_WakeupSourceType EcuM_GetExpiredWakeupEvents();\r
173 EcuM_WakeupStatusType EcuM_GetStatusOfWakeupSource(EcuM_WakeupSourceType sources);\r
174 \r
175 Std_ReturnType EcuM_SelectApplicationMode(AppModeType appMode);\r
176 Std_ReturnType EcuM_GetApplicationMode(AppModeType* appMode);\r
177 \r
178 Std_ReturnType EcuM_SelectBootTarget(EcuM_BootTargetType target);\r
179 Std_ReturnType EcuM_GetBootTarget(EcuM_BootTargetType* target);\r
180 \r
181 void EcuM_MainFunction(void);\r
182 \r
183 void EcuM_OnGoOffTwo( void );\r
184 void EcuM_AL_SwitchOff( void );\r
185 \r
186 #endif /*ECUM_H_*/\r