]> rtime.felk.cvut.cz Git - arc.git/commitdiff
A bit better development error detection in Adc for ARM CM3
authortojo <devnull@localhost>
Tue, 28 Jun 2011 16:25:59 +0000 (18:25 +0200)
committertojo <devnull@localhost>
Tue, 28 Jun 2011 16:25:59 +0000 (18:25 +0200)
arch/arm/arm_cm3/drivers/Adc.c

index 38a9967d2d7ed542abd29a860f7e6ecab42dea3b..de6eea008772fd45b0ee91492d66318a9fd9af65 100644 (file)
@@ -54,19 +54,50 @@ static Adc_StateType adcState = ADC_UNINIT;
 /* Pointer to configuration structure. */\r
 static const Adc_ConfigType *AdcConfigPtr;\r
 \r
+/* VALIDATION MACROS */\r
+#if (defined(USE_DET))\r
+       #define ADC_REPORT_ERROR(apiid, errorid) \\r
+               Det_ReportError(MODULE_ID_ADC, 0, apiid, errorid)\r
+#else\r
+       #define ADC_REPORT_ERROR(apiid, errorid)\r
+#endif\r
+\r
+#if (ADC_DEV_ERROR_DETECT == STD_ON)\r
+       #define ADC_VALIDATE(_exp, _apiid, _errid, ...) \\r
+               if (!(_exp)) { \\r
+                       ADC_REPORT_ERROR( _apiid, _errid); \\r
+                       return __VA_ARGS__; \\r
+               }\r
+#else\r
+       #define ADC_VALIDATE(_exp, _apiid, _errid, ...)\r
+#endif\r
+\r
+#define ADC_VALIDATE_INITIALIZED(apiid, ...) \\r
+                       ADC_VALIDATE( (adcState == ADC_INIT), apiid, ADC_E_UNINIT, __VA_ARGS__)\r
+#define ADC_VALIDATE_NOT_INITIALIZED(apiid, ...) \\r
+                       ADC_VALIDATE( (adcState != ADC_INIT), apiid, ADC_E_ALREADY_INITIALIZED, __VA_ARGS__)\r
+\r
+/* VALIDATION MACROS */\r
+\r
 \r
 #if (ADC_DEINIT_API == STD_ON)\r
 Std_ReturnType Adc_DeInit (const Adc_ConfigType *ConfigPtr)\r
 {\r
+  ADC_VALIDATE_INITIALIZED( ADC_DEINIT_ID, E_NOT_OK );\r
+\r
   DMA_DeInit(DMA1_Channel1);\r
   ADC_DeInit(ADC1);\r
 \r
+  adcState = ADC_UNINIT;\r
+\r
   return (E_OK);\r
 }\r
 #endif\r
 \r
 Std_ReturnType Adc_Init (const Adc_ConfigType *ConfigPtr)\r
 {\r
+  ADC_VALIDATE_NOT_INITIALIZED( ADC_INIT_ID, E_NOT_OK );\r
+\r
   Std_ReturnType returnValue;\r
   Adc_ChannelType channel;\r
   Adc_ChannelType channelId;\r
@@ -437,7 +468,7 @@ static Std_ReturnType Adc_CheckSetupResultBuffer (Adc_GroupType group)
     Det_ReportError(MODULE_ID_ADC,0,ADC_SETUPRESULTBUFFER_ID,ADC_E_UNINIT );\r
     returnValue = E_NOT_OK;\r
   }\r
-  else if (group < AdcConfigPtr->nbrOfGroups)\r
+  else if (group >= AdcConfigPtr->nbrOfGroups)\r
   {\r
     /* ADC423 */\r
     Det_ReportError(MODULE_ID_ADC,0,ADC_SETUPRESULTBUFFER_ID,ADC_E_PARAM_GROUP );\r