diff --git a/Drivers/cst816s-module/source/cst816s.cpp b/Drivers/cst816s-module/source/cst816s.cpp index fd38472c4..b1cb713b7 100644 --- a/Drivers/cst816s-module/source/cst816s.cpp +++ b/Drivers/cst816s-module/source/cst816s.cpp @@ -105,22 +105,27 @@ static error_t start(Device* device) { static error_t stop(Device* device) { auto* internal = static_cast(device_get_driver_data(device)); - bool ok = true; - // esp_lcd_touch_del() only releases the touch-side resources; the panel IO handle is owned // separately and needs its own deletion. - if (esp_lcd_touch_del(internal->touch_handle) != ESP_OK) { - LOG_E(TAG, "Failed to delete touch handle"); - ok = false; + if (internal->touch_handle != nullptr) { + if (esp_lcd_touch_del(internal->touch_handle) != ESP_OK) { + LOG_E(TAG, "Failed to delete touch handle"); + return ERROR_RESOURCE; + } + internal->touch_handle = nullptr; } - if (esp_lcd_panel_io_del(internal->io_handle) != ESP_OK) { - LOG_E(TAG, "Failed to delete panel IO handle"); - ok = false; + if (internal->io_handle != nullptr) { + if (esp_lcd_panel_io_del(internal->io_handle) != ESP_OK) { + LOG_E(TAG, "Failed to delete panel IO handle"); + return ERROR_RESOURCE; + } + internal->io_handle = nullptr; } free(internal); - return ok ? ERROR_NONE : ERROR_RESOURCE; + device_set_driver_data(device, nullptr); + return ERROR_NONE; } // endregion diff --git a/Drivers/ft5x06-module/source/ft5x06.cpp b/Drivers/ft5x06-module/source/ft5x06.cpp index a5ef2a1d3..72141596f 100644 --- a/Drivers/ft5x06-module/source/ft5x06.cpp +++ b/Drivers/ft5x06-module/source/ft5x06.cpp @@ -105,22 +105,27 @@ static error_t start(Device* device) { static error_t stop(Device* device) { auto* internal = static_cast(device_get_driver_data(device)); - bool ok = true; - // esp_lcd_touch_del() only releases the touch-side resources; the panel IO handle is owned // separately and needs its own deletion. - if (esp_lcd_touch_del(internal->touch_handle) != ESP_OK) { - LOG_E(TAG, "Failed to delete touch handle"); - ok = false; + if (internal->touch_handle != nullptr) { + if (esp_lcd_touch_del(internal->touch_handle) != ESP_OK) { + LOG_E(TAG, "Failed to delete touch handle"); + return ERROR_RESOURCE; + } + internal->touch_handle = nullptr; } - if (esp_lcd_panel_io_del(internal->io_handle) != ESP_OK) { - LOG_E(TAG, "Failed to delete panel IO handle"); - ok = false; + if (internal->io_handle != nullptr) { + if (esp_lcd_panel_io_del(internal->io_handle) != ESP_OK) { + LOG_E(TAG, "Failed to delete panel IO handle"); + return ERROR_RESOURCE; + } + internal->io_handle = nullptr; } free(internal); - return ok ? ERROR_NONE : ERROR_RESOURCE; + device_set_driver_data(device, nullptr); + return ERROR_NONE; } // endregion diff --git a/Drivers/ft6x36-module/source/ft6x36.cpp b/Drivers/ft6x36-module/source/ft6x36.cpp index d37ea9e00..ab998e2f7 100644 --- a/Drivers/ft6x36-module/source/ft6x36.cpp +++ b/Drivers/ft6x36-module/source/ft6x36.cpp @@ -105,22 +105,27 @@ static error_t start(Device* device) { static error_t stop(Device* device) { auto* internal = static_cast(device_get_driver_data(device)); - bool ok = true; - // esp_lcd_touch_del() only releases the touch-side resources; the panel IO handle is owned // separately and needs its own deletion. - if (esp_lcd_touch_del(internal->touch_handle) != ESP_OK) { - LOG_E(TAG, "Failed to delete touch handle"); - ok = false; + if (internal->touch_handle != nullptr) { + if (esp_lcd_touch_del(internal->touch_handle) != ESP_OK) { + LOG_E(TAG, "Failed to delete touch handle"); + return ERROR_RESOURCE; + } + internal->touch_handle = nullptr; } - if (esp_lcd_panel_io_del(internal->io_handle) != ESP_OK) { - LOG_E(TAG, "Failed to delete panel IO handle"); - ok = false; + if (internal->io_handle != nullptr) { + if (esp_lcd_panel_io_del(internal->io_handle) != ESP_OK) { + LOG_E(TAG, "Failed to delete panel IO handle"); + return ERROR_RESOURCE; + } + internal->io_handle = nullptr; } free(internal); - return ok ? ERROR_NONE : ERROR_RESOURCE; + device_set_driver_data(device, nullptr); + return ERROR_NONE; } // endregion diff --git a/Drivers/gt911-module/source/gt911.cpp b/Drivers/gt911-module/source/gt911.cpp index 93e2d9db3..b340439fe 100644 --- a/Drivers/gt911-module/source/gt911.cpp +++ b/Drivers/gt911-module/source/gt911.cpp @@ -114,22 +114,27 @@ static error_t start(Device* device) { static error_t stop(Device* device) { auto* internal = static_cast(device_get_driver_data(device)); - bool ok = true; - // esp_lcd_touch_del() only releases the touch-side resources; the panel IO handle is owned // separately and needs its own deletion. - if (esp_lcd_touch_del(internal->touch_handle) != ESP_OK) { - LOG_E(TAG, "Failed to delete touch handle"); - ok = false; + if (internal->touch_handle != nullptr) { + if (esp_lcd_touch_del(internal->touch_handle) != ESP_OK) { + LOG_E(TAG, "Failed to delete touch handle"); + return ERROR_RESOURCE; + } + internal->touch_handle = nullptr; } - if (esp_lcd_panel_io_del(internal->io_handle) != ESP_OK) { - LOG_E(TAG, "Failed to delete panel IO handle"); - ok = false; + if (internal->io_handle != nullptr) { + if (esp_lcd_panel_io_del(internal->io_handle) != ESP_OK) { + LOG_E(TAG, "Failed to delete panel IO handle"); + return ERROR_RESOURCE; + } + internal->io_handle = nullptr; } free(internal); - return ok ? ERROR_NONE : ERROR_RESOURCE; + device_set_driver_data(device, nullptr); + return ERROR_NONE; } // endregion diff --git a/Drivers/ili9341-module/source/ili9341.cpp b/Drivers/ili9341-module/source/ili9341.cpp index 8f7caaa3f..70818577d 100644 --- a/Drivers/ili9341-module/source/ili9341.cpp +++ b/Drivers/ili9341-module/source/ili9341.cpp @@ -165,20 +165,26 @@ static error_t start(Device* device) { static error_t stop(Device* device) { auto* internal = static_cast(device_get_driver_data(device)); - error_t result = ERROR_NONE; - - if (esp_lcd_panel_del(internal->panel_handle) != ESP_OK) { - LOG_E(TAG, "Failed to delete panel"); - result = ERROR_RESOURCE; + if (internal->panel_handle != nullptr) { + if (esp_lcd_panel_del(internal->panel_handle) != ESP_OK) { + LOG_E(TAG, "Failed to delete panel"); + return ERROR_RESOURCE; + } + internal->panel_handle = nullptr; } - if (esp_lcd_panel_io_del(internal->io_handle) != ESP_OK) { - LOG_E(TAG, "Failed to delete panel IO"); - result = ERROR_RESOURCE; + + if (internal->io_handle != nullptr) { + if (esp_lcd_panel_io_del(internal->io_handle) != ESP_OK) { + LOG_E(TAG, "Failed to delete panel IO"); + return ERROR_RESOURCE; + } + internal->io_handle = nullptr; } vSemaphoreDelete(internal->draw_done_semaphore); free(internal); - return result; + device_set_driver_data(device, nullptr); + return ERROR_NONE; } // endregion diff --git a/Drivers/ili9488-module/source/ili9488.cpp b/Drivers/ili9488-module/source/ili9488.cpp index 96cc1deca..0a4ba4bea 100644 --- a/Drivers/ili9488-module/source/ili9488.cpp +++ b/Drivers/ili9488-module/source/ili9488.cpp @@ -161,17 +161,25 @@ static error_t start(Device* device) { static error_t stop(Device* device) { auto* internal = static_cast(device_get_driver_data(device)); - if (esp_lcd_panel_del(internal->panel_handle) != ESP_OK) { - LOG_E(TAG, "Failed to delete panel"); - return ERROR_RESOURCE; + if (internal->panel_handle != nullptr) { + if (esp_lcd_panel_del(internal->panel_handle) != ESP_OK) { + LOG_E(TAG, "Failed to delete panel"); + return ERROR_RESOURCE; + } + internal->panel_handle = nullptr; } - if (esp_lcd_panel_io_del(internal->io_handle) != ESP_OK) { - LOG_E(TAG, "Failed to delete panel IO"); - return ERROR_RESOURCE; + + if (internal->io_handle != nullptr) { + if (esp_lcd_panel_io_del(internal->io_handle) != ESP_OK) { + LOG_E(TAG, "Failed to delete panel IO"); + return ERROR_RESOURCE; + } + internal->io_handle = nullptr; } vSemaphoreDelete(internal->draw_done_semaphore); free(internal); + device_set_driver_data(device, nullptr); return ERROR_NONE; } diff --git a/Drivers/rgb-display-module/source/rgb_display.cpp b/Drivers/rgb-display-module/source/rgb_display.cpp index 631877b3e..b3c088d88 100644 --- a/Drivers/rgb-display-module/source/rgb_display.cpp +++ b/Drivers/rgb-display-module/source/rgb_display.cpp @@ -256,15 +256,17 @@ static error_t start(Device* device) { static error_t stop(Device* device) { auto* internal = static_cast(device_get_driver_data(device)); - if (esp_lcd_panel_del(internal->panel_handle) != ESP_OK) { - LOG_E(TAG, "Failed to delete panel"); - vSemaphoreDelete(internal->frame_complete_semaphore); - free(internal); - return ERROR_RESOURCE; + if (internal->panel_handle != nullptr) { + if (esp_lcd_panel_del(internal->panel_handle) != ESP_OK) { + LOG_E(TAG, "Failed to delete panel"); + return ERROR_RESOURCE; + } + internal->panel_handle = nullptr; } vSemaphoreDelete(internal->frame_complete_semaphore); free(internal); + device_set_driver_data(device, nullptr); return ERROR_NONE; } diff --git a/Drivers/st7789-i8080-module/source/st7789_i8080.cpp b/Drivers/st7789-i8080-module/source/st7789_i8080.cpp index 38c121f00..a405cbd27 100644 --- a/Drivers/st7789-i8080-module/source/st7789_i8080.cpp +++ b/Drivers/st7789-i8080-module/source/st7789_i8080.cpp @@ -204,20 +204,26 @@ static error_t start(Device* device) { static error_t stop(Device* device) { auto* internal = static_cast(device_get_driver_data(device)); - error_t result = ERROR_NONE; - - if (esp_lcd_panel_del(internal->panel_handle) != ESP_OK) { - LOG_E(TAG, "Failed to delete panel"); - result = ERROR_RESOURCE; + if (internal->panel_handle != nullptr) { + if (esp_lcd_panel_del(internal->panel_handle) != ESP_OK) { + LOG_E(TAG, "Failed to delete panel"); + return ERROR_RESOURCE; + } + internal->panel_handle = nullptr; } - if (esp_lcd_panel_io_del(internal->io_handle) != ESP_OK) { - LOG_E(TAG, "Failed to delete panel IO"); - result = ERROR_RESOURCE; + + if (internal->io_handle != nullptr) { + if (esp_lcd_panel_io_del(internal->io_handle) != ESP_OK) { + LOG_E(TAG, "Failed to delete panel IO"); + return ERROR_RESOURCE; + } + internal->io_handle = nullptr; } vSemaphoreDelete(internal->draw_done_semaphore); free(internal); - return result; + device_set_driver_data(device, nullptr); + return ERROR_NONE; } // endregion diff --git a/Drivers/st7789-module/source/st7789.cpp b/Drivers/st7789-module/source/st7789.cpp index 2c0906422..1f58369ff 100644 --- a/Drivers/st7789-module/source/st7789.cpp +++ b/Drivers/st7789-module/source/st7789.cpp @@ -165,17 +165,25 @@ static error_t start(Device* device) { static error_t stop(Device* device) { auto* internal = static_cast(device_get_driver_data(device)); - if (esp_lcd_panel_del(internal->panel_handle) != ESP_OK) { - LOG_E(TAG, "Failed to delete panel"); - return ERROR_RESOURCE; + if (internal->panel_handle != nullptr) { + if (esp_lcd_panel_del(internal->panel_handle) != ESP_OK) { + LOG_E(TAG, "Failed to delete panel"); + return ERROR_RESOURCE; + } + internal->panel_handle = nullptr; } - if (esp_lcd_panel_io_del(internal->io_handle) != ESP_OK) { - LOG_E(TAG, "Failed to delete panel IO"); - return ERROR_RESOURCE; + + if (internal->io_handle != nullptr) { + if (esp_lcd_panel_io_del(internal->io_handle) != ESP_OK) { + LOG_E(TAG, "Failed to delete panel IO"); + return ERROR_RESOURCE; + } + internal->io_handle = nullptr; } vSemaphoreDelete(internal->draw_done_semaphore); free(internal); + device_set_driver_data(device, nullptr); return ERROR_NONE; } diff --git a/Drivers/st7796-module/source/st7796.cpp b/Drivers/st7796-module/source/st7796.cpp index 94d735793..9ea85c414 100644 --- a/Drivers/st7796-module/source/st7796.cpp +++ b/Drivers/st7796-module/source/st7796.cpp @@ -165,20 +165,26 @@ static error_t start(Device* device) { static error_t stop(Device* device) { auto* internal = static_cast(device_get_driver_data(device)); - error_t result = ERROR_NONE; - - if (esp_lcd_panel_del(internal->panel_handle) != ESP_OK) { - LOG_E(TAG, "Failed to delete panel"); - result = ERROR_RESOURCE; + if (internal->panel_handle != nullptr) { + if (esp_lcd_panel_del(internal->panel_handle) != ESP_OK) { + LOG_E(TAG, "Failed to delete panel"); + return ERROR_RESOURCE; + } + internal->panel_handle = nullptr; } - if (esp_lcd_panel_io_del(internal->io_handle) != ESP_OK) { - LOG_E(TAG, "Failed to delete panel IO"); - result = ERROR_RESOURCE; + + if (internal->io_handle != nullptr) { + if (esp_lcd_panel_io_del(internal->io_handle) != ESP_OK) { + LOG_E(TAG, "Failed to delete panel IO"); + return ERROR_RESOURCE; + } + internal->io_handle = nullptr; } vSemaphoreDelete(internal->draw_done_semaphore); free(internal); - return result; + device_set_driver_data(device, nullptr); + return ERROR_NONE; } // endregion diff --git a/Drivers/xpt2046-module/source/xpt2046.cpp b/Drivers/xpt2046-module/source/xpt2046.cpp index caea9a141..4bd1d9583 100644 --- a/Drivers/xpt2046-module/source/xpt2046.cpp +++ b/Drivers/xpt2046-module/source/xpt2046.cpp @@ -239,24 +239,30 @@ static error_t stop(Device* device) { if (internal->power_supply_device != nullptr) { destroy_power_supply_child(internal->power_supply_device); + internal->power_supply_device = nullptr; } - bool ok = true; - // esp_lcd_touch_del() only releases the touch-side resources; the panel IO handle is owned // separately and needs its own deletion. - if (esp_lcd_touch_del(internal->touch_handle) != ESP_OK) { - LOG_E(TAG, "Failed to delete touch handle"); - ok = false; + if (internal->touch_handle != nullptr) { + if (esp_lcd_touch_del(internal->touch_handle) != ESP_OK) { + LOG_E(TAG, "Failed to delete touch handle"); + return ERROR_RESOURCE; + } + internal->touch_handle = nullptr; } - if (esp_lcd_panel_io_del(internal->io_handle) != ESP_OK) { - LOG_E(TAG, "Failed to delete panel IO handle"); - ok = false; + if (internal->io_handle != nullptr) { + if (esp_lcd_panel_io_del(internal->io_handle) != ESP_OK) { + LOG_E(TAG, "Failed to delete panel IO handle"); + return ERROR_RESOURCE; + } + internal->io_handle = nullptr; } free(internal); - return ok ? ERROR_NONE : ERROR_RESOURCE; + device_set_driver_data(device, nullptr); + return ERROR_NONE; } // endregion