1 /* -------------------------------- Arctic Core ------------------------------
\r
2 * Arctic Core - the open source AUTOSAR platform http://arccore.com
\r
4 * Copyright (C) 2009 ArcCore AB <contact@arccore.com>
\r
6 * This source code is free software; you can redistribute it and/or modify it
\r
7 * under the terms of the GNU General Public License version 2 as published by the
\r
8 * Free Software Foundation; See <http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt>.
\r
10 * This program is distributed in the hope that it will be useful, but
\r
11 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
\r
12 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
\r
14 * -------------------------------- Arctic Core ------------------------------*/
\r
16 #include "Modules.h"
\r
21 #include "Adc_Internal.h"
\r
24 #define ADC_NOF_GROUP_PER_CONTROLLER 100
\r
27 /* Validate functions used for development error check */
\r
28 #if ( ADC_DEV_ERROR_DETECT == STD_ON )
\r
29 Std_ReturnType ValidateInit(Adc_StateType adcState, Adc_APIServiceIDType api)
\r
31 Std_ReturnType res = E_OK;
\r
32 if(!(ADC_INIT == adcState)) {
\r
33 Det_ReportError(MODULE_ID_ADC,0,api,ADC_E_UNINIT );
\r
38 Std_ReturnType ValidateGroup(const Adc_ConfigType *ConfigPtr, Adc_GroupType group,Adc_APIServiceIDType api)
\r
40 Std_ReturnType res = E_OK;
\r
41 if(!(((group % ADC_NOF_GROUP_PER_CONTROLLER) >= 0) && ((group % ADC_NOF_GROUP_PER_CONTROLLER) < ConfigPtr->nbrOfGroups))) {
\r
42 Det_ReportError(MODULE_ID_ADC,0,api,ADC_E_PARAM_GROUP );
\r
50 Adc_StatusType Adc_InternalGetGroupStatus (Adc_StateType adcState, const Adc_ConfigType *ConfigPtr, Adc_GroupType group)
\r
52 Adc_StatusType returnValue;
\r
54 #if ( ADC_DEV_ERROR_DETECT == STD_ON )
\r
55 if( (ValidateInit(adcState, ADC_GETGROUPSTATUS_ID) == E_NOT_OK) ||
\r
56 (ValidateGroup(ConfigPtr, group, ADC_GETGROUPSTATUS_ID) == E_NOT_OK))
\r
58 returnValue = ADC_IDLE;
\r
62 returnValue = ConfigPtr->groupConfigPtr[group%ADC_NOF_GROUP_PER_CONTROLLER].status->groupStatus;
\r
65 returnValue = ConfigPtr->groupConfigPtr[group%ADC_NOF_GROUP_PER_CONTROLLER].status->groupStatus;
\r
67 return (returnValue);
\r
70 #if (ADC_GRP_NOTIF_CAPABILITY == STD_ON)
\r
71 void Adc_EnableInternalGroupNotification (Adc_StateType adcState, const Adc_ConfigType *ConfigPtr, Adc_GroupType group)
\r
75 #if ( ADC_DEV_ERROR_DETECT == STD_ON )
\r
76 if( (ValidateInit(adcState, ADC_ENABLEGROUPNOTIFICATION_ID) == E_NOT_OK) ||
\r
77 (ValidateGroup(ConfigPtr, group, ADC_ENABLEGROUPNOTIFICATION_ID) == E_NOT_OK))
\r
81 else if (ConfigPtr->groupConfigPtr[group%ADC_NOF_GROUP_PER_CONTROLLER].groupCallback == NULL)
\r
84 Det_ReportError(MODULE_ID_ADC,0,ADC_ENABLEGROUPNOTIFICATION_ID ,ADC_E_NOTIF_CAPABILITY );
\r
88 /* Nothing strange. Go on... */
\r
95 ConfigPtr->groupConfigPtr[group%ADC_NOF_GROUP_PER_CONTROLLER].status->notifictionEnable = 1;
\r
99 void Adc_InternalDisableGroupNotification (Adc_StateType adcState, const Adc_ConfigType *ConfigPtr, Adc_GroupType group)
\r
101 Std_ReturnType res;
\r
103 #if ( ADC_DEV_ERROR_DETECT == STD_ON )
\r
104 if( (ValidateInit(adcState, ADC_DISABLEGROUPNOTIFICATION_ID) == E_NOT_OK) ||
\r
105 (ValidateGroup(ConfigPtr, group, ADC_DISABLEGROUPNOTIFICATION_ID) == E_NOT_OK))
\r
109 else if (ConfigPtr->groupConfigPtr[group%ADC_NOF_GROUP_PER_CONTROLLER].groupCallback == NULL)
\r
112 Det_ReportError(MODULE_ID_ADC,0,ADC_DISABLEGROUPNOTIFICATION_ID ,ADC_E_NOTIF_CAPABILITY );
\r
116 /* Nothing strange. Go on... */
\r
123 ConfigPtr->groupConfigPtr[group%ADC_NOF_GROUP_PER_CONTROLLER].status->notifictionEnable = 0;
\r
130 /* Development error checking functions. */
\r
131 #if (ADC_READ_GROUP_API == STD_ON)
\r
132 Std_ReturnType Adc_CheckReadGroup (Adc_StateType adcState, const Adc_ConfigType *ConfigPtr, Adc_GroupType group)
\r
134 Std_ReturnType returnValue = E_OK;
\r
136 #if ( ADC_DEV_ERROR_DETECT == STD_ON )
\r
138 if( (ValidateInit(adcState, ADC_READGROUP_ID) == E_NOT_OK) ||
\r
139 (ValidateGroup(ConfigPtr, group, ADC_READGROUP_ID) == E_NOT_OK))
\r
141 returnValue = E_NOT_OK;
\r
143 else if (ADC_IDLE == ConfigPtr->groupConfigPtr[group%ADC_NOF_GROUP_PER_CONTROLLER].status->groupStatus)
\r
146 returnValue = E_NOT_OK;
\r
147 Det_ReportError(MODULE_ID_ADC,0,ADC_READGROUP_ID ,ADC_E_IDLE );
\r
151 /* Nothing strange. Go on... */
\r
152 returnValue = E_OK;
\r
155 return (returnValue);
\r
159 #if (ADC_ENABLE_START_STOP_GROUP_API == STD_ON)
\r
160 Std_ReturnType Adc_CheckStartGroupConversion (Adc_StateType adcState, const Adc_ConfigType *ConfigPtr, Adc_GroupType group)
\r
162 Std_ReturnType returnValue = E_OK;
\r
164 #if ( ADC_DEV_ERROR_DETECT == STD_ON )
\r
166 if( (ValidateInit(adcState, ADC_STARTGROUPCONVERSION_ID) == E_NOT_OK) ||
\r
167 (ValidateGroup(ConfigPtr, group, ADC_STARTGROUPCONVERSION_ID) == E_NOT_OK))
\r
169 returnValue = E_NOT_OK;
\r
171 else if ( NULL == ConfigPtr->groupConfigPtr[group%ADC_NOF_GROUP_PER_CONTROLLER].status->resultBufferPtr )
\r
173 /* ResultBuffer not set, ADC424 */
\r
174 Det_ReportError(MODULE_ID_ADC,0,ADC_STARTGROUPCONVERSION_ID, ADC_E_BUFFER_UNINIT );
\r
175 returnValue = E_NOT_OK;
\r
177 else if (!(ADC_TRIGG_SRC_SW == ConfigPtr->groupConfigPtr[group%ADC_NOF_GROUP_PER_CONTROLLER].triggerSrc))
\r
179 /* Wrong trig source, ADC133. */
\r
180 Det_ReportError(MODULE_ID_ADC,0,ADC_STARTGROUPCONVERSION_ID, ADC_E_WRONG_TRIGG_SRC);
\r
181 returnValue = E_NOT_OK;
\r
183 else if (!((ADC_IDLE == ConfigPtr->groupConfigPtr[group%ADC_NOF_GROUP_PER_CONTROLLER].status->groupStatus) ||
\r
184 (ADC_STREAM_COMPLETED == ConfigPtr->groupConfigPtr[group%ADC_NOF_GROUP_PER_CONTROLLER].status->groupStatus)))
\r
186 /* Group status not OK, ADC351, ADC428 */
\r
187 Det_ReportError(MODULE_ID_ADC,0,ADC_STARTGROUPCONVERSION_ID, ADC_E_BUSY );
\r
189 //returnValue = E_NOT_OK;
\r
190 returnValue = E_OK;
\r
194 returnValue = E_OK;
\r
198 return (returnValue);
\r
201 Std_ReturnType Adc_CheckStopGroupConversion (Adc_StateType adcState, const Adc_ConfigType *ConfigPtr, Adc_GroupType group)
\r
203 Std_ReturnType returnValue = E_OK;
\r
205 #if ( ADC_DEV_ERROR_DETECT == STD_ON )
\r
206 if( (ValidateInit(adcState, ADC_STOPGROUPCONVERSION_ID) == E_NOT_OK) ||
\r
207 (ValidateGroup(ConfigPtr, group, ADC_STOPGROUPCONVERSION_ID) == E_NOT_OK))
\r
209 returnValue = E_NOT_OK;
\r
211 else if (!(ADC_TRIGG_SRC_SW == ConfigPtr->groupConfigPtr[group%ADC_NOF_GROUP_PER_CONTROLLER].triggerSrc))
\r
213 /* Wrong trig source, ADC164. */
\r
214 Det_ReportError(MODULE_ID_ADC,0,ADC_STOPGROUPCONVERSION_ID, ADC_E_WRONG_TRIGG_SRC);
\r
215 returnValue = E_NOT_OK;
\r
217 else if (ADC_IDLE == ConfigPtr->groupConfigPtr[group%ADC_NOF_GROUP_PER_CONTROLLER].status->groupStatus)
\r
219 /* Group status not OK, ADC241 */
\r
220 Det_ReportError(MODULE_ID_ADC,0,ADC_STOPGROUPCONVERSION_ID, ADC_E_IDLE );
\r
221 returnValue = E_NOT_OK;
\r
225 returnValue = E_OK;
\r
229 return (returnValue);
\r
233 Std_ReturnType Adc_CheckInit (Adc_StateType adcState, const Adc_ConfigType *ConfigPtr)
\r
235 Std_ReturnType returnValue = E_OK;
\r
237 #if ( ADC_DEV_ERROR_DETECT == STD_ON )
\r
238 if (!(ADC_UNINIT == adcState))
\r
240 /* Oops, already initialised. */
\r
241 Det_ReportError(MODULE_ID_ADC,0,ADC_INIT_ID, ADC_E_ALREADY_INITIALIZED );
\r
242 returnValue = E_NOT_OK;
\r
244 else if (ConfigPtr == NULL)
\r
246 /* Wrong config! */
\r
247 Det_ReportError(MODULE_ID_ADC,0,ADC_INIT_ID, ADC_E_PARAM_CONFIG );
\r
248 returnValue = E_NOT_OK;
\r
253 returnValue = E_OK;
\r
256 return (returnValue);
\r
259 #if (ADC_DEINIT_API == STD_ON)
\r
260 Std_ReturnType Adc_CheckDeInit (Adc_StateType adcState, const Adc_ConfigType *ConfigPtr)
\r
262 Std_ReturnType returnValue = E_OK;
\r
264 #if ( ADC_DEV_ERROR_DETECT == STD_ON )
\r
265 if(ValidateInit(adcState, ADC_DEINIT_ID) == E_OK)
\r
267 for (Adc_GroupType group = (Adc_GroupType)0; group < ConfigPtr->nbrOfGroups; group++)
\r
269 /* Check ADC is IDLE or COMPLETE*/
\r
270 if((ConfigPtr->groupConfigPtr[group%ADC_NOF_GROUP_PER_CONTROLLER].status->groupStatus != ADC_IDLE) && (ConfigPtr->groupConfigPtr[group%ADC_NOF_GROUP_PER_CONTROLLER].status->groupStatus != ADC_STREAM_COMPLETED))
\r
272 Det_ReportError(MODULE_ID_ADC,0,ADC_DEINIT_ID, ADC_E_BUSY );
\r
273 returnValue = E_NOT_OK;
\r
279 returnValue = E_NOT_OK;
\r
282 return (returnValue);
\r
286 Std_ReturnType Adc_CheckSetupResultBuffer (Adc_StateType adcState, const Adc_ConfigType *ConfigPtr, Adc_GroupType group)
\r
288 Std_ReturnType returnValue = E_OK;
\r
290 #if ( ADC_DEV_ERROR_DETECT == STD_ON )
\r
291 if( (ValidateInit(adcState, ADC_SETUPRESULTBUFFER_ID) == E_NOT_OK) ||
\r
292 (ValidateGroup(ConfigPtr, group, ADC_SETUPRESULTBUFFER_ID) == E_NOT_OK))
\r
294 returnValue = E_NOT_OK;
\r
297 return (returnValue);
\r
300 Std_ReturnType Adc_CheckGetStreamLastPointer (Adc_StateType adcState, const Adc_ConfigType *ConfigPtr, Adc_GroupType group)
\r
302 Std_ReturnType returnValue = E_OK;
\r
304 #if ( ADC_DEV_ERROR_DETECT == STD_ON )
\r
305 if( (ValidateInit(adcState, ADC_GETSTREAMLASTPOINTER_ID) == E_NOT_OK) ||
\r
306 (ValidateGroup(ConfigPtr, group, ADC_GETSTREAMLASTPOINTER_ID) == E_NOT_OK))
\r
308 returnValue = E_NOT_OK;
\r
310 else if(ConfigPtr->groupConfigPtr[group%ADC_NOF_GROUP_PER_CONTROLLER].status->groupStatus == ADC_IDLE)
\r
311 { /** @req ADC215 Check ADC is not in IDLE */
\r
312 Det_ReportError(MODULE_ID_ADC,0,ADC_GETSTREAMLASTPOINTER_ID, ADC_E_IDLE );
\r
313 returnValue = E_NOT_OK;
\r
316 return (returnValue);
\r