2121#include "driver/touch_pad.h"
2222#include "driver/rtc_cntl.h"
2323#include "driver/gpio.h"
24+ #include "esp_check.h"
2425
2526#ifndef NDEBUG
2627// Enable built-in checks in queue.h in debug builds
@@ -49,13 +50,9 @@ static SemaphoreHandle_t rtc_touch_mux = NULL;
4950#define TOUCH_PAD_SHIFT_ROUND_DEFAULT (8) // ROUND = 2^(n-1); rounding off for fractional.
5051
5152static const char * TOUCH_TAG = "TOUCH_SENSOR" ;
52- #define TOUCH_CHECK (a , str , ret_val ) ({ \
53- if (!(a)) { \
54- ESP_LOGE(TOUCH_TAG,"%s(%d): %s", __FUNCTION__, __LINE__, str); \
55- return (ret_val); \
56- } \
57- })
58- #define TOUCH_CHANNEL_CHECK (channel ) TOUCH_CHECK(channel < SOC_TOUCH_SENSOR_NUM, "Touch channel error", ESP_ERR_INVALID_ARG)
53+
54+ #define TOUCH_CHANNEL_CHECK (channel ) ESP_RETURN_ON_FALSE(channel < SOC_TOUCH_SENSOR_NUM, ESP_ERR_INVALID_ARG, TOUCH_TAG, "Touch channel error");
55+ #define TOUCH_NULL_POINTER_CHECK (p , name ) ESP_RETURN_ON_FALSE((p), ESP_ERR_INVALID_ARG, TOUCH_TAG, "input param '"name"' is NULL")
5956#define TOUCH_PARAM_CHECK_STR (s ) ""s" parameter error"
6057
6158extern portMUX_TYPE rtc_spinlock ; //TODO: Will be placed in the appropriate position after the rtc module is finished.
@@ -72,13 +69,13 @@ static esp_err_t _touch_pad_read(touch_pad_t touch_num, uint16_t *touch_value, t
7269
7370esp_err_t touch_pad_isr_handler_register (void (* fn )(void * ), void * arg , int no_use , intr_handle_t * handle_no_use )
7471{
75- TOUCH_CHECK (fn , "Touch_Pad ISR null" , ESP_ERR_INVALID_ARG );
72+ ESP_RETURN_ON_FALSE (fn , ESP_ERR_INVALID_ARG , TOUCH_TAG , "Touch_Pad ISR null" );
7673 return rtc_isr_register (fn , arg , RTC_CNTL_TOUCH_INT_ST_M );
7774}
7875
7976esp_err_t touch_pad_isr_register (intr_handler_t fn , void * arg )
8077{
81- TOUCH_CHECK (fn , "Touch_Pad ISR null" , ESP_ERR_INVALID_ARG );
78+ ESP_RETURN_ON_FALSE (fn , ESP_ERR_INVALID_ARG , TOUCH_TAG , "Touch_Pad ISR null" );
8279 return rtc_isr_register (fn , arg , RTC_CNTL_TOUCH_INT_ST_M );
8380}
8481
@@ -121,7 +118,7 @@ static void touch_pad_filter_cb(void *arg)
121118 }
122119 xTimerReset (s_touch_pad_filter -> timer , portMAX_DELAY );
123120 xSemaphoreGive (rtc_touch_mux );
124- if (s_filter_cb != NULL ) {
121+ if (s_filter_cb ) {
125122 //return the raw data and filtered data.
126123 s_filter_cb (s_touch_pad_filter -> raw_val , s_touch_pad_filter -> filtered_val );
127124 }
@@ -139,6 +136,8 @@ esp_err_t touch_pad_set_meas_time(uint16_t sleep_cycle, uint16_t meas_cycle)
139136
140137esp_err_t touch_pad_get_meas_time (uint16_t * sleep_cycle , uint16_t * meas_cycle )
141138{
139+ TOUCH_NULL_POINTER_CHECK (sleep_cycle , "sleep_cycle" );
140+ TOUCH_NULL_POINTER_CHECK (meas_cycle , "meas_cycle" );
142141 TOUCH_ENTER_CRITICAL ();
143142 touch_hal_get_meas_time (meas_cycle );
144143 touch_hal_get_sleep_time (sleep_cycle );
@@ -149,7 +148,7 @@ esp_err_t touch_pad_get_meas_time(uint16_t *sleep_cycle, uint16_t *meas_cycle)
149148
150149esp_err_t touch_pad_set_trigger_mode (touch_trigger_mode_t mode )
151150{
152- TOUCH_CHECK ((mode < TOUCH_TRIGGER_MAX ), TOUCH_PARAM_CHECK_STR ("mode" ), ESP_ERR_INVALID_ARG );
151+ ESP_RETURN_ON_FALSE ((mode < TOUCH_TRIGGER_MAX ), ESP_ERR_INVALID_ARG , TOUCH_TAG , TOUCH_PARAM_CHECK_STR ("mode" ));
153152 TOUCH_ENTER_CRITICAL ();
154153 touch_hal_set_trigger_mode (mode );
155154 TOUCH_EXIT_CRITICAL ();
@@ -158,13 +157,14 @@ esp_err_t touch_pad_set_trigger_mode(touch_trigger_mode_t mode)
158157
159158esp_err_t touch_pad_get_trigger_mode (touch_trigger_mode_t * mode )
160159{
160+ TOUCH_NULL_POINTER_CHECK (mode , "mode" );
161161 touch_hal_get_trigger_mode (mode );
162162 return ESP_OK ;
163163}
164164
165165esp_err_t touch_pad_set_trigger_source (touch_trigger_src_t src )
166166{
167- TOUCH_CHECK ((src < TOUCH_TRIGGER_SOURCE_MAX ), TOUCH_PARAM_CHECK_STR ("src" ), ESP_ERR_INVALID_ARG );
167+ ESP_RETURN_ON_FALSE ((src < TOUCH_TRIGGER_SOURCE_MAX ), ESP_ERR_INVALID_ARG , TOUCH_TAG , TOUCH_PARAM_CHECK_STR ("src" ));
168168 TOUCH_ENTER_CRITICAL ();
169169 touch_hal_set_trigger_source (src );
170170 TOUCH_EXIT_CRITICAL ();
@@ -173,15 +173,16 @@ esp_err_t touch_pad_set_trigger_source(touch_trigger_src_t src)
173173
174174esp_err_t touch_pad_get_trigger_source (touch_trigger_src_t * src )
175175{
176+ TOUCH_NULL_POINTER_CHECK (src , "src" );
176177 touch_hal_get_trigger_source (src );
177178 return ESP_OK ;
178179}
179180
180181esp_err_t touch_pad_set_group_mask (uint16_t set1_mask , uint16_t set2_mask , uint16_t en_mask )
181182{
182- TOUCH_CHECK ((set1_mask <= TOUCH_PAD_BIT_MASK_ALL ), "touch set1 bitmask error" , ESP_ERR_INVALID_ARG );
183- TOUCH_CHECK ((set2_mask <= TOUCH_PAD_BIT_MASK_ALL ), "touch set2 bitmask error" , ESP_ERR_INVALID_ARG );
184- TOUCH_CHECK ((en_mask <= TOUCH_PAD_BIT_MASK_ALL ), "touch work_en bitmask error" , ESP_ERR_INVALID_ARG );
183+ ESP_RETURN_ON_FALSE ((set1_mask <= TOUCH_PAD_BIT_MASK_ALL ), ESP_ERR_INVALID_ARG , TOUCH_TAG , "touch set1 bitmask error" );
184+ ESP_RETURN_ON_FALSE ((set2_mask <= TOUCH_PAD_BIT_MASK_ALL ), ESP_ERR_INVALID_ARG , TOUCH_TAG , "touch set2 bitmask error" );
185+ ESP_RETURN_ON_FALSE ((en_mask <= TOUCH_PAD_BIT_MASK_ALL ), ESP_ERR_INVALID_ARG , TOUCH_TAG , "touch work_en bitmask error" );
185186
186187 TOUCH_ENTER_CRITICAL ();
187188 touch_hal_set_group_mask (set1_mask , set2_mask );
@@ -193,6 +194,9 @@ esp_err_t touch_pad_set_group_mask(uint16_t set1_mask, uint16_t set2_mask, uint1
193194
194195esp_err_t touch_pad_get_group_mask (uint16_t * set1_mask , uint16_t * set2_mask , uint16_t * en_mask )
195196{
197+ TOUCH_NULL_POINTER_CHECK (set1_mask , "set1_mask" );
198+ TOUCH_NULL_POINTER_CHECK (set2_mask , "set2_mask" );
199+ TOUCH_NULL_POINTER_CHECK (en_mask , "en_mask" );
196200 TOUCH_ENTER_CRITICAL ();
197201 touch_hal_get_channel_mask (en_mask );
198202 touch_hal_get_group_mask (set1_mask , set2_mask );
@@ -203,9 +207,9 @@ esp_err_t touch_pad_get_group_mask(uint16_t *set1_mask, uint16_t *set2_mask, uin
203207
204208esp_err_t touch_pad_clear_group_mask (uint16_t set1_mask , uint16_t set2_mask , uint16_t en_mask )
205209{
206- TOUCH_CHECK ((set1_mask <= TOUCH_PAD_BIT_MASK_ALL ), "touch set1 bitmask error" , ESP_ERR_INVALID_ARG );
207- TOUCH_CHECK ((set2_mask <= TOUCH_PAD_BIT_MASK_ALL ), "touch set2 bitmask error" , ESP_ERR_INVALID_ARG );
208- TOUCH_CHECK ((en_mask <= TOUCH_PAD_BIT_MASK_ALL ), "touch work_en bitmask error" , ESP_ERR_INVALID_ARG );
210+ ESP_RETURN_ON_FALSE ((set1_mask <= TOUCH_PAD_BIT_MASK_ALL ), ESP_ERR_INVALID_ARG , TOUCH_TAG , "touch set1 bitmask error" );
211+ ESP_RETURN_ON_FALSE ((set2_mask <= TOUCH_PAD_BIT_MASK_ALL ), ESP_ERR_INVALID_ARG , TOUCH_TAG , "touch set2 bitmask error" );
212+ ESP_RETURN_ON_FALSE ((en_mask <= TOUCH_PAD_BIT_MASK_ALL ), ESP_ERR_INVALID_ARG , TOUCH_TAG , "touch work_en bitmask error" );
209213
210214 TOUCH_ENTER_CRITICAL ();
211215 touch_hal_clear_channel_mask (en_mask );
@@ -245,7 +249,7 @@ bool touch_pad_meas_is_done(void)
245249
246250esp_err_t touch_pad_config (touch_pad_t touch_num , uint16_t threshold )
247251{
248- TOUCH_CHECK (rtc_touch_mux != NULL , "Touch pad not initialized" , ESP_FAIL );
252+ ESP_RETURN_ON_FALSE (rtc_touch_mux , ESP_FAIL , TOUCH_TAG , "Touch pad not initialized" );
249253 TOUCH_CHANNEL_CHECK (touch_num );
250254 touch_fsm_mode_t mode ;
251255 touch_pad_io_init (touch_num );
@@ -297,8 +301,8 @@ esp_err_t touch_pad_init(void)
297301
298302esp_err_t touch_pad_deinit (void )
299303{
300- TOUCH_CHECK (rtc_touch_mux != NULL , "Touch pad not initialized" , ESP_FAIL );
301- if (s_touch_pad_filter != NULL ) {
304+ ESP_RETURN_ON_FALSE (rtc_touch_mux , ESP_FAIL , TOUCH_TAG , "Touch pad not initialized" );
305+ if (s_touch_pad_filter ) {
302306 touch_pad_filter_stop ();
303307 touch_pad_filter_delete ();
304308 }
@@ -337,8 +341,8 @@ static esp_err_t _touch_pad_read(touch_pad_t touch_num, uint16_t *touch_value, t
337341esp_err_t touch_pad_read (touch_pad_t touch_num , uint16_t * touch_value )
338342{
339343 TOUCH_CHANNEL_CHECK (touch_num );
340- TOUCH_CHECK (touch_value != NULL , "touch_value" , ESP_ERR_INVALID_ARG );
341- TOUCH_CHECK (rtc_touch_mux != NULL , "Touch pad not initialized" , ESP_FAIL );
344+ TOUCH_NULL_POINTER_CHECK (touch_value , "touch_value" );
345+ ESP_RETURN_ON_FALSE (rtc_touch_mux , ESP_FAIL , TOUCH_TAG , "Touch pad not initialized" );
342346
343347 esp_err_t res = ESP_OK ;
344348 touch_fsm_mode_t mode ;
@@ -351,10 +355,10 @@ esp_err_t touch_pad_read(touch_pad_t touch_num, uint16_t *touch_value)
351355
352356IRAM_ATTR esp_err_t touch_pad_read_raw_data (touch_pad_t touch_num , uint16_t * touch_value )
353357{
354- TOUCH_CHECK (rtc_touch_mux != NULL , "Touch pad not initialized" , ESP_FAIL );
358+ ESP_RETURN_ON_FALSE (rtc_touch_mux , ESP_FAIL , TOUCH_TAG , "Touch pad not initialized" );
355359 TOUCH_CHANNEL_CHECK (touch_num );
356- TOUCH_CHECK (touch_value != NULL , "touch_value" , ESP_ERR_INVALID_ARG );
357- TOUCH_CHECK (s_touch_pad_filter != NULL , "Touch pad filter not initialized" , ESP_FAIL );
360+ TOUCH_NULL_POINTER_CHECK (touch_value , "touch_value" );
361+ ESP_RETURN_ON_FALSE (s_touch_pad_filter , ESP_FAIL , TOUCH_TAG , "Touch pad filter not initialized" );
358362 * touch_value = s_touch_pad_filter -> raw_val [touch_num ];
359363 if (* touch_value == 0 ) {
360364 return ESP_ERR_INVALID_STATE ;
@@ -364,10 +368,10 @@ IRAM_ATTR esp_err_t touch_pad_read_raw_data(touch_pad_t touch_num, uint16_t *tou
364368
365369IRAM_ATTR esp_err_t touch_pad_read_filtered (touch_pad_t touch_num , uint16_t * touch_value )
366370{
367- TOUCH_CHECK (rtc_touch_mux != NULL , "Touch pad not initialized" , ESP_FAIL );
371+ ESP_RETURN_ON_FALSE (rtc_touch_mux , ESP_FAIL , TOUCH_TAG , "Touch pad not initialized" );
368372 TOUCH_CHANNEL_CHECK (touch_num );
369- TOUCH_CHECK (touch_value != NULL , "touch_value" , ESP_ERR_INVALID_ARG );
370- TOUCH_CHECK (s_touch_pad_filter != NULL , "Touch pad filter not initialized" , ESP_FAIL );
373+ TOUCH_NULL_POINTER_CHECK (touch_value , "touch_value" );
374+ ESP_RETURN_ON_FALSE (s_touch_pad_filter , ESP_FAIL , TOUCH_TAG , "Touch pad filter not initialized" );
371375 * touch_value = (s_touch_pad_filter -> filtered_val [touch_num ]);
372376 if (* touch_value == 0 ) {
373377 return ESP_ERR_INVALID_STATE ;
@@ -377,13 +381,13 @@ IRAM_ATTR esp_err_t touch_pad_read_filtered(touch_pad_t touch_num, uint16_t *tou
377381
378382esp_err_t touch_pad_set_filter_period (uint32_t new_period_ms )
379383{
380- TOUCH_CHECK (s_touch_pad_filter != NULL , "Touch pad filter not initialized" , ESP_ERR_INVALID_STATE );
381- TOUCH_CHECK (new_period_ms > 0 , "Touch pad filter period error" , ESP_ERR_INVALID_ARG );
382- TOUCH_CHECK (rtc_touch_mux != NULL , "Touch pad not initialized" , ESP_ERR_INVALID_STATE );
384+ ESP_RETURN_ON_FALSE (s_touch_pad_filter , ESP_ERR_INVALID_STATE , TOUCH_TAG , "Touch pad filter not initialized" );
385+ ESP_RETURN_ON_FALSE (new_period_ms > 0 , ESP_ERR_INVALID_ARG , TOUCH_TAG , "Touch pad filter period error" );
386+ ESP_RETURN_ON_FALSE (rtc_touch_mux , ESP_ERR_INVALID_STATE , TOUCH_TAG , "Touch pad not initialized" );
383387
384388 esp_err_t ret = ESP_OK ;
385389 xSemaphoreTake (rtc_touch_mux , portMAX_DELAY );
386- if (s_touch_pad_filter != NULL ) {
390+ if (s_touch_pad_filter ) {
387391 xTimerChangePeriod (s_touch_pad_filter -> timer , new_period_ms / portTICK_PERIOD_MS , portMAX_DELAY );
388392 s_touch_pad_filter -> period = new_period_ms ;
389393 } else {
@@ -396,13 +400,13 @@ esp_err_t touch_pad_set_filter_period(uint32_t new_period_ms)
396400
397401esp_err_t touch_pad_get_filter_period (uint32_t * p_period_ms )
398402{
399- TOUCH_CHECK (s_touch_pad_filter != NULL , "Touch pad filter not initialized" , ESP_ERR_INVALID_STATE );
400- TOUCH_CHECK (p_period_ms != NULL , "Touch pad period pointer error" , ESP_ERR_INVALID_ARG );
401- TOUCH_CHECK (rtc_touch_mux != NULL , "Touch pad not initialized" , ESP_ERR_INVALID_STATE );
403+ ESP_RETURN_ON_FALSE (s_touch_pad_filter , ESP_ERR_INVALID_STATE , TOUCH_TAG , "Touch pad filter not initialized" );
404+ TOUCH_NULL_POINTER_CHECK (p_period_ms , "p_period_ms" );
405+ ESP_RETURN_ON_FALSE (rtc_touch_mux , ESP_ERR_INVALID_STATE , TOUCH_TAG , "Touch pad not initialized" );
402406
403407 esp_err_t ret = ESP_OK ;
404408 xSemaphoreTake (rtc_touch_mux , portMAX_DELAY );
405- if (s_touch_pad_filter != NULL ) {
409+ if (s_touch_pad_filter ) {
406410 * p_period_ms = s_touch_pad_filter -> period ;
407411 } else {
408412 ESP_LOGE (TOUCH_TAG , "Touch pad filter deleted" );
@@ -414,8 +418,8 @@ esp_err_t touch_pad_get_filter_period(uint32_t *p_period_ms)
414418
415419esp_err_t touch_pad_filter_start (uint32_t filter_period_ms )
416420{
417- TOUCH_CHECK (filter_period_ms >= portTICK_PERIOD_MS , "Touch pad filter period error" , ESP_ERR_INVALID_ARG );
418- TOUCH_CHECK (rtc_touch_mux != NULL , "Touch pad not initialized" , ESP_ERR_INVALID_STATE );
421+ ESP_RETURN_ON_FALSE (filter_period_ms >= portTICK_PERIOD_MS , ESP_ERR_INVALID_ARG , TOUCH_TAG , "Touch pad filter period error" );
422+ ESP_RETURN_ON_FALSE (rtc_touch_mux , ESP_ERR_INVALID_STATE , TOUCH_TAG , "Touch pad not initialized" );
419423
420424 xSemaphoreTake (rtc_touch_mux , portMAX_DELAY );
421425 if (s_touch_pad_filter == NULL ) {
@@ -445,11 +449,11 @@ esp_err_t touch_pad_filter_start(uint32_t filter_period_ms)
445449
446450esp_err_t touch_pad_filter_stop (void )
447451{
448- TOUCH_CHECK (s_touch_pad_filter != NULL , "Touch pad filter not initialized" , ESP_ERR_INVALID_STATE );
449- TOUCH_CHECK (rtc_touch_mux != NULL , "Touch pad not initialized" , ESP_ERR_INVALID_STATE );
452+ ESP_RETURN_ON_FALSE (s_touch_pad_filter , ESP_ERR_INVALID_STATE , TOUCH_TAG , "Touch pad filter not initialized" );
453+ ESP_RETURN_ON_FALSE (rtc_touch_mux , ESP_ERR_INVALID_STATE , TOUCH_TAG , "Touch pad not initialized" );
450454 esp_err_t ret = ESP_OK ;
451455 xSemaphoreTake (rtc_touch_mux , portMAX_DELAY );
452- if (s_touch_pad_filter != NULL ) {
456+ if (s_touch_pad_filter ) {
453457 xTimerStop (s_touch_pad_filter -> timer , portMAX_DELAY );
454458 } else {
455459 ESP_LOGE (TOUCH_TAG , "Touch pad filter deleted" );
@@ -461,11 +465,11 @@ esp_err_t touch_pad_filter_stop(void)
461465
462466esp_err_t touch_pad_filter_delete (void )
463467{
464- TOUCH_CHECK (s_touch_pad_filter != NULL , "Touch pad filter not initialized" , ESP_ERR_INVALID_STATE );
465- TOUCH_CHECK (rtc_touch_mux != NULL , "Touch pad not initialized" , ESP_ERR_INVALID_STATE );
468+ ESP_RETURN_ON_FALSE (s_touch_pad_filter , ESP_ERR_INVALID_STATE , TOUCH_TAG , "Touch pad filter not initialized" );
469+ ESP_RETURN_ON_FALSE (rtc_touch_mux , ESP_ERR_INVALID_STATE , TOUCH_TAG , "Touch pad not initialized" );
466470 xSemaphoreTake (rtc_touch_mux , portMAX_DELAY );
467- if (s_touch_pad_filter != NULL ) {
468- if (s_touch_pad_filter -> timer != NULL ) {
471+ if (s_touch_pad_filter ) {
472+ if (s_touch_pad_filter -> timer ) {
469473 xTimerStop (s_touch_pad_filter -> timer , portMAX_DELAY );
470474 xTimerDelete (s_touch_pad_filter -> timer , portMAX_DELAY );
471475 s_touch_pad_filter -> timer = NULL ;
0 commit comments