From 88429fb24c05b1bfeb2ec9abb636e9c9c5bbd9d0 Mon Sep 17 00:00:00 2001 From: arendst Date: Thu, 1 Feb 2018 16:18:00 +0100 Subject: [PATCH] Faster console output. Support longer sensor names --- sonoff/language/de-DE.h | 1 - sonoff/language/en-GB.h | 1 - sonoff/language/es-AR.h | 1 - sonoff/language/fr-FR.h | 1 - sonoff/language/it-IT.h | 1 - sonoff/language/nl-NL.h | 1 - sonoff/language/pl-PL.h | 1 - sonoff/language/zh-CN.h | 1 - sonoff/sonoff.ino | 7 ++- sonoff/sonoff_template.h | 94 ++++++++++------------------------------ sonoff/support.ino | 47 ++++++-------------- sonoff/webserver.ino | 3 +- sonoff/xsns_06_dht.ino | 2 +- 13 files changed, 43 insertions(+), 118 deletions(-) diff --git a/sonoff/language/de-DE.h b/sonoff/language/de-DE.h index 55710e89c..09877893c 100644 --- a/sonoff/language/de-DE.h +++ b/sonoff/language/de-DE.h @@ -381,7 +381,6 @@ #define D_PARTICALS_BEYOND "Particals" // sonoff_template.h -// Max string length is 8 characters including suffixes #define D_SENSOR_NONE "None" #define D_SENSOR_DHT11 "DHT11" #define D_SENSOR_AM2301 "AM2301" diff --git a/sonoff/language/en-GB.h b/sonoff/language/en-GB.h index e5ccdaed6..77db37009 100644 --- a/sonoff/language/en-GB.h +++ b/sonoff/language/en-GB.h @@ -381,7 +381,6 @@ #define D_PARTICALS_BEYOND "Particals" // sonoff_template.h -// Max string length is 8 characters including suffixes #define D_SENSOR_NONE "None" #define D_SENSOR_DHT11 "DHT11" #define D_SENSOR_AM2301 "AM2301" diff --git a/sonoff/language/es-AR.h b/sonoff/language/es-AR.h index 0ef008469..e54098edf 100644 --- a/sonoff/language/es-AR.h +++ b/sonoff/language/es-AR.h @@ -381,7 +381,6 @@ #define D_PARTICALS_BEYOND "Partículas" // sonoff_template.h -// Max string length is 8 characters including suffixes #define D_SENSOR_NONE "Ninguno" #define D_SENSOR_DHT11 "DHT11" #define D_SENSOR_AM2301 "AM2301" diff --git a/sonoff/language/fr-FR.h b/sonoff/language/fr-FR.h index 7e655c21c..78afc0677 100644 --- a/sonoff/language/fr-FR.h +++ b/sonoff/language/fr-FR.h @@ -381,7 +381,6 @@ #define D_PARTICALS_BEYOND "Particules" // sonoff_template.h -// Max string length is 8 characters including suffixes #define D_SENSOR_NONE "None" #define D_SENSOR_DHT11 "DHT11" #define D_SENSOR_AM2301 "AM2301" diff --git a/sonoff/language/it-IT.h b/sonoff/language/it-IT.h index 59ae8533d..6ab442ca1 100644 --- a/sonoff/language/it-IT.h +++ b/sonoff/language/it-IT.h @@ -381,7 +381,6 @@ #define D_PARTICALS_BEYOND "Particelle" // sonoff_template.h -// Max string length is 8 characters including suffixes #define D_SENSOR_NONE "None" #define D_SENSOR_DHT11 "DHT11" #define D_SENSOR_AM2301 "AM2301" diff --git a/sonoff/language/nl-NL.h b/sonoff/language/nl-NL.h index f33646579..6f9d39f72 100644 --- a/sonoff/language/nl-NL.h +++ b/sonoff/language/nl-NL.h @@ -381,7 +381,6 @@ #define D_PARTICALS_BEYOND "Stofdeeltjes" // sonoff_template.h -// Max string length is 8 characters including suffixes #define D_SENSOR_NONE "Geen" #define D_SENSOR_DHT11 "DHT11" #define D_SENSOR_AM2301 "AM2301" diff --git a/sonoff/language/pl-PL.h b/sonoff/language/pl-PL.h index c449da210..97c0bf51f 100644 --- a/sonoff/language/pl-PL.h +++ b/sonoff/language/pl-PL.h @@ -381,7 +381,6 @@ #define D_PARTICALS_BEYOND "Particals" // sonoff_template.h -// Max string length is 8 characters including suffixes #define D_SENSOR_NONE "Brak" #define D_SENSOR_DHT11 "DHT11" #define D_SENSOR_AM2301 "AM2301" diff --git a/sonoff/language/zh-CN.h b/sonoff/language/zh-CN.h index 929da46d5..76c271ee9 100644 --- a/sonoff/language/zh-CN.h +++ b/sonoff/language/zh-CN.h @@ -381,7 +381,6 @@ #define D_PARTICALS_BEYOND "颗粒物直径大于" // sonoff_template.h -// Max string length is 8 characters including suffixes #define D_SENSOR_NONE "None" #define D_SENSOR_DHT11 "DHT11" #define D_SENSOR_AM2301 "AM2301" diff --git a/sonoff/sonoff.ino b/sonoff/sonoff.ino index a479fb83f..76ad700de 100644 --- a/sonoff/sonoff.ino +++ b/sonoff/sonoff.ino @@ -1152,8 +1152,8 @@ void MqttDataCallback(char* topic, byte* data, unsigned int data_len) snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s,"), mqtt_data); } jsflg = 1; - snprintf_P(stemp1, sizeof(stemp1), kSensors[Settings.my_gp.io[i]]); - snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s\"" D_CMND_GPIO "%d\":\"%d (%s)\""), mqtt_data, i, Settings.my_gp.io[i], stemp1); + snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s\"" D_CMND_GPIO "%d\":\"%d (%s)\""), + mqtt_data, i, Settings.my_gp.io[i], GetTextIndexed(stemp1, sizeof(stemp1), Settings.my_gp.io[i], kSensorNames)); } } if (jsflg) { @@ -1170,8 +1170,7 @@ void MqttDataCallback(char* topic, byte* data, unsigned int data_len) snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s,"), mqtt_data); } jsflg = 1; - snprintf_P(stemp1, sizeof(stemp1), kSensors[i]); - snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s\"%d (%s)\""), mqtt_data, i, stemp1); + snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s\"%d (%s)\""), mqtt_data, i, GetTextIndexed(stemp1, sizeof(stemp1), i, kSensorNames)); if ((strlen(mqtt_data) > (LOGSZ - TOPSZ)) || (i == GPIO_SENSOR_END -1)) { snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s]}"), mqtt_data); MqttPublishPrefixTopic_P(RESULT_OR_STAT, type); diff --git a/sonoff/sonoff_template.h b/sonoff/sonoff_template.h index 97ef8a0bb..ef8001225 100644 --- a/sonoff/sonoff_template.h +++ b/sonoff/sonoff_template.h @@ -90,76 +90,6 @@ enum UserSelectablePins { GPIO_PMS5003, // Plantower PMS5003 Serial interface GPIO_SENSOR_END }; -// Text in webpage Module Parameters and commands GPIOS and GPIO -const char kSensors[GPIO_SENSOR_END][9] PROGMEM = { - D_SENSOR_NONE, - D_SENSOR_DHT11, - D_SENSOR_AM2301, - D_SENSOR_SI7021, - D_SENSOR_DS18X20, - D_SENSOR_I2C_SCL, - D_SENSOR_I2C_SDA, - D_SENSOR_WS2812, - D_SENSOR_IRSEND, - D_SENSOR_SWITCH "1", - D_SENSOR_SWITCH "2", - D_SENSOR_SWITCH "3", - D_SENSOR_SWITCH "4", - D_SENSOR_BUTTON "1", - D_SENSOR_BUTTON "2", - D_SENSOR_BUTTON "3", - D_SENSOR_BUTTON "4", - D_SENSOR_RELAY "1", - D_SENSOR_RELAY "2", - D_SENSOR_RELAY "3", - D_SENSOR_RELAY "4", - D_SENSOR_RELAY "5", - D_SENSOR_RELAY "6", - D_SENSOR_RELAY "7", - D_SENSOR_RELAY "8", - D_SENSOR_RELAY "1i", - D_SENSOR_RELAY "2i", - D_SENSOR_RELAY "3i", - D_SENSOR_RELAY "4i", - D_SENSOR_RELAY "5i", - D_SENSOR_RELAY "6i", - D_SENSOR_RELAY "7i", - D_SENSOR_RELAY "8i", - D_SENSOR_PWM "1", - D_SENSOR_PWM "2", - D_SENSOR_PWM "3", - D_SENSOR_PWM "4", - D_SENSOR_PWM "5", - D_SENSOR_COUNTER "1", - D_SENSOR_COUNTER "2", - D_SENSOR_COUNTER "3", - D_SENSOR_COUNTER "4", - D_SENSOR_PWM "1i", - D_SENSOR_PWM "2i", - D_SENSOR_PWM "3i", - D_SENSOR_PWM "4i", - D_SENSOR_PWM "5i", - D_SENSOR_IRRECV, - D_SENSOR_LED "1", - D_SENSOR_LED "2", - D_SENSOR_LED "3", - D_SENSOR_LED "4", - D_SENSOR_LED "1i", - D_SENSOR_LED "2i", - D_SENSOR_LED "3i", - D_SENSOR_LED "4i", - D_SENSOR_MHZ_TX, - D_SENSOR_MHZ_RX, - D_SENSOR_PZEM_TX, - D_SENSOR_PZEM_RX, - D_SENSOR_SAIR_TX, - D_SENSOR_SAIR_RX, - D_SENSOR_SPI_CS, - D_SENSOR_SPI_DC, - D_SENSOR_BACKLIGHT, - D_SENSOR_PMS5003 -}; - // Programmer selectable GPIO functionality offset by user selectable GPIOs enum ProgramSelectablePins { GPIO_RXD = GPIO_SENSOR_END, // Serial interface @@ -177,6 +107,30 @@ enum ProgramSelectablePins { GPIO_USER, // User configurable GPIO_MAX }; +// Text in webpage Module Parameters and commands GPIOS and GPIO +const char kSensorNames[] PROGMEM = + D_SENSOR_NONE "|" + D_SENSOR_DHT11 "|" D_SENSOR_AM2301 "|" D_SENSOR_SI7021 "|" + D_SENSOR_DS18X20 "|" + D_SENSOR_I2C_SCL "|" D_SENSOR_I2C_SDA "|" + D_SENSOR_WS2812 "|" + D_SENSOR_IRSEND "|" + D_SENSOR_SWITCH "1|" D_SENSOR_SWITCH "2|" D_SENSOR_SWITCH "3|" D_SENSOR_SWITCH "4|" + D_SENSOR_BUTTON "1|" D_SENSOR_BUTTON "2|" D_SENSOR_BUTTON "3|" D_SENSOR_BUTTON "4|" + D_SENSOR_RELAY "1|" D_SENSOR_RELAY "2|" D_SENSOR_RELAY "3|" D_SENSOR_RELAY "4|" D_SENSOR_RELAY "5|" D_SENSOR_RELAY "6|" D_SENSOR_RELAY "7|" D_SENSOR_RELAY "8|" + D_SENSOR_RELAY "1i|" D_SENSOR_RELAY "2i|" D_SENSOR_RELAY "3i|" D_SENSOR_RELAY "4i|" D_SENSOR_RELAY "5i|" D_SENSOR_RELAY "6i|" D_SENSOR_RELAY "7i|" D_SENSOR_RELAY "8i|" + D_SENSOR_PWM "1|" D_SENSOR_PWM "2|" D_SENSOR_PWM "3|" D_SENSOR_PWM "4|" D_SENSOR_PWM "5|" + D_SENSOR_COUNTER "1|" D_SENSOR_COUNTER "2|" D_SENSOR_COUNTER "3|" D_SENSOR_COUNTER "4|" + D_SENSOR_PWM "1i|" D_SENSOR_PWM "2i|" D_SENSOR_PWM "3i|" D_SENSOR_PWM "4i|" D_SENSOR_PWM "5i|" + D_SENSOR_IRRECV "|" + D_SENSOR_LED "1|" D_SENSOR_LED "2|" D_SENSOR_LED "3|" D_SENSOR_LED "4|" + D_SENSOR_LED "1i|" D_SENSOR_LED "2i|" D_SENSOR_LED "3i|" D_SENSOR_LED "4i|" + D_SENSOR_MHZ_TX "|" D_SENSOR_MHZ_RX "|" + D_SENSOR_PZEM_TX "|" D_SENSOR_PZEM_RX "|" + D_SENSOR_SAIR_TX "|" D_SENSOR_SAIR_RX "|" + D_SENSOR_SPI_CS "|" D_SENSOR_SPI_DC "|" D_SENSOR_BACKLIGHT "|" + D_SENSOR_PMS5003; + /********************************************************************************************/ // Supported hardware modules diff --git a/sonoff/support.ino b/sonoff/support.ino index c5e89b711..0b7a2996b 100644 --- a/sonoff/support.ino +++ b/sonoff/support.ino @@ -166,11 +166,12 @@ void* memchr(const void* ptr, int value, size_t num) } // http://clc-wiki.net/wiki/C_standard_library:string.h:strspn +// Get span until any character in string size_t strcspn(const char *str1, const char *str2) { size_t ret = 0; while (*str1) { - if (strchr(str2, *str1)) { + if (strchr(str2, *str1)) { // Slow return ret; } else { str1++; @@ -179,38 +180,18 @@ size_t strcspn(const char *str1, const char *str2) } return ret; } - -/* - * strcspn.c -- - * - * Source code for the "strcspn" library routine. - * - * Copyright 1988 Regents of the University of California - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies. The University of California - * makes no representations about the suitability of this - * software for any purpose. It is provided "as is" without - * express or implied warranty. - */ -/* -size_t strcspn(const char* str1, const char* str2) -{ - char c; - const char* p; - const char* s; - - for (s = str1, c = *s; c != 0; s++, c = *s) { - for (p = str2; *p != 0; p++) { - if (c == *p) return s -str1; - } - } - return s -str1; -} -*/ #endif // ARDUINO_ESP8266_RELEASE_2_3_0 +// Get span until single character in string +size_t strchrspn(const char *str1, int character) +{ + size_t ret = 0; + char *start = (char*)str1; + char *end = strchr(str1, character); + if (end) ret = end - start; + return ret; +} + char* dtostrfd(double number, unsigned char prec, char *s) { return dtostrf(number, 1, prec, s); @@ -1363,7 +1344,7 @@ void GetLog(byte idx, char** entry_pp, size_t* len_p) do { byte cur_idx = *it; it++; - size_t tmp = strcspn(it, "\1"); + size_t tmp = strchrspn(it, '\1'); tmp++; // Skip terminating '\1' if (cur_idx == idx) { // Found the requested entry len = tmp; @@ -1421,7 +1402,7 @@ void AddLog(byte loglevel) { char* it = web_log; it++; // Skip web_log_index - it += strcspn(it, "\1"); // Skip log line + it += strchrspn(it, '\1'); // Skip log line it++; // Skip delimiting "\1" memmove(web_log, it, WEB_LOG_SIZE -(it-web_log)); // Move buffer forward to remove oldest log line } diff --git a/sonoff/webserver.ino b/sonoff/webserver.ino index e632d657a..1256879be 100644 --- a/sonoff/webserver.ino +++ b/sonoff/webserver.ino @@ -708,8 +708,7 @@ void HandleModuleConfiguration() for (byte j = 0; j < GPIO_SENSOR_END; j++) { if (!GetUsedInModule(j, cmodule.gp.io)) { - snprintf_P(stemp, sizeof(stemp), kSensors[j]); - snprintf_P(mqtt_data, sizeof(mqtt_data), HTTP_SCRIPT_MODULE2, j, j, stemp); + snprintf_P(mqtt_data, sizeof(mqtt_data), HTTP_SCRIPT_MODULE2, j, j, GetTextIndexed(stemp, sizeof(stemp), j, kSensorNames)); page += mqtt_data; } } diff --git a/sonoff/xsns_06_dht.ino b/sonoff/xsns_06_dht.ino index 620b57cd5..cdcd72f1d 100644 --- a/sonoff/xsns_06_dht.ino +++ b/sonoff/xsns_06_dht.ino @@ -203,7 +203,7 @@ void DhtInit() pinMode(Dht[i].pin, INPUT_PULLUP); Dht[i].lastreadtime = 0; Dht[i].lastresult = 0; - strcpy_P(Dht[i].stype, kSensors[Dht[i].type]); + GetTextIndexed(Dht[i].stype, sizeof(Dht[i].stype), Dht[i].type, kSensorNames); if (dht_sensors > 1) { snprintf_P(Dht[i].stype, sizeof(Dht[i].stype), PSTR("%s-%02d"), Dht[i].stype, Dht[i].pin); }