Merge pull request #16470 from gemu2015/scripter_update

google chart fix
This commit is contained in:
Theo Arends 2022-09-09 09:06:35 +02:00 committed by GitHub
commit d2058c5d5c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 159 additions and 83 deletions

View File

@ -137,6 +137,10 @@ int32_t web_send_file(char mc, char *file);
#define STASK_PRIO 1
#endif
#ifdef ESP32
#include <driver/i2s.h>
#endif
#ifdef USE_SCRIPT_TIMER
#include <Ticker.h>
Ticker Script_ticker1;
@ -1042,10 +1046,14 @@ char *script;
int32_t udp_call(char *url, uint32_t port, char *sbuf) {
WiFiUDP udp;
IPAddress adr = adr.fromString(url);
IPAddress adr;
adr.fromString(url);
udp.begin(port);
udp.beginPacket(adr, port);
udp.write((const uint8_t*)sbuf, strlen(sbuf));
udp.endPacket();
udp.flush();
udp.stop();
return 0;
}
@ -1225,16 +1233,16 @@ float median_array(float *array, uint16_t len) {
uint8_t flg;
float min = FLT_MAX;
for (uint8_t hcnt = 0; hcnt<len/2+1; hcnt++) {
for (uint8_t mcnt = 0; mcnt<len; mcnt++) {
for (uint16_t hcnt = 0; hcnt < len / 2 + 1; hcnt++) {
for (uint16_t mcnt = 0; mcnt < len; mcnt++) {
flg = 0;
for (uint8_t icnt = 0; icnt<index; icnt++) {
for (uint16_t icnt = 0; icnt < index; icnt++) {
if (ind[icnt] == mcnt) {
flg = 1;
}
}
if (!flg) {
if (array[mcnt]<min) {
if (array[mcnt] < min) {
min = array[mcnt];
mind = mcnt;
}
@ -1251,9 +1259,9 @@ float median_array(float *array, uint16_t len) {
float *Get_MFAddr(uint8_t index, uint16_t *len, uint16_t *ipos) {
*len = 0;
uint8_t *mp = (uint8_t*)glob_script_mem.mfilt;
for (uint8_t count = 0; count<MAXFILT; count++) {
for (uint8_t count = 0; count < MAXFILT; count++) {
struct M_FILT *mflp = (struct M_FILT*)mp;
if (count==index) {
if (count == index) {
*len = mflp->numvals & AND_FILT_MASK;
if (ipos) *ipos = mflp->index;
return mflp->rbuff;
@ -1270,10 +1278,9 @@ char *get_array_by_name(char *lp, float **fp, uint16_t *alen, uint16_t *ipos) {
uint8_t vtype;
while (*lp == ' ') lp++;
lp = isvar(lp, &vtype, &ind, 0, 0, 0);
if (vtype==VAR_NV) return 0;
if (vtype&STYPE) return 0;
if (vtype == VAR_NV) return 0;
if (vtype & STYPE) return 0;
uint16_t index = glob_script_mem.type[ind.index].index;
if (glob_script_mem.type[ind.index].bits.is_filter) {
float *fa = Get_MFAddr(index, alen, ipos);
*fp = fa;
@ -1287,8 +1294,8 @@ float *get_array_by_name(char *name, uint16_t *alen) {
struct T_INDEX ind;
uint8_t vtype;
isvar(name, &vtype, &ind, 0, 0, 0);
if (vtype==VAR_NV) return 0;
if (vtype&STYPE) return 0;
if (vtype == VAR_NV) return 0;
if (vtype & STYPE) return 0;
uint16_t index = glob_script_mem.type[ind.index].index;
if (glob_script_mem.type[ind.index].bits.is_filter) {
@ -1763,7 +1770,16 @@ uint32_t res = 0;
}
uint8_t script_hexnibble(char chr) {
uint8_t rVal = 0;
if (isdigit(chr)) {
rVal = chr - '0';
} else {
if (chr >= 'A' && chr <= 'F') rVal = chr + 10 - 'A';
if (chr >= 'a' && chr <= 'f') rVal = chr + 10 - 'a';
}
return rVal;
}
#ifdef USE_LIGHT
uint32_t HSVToRGB(uint16_t hue, uint8_t saturation, uint8_t value) {
@ -2527,6 +2543,18 @@ chknext:
tind->index = SCRIPT_CBSIZE;
goto exit_settable;
}
#ifdef USE_W8960
extern void W8960_SetGain(uint8_t sel, uint16_t value);
if (!strncmp(lp, "codec(", 6)) {
float sel;
lp = GetNumericArgument(lp + 6, OPER_EQU, &sel, gv);
lp = GetNumericArgument(lp, OPER_EQU, &fvar, gv);
W8960_SetGain(sel, fvar);
fvar = 0;
goto nfuncexit;
}
#endif
break;
case 'd':
if (!strncmp(vname, "day", 3)) {
@ -3380,7 +3408,23 @@ chknext:
goto nfuncexit;
}
#endif
if (!strncmp(lp, "hstr(", 5)) {
char hstr[SCRIPT_MAXSSIZE];
lp = GetStringArgument(lp + 5, OPER_EQU, hstr, 0);
uint16_t cnt;
uint16_t slen = strlen(hstr);
slen &= 0xfffe;
for (cnt = 0; cnt < slen; cnt += 2) {
hstr[cnt / 2] = (script_hexnibble(hstr[cnt]) << 4) | script_hexnibble(hstr[cnt + 1] );
}
hstr[cnt / 2 + 1] = 0;
if (sp) strlcpy(sp, hstr, strlen(hstr));
len = 0;
lp++;
goto strexit;
}
break;
case 'i':
if (!strncmp(lp, "ins(", 4)) {
char s1[SCRIPT_MAXSSIZE];
@ -3478,6 +3522,34 @@ chknext:
goto nfuncexit;
}
#endif // USE_SCRIPT_I2C
#ifdef ESP32
#ifdef USE_I2S_AUDIO
if (!strncmp(lp, "i2sw(", 5)) {
float port;
lp = GetNumericArgument(lp + 5, OPER_EQU, &port, gv);
uint16_t alen = 0;
float *fa = 0;
lp = get_array_by_name(lp, &fa, &alen, 0);
if (!fa) {
fvar = -1;
goto nfuncexit;
}
lp = GetNumericArgument(lp, OPER_EQU, &fvar, gv);
uint32_t bytes_written;
int16_t *wp = (int16_t*)special_malloc(alen * 2);
if (wp) {
for (uint16_t cnt = 0; cnt < alen; cnt++) {
wp[cnt] = fa[cnt];
}
i2s_write((i2s_port_t)port, (const uint8_t*)wp, fvar, &bytes_written, 0);
free(wp);
fvar = bytes_written;
}
goto nfuncexit;
}
#endif // USE_I2S_AUDIO
#endif // ESP32
break;
#ifdef USE_KNX
@ -3834,7 +3906,6 @@ chknext:
#endif
*/
#ifdef ESP32
if (!strncmp(lp, "rr(", 3)) {
lp+=4;
len = 0;
@ -3848,7 +3919,6 @@ chknext:
}
goto strexit;
}
#endif
break;
case 's':
@ -4625,6 +4695,7 @@ extern char *SML_GetSVal(uint32_t index);
script_sspi_trans(index, fpd, len, fvar);
break;
}
lp++;
len = 0;
goto exit;
}
@ -8284,6 +8355,11 @@ String ScriptUnsubscribe(const char * data, int data_len)
#if defined(ESP32) && defined(USE_UFILESYS) && defined(USE_SCRIPT_ALT_DOWNLOAD)
#ifndef SCRIPT_DLPORT
#define SCRIPT_DLPORT 82
#endif
ESP8266WebServer *http82_Server;
bool download82_busy;
@ -8343,15 +8419,15 @@ void WebServer82Init(void) {
if (http82_Server != nullptr) {
return;
}
http82_Server = new ESP8266WebServer(82);
http82_Server = new ESP8266WebServer(SCRIPT_DLPORT);
if (http82_Server != nullptr) {
http82_Server->on(UriGlob("/ufs/*"), HTTP_GET, ScriptServeFile82);
http82_Server->on("/", HTTP_GET, Handle82Root);
http82_Server->onNotFound(Handle82NotFound);
http82_Server->begin();
AddLog(LOG_LEVEL_INFO, PSTR("HTTP Server 82 started"));
AddLog(LOG_LEVEL_INFO, PSTR("HTTP DL Server started on port: %d "), SCRIPT_DLPORT);
} else {
AddLog(LOG_LEVEL_INFO, PSTR("HTTP Server 82 failed"));
AddLog(LOG_LEVEL_INFO, PSTR("HTTP DL Server failed"));
}
}
@ -8954,16 +9030,16 @@ uint16_t cipos = 0;
}
char *gc_send_labels(char *lp,uint32_t anum) {
WSContentSend_PD("[");
WSContentSend_P("[");
for (uint32_t cnt = 0; cnt < anum + 1; cnt++) {
char label[SCRIPT_MAXSSIZE];
lp = GetStringArgument(lp, OPER_EQU, label, 0);
SCRIPT_SKIP_SPACES
WSContentSend_PD(SCRIPT_MSG_GTE1, label);
WSContentSend_P(SCRIPT_MSG_GTE1, label);
//Serial.printf("labels %s\n",label);
if (cnt<anum) { WSContentSend_PD(","); }
if (cnt<anum) { WSContentSend_P(","); }
}
WSContentSend_PD("],");
WSContentSend_P("],");
return lp;
}
@ -9015,9 +9091,9 @@ uint32_t cnt;
void WCS_DIV(uint8_t flag) {
if (flag & WSO_NODIV) return;
if (flag & WSO_STOP_DIV) {
WSContentSend_PD(SCRIPT_MSG_BUT_STOP);
WSContentSend_P(SCRIPT_MSG_BUT_STOP);
} else {
WSContentSend_PD(SCRIPT_MSG_BUT_START);
WSContentSend_P(SCRIPT_MSG_BUT_START);
}
}
@ -9235,7 +9311,7 @@ const char *gc_str;
lp = GetStringArgument(lp, OPER_EQU, right, 0);
SCRIPT_SKIP_SPACES
WSContentSend_PD(SCRIPT_MSG_SLIDER, left,mid, right, (uint32_t)min, (uint32_t)max, (uint32_t)val, vname);
WSContentSend_P(SCRIPT_MSG_SLIDER, left,mid, right, (uint32_t)min, (uint32_t)max, (uint32_t)val, vname);
lp++;
} else if (!strncmp(lin, "ck(", 3)) {
@ -9260,7 +9336,7 @@ const char *gc_str;
uval = 1;
}
WCS_DIV(specopt);
WSContentSend_PD(SCRIPT_MSG_CHKBOX, center, label, (char*)cp, uval, vname);
WSContentSend_P(SCRIPT_MSG_CHKBOX, center, label, (char*)cp, uval, vname);
WCS_DIV(specopt | WSO_STOP_DIV);
lp++;
} else if (!strncmp(lin, "pd(", 3)) {
@ -9290,7 +9366,7 @@ const char *gc_str;
lp = slp1;
}
WCS_DIV(specopt);
WSContentSend_PD(SCRIPT_MSG_PULLDOWNa, center, vname, pulabel, tsiz, 1, vname, vname);
WSContentSend_P(SCRIPT_MSG_PULLDOWNa, center, vname, pulabel, tsiz, 1, vname, vname);
// get pu labels
uint8_t index = 1;
@ -9313,7 +9389,7 @@ const char *gc_str;
} else {
cp = (char*)"";
}
WSContentSend_PD(SCRIPT_MSG_PULLDOWNb, cp, index, pulabel);
WSContentSend_P(SCRIPT_MSG_PULLDOWNb, cp, index, pulabel);
index++;
}
break;
@ -9325,7 +9401,7 @@ const char *gc_str;
} else {
cp = (char*)"";
}
WSContentSend_PD(SCRIPT_MSG_PULLDOWNb, cp, index, pulabel);
WSContentSend_P(SCRIPT_MSG_PULLDOWNb, cp, index, pulabel);
SCRIPT_SKIP_SPACES
if (*lp == ')') {
lp++;
@ -9333,7 +9409,7 @@ const char *gc_str;
}
index++;
}
WSContentSend_PD(SCRIPT_MSG_PULLDOWNc);
WSContentSend_P(SCRIPT_MSG_PULLDOWNc);
WCS_DIV(specopt | WSO_STOP_DIV);
} else if (!strncmp(lin, "bu(", 3)) {
char *lp = lin + 3;
@ -9347,8 +9423,8 @@ const char *gc_str;
}
uint8_t proz = 100 / bcnt;
if (!optflg && bcnt>1) proz -= 2;
if (optflg) WSContentSend_PD(SCRIPT_MSG_BUT_START_TBL);
else WSContentSend_PD(SCRIPT_MSG_BUT_START);
if (optflg) WSContentSend_P(SCRIPT_MSG_BUT_START_TBL);
else WSContentSend_P(SCRIPT_MSG_BUT_START);
for (uint32_t cnt = 0; cnt < bcnt; cnt++) {
float val;
char *slp = lp;
@ -9378,17 +9454,17 @@ const char *gc_str;
if (!optflg) proz += 2;
}
if (!optflg) {
WSContentSend_PD(SCRIPT_MSG_BUTTONa, proz, uval, vname, cp);
WSContentSend_P(SCRIPT_MSG_BUTTONa, proz, uval, vname, cp);
} else {
WSContentSend_PD(SCRIPT_MSG_BUTTONa_TBL, proz, uval, vname, cp);
WSContentSend_P(SCRIPT_MSG_BUTTONa_TBL, proz, uval, vname, cp);
}
if (bcnt > 1 && cnt < bcnt - 1) {
if (!optflg) WSContentSend_PD(SCRIPT_MSG_BUTTONb, 2);
if (!optflg) WSContentSend_P(SCRIPT_MSG_BUTTONb, 2);
}
lp += 4;
}
if (optflg) WSContentSend_PD(SCRIPT_MSG_BUT_STOP_TBL);
else WSContentSend_PD(SCRIPT_MSG_BUT_STOP);
if (optflg) WSContentSend_P(SCRIPT_MSG_BUT_STOP_TBL);
else WSContentSend_P(SCRIPT_MSG_BUT_STOP);
} else if (!strncmp(lin, "tm(", 3)) {
// time only HH:MM
@ -9418,7 +9494,7 @@ const char *gc_str;
const char *max = PSTR("23:59");
const char *styp = PSTR("sivat");
WCS_DIV(specopt);
WSContentSend_PD(SCRIPT_MSG_TEXTINP_U, center, label, type, vstr, min, max, tsiz, styp, vname);
WSContentSend_P(SCRIPT_MSG_TEXTINP_U, center, label, type, vstr, min, max, tsiz, styp, vname);
WCS_DIV(specopt | WSO_STOP_DIV);
} else if (!strncmp(lin, "tx(", 3)) {
// text
@ -9459,16 +9535,16 @@ const char *gc_str;
SCRIPT_SKIP_SPACES
WCS_DIV(specopt);
const char *styp = PSTR("siva");
WSContentSend_PD(SCRIPT_MSG_TEXTINP_U, center, label, type, str, min, max, tsiz, styp, vname);
WSContentSend_P(SCRIPT_MSG_TEXTINP_U, center, label, type, str, min, max, tsiz, styp, vname);
WCS_DIV(specopt | WSO_STOP_DIV);
} else {
WCS_DIV(specopt);
WSContentSend_PD(SCRIPT_MSG_TEXTINP, center, label, str, tsiz, vname);
WSContentSend_P(SCRIPT_MSG_TEXTINP, center, label, str, tsiz, vname);
WCS_DIV(specopt | WSO_STOP_DIV);
}
} else {
WCS_DIV(specopt);
WSContentSend_PD(SCRIPT_MSG_TEXTINP, center, label, str, tsiz, vname);
WSContentSend_P(SCRIPT_MSG_TEXTINP, center, label, str, tsiz, vname);
WCS_DIV(specopt | WSO_STOP_DIV);
}
lp++;
@ -9514,18 +9590,18 @@ const char *gc_str;
dtostrfd(max, dprec, maxstr);
dtostrfd(step, dprec, stepstr);
WCS_DIV(specopt);
WSContentSend_PD(SCRIPT_MSG_NUMINP, center, label, minstr, maxstr, stepstr, vstr, tsiz, vname);
WSContentSend_P(SCRIPT_MSG_NUMINP, center, label, minstr, maxstr, stepstr, vstr, tsiz, vname);
WCS_DIV(specopt | WSO_STOP_DIV);
lp++;
} else {
if (mc == 'w' || (specopt & WSO_FORCEPLAIN)) {
WSContentSend_PD(PSTR("%s"), lin);
WSContentSend_P(PSTR("%s"), lin);
} else {
if (optflg) {
WSContentSend_PD(PSTR("<div>%s</div>"), lin);
WSContentSend_P(PSTR("<div>%s</div>"), lin);
} else {
WSContentSend_PD(PSTR("{s}%s{e}"), lin);
WSContentSend_P(PSTR("{s}%s{e}"), lin);
}
}
}
@ -9551,7 +9627,7 @@ exgc:
uint16_t len = (uint32_t)cp - (uint32_t)lin;
strncpy(valstr, lin, len);
valstr[len] = 0;
WSContentSend_PD(PSTR("%s"), valstr);
WSContentSend_P(PSTR("%s"), valstr);
float *fpd = 0;
uint16_t alend;
uint16_t ipos;
@ -9576,14 +9652,14 @@ exgc:
ipos = 0;
}
if (cnt == 0) {
WSContentSend_PD(PSTR("%s"), valstr);
WSContentSend_P(PSTR("%s"), valstr);
} else {
WSContentSend_PD(PSTR(",%s"), valstr);
WSContentSend_P(PSTR(",%s"), valstr);
}
}
}
lp++;
WSContentSend_PD(PSTR("%s"), lp);
WSContentSend_P(PSTR("%s"), lp);
return lp;
}
@ -9594,11 +9670,11 @@ exgc:
uint16_t len = (uint32_t)cp - (uint32_t)lin;
strncpy(valstr, lin, len);
valstr[len] = 0;
WSContentSend_PD(PSTR("%s"), valstr);
WSContentSend_P(PSTR("%s"), valstr);
scripter_sub(cp , 0);
cp = strchr(cp, ')');
if (cp) {
WSContentSend_PD(PSTR("%s"), cp + 1);
WSContentSend_P(PSTR("%s"), cp + 1);
}
return lp;
}
@ -9620,7 +9696,7 @@ exgc:
lp++;
if (!(google_libs & GLIBS_MAIN)) {
google_libs |= GLIBS_MAIN;
WSContentSend_PD(SCRIPT_MSG_GTABLE);
WSContentSend_P(SCRIPT_MSG_GTABLE);
}
gc_str = GC_type(gs_ctype);
@ -9629,24 +9705,24 @@ exgc:
case 'g':
if (!(google_libs & GLIBS_GAUGE)) {
google_libs |= GLIBS_GAUGE;
WSContentSend_PD(SCRIPT_MSG_GAUGE);
WSContentSend_P(SCRIPT_MSG_GAUGE);
}
break;
case 't':
if (!(google_libs & GLIBS_TABLE)) {
google_libs |= GLIBS_TABLE;
WSContentSend_PD(SCRIPT_MSG_TABLE);
WSContentSend_P(SCRIPT_MSG_TABLE);
}
break;
case 'T':
if (!(google_libs & GLIBS_TIMELINE)) {
google_libs |= GLIBS_TIMELINE;
WSContentSend_PD(SCRIPT_MSG_TIMELINE);
WSContentSend_P(SCRIPT_MSG_TIMELINE);
}
break;
}
if (type == 'e') {
WSContentSend_PD(SCRIPT_MSG_GTABLEbx, gc_str, chartindex);
WSContentSend_P(SCRIPT_MSG_GTABLEbx, gc_str, chartindex);
chartindex++;
return lp1;
}
@ -9716,7 +9792,7 @@ exgc:
//Serial.printf("entries %d\n",entries);
if (gs_ctype=='T') {
if (anum && !(entries & 1)) {
WSContentSend_PD(SCRIPT_MSG_GTABLEa);
WSContentSend_P(SCRIPT_MSG_GTABLEa);
char label[SCRIPT_MAXSSIZE];
lp = GetStringArgument(lp, OPER_EQU, label, 0);
SCRIPT_SKIP_SPACES
@ -9724,9 +9800,9 @@ exgc:
lab2[0] = 0;
if (*lp!=')') {
lp = GetStringArgument(lp, OPER_EQU, lab2, 0);
WSContentSend_PD(SCRIPT_MSG_GTABLEe);
WSContentSend_P(SCRIPT_MSG_GTABLEe);
} else {
WSContentSend_PD(SCRIPT_MSG_GTABLEd);
WSContentSend_P(SCRIPT_MSG_GTABLEd);
}
for (uint32_t ind = 0; ind < anum; ind++) {
@ -9747,34 +9823,34 @@ exgc:
}
for (uint32_t cnt = 0; cnt < ventries; cnt += 2) {
WSContentSend_PD("['%s',",lbl);
WSContentSend_P("['%s',",lbl);
if (lab2[0]) {
WSContentSend_PD("'%s',",lbl2);
WSContentSend_P("'%s',",lbl2);
}
uint32_t time = fp[cnt];
WSContentSend_PD(SCRIPT_MSG_GOPT5, time / 60, time % 60);
WSContentSend_PD(",");
WSContentSend_P(SCRIPT_MSG_GOPT5, time / 60, time % 60);
WSContentSend_P(",");
time = fp[cnt + 1];
WSContentSend_PD(SCRIPT_MSG_GOPT5, time / 60, time % 60);
WSContentSend_PD("]");
if (cnt < ventries - 2) { WSContentSend_PD(","); }
WSContentSend_P(SCRIPT_MSG_GOPT5, time / 60, time % 60);
WSContentSend_P("]");
if (cnt < ventries - 2) { WSContentSend_P(","); }
}
if (ind < anum - 1) {
if (ventries) {
WSContentSend_PD(",");
WSContentSend_P(",");
}
}
}
snprintf_P(options,sizeof(options), SCRIPT_MSG_GOPT4);
}
if (tonly) {
WSContentSend_PD("]);");
WSContentSend_P("]);");
return lp1;
//goto nextwebline;
}
} else {
// we need to fetch the labels now
WSContentSend_PD(SCRIPT_MSG_GTABLEa);
WSContentSend_P(SCRIPT_MSG_GTABLEa);
lp = gc_send_labels(lp, anum);
// now we have to export the values
@ -9828,7 +9904,7 @@ exgc:
uint32_t aind = ipos;
if (aind >= entries) aind = entries - 1;
for (uint32_t cnt = 0; cnt < entries; cnt++) {
WSContentSend_PD("['");
WSContentSend_P("['");
char lbl[16];
if (todflg >= 0) {
uint16_t mins = (float)(todflg % divflg) * (float)((float)60 / (float)divflg);
@ -9856,8 +9932,8 @@ exgc:
sprintf(lbl, "%s-%02d", lbl, aind % divflg);
}
}
WSContentSend_PD(lbl);
WSContentSend_PD("',");
WSContentSend_P(lbl);
WSContentSend_P("',");
for (uint32_t ind = 0; ind < anum; ind++) {
char acbuff[32];
float *fp = arrays[ind];
@ -9868,11 +9944,11 @@ exgc:
fval = fp[cnt];
}
f2char(fval, glob_script_mem.script_dprec, glob_script_mem.script_lzero, acbuff);
WSContentSend_PD("%s", acbuff);
if (ind < anum - 1) { WSContentSend_PD(","); }
WSContentSend_P("%s", acbuff);
if (ind < anum - 1) { WSContentSend_P(","); }
}
WSContentSend_PD("]");
if (cnt < entries - 1) { WSContentSend_PD(","); }
WSContentSend_P("]");
if (cnt < entries - 1) { WSContentSend_P(","); }
aind++;
if (aind >= entries) {
aind = 0;
@ -9880,7 +9956,7 @@ exgc:
}
// table complete
if (tonly) {
WSContentSend_PD("]);");
WSContentSend_P("]);");
return lp1;
//goto nextwebline;
}
@ -9949,19 +10025,19 @@ exgc:
(uint32_t)yellowFrom, (uint32_t)yellowTo);
}
}
WSContentSend_PD(SCRIPT_MSG_GTABLEb, options);
WSContentSend_PD(SCRIPT_MSG_GTABLEbx, gc_str, chartindex);
WSContentSend_P(SCRIPT_MSG_GTABLEb, options);
WSContentSend_P(SCRIPT_MSG_GTABLEbx, gc_str, chartindex);
chartindex++;
} else {
WSContentSend_PD(PSTR("%s"), lin);
WSContentSend_P(PSTR("%s"), lin);
}
#else
if (!(specopt&WSO_FORCEMAIN)) {
lin++;
}
WSContentSend_PD(PSTR("%s"), lin);
WSContentSend_P(PSTR("%s"), lin);
} else {
// WSContentSend_PD(PSTR("%s"),lin);
// WSContentSend_P(PSTR("%s"),lin);
#endif //USE_GOOGLE_CHARTS
}
}
@ -10954,7 +11030,7 @@ void script_add_subpage(uint8_t num) {
}
sprintf_P(id, PSTR("/sfd%1d"), num);
Webserver->on(id, wptr);
WSContentSend_PD(HTTP_WEB_FULL_DISPLAY, num, bname);
WSContentSend_P(HTTP_WEB_FULL_DISPLAY, num, bname);
}
}
#endif // SCRIPT_FULL_WEBPAGE