From a7d4e9a4210cd3aac2d9b4bc9089aa83e6fd874a Mon Sep 17 00:00:00 2001 From: lorow Date: Mon, 1 Apr 2024 22:38:27 +0200 Subject: [PATCH 01/20] Refactor commands and serial manager to support updated commands payload --- .../data/CommandManager/CommandManager.cpp | 46 +++++++++++-------- .../data/CommandManager/CommandManager.hpp | 9 ++-- ESP/lib/src/io/Serial/SerialManager.cpp | 6 ++- 3 files changed, 37 insertions(+), 24 deletions(-) diff --git a/ESP/lib/src/data/CommandManager/CommandManager.cpp b/ESP/lib/src/data/CommandManager/CommandManager.cpp index a7edccce..c7fe2e03 100644 --- a/ESP/lib/src/data/CommandManager/CommandManager.cpp +++ b/ESP/lib/src/data/CommandManager/CommandManager.cpp @@ -3,61 +3,71 @@ CommandManager::CommandManager(ProjectConfig *deviceConfig) : deviceConfig(deviceConfig) {} -const CommandType CommandManager::getCommandType(Command &command){ - if (!command.data.containsKey("command")) +const CommandType CommandManager::getCommandType(JsonVariant &command){ + if (!command.containsKey("command")) return CommandType::None; - if (auto search = commandMap.find(command.data["command"]); search != commandMap.end()) + if (auto search = commandMap.find(command["command"]); search != commandMap.end()) return search->second; return CommandType::None; } -bool CommandManager::hasHasDataField(Command &command) { - return command.data.containsKey("data"); +bool CommandManager::hasDataField(JsonVariant &command) { + return command.containsKey("data"); } -void CommandManager::handleCommand(Command command) { +void CommandManager::handleCommands(CommandsPayload commandsPayload){ + if (!commandsPayload.data.containsKey("commands")){ + log_e("Json data sent not supported, lacks commands field"); + return; + } + + for(JsonVariant commandData : commandsPayload.data["commands"].as()) { + this->handleCommand(commandData); + } + + this->deviceConfig->save(); +} + +void CommandManager::handleCommand(JsonVariant command) { auto command_type = this->getCommandType(command); switch(command_type) { case CommandType::SET_WIFI: { - if (!this->hasHasDataField(command)) + if (!this->hasDataField(command)) // malformed command, lacked data field break; - - if(!command.data["data"].containsKey("ssid") || !command.data["data"].containsKey("password")) + if(!command["data"].containsKey("ssid") || !command["data"].containsKey("password")) break; std::string customNetworkName = "main"; - if (command.data["data"].containsKey("network_name")) - customNetworkName = command.data["data"]["network_name"].as(); + if (command["data"].containsKey("network_name")) + customNetworkName = command["data"]["network_name"].as(); this->deviceConfig->setWifiConfig( customNetworkName, - command.data["data"]["ssid"], - command.data["data"]["password"], + command["data"]["ssid"], + command["data"]["password"], 0, // channel, should this be zero? 0, // power, should this be zero? false, false ); - // we purposefully save here - this->deviceConfig->save(); break; } case CommandType::SET_MDNS: { - if (!this->hasHasDataField(command)) + if (!this->hasDataField(command)) break; - if(!command.data["data"].containsKey("hostname") || !strlen(command.data["data"]["hostname"])) + if(!command["data"].containsKey("hostname") || !strlen(command["data"]["hostname"])) break; this->deviceConfig->setMDNSConfig( - command.data["data"]["hostname"], + command["data"]["hostname"], "openiristracker", false ); diff --git a/ESP/lib/src/data/CommandManager/CommandManager.hpp b/ESP/lib/src/data/CommandManager/CommandManager.hpp index 1fbad74e..1631e3c8 100644 --- a/ESP/lib/src/data/CommandManager/CommandManager.hpp +++ b/ESP/lib/src/data/CommandManager/CommandManager.hpp @@ -13,7 +13,7 @@ enum CommandType { }; -struct Command { +struct CommandsPayload { JsonDocument data; }; @@ -28,12 +28,13 @@ const std::unordered_map commandMap = { ProjectConfig* deviceConfig; -bool hasHasDataField(Command &command); +bool hasDataField(JsonVariant &command); +void handleCommand(JsonVariant command); +const CommandType getCommandType(JsonVariant &command); public: CommandManager(ProjectConfig *deviceConfig); - void handleCommand(Command command); - const CommandType getCommandType(Command &command); + void handleCommands(CommandsPayload commandsPayload); }; #endif \ No newline at end of file diff --git a/ESP/lib/src/io/Serial/SerialManager.cpp b/ESP/lib/src/io/Serial/SerialManager.cpp index 6466d3d2..70049a67 100644 --- a/ESP/lib/src/io/Serial/SerialManager.cpp +++ b/ESP/lib/src/io/Serial/SerialManager.cpp @@ -67,10 +67,12 @@ void SerialManager::run() { if (deserializationError) { log_e("Command deserialization failed: %s", deserializationError.c_str()); + + return; } - Command command = {doc}; - this->commandManager->handleCommand(command); + CommandsPayload commands = {doc}; + this->commandManager->handleCommands(commands); } #ifdef ETVR_EYE_TRACKER_USB_API else { From 9c94411eeb2cfaa1afdd4e4d6273d67284ef5793 Mon Sep 17 00:00:00 2001 From: lorow Date: Wed, 10 Apr 2024 23:21:17 +0200 Subject: [PATCH 02/20] set setMinSecurity to WIFI_AUTH_WEP to fix boards not connecting to some networks, cleanup some logs and comments --- .../src/network/wifihandler/wifihandler.cpp | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/ESP/lib/src/network/wifihandler/wifihandler.cpp b/ESP/lib/src/network/wifihandler/wifihandler.cpp index 0c85ed58..8693eb20 100644 --- a/ESP/lib/src/network/wifihandler/wifihandler.cpp +++ b/ESP/lib/src/network/wifihandler/wifihandler.cpp @@ -18,6 +18,13 @@ WiFiHandler::WiFiHandler(ProjectConfig& configManager, WiFiHandler::~WiFiHandler() {} void WiFiHandler::begin() { + + // just to be sure, we reeset everything before we do anything, some boards were having problems otherwise + WiFi.disconnect(); + // we purposefully set the lowest min required security level, some boards have problems connecting otherwise + // https://github.com/espressif/arduino-esp32/issues/8770 + WiFi.setMinSecurity(WIFI_AUTH_WEP); + log_i("Starting WiFi Handler \n\r"); if (this->_enable_adhoc || wifiStateManager.getCurrentState() == WiFiState_e::WiFiState_ADHOC) { @@ -40,8 +47,6 @@ void WiFiHandler::begin() { if (networks.empty()) { log_i("No networks found in config, trying the default one \n\r"); - // since networks may not have a password, we only need to check if we have an ssid - // bail if we don't if (this->iniSTA( this->ssid, this->password, @@ -135,6 +140,8 @@ bool WiFiHandler::iniSTA(const std::string& ssid, uint8_t channel, wifi_power_t power) { + // since networks may not have a password, we only need to check if we have an ssid + // bail if we don't if (ssid == ""){ log_d("ssid missing, bailing"); return false; @@ -148,13 +155,14 @@ bool WiFiHandler::iniSTA(const std::string& ssid, wifiStateManager.setState(WiFiState_e::WiFiState_Connecting); log_i("Trying to connect to: %s \n\r", ssid.c_str()); auto mdnsConfig = configManager.getMDNSConfig(); - - log_d("Setting hostname %s \n\r"); WiFi.config(INADDR_NONE, INADDR_NONE, INADDR_NONE, INADDR_NONE); // need to call before setting hostname + log_d("Setting hostname %s \n\r"); WiFi.setHostname(mdnsConfig.hostname.c_str()); + log_i("Setting TX power to: %d \n\r", (uint8_t)power); + WiFi.setTxPower(power); // https://github.com/espressif/arduino-esp32/issues/5698 WiFi.begin(ssid.c_str(), password.c_str(), channel); - WiFi.setTxPower(power); + log_d("Waiting for WiFi to connect... \n\r"); while (WiFi.status() != WL_CONNECTED) { progress++; @@ -169,7 +177,6 @@ bool WiFiHandler::iniSTA(const std::string& ssid, } wifiStateManager.setState(WiFiState_e::WiFiState_Connected); log_i("Successfully connected to %s \n\r", ssid.c_str()); - log_i("Setting TX power to: %d \n\r", (uint8_t)power); return true; } From 53a3d4bcd603e2fd07546621628e69de88e4139a Mon Sep 17 00:00:00 2001 From: lorow Date: Fri, 31 May 2024 17:07:21 +0200 Subject: [PATCH 03/20] feat: Move logging in serial streaming so that we at least attempt to get new frame --- ESP/lib/src/io/Serial/SerialManager.cpp | 46 ++++++++++++------------- 1 file changed, 22 insertions(+), 24 deletions(-) diff --git a/ESP/lib/src/io/Serial/SerialManager.cpp b/ESP/lib/src/io/Serial/SerialManager.cpp index 70049a67..df7a15b8 100644 --- a/ESP/lib/src/io/Serial/SerialManager.cpp +++ b/ESP/lib/src/io/Serial/SerialManager.cpp @@ -5,10 +5,6 @@ SerialManager::SerialManager(CommandManager* commandManager) #ifdef ETVR_EYE_TRACKER_USB_API void SerialManager::send_frame() { - // if we failed to capture the frame, we bail, but we still want to listen to commands - if (err != ESP_OK) - return; - if (!last_frame) last_frame = esp_timer_get_time(); @@ -21,14 +17,17 @@ void SerialManager::send_frame() { if (fb) { len = fb->len; buf = fb->buf; - } else { - log_e("Camera capture failed with response: %s", esp_err_to_name(err)); + } else err = ESP_FAIL; - } - if (err == ESP_OK) - Serial.write(ETVR_HEADER, 2); + // if we failed to capture the frame, we bail, but we still want to listen to + // commands + if (err != ESP_OK) { + log_e("Camera capture failed with response: %s", esp_err_to_name(err)); + return; + } + Serial.write(ETVR_HEADER, 2); Serial.write(ETVR_HEADER_FRAME, 2); len_bytes[0] = len & 0xFF; len_bytes[1] = (len >> CHAR_BIT) & 0xFF; @@ -54,29 +53,28 @@ void SerialManager::send_frame() { void SerialManager::init() { Serial.begin(3000000); - if (SERIAL_FLUSH_ENABLED){ + if (SERIAL_FLUSH_ENABLED) { Serial.flush(); } } void SerialManager::run() { - if (Serial.available()) { - JsonDocument doc; - DeserializationError deserializationError = deserializeJson(doc, Serial); + if (Serial.available()) { + JsonDocument doc; + DeserializationError deserializationError = deserializeJson(doc, Serial); - if (deserializationError) { - log_e("Command deserialization failed: %s", - deserializationError.c_str()); - - return; - } + if (deserializationError) { + log_e("Command deserialization failed: %s", deserializationError.c_str()); - CommandsPayload commands = {doc}; - this->commandManager->handleCommands(commands); + return; } + + CommandsPayload commands = {doc}; + this->commandManager->handleCommands(commands); + } #ifdef ETVR_EYE_TRACKER_USB_API - else { - this->send_frame(); - } + else { + this->send_frame(); + } #endif } From 47b52417d0c61fe1a0444d784307001897212f62 Mon Sep 17 00:00:00 2001 From: Lorow Date: Sun, 2 Jun 2024 15:35:53 +0200 Subject: [PATCH 04/20] remove unused etvr_eye_tracker_usb --- ESP/lib/src/openiris.hpp | 6 +-- ESP/lib/src/usb/etvr_eye_tracker_usb.cpp | 61 ------------------------ ESP/lib/src/usb/etvr_eye_tracker_usb.hpp | 7 --- 3 files changed, 2 insertions(+), 72 deletions(-) delete mode 100644 ESP/lib/src/usb/etvr_eye_tracker_usb.cpp delete mode 100644 ESP/lib/src/usb/etvr_eye_tracker_usb.hpp diff --git a/ESP/lib/src/openiris.hpp b/ESP/lib/src/openiris.hpp index 2cd61af2..7262b695 100644 --- a/ESP/lib/src/openiris.hpp +++ b/ESP/lib/src/openiris.hpp @@ -3,20 +3,18 @@ #include +#include #include #include +#include #include #include -#include -#include #ifndef ETVR_EYE_TRACKER_USB_API #include #include #include #include -#else -#include #endif // ETVR_EYE_TRACKER_WEB_API #endif // OPENIRIS_HPP diff --git a/ESP/lib/src/usb/etvr_eye_tracker_usb.cpp b/ESP/lib/src/usb/etvr_eye_tracker_usb.cpp deleted file mode 100644 index 216d2361..00000000 --- a/ESP/lib/src/usb/etvr_eye_tracker_usb.cpp +++ /dev/null @@ -1,61 +0,0 @@ -#include "etvr_eye_tracker_usb.hpp" - -#include -#include -#include - -const char* const ETVR_HEADER = "\xff\xa0"; -const char* const ETVR_HEADER_FRAME = "\xff\xa1"; - -void etvr_eye_tracker_usb_init() { - Serial.begin(3000000); - Serial.flush(); -} - -void etvr_eye_tracker_usb_loop() { - int64_t last_frame = 0; - if (!last_frame) - last_frame = esp_timer_get_time(); - - long last_request_time = 0; - camera_fb_t* fb = NULL; - esp_err_t err = ESP_OK; - - size_t len = 0; - uint8_t* buf = NULL; - - uint8_t len_bytes[2]; - - while (true) { - fb = esp_camera_fb_get(); - if (fb) { - len = fb->len; - buf = fb->buf; - } else { - log_e("Camera capture failed with response: %s", esp_err_to_name(err)); - err = ESP_FAIL; - } - if (err == ESP_OK) - Serial.write(ETVR_HEADER, 2); - Serial.write(ETVR_HEADER_FRAME, 2); - len_bytes[0] = len & 0xFF; - len_bytes[1] = (len >> CHAR_BIT) & 0xFF; - Serial.write(len_bytes, 2); - Serial.write((const char*)buf, len); - if (fb) { - esp_camera_fb_return(fb); - fb = NULL; - buf = NULL; - } else if (buf) { - free(buf); - buf = NULL; - } - if (err != ESP_OK) - break; - long request_end = millis(); - long latency = request_end - last_request_time; - last_request_time = request_end; - log_d("Size: %uKB, Time: %ums (%ifps)\n", len / 1024, latency, - 1000 / latency); - } -} diff --git a/ESP/lib/src/usb/etvr_eye_tracker_usb.hpp b/ESP/lib/src/usb/etvr_eye_tracker_usb.hpp deleted file mode 100644 index cfd6de18..00000000 --- a/ESP/lib/src/usb/etvr_eye_tracker_usb.hpp +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef INCLUDED_ETVR_EYE_TRACKER_USB_HPP -#define INCLUDED_ETVR_EYE_TRACKER_USB_HPP - -void etvr_eye_tracker_usb_init(); -void etvr_eye_tracker_usb_loop(); - -#endif // INCLUDED_ETVR_EYE_TRACKER_USB_HPP From 635c6b04de885245a8fd7f13ac354cd9860d408e Mon Sep 17 00:00:00 2001 From: Lorow Date: Sun, 2 Jun 2024 15:36:39 +0200 Subject: [PATCH 05/20] PoC query manager for better flasher logging --- .../src/data/QueryManager/QueryManager.cpp | 8 ++++ .../src/data/QueryManager/QueryManager.hpp | 46 +++++++++++++++++++ ESP/lib/src/io/Serial/SerialManager.cpp | 12 ++++- ESP/lib/src/io/Serial/SerialManager.hpp | 3 ++ ESP/src/main.cpp | 8 +++- 5 files changed, 74 insertions(+), 3 deletions(-) create mode 100644 ESP/lib/src/data/QueryManager/QueryManager.cpp create mode 100644 ESP/lib/src/data/QueryManager/QueryManager.hpp diff --git a/ESP/lib/src/data/QueryManager/QueryManager.cpp b/ESP/lib/src/data/QueryManager/QueryManager.cpp new file mode 100644 index 00000000..4f5c77cb --- /dev/null +++ b/ESP/lib/src/data/QueryManager/QueryManager.cpp @@ -0,0 +1,8 @@ +#include "QueryManager.hpp" + +std::string QueryManager::formatMessage(QueryPayload* messagePayload) { + return Helpers::format_string( + "{\"action\": \"%s\", \"status\": %d, \"additional_info\": \"%s\"}", + queryActionMap.at(messagePayload->action).c_str(), messagePayload->status, + messagePayload->additionalInfo.c_str()); +} \ No newline at end of file diff --git a/ESP/lib/src/data/QueryManager/QueryManager.hpp b/ESP/lib/src/data/QueryManager/QueryManager.hpp new file mode 100644 index 00000000..9678ca63 --- /dev/null +++ b/ESP/lib/src/data/QueryManager/QueryManager.hpp @@ -0,0 +1,46 @@ +#pragma once +#ifndef QUERY_MANAGER_HPP +#define QUERY_MANAGER_HPP +#include +#include +#include "data/utilities/helpers.hpp" + +enum QueryAction { + READY_TO_RECEIVE, + PARSE_COMMANDS, + CONNECT_TO_WIFI, +}; + +enum QueryStatus { + NONE, + SUCCESS, + ERROR, +}; + +struct QueryPayload { + QueryAction action; + QueryStatus status; + std::string additionalInfo; + + QueryPayload(QueryAction action, + QueryStatus status, + std::string additionalInfo) { + this->action = action; + this->status = status; + this->additionalInfo = additionalInfo; + } +}; + +class QueryManager { + private: + const std::unordered_map queryActionMap = { + {QueryAction::READY_TO_RECEIVE, "ready_to_receive"}, + {QueryAction::PARSE_COMMANDS, "parse_commands"}, + {QueryAction::CONNECT_TO_WIFI, "connect_to_wifi"}, + }; + + public: + std::string formatMessage(QueryPayload* messagePayload); +}; + +#endif \ No newline at end of file diff --git a/ESP/lib/src/io/Serial/SerialManager.cpp b/ESP/lib/src/io/Serial/SerialManager.cpp index df7a15b8..603c4788 100644 --- a/ESP/lib/src/io/Serial/SerialManager.cpp +++ b/ESP/lib/src/io/Serial/SerialManager.cpp @@ -1,7 +1,9 @@ #include "SerialManager.hpp" SerialManager::SerialManager(CommandManager* commandManager) - : commandManager(commandManager) {} + : commandManager(commandManager) { + this->queryManager = new QueryManager(); +} #ifdef ETVR_EYE_TRACKER_USB_API void SerialManager::send_frame() { @@ -56,6 +58,14 @@ void SerialManager::init() { if (SERIAL_FLUSH_ENABLED) { Serial.flush(); } + + QueryPayload* setupFinishedMessage = + new QueryPayload(QueryAction::READY_TO_RECEIVE, QueryStatus::NONE, ""); + this->snedQuery(setupFinishedMessage); +} + +void SerialManager::snedQuery(QueryPayload* messagePayload) { + Serial.println(this->queryManager->formatMessage(messagePayload).c_str()); } void SerialManager::run() { diff --git a/ESP/lib/src/io/Serial/SerialManager.hpp b/ESP/lib/src/io/Serial/SerialManager.hpp index f21d31ac..aa851a4a 100644 --- a/ESP/lib/src/io/Serial/SerialManager.hpp +++ b/ESP/lib/src/io/Serial/SerialManager.hpp @@ -7,6 +7,7 @@ #include #include #include "data/CommandManager/CommandManager.hpp" +#include "data/QueryManager/QueryManager.hpp" #include "data/config/project_config.hpp" const char* const ETVR_HEADER = "\xff\xa0"; @@ -16,6 +17,7 @@ class SerialManager { private: esp_err_t err = ESP_OK; CommandManager* commandManager; + QueryManager* queryManager; #ifdef ETVR_EYE_TRACKER_USB_API int64_t last_frame = 0; @@ -26,6 +28,7 @@ class SerialManager { public: SerialManager(CommandManager* commandManager); + void snedQuery(QueryPayload* messagePayload); void init(); void run(); }; diff --git a/ESP/src/main.cpp b/ESP/src/main.cpp index d37ded7a..881539bd 100644 --- a/ESP/src/main.cpp +++ b/ESP/src/main.cpp @@ -20,7 +20,11 @@ CameraHandler cameraHandler(deviceConfig); #endif // SIM_ENABLED #ifndef ETVR_EYE_TRACKER_USB_API -WiFiHandler wifiHandler(deviceConfig, WIFI_SSID, WIFI_PASSWORD, WIFI_CHANNEL, ENABLE_ADHOC); +WiFiHandler wifiHandler(deviceConfig, + WIFI_SSID, + WIFI_PASSWORD, + WIFI_CHANNEL, + ENABLE_ADHOC); MDNSHandler mdnsHandler(deviceConfig); #ifdef SIM_ENABLED APIServer apiServer(deviceConfig, wifiStateManager, "/control"); @@ -83,7 +87,7 @@ void setup() { #endif // SIM_ENABLED deviceConfig.load(); -serialManager.init(); + serialManager.init(); #ifndef ETVR_EYE_TRACKER_USB_API etvr_eye_tracker_web_init(); From c8335d221d98b26d8ee43db720a485a1adba7219 Mon Sep 17 00:00:00 2001 From: Lorow Date: Sun, 2 Jun 2024 18:59:44 +0200 Subject: [PATCH 06/20] simplify query implementation --- .../data/CommandManager/CommandManager.cpp | 135 +++++++++--------- .../data/CommandManager/CommandManager.hpp | 42 +++--- .../src/data/QueryManager/QueryManager.cpp | 8 -- .../src/data/QueryManager/QueryManager.hpp | 46 ------ ESP/lib/src/io/Serial/SerialManager.cpp | 16 ++- ESP/lib/src/io/Serial/SerialManager.hpp | 23 ++- 6 files changed, 118 insertions(+), 152 deletions(-) delete mode 100644 ESP/lib/src/data/QueryManager/QueryManager.cpp delete mode 100644 ESP/lib/src/data/QueryManager/QueryManager.hpp diff --git a/ESP/lib/src/data/CommandManager/CommandManager.cpp b/ESP/lib/src/data/CommandManager/CommandManager.cpp index c7fe2e03..02aaeba3 100644 --- a/ESP/lib/src/data/CommandManager/CommandManager.cpp +++ b/ESP/lib/src/data/CommandManager/CommandManager.cpp @@ -1,84 +1,81 @@ #include "CommandManager.hpp" -CommandManager::CommandManager(ProjectConfig *deviceConfig) : deviceConfig(deviceConfig) {} +CommandManager::CommandManager(ProjectConfig* deviceConfig) + : deviceConfig(deviceConfig) {} +const CommandType CommandManager::getCommandType(JsonVariant& command) { + if (!command.containsKey("command")) + return CommandType::None; -const CommandType CommandManager::getCommandType(JsonVariant &command){ - if (!command.containsKey("command")) - return CommandType::None; + if (auto search = commandMap.find(command["command"]); + search != commandMap.end()) + return search->second; - if (auto search = commandMap.find(command["command"]); search != commandMap.end()) - return search->second; - - return CommandType::None; + return CommandType::None; } -bool CommandManager::hasDataField(JsonVariant &command) { - return command.containsKey("data"); +bool CommandManager::hasDataField(JsonVariant& command) { + return command.containsKey("data"); } -void CommandManager::handleCommands(CommandsPayload commandsPayload){ - if (!commandsPayload.data.containsKey("commands")){ - log_e("Json data sent not supported, lacks commands field"); - return; - } +void CommandManager::handleCommands(CommandsPayload commandsPayload) { + if (!commandsPayload.data.containsKey("commands")) { + log_e("Json data sent not supported, lacks commands field"); + return; + } - for(JsonVariant commandData : commandsPayload.data["commands"].as()) { - this->handleCommand(commandData); - } + for (JsonVariant commandData : + commandsPayload.data["commands"].as()) { + this->handleCommand(commandData); + } - this->deviceConfig->save(); -} + this->deviceConfig->save(); +} void CommandManager::handleCommand(JsonVariant command) { - auto command_type = this->getCommandType(command); - - switch(command_type) - { - case CommandType::SET_WIFI: { - if (!this->hasDataField(command)) - // malformed command, lacked data field - break; - - if(!command["data"].containsKey("ssid") || !command["data"].containsKey("password")) - break; - - std::string customNetworkName = "main"; - if (command["data"].containsKey("network_name")) - customNetworkName = command["data"]["network_name"].as(); - - this->deviceConfig->setWifiConfig( - customNetworkName, - command["data"]["ssid"], - command["data"]["password"], - 0, // channel, should this be zero? - 0, // power, should this be zero? - false, - false - ); - - break; - } - case CommandType::SET_MDNS: { - if (!this->hasDataField(command)) - break; - - if(!command["data"].containsKey("hostname") || !strlen(command["data"]["hostname"])) - break; - - this->deviceConfig->setMDNSConfig( - command["data"]["hostname"], - "openiristracker", - false - ); - - break; - } - case CommandType::PING: { - Serial.println("PONG \n\r"); - break; - } - default: - break; + auto command_type = this->getCommandType(command); + + switch (command_type) { + case CommandType::SET_WIFI: { + if (!this->hasDataField(command)) + // malformed command, lacked data field + break; + + if (!command["data"].containsKey("ssid") || + !command["data"].containsKey("password")) + break; + + std::string customNetworkName = "main"; + if (command["data"].containsKey("network_name")) + customNetworkName = command["data"]["network_name"].as(); + + this->deviceConfig->setWifiConfig(customNetworkName, + command["data"]["ssid"], + command["data"]["password"], + 0, // channel, should this be zero? + 0, // power, should this be zero? + false, false); + + break; + } + case CommandType::SET_MDNS: { + if (!this->hasDataField(command)) + break; + + if (!command["data"].containsKey("hostname") || + !strlen(command["data"]["hostname"])) + break; + + this->deviceConfig->setMDNSConfig(command["data"]["hostname"], + "openiristracker", false); + + break; + } + case CommandType::PING: { + Serial.println("PONG \n\r"); + break; } + default: + break; + } } \ No newline at end of file diff --git a/ESP/lib/src/data/CommandManager/CommandManager.hpp b/ESP/lib/src/data/CommandManager/CommandManager.hpp index 1631e3c8..55440f47 100644 --- a/ESP/lib/src/data/CommandManager/CommandManager.hpp +++ b/ESP/lib/src/data/CommandManager/CommandManager.hpp @@ -6,35 +6,33 @@ #include "data/config/project_config.hpp" enum CommandType { - None, - PING, - SET_WIFI, - SET_MDNS, + None, + PING, + SET_WIFI, + SET_MDNS, }; - -struct CommandsPayload { - JsonDocument data; +struct CommandsPayload { + JsonDocument data; }; -class CommandManager{ - -private: -const std::unordered_map commandMap = { - {"ping", CommandType::PING}, - {"set_wifi", CommandType::SET_WIFI}, - {"set_mdns", CommandType::SET_MDNS}, -}; +class CommandManager { + private: + const std::unordered_map commandMap = { + {"ping", CommandType::PING}, + {"set_wifi", CommandType::SET_WIFI}, + {"set_mdns", CommandType::SET_MDNS}, + }; -ProjectConfig* deviceConfig; + ProjectConfig* deviceConfig; -bool hasDataField(JsonVariant &command); -void handleCommand(JsonVariant command); -const CommandType getCommandType(JsonVariant &command); + bool hasDataField(JsonVariant& command); + void handleCommand(JsonVariant command); + const CommandType getCommandType(JsonVariant& command); -public: - CommandManager(ProjectConfig *deviceConfig); - void handleCommands(CommandsPayload commandsPayload); + public: + CommandManager(ProjectConfig* deviceConfig); + void handleCommands(CommandsPayload commandsPayload); }; #endif \ No newline at end of file diff --git a/ESP/lib/src/data/QueryManager/QueryManager.cpp b/ESP/lib/src/data/QueryManager/QueryManager.cpp deleted file mode 100644 index 4f5c77cb..00000000 --- a/ESP/lib/src/data/QueryManager/QueryManager.cpp +++ /dev/null @@ -1,8 +0,0 @@ -#include "QueryManager.hpp" - -std::string QueryManager::formatMessage(QueryPayload* messagePayload) { - return Helpers::format_string( - "{\"action\": \"%s\", \"status\": %d, \"additional_info\": \"%s\"}", - queryActionMap.at(messagePayload->action).c_str(), messagePayload->status, - messagePayload->additionalInfo.c_str()); -} \ No newline at end of file diff --git a/ESP/lib/src/data/QueryManager/QueryManager.hpp b/ESP/lib/src/data/QueryManager/QueryManager.hpp deleted file mode 100644 index 9678ca63..00000000 --- a/ESP/lib/src/data/QueryManager/QueryManager.hpp +++ /dev/null @@ -1,46 +0,0 @@ -#pragma once -#ifndef QUERY_MANAGER_HPP -#define QUERY_MANAGER_HPP -#include -#include -#include "data/utilities/helpers.hpp" - -enum QueryAction { - READY_TO_RECEIVE, - PARSE_COMMANDS, - CONNECT_TO_WIFI, -}; - -enum QueryStatus { - NONE, - SUCCESS, - ERROR, -}; - -struct QueryPayload { - QueryAction action; - QueryStatus status; - std::string additionalInfo; - - QueryPayload(QueryAction action, - QueryStatus status, - std::string additionalInfo) { - this->action = action; - this->status = status; - this->additionalInfo = additionalInfo; - } -}; - -class QueryManager { - private: - const std::unordered_map queryActionMap = { - {QueryAction::READY_TO_RECEIVE, "ready_to_receive"}, - {QueryAction::PARSE_COMMANDS, "parse_commands"}, - {QueryAction::CONNECT_TO_WIFI, "connect_to_wifi"}, - }; - - public: - std::string formatMessage(QueryPayload* messagePayload); -}; - -#endif \ No newline at end of file diff --git a/ESP/lib/src/io/Serial/SerialManager.cpp b/ESP/lib/src/io/Serial/SerialManager.cpp index 603c4788..c9f7c527 100644 --- a/ESP/lib/src/io/Serial/SerialManager.cpp +++ b/ESP/lib/src/io/Serial/SerialManager.cpp @@ -59,13 +59,19 @@ void SerialManager::init() { Serial.flush(); } - QueryPayload* setupFinishedMessage = - new QueryPayload(QueryAction::READY_TO_RECEIVE, QueryStatus::NONE, ""); - this->snedQuery(setupFinishedMessage); + this->sendQuery(QueryAction::READY_TO_RECEIVE, QueryStatus::NONE, ""); } -void SerialManager::snedQuery(QueryPayload* messagePayload) { - Serial.println(this->queryManager->formatMessage(messagePayload).c_str()); +void SerialManager::(QueryAction action, + QueryStatus status, + std::string additional_info) { + JsonDocument doc; + doc["action"] = queryActionMap.at(action); + doc["status"] = status; + doc["additional_info"] = additional_info; + + doc.shrinkToFit(); // optional + serializeJson(doc, Serial); } void SerialManager::run() { diff --git a/ESP/lib/src/io/Serial/SerialManager.hpp b/ESP/lib/src/io/Serial/SerialManager.hpp index aa851a4a..34b15840 100644 --- a/ESP/lib/src/io/Serial/SerialManager.hpp +++ b/ESP/lib/src/io/Serial/SerialManager.hpp @@ -13,11 +13,28 @@ const char* const ETVR_HEADER = "\xff\xa0"; const char* const ETVR_HEADER_FRAME = "\xff\xa1"; +enum QueryAction { + READY_TO_RECEIVE, + PARSE_COMMANDS, + CONNECT_TO_WIFI, +}; + +enum QueryStatus { + NONE, + SUCCESS, + ERROR, +}; + +const std::unordered_map queryActionMap = { + {QueryAction::READY_TO_RECEIVE, "ready_to_receive"}, + {QueryAction::PARSE_COMMANDS, "parse_commands"}, + {QueryAction::CONNECT_TO_WIFI, "connect_to_wifi"}, +}; + class SerialManager { private: esp_err_t err = ESP_OK; CommandManager* commandManager; - QueryManager* queryManager; #ifdef ETVR_EYE_TRACKER_USB_API int64_t last_frame = 0; @@ -28,7 +45,9 @@ class SerialManager { public: SerialManager(CommandManager* commandManager); - void snedQuery(QueryPayload* messagePayload); + void sendQuery(QueryAction action, + QueryStatus status, + std::string additional_info); void init(); void run(); }; From 64ebaa31e301c93e34fda38e778c56a46ee5e49d Mon Sep 17 00:00:00 2001 From: Lorow Date: Sun, 2 Jun 2024 19:19:11 +0200 Subject: [PATCH 07/20] remove old include --- ESP/lib/src/io/Serial/SerialManager.hpp | 1 - 1 file changed, 1 deletion(-) diff --git a/ESP/lib/src/io/Serial/SerialManager.hpp b/ESP/lib/src/io/Serial/SerialManager.hpp index 34b15840..9e1eaf8e 100644 --- a/ESP/lib/src/io/Serial/SerialManager.hpp +++ b/ESP/lib/src/io/Serial/SerialManager.hpp @@ -7,7 +7,6 @@ #include #include #include "data/CommandManager/CommandManager.hpp" -#include "data/QueryManager/QueryManager.hpp" #include "data/config/project_config.hpp" const char* const ETVR_HEADER = "\xff\xa0"; From 01e5e280ad26d2709231fe6aa2a96d1991cbf360 Mon Sep 17 00:00:00 2001 From: Lorow Date: Mon, 10 Jun 2024 19:08:09 +0200 Subject: [PATCH 08/20] fix: serial output for esp32cams and other boards not supporting higher frequency baud rate * fix: serial output for esp32cams and other boards not supporting higher frequency baud rate * Switch higher frequency to be opt-in --- ESP/ini/boards.ini | 12 ++++++++++++ ESP/lib/src/io/Serial/SerialManager.cpp | 2 ++ 2 files changed, 14 insertions(+) diff --git a/ESP/ini/boards.ini b/ESP/ini/boards.ini index 9d3e99f2..96c4d7d3 100644 --- a/ESP/ini/boards.ini +++ b/ESP/ini/boards.ini @@ -103,6 +103,7 @@ build_type = debug build_flags = ${env.build_flags} -DCORE_DEBUG_LEVEL=4 -DDEBUG_MODE=1 + -DSERIAL_MANAGER_USE_HIGHER_FREQUENCY ${pinoutsESPS3WROVER.build_flags} upload_flags = --no-stub @@ -113,6 +114,7 @@ build_type = release build_flags = ${env.build_flags} -DDEBUG_MODE=0 -DCORE_DEBUG_LEVEL=1 + -DSERIAL_MANAGER_USE_HIGHER_FREQUENCY ${pinoutsESPS3WROVER.build_flags} upload_flags = --no-stub @@ -125,6 +127,7 @@ build_flags = ${env.build_flags} -DDEBUG_MODE=1 -DARDUINO_USB_CDC_ON_BOOT=1 -DETVR_EYE_TRACKER_USB_API + -DSERIAL_MANAGER_USE_HIGHER_FREQUENCY ${pinoutsESPS3WROVER.build_flags} [env:wrooms3QIOUSB_release] @@ -136,6 +139,7 @@ build_flags = ${env.build_flags} -DCORE_DEBUG_LEVEL=1 -DARDUINO_USB_CDC_ON_BOOT=1 -DETVR_EYE_TRACKER_USB_API + -DSERIAL_MANAGER_USE_HIGHER_FREQUENCY ${pinoutsESPS3WROVER.build_flags} [env:wrooms3] @@ -144,6 +148,7 @@ build_type = debug build_flags = ${env.build_flags} -DCORE_DEBUG_LEVEL=4 -DDEBUG_MODE=1 + -DSERIAL_MANAGER_USE_HIGHER_FREQUENCY ${pinoutsESPS3WROOM.build_flags} [env:wrooms3_release] @@ -152,6 +157,7 @@ build_type = release build_flags = ${env.build_flags} -DDEBUG_MODE=0 -DCORE_DEBUG_LEVEL=1 + -DSERIAL_MANAGER_USE_HIGHER_FREQUENCY ${pinoutsESPS3WROOM.build_flags} [env:wrooms3USB] @@ -161,6 +167,7 @@ build_flags = ${env.build_flags} -DCORE_DEBUG_LEVEL=4 -DDEBUG_MODE=1 -DETVR_EYE_TRACKER_USB_API + -DSERIAL_MANAGER_USE_HIGHER_FREQUENCY ${pinoutsESPS3WROOM.build_flags} upload_flags = --no-stub @@ -171,6 +178,7 @@ build_flags = ${env.build_flags} -DDEBUG_MODE=0 -DCORE_DEBUG_LEVEL=1 -DETVR_EYE_TRACKER_USB_API + -DSERIAL_MANAGER_USE_HIGHER_FREQUENCY ${pinoutsESPS3WROOM.build_flags} upload_flags = --no-stub @@ -182,6 +190,7 @@ build_flags = ${env.build_flags} -DDEBUG_MODE=1 #-DARDUINO_USB_MODE=1 #-DARDUINO_USB_CDC_ON_BOOT=1 + -DSERIAL_MANAGER_USE_HIGHER_FREQUENCY ${pinoutsESPS3XIAOSENSE.build_flags} [env:xiaosenses3_USB] @@ -191,6 +200,7 @@ build_flags = ${env.build_flags} -DCORE_DEBUG_LEVEL=4 -DDEBUG_MODE=1 -DETVR_EYE_TRACKER_USB_API + -DSERIAL_MANAGER_USE_HIGHER_FREQUENCY ${pinoutsESPS3XIAOSENSE.build_flags} upload_flags = --no-stub @@ -200,6 +210,7 @@ build_type = release build_flags = ${env.build_flags} -DDEBUG_MODE=0 -DCORE_DEBUG_LEVEL=1 + -DSERIAL_MANAGER_USE_HIGHER_FREQUENCY ${pinoutsESPS3XIAOSENSE.build_flags} [env:xiaosenses3_USB_release] @@ -209,5 +220,6 @@ build_flags = ${env.build_flags} -DDEBUG_MODE=0 -DCORE_DEBUG_LEVEL=1 -DETVR_EYE_TRACKER_USB_API + -DSERIAL_MANAGER_USE_HIGHER_FREQUENCY ${pinoutsESPS3XIAOSENSE.build_flags} upload_flags = --no-stub diff --git a/ESP/lib/src/io/Serial/SerialManager.cpp b/ESP/lib/src/io/Serial/SerialManager.cpp index c9f7c527..6d47c737 100644 --- a/ESP/lib/src/io/Serial/SerialManager.cpp +++ b/ESP/lib/src/io/Serial/SerialManager.cpp @@ -54,7 +54,9 @@ void SerialManager::send_frame() { #endif void SerialManager::init() { + #ifndef SERIAL_MANAGER_USE_HIGHER_FREQUENCY Serial.begin(3000000); + #endif if (SERIAL_FLUSH_ENABLED) { Serial.flush(); } From 14d2cb0858cd65452f2ce1cee9a3a1f68d8f7f51 Mon Sep 17 00:00:00 2001 From: Lorow Date: Mon, 10 Jun 2024 19:08:47 +0200 Subject: [PATCH 09/20] feat: Add support for ov5640 cameras --- ESP/lib/src/io/camera/cameraHandler.cpp | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/ESP/lib/src/io/camera/cameraHandler.cpp b/ESP/lib/src/io/camera/cameraHandler.cpp index 9277cebb..10f2d372 100644 --- a/ESP/lib/src/io/camera/cameraHandler.cpp +++ b/ESP/lib/src/io/camera/cameraHandler.cpp @@ -35,9 +35,20 @@ void CameraHandler::setupCameraPinout() { pinMode(14, INPUT_PULLUP); log_i("CAM_BOARD"); #endif -#if ETVR_EYE_TRACKER_USB_API - /* ESP32-S3 is capable of using higher freqs */ - xclk_freq_hz = 24000000; +#ifdef ETVR_EYE_TRACKER_USB_API + auto camera_id = camera_sensor->id.PID; + + switch (camera_id) + { + // Thanks to lick_it, we discovered that OV5640 likes to overheat when + // running at higher than usual xclk frequencies. + // Hence why we're limit the faster ones for OV2640 + case OV2640_PID: + xclk_freq_hz = 24000000; + break; + default: + break; + } #endif config.ledc_channel = LEDC_CHANNEL_0; @@ -83,7 +94,7 @@ void CameraHandler::setupBasicResolution() { void CameraHandler::setupCameraSensor() { log_d("[Camera]: Setting up camera sensor"); - + camera_sensor = esp_camera_sensor_get(); // fixes corrupted jpegs, https://github.com/espressif/esp32-camera/issues/203 // documentation https://www.uctronics.com/download/cam_module/OV2640DS.pdf From 049b16078ec5c07042652f2de3545ea6b69de6a9 Mon Sep 17 00:00:00 2001 From: Lorow Date: Mon, 10 Jun 2024 19:14:20 +0200 Subject: [PATCH 10/20] feat: fix usb streaming on wroom boards, add support for babble custom board * feat: PoC add support for project babble board * Add support for bable wireless, adjust flash_mode and memory type to get PSRAM working * Add DARDUINO_USB_MODE=1 and DARDUINO_USB_CDC_ON_BOOT=1 to Babble and wroom boards to fix USB streaming discovered and fixed entirely by Rames the Generic --- ESP/ini/boards.ini | 33 +++++++++++++++++++++++++++++++++ ESP/ini/pinouts.ini | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+) diff --git a/ESP/ini/boards.ini b/ESP/ini/boards.ini index 96c4d7d3..8115cbf8 100644 --- a/ESP/ini/boards.ini +++ b/ESP/ini/boards.ini @@ -125,6 +125,7 @@ build_type = debug build_flags = ${env.build_flags} -DCORE_DEBUG_LEVEL=4 -DDEBUG_MODE=1 + -DARDUINO_USB_MODE=1 -DARDUINO_USB_CDC_ON_BOOT=1 -DETVR_EYE_TRACKER_USB_API -DSERIAL_MANAGER_USE_HIGHER_FREQUENCY @@ -137,6 +138,7 @@ build_type = release build_flags = ${env.build_flags} -DDEBUG_MODE=0 -DCORE_DEBUG_LEVEL=1 + -DARDUINO_USB_MODE=1 -DARDUINO_USB_CDC_ON_BOOT=1 -DETVR_EYE_TRACKER_USB_API -DSERIAL_MANAGER_USE_HIGHER_FREQUENCY @@ -166,6 +168,8 @@ build_type = debug build_flags = ${env.build_flags} -DCORE_DEBUG_LEVEL=4 -DDEBUG_MODE=1 + -DARDUINO_USB_MODE=1 + -DARDUINO_USB_CDC_ON_BOOT=1 -DETVR_EYE_TRACKER_USB_API -DSERIAL_MANAGER_USE_HIGHER_FREQUENCY ${pinoutsESPS3WROOM.build_flags} @@ -177,11 +181,40 @@ build_type = release build_flags = ${env.build_flags} -DDEBUG_MODE=0 -DCORE_DEBUG_LEVEL=1 + -DARDUINO_USB_MODE=1 + -DARDUINO_USB_CDC_ON_BOOT=1 -DETVR_EYE_TRACKER_USB_API -DSERIAL_MANAGER_USE_HIGHER_FREQUENCY ${pinoutsESPS3WROOM.build_flags} upload_flags = --no-stub +[env:Babble-wrooms-s3] +board = esp32-s3-devkitc-1 +board_build.flash_mode = qio ; qio_qspi +board_build.arduino.memory_type = qio_qspi +build_type = debug +build_flags = ${env.build_flags} + -DCORE_DEBUG_LEVEL=4 + -DDEBUG_MODE=1 + -DSERIAL_MANAGER_USE_HIGHER_FREQUENCY + ${pinoutSWROOMBABBLES3.build_flags} +upload_flags = --no-stub + +[env:Babble_USB-wrooms-s3] +board = esp32-s3-devkitc-1 +board_build.flash_mode = qio ; qio_qspi +board_build.arduino.memory_type = qio_qspi +build_type = debug +build_flags = ${env.build_flags} + -DCORE_DEBUG_LEVEL=4 + -DDEBUG_MODE=1 + -DETVR_EYE_TRACKER_USB_API + -DARDUINO_USB_MODE=1 + -DARDUINO_USB_CDC_ON_BOOT=1 + -DSERIAL_MANAGER_USE_HIGHER_FREQUENCY + ${pinoutSWROOMBABBLES3.build_flags} +upload_flags = --no-stub + [env:xiaosenses3] board = seeed_xiao_esp32s3 build_type = debug diff --git a/ESP/ini/pinouts.ini b/ESP/ini/pinouts.ini index ab01eaf6..88267a1f 100644 --- a/ESP/ini/pinouts.ini +++ b/ESP/ini/pinouts.ini @@ -259,6 +259,42 @@ build_flags = -DHREF_GPIO_NUM=${pinoutsESPS3WROOM.HREF_GPIO_NUM} -DPCLK_GPIO_NUM=${pinoutsESPS3WROOM.PCLK_GPIO_NUM} +[pinoutSWROOMBABBLES3] +pwdn_gpio_num = -1 +reset_gpio_num = -1 +xclk_gpio_num = 4 +siod_gpio_num = 14 +sioc_gpio_num = 13 +y9_gpio_num = 39 +y8_gpio_num = 5 +y7_gpio_num = 6 +y6_gpio_num = 15 +y5_gpio_num = 17 +y4_gpio_num = 8 +y3_gpio_num = 18 +y2_gpio_num = 16 +vsync_gpio_num = 9 +href_gpio_num = 10 +pclk_gpio_num = 7 +build_flags = + '-DCAMERA_MODULE_NAME="SWROOM_BABBLE_S3"' + -DPWDN_GPIO_NUM=${pinoutSWROOMBABBLES3.PWDN_GPIO_NUM} + -DRESET_GPIO_NUM=${pinoutSWROOMBABBLES3.RESET_GPIO_NUM} + -DXCLK_GPIO_NUM=${pinoutSWROOMBABBLES3.XCLK_GPIO_NUM} + -DSIOD_GPIO_NUM=${pinoutSWROOMBABBLES3.SIOD_GPIO_NUM} + -DSIOC_GPIO_NUM=${pinoutSWROOMBABBLES3.SIOC_GPIO_NUM} + -DY9_GPIO_NUM=${pinoutSWROOMBABBLES3.Y9_GPIO_NUM} + -DY8_GPIO_NUM=${pinoutSWROOMBABBLES3.Y8_GPIO_NUM} + -DY7_GPIO_NUM=${pinoutSWROOMBABBLES3.Y7_GPIO_NUM} + -DY6_GPIO_NUM=${pinoutSWROOMBABBLES3.Y6_GPIO_NUM} + -DY5_GPIO_NUM=${pinoutSWROOMBABBLES3.Y5_GPIO_NUM} + -DY4_GPIO_NUM=${pinoutSWROOMBABBLES3.Y4_GPIO_NUM} + -DY3_GPIO_NUM=${pinoutSWROOMBABBLES3.Y3_GPIO_NUM} + -DY2_GPIO_NUM=${pinoutSWROOMBABBLES3.Y2_GPIO_NUM} + -DVSYNC_GPIO_NUM=${pinoutSWROOMBABBLES3.VSYNC_GPIO_NUM} + -DHREF_GPIO_NUM=${pinoutSWROOMBABBLES3.HREF_GPIO_NUM} + -DPCLK_GPIO_NUM=${pinoutSWROOMBABBLES3.PCLK_GPIO_NUM} + [pinoutsESPS3XIAOSENSE] pwdn_gpio_num = -1 reset_gpio_num = -1 From d7446686d3959fb242d2ed35df56ef8b0a3ad1a8 Mon Sep 17 00:00:00 2001 From: Lorow Date: Mon, 10 Jun 2024 19:26:45 +0200 Subject: [PATCH 11/20] cleanup PoC --- ESP/lib/src/io/Serial/SerialManager.cpp | 22 +++------------------- 1 file changed, 3 insertions(+), 19 deletions(-) diff --git a/ESP/lib/src/io/Serial/SerialManager.cpp b/ESP/lib/src/io/Serial/SerialManager.cpp index 6d47c737..b065fd3f 100644 --- a/ESP/lib/src/io/Serial/SerialManager.cpp +++ b/ESP/lib/src/io/Serial/SerialManager.cpp @@ -1,9 +1,7 @@ #include "SerialManager.hpp" SerialManager::SerialManager(CommandManager* commandManager) - : commandManager(commandManager) { - this->queryManager = new QueryManager(); -} + : commandManager(commandManager) {} #ifdef ETVR_EYE_TRACKER_USB_API void SerialManager::send_frame() { @@ -54,26 +52,12 @@ void SerialManager::send_frame() { #endif void SerialManager::init() { - #ifndef SERIAL_MANAGER_USE_HIGHER_FREQUENCY +#ifndef SERIAL_MANAGER_USE_HIGHER_FREQUENCY Serial.begin(3000000); - #endif +#endif if (SERIAL_FLUSH_ENABLED) { Serial.flush(); } - - this->sendQuery(QueryAction::READY_TO_RECEIVE, QueryStatus::NONE, ""); -} - -void SerialManager::(QueryAction action, - QueryStatus status, - std::string additional_info) { - JsonDocument doc; - doc["action"] = queryActionMap.at(action); - doc["status"] = status; - doc["additional_info"] = additional_info; - - doc.shrinkToFit(); // optional - serializeJson(doc, Serial); } void SerialManager::run() { From 1733a1ed38a313d66173a7ce88affc146d2d7ba6 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 10 Jun 2024 17:56:13 +0000 Subject: [PATCH 12/20] chore(minor): 2.5.0-beta.1 [skip ci] MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## [2.5.0-beta.1](https://github.com/EyeTrackVR/OpenIris/compare/v2.4.0...v2.5.0-beta.1) (2024-06-10) ### 🍕 Features * Add support for ov5640 cameras ([14d2cb0](https://github.com/EyeTrackVR/OpenIris/commit/14d2cb0858cd65452f2ce1cee9a3a1f68d8f7f51)) * fix usb streaming on wroom boards, add support for babble custom board ([049b160](https://github.com/EyeTrackVR/OpenIris/commit/049b16078ec5c07042652f2de3545ea6b69de6a9)) * Move logging in serial streaming so that we at least attempt to get new frame ([53a3d4b](https://github.com/EyeTrackVR/OpenIris/commit/53a3d4bcd603e2fd07546621628e69de88e4139a)) * Refactor commands and serial manager to support updated commands payload ([811a9f8](https://github.com/EyeTrackVR/OpenIris/commit/811a9f898a3f1bdb1e20ffd6f0d6e77a4533f52c)) ### 🐛 Bug Fixes * serial output for esp32cams and other boards not supporting higher frequency baud rate ([01e5e28](https://github.com/EyeTrackVR/OpenIris/commit/01e5e280ad26d2709231fe6aa2a96d1991cbf360)) --- CHANGELOG.md | 15 +++++++++++++++ ESP/ini/dev_config.ini | 2 +- ESP/lib/library.json | 2 +- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 25f2c5ef..e8b62197 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,21 @@ [![semantic versioning](https://img.shields.io/badge/semantic%20versioning-2.0.0-green.svg)](https://semver.org) > All notable changes to this project will be documented in this file +## [2.5.0-beta.1](https://github.com/EyeTrackVR/OpenIris/compare/v2.4.0...v2.5.0-beta.1) (2024-06-10) + + +### 🍕 Features + +* Add support for ov5640 cameras ([14d2cb0](https://github.com/EyeTrackVR/OpenIris/commit/14d2cb0858cd65452f2ce1cee9a3a1f68d8f7f51)) +* fix usb streaming on wroom boards, add support for babble custom board ([049b160](https://github.com/EyeTrackVR/OpenIris/commit/049b16078ec5c07042652f2de3545ea6b69de6a9)) +* Move logging in serial streaming so that we at least attempt to get new frame ([53a3d4b](https://github.com/EyeTrackVR/OpenIris/commit/53a3d4bcd603e2fd07546621628e69de88e4139a)) +* Refactor commands and serial manager to support updated commands payload ([811a9f8](https://github.com/EyeTrackVR/OpenIris/commit/811a9f898a3f1bdb1e20ffd6f0d6e77a4533f52c)) + + +### 🐛 Bug Fixes + +* serial output for esp32cams and other boards not supporting higher frequency baud rate ([01e5e28](https://github.com/EyeTrackVR/OpenIris/commit/01e5e280ad26d2709231fe6aa2a96d1991cbf360)) + ## [2.4.0](https://github.com/EyeTrackVR/OpenIris/compare/v2.3.0...v2.4.0) (2024-03-11) diff --git a/ESP/ini/dev_config.ini b/ESP/ini/dev_config.ini index c2f4c801..aa542dad 100644 --- a/ESP/ini/dev_config.ini +++ b/ESP/ini/dev_config.ini @@ -5,7 +5,7 @@ platform = https://github.com/platformio/platform-espressif32.git framework = arduino monitor_speed = 115200 -custom_firmware_version = 2.4.0 +custom_firmware_version = 2.5.0 monitor_rts = 0 monitor_dtr = 0 monitor_filters = diff --git a/ESP/lib/library.json b/ESP/lib/library.json index e14a2e0d..8067761e 100644 --- a/ESP/lib/library.json +++ b/ESP/lib/library.json @@ -20,7 +20,7 @@ "include": "/lib/src" }, "dependencies": {}, - "version": "2.4.0", + "version": "2.5.0", "frameworks": "arduino", "platforms": "espressif32" } From 4894c2205864d5a7d52e37c81b14ff7dc46517d4 Mon Sep 17 00:00:00 2001 From: Lorow Date: Tue, 11 Jun 2024 23:22:40 +0200 Subject: [PATCH 13/20] feat: Fix ov5640 support implementation after beta cleanup --- ESP/lib/src/io/camera/cameraHandler.cpp | 37 ++++++++++++++----------- ESP/lib/src/io/camera/cameraHandler.hpp | 8 ++++-- 2 files changed, 27 insertions(+), 18 deletions(-) diff --git a/ESP/lib/src/io/camera/cameraHandler.cpp b/ESP/lib/src/io/camera/cameraHandler.cpp index 10f2d372..7b51bdb7 100644 --- a/ESP/lib/src/io/camera/cameraHandler.cpp +++ b/ESP/lib/src/io/camera/cameraHandler.cpp @@ -16,7 +16,7 @@ void CameraHandler::setupCameraPinout() { // 16500000 optimal freq on ESP32-CAM (default) // 20000000 max freq on ESP32-CAM // 24000000 optimal freq on ESP32-S3 - int xclk_freq_hz = 16500000; + int xclk_freq_hz = DEFAULT_XCLK_FREQ_HZ; #if CONFIG_CAMERA_MODULE_ESP_EYE /* IO13, IO14 is designed for JTAG by default, @@ -35,20 +35,8 @@ void CameraHandler::setupCameraPinout() { pinMode(14, INPUT_PULLUP); log_i("CAM_BOARD"); #endif -#ifdef ETVR_EYE_TRACKER_USB_API - auto camera_id = camera_sensor->id.PID; - - switch (camera_id) - { - // Thanks to lick_it, we discovered that OV5640 likes to overheat when - // running at higher than usual xclk frequencies. - // Hence why we're limit the faster ones for OV2640 - case OV2640_PID: - xclk_freq_hz = 24000000; - break; - default: - break; - } +#if ETVR_EYE_TRACKER_USB_API + xclk_freq_hz = USB_DEFAULT_XCLK_FREQ_HZ; #endif config.ledc_channel = LEDC_CHANNEL_0; @@ -94,7 +82,7 @@ void CameraHandler::setupBasicResolution() { void CameraHandler::setupCameraSensor() { log_d("[Camera]: Setting up camera sensor"); - + camera_sensor = esp_camera_sensor_get(); // fixes corrupted jpegs, https://github.com/espressif/esp32-camera/issues/203 // documentation https://www.uctronics.com/download/cam_module/OV2640DS.pdf @@ -175,6 +163,23 @@ bool CameraHandler::setupCamera() { return false; } +#if ETVR_EYE_TRACKER_USB_API + auto temp_sensor = esp_camera_sensor_get(); + auto camera_id = temp_sensor->id.PID; + switch (camera_id) { + // Thanks to lick_it, we discovered that OV5640 likes to overheat when + // running at higher than usual xclk frequencies. + // Hence why we're limit the faster ones for OV2640 + case OV5640_PID: + config.xclk_freq_hz = OV5640_XCLK_FREQ_HZ; + esp_camera_deinit(); + esp_camera_init(&config); + break; + default: + break; + } +#endif + this->setupCameraSensor(); return true; } diff --git a/ESP/lib/src/io/camera/cameraHandler.hpp b/ESP/lib/src/io/camera/cameraHandler.hpp index 93250fb6..43ca7331 100644 --- a/ESP/lib/src/io/camera/cameraHandler.hpp +++ b/ESP/lib/src/io/camera/cameraHandler.hpp @@ -1,10 +1,14 @@ #pragma once #include #include +#include "data/StateManager/StateManager.hpp" +#include "data/config/project_config.hpp" #include "data/utilities/Observer.hpp" #include "data/utilities/network_utilities.hpp" -#include "data/config/project_config.hpp" -#include "data/StateManager/StateManager.hpp" + +#define DEFAULT_XCLK_FREQ_HZ 16500000 +#define USB_DEFAULT_XCLK_FREQ_HZ 24000000 +#define OV5640_XCLK_FREQ_HZ DEFAULT_XCLK_FREQ_HZ class CameraHandler : public IObserver { private: From e998e020f3f747b7afccf8e39aeaebf94caf5a7c Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Tue, 11 Jun 2024 21:31:07 +0000 Subject: [PATCH 14/20] chore(minor): 2.5.0-beta.1 [skip ci] MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## [2.5.0-beta.1](https://github.com/EyeTrackVR/OpenIris/compare/v2.4.0...v2.5.0-beta.1) (2024-06-11) ### 🍕 Features * Add support for ov5640 cameras ([14d2cb0](https://github.com/EyeTrackVR/OpenIris/commit/14d2cb0858cd65452f2ce1cee9a3a1f68d8f7f51)) * Fix ov5640 support implementation after beta cleanup ([4894c22](https://github.com/EyeTrackVR/OpenIris/commit/4894c2205864d5a7d52e37c81b14ff7dc46517d4)) * fix usb streaming on wroom boards, add support for babble custom board ([049b160](https://github.com/EyeTrackVR/OpenIris/commit/049b16078ec5c07042652f2de3545ea6b69de6a9)) * Move logging in serial streaming so that we at least attempt to get new frame ([53a3d4b](https://github.com/EyeTrackVR/OpenIris/commit/53a3d4bcd603e2fd07546621628e69de88e4139a)) * Refactor commands and serial manager to support updated commands payload ([811a9f8](https://github.com/EyeTrackVR/OpenIris/commit/811a9f898a3f1bdb1e20ffd6f0d6e77a4533f52c)) ### 🐛 Bug Fixes * serial output for esp32cams and other boards not supporting higher frequency baud rate ([01e5e28](https://github.com/EyeTrackVR/OpenIris/commit/01e5e280ad26d2709231fe6aa2a96d1991cbf360)) --- CHANGELOG.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e8b62197..61f19a11 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,22 @@ [![semantic versioning](https://img.shields.io/badge/semantic%20versioning-2.0.0-green.svg)](https://semver.org) > All notable changes to this project will be documented in this file +## [2.5.0-beta.1](https://github.com/EyeTrackVR/OpenIris/compare/v2.4.0...v2.5.0-beta.1) (2024-06-11) + + +### 🍕 Features + +* Add support for ov5640 cameras ([14d2cb0](https://github.com/EyeTrackVR/OpenIris/commit/14d2cb0858cd65452f2ce1cee9a3a1f68d8f7f51)) +* Fix ov5640 support implementation after beta cleanup ([4894c22](https://github.com/EyeTrackVR/OpenIris/commit/4894c2205864d5a7d52e37c81b14ff7dc46517d4)) +* fix usb streaming on wroom boards, add support for babble custom board ([049b160](https://github.com/EyeTrackVR/OpenIris/commit/049b16078ec5c07042652f2de3545ea6b69de6a9)) +* Move logging in serial streaming so that we at least attempt to get new frame ([53a3d4b](https://github.com/EyeTrackVR/OpenIris/commit/53a3d4bcd603e2fd07546621628e69de88e4139a)) +* Refactor commands and serial manager to support updated commands payload ([811a9f8](https://github.com/EyeTrackVR/OpenIris/commit/811a9f898a3f1bdb1e20ffd6f0d6e77a4533f52c)) + + +### 🐛 Bug Fixes + +* serial output for esp32cams and other boards not supporting higher frequency baud rate ([01e5e28](https://github.com/EyeTrackVR/OpenIris/commit/01e5e280ad26d2709231fe6aa2a96d1991cbf360)) + ## [2.5.0-beta.1](https://github.com/EyeTrackVR/OpenIris/compare/v2.4.0...v2.5.0-beta.1) (2024-06-10) From 5a83210ae0ddb146dba1a9dc6d06235fe3986926 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Fri, 21 Jun 2024 17:47:58 +0000 Subject: [PATCH 15/20] chore(minor): 2.5.0-beta.1 [skip ci] MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## [2.5.0-beta.1](https://github.com/EyeTrackVR/OpenIris/compare/v2.4.0...v2.5.0-beta.1) (2024-06-21) ### 🍕 Features * Add support for ov5640 cameras ([14d2cb0](https://github.com/EyeTrackVR/OpenIris/commit/14d2cb0858cd65452f2ce1cee9a3a1f68d8f7f51)) * Fix ov5640 support implementation after beta cleanup ([4894c22](https://github.com/EyeTrackVR/OpenIris/commit/4894c2205864d5a7d52e37c81b14ff7dc46517d4)) * fix usb streaming on wroom boards, add support for babble custom board ([049b160](https://github.com/EyeTrackVR/OpenIris/commit/049b16078ec5c07042652f2de3545ea6b69de6a9)) * Move logging in serial streaming so that we at least attempt to get new frame ([53a3d4b](https://github.com/EyeTrackVR/OpenIris/commit/53a3d4bcd603e2fd07546621628e69de88e4139a)) * Refactor commands and serial manager to support updated commands payload ([811a9f8](https://github.com/EyeTrackVR/OpenIris/commit/811a9f898a3f1bdb1e20ffd6f0d6e77a4533f52c)) * Release 2.5.0 ([81cda52](https://github.com/EyeTrackVR/OpenIris/commit/81cda523bb14fe81f8a910a4e23b417a6fd36d2f)) ### 🐛 Bug Fixes * serial output for esp32cams and other boards not supporting higher frequency baud rate ([01e5e28](https://github.com/EyeTrackVR/OpenIris/commit/01e5e280ad26d2709231fe6aa2a96d1991cbf360)) --- CHANGELOG.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 61f19a11..1e4ce3a4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,23 @@ [![semantic versioning](https://img.shields.io/badge/semantic%20versioning-2.0.0-green.svg)](https://semver.org) > All notable changes to this project will be documented in this file +## [2.5.0-beta.1](https://github.com/EyeTrackVR/OpenIris/compare/v2.4.0...v2.5.0-beta.1) (2024-06-21) + + +### 🍕 Features + +* Add support for ov5640 cameras ([14d2cb0](https://github.com/EyeTrackVR/OpenIris/commit/14d2cb0858cd65452f2ce1cee9a3a1f68d8f7f51)) +* Fix ov5640 support implementation after beta cleanup ([4894c22](https://github.com/EyeTrackVR/OpenIris/commit/4894c2205864d5a7d52e37c81b14ff7dc46517d4)) +* fix usb streaming on wroom boards, add support for babble custom board ([049b160](https://github.com/EyeTrackVR/OpenIris/commit/049b16078ec5c07042652f2de3545ea6b69de6a9)) +* Move logging in serial streaming so that we at least attempt to get new frame ([53a3d4b](https://github.com/EyeTrackVR/OpenIris/commit/53a3d4bcd603e2fd07546621628e69de88e4139a)) +* Refactor commands and serial manager to support updated commands payload ([811a9f8](https://github.com/EyeTrackVR/OpenIris/commit/811a9f898a3f1bdb1e20ffd6f0d6e77a4533f52c)) +* Release 2.5.0 ([81cda52](https://github.com/EyeTrackVR/OpenIris/commit/81cda523bb14fe81f8a910a4e23b417a6fd36d2f)) + + +### 🐛 Bug Fixes + +* serial output for esp32cams and other boards not supporting higher frequency baud rate ([01e5e28](https://github.com/EyeTrackVR/OpenIris/commit/01e5e280ad26d2709231fe6aa2a96d1991cbf360)) + ## [2.5.0-beta.1](https://github.com/EyeTrackVR/OpenIris/compare/v2.4.0...v2.5.0-beta.1) (2024-06-11) From 210dad86e76ec5e63f8dccc7aaeb99fce5efe1e9 Mon Sep 17 00:00:00 2001 From: Lorow Date: Sat, 11 Jan 2025 20:23:59 +0100 Subject: [PATCH 16/20] Update CI actions version (#82) --- .github/workflows/build_release_bins.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build_release_bins.yml b/.github/workflows/build_release_bins.yml index fd414b7f..ba4e20cf 100644 --- a/.github/workflows/build_release_bins.yml +++ b/.github/workflows/build_release_bins.yml @@ -40,7 +40,7 @@ jobs: matrix: ${{fromJson(needs.setup.outputs.matrix)}} runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Build OpenIris Firmware @@ -68,7 +68,7 @@ jobs: run: | echo "FIRMWARE_NAME=$(cat ESP/build/${{ matrix.target_name }}${{ matrix.target_build_type }}/firmware_name.txt)" >> $GITHUB_ENV - name: Archive Firmware Binaries - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: ${{ matrix.target_name }}${{ matrix.target_build_type }}-firmware #path: "./ESP/.pio/build/${{ matrix.target_name }}${{ matrix.target_build_type }}/${{ env.FIRMWARE_NAME }}.bin" @@ -80,17 +80,17 @@ jobs: needs: [build] steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 - name: Create Directory run: mkdir -p build - name: Download Firmware Files - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v4 with: path: build/ - name: Setup node - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: 18 - run: npm install -g conventional-changelog-conventionalcommits@6 @@ -117,6 +117,6 @@ jobs: timeout-minutes: 10 steps: - name: "♻️ remove build artifacts" - uses: geekyeggo/delete-artifact@v1 + uses: geekyeggo/delete-artifact@v5 with: name: ${{ matrix.target_name }}${{ matrix.target_build_type }}-firmware From 056e19f2fed4ece482e116d77100fe1aa6729a95 Mon Sep 17 00:00:00 2001 From: Rames The Generic Date: Sat, 11 Jan 2025 14:24:43 -0500 Subject: [PATCH 17/20] Finalize Babble Board Configs (#80) * Update Babble Board Pinout and Enable Emitters * Update Babble Board Conf * Lower AEC value for Babble boards * Remove Comments * Add Firmware cropping to for the Babble Board --- ESP/ini/boards.ini | 44 +++++++++++++++++++++++-- ESP/lib/src/io/camera/cameraHandler.cpp | 29 +++++++++++++++- 2 files changed, 70 insertions(+), 3 deletions(-) diff --git a/ESP/ini/boards.ini b/ESP/ini/boards.ini index 8115cbf8..868b7fcc 100644 --- a/ESP/ini/boards.ini +++ b/ESP/ini/boards.ini @@ -190,7 +190,10 @@ upload_flags = --no-stub [env:Babble-wrooms-s3] board = esp32-s3-devkitc-1 -board_build.flash_mode = qio ; qio_qspi +board_upload.flashsize = "4MB" +board_upload.flash_size=4MB +board_upload.maximum_size = 4194304 +board_build.flash_mode = qio board_build.arduino.memory_type = qio_qspi build_type = debug build_flags = ${env.build_flags} @@ -200,9 +203,27 @@ build_flags = ${env.build_flags} ${pinoutSWROOMBABBLES3.build_flags} upload_flags = --no-stub +[env:Babble-wrooms-s3_release] +board = esp32-s3-devkitc-1 +board_upload.flashsize = "4MB" +board_upload.flash_size=4MB +board_upload.maximum_size = 4194304 +board_build.flash_mode = qio +board_build.arduino.memory_type = qio_qspi +build_type = debug +build_flags = ${env.build_flags} + -DCORE_DEBUG_LEVEL=1 + -DDEBUG_MODE=0 + -DSERIAL_MANAGER_USE_HIGHER_FREQUENCY + ${pinoutSWROOMBABBLES3.build_flags} +upload_flags = --no-stub + [env:Babble_USB-wrooms-s3] board = esp32-s3-devkitc-1 -board_build.flash_mode = qio ; qio_qspi +board_upload.flashsize = "4MB" +board_upload.flash_size=4MB +board_upload.maximum_size = 4194304 +board_build.flash_mode = qio board_build.arduino.memory_type = qio_qspi build_type = debug build_flags = ${env.build_flags} @@ -211,6 +232,25 @@ build_flags = ${env.build_flags} -DETVR_EYE_TRACKER_USB_API -DARDUINO_USB_MODE=1 -DARDUINO_USB_CDC_ON_BOOT=1 + -DARDUINO_FLASH + -DSERIAL_MANAGER_USE_HIGHER_FREQUENCY + ${pinoutSWROOMBABBLES3.build_flags} +upload_flags = --no-stub + +[env:Babble_USB-wrooms-s3_release] +board = esp32-s3-devkitc-1 +board_upload.flashsize = "4MB" +board_upload.flash_size=4MB +board_upload.maximum_size = 4194304 +board_build.flash_mode = qio +board_build.arduino.memory_type = qio_qspi +build_type = debug +build_flags = ${env.build_flags} + -DCORE_DEBUG_LEVEL=1 + -DDEBUG_MODE=0 + -DETVR_EYE_TRACKER_USB_API + -DARDUINO_USB_MODE=1 + -DARDUINO_USB_CDC_ON_BOOT=1 -DSERIAL_MANAGER_USE_HIGHER_FREQUENCY ${pinoutSWROOMBABBLES3.build_flags} upload_flags = --no-stub diff --git a/ESP/lib/src/io/camera/cameraHandler.cpp b/ESP/lib/src/io/camera/cameraHandler.cpp index 7b51bdb7..aa9c2b3b 100644 --- a/ESP/lib/src/io/camera/cameraHandler.cpp +++ b/ESP/lib/src/io/camera/cameraHandler.cpp @@ -108,6 +108,10 @@ void CameraHandler::setupCameraSensor() { camera_sensor->set_aec2(camera_sensor, 0); // 0 = disable , 1 = enable camera_sensor->set_ae_level(camera_sensor, 0); // -2 to 2 camera_sensor->set_aec_value(camera_sensor, 300); // 0 to 1200 + // Use a lower aec value for babble to better isolate the face with illuminators + #ifdef CONFIG_CAMERA_MODULE_SWROOM_BABBLE_S3 + camera_sensor->set_aec_value(camera_sensor, 100); // 0 to 1200 + #endif // controls the gain camera_sensor->set_gain_ctrl(camera_sensor, 0); // 0 = disable , 1 = enable @@ -195,7 +199,29 @@ void CameraHandler::loadConfigData() { log_d("Loading camera config data done"); } -int CameraHandler::setCameraResolution(framesize_t frameSize) { +#ifdef CONFIG_CAMERA_MODULE_SWROOM_BABBLE_S3 +int CameraHandler::setCameraResolution(framesize_t frameSize) { // For Babble, use a firmware crop as shown by Physdude + if (camera_sensor->pixformat == PIXFORMAT_JPEG) { + try { + int outputSize = 240; + + int baseRes = 2; //CIF + int ROIsize = 240; + int startPointX = 80; + int startPointY = 28; + + return camera_sensor->set_res_raw(camera_sensor, baseRes, 0, 0, 0, startPointX, startPointY, ROIsize, ROIsize, outputSize, outputSize, 0, 0); + + } catch (...) { + // they sent us a malformed or unsupported frameSize - rather than crash - + // tell them about it + return -1; + } + } + return -1; +} +#else +int CameraHandler::setCameraResolution(framesize_t frameSize) { // By default, use the standard method. if (camera_sensor->pixformat == PIXFORMAT_JPEG) { try { return camera_sensor->set_framesize(camera_sensor, frameSize); @@ -207,6 +233,7 @@ int CameraHandler::setCameraResolution(framesize_t frameSize) { } return -1; } +#endif int CameraHandler::setVFlip(int direction) { return camera_sensor->set_vflip(camera_sensor, direction); From 0f0c7df2fc6e2d15c213483584b4e05c87a37a8c Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sat, 11 Jan 2025 19:29:19 +0000 Subject: [PATCH 18/20] chore(minor): 2.7.0-beta.1 [skip ci] MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## [2.7.0-beta.1](https://github.com/EyeTrackVR/OpenIris/compare/v2.6.0...v2.7.0-beta.1) (2025-01-11) ### 🍕 Features * Add support for ov5640 cameras ([14d2cb0](https://github.com/EyeTrackVR/OpenIris/commit/14d2cb0858cd65452f2ce1cee9a3a1f68d8f7f51)) * Fix ov5640 support implementation after beta cleanup ([4894c22](https://github.com/EyeTrackVR/OpenIris/commit/4894c2205864d5a7d52e37c81b14ff7dc46517d4)) * fix usb streaming on wroom boards, add support for babble custom board ([049b160](https://github.com/EyeTrackVR/OpenIris/commit/049b16078ec5c07042652f2de3545ea6b69de6a9)) * Move logging in serial streaming so that we at least attempt to get new frame ([53a3d4b](https://github.com/EyeTrackVR/OpenIris/commit/53a3d4bcd603e2fd07546621628e69de88e4139a)) * Refactor commands and serial manager to support updated commands payload ([811a9f8](https://github.com/EyeTrackVR/OpenIris/commit/811a9f898a3f1bdb1e20ffd6f0d6e77a4533f52c)) ### 🐛 Bug Fixes * serial output for esp32cams and other boards not supporting higher frequency baud rate ([01e5e28](https://github.com/EyeTrackVR/OpenIris/commit/01e5e280ad26d2709231fe6aa2a96d1991cbf360)) --- CHANGELOG.md | 16 ++++++++++++++++ ESP/ini/dev_config.ini | 2 +- ESP/lib/library.json | 2 +- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index db93df25..ee30991f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,22 @@ [![semantic versioning](https://img.shields.io/badge/semantic%20versioning-2.0.0-green.svg)](https://semver.org) > All notable changes to this project will be documented in this file +## [2.7.0-beta.1](https://github.com/EyeTrackVR/OpenIris/compare/v2.6.0...v2.7.0-beta.1) (2025-01-11) + + +### 🍕 Features + +* Add support for ov5640 cameras ([14d2cb0](https://github.com/EyeTrackVR/OpenIris/commit/14d2cb0858cd65452f2ce1cee9a3a1f68d8f7f51)) +* Fix ov5640 support implementation after beta cleanup ([4894c22](https://github.com/EyeTrackVR/OpenIris/commit/4894c2205864d5a7d52e37c81b14ff7dc46517d4)) +* fix usb streaming on wroom boards, add support for babble custom board ([049b160](https://github.com/EyeTrackVR/OpenIris/commit/049b16078ec5c07042652f2de3545ea6b69de6a9)) +* Move logging in serial streaming so that we at least attempt to get new frame ([53a3d4b](https://github.com/EyeTrackVR/OpenIris/commit/53a3d4bcd603e2fd07546621628e69de88e4139a)) +* Refactor commands and serial manager to support updated commands payload ([811a9f8](https://github.com/EyeTrackVR/OpenIris/commit/811a9f898a3f1bdb1e20ffd6f0d6e77a4533f52c)) + + +### 🐛 Bug Fixes + +* serial output for esp32cams and other boards not supporting higher frequency baud rate ([01e5e28](https://github.com/EyeTrackVR/OpenIris/commit/01e5e280ad26d2709231fe6aa2a96d1991cbf360)) + ## [2.6.0](https://github.com/EyeTrackVR/OpenIris/compare/v2.5.0...v2.6.0) (2024-07-14) diff --git a/ESP/ini/dev_config.ini b/ESP/ini/dev_config.ini index e028ff06..e042e8f2 100644 --- a/ESP/ini/dev_config.ini +++ b/ESP/ini/dev_config.ini @@ -5,7 +5,7 @@ platform = https://github.com/platformio/platform-espressif32.git framework = arduino monitor_speed = 115200 -custom_firmware_version = 2.6.0 +custom_firmware_version = 2.7.0 monitor_rts = 0 monitor_dtr = 0 monitor_filters = diff --git a/ESP/lib/library.json b/ESP/lib/library.json index 53b99d39..991c6de2 100644 --- a/ESP/lib/library.json +++ b/ESP/lib/library.json @@ -20,7 +20,7 @@ "include": "/lib/src" }, "dependencies": {}, - "version": "2.6.0", + "version": "2.7.0", "frameworks": "arduino", "platforms": "espressif32" } From 5c76e01c5e466c8cc7ef4cd43e78a763af00c06e Mon Sep 17 00:00:00 2001 From: m-RNA <41933749+m-RNA@users.noreply.github.com> Date: Sun, 12 Jan 2025 21:29:05 +0800 Subject: [PATCH 19/20] feat: Add camera resolution configuration support (#79) --- ESP/ini/dev_config.ini | 1 + ESP/ini/user_config.ini | 3 +++ ESP/lib/src/data/config/project_config.cpp | 5 +++-- ESP/lib/src/io/camera/cameraHandler.cpp | 2 +- 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/ESP/ini/dev_config.ini b/ESP/ini/dev_config.ini index e042e8f2..e338c40d 100644 --- a/ESP/ini/dev_config.ini +++ b/ESP/ini/dev_config.ini @@ -46,6 +46,7 @@ build_flags = '-DOTA_PASSWORD=${ota.otapassword}' ; Set the OTA password '-DOTA_LOGIN=${ota.otalogin}' + '-DCAM_RESOLUTION=${cam.resolution}' -O2 ; optimize for speed -DASYNCWEBSERVER_REGEX ; enable regex in asyncwebserver diff --git a/ESP/ini/user_config.ini b/ESP/ini/user_config.ini index e91ed658..a67a540e 100644 --- a/ESP/ini/user_config.ini +++ b/ESP/ini/user_config.ini @@ -18,3 +18,6 @@ otapassword = "12345678" [development] serial_flush_enabled = 0 + +[cam] +resolution = FRAMESIZE_240X240 \ No newline at end of file diff --git a/ESP/lib/src/data/config/project_config.cpp b/ESP/lib/src/data/config/project_config.cpp index 9154b1ea..05ea095b 100644 --- a/ESP/lib/src/data/config/project_config.cpp +++ b/ESP/lib/src/data/config/project_config.cpp @@ -1,4 +1,5 @@ #include "project_config.hpp" +#include "sensor.h" ProjectConfig::ProjectConfig(const std::string& name, const std::string& mdnsName) @@ -53,7 +54,7 @@ void ProjectConfig::initConfig() { this->config.camera = { .vflip = 0, .href = 0, - .framesize = 4, + .framesize = (uint8_t)CAM_RESOLUTION, .quality = 7, .brightness = 2, }; @@ -200,7 +201,7 @@ void ProjectConfig::load() { /* Camera Config */ this->config.camera.vflip = getInt("vflip", 0); this->config.camera.href = getInt("href", 0); - this->config.camera.framesize = getInt("framesize", 4); + this->config.camera.framesize = getInt("framesize", (uint8_t)CAM_RESOLUTION); this->config.camera.quality = getInt("quality", 7); this->config.camera.brightness = getInt("brightness", 2); diff --git a/ESP/lib/src/io/camera/cameraHandler.cpp b/ESP/lib/src/io/camera/cameraHandler.cpp index aa9c2b3b..323b4e82 100644 --- a/ESP/lib/src/io/camera/cameraHandler.cpp +++ b/ESP/lib/src/io/camera/cameraHandler.cpp @@ -63,7 +63,7 @@ void CameraHandler::setupCameraPinout() { void CameraHandler::setupBasicResolution() { config.pixel_format = PIXFORMAT_JPEG; - config.frame_size = FRAMESIZE_240X240; + config.frame_size = CAM_RESOLUTION; if (!psramFound()) { log_e("[Camera]: Did not find psram, setting lower image quality"); From 2602845b716d7a62e06e7d0d733c2449f6dff4dc Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sun, 12 Jan 2025 13:33:28 +0000 Subject: [PATCH 20/20] chore(minor): 2.7.0-beta.2 [skip ci] MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## [2.7.0-beta.2](https://github.com/EyeTrackVR/OpenIris/compare/v2.7.0-beta.1...v2.7.0-beta.2) (2025-01-12) ### 🍕 Features * Add camera resolution configuration support ([#79](https://github.com/EyeTrackVR/OpenIris/issues/79)) ([5c76e01](https://github.com/EyeTrackVR/OpenIris/commit/5c76e01c5e466c8cc7ef4cd43e78a763af00c06e)) --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ee30991f..9dc7e0e9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,13 @@ [![semantic versioning](https://img.shields.io/badge/semantic%20versioning-2.0.0-green.svg)](https://semver.org) > All notable changes to this project will be documented in this file +## [2.7.0-beta.2](https://github.com/EyeTrackVR/OpenIris/compare/v2.7.0-beta.1...v2.7.0-beta.2) (2025-01-12) + + +### 🍕 Features + +* Add camera resolution configuration support ([#79](https://github.com/EyeTrackVR/OpenIris/issues/79)) ([5c76e01](https://github.com/EyeTrackVR/OpenIris/commit/5c76e01c5e466c8cc7ef4cd43e78a763af00c06e)) + ## [2.7.0-beta.1](https://github.com/EyeTrackVR/OpenIris/compare/v2.6.0...v2.7.0-beta.1) (2025-01-11)