diff --git a/components/driver/include/driver/touch_pad.h b/components/driver/include/driver/touch_pad.h index 6f0fd2d72a..21e2e2ec7c 100644 --- a/components/driver/include/driver/touch_pad.h +++ b/components/driver/include/driver/touch_pad.h @@ -122,6 +122,7 @@ esp_err_t touch_pad_init(); /** * @brief Un-install touch pad driver. + * @note After this function is called, other touch functions are prohibited from being called. * @return * - ESP_OK Success * - ESP_FAIL Touch pad driver not initialized diff --git a/components/driver/rtc_module.c b/components/driver/rtc_module.c index 76fd9bf2fd..a7124a1bfe 100644 --- a/components/driver/rtc_module.c +++ b/components/driver/rtc_module.c @@ -479,7 +479,7 @@ static void touch_pad_filter_cb(void *arg) { static uint32_t s_filtered_temp[TOUCH_PAD_MAX] = {0}; - if (s_touch_pad_filter == NULL) { + if (s_touch_pad_filter == NULL || rtc_touch_mux == NULL) { return; } uint16_t val = 0; @@ -828,15 +828,15 @@ esp_err_t touch_pad_init() esp_err_t touch_pad_deinit() { - if (rtc_touch_mux == NULL) { - return ESP_FAIL; + RTC_MODULE_CHECK(rtc_touch_mux != NULL, "Touch pad not initialized", ESP_FAIL); + if (s_touch_pad_filter != NULL) { + touch_pad_filter_stop(); + touch_pad_filter_delete(); } s_touch_pad_init_bit = 0x0000; - touch_pad_filter_delete(); touch_pad_set_fsm_mode(TOUCH_FSM_MODE_SW); touch_pad_clear_status(); touch_pad_intr_disable(); - vSemaphoreDelete(rtc_touch_mux); rtc_touch_mux = NULL; return ESP_OK; } @@ -975,7 +975,7 @@ esp_err_t touch_pad_filter_start(uint32_t filter_period_ms) esp_err_t touch_pad_filter_stop() { RTC_MODULE_CHECK(s_touch_pad_filter != NULL, "Touch pad filter not initialized", ESP_ERR_INVALID_STATE); - + RTC_MODULE_CHECK(rtc_touch_mux != NULL, "Touch pad not initialized", ESP_ERR_INVALID_STATE); esp_err_t ret = ESP_OK; xSemaphoreTake(rtc_touch_mux, portMAX_DELAY); if (s_touch_pad_filter != NULL) { @@ -991,6 +991,7 @@ esp_err_t touch_pad_filter_stop() esp_err_t touch_pad_filter_delete() { RTC_MODULE_CHECK(s_touch_pad_filter != NULL, "Touch pad filter not initialized", ESP_ERR_INVALID_STATE); + RTC_MODULE_CHECK(rtc_touch_mux != NULL, "Touch pad not initialized", ESP_ERR_INVALID_STATE); xSemaphoreTake(rtc_touch_mux, portMAX_DELAY); if (s_touch_pad_filter != NULL) { if (s_touch_pad_filter->timer != NULL) {