From e48b0a8969847f7194707ae96a7f3da04d903099 Mon Sep 17 00:00:00 2001 From: Nitek Date: Tue, 11 Dec 2018 14:08:57 +0100 Subject: [PATCH 1/4] Support for power down pin like on AI-Thinker esp32-cam module --- driver/camera.c | 12 ++++++++++++ driver/include/esp_camera.h | 2 ++ 2 files changed, 14 insertions(+) diff --git a/driver/camera.c b/driver/camera.c index 33a15ad..a923070 100755 --- a/driver/camera.c +++ b/driver/camera.c @@ -852,6 +852,18 @@ esp_err_t camera_probe(const camera_config_t* config, camera_model_t* out_camera vTaskDelay(10 / portTICK_PERIOD_MS); gpio_set_level(config->pin_reset, 1); vTaskDelay(10 / portTICK_PERIOD_MS); + } else if(config->pin_pwdn >= 0) { + ESP_LOGD(TAG, "Resetting camera by power down line"); + gpio_config_t conf = { 0 }; + conf.pin_bit_mask = 1LL << config->pin_pwdn; + conf.mode = GPIO_MODE_OUTPUT; + gpio_config(&conf); + + // carefull, logic is inverted compared to reset pin + gpio_set_level(config->pin_pwdn, 1); + vTaskDelay(10 / portTICK_PERIOD_MS); + gpio_set_level(config->pin_pwdn, 0); + vTaskDelay(10 / portTICK_PERIOD_MS); #if CONFIG_OV2640_SUPPORT } else { //reset OV2640 diff --git a/driver/include/esp_camera.h b/driver/include/esp_camera.h index 4b23789..10da228 100755 --- a/driver/include/esp_camera.h +++ b/driver/include/esp_camera.h @@ -16,6 +16,7 @@ * static camera_config_t camera_example_config = { .pin_reset = PIN_RESET, + .pin_pwdn = PIN_PWDN, .pin_xclk = PIN_XCLK, .pin_sscb_sda = PIN_SIOD, .pin_sscb_scl = PIN_SIOC, @@ -77,6 +78,7 @@ extern "C" { */ typedef struct { int pin_reset; /*!< GPIO pin for camera reset line */ + int pin_pwdn; /*!< GPIO pin for camera power down line */ int pin_xclk; /*!< GPIO pin for camera XCLK line */ int pin_sscb_sda; /*!< GPIO pin for camera SDA line */ int pin_sscb_scl; /*!< GPIO pin for camera SCL line */ From a53b0a694e6b86c130fb894ffa9e0beb91358aef Mon Sep 17 00:00:00 2001 From: Nitek Date: Tue, 11 Dec 2018 14:16:24 +0100 Subject: [PATCH 2/4] fix whitespaces --- driver/camera.c | 12 ++++++------ driver/include/esp_camera.h | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/driver/camera.c b/driver/camera.c index a923070..ea016ad 100755 --- a/driver/camera.c +++ b/driver/camera.c @@ -853,17 +853,17 @@ esp_err_t camera_probe(const camera_config_t* config, camera_model_t* out_camera gpio_set_level(config->pin_reset, 1); vTaskDelay(10 / portTICK_PERIOD_MS); } else if(config->pin_pwdn >= 0) { - ESP_LOGD(TAG, "Resetting camera by power down line"); + ESP_LOGD(TAG, "Resetting camera by power down line"); gpio_config_t conf = { 0 }; conf.pin_bit_mask = 1LL << config->pin_pwdn; conf.mode = GPIO_MODE_OUTPUT; gpio_config(&conf); - // carefull, logic is inverted compared to reset pin - gpio_set_level(config->pin_pwdn, 1); - vTaskDelay(10 / portTICK_PERIOD_MS); - gpio_set_level(config->pin_pwdn, 0); - vTaskDelay(10 / portTICK_PERIOD_MS); + // carefull, logic is inverted compared to reset pin + gpio_set_level(config->pin_pwdn, 1); + vTaskDelay(10 / portTICK_PERIOD_MS); + gpio_set_level(config->pin_pwdn, 0); + vTaskDelay(10 / portTICK_PERIOD_MS); #if CONFIG_OV2640_SUPPORT } else { //reset OV2640 diff --git a/driver/include/esp_camera.h b/driver/include/esp_camera.h index 10da228..91ec250 100755 --- a/driver/include/esp_camera.h +++ b/driver/include/esp_camera.h @@ -78,7 +78,7 @@ extern "C" { */ typedef struct { int pin_reset; /*!< GPIO pin for camera reset line */ - int pin_pwdn; /*!< GPIO pin for camera power down line */ + int pin_pwdn; /*!< GPIO pin for camera power down line */ int pin_xclk; /*!< GPIO pin for camera XCLK line */ int pin_sscb_sda; /*!< GPIO pin for camera SDA line */ int pin_sscb_scl; /*!< GPIO pin for camera SCL line */ From 620b3d484de8fc0d203cfea53a6bd5e5047e010c Mon Sep 17 00:00:00 2001 From: Nitek Date: Tue, 11 Dec 2018 17:20:58 +0100 Subject: [PATCH 3/4] Turn elseif into if if for proper reset pin handling --- driver/camera.c | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/driver/camera.c b/driver/camera.c index ea016ad..e29d68e 100755 --- a/driver/camera.c +++ b/driver/camera.c @@ -840,6 +840,20 @@ esp_err_t camera_probe(const camera_config_t* config, camera_model_t* out_camera ESP_LOGD(TAG, "Initializing SSCB"); SCCB_Init(config->pin_sscb_sda, config->pin_sscb_scl); + + if(config->pin_pwdn >= 0) { + ESP_LOGD(TAG, "Resetting camera by power down line"); + gpio_config_t conf = { 0 }; + conf.pin_bit_mask = 1LL << config->pin_pwdn; + conf.mode = GPIO_MODE_OUTPUT; + gpio_config(&conf); + + // carefull, logic is inverted compared to reset pin + gpio_set_level(config->pin_pwdn, 1); + vTaskDelay(10 / portTICK_PERIOD_MS); + gpio_set_level(config->pin_pwdn, 0); + vTaskDelay(10 / portTICK_PERIOD_MS); + } if(config->pin_reset >= 0) { ESP_LOGD(TAG, "Resetting camera"); @@ -852,18 +866,6 @@ esp_err_t camera_probe(const camera_config_t* config, camera_model_t* out_camera vTaskDelay(10 / portTICK_PERIOD_MS); gpio_set_level(config->pin_reset, 1); vTaskDelay(10 / portTICK_PERIOD_MS); - } else if(config->pin_pwdn >= 0) { - ESP_LOGD(TAG, "Resetting camera by power down line"); - gpio_config_t conf = { 0 }; - conf.pin_bit_mask = 1LL << config->pin_pwdn; - conf.mode = GPIO_MODE_OUTPUT; - gpio_config(&conf); - - // carefull, logic is inverted compared to reset pin - gpio_set_level(config->pin_pwdn, 1); - vTaskDelay(10 / portTICK_PERIOD_MS); - gpio_set_level(config->pin_pwdn, 0); - vTaskDelay(10 / portTICK_PERIOD_MS); #if CONFIG_OV2640_SUPPORT } else { //reset OV2640 From 3de2c4627059695a569c7bcd8baca18bd9ee910b Mon Sep 17 00:00:00 2001 From: Nitek Date: Tue, 11 Dec 2018 18:40:50 +0100 Subject: [PATCH 4/4] Sort pin struct --- driver/include/esp_camera.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/driver/include/esp_camera.h b/driver/include/esp_camera.h index 91ec250..fddff1b 100755 --- a/driver/include/esp_camera.h +++ b/driver/include/esp_camera.h @@ -15,8 +15,8 @@ * Example Use * static camera_config_t camera_example_config = { - .pin_reset = PIN_RESET, .pin_pwdn = PIN_PWDN, + .pin_reset = PIN_RESET, .pin_xclk = PIN_XCLK, .pin_sscb_sda = PIN_SIOD, .pin_sscb_scl = PIN_SIOC, @@ -77,8 +77,8 @@ extern "C" { * @brief Configuration structure for camera initialization */ typedef struct { - int pin_reset; /*!< GPIO pin for camera reset line */ int pin_pwdn; /*!< GPIO pin for camera power down line */ + int pin_reset; /*!< GPIO pin for camera reset line */ int pin_xclk; /*!< GPIO pin for camera XCLK line */ int pin_sscb_sda; /*!< GPIO pin for camera SDA line */ int pin_sscb_scl; /*!< GPIO pin for camera SCL line */