diff --git a/README.md b/README.md
index 5cd92c42..95fbf4cc 100644
--- a/README.md
+++ b/README.md
@@ -45,10 +45,14 @@ In other cases you can contact the developer via email:
set_gain_ctrl(s, 0);
s->set_exposure_ctrl(s, 0);
+
LEDOnOff(false);
LightOnOff(false);
isFixedExposure = true;
@@ -264,10 +270,7 @@ esp_err_t CCamera::CaptureToBasisImage(CImageBasis *_Image, int delay)
camera_fb_t * fb = esp_camera_fb_get();
if (!fb) {
ESP_LOGE(TAGCAMERACLASS, "Camera Capture Failed");
- LightOnOff(false);
- LogFile.WriteHeapInfo("Camera Capture Failed - Reinit Camera");
- Camera.InitCam();
- doReboot();
+ LEDOnOff(false);
return ESP_FAIL;
}
@@ -352,9 +355,6 @@ esp_err_t CCamera::CaptureToFile(std::string nm, int delay)
if (!fb) {
ESP_LOGE(TAGCAMERACLASS, "Camera Capture Failed");
LEDOnOff(false);
- LogFile.WriteHeapInfo("Camera Capture Failed - Reinit Camera");
- Camera.InitCam();
- doReboot();
return ESP_FAIL;
}
LEDOnOff(false);
@@ -439,13 +439,10 @@ esp_err_t CCamera::CaptureToHTTP(httpd_req_t *req, int delay)
vTaskDelay( xDelay );
}
+
fb = esp_camera_fb_get();
if (!fb) {
ESP_LOGE(TAGCAMERACLASS, "Camera capture failed");
- LightOnOff(false);
- LogFile.WriteHeapInfo("Camera Capture Failed - Reinit Camera");
- Camera.InitCam();
- doReboot();
httpd_resp_send_500(req);
return ESP_FAIL;
}
@@ -581,16 +578,10 @@ CCamera::CCamera()
contrast = -5;
saturation = -5;
isFixedExposure = false;
- ActualQuality = camera_config.jpeg_quality;
- ActualResolution = camera_config.frame_size;
-
}
esp_err_t CCamera::InitCam()
{
- esp_camera_deinit();
- PowerResetCamera();
-
if(CAM_PIN_PWDN != -1){
// Init the GPIO
gpio_pad_select_gpio(CAM_PIN_PWDN);
@@ -600,6 +591,8 @@ esp_err_t CCamera::InitCam()
}
printf("Init Camera\n");
+ ActualQuality = camera_config.jpeg_quality;
+ ActualResolution = camera_config.frame_size;
//initialize the camera
esp_err_t err = esp_camera_init(&camera_config);
if (err != ESP_OK) {
@@ -607,42 +600,5 @@ esp_err_t CCamera::InitCam()
return err;
}
- SetBrightnessContrastSaturation(brightness, contrast, saturation);
- SetQualitySize(ActualQuality, ActualResolution);
-
- if (isFixedExposure)
- EnableAutoExposure(waitbeforepicture_org);
-
- LightOnOff(false);
-
return ESP_OK;
-}
-
-
-
-/////////////////////////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-void PowerResetCamera(){
- printf("Resetting camera by power down line.\n");
-/*
- gpio_config_t conf = { 0 };
- conf.pin_bit_mask = 1LL << GPIO_NUM_32;
- conf.mode = GPIO_MODE_OUTPUT;
- gpio_config(&conf);
-*/
-
- gpio_pad_select_gpio(GPIO_NUM_32);
- /* Set the GPIO as a push/pull output */
- gpio_set_direction(GPIO_NUM_32, GPIO_MODE_OUTPUT);
-
-
- // carefull, logic is inverted compared to reset pin
- gpio_set_level(GPIO_NUM_32, 0); // ehemals 1 !!!!!!!!!!!!!!!!!!!!
- vTaskDelay(1000 / portTICK_PERIOD_MS);
- gpio_set_level(GPIO_NUM_32, 1); // ehemals 0 !!!!!!!!!!!!!!!!!!!!
- vTaskDelay(1000 / portTICK_PERIOD_MS);
-}
-
+}
\ No newline at end of file
diff --git a/code/components/jomjol_controlcamera/ClassControllCamera.h b/code/components/jomjol_controlcamera/ClassControllCamera.h
index ef701577..b4389b8a 100644
--- a/code/components/jomjol_controlcamera/ClassControllCamera.h
+++ b/code/components/jomjol_controlcamera/ClassControllCamera.h
@@ -25,7 +25,6 @@ class CCamera {
framesize_t ActualResolution;
int brightness, contrast, saturation;
bool isFixedExposure;
-
int waitbeforepicture_org;
public:
@@ -50,7 +49,6 @@ class CCamera {
esp_err_t CaptureToBasisImage(CImageBasis *_Image, int delay = 0);
};
-void PowerResetCamera();
extern CCamera Camera;
diff --git a/code/components/jomjol_controlcamera/server_camera.cpp b/code/components/jomjol_controlcamera/server_camera.cpp
new file mode 100644
index 00000000..d318a736
--- /dev/null
+++ b/code/components/jomjol_controlcamera/server_camera.cpp
@@ -0,0 +1,246 @@
+#include "server_camera.h"
+
+#include
+#include "string.h"
+
+#include "esp_camera.h"
+#include "ClassControllCamera.h"
+
+#include "ClassLogFile.h"
+
+#define SCRATCH_BUFSIZE2 8192
+char scratch2[SCRATCH_BUFSIZE2];
+
+//#define DEBUG_DETAIL_ON
+
+
+
+void PowerResetCamera(){
+ ESP_LOGD(TAGPARTCAMERA, "Resetting camera by power down line");
+ gpio_config_t conf = { 0 };
+ conf.pin_bit_mask = 1LL << GPIO_NUM_32;
+ conf.mode = GPIO_MODE_OUTPUT;
+ gpio_config(&conf);
+
+ // carefull, logic is inverted compared to reset pin
+ gpio_set_level(GPIO_NUM_32, 1);
+ vTaskDelay(1000 / portTICK_PERIOD_MS);
+ gpio_set_level(GPIO_NUM_32, 0);
+ vTaskDelay(1000 / portTICK_PERIOD_MS);
+}
+
+
+esp_err_t handler_lightOn(httpd_req_t *req)
+{
+#ifdef DEBUG_DETAIL_ON
+ LogFile.WriteHeapInfo("handler_lightOn - Start");
+ printf("handler_lightOn uri:\n"); printf(req->uri); printf("\n");
+#endif
+
+ Camera.LightOnOff(true);
+ const char* resp_str = (const char*) req->user_ctx;
+ httpd_resp_send(req, resp_str, strlen(resp_str));
+
+#ifdef DEBUG_DETAIL_ON
+ LogFile.WriteHeapInfo("handler_lightOn - Done");
+#endif
+
+ return ESP_OK;
+};
+
+esp_err_t handler_lightOff(httpd_req_t *req)
+{
+#ifdef DEBUG_DETAIL_ON
+ LogFile.WriteHeapInfo("handler_lightOff - Start");
+ printf("handler_lightOff uri:\n"); printf(req->uri); printf("\n");
+#endif
+ Camera.LightOnOff(false);
+ const char* resp_str = (const char*) req->user_ctx;
+ httpd_resp_send(req, resp_str, strlen(resp_str));
+
+#ifdef DEBUG_DETAIL_ON
+ LogFile.WriteHeapInfo("handler_lightOff - Done");
+#endif
+
+ return ESP_OK;
+};
+
+esp_err_t handler_capture(httpd_req_t *req)
+{
+#ifdef DEBUG_DETAIL_ON
+ LogFile.WriteHeapInfo("handler_capture - Start");
+#endif
+
+ int quality;
+ framesize_t res;
+
+ Camera.GetCameraParameter(req, quality, res);
+
+#ifdef DEBUG_DETAIL_ON
+ printf("Size: %d", res); printf(" Quality: %d\n", quality);
+#endif
+
+ Camera.SetQualitySize(quality, res);
+
+ esp_err_t ressult;
+ ressult = Camera.CaptureToHTTP(req);
+
+#ifdef DEBUG_DETAIL_ON
+ LogFile.WriteHeapInfo("handler_capture - Done");
+#endif
+
+ return ressult;
+};
+
+
+esp_err_t handler_capture_with_ligth(httpd_req_t *req)
+{
+#ifdef DEBUG_DETAIL_ON
+ LogFile.WriteHeapInfo("handler_capture_with_ligth - Start");
+#endif
+ char _query[100];
+ char _delay[10];
+
+ int quality;
+ framesize_t res;
+ int delay = 2500;
+
+ if (httpd_req_get_url_query_str(req, _query, 100) == ESP_OK)
+ {
+ printf("Query: "); printf(_query); printf("\n");
+ if (httpd_query_key_value(_query, "delay", _delay, 10) == ESP_OK)
+ {
+#ifdef DEBUG_DETAIL_ON
+ printf("Delay: "); printf(_delay); printf("\n");
+#endif
+ delay = atoi(_delay);
+
+ if (delay < 0)
+ delay = 0;
+ }
+ };
+
+ Camera.GetCameraParameter(req, quality, res);
+
+#ifdef DEBUG_DETAIL_ON
+ printf("Size: %d", res); printf(" Quality: %d\n", quality);
+#endif
+
+ Camera.SetQualitySize(quality, res);
+ Camera.LightOnOff(true);
+ const TickType_t xDelay = delay / portTICK_PERIOD_MS;
+ vTaskDelay( xDelay );
+
+ esp_err_t ressult;
+ ressult = Camera.CaptureToHTTP(req);
+
+ Camera.LightOnOff(false);
+
+#ifdef DEBUG_DETAIL_ON
+ LogFile.WriteHeapInfo("handler_capture_with_ligth - Done");
+#endif
+
+ return ressult;
+};
+
+
+
+esp_err_t handler_capture_save_to_file(httpd_req_t *req)
+{
+#ifdef DEBUG_DETAIL_ON
+ LogFile.WriteHeapInfo("handler_capture_save_to_file - Start");
+#endif
+
+ char _query[100];
+ char _delay[10];
+ int delay = 0;
+ char filename[100];
+ std::string fn = "/sdcard/";
+
+
+ int quality;
+ framesize_t res;
+
+ if (httpd_req_get_url_query_str(req, _query, 100) == ESP_OK)
+ {
+ printf("Query: "); printf(_query); printf("\n");
+ if (httpd_query_key_value(_query, "filename", filename, 100) == ESP_OK)
+ {
+ fn.append(filename);
+#ifdef DEBUG_DETAIL_ON
+ printf("Filename: "); printf(fn.c_str()); printf("\n");
+#endif
+ }
+ else
+ fn.append("noname.jpg");
+
+ if (httpd_query_key_value(_query, "delay", _delay, 10) == ESP_OK)
+ {
+#ifdef DEBUG_DETAIL_ON
+ printf("Delay: "); printf(_delay); printf("\n");
+#endif
+ delay = atoi(_delay);
+
+ if (delay < 0)
+ delay = 0;
+ }
+
+ }
+ else
+ fn.append("noname.jpg");
+
+ Camera.GetCameraParameter(req, quality, res);
+#ifdef DEBUG_DETAIL_ON
+ printf("Size: %d", res); printf(" Quality: %d\n", quality);
+#endif
+ Camera.SetQualitySize(quality, res);
+
+ esp_err_t ressult;
+ ressult = Camera.CaptureToFile(fn, delay);
+
+ const char* resp_str = (const char*) fn.c_str();
+ httpd_resp_send(req, resp_str, strlen(resp_str));
+
+#ifdef DEBUG_DETAIL_ON
+ LogFile.WriteHeapInfo("handler_capture_save_to_file - Done");
+#endif
+
+ return ressult;
+};
+
+
+
+void register_server_camera_uri(httpd_handle_t server)
+{
+#ifdef DEBUG_DETAIL_ON
+ ESP_LOGI(TAGPARTCAMERA, "server_part_camera - Registering URI handlers");
+#endif
+
+ httpd_uri_t camuri = { };
+ camuri.method = HTTP_GET;
+
+ camuri.uri = "/lighton";
+ camuri.handler = handler_lightOn;
+ camuri.user_ctx = (void*) "Light On";
+ httpd_register_uri_handler(server, &camuri);
+
+ camuri.uri = "/lightoff";
+ camuri.handler = handler_lightOff;
+ camuri.user_ctx = (void*) "Light Off";
+ httpd_register_uri_handler(server, &camuri);
+
+ camuri.uri = "/capture";
+ camuri.handler = handler_capture;
+ camuri.user_ctx = NULL;
+ httpd_register_uri_handler(server, &camuri);
+
+ camuri.uri = "/capture_with_flashlight";
+ camuri.handler = handler_capture_with_ligth;
+ camuri.user_ctx = NULL;
+ httpd_register_uri_handler(server, &camuri);
+
+ camuri.uri = "/save";
+ camuri.handler = handler_capture_save_to_file;
+ camuri.user_ctx = NULL;
+ httpd_register_uri_handler(server, &camuri);
+}
diff --git a/code/components/jomjol_controlcamera/server_camera.h b/code/components/jomjol_controlcamera/server_camera.h
new file mode 100644
index 00000000..b3f1fe19
--- /dev/null
+++ b/code/components/jomjol_controlcamera/server_camera.h
@@ -0,0 +1,16 @@
+#ifndef JOMJOL_CONTROLCAMERA_H
+#define JOMJOL_CONTROLCAMERA_H
+
+#include
+
+#include
+
+//#include "ClassControllCamera.h"
+
+static const char *TAGPARTCAMERA = "server_camera";
+
+void register_server_camera_uri(httpd_handle_t server);
+
+void PowerResetCamera();
+
+#endif
\ No newline at end of file
diff --git a/code/components/jomjol_fileserver_ota/server_file.cpp b/code/components/jomjol_fileserver_ota/server_file.cpp
index 05588aad..26bf32b0 100644
--- a/code/components/jomjol_fileserver_ota/server_file.cpp
+++ b/code/components/jomjol_fileserver_ota/server_file.cpp
@@ -721,21 +721,33 @@ void register_server_file_uri(httpd_handle_t server, const char *base_path)
/* Validate file storage base path */
if (!base_path) {
+// if (!base_path || strcmp(base_path, "/spiffs") != 0) {
ESP_LOGE(TAG, "File server base_path not set");
+// return ESP_ERR_INVALID_ARG;
}
if (server_data) {
ESP_LOGE(TAG, "File server already started");
+// return ESP_ERR_INVALID_STATE;
}
/* Allocate memory for server data */
server_data = (file_server_data *) calloc(1, sizeof(struct file_server_data));
if (!server_data) {
ESP_LOGE(TAG, "Failed to allocate memory for server data");
+// return ESP_ERR_NO_MEM;
}
strlcpy(server_data->base_path, base_path,
sizeof(server_data->base_path));
+
+
+ /* URI handler for getting uploaded files */
+// char zw[sizeof(serverprefix)+1];
+// strcpy(zw, serverprefix);
+// zw[strlen(serverprefix)] = '*';
+// zw[strlen(serverprefix)+1] = '\0';
+// printf("zw: %s\n", zw);
httpd_uri_t file_download = {
.uri = "/fileserver*", // Match all URIs of type /path/to/file
.method = HTTP_GET,
@@ -744,6 +756,8 @@ void register_server_file_uri(httpd_handle_t server, const char *base_path)
};
httpd_register_uri_handler(server, &file_download);
+
+
httpd_uri_t file_logfileact = {
.uri = "/logfileact", // Match all URIs of type /path/to/file
.method = HTTP_GET,
@@ -770,4 +784,5 @@ void register_server_file_uri(httpd_handle_t server, const char *base_path)
.user_ctx = server_data // Pass server data as context
};
httpd_register_uri_handler(server, &file_delete);
+
}
diff --git a/code/components/jomjol_fileserver_ota/server_ota.cpp b/code/components/jomjol_fileserver_ota/server_ota.cpp
index e2304d40..6c69ae1e 100644
--- a/code/components/jomjol_fileserver_ota/server_ota.cpp
+++ b/code/components/jomjol_fileserver_ota/server_ota.cpp
@@ -412,26 +412,11 @@ void task_reboot(void *pvParameter)
vTaskDelete(NULL); //Delete this task if it exits from the loop above
}
-
-
-inline void invoke_abort(void)
-{
- while (1) {
- if (esp_cpu_in_ocd_debug_mode()) {
- __asm__ ("break 0,0");
- }
- *((int *) 0) = 0;
- }
-}
-
-
void doReboot(){
LogFile.WriteToFile("Reboot - now");
- xTaskCreate(&task_reboot, "reboot", configMINIMAL_STACK_SIZE * 64, NULL, 10, NULL);
KillTFliteTasks();
-// xTaskCreate(&task_reboot, "reboot", configMINIMAL_STACK_SIZE * 64, NULL, 10, NULL);
+ xTaskCreate(&task_reboot, "reboot", configMINIMAL_STACK_SIZE * 64, NULL, 10, NULL);
vTaskDelay(5000 / portTICK_PERIOD_MS);
- invoke_abort();
esp_restart();
hard_restart();
}
diff --git a/code/components/jomjol_flowcontroll/ClassFlowAnalog.cpp b/code/components/jomjol_flowcontroll/ClassFlowAnalog.cpp
index 04fdd886..a23d8b42 100644
--- a/code/components/jomjol_flowcontroll/ClassFlowAnalog.cpp
+++ b/code/components/jomjol_flowcontroll/ClassFlowAnalog.cpp
@@ -285,7 +285,7 @@ bool ClassFlowAnalog::doNeuralNetwork(string time)
zwcnn = FormatFileName(zwcnn);
printf(zwcnn.c_str());printf("\n");
tflite->LoadModel(zwcnn);
-// tflite->MakeAllocate();
+ tflite->MakeAllocate();
#endif
for (int i = 0; i < ROI.size(); ++i)
diff --git a/code/components/jomjol_flowcontroll/ClassFlowDigit.cpp b/code/components/jomjol_flowcontroll/ClassFlowDigit.cpp
index 7e405e4e..9225ce6e 100644
--- a/code/components/jomjol_flowcontroll/ClassFlowDigit.cpp
+++ b/code/components/jomjol_flowcontroll/ClassFlowDigit.cpp
@@ -224,7 +224,7 @@ bool ClassFlowDigit::doNeuralNetwork(string time)
string zwcnn = FormatFileName("/sdcard" + cnnmodelfile);
printf(zwcnn.c_str());printf("\n");
tflite->LoadModel(zwcnn);
-// tflite->MakeAllocate();
+ tflite->MakeAllocate();
#endif
for (int i = 0; i < ROI.size(); ++i)
diff --git a/code/components/jomjol_flowcontroll/camera_define.h b/code/components/jomjol_flowcontroll/camera_define.h
new file mode 100644
index 00000000..8629c232
--- /dev/null
+++ b/code/components/jomjol_flowcontroll/camera_define.h
@@ -0,0 +1,101 @@
+#ifndef CAMERADEFINED
+#define CAMERADEFINED
+
+
+#if defined(CAMERA_MODEL_WROVER_KIT)
+#define PWDN_GPIO_NUM -1
+#define RESET_GPIO_NUM -1
+#define XCLK_GPIO_NUM 21
+#define SIOD_GPIO_NUM 26
+#define SIOC_GPIO_NUM 27
+
+#define Y9_GPIO_NUM 35
+#define Y8_GPIO_NUM 34
+#define Y7_GPIO_NUM 39
+#define Y6_GPIO_NUM 36
+#define Y5_GPIO_NUM 19
+#define Y4_GPIO_NUM 18
+#define Y3_GPIO_NUM 5
+#define Y2_GPIO_NUM 4
+#define VSYNC_GPIO_NUM 25
+#define HREF_GPIO_NUM 23
+#define PCLK_GPIO_NUM 22
+
+#elif defined(CAMERA_MODEL_M5STACK_PSRAM)
+#define PWDN_GPIO_NUM -1
+#define RESET_GPIO_NUM 15
+#define XCLK_GPIO_NUM 27
+#define SIOD_GPIO_NUM 25
+#define SIOC_GPIO_NUM 23
+
+#define Y9_GPIO_NUM 19
+#define Y8_GPIO_NUM 36
+#define Y7_GPIO_NUM 18
+#define Y6_GPIO_NUM 39
+#define Y5_GPIO_NUM 5
+#define Y4_GPIO_NUM 34
+#define Y3_GPIO_NUM 35
+#define Y2_GPIO_NUM 32
+#define VSYNC_GPIO_NUM 22
+#define HREF_GPIO_NUM 26
+#define PCLK_GPIO_NUM 21
+
+#elif defined(CAMERA_MODEL_AI_THINKER)
+#define PWDN_GPIO_NUM GPIO_NUM_32
+#define RESET_GPIO_NUM -1
+#define XCLK_GPIO_NUM GPIO_NUM_0
+#define SIOD_GPIO_NUM GPIO_NUM_26
+#define SIOC_GPIO_NUM GPIO_NUM_27
+
+#define Y9_GPIO_NUM GPIO_NUM_35
+#define Y8_GPIO_NUM GPIO_NUM_34
+#define Y7_GPIO_NUM GPIO_NUM_39
+#define Y6_GPIO_NUM GPIO_NUM_36
+#define Y5_GPIO_NUM GPIO_NUM_21
+#define Y4_GPIO_NUM GPIO_NUM_19
+#define Y3_GPIO_NUM GPIO_NUM_18
+#define Y2_GPIO_NUM GPIO_NUM_5
+#define VSYNC_GPIO_NUM GPIO_NUM_25
+#define HREF_GPIO_NUM GPIO_NUM_23
+#define PCLK_GPIO_NUM GPIO_NUM_22
+
+#else
+#error "Camera model not selected"
+#endif
+
+
+
+static camera_config_t camera_config = {
+ .pin_pwdn = PWDN_GPIO_NUM,
+ .pin_reset = RESET_GPIO_NUM,
+ .pin_xclk = XCLK_GPIO_NUM,
+ .pin_sscb_sda = SIOD_GPIO_NUM,
+ .pin_sscb_scl = SIOC_GPIO_NUM,
+
+ .pin_d7 = Y9_GPIO_NUM,
+ .pin_d6 = Y8_GPIO_NUM,
+ .pin_d5 = Y7_GPIO_NUM,
+ .pin_d4 = Y6_GPIO_NUM,
+ .pin_d3 = Y5_GPIO_NUM,
+ .pin_d2 = Y4_GPIO_NUM,
+ .pin_d1 = Y3_GPIO_NUM,
+ .pin_d0 = Y2_GPIO_NUM,
+ .pin_vsync = VSYNC_GPIO_NUM,
+ .pin_href = HREF_GPIO_NUM,
+ .pin_pclk = PCLK_GPIO_NUM,
+
+ //XCLK 20MHz or 10MHz for OV2640 double FPS (Experimental)
+ .xclk_freq_hz = 20000000,
+ .ledc_timer = LEDC_TIMER_0,
+ .ledc_channel = LEDC_CHANNEL_0,
+
+ .pixel_format = PIXFORMAT_JPEG,//YUV422,GRAYSCALE,RGB565,JPEG
+// .pixel_format = PIXFORMAT_RGB888,//YUV422,GRAYSCALE,RGB565,JPEG
+// .frame_size = FRAMESIZE_QVGA,//QQVGA-QXGA Do not use sizes above QVGA when not JPEG
+ .frame_size = FRAMESIZE_SVGA,//QQVGA-QXGA Do not use sizes above QVGA when not JPEG
+
+ .jpeg_quality = 12, //0-63 lower number means higher quality
+ .fb_count = 1 //if more than one, i2s runs in continuous mode. Use only with JPEG
+};
+
+#endif
diff --git a/code/components/jomjol_tfliteclass.zip b/code/components/jomjol_tfliteclass.zip
deleted file mode 100644
index 2bbe04f9..00000000
Binary files a/code/components/jomjol_tfliteclass.zip and /dev/null differ
diff --git a/code/components/jomjol_tfliteclass/CTfLiteClass.cpp b/code/components/jomjol_tfliteclass/CTfLiteClass.cpp
index 00a4f0fe..d0a529f5 100644
--- a/code/components/jomjol_tfliteclass/CTfLiteClass.cpp
+++ b/code/components/jomjol_tfliteclass/CTfLiteClass.cpp
@@ -6,13 +6,9 @@
// #define DEBUG_DETAIL_ON
-//#define GET_MEMORY(X) malloc(X)
-#define GET_MEMORY(X) heap_caps_malloc(X, MALLOC_CAP_SPIRAM)
-
-
float CTfLiteClass::GetOutputValue(int nr)
{
- TfLiteTensor* output2 = interpreter->output(0);
+ TfLiteTensor* output2 = this->interpreter->output(0);
int numeroutput = output2->dims->data[1];
if ((nr+1) > numeroutput)
@@ -57,7 +53,7 @@ int CTfLiteClass::GetOutClassification()
void CTfLiteClass::GetInputDimension(bool silent = false)
{
- TfLiteTensor* input2 = interpreter->input(0);
+ TfLiteTensor* input2 = this->interpreter->input(0);
int numdim = input2->dims->size;
if (!silent) printf("NumDimension: %d\n", numdim);
@@ -76,7 +72,7 @@ void CTfLiteClass::GetInputDimension(bool silent = false)
void CTfLiteClass::GetOutPut()
{
- TfLiteTensor* output2 = interpreter->output(0);
+ TfLiteTensor* output2 = this->interpreter->output(0);
int numdim = output2->dims->size;
printf("NumDimension: %d\n", numdim);
@@ -146,20 +142,20 @@ void CTfLiteClass::MakeAllocate()
static tflite::AllOpsResolver resolver;
// printf(LogFile.getESPHeapInfo().c_str()); printf("\n");
- interpreter = new tflite::MicroInterpreter(model, resolver, tensor_arena, kTensorArenaSize, error_reporter);
+ this->interpreter = new tflite::MicroInterpreter(this->model, resolver, this->tensor_arena, this->kTensorArenaSize, this->error_reporter);
// printf(LogFile.getESPHeapInfo().c_str()); printf("\n");
- TfLiteStatus allocate_status = interpreter->AllocateTensors();
+ TfLiteStatus allocate_status = this->interpreter->AllocateTensors();
if (allocate_status != kTfLiteOk) {
TF_LITE_REPORT_ERROR(error_reporter, "AllocateTensors() failed");
- GetInputDimension();
+ this->GetInputDimension();
return;
}
// printf("Allocate Done.\n");
}
void CTfLiteClass::GetInputTensorSize(){
- float *zw = input;
+ float *zw = this->input;
int test = sizeof(zw);
#ifdef DEBUG_DETAIL_ON
printf("Input Tensor Dimension: %d\n", test);
@@ -215,39 +211,36 @@ unsigned char* CTfLiteClass::ReadFileToCharArray(std::string _fn)
void CTfLiteClass::LoadModel(std::string _fn){
#ifdef SUPRESS_TFLITE_ERRORS
- error_reporter = new tflite::OwnMicroErrorReporter;
+ this->error_reporter = new tflite::OwnMicroErrorReporter;
#else
- error_reporter = new tflite::MicroErrorReporter;
+ this->error_reporter = new tflite::MicroErrorReporter;
#endif
unsigned char *rd;
rd = ReadFileToCharArray(_fn.c_str());
- model = tflite::GetModel(rd);
+ this->model = tflite::GetModel(rd);
free(rd);
TFLITE_MINIMAL_CHECK(model != nullptr);
- MakeAllocate();
}
CTfLiteClass::CTfLiteClass()
{
- model = nullptr;
- interpreter = nullptr;
- input = nullptr;
- output = nullptr;
- kTensorArenaSize = 200 * 1024; /// laut testfile: 108000 - bisher 600
- tensor_arena = (uint8_t*) GET_MEMORY(kTensorArenaSize);
-
-// tensor_arena = new uint8_t[kTensorArenaSize];
+ this->model = nullptr;
+ this->interpreter = nullptr;
+ this->input = nullptr;
+ this->output = nullptr;
+ this->kTensorArenaSize = 200 * 1024; /// laut testfile: 108000 - bisher 600
+ this->tensor_arena = new uint8_t[kTensorArenaSize];
}
CTfLiteClass::~CTfLiteClass()
{
- delete tensor_arena;
- delete interpreter;
- delete error_reporter;
+ delete this->tensor_arena;
+ delete this->interpreter;
+ delete this->error_reporter;
}
diff --git a/code/components/jomjol_tfliteclass/CTfLiteClass.h b/code/components/jomjol_tfliteclass/CTfLiteClass.h
index 36e7e7e8..07279f14 100644
--- a/code/components/jomjol_tfliteclass/CTfLiteClass.h
+++ b/code/components/jomjol_tfliteclass/CTfLiteClass.h
@@ -41,7 +41,7 @@ class CTfLiteClass
const tflite::Model* model;
tflite::MicroInterpreter* interpreter;
TfLiteTensor* output = nullptr;
- tflite::AllOpsResolver resolver;
+ static tflite::AllOpsResolver resolver;
int kTensorArenaSize;
uint8_t *tensor_arena;
@@ -52,12 +52,12 @@ class CTfLiteClass
long GetFileSize(std::string filename);
unsigned char* ReadFileToCharArray(std::string _fn);
-
- void MakeAllocate();
+
public:
CTfLiteClass();
~CTfLiteClass();
void LoadModel(std::string _fn);
+ void MakeAllocate();
void GetInputTensorSize();
bool LoadInputImageBasis(CImageBasis *rs);
void Invoke();
diff --git a/code/components/jomjol_tfliteclass/server_tflite.cpp b/code/components/jomjol_tfliteclass/server_tflite.cpp
index a1b44f07..f29e384c 100644
--- a/code/components/jomjol_tfliteclass/server_tflite.cpp
+++ b/code/components/jomjol_tfliteclass/server_tflite.cpp
@@ -128,6 +128,31 @@ void blink_task_doFlow(void *pvParameter)
xHandleblink_task_doFlow = NULL;
}
+
+esp_err_t handler_init(httpd_req_t *req)
+{
+#ifdef DEBUG_DETAIL_ON
+ LogFile.WriteHeapInfo("handler_init - Start");
+ printf("handler_doinit uri:\n"); printf(req->uri); printf("\n");
+#endif
+
+ char* resp_str = "Init started
";
+ httpd_resp_send(req, resp_str, strlen(resp_str));
+
+ doInit();
+
+ resp_str = "Init done
";
+ httpd_resp_send(req, resp_str, strlen(resp_str));
+ /* Respond with an empty chunk to signal HTTP response completion */
+ httpd_resp_send_chunk(req, NULL, 0);
+
+#ifdef DEBUG_DETAIL_ON
+ LogFile.WriteHeapInfo("handler_init - Done");
+#endif
+
+ return ESP_OK;
+};
+
esp_err_t handler_doflow(httpd_req_t *req)
{
#ifdef DEBUG_DETAIL_ON
@@ -409,6 +434,44 @@ esp_err_t handler_editflow(httpd_req_t *req)
httpd_resp_sendstr_chunk(req, zw.c_str());
}
+
+ if (_task.compare("test_align") == 0)
+ {
+ std::string _host = "";
+ if (httpd_query_key_value(_query, "host", _valuechar, 30) == ESP_OK) {
+ _host = std::string(_valuechar);
+ }
+// printf("Parameter host: "); printf(_host.c_str()); printf("\n");
+
+// string zwzw = "Do " + _task + " start\n"; printf(zwzw.c_str());
+ std::string zw = tfliteflow.doSingleStep("[Alignment]", _host);
+ httpd_resp_sendstr_chunk(req, zw.c_str());
+ }
+ if (_task.compare("test_analog") == 0)
+ {
+ std::string _host = "";
+ if (httpd_query_key_value(_query, "host", _valuechar, 30) == ESP_OK) {
+ _host = std::string(_valuechar);
+ }
+// printf("Parameter host: "); printf(_host.c_str()); printf("\n");
+// string zwzw = "Do " + _task + " start\n"; printf(zwzw.c_str());
+ std::string zw = tfliteflow.doSingleStep("[Analog]", _host);
+ httpd_resp_sendstr_chunk(req, zw.c_str());
+ }
+ if (_task.compare("test_digits") == 0)
+ {
+ std::string _host = "";
+ if (httpd_query_key_value(_query, "host", _valuechar, 30) == ESP_OK) {
+ _host = std::string(_valuechar);
+ }
+// printf("Parameter host: "); printf(_host.c_str()); printf("\n");
+
+// string zwzw = "Do " + _task + " start\n"; printf(zwzw.c_str());
+ std::string zw = tfliteflow.doSingleStep("[Digits]", _host);
+ httpd_resp_sendstr_chunk(req, zw.c_str());
+ }
+
+
/* Respond with an empty chunk to signal HTTP response completion */
httpd_resp_sendstr_chunk(req, NULL);
@@ -543,6 +606,11 @@ void register_server_tflite_uri(httpd_handle_t server)
httpd_uri_t camuri = { };
camuri.method = HTTP_GET;
+ camuri.uri = "/doinit";
+ camuri.handler = handler_init;
+ camuri.user_ctx = (void*) "Light On";
+ httpd_register_uri_handler(server, &camuri);
+
camuri.uri = "/setPreValue.html";
camuri.handler = handler_prevalue;
camuri.user_ctx = (void*) "Prevalue";
@@ -552,6 +620,7 @@ void register_server_tflite_uri(httpd_handle_t server)
camuri.handler = handler_doflow;
camuri.user_ctx = (void*) "Light Off";
httpd_register_uri_handler(server, &camuri);
+
camuri.uri = "/editflow.html";
camuri.handler = handler_editflow;
diff --git a/code/components/jomjol_time_sntp/time_sntp.h b/code/components/jomjol_time_sntp/time_sntp.h
index 434efe61..930bfa35 100644
--- a/code/components/jomjol_time_sntp/time_sntp.h
+++ b/code/components/jomjol_time_sntp/time_sntp.h
@@ -9,6 +9,7 @@
#include "esp_log.h"
#include "esp_attr.h"
#include "esp_sleep.h"
+// #include "nvs_flash.h"
#include "esp_sntp.h"
void setup_time(void);
diff --git a/code/main/main.cpp b/code/main/main.cpp
index f3fbc556..493ff17b 100644
--- a/code/main/main.cpp
+++ b/code/main/main.cpp
@@ -24,6 +24,8 @@
#include "time_sntp.h"
#include "ClassControllCamera.h"
#include "server_main.h"
+#include "server_camera.h"
+
#define __SD_USE_ONE_LINE_MODE__
@@ -113,6 +115,7 @@ void task_NoSDBlink(void *pvParameter)
{
gpio_pad_select_gpio(BLINK_GPIO);
gpio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT);
+
TickType_t xDelay;
xDelay = 100 / portTICK_PERIOD_MS;
@@ -124,20 +127,25 @@ void task_NoSDBlink(void *pvParameter)
vTaskDelay( xDelay );
gpio_set_level(BLINK_GPIO, 0);
vTaskDelay( xDelay );
+
}
vTaskDelete(NULL); //Delete this task if it exits from the loop above
}
extern "C" void app_main(void)
{
+ printf("Do Reset Camera\n");
+ PowerResetCamera();
+ Camera.InitCam();
+ Camera.LightOnOff(false);
+
if (!Init_NVS_SDCard())
{
xTaskCreate(&task_NoSDBlink, "task_NoSDBlink", configMINIMAL_STACK_SIZE * 64, NULL, tskIDLE_PRIORITY+1, NULL);
return;
};
- CheckOTAUpdate();
- Camera.InitCam();
+ CheckOTAUpdate();
LoadWlanFromFile("/sdcard/wlan.ini");
ConnectToWLAN();
@@ -145,7 +153,7 @@ extern "C" void app_main(void)
TickType_t xDelay;
xDelay = 2000 / portTICK_PERIOD_MS;
-// printf("Autoflow: sleep for : %ldms\n", (long) xDelay);
+ printf("Autoflow: sleep for : %ldms\n", (long) xDelay);
// LogFile.WriteToFile("Startsequence 06");
vTaskDelay( xDelay );
// LogFile.WriteToFile("Startsequence 07");
@@ -155,14 +163,17 @@ extern "C" void app_main(void)
LogFile.WriteToFile("=============================================================================================");
LogFile.SwitchOnOff(false);
-// std::string zw = gettimestring("%Y%m%d-%H%M%S");
-// printf("time %s\n", zw.c_str());
+ std::string zw = gettimestring("%Y%m%d-%H%M%S");
+ printf("time %s\n", zw.c_str());
+// Camera.InitCam();
+// Camera.LightOnOff(false);
xDelay = 2000 / portTICK_PERIOD_MS;
printf("Autoflow: sleep for : %ldms\n", (long) xDelay);
vTaskDelay( xDelay );
server = start_webserver();
+ register_server_camera_uri(server);
register_server_tflite_uri(server);
register_server_file_uri(server, "/sdcard");
register_server_ota_sdcard_uri(server);
@@ -174,4 +185,4 @@ extern "C" void app_main(void)
register_server_main_uri(server, "/sdcard");
TFliteDoAutoStart();
-}
\ No newline at end of file
+}
diff --git a/code/main/server_main.h b/code/main/server_main.h
index 96088c86..e4f75b4c 100644
--- a/code/main/server_main.h
+++ b/code/main/server_main.h
@@ -9,7 +9,7 @@
#include
#include "nvs_flash.h"
#include "tcpip_adapter.h"
-//#include "esp_eth.h"
+#include "esp_eth.h"
#include
diff --git a/code/main/version.cpp b/code/main/version.cpp
index 161c8e3b..974f7ebc 100644
--- a/code/main/version.cpp
+++ b/code/main/version.cpp
@@ -1,4 +1,4 @@
-const char* GIT_REV="ec96b7f";
+const char* GIT_REV="ce5f3c4";
const char* GIT_TAG="";
-const char* GIT_BRANCH="master";
-const char* BUILD_TIME="2021-04-23 07:11";
\ No newline at end of file
+const char* GIT_BRANCH="rolling";
+const char* BUILD_TIME="2021-05-01 17:30";
\ No newline at end of file
diff --git a/code/main/version.h b/code/main/version.h
index ca86119a..b7754787 100644
--- a/code/main/version.h
+++ b/code/main/version.h
@@ -13,7 +13,7 @@ extern "C"
#include "Helper.h"
#include
-const char* GIT_BASE_BRANCH = "master - v6.7.0 - 2020-04-23";
+const char* GIT_BASE_BRANCH = "master - v6.7.1 - 2020-04-30";
const char* git_base_branch(void)
diff --git a/code/sdkconfig b/code/sdkconfig
index fd0ae6a6..ecb9959f 100644
--- a/code/sdkconfig
+++ b/code/sdkconfig
@@ -135,11 +135,10 @@ CONFIG_EXAMPLE_CONNECT_IPV6=y
CONFIG_COMPILER_OPTIMIZATION_SIZE=y
# CONFIG_COMPILER_OPTIMIZATION_PERF is not set
# CONFIG_COMPILER_OPTIMIZATION_NONE is not set
-# CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE is not set
-CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_SILENT=y
+CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE=y
+# CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_SILENT is not set
# CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE is not set
-CONFIG_COMPILER_CXX_EXCEPTIONS=y
-CONFIG_COMPILER_CXX_EXCEPTIONS_EMG_POOL_SIZE=0
+# CONFIG_COMPILER_CXX_EXCEPTIONS is not set
# CONFIG_COMPILER_CXX_RTTI is not set
CONFIG_COMPILER_STACK_CHECK_MODE_NONE=y
# CONFIG_COMPILER_STACK_CHECK_MODE_NORM is not set
@@ -247,9 +246,9 @@ CONFIG_ESP32_REV_MIN_0=y
CONFIG_ESP32_REV_MIN=0
CONFIG_ESP32_DPORT_WORKAROUND=y
# CONFIG_ESP32_DEFAULT_CPU_FREQ_80 is not set
-# CONFIG_ESP32_DEFAULT_CPU_FREQ_160 is not set
-CONFIG_ESP32_DEFAULT_CPU_FREQ_240=y
-CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ=240
+CONFIG_ESP32_DEFAULT_CPU_FREQ_160=y
+# CONFIG_ESP32_DEFAULT_CPU_FREQ_240 is not set
+CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ=160
CONFIG_ESP32_SPIRAM_SUPPORT=y
#
@@ -398,8 +397,18 @@ CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU1=y
#
# Ethernet
#
-# CONFIG_ETH_USE_ESP32_EMAC is not set
-# CONFIG_ETH_USE_SPI_ETHERNET is not set
+CONFIG_ETH_ENABLED=y
+CONFIG_ETH_USE_ESP32_EMAC=y
+CONFIG_ETH_PHY_INTERFACE_RMII=y
+# CONFIG_ETH_PHY_INTERFACE_MII is not set
+CONFIG_ETH_RMII_CLK_INPUT=y
+# CONFIG_ETH_RMII_CLK_OUTPUT is not set
+CONFIG_ETH_RMII_CLK_IN_GPIO=0
+CONFIG_ETH_DMA_BUFFER_SIZE=512
+CONFIG_ETH_DMA_RX_BUFFER_NUM=10
+CONFIG_ETH_DMA_TX_BUFFER_NUM=10
+CONFIG_ETH_USE_SPI_ETHERNET=y
+CONFIG_ETH_SPI_ETHERNET_DM9051=y
# CONFIG_ETH_USE_OPENETH is not set
# end of Ethernet
@@ -419,7 +428,7 @@ CONFIG_ESP_EVENT_POST_FROM_IRAM_ISR=y
#
# ESP HTTP client
#
-# CONFIG_ESP_HTTP_CLIENT_ENABLE_HTTPS is not set
+CONFIG_ESP_HTTP_CLIENT_ENABLE_HTTPS=y
# CONFIG_ESP_HTTP_CLIENT_ENABLE_BASIC_AUTH is not set
# end of ESP HTTP client
@@ -538,12 +547,14 @@ CONFIG_FATFS_ALLOC_PREFER_EXTRAM=y
# Modbus configuration
#
CONFIG_FMB_COMM_MODE_RTU_EN=y
-# CONFIG_FMB_COMM_MODE_ASCII_EN is not set
+CONFIG_FMB_COMM_MODE_ASCII_EN=y
CONFIG_FMB_MASTER_TIMEOUT_MS_RESPOND=150
CONFIG_FMB_MASTER_DELAY_MS_CONVERT=200
CONFIG_FMB_QUEUE_LENGTH=20
CONFIG_FMB_SERIAL_TASK_STACK_SIZE=2048
CONFIG_FMB_SERIAL_BUF_SIZE=256
+CONFIG_FMB_SERIAL_ASCII_BITS_PER_SYMB=8
+CONFIG_FMB_SERIAL_ASCII_TIMEOUT_RESPOND_MS=1000
CONFIG_FMB_SERIAL_TASK_PRIO=10
# CONFIG_FMB_CONTROLLER_SLAVE_ID_SUPPORT is not set
CONFIG_FMB_CONTROLLER_NOTIFY_TIMEOUT=20
@@ -982,24 +993,24 @@ CONFIG_WIFI_PROV_AUTOSTOP_TIMEOUT=30
#
# Supplicant
#
-# CONFIG_WPA_MBEDTLS_CRYPTO is not set
+CONFIG_WPA_MBEDTLS_CRYPTO=y
# CONFIG_WPA_TLS_V12 is not set
# end of Supplicant
#
# Camera configuration
#
-# CONFIG_OV7670_SUPPORT is not set
+CONFIG_OV7670_SUPPORT=y
# CONFIG_OV7725_SUPPORT is not set
-# CONFIG_NT99141_SUPPORT is not set
+CONFIG_NT99141_SUPPORT=y
CONFIG_OV2640_SUPPORT=y
-# CONFIG_OV3660_SUPPORT is not set
-# CONFIG_OV5640_SUPPORT is not set
+CONFIG_OV3660_SUPPORT=y
+CONFIG_OV5640_SUPPORT=y
# CONFIG_SCCB_HARDWARE_I2C_PORT0 is not set
CONFIG_SCCB_HARDWARE_I2C_PORT1=y
-# CONFIG_CAMERA_CORE0 is not set
+CONFIG_CAMERA_CORE0=y
# CONFIG_CAMERA_CORE1 is not set
-CONFIG_CAMERA_NO_AFFINITY=y
+# CONFIG_CAMERA_NO_AFFINITY is not set
# end of Camera configuration
# end of Component config
@@ -1035,11 +1046,10 @@ CONFIG_MONITOR_BAUD_OTHER_VAL=115200
CONFIG_MONITOR_BAUD=115200
# CONFIG_COMPILER_OPTIMIZATION_LEVEL_DEBUG is not set
CONFIG_COMPILER_OPTIMIZATION_LEVEL_RELEASE=y
-# CONFIG_OPTIMIZATION_ASSERTIONS_ENABLED is not set
-CONFIG_OPTIMIZATION_ASSERTIONS_SILENT=y
+CONFIG_OPTIMIZATION_ASSERTIONS_ENABLED=y
+# CONFIG_OPTIMIZATION_ASSERTIONS_SILENT is not set
# CONFIG_OPTIMIZATION_ASSERTIONS_DISABLED is not set
-CONFIG_CXX_EXCEPTIONS=y
-CONFIG_CXX_EXCEPTIONS_EMG_POOL_SIZE=0
+# CONFIG_CXX_EXCEPTIONS is not set
CONFIG_STACK_CHECK_NONE=y
# CONFIG_STACK_CHECK_NORM is not set
# CONFIG_STACK_CHECK_STRONG is not set
diff --git a/code/sdkconfig.old b/code/sdkconfig.old
index a2e15946..757645d9 100644
--- a/code/sdkconfig.old
+++ b/code/sdkconfig.old
@@ -131,15 +131,14 @@ CONFIG_EXAMPLE_CONNECT_IPV6=y
#
# Compiler options
#
-# CONFIG_COMPILER_OPTIMIZATION_DEFAULT is not set
-CONFIG_COMPILER_OPTIMIZATION_SIZE=y
+CONFIG_COMPILER_OPTIMIZATION_DEFAULT=y
+# CONFIG_COMPILER_OPTIMIZATION_SIZE is not set
# CONFIG_COMPILER_OPTIMIZATION_PERF is not set
# CONFIG_COMPILER_OPTIMIZATION_NONE is not set
-# CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE is not set
-CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_SILENT=y
+CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE=y
+# CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_SILENT is not set
# CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE is not set
-CONFIG_COMPILER_CXX_EXCEPTIONS=y
-CONFIG_COMPILER_CXX_EXCEPTIONS_EMG_POOL_SIZE=0
+# CONFIG_COMPILER_CXX_EXCEPTIONS is not set
# CONFIG_COMPILER_CXX_RTTI is not set
CONFIG_COMPILER_STACK_CHECK_MODE_NONE=y
# CONFIG_COMPILER_STACK_CHECK_MODE_NORM is not set
@@ -398,8 +397,18 @@ CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU1=y
#
# Ethernet
#
-# CONFIG_ETH_USE_ESP32_EMAC is not set
-# CONFIG_ETH_USE_SPI_ETHERNET is not set
+CONFIG_ETH_ENABLED=y
+CONFIG_ETH_USE_ESP32_EMAC=y
+CONFIG_ETH_PHY_INTERFACE_RMII=y
+# CONFIG_ETH_PHY_INTERFACE_MII is not set
+CONFIG_ETH_RMII_CLK_INPUT=y
+# CONFIG_ETH_RMII_CLK_OUTPUT is not set
+CONFIG_ETH_RMII_CLK_IN_GPIO=0
+CONFIG_ETH_DMA_BUFFER_SIZE=512
+CONFIG_ETH_DMA_RX_BUFFER_NUM=10
+CONFIG_ETH_DMA_TX_BUFFER_NUM=10
+CONFIG_ETH_USE_SPI_ETHERNET=y
+CONFIG_ETH_SPI_ETHERNET_DM9051=y
# CONFIG_ETH_USE_OPENETH is not set
# end of Ethernet
@@ -419,7 +428,7 @@ CONFIG_ESP_EVENT_POST_FROM_IRAM_ISR=y
#
# ESP HTTP client
#
-# CONFIG_ESP_HTTP_CLIENT_ENABLE_HTTPS is not set
+CONFIG_ESP_HTTP_CLIENT_ENABLE_HTTPS=y
# CONFIG_ESP_HTTP_CLIENT_ENABLE_BASIC_AUTH is not set
# end of ESP HTTP client
@@ -538,12 +547,14 @@ CONFIG_FATFS_ALLOC_PREFER_EXTRAM=y
# Modbus configuration
#
CONFIG_FMB_COMM_MODE_RTU_EN=y
-# CONFIG_FMB_COMM_MODE_ASCII_EN is not set
+CONFIG_FMB_COMM_MODE_ASCII_EN=y
CONFIG_FMB_MASTER_TIMEOUT_MS_RESPOND=150
CONFIG_FMB_MASTER_DELAY_MS_CONVERT=200
CONFIG_FMB_QUEUE_LENGTH=20
CONFIG_FMB_SERIAL_TASK_STACK_SIZE=2048
CONFIG_FMB_SERIAL_BUF_SIZE=256
+CONFIG_FMB_SERIAL_ASCII_BITS_PER_SYMB=8
+CONFIG_FMB_SERIAL_ASCII_TIMEOUT_RESPOND_MS=1000
CONFIG_FMB_SERIAL_TASK_PRIO=10
# CONFIG_FMB_CONTROLLER_SLAVE_ID_SUPPORT is not set
CONFIG_FMB_CONTROLLER_NOTIFY_TIMEOUT=20
@@ -587,6 +598,7 @@ CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
# CONFIG_FREERTOS_USE_TRACE_FACILITY is not set
# CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS is not set
# CONFIG_FREERTOS_DEBUG_INTERNALS is not set
+CONFIG_FREERTOS_TASK_FUNCTION_WRAPPER=y
CONFIG_FREERTOS_CHECK_MUTEX_GIVEN_BY_OWNER=y
# CONFIG_FREERTOS_CHECK_PORT_CRITICAL_COMPLIANCE is not set
CONFIG_FREERTOS_DEBUG_OCDAWARE=y
@@ -982,24 +994,24 @@ CONFIG_WIFI_PROV_AUTOSTOP_TIMEOUT=30
#
# Supplicant
#
-# CONFIG_WPA_MBEDTLS_CRYPTO is not set
+CONFIG_WPA_MBEDTLS_CRYPTO=y
# CONFIG_WPA_TLS_V12 is not set
# end of Supplicant
#
# Camera configuration
#
-# CONFIG_OV7670_SUPPORT is not set
+CONFIG_OV7670_SUPPORT=y
# CONFIG_OV7725_SUPPORT is not set
-# CONFIG_NT99141_SUPPORT is not set
+CONFIG_NT99141_SUPPORT=y
CONFIG_OV2640_SUPPORT=y
-# CONFIG_OV3660_SUPPORT is not set
-# CONFIG_OV5640_SUPPORT is not set
+CONFIG_OV3660_SUPPORT=y
+CONFIG_OV5640_SUPPORT=y
# CONFIG_SCCB_HARDWARE_I2C_PORT0 is not set
CONFIG_SCCB_HARDWARE_I2C_PORT1=y
-# CONFIG_CAMERA_CORE0 is not set
+CONFIG_CAMERA_CORE0=y
# CONFIG_CAMERA_CORE1 is not set
-CONFIG_CAMERA_NO_AFFINITY=y
+# CONFIG_CAMERA_NO_AFFINITY is not set
# end of Camera configuration
# end of Component config
diff --git a/code/version.cpp b/code/version.cpp
index 161c8e3b..974f7ebc 100644
--- a/code/version.cpp
+++ b/code/version.cpp
@@ -1,4 +1,4 @@
-const char* GIT_REV="ec96b7f";
+const char* GIT_REV="ce5f3c4";
const char* GIT_TAG="";
-const char* GIT_BRANCH="master";
-const char* BUILD_TIME="2021-04-23 07:11";
\ No newline at end of file
+const char* GIT_BRANCH="rolling";
+const char* BUILD_TIME="2021-05-01 17:30";
\ No newline at end of file
diff --git a/firmware/bootloader.bin b/firmware/bootloader.bin
index 476cc5be..dbd483e6 100644
Binary files a/firmware/bootloader.bin and b/firmware/bootloader.bin differ
diff --git a/firmware/firmware.bin b/firmware/firmware.bin
index dc237ebc..bdeef846 100644
Binary files a/firmware/firmware.bin and b/firmware/firmware.bin differ