Feat: persistent storage of sensor settings in nvs
This commit is contained in:
@@ -29,6 +29,8 @@
|
||||
#include "driver/rtc_io.h"
|
||||
#include "driver/periph_ctrl.h"
|
||||
#include "esp_intr_alloc.h"
|
||||
#include "nvs_flash.h"
|
||||
#include "nvs.h"
|
||||
#include "sensor.h"
|
||||
#include "sccb.h"
|
||||
#include "esp_camera.h"
|
||||
@@ -67,6 +69,7 @@ typedef enum {
|
||||
#include "esp_log.h"
|
||||
static const char* TAG = "camera";
|
||||
#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);
|
||||
|
||||
@@ -1354,3 +1357,75 @@ sensor_t * esp_camera_sensor_get()
|
||||
}
|
||||
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();
|
||||
|
||||
/**
|
||||
* @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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user