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
23 /* Validate functions used for development error check */
\r
24 #if ( ADC_DEV_ERROR_DETECT == STD_ON )
\r
25 Std_ReturnType ValidateInit(Adc_StateType adcState, Adc_APIServiceIDType api)
\r
27 Std_ReturnType res = E_OK;
\r
28 if(!(ADC_INIT == adcState)) {
\r
29 Det_ReportError(MODULE_ID_ADC,0,api,ADC_E_UNINIT );
\r
34 Std_ReturnType ValidateGroup(const Adc_ConfigType *ConfigPtr, Adc_GroupType group,Adc_APIServiceIDType api)
\r
36 Std_ReturnType res = E_OK;
\r
37 if(!(((group % NOF_GROUP_PER_CONTROLLER) >= 0) && ((group % NOF_GROUP_PER_CONTROLLER) < ConfigPtr->nbrOfGroups))) {
\r
38 Det_ReportError(MODULE_ID_ADC,0,api,ADC_E_PARAM_GROUP );
\r
46 Adc_StatusType Adc_InternalGetGroupStatus (Adc_StateType adcState, const Adc_ConfigType *ConfigPtr, Adc_GroupType group)
\r
48 Adc_StatusType returnValue;
\r
50 #if ( ADC_DEV_ERROR_DETECT == STD_ON )
\r
51 if( (ValidateInit(adcState, ADC_GETGROUPSTATUS_ID) == E_NOT_OK) ||
\r
52 (ValidateGroup(ConfigPtr, group, ADC_GETGROUPSTATUS_ID) == E_NOT_OK))
\r
54 returnValue = ADC_IDLE;
\r
58 returnValue = ConfigPtr->groupConfigPtr[group%NOF_GROUP_PER_CONTROLLER].status->groupStatus;
\r
61 returnValue = ConfigPtr->groupConfigPtr[group%NOF_GROUP_PER_CONTROLLER].status->groupStatus;
\r
63 return (returnValue);
\r
66 #if (ADC_GRP_NOTIF_CAPABILITY == STD_ON)
\r
67 void Adc_EnableInternalGroupNotification (Adc_StateType adcState, const Adc_ConfigType *ConfigPtr, Adc_GroupType group)
\r
71 #if ( ADC_DEV_ERROR_DETECT == STD_ON )
\r
72 if( (ValidateInit(adcState, ADC_ENABLEGROUPNOTIFICATION_ID) == E_NOT_OK) ||
\r
73 (ValidateGroup(ConfigPtr, group, ADC_ENABLEGROUPNOTIFICATION_ID) == E_NOT_OK))
\r
77 else if (ConfigPtr->groupConfigPtr[group%NOF_GROUP_PER_CONTROLLER].groupCallback == NULL)
\r
80 Det_ReportError(MODULE_ID_ADC,0,ADC_ENABLEGROUPNOTIFICATION_ID ,ADC_E_NOTIF_CAPABILITY );
\r
84 /* Nothing strange. Go on... */
\r
91 ConfigPtr->groupConfigPtr[group%NOF_GROUP_PER_CONTROLLER].status->notifictionEnable = 1;
\r
95 void Adc_InternalDisableGroupNotification (Adc_StateType adcState, const Adc_ConfigType *ConfigPtr, Adc_GroupType group)
\r
99 #if ( ADC_DEV_ERROR_DETECT == STD_ON )
\r
100 if( (ValidateInit(adcState, ADC_DISABLEGROUPNOTIFICATION_ID) == E_NOT_OK) ||
\r
101 (ValidateGroup(ConfigPtr, group, ADC_DISABLEGROUPNOTIFICATION_ID) == E_NOT_OK))
\r
105 else if (ConfigPtr->groupConfigPtr[group%NOF_GROUP_PER_CONTROLLER].groupCallback == NULL)
\r
108 Det_ReportError(MODULE_ID_ADC,0,ADC_DISABLEGROUPNOTIFICATION_ID ,ADC_E_NOTIF_CAPABILITY );
\r
112 /* Nothing strange. Go on... */
\r
119 ConfigPtr->groupConfigPtr[group%NOF_GROUP_PER_CONTROLLER].status->notifictionEnable = 0;
\r
126 /* Development error checking functions. */
\r
127 #if (ADC_READ_GROUP_API == STD_ON)
\r
128 Std_ReturnType Adc_CheckReadGroup (Adc_StateType adcState, const Adc_ConfigType *ConfigPtr, Adc_GroupType group)
\r
130 Std_ReturnType returnValue = E_OK;
\r
132 #if ( ADC_DEV_ERROR_DETECT == STD_ON )
\r
134 if( (ValidateInit(adcState, ADC_READGROUP_ID) == E_NOT_OK) ||
\r
135 (ValidateGroup(ConfigPtr, group, ADC_READGROUP_ID) == E_NOT_OK))
\r
137 returnValue = E_NOT_OK;
\r
139 else if (ADC_IDLE == ConfigPtr->groupConfigPtr[group%NOF_GROUP_PER_CONTROLLER].status->groupStatus)
\r
142 returnValue = E_NOT_OK;
\r
143 Det_ReportError(MODULE_ID_ADC,0,ADC_READGROUP_ID ,ADC_E_IDLE );
\r
147 /* Nothing strange. Go on... */
\r
148 returnValue = E_OK;
\r
151 return (returnValue);
\r
155 #if (ADC_ENABLE_START_STOP_GROUP_API == STD_ON)
\r
156 Std_ReturnType Adc_CheckStartGroupConversion (Adc_StateType adcState, const Adc_ConfigType *ConfigPtr, Adc_GroupType group)
\r
158 Std_ReturnType returnValue = E_OK;
\r
160 #if ( ADC_DEV_ERROR_DETECT == STD_ON )
\r
162 if( (ValidateInit(adcState, ADC_STARTGROUPCONVERSION_ID) == E_NOT_OK) ||
\r
163 (ValidateGroup(ConfigPtr, group, ADC_STARTGROUPCONVERSION_ID) == E_NOT_OK))
\r
165 returnValue = E_NOT_OK;
\r
167 else if ( NULL == ConfigPtr->groupConfigPtr[group%NOF_GROUP_PER_CONTROLLER].status->resultBufferPtr )
\r
169 /* ResultBuffer not set, ADC424 */
\r
170 Det_ReportError(MODULE_ID_ADC,0,ADC_STARTGROUPCONVERSION_ID, ADC_E_BUFFER_UNINIT );
\r
171 returnValue = E_NOT_OK;
\r
173 else if (!(ADC_TRIGG_SRC_SW == ConfigPtr->groupConfigPtr[group%NOF_GROUP_PER_CONTROLLER].triggerSrc))
\r
175 /* Wrong trig source, ADC133. */
\r
176 Det_ReportError(MODULE_ID_ADC,0,ADC_STARTGROUPCONVERSION_ID, ADC_E_WRONG_TRIGG_SRC);
\r
177 returnValue = E_NOT_OK;
\r
179 else if (!((ADC_IDLE == ConfigPtr->groupConfigPtr[group%NOF_GROUP_PER_CONTROLLER].status->groupStatus) ||
\r
180 (ADC_STREAM_COMPLETED == ConfigPtr->groupConfigPtr[group%NOF_GROUP_PER_CONTROLLER].status->groupStatus)))
\r
182 /* Group status not OK, ADC351, ADC428 */
\r
183 Det_ReportError(MODULE_ID_ADC,0,ADC_STARTGROUPCONVERSION_ID, ADC_E_BUSY );
\r
185 //returnValue = E_NOT_OK;
\r
186 returnValue = E_OK;
\r
190 returnValue = E_OK;
\r
194 return (returnValue);
\r
197 Std_ReturnType Adc_CheckStopGroupConversion (Adc_StateType adcState, const Adc_ConfigType *ConfigPtr, Adc_GroupType group)
\r
199 Std_ReturnType returnValue = E_OK;
\r
201 #if ( ADC_DEV_ERROR_DETECT == STD_ON )
\r
202 if( (ValidateInit(adcState, ADC_STOPGROUPCONVERSION_ID) == E_NOT_OK) ||
\r
203 (ValidateGroup(ConfigPtr, group, ADC_STOPGROUPCONVERSION_ID) == E_NOT_OK))
\r
205 returnValue = E_NOT_OK;
\r
207 else if (!(ADC_TRIGG_SRC_SW == ConfigPtr->groupConfigPtr[group%NOF_GROUP_PER_CONTROLLER].triggerSrc))
\r
209 /* Wrong trig source, ADC164. */
\r
210 Det_ReportError(MODULE_ID_ADC,0,ADC_STOPGROUPCONVERSION_ID, ADC_E_WRONG_TRIGG_SRC);
\r
211 returnValue = E_NOT_OK;
\r
213 else if (ADC_IDLE == ConfigPtr->groupConfigPtr[group%NOF_GROUP_PER_CONTROLLER].status->groupStatus)
\r
215 /* Group status not OK, ADC241 */
\r
216 Det_ReportError(MODULE_ID_ADC,0,ADC_STOPGROUPCONVERSION_ID, ADC_E_IDLE );
\r
217 returnValue = E_NOT_OK;
\r
221 returnValue = E_OK;
\r
225 return (returnValue);
\r
229 Std_ReturnType Adc_CheckInit (Adc_StateType adcState, const Adc_ConfigType *ConfigPtr)
\r
231 Std_ReturnType returnValue = E_OK;
\r
233 #if ( ADC_DEV_ERROR_DETECT == STD_ON )
\r
234 if (!(ADC_UNINIT == adcState))
\r
236 /* Oops, already initialised. */
\r
237 Det_ReportError(MODULE_ID_ADC,0,ADC_INIT_ID, ADC_E_ALREADY_INITIALIZED );
\r
238 returnValue = E_NOT_OK;
\r
240 else if (ConfigPtr == NULL)
\r
242 /* Wrong config! */
\r
243 Det_ReportError(MODULE_ID_ADC,0,ADC_INIT_ID, ADC_E_PARAM_CONFIG );
\r
244 returnValue = E_NOT_OK;
\r
249 returnValue = E_OK;
\r
252 return (returnValue);
\r
255 #if (ADC_DEINIT_API == STD_ON)
\r
256 Std_ReturnType Adc_CheckDeInit (Adc_StateType adcState, const Adc_ConfigType *ConfigPtr)
\r
258 Std_ReturnType returnValue = E_OK;
\r
260 #if ( ADC_DEV_ERROR_DETECT == STD_ON )
\r
261 if(ValidateInit(adcState, ADC_DEINIT_ID) == E_OK)
\r
263 for (Adc_GroupType group = (Adc_GroupType)0; group < ConfigPtr->nbrOfGroups; group++)
\r
265 /* Check ADC is IDLE or COMPLETE*/
\r
266 if((ConfigPtr->groupConfigPtr[group%NOF_GROUP_PER_CONTROLLER].status->groupStatus != ADC_IDLE) && (ConfigPtr->groupConfigPtr[group%NOF_GROUP_PER_CONTROLLER].status->groupStatus != ADC_STREAM_COMPLETED))
\r
268 Det_ReportError(MODULE_ID_ADC,0,ADC_DEINIT_ID, ADC_E_BUSY );
\r
269 returnValue = E_NOT_OK;
\r
275 returnValue = E_NOT_OK;
\r
278 return (returnValue);
\r
282 Std_ReturnType Adc_CheckSetupResultBuffer (Adc_StateType adcState, const Adc_ConfigType *ConfigPtr, Adc_GroupType group)
\r
284 Std_ReturnType returnValue = E_OK;
\r
286 #if ( ADC_DEV_ERROR_DETECT == STD_ON )
\r
287 if( (ValidateInit(adcState, ADC_SETUPRESULTBUFFER_ID) == E_NOT_OK) ||
\r
288 (ValidateGroup(ConfigPtr, group, ADC_SETUPRESULTBUFFER_ID) == E_NOT_OK))
\r
290 returnValue = E_NOT_OK;
\r
293 return (returnValue);
\r
296 Std_ReturnType Adc_CheckGetStreamLastPointer (Adc_StateType adcState, const Adc_ConfigType *ConfigPtr, Adc_GroupType group)
\r
298 Std_ReturnType returnValue = E_OK;
\r
300 #if ( ADC_DEV_ERROR_DETECT == STD_ON )
\r
301 if( (ValidateInit(adcState, ADC_GETSTREAMLASTPOINTER_ID) == E_NOT_OK) ||
\r
302 (ValidateGroup(ConfigPtr, group, ADC_GETSTREAMLASTPOINTER_ID) == E_NOT_OK))
\r
304 returnValue = E_NOT_OK;
\r
306 else if(ConfigPtr->groupConfigPtr[group%NOF_GROUP_PER_CONTROLLER].status->groupStatus == ADC_IDLE)
\r
307 { /** @req ADC215 Check ADC is not in IDLE */
\r
308 Det_ReportError(MODULE_ID_ADC,0,ADC_GETSTREAMLASTPOINTER_ID, ADC_E_IDLE );
\r
309 returnValue = E_NOT_OK;
\r
312 return (returnValue);
\r