mirror of
https://github.com/arendst/Tasmota.git
synced 2025-07-28 05:06:32 +00:00
Single Settings Char Array Phase 1
Single Settings Char Array Phase 1 - Does nothing yet
This commit is contained in:
parent
56308d3a12
commit
c32d2088b0
@ -57,6 +57,7 @@ The following binary downloads have been compiled with ESP8266/Arduino library c
|
|||||||
- Fix duplicated ``Backlog`` when using Event inside a Backlog by Adrian Scillato (#7178, #7147)
|
- Fix duplicated ``Backlog`` when using Event inside a Backlog by Adrian Scillato (#7178, #7147)
|
||||||
- Fix Gui Timer when using a negative zero offset of -00:00 by Peter Ooms (#7174)
|
- Fix Gui Timer when using a negative zero offset of -00:00 by Peter Ooms (#7174)
|
||||||
- Add command ``SerialConfig 0..23`` or ``SerialConfig 8N1`` to select Serial Config based in PR by Luis Teixeira (#7108)
|
- Add command ``SerialConfig 0..23`` or ``SerialConfig 8N1`` to select Serial Config based in PR by Luis Teixeira (#7108)
|
||||||
|
- Add command ``Sensor34 9 <weight code>`` to set minimum delta to trigger JSON message by @tobox (#7188)
|
||||||
- Add rule var ``%topic%`` by Adrian Scillato (#5522)
|
- Add rule var ``%topic%`` by Adrian Scillato (#5522)
|
||||||
- Add rule triggers ``tele-wifi1#xxx`` by Adrian Scillato (#7093)
|
- Add rule triggers ``tele-wifi1#xxx`` by Adrian Scillato (#7093)
|
||||||
- Add SML bus decoder syntax support for byte order by Gerhard Mutz (#7112)
|
- Add SML bus decoder syntax support for byte order by Gerhard Mutz (#7112)
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
- Add Wifi Signal Strength in dBm in addition to RSSI Wifi Experience by Andreas Schultz (#7145)
|
- Add Wifi Signal Strength in dBm in addition to RSSI Wifi Experience by Andreas Schultz (#7145)
|
||||||
- Add Yaw, Pitch and Roll support for MPU6050 by Philip Barclay (#7058)
|
- Add Yaw, Pitch and Roll support for MPU6050 by Philip Barclay (#7058)
|
||||||
- Add reporting of raw weight to JSON from HX711 to overcome auto-tare functionality by @tobox (#7171)
|
- Add reporting of raw weight to JSON from HX711 to overcome auto-tare functionality by @tobox (#7171)
|
||||||
|
- Add command ``Sensor34 9 <weight code>`` to set minimum delta to trigger JSON message by @tobox (#7188)
|
||||||
- Fix flashing H801 led at boot by Stefan Hadinger (#7165, #649)
|
- Fix flashing H801 led at boot by Stefan Hadinger (#7165, #649)
|
||||||
- Fix duplicated ``Backlog`` when using Event inside a Backlog by Adrian Scillato (#7178, #7147)
|
- Fix duplicated ``Backlog`` when using Event inside a Backlog by Adrian Scillato (#7178, #7147)
|
||||||
- Fix Gui Timer when using a negative zero offset of -00:00 by Peter Ooms (#7174)
|
- Fix Gui Timer when using a negative zero offset of -00:00 by Peter Ooms (#7174)
|
||||||
|
@ -442,6 +442,152 @@ void UpdateQuickPowerCycle(bool update)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*********************************************************************************************\
|
||||||
|
* Config single char array support
|
||||||
|
\*********************************************************************************************/
|
||||||
|
|
||||||
|
enum CharsIndex { SET_OTAURL,
|
||||||
|
SET_MQTTPREFIX1, SET_MQTTPREFIX2, SET_MQTTPREFIX3,
|
||||||
|
// SET_STASSID1, SET_STASSID2,
|
||||||
|
// SET_STAPWD1, SET_STAPWD2, SET_WEBPWD,
|
||||||
|
// SET_HOSTNAME, SET_SYSLOG_HOST,
|
||||||
|
// SET_MQTT_HOST, SET_MQTT_CLIENT,
|
||||||
|
// SET_MQTT_USER, SET_MQTT_PWD,
|
||||||
|
// SET_MQTT_FULLTOPIC, SET_MQTT_TOPIC,
|
||||||
|
// SET_MQTT_BUTTON_TOPIC, SET_MQTT_SWITCH_TOPIC, SET_MQTT_GRP_TOPIC,
|
||||||
|
// SET_STATE_TXT1, SET_STATE_TXT2, SET_STATE_TXT3, SET_STATE_TXT4,
|
||||||
|
// SET_FRIENDLYNAME1, SET_FRIENDLYNAME2, SET_FRIENDLYNAME3, SET_FRIENDLYNAME4,
|
||||||
|
|
||||||
|
// SET_FRIENDLYNAME5, SET_FRIENDLYNAME6, SET_FRIENDLYNAME7, SET_FRIENDLYNAME8, // Future extension
|
||||||
|
|
||||||
|
// SET_NTPSERVER1, SET_NTPSERVER2, SET_NTPSERVER3,
|
||||||
|
// SET_MEM1, SET_MEM2, SET_MEM3, SET_MEM4, SET_MEM5,
|
||||||
|
// SET_CORS,
|
||||||
|
|
||||||
|
// SET_BUTTON1, SET_BUTTON2, SET_BUTTON3, SET_BUTTON4, // Future extension
|
||||||
|
// SET_BUTTON5, SET_BUTTON6, SET_BUTTON7, SET_BUTTON8, // Future extension
|
||||||
|
// SET_BUTTON9, SET_BUTTON10, SET_BUTTON11, SET_BUTTON12, // Future extension
|
||||||
|
// SET_BUTTON13, SET_BUTTON14, SET_BUTTON15, SET_BUTTON16, // Future extension
|
||||||
|
|
||||||
|
SET_MAX };
|
||||||
|
|
||||||
|
const uint32_t settings_loc_num = 1; // First phase only ota_url and mqtt_prefix
|
||||||
|
const uint32_t settings_max_size = 134;
|
||||||
|
|
||||||
|
char settings_fullstr[settings_max_size] = { 0 };
|
||||||
|
|
||||||
|
struct LOCATIONS {
|
||||||
|
char* address;
|
||||||
|
uint32_t size = 0;
|
||||||
|
} Location[settings_loc_num];
|
||||||
|
|
||||||
|
void SettingsInitText(void)
|
||||||
|
{
|
||||||
|
for (uint32_t i = 0; i < settings_loc_num; i++) {
|
||||||
|
if (0 == i) {
|
||||||
|
Location[i].address = Settings.ota_url;
|
||||||
|
Location[i].size = sizeof(Settings.ota_url) + (3 * sizeof(Settings.mqtt_prefix[0]));
|
||||||
|
// Location[i].address = Settings.char_chunk1;
|
||||||
|
// Location[i].size = sizeof(Settings.char_chunk1); // 134
|
||||||
|
}
|
||||||
|
else if (1 == i) {
|
||||||
|
Location[i].address = Settings.sta_ssid[0];
|
||||||
|
Location[i].size = (2 * sizeof(Settings.sta_ssid[0])) + (2 * sizeof(Settings.sta_pwd[0])) + sizeof(Settings.hostname) + sizeof(Settings.syslog_host);
|
||||||
|
// Location[i].address = Settings.char_chunk2;
|
||||||
|
// Location[i].size = sizeof(Settings.char_chunk2); // 262
|
||||||
|
}
|
||||||
|
else if (2 == i) {
|
||||||
|
// Need to move Settings.mqtt_port first!
|
||||||
|
Location[i].address = Settings.mqtt_host;
|
||||||
|
Location[i].size = sizeof(Settings.mqtt_host) + 2 + sizeof(Settings.mqtt_client) + sizeof(Settings.mqtt_user) + sizeof(Settings.mqtt_pwd) + sizeof(Settings.mqtt_topic) + sizeof(Settings.button_topic) + sizeof(Settings.mqtt_grptopic);
|
||||||
|
// Location[i].address = Settings.char_chunk3;
|
||||||
|
// Location[i].size = sizeof(Settings.char_chunk3); // 233
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SettingsCopyText(0); // Load
|
||||||
|
}
|
||||||
|
|
||||||
|
void SettingsCopyText(uint32_t direction)
|
||||||
|
{
|
||||||
|
char* fullstr = settings_fullstr;
|
||||||
|
uint32_t size = 0;
|
||||||
|
for (uint32_t i = 0; i < settings_loc_num; i++) {
|
||||||
|
size = Location[i].size;
|
||||||
|
if (1 == direction) {
|
||||||
|
memcpy(Location[i].address, fullstr, size); // Save to Settings
|
||||||
|
} else {
|
||||||
|
memcpy(fullstr, Location[i].address, size); // Load from Settings
|
||||||
|
}
|
||||||
|
fullstr += size;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SettingsUpdateText(uint32_t index, char* replace)
|
||||||
|
{
|
||||||
|
if (index >= SET_MAX) {
|
||||||
|
return false; // Setting not supported - internal error
|
||||||
|
}
|
||||||
|
|
||||||
|
// SettingsCopyText(0); // Load
|
||||||
|
|
||||||
|
uint32_t start_pos = 0;
|
||||||
|
uint32_t end_pos = 0;
|
||||||
|
char* position = settings_fullstr;
|
||||||
|
for (uint32_t size = 0; size < SET_MAX; size++) {
|
||||||
|
while (*position++ != '\0') { }
|
||||||
|
if (1 == index) {
|
||||||
|
start_pos = position - settings_fullstr;
|
||||||
|
}
|
||||||
|
else if (0 == index) {
|
||||||
|
end_pos = position - settings_fullstr -1;
|
||||||
|
}
|
||||||
|
index--;
|
||||||
|
}
|
||||||
|
uint32_t len_pos = position - settings_fullstr;
|
||||||
|
|
||||||
|
uint32_t current_len = end_pos - start_pos;
|
||||||
|
uint32_t replace_len = strlen(replace);
|
||||||
|
int diff = replace_len - current_len;
|
||||||
|
|
||||||
|
// AddLog_P2(LOG_LEVEL_DEBUG, PSTR("TST: start %d, end %d, len %d, current %d, replace %d, diff %d"),
|
||||||
|
// start_pos, end_pos, len_pos, current_len, replace_len, diff);
|
||||||
|
|
||||||
|
int too_long = (len_pos + diff) - sizeof(settings_fullstr);
|
||||||
|
if (too_long > 0) {
|
||||||
|
// AddLog_P2(LOG_LEVEL_INFO, PSTR("CFG: Text too long by %d char(s)"), too_long);
|
||||||
|
return false; // Replace text too long
|
||||||
|
}
|
||||||
|
|
||||||
|
if (diff != 0) {
|
||||||
|
// Shift full text string up or down
|
||||||
|
memmove_P(settings_fullstr + start_pos + replace_len, settings_fullstr + end_pos, len_pos - end_pos);
|
||||||
|
}
|
||||||
|
// Replace text
|
||||||
|
memmove_P(settings_fullstr + start_pos, replace, replace_len);
|
||||||
|
// Fill for future use
|
||||||
|
memset(settings_fullstr + len_pos + diff, 0x00, settings_max_size - len_pos - diff);
|
||||||
|
|
||||||
|
// SettingsCopyText(1); // Save - Hold of for now
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
char* SettingsGetText(uint32_t index)
|
||||||
|
{
|
||||||
|
if (index >= SET_MAX) {
|
||||||
|
return nullptr; // Setting not supported - internal error
|
||||||
|
}
|
||||||
|
|
||||||
|
// SettingsCopyText(0); // Load
|
||||||
|
|
||||||
|
char* position = settings_fullstr;
|
||||||
|
for (;index > 0; index--) {
|
||||||
|
while (*position++ != '\0') { }
|
||||||
|
}
|
||||||
|
return position;
|
||||||
|
}
|
||||||
|
|
||||||
/*********************************************************************************************\
|
/*********************************************************************************************\
|
||||||
* Config Save - Save parameters to Flash ONLY if any parameter has changed
|
* Config Save - Save parameters to Flash ONLY if any parameter has changed
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
@ -561,6 +707,8 @@ void SettingsLoad(void)
|
|||||||
settings_crc32 = GetSettingsCrc32();
|
settings_crc32 = GetSettingsCrc32();
|
||||||
#endif // FIRMWARE_MINIMAL
|
#endif // FIRMWARE_MINIMAL
|
||||||
|
|
||||||
|
SettingsInitText();
|
||||||
|
|
||||||
RtcSettingsLoad();
|
RtcSettingsLoad();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user