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 || ConfigPtr == 0) {
\r
43 Det_ReportError(MODULE_ID_ADC,0,api,ADC_E_PARAM_GROUP );
\r
51 Adc_StatusType Adc_InternalGetGroupStatus (Adc_StateType adcState, const Adc_ConfigType *ConfigPtr, Adc_GroupType group)
\r
53 Adc_StatusType returnValue;
\r
55 #if ( ADC_DEV_ERROR_DETECT == STD_ON )
\r
56 if( (ValidateInit(adcState, ADC_GETGROUPSTATUS_ID) == E_NOT_OK) ||
\r
57 (ValidateGroup(ConfigPtr, group, ADC_GETGROUPSTATUS_ID) == E_NOT_OK))
\r
59 returnValue = ADC_IDLE;
\r
63 returnValue = ConfigPtr->groupConfigPtr[group%ADC_NOF_GROUP_PER_CONTROLLER].status->groupStatus;
\r
66 returnValue = ConfigPtr->groupConfigPtr[group%ADC_NOF_GROUP_PER_CONTROLLER].status->groupStatus;
\r
68 return (returnValue);
\r
71 #if (ADC_GRP_NOTIF_CAPABILITY == STD_ON)
\r
72 void Adc_EnableInternalGroupNotification (Adc_StateType adcState, const Adc_ConfigType *ConfigPtr, Adc_GroupType group)
\r
76 #if ( ADC_DEV_ERROR_DETECT == STD_ON )
\r
77 if( (ValidateInit(adcState, ADC_ENABLEGROUPNOTIFICATION_ID) == E_NOT_OK) ||
\r
78 (ValidateGroup(ConfigPtr, group, ADC_ENABLEGROUPNOTIFICATION_ID) == E_NOT_OK))
\r
82 else if (ConfigPtr->groupConfigPtr[group%ADC_NOF_GROUP_PER_CONTROLLER].groupCallback == NULL)
\r
85 Det_ReportError(MODULE_ID_ADC,0,ADC_ENABLEGROUPNOTIFICATION_ID ,ADC_E_NOTIF_CAPABILITY );
\r
89 /* Nothing strange. Go on... */
\r
96 ConfigPtr->groupConfigPtr[group%ADC_NOF_GROUP_PER_CONTROLLER].status->notifictionEnable = 1;
\r
100 void Adc_InternalDisableGroupNotification (Adc_StateType adcState, const Adc_ConfigType *ConfigPtr, Adc_GroupType group)
\r
102 Std_ReturnType res;
\r
104 #if ( ADC_DEV_ERROR_DETECT == STD_ON )
\r
105 if( (ValidateInit(adcState, ADC_DISABLEGROUPNOTIFICATION_ID) == E_NOT_OK) ||
\r
106 (ValidateGroup(ConfigPtr, group, ADC_DISABLEGROUPNOTIFICATION_ID) == E_NOT_OK))
\r
110 else if (ConfigPtr->groupConfigPtr[group%ADC_NOF_GROUP_PER_CONTROLLER].groupCallback == NULL)
\r
113 Det_ReportError(MODULE_ID_ADC,0,ADC_DISABLEGROUPNOTIFICATION_ID ,ADC_E_NOTIF_CAPABILITY );
\r
117 /* Nothing strange. Go on... */
\r
124 ConfigPtr->groupConfigPtr[group%ADC_NOF_GROUP_PER_CONTROLLER].status->notifictionEnable = 0;
\r
131 /* Development error checking functions. */
\r
132 #if (ADC_READ_GROUP_API == STD_ON)
\r
133 Std_ReturnType Adc_CheckReadGroup (Adc_StateType adcState, const Adc_ConfigType *ConfigPtr, Adc_GroupType group)
\r
135 Std_ReturnType returnValue = E_OK;
\r
137 #if ( ADC_DEV_ERROR_DETECT == STD_ON )
\r
139 if( (ValidateInit(adcState, ADC_READGROUP_ID) == E_NOT_OK) ||
\r
140 (ValidateGroup(ConfigPtr, group, ADC_READGROUP_ID) == E_NOT_OK))
\r
142 returnValue = E_NOT_OK;
\r
144 else if (ADC_IDLE == ConfigPtr->groupConfigPtr[group%ADC_NOF_GROUP_PER_CONTROLLER].status->groupStatus)
\r
147 returnValue = E_NOT_OK;
\r
148 Det_ReportError(MODULE_ID_ADC,0,ADC_READGROUP_ID ,ADC_E_IDLE );
\r
152 /* Nothing strange. Go on... */
\r
153 returnValue = E_OK;
\r
156 return (returnValue);
\r
160 #if (ADC_ENABLE_START_STOP_GROUP_API == STD_ON)
\r
161 Std_ReturnType Adc_CheckStartGroupConversion (Adc_StateType adcState, const Adc_ConfigType *ConfigPtr, Adc_GroupType group)
\r
163 Std_ReturnType returnValue = E_OK;
\r
165 #if ( ADC_DEV_ERROR_DETECT == STD_ON )
\r
167 if( (ValidateInit(adcState, ADC_STARTGROUPCONVERSION_ID) == E_NOT_OK) ||
\r
168 (ValidateGroup(ConfigPtr, group, ADC_STARTGROUPCONVERSION_ID) == E_NOT_OK))
\r
170 returnValue = E_NOT_OK;
\r
172 else if ( NULL == ConfigPtr->groupConfigPtr[group%ADC_NOF_GROUP_PER_CONTROLLER].status->resultBufferPtr )
\r
174 /* ResultBuffer not set, ADC424 */
\r
175 Det_ReportError(MODULE_ID_ADC,0,ADC_STARTGROUPCONVERSION_ID, ADC_E_BUFFER_UNINIT );
\r
176 returnValue = E_NOT_OK;
\r
178 else if (!(ADC_TRIGG_SRC_SW == ConfigPtr->groupConfigPtr[group%ADC_NOF_GROUP_PER_CONTROLLER].triggerSrc))
\r
180 /* Wrong trig source, ADC133. */
\r
181 Det_ReportError(MODULE_ID_ADC,0,ADC_STARTGROUPCONVERSION_ID, ADC_E_WRONG_TRIGG_SRC);
\r
182 returnValue = E_NOT_OK;
\r
184 else if (!((ADC_IDLE == ConfigPtr->groupConfigPtr[group%ADC_NOF_GROUP_PER_CONTROLLER].status->groupStatus) ||
\r
185 (ADC_STREAM_COMPLETED == ConfigPtr->groupConfigPtr[group%ADC_NOF_GROUP_PER_CONTROLLER].status->groupStatus)))
\r
187 /* Group status not OK, ADC351, ADC428 */
\r
188 Det_ReportError(MODULE_ID_ADC,0,ADC_STARTGROUPCONVERSION_ID, ADC_E_BUSY );
\r
190 //returnValue = E_NOT_OK;
\r
191 returnValue = E_OK;
\r
195 returnValue = E_OK;
\r
199 return (returnValue);
\r
202 Std_ReturnType Adc_CheckStopGroupConversion (Adc_StateType adcState, const Adc_ConfigType *ConfigPtr, Adc_GroupType group)
\r
204 Std_ReturnType returnValue = E_OK;
\r
206 #if ( ADC_DEV_ERROR_DETECT == STD_ON )
\r
207 if( (ValidateInit(adcState, ADC_STOPGROUPCONVERSION_ID) == E_NOT_OK) ||
\r
208 (ValidateGroup(ConfigPtr, group, ADC_STOPGROUPCONVERSION_ID) == E_NOT_OK))
\r
210 returnValue = E_NOT_OK;
\r
212 else if (!(ADC_TRIGG_SRC_SW == ConfigPtr->groupConfigPtr[group%ADC_NOF_GROUP_PER_CONTROLLER].triggerSrc))
\r
214 /* Wrong trig source, ADC164. */
\r
215 Det_ReportError(MODULE_ID_ADC,0,ADC_STOPGROUPCONVERSION_ID, ADC_E_WRONG_TRIGG_SRC);
\r
216 returnValue = E_NOT_OK;
\r
218 else if (ADC_IDLE == ConfigPtr->groupConfigPtr[group%ADC_NOF_GROUP_PER_CONTROLLER].status->groupStatus)
\r
220 /* Group status not OK, ADC241 */
\r
221 Det_ReportError(MODULE_ID_ADC,0,ADC_STOPGROUPCONVERSION_ID, ADC_E_IDLE );
\r
222 returnValue = E_NOT_OK;
\r
226 returnValue = E_OK;
\r
230 return (returnValue);
\r
234 Std_ReturnType Adc_CheckInit (Adc_StateType adcState, const Adc_ConfigType *ConfigPtr)
\r
236 Std_ReturnType returnValue = E_OK;
\r
238 #if ( ADC_DEV_ERROR_DETECT == STD_ON )
\r
239 if (!(ADC_UNINIT == adcState))
\r
241 /* Oops, already initialised. */
\r
242 Det_ReportError(MODULE_ID_ADC,0,ADC_INIT_ID, ADC_E_ALREADY_INITIALIZED );
\r
243 returnValue = E_NOT_OK;
\r
245 else if (ConfigPtr == NULL)
\r
247 /* Wrong config! */
\r
248 Det_ReportError(MODULE_ID_ADC,0,ADC_INIT_ID, ADC_E_PARAM_CONFIG );
\r
249 returnValue = E_NOT_OK;
\r
254 returnValue = E_OK;
\r
257 return (returnValue);
\r
260 #if (ADC_DEINIT_API == STD_ON)
\r
261 Std_ReturnType Adc_CheckDeInit (Adc_StateType adcState, const Adc_ConfigType *ConfigPtr)
\r
263 Std_ReturnType returnValue = E_OK;
\r
265 #if ( ADC_DEV_ERROR_DETECT == STD_ON )
\r
266 if(ValidateInit(adcState, ADC_DEINIT_ID) == E_OK)
\r
268 for (Adc_GroupType group = (Adc_GroupType)0; group < ConfigPtr->nbrOfGroups; group++)
\r
270 /* Check ADC is IDLE or COMPLETE*/
\r
271 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
273 Det_ReportError(MODULE_ID_ADC,0,ADC_DEINIT_ID, ADC_E_BUSY );
\r
274 returnValue = E_NOT_OK;
\r
280 returnValue = E_NOT_OK;
\r
283 return (returnValue);
\r
287 Std_ReturnType Adc_CheckSetupResultBuffer (Adc_StateType adcState, const Adc_ConfigType *ConfigPtr, Adc_GroupType group)
\r
289 Std_ReturnType returnValue = E_OK;
\r
291 #if ( ADC_DEV_ERROR_DETECT == STD_ON )
\r
292 if( (ValidateInit(adcState, ADC_SETUPRESULTBUFFER_ID) == E_NOT_OK) ||
\r
293 (ValidateGroup(ConfigPtr, group, ADC_SETUPRESULTBUFFER_ID) == E_NOT_OK))
\r
295 returnValue = E_NOT_OK;
\r
298 return (returnValue);
\r
301 Std_ReturnType Adc_CheckGetStreamLastPointer (Adc_StateType adcState, const Adc_ConfigType *ConfigPtr, Adc_GroupType group)
\r
303 Std_ReturnType returnValue = E_OK;
\r
305 #if ( ADC_DEV_ERROR_DETECT == STD_ON )
\r
306 if( (ValidateInit(adcState, ADC_GETSTREAMLASTPOINTER_ID) == E_NOT_OK) ||
\r
307 (ValidateGroup(ConfigPtr, group, ADC_GETSTREAMLASTPOINTER_ID) == E_NOT_OK))
\r
309 returnValue = E_NOT_OK;
\r
311 else if(ConfigPtr->groupConfigPtr[group%ADC_NOF_GROUP_PER_CONTROLLER].status->groupStatus == ADC_IDLE)
\r
312 { /** @req ADC215 Check ADC is not in IDLE */
\r
313 Det_ReportError(MODULE_ID_ADC,0,ADC_GETSTREAMLASTPOINTER_ID, ADC_E_IDLE );
\r
314 returnValue = E_NOT_OK;
\r
317 return (returnValue);
\r