Feat: persistent storage of sensor settings in nvs
This commit is contained in:
@@ -26,6 +26,6 @@ set(COMPONENT_PRIV_INCLUDEDIRS
|
|||||||
)
|
)
|
||||||
|
|
||||||
set(COMPONENT_REQUIRES driver)
|
set(COMPONENT_REQUIRES driver)
|
||||||
set(COMPONENT_PRIV_REQUIRES freertos)
|
set(COMPONENT_PRIV_REQUIRES freertos nvs_flash)
|
||||||
|
|
||||||
register_component()
|
register_component()
|
||||||
|
|||||||
@@ -29,6 +29,8 @@
|
|||||||
#include "driver/rtc_io.h"
|
#include "driver/rtc_io.h"
|
||||||
#include "driver/periph_ctrl.h"
|
#include "driver/periph_ctrl.h"
|
||||||
#include "esp_intr_alloc.h"
|
#include "esp_intr_alloc.h"
|
||||||
|
#include "nvs_flash.h"
|
||||||
|
#include "nvs.h"
|
||||||
#include "sensor.h"
|
#include "sensor.h"
|
||||||
#include "sccb.h"
|
#include "sccb.h"
|
||||||
#include "esp_camera.h"
|
#include "esp_camera.h"
|
||||||
@@ -67,6 +69,7 @@ typedef enum {
|
|||||||
#include "esp_log.h"
|
#include "esp_log.h"
|
||||||
static const char* TAG = "camera";
|
static const char* TAG = "camera";
|
||||||
#endif
|
#endif
|
||||||
|
static const char* CAMERA_SENSOR_NVS_KEY = "sensor";
|
||||||
|
|
||||||
typedef void (*dma_filter_t)(const dma_elem_t* src, lldesc_t* dma_desc, uint8_t* dst);
|
typedef void (*dma_filter_t)(const dma_elem_t* src, lldesc_t* dma_desc, uint8_t* dst);
|
||||||
|
|
||||||
@@ -1354,3 +1357,75 @@ sensor_t * esp_camera_sensor_get()
|
|||||||
}
|
}
|
||||||
return &s_state->sensor;
|
return &s_state->sensor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
esp_err_t esp_camera_save_to_nvs(const char *key)
|
||||||
|
{
|
||||||
|
nvs_handle_t handle;
|
||||||
|
|
||||||
|
esp_err_t ret = nvs_open(key,NVS_READWRITE,&handle);
|
||||||
|
|
||||||
|
if (ret == ESP_OK) {
|
||||||
|
sensor_t *s = esp_camera_sensor_get();
|
||||||
|
if (s != NULL) {
|
||||||
|
ret = nvs_set_blob(handle,CAMERA_SENSOR_NVS_KEY,&s->status,sizeof(camera_status_t));
|
||||||
|
return ret;
|
||||||
|
} else {
|
||||||
|
return ESP_ERR_CAMERA_NOT_DETECTED;
|
||||||
|
}
|
||||||
|
nvs_close(handle);
|
||||||
|
return ret;
|
||||||
|
} else {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
esp_err_t esp_camera_load_from_nvs(const char *key)
|
||||||
|
{
|
||||||
|
nvs_handle_t handle;
|
||||||
|
|
||||||
|
esp_err_t ret = nvs_open(key,NVS_READWRITE,&handle);
|
||||||
|
|
||||||
|
if (ret == ESP_OK) {
|
||||||
|
sensor_t *s = esp_camera_sensor_get();
|
||||||
|
camera_status_t st;
|
||||||
|
if (s != NULL) {
|
||||||
|
size_t size = sizeof(camera_status_t);
|
||||||
|
ret = nvs_get_blob(handle,CAMERA_SENSOR_NVS_KEY,&st,&size);
|
||||||
|
if (ret = ESP_OK) {
|
||||||
|
s->set_ae_level(s,st.ae_level);
|
||||||
|
s->set_aec2(s,st.aec2);
|
||||||
|
s->set_aec_value(s,st.aec_value);
|
||||||
|
s->set_agc_gain(s,st.agc_gain);
|
||||||
|
s->set_awb_gain(s,st.awb_gain);
|
||||||
|
s->set_bpc(s,st.bpc);
|
||||||
|
s->set_brightness(s,st.brightness);
|
||||||
|
s->set_colorbar(s,st.colorbar);
|
||||||
|
s->set_contrast(s,st.contrast);
|
||||||
|
s->set_dcw(s,st.dcw);
|
||||||
|
s->set_denoise(s,st.denoise);
|
||||||
|
s->set_exposure_ctrl(s,st.aec);
|
||||||
|
s->set_framesize(s,st.framesize);
|
||||||
|
s->set_gain_ctrl(s,st.agc);
|
||||||
|
s->set_gainceiling(s,st.gainceiling);
|
||||||
|
s->set_hmirror(s,st.hmirror);
|
||||||
|
s->set_lenc(s,st.lenc);
|
||||||
|
s->set_quality(s,st.quality);
|
||||||
|
s->set_raw_gma(s,st.raw_gma);
|
||||||
|
s->set_saturation(s,st.saturation);
|
||||||
|
s->set_sharpness(s,st.sharpness);
|
||||||
|
s->set_special_effect(s,st.special_effect);
|
||||||
|
s->set_vflip(s,st.vflip);
|
||||||
|
s->set_wb_mode(s,st.wb_mode);
|
||||||
|
s->set_whitebal(s,st.awb);
|
||||||
|
s->set_wpc(s,st.wpc);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return ESP_ERR_CAMERA_NOT_DETECTED;
|
||||||
|
}
|
||||||
|
nvs_close(handle);
|
||||||
|
return ret;
|
||||||
|
} else {
|
||||||
|
ESP_LOGW(TAG,"Error (%d) opening nvs key \"%s\"",ret,key);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -171,6 +171,19 @@ void esp_camera_fb_return(camera_fb_t * fb);
|
|||||||
*/
|
*/
|
||||||
sensor_t * esp_camera_sensor_get();
|
sensor_t * esp_camera_sensor_get();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Save camera settings to non-volatile-storage (NVS)
|
||||||
|
*
|
||||||
|
* @param key A unique nvs key name for the camera settings
|
||||||
|
*/
|
||||||
|
esp_err_t esp_camera_save_to_nvs(const char *key);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Save camera settings to non-volatile-storage (NVS)
|
||||||
|
*
|
||||||
|
* @param key A unique nvs key name for the camera settings
|
||||||
|
*/
|
||||||
|
esp_err_t esp_camera_load_from_nvs(const char *key);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user