diff --git a/src/CharBuffer.cpp b/src/CharBuffer.cpp index 62b47b71..4b313060 100644 --- a/src/CharBuffer.cpp +++ b/src/CharBuffer.cpp @@ -1,8 +1,8 @@ #include "CharBuffer.h" -void CharBuffer::initialize() +void CharBuffer::initialize(uint16_t buffer_size) { - _buffer = new char[CHAR_BUFFER_SIZE]; + _buffer = new char[buffer_size]; } char *CharBuffer::get() diff --git a/src/CharBuffer.h b/src/CharBuffer.h index 4abaf875..9828de1b 100644 --- a/src/CharBuffer.h +++ b/src/CharBuffer.h @@ -1,11 +1,9 @@ #pragma once -#define CHAR_BUFFER_SIZE 4096 - class CharBuffer { public: - static void initialize(); + static void initialize(uint16_t buffer_size); static char* get(); private: diff --git a/src/Config.h b/src/Config.h index f221309b..a854dbb2 100644 --- a/src/Config.h +++ b/src/Config.h @@ -24,6 +24,7 @@ #define GPIO_DEBOUNCE_TIME 200 +#define CHAR_BUFFER_SIZE 4096 #define NETWORK_TASK_SIZE 12288 #define NUKI_TASK_SIZE 8192 #define PD_TASK_SIZE 1024 diff --git a/src/PreferencesKeys.h b/src/PreferencesKeys.h index 73ebba3a..25cf03e9 100644 --- a/src/PreferencesKeys.h +++ b/src/PreferencesKeys.h @@ -80,6 +80,7 @@ #define preference_timecontrol_max_entries (char*)"tcmaxentry" #define preference_bootloop_counter (char*)"btlpcounter" #define preference_enable_bootloop_reset (char*)"enabtlprst" +#define preference_buffer_size (char*)"buffsize" class DebugPreferences { @@ -90,7 +91,7 @@ class DebugPreferences preference_lock_enabled, preference_lock_pin_status, preference_mqtt_lock_path, preference_opener_enabled, preference_opener_pin_status, preference_opener_continuous_mode, preference_mqtt_opener_path, preference_lock_max_keypad_code_count, preference_opener_max_keypad_code_count, preference_enable_bootloop_reset, preference_mqtt_ca, preference_mqtt_crt, preference_mqtt_key, preference_mqtt_hass_discovery, preference_mqtt_hass_cu_url, - preference_ip_dhcp_enabled, preference_ip_address, preference_ip_subnet, preference_ip_gateway, preference_ip_dns_server, + preference_buffer_size, preference_ip_dhcp_enabled, preference_ip_address, preference_ip_subnet, preference_ip_gateway, preference_ip_dns_server, preference_network_hardware, preference_network_wifi_fallback_disabled, preference_rssi_publish_interval, preference_hostname, preference_network_timeout, preference_restart_on_disconnect, preference_restart_ble_beacon_lost, preference_query_interval_lockstate, preference_query_interval_configuration, preference_query_interval_battery, preference_query_interval_keypad, preference_keypad_control_enabled, diff --git a/src/WebCfgServer.cpp b/src/WebCfgServer.cpp index afe31645..f9af5114 100644 --- a/src/WebCfgServer.cpp +++ b/src/WebCfgServer.cpp @@ -521,6 +521,14 @@ bool WebCfgServer::processArgs(String& message) configChanged = true; } } + else if(key == "BUFFSIZE") + { + if(value.toInt() > 4095 && value.toInt() < 32769) + { + _preferences->putInt(preference_buffer_size, value.toInt()); + configChanged = true; + } + } else if(key == "BTLPRST") { _preferences->putBool(preference_enable_bootloop_reset, (value == "1")); @@ -1336,6 +1344,7 @@ void WebCfgServer::buildAdvancedConfigHtml(String &response) response.concat(_preferences->getBool(preference_enable_bootloop_reset, false) ? "Enabled" : "Disabled"); response.concat(""); printCheckBox(response, "BTLPRST", "Enable Bootloop prevention (Try to reset these settings to default on bootloop)", true, ""); + printInputField(response, "BUFFSIZE", "Char buffer size (min 4096, max 32768)", _preferences->getInt(preference_buffer_size, CHAR_BUFFER_SIZE), 6); printInputField(response, "TSKNTWK", "Task size Network (min 12288, max 32768)", _preferences->getInt(preference_task_size_network, NETWORK_TASK_SIZE), 6); printInputField(response, "TSKNUKI", "Task size Nuki (min 8192, max 32768)", _preferences->getInt(preference_task_size_nuki, NUKI_TASK_SIZE), 6); printInputField(response, "TSKPD", "Task size Presence Detection (min 1024, max 4048)", _preferences->getInt(preference_task_size_pd, PD_TASK_SIZE), 6); diff --git a/src/main.cpp b/src/main.cpp index 5bb6046b..a7e9a9c0 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -295,8 +295,10 @@ void setup() { deviceIdOpener->assignId(deviceIdLock->get()); } + + uint16_t buffer_size = preferences->getInt(preference_buffer_size, 4096); - CharBuffer::initialize(); + CharBuffer::initialize(buffer_size); if(preferences->getInt(preference_restart_timer) != 0) { @@ -312,15 +314,15 @@ void setup() openerEnabled = preferences->getBool(preference_opener_enabled); const String mqttLockPath = preferences->getString(preference_mqtt_lock_path); - network = new Network(preferences, gpio, mqttLockPath, CharBuffer::get(), CHAR_BUFFER_SIZE); + network = new Network(preferences, gpio, mqttLockPath, CharBuffer::get(), buffer_size); network->initialize(); - networkLock = new NetworkLock(network, preferences, CharBuffer::get(), CHAR_BUFFER_SIZE); + networkLock = new NetworkLock(network, preferences, CharBuffer::get(), buffer_size); networkLock->initialize(); if(openerEnabled) { - networkOpener = new NetworkOpener(network, preferences, CharBuffer::get(), CHAR_BUFFER_SIZE); + networkOpener = new NetworkOpener(network, preferences, CharBuffer::get(), buffer_size); networkOpener->initialize(); }