mirror of https://github.com/arendst/Tasmota.git
Merge pull request #13692 from gemu2015/scripter_update
Scripter update
This commit is contained in:
commit
c7e55bedde
|
@ -38,7 +38,7 @@
|
||||||
#include <freertos/queue.h>
|
#include <freertos/queue.h>
|
||||||
#include <esp_log.h>
|
#include <esp_log.h>
|
||||||
#include <driver/gpio.h>
|
#include <driver/gpio.h>
|
||||||
|
#include <lwip/sockets.h>
|
||||||
|
|
||||||
#include <hap.h>
|
#include <hap.h>
|
||||||
|
|
||||||
|
@ -703,9 +703,9 @@ nextline:
|
||||||
|
|
||||||
#define HK_PASSCODE "111-11-111"
|
#define HK_PASSCODE "111-11-111"
|
||||||
int hap_loop_stop(void);
|
int hap_loop_stop(void);
|
||||||
|
int32_t homekit_pars(uint32_t sel);
|
||||||
|
|
||||||
|
int32_t homekit_main(char *desc, uint32_t flag ) {
|
||||||
void homekit_main(char *desc, uint32_t flag ) {
|
|
||||||
if (desc) {
|
if (desc) {
|
||||||
char *cp = desc;
|
char *cp = desc;
|
||||||
cp += 2;
|
cp += 2;
|
||||||
|
@ -724,7 +724,7 @@ void homekit_main(char *desc, uint32_t flag ) {
|
||||||
}
|
}
|
||||||
if (*cp != '\n') {
|
if (*cp != '\n') {
|
||||||
printf("init error\n");
|
printf("init error\n");
|
||||||
return;
|
return -1;
|
||||||
}
|
}
|
||||||
cp++;
|
cp++;
|
||||||
hk_desc = cp;
|
hk_desc = cp;
|
||||||
|
@ -736,17 +736,44 @@ void homekit_main(char *desc, uint32_t flag ) {
|
||||||
hap_loop_stop();
|
hap_loop_stop();
|
||||||
// is just the folder in wrapper
|
// is just the folder in wrapper
|
||||||
hap_platfrom_keystore_erase_partition(hap_platform_keystore_get_nvs_partition_name());
|
hap_platfrom_keystore_erase_partition(hap_platform_keystore_get_nvs_partition_name());
|
||||||
|
} else if (flag < 3) {
|
||||||
|
return homekit_pars(flag);
|
||||||
} else {
|
} else {
|
||||||
hap_loop_stop();
|
hap_loop_stop();
|
||||||
}
|
}
|
||||||
return;
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!hk_desc) return;
|
if (!hk_desc) return -2;
|
||||||
|
|
||||||
/* Create the application thread */
|
/* Create the application thread */
|
||||||
xTaskCreate(smart_outlet_thread_entry, SMART_OUTLET_TASK_NAME, SMART_OUTLET_TASK_STACKSIZE, NULL, SMART_OUTLET_TASK_PRIORITY, NULL);
|
xTaskCreate(smart_outlet_thread_entry, SMART_OUTLET_TASK_NAME, SMART_OUTLET_TASK_STACKSIZE, NULL, SMART_OUTLET_TASK_PRIORITY, NULL);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#include <lwip/sockets.h>
|
||||||
|
|
||||||
|
int32_t homekit_pars(uint32_t sel) {
|
||||||
|
|
||||||
|
if (sel == 0) {
|
||||||
|
// return CONFIG_LWIP_MAX_SOCKETS;
|
||||||
|
return MEMP_NUM_NETCONN;
|
||||||
|
} else if (sel == 1) {
|
||||||
|
return LWIP_SOCKET_OFFSET;
|
||||||
|
} else {
|
||||||
|
struct sockaddr name;
|
||||||
|
socklen_t len = sizeof(name);
|
||||||
|
uint8_t open_socs = 0;
|
||||||
|
for (uint32_t cnt = 0; cnt < CONFIG_LWIP_MAX_SOCKETS; cnt++) {
|
||||||
|
//if (!getsockname(cnt, &name, &len)) {
|
||||||
|
if (!getpeername(LWIP_SOCKET_OFFSET + cnt, &name, &len)) {
|
||||||
|
open_socs++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return open_socs;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // ESP32
|
#endif // ESP32
|
||||||
|
|
|
@ -205,11 +205,17 @@ void alt_eeprom_readBytes(uint32_t adr, uint32_t len, uint8_t *buf) {
|
||||||
|
|
||||||
#endif // LITTLEFS_SCRIPT_SIZE
|
#endif // LITTLEFS_SCRIPT_SIZE
|
||||||
|
|
||||||
|
#include <TasmotaSerial.h>
|
||||||
|
|
||||||
#ifdef TESLA_POWERWALL
|
#ifdef TESLA_POWERWALL
|
||||||
#include "powerwall.h"
|
#include "powerwall.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef USE_DISPLAY_DUMP
|
||||||
|
#include <renderer.h>
|
||||||
|
extern Renderer *renderer;
|
||||||
|
#endif
|
||||||
|
|
||||||
// offsets epoch readings by 1.1.2019 00:00:00 to fit into float with second resolution
|
// offsets epoch readings by 1.1.2019 00:00:00 to fit into float with second resolution
|
||||||
#ifndef EPOCH_OFFSET
|
#ifndef EPOCH_OFFSET
|
||||||
#define EPOCH_OFFSET 1546300800
|
#define EPOCH_OFFSET 1546300800
|
||||||
|
@ -231,7 +237,7 @@ extern FS *ufsp;
|
||||||
|
|
||||||
#endif // USE_UFILESYS
|
#endif // USE_UFILESYS
|
||||||
|
|
||||||
extern "C" void homekit_main(char *, uint32_t);
|
extern "C" int32_t homekit_main(char *, uint32_t);
|
||||||
|
|
||||||
#ifdef SUPPORT_MQTT_EVENT
|
#ifdef SUPPORT_MQTT_EVENT
|
||||||
#include <LinkedList.h> // Import LinkedList library
|
#include <LinkedList.h> // Import LinkedList library
|
||||||
|
@ -434,6 +440,9 @@ struct SCRIPT_MEM {
|
||||||
bool homekit_running = false;
|
bool homekit_running = false;
|
||||||
#endif // USE_HOMEKIT
|
#endif // USE_HOMEKIT
|
||||||
uint32_t epoch_offset = EPOCH_OFFSET;
|
uint32_t epoch_offset = EPOCH_OFFSET;
|
||||||
|
#ifdef USE_SCRIPT_SERIAL
|
||||||
|
TasmotaSerial *sp;
|
||||||
|
#endif
|
||||||
} glob_script_mem;
|
} glob_script_mem;
|
||||||
|
|
||||||
|
|
||||||
|
@ -3176,6 +3185,143 @@ chknext:
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
#endif //USE_SML_M
|
#endif //USE_SML_M
|
||||||
|
|
||||||
|
#ifdef USE_SCRIPT_SERIAL
|
||||||
|
if (!strncmp(vname, "so(", 3)) {
|
||||||
|
float rxpin, txpin, br;
|
||||||
|
lp = GetNumericArgument(lp + 3, OPER_EQU, &rxpin, gv);
|
||||||
|
SCRIPT_SKIP_SPACES
|
||||||
|
lp = GetNumericArgument(lp, OPER_EQU, &txpin, gv);
|
||||||
|
SCRIPT_SKIP_SPACES
|
||||||
|
lp = GetNumericArgument(lp, OPER_EQU, &br, gv);
|
||||||
|
SCRIPT_SKIP_SPACES
|
||||||
|
uint32_t sconfig = TS_SERIAL_8N1;
|
||||||
|
if (*lp!=')') {
|
||||||
|
// serial options, must be 3 chars 8N1, 7E2 etc
|
||||||
|
uint8_t bits = *lp++ & 0xf;
|
||||||
|
uint8_t parity = 0;
|
||||||
|
if (*lp == 'E') parity = 1;
|
||||||
|
if (*lp == 'O') parity = 2;
|
||||||
|
lp++;
|
||||||
|
uint8_t stopb = (*lp++ & 0x3) - 1;
|
||||||
|
sconfig = (bits - 5) + (parity * 8) + stopb * 4;
|
||||||
|
}
|
||||||
|
fvar= -1;
|
||||||
|
if (glob_script_mem.sp) {
|
||||||
|
fvar == -1;
|
||||||
|
} else {
|
||||||
|
if (Is_gpio_used(rxpin) || Is_gpio_used(txpin)) {
|
||||||
|
AddLog(LOG_LEVEL_INFO, PSTR("warning: pins already used"));
|
||||||
|
}
|
||||||
|
|
||||||
|
glob_script_mem.sp = new TasmotaSerial(rxpin, txpin, 1);
|
||||||
|
if (glob_script_mem.sp) {
|
||||||
|
uint32_t config;
|
||||||
|
#ifdef ESP8266
|
||||||
|
config = pgm_read_byte(kTasmotaSerialConfig + sconfig);
|
||||||
|
#endif // ESP8266
|
||||||
|
|
||||||
|
#ifdef ESP32
|
||||||
|
config = pgm_read_dword(kTasmotaSerialConfig + sconfig);
|
||||||
|
#endif // ESP32
|
||||||
|
fvar = glob_script_mem.sp->begin(br, config);
|
||||||
|
uint32_t savc = Settings->serial_config;
|
||||||
|
Settings->serial_config = sconfig;
|
||||||
|
AddLog(LOG_LEVEL_INFO, PSTR("Serial port set to %s %d bit/s at rx=%d tx=%d"), GetSerialConfig().c_str(), (uint32_t)br, (uint32_t)rxpin, (uint32_t)txpin);
|
||||||
|
Settings->serial_config = savc;
|
||||||
|
if (rxpin == 3 and txpin == 1) ClaimSerial();
|
||||||
|
|
||||||
|
} else {
|
||||||
|
fvar = -2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
lp++;
|
||||||
|
len = 0;
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
if (!strncmp(vname, "sw(", 3)) {
|
||||||
|
char str[SCRIPT_MAXSSIZE];
|
||||||
|
lp = GetStringArgument(lp + 3, OPER_EQU, str, 0);
|
||||||
|
fvar = -1;
|
||||||
|
if (glob_script_mem.sp) {
|
||||||
|
glob_script_mem.sp->write(str, strlen(str));
|
||||||
|
fvar = 0;
|
||||||
|
}
|
||||||
|
lp++;
|
||||||
|
len = 0;
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
if (!strncmp(vname, "swb(", 4)) {
|
||||||
|
lp = GetNumericArgument(lp + 4, OPER_EQU, &fvar, 0);
|
||||||
|
fvar = -1;
|
||||||
|
if (glob_script_mem.sp) {
|
||||||
|
glob_script_mem.sp->write((uint8_t)fvar);
|
||||||
|
fvar = 0;
|
||||||
|
}
|
||||||
|
lp++;
|
||||||
|
len = 0;
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
if (!strncmp(vname, "sa(", 3)) {
|
||||||
|
fvar = -1;
|
||||||
|
if (glob_script_mem.sp) {
|
||||||
|
fvar = glob_script_mem.sp->available();
|
||||||
|
}
|
||||||
|
lp++;
|
||||||
|
len = 0;
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
if (!strncmp(vname, "srb(", 3)) {
|
||||||
|
fvar = -1;
|
||||||
|
if (glob_script_mem.sp) {
|
||||||
|
fvar = glob_script_mem.sp->available();
|
||||||
|
if (fvar > 0) {
|
||||||
|
fvar = glob_script_mem.sp->read();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
lp++;
|
||||||
|
len = 0;
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
if (!strncmp(vname, "sp(", 3)) {
|
||||||
|
fvar = -1;
|
||||||
|
if (glob_script_mem.sp) {
|
||||||
|
fvar = glob_script_mem.sp->available();
|
||||||
|
if (fvar > 0) {
|
||||||
|
fvar = glob_script_mem.sp->peek();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
lp++;
|
||||||
|
len = 0;
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
if (!strncmp(vname, "sr(", 4)) {
|
||||||
|
char str[SCRIPT_MAXSSIZE];
|
||||||
|
memset(str, 0, sizeof(str));
|
||||||
|
fvar = -1;
|
||||||
|
if (glob_script_mem.sp) {
|
||||||
|
for (uint8_t index = 0; index < sizeof(str) - 1; index++) {
|
||||||
|
if (!glob_script_mem.sp->available()) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
str[index] = glob_script_mem.sp->read();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
lp++;
|
||||||
|
len = 0;
|
||||||
|
if (sp) strlcpy(sp, str, glob_script_mem.max_ssize);
|
||||||
|
goto strexit;;
|
||||||
|
}
|
||||||
|
if (!strncmp(vname, "sc(", 3)) {
|
||||||
|
fvar = -1;
|
||||||
|
if (Script_Close_Serial()) {
|
||||||
|
fvar = 0;
|
||||||
|
}
|
||||||
|
lp+=4;
|
||||||
|
len = 0;
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
#endif //USE_SCRIPT_SERIAL
|
||||||
break;
|
break;
|
||||||
case 't':
|
case 't':
|
||||||
if (!strncmp(vname, "time", 4)) {
|
if (!strncmp(vname, "time", 4)) {
|
||||||
|
@ -3280,6 +3426,21 @@ chknext:
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef USE_TIMERS
|
||||||
|
if (!strncmp(vname, "ttget(", 6)) {
|
||||||
|
lp = GetNumericArgument(lp + 6, OPER_EQU, &fvar, gv);
|
||||||
|
SCRIPT_SKIP_SPACES
|
||||||
|
uint8_t index = fvar;
|
||||||
|
if (index < 1 || index > MAX_TIMERS) index = 1;
|
||||||
|
lp = GetNumericArgument(lp, OPER_EQU, &fvar, gv);
|
||||||
|
SCRIPT_SKIP_SPACES
|
||||||
|
fvar = get_tpars(index - 1, fvar);
|
||||||
|
lp++;
|
||||||
|
len = 0;
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
case 'u':
|
case 'u':
|
||||||
if (!strncmp(vname, "uptime", 6)) {
|
if (!strncmp(vname, "uptime", 6)) {
|
||||||
|
@ -3382,7 +3543,7 @@ chknext:
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
#endif // USE_TTGO_WATCH
|
#endif // USE_TTGO_WATCH
|
||||||
#if defined(USE_FT5206) || defined(USE_XPT2046) || defined(USE_LILYGO47)
|
#if defined(USE_FT5206) || defined(USE_XPT2046) || defined(USE_LILYGO47) || defined(USE_M5EPD47)
|
||||||
if (!strncmp(vname, "wtch(", 5)) {
|
if (!strncmp(vname, "wtch(", 5)) {
|
||||||
lp = GetNumericArgument(lp + 5, OPER_EQU, &fvar, gv);
|
lp = GetNumericArgument(lp + 5, OPER_EQU, &fvar, gv);
|
||||||
fvar = Touch_Status(fvar);
|
fvar = Touch_Status(fvar);
|
||||||
|
@ -4498,6 +4659,9 @@ int16_t Run_script_sub(const char *type, int8_t tlen, struct GVARS *gv) {
|
||||||
// set pin mode
|
// set pin mode
|
||||||
lp = GetNumericArgument(lp + 6, OPER_EQU, &fvar, 0);
|
lp = GetNumericArgument(lp + 6, OPER_EQU, &fvar, 0);
|
||||||
int8_t pinnr = fvar;
|
int8_t pinnr = fvar;
|
||||||
|
if (Is_gpio_used(pinnr)) {
|
||||||
|
AddLog(LOG_LEVEL_INFO, PSTR("warning: pins already used"));
|
||||||
|
}
|
||||||
SCRIPT_SKIP_SPACES
|
SCRIPT_SKIP_SPACES
|
||||||
uint8_t mode = 0;
|
uint8_t mode = 0;
|
||||||
if ((*lp=='I') || (*lp=='O') || (*lp=='P')) {
|
if ((*lp=='I') || (*lp=='O') || (*lp=='P')) {
|
||||||
|
@ -5000,6 +5164,25 @@ int16_t Run_script_sub(const char *type, int8_t tlen, struct GVARS *gv) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef USE_SCRIPT_SERIAL
|
||||||
|
bool Script_Close_Serial() {
|
||||||
|
if (glob_script_mem.sp) {
|
||||||
|
glob_script_mem.sp->flush();
|
||||||
|
delay(100);
|
||||||
|
delete(glob_script_mem.sp);
|
||||||
|
glob_script_mem.sp = 0;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#endif //USE_SCRIPT_SERIAL
|
||||||
|
|
||||||
|
bool Is_gpio_used(uint8_t gpiopin) {
|
||||||
|
if ((gpiopin < nitems(TasmotaGlobal.gpio_pin)) && (TasmotaGlobal.gpio_pin[gpiopin] > 0)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
void ScripterEvery100ms(void) {
|
void ScripterEvery100ms(void) {
|
||||||
static uint8_t xsns_index = 0;
|
static uint8_t xsns_index = 0;
|
||||||
|
@ -5440,6 +5623,8 @@ void ScriptSaveSettings(void) {
|
||||||
|
|
||||||
SaveScript();
|
SaveScript();
|
||||||
|
|
||||||
|
} else {
|
||||||
|
AddLog(LOG_LEVEL_INFO, PSTR("script memory error"));
|
||||||
}
|
}
|
||||||
|
|
||||||
SaveScriptEnd();
|
SaveScriptEnd();
|
||||||
|
@ -5481,6 +5666,10 @@ void SaveScriptEnd(void) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef USE_SCRIPT_SERIAL
|
||||||
|
Script_Close_Serial();
|
||||||
|
#endif
|
||||||
|
|
||||||
Run_Scripter(">B\n", 3, 0);
|
Run_Scripter(">B\n", 3, 0);
|
||||||
Run_Scripter(">BS", 3, 0);
|
Run_Scripter(">BS", 3, 0);
|
||||||
|
|
||||||
|
@ -6529,9 +6718,8 @@ char buff[512];
|
||||||
|
|
||||||
if (sflg) {
|
if (sflg) {
|
||||||
#ifdef USE_DISPLAY_DUMP
|
#ifdef USE_DISPLAY_DUMP
|
||||||
|
//#include <renderer.h>
|
||||||
#include <renderer.h>
|
//extern Renderer *renderer;
|
||||||
extern Renderer *renderer;
|
|
||||||
|
|
||||||
// screen copy
|
// screen copy
|
||||||
#define fileHeaderSize 14
|
#define fileHeaderSize 14
|
||||||
|
@ -6541,7 +6729,9 @@ extern Renderer *renderer;
|
||||||
uint8_t *bp = renderer->framebuffer;
|
uint8_t *bp = renderer->framebuffer;
|
||||||
uint8_t *lbuf = (uint8_t*)special_malloc(Settings->display_width * 3 + 2);
|
uint8_t *lbuf = (uint8_t*)special_malloc(Settings->display_width * 3 + 2);
|
||||||
if (!lbuf) return;
|
if (!lbuf) return;
|
||||||
int8_t bpp = renderer->disp_bpp;
|
uint8_t dmflg = 0;
|
||||||
|
if (renderer->disp_bpp & 0x40) dmflg = 1;
|
||||||
|
int8_t bpp = renderer->disp_bpp & 0xbf;;
|
||||||
uint8_t *lbp;
|
uint8_t *lbp;
|
||||||
uint8_t fileHeader[fileHeaderSize];
|
uint8_t fileHeader[fileHeaderSize];
|
||||||
createBitmapFileHeader(Settings->display_height , Settings->display_width , fileHeader);
|
createBitmapFileHeader(Settings->display_height , Settings->display_width , fileHeader);
|
||||||
|
@ -6549,8 +6739,7 @@ extern Renderer *renderer;
|
||||||
uint8_t infoHeader[infoHeaderSize];
|
uint8_t infoHeader[infoHeaderSize];
|
||||||
createBitmapInfoHeader(Settings->display_height, Settings->display_width, infoHeader );
|
createBitmapInfoHeader(Settings->display_height, Settings->display_width, infoHeader );
|
||||||
Webserver->client().write((uint8_t *)infoHeader, infoHeaderSize);
|
Webserver->client().write((uint8_t *)infoHeader, infoHeaderSize);
|
||||||
|
if (bpp < 0) {
|
||||||
if (bpp == -1) {
|
|
||||||
for (uint32_t lins = Settings->display_height - 1; lins >= 0 ; lins--) {
|
for (uint32_t lins = Settings->display_height - 1; lins >= 0 ; lins--) {
|
||||||
lbp = lbuf;
|
lbp = lbuf;
|
||||||
for (uint32_t cols = 0; cols < Settings->display_width; cols ++) {
|
for (uint32_t cols = 0; cols < Settings->display_width; cols ++) {
|
||||||
|
@ -6570,16 +6759,30 @@ extern Renderer *renderer;
|
||||||
if (bpp == 4) {
|
if (bpp == 4) {
|
||||||
for (uint32_t cols = 0; cols < Settings->display_width; cols += 2) {
|
for (uint32_t cols = 0; cols < Settings->display_width; cols += 2) {
|
||||||
uint8_t pixel;
|
uint8_t pixel;
|
||||||
for (uint32_t cnt = 0; cnt <= 1; cnt++) {
|
if (!dmflg) {
|
||||||
if (cnt & 1) {
|
for (uint32_t cnt = 0; cnt <= 1; cnt++) {
|
||||||
pixel = *bp >> 4;
|
if (cnt & 1) {
|
||||||
} else {
|
pixel = *bp >> 4;
|
||||||
pixel = *bp & 0xf;
|
} else {
|
||||||
|
pixel = *bp & 0xf;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
pixel *= 15;
|
pixel *= 15;
|
||||||
*--lbp = pixel;
|
*--lbp = pixel;
|
||||||
*--lbp = pixel;
|
*--lbp = pixel;
|
||||||
*--lbp = pixel;
|
*--lbp = pixel;
|
||||||
|
} else {
|
||||||
|
for (uint32_t cnt = 0; cnt <= 1; cnt++) {
|
||||||
|
if (!(cnt & 1)) {
|
||||||
|
pixel = *bp >> 4;
|
||||||
|
} else {
|
||||||
|
pixel = *bp & 0xf;
|
||||||
|
}
|
||||||
|
pixel *= 15;
|
||||||
|
*--lbp = pixel;
|
||||||
|
*--lbp = pixel;
|
||||||
|
*--lbp = pixel;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
bp++;
|
bp++;
|
||||||
}
|
}
|
||||||
|
@ -6601,8 +6804,8 @@ extern Renderer *renderer;
|
||||||
bp++;
|
bp++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Webserver->client().write((const char*)lbuf, Settings->display_width * 3);
|
||||||
}
|
}
|
||||||
Webserver->client().write((const char*)lbuf, Settings->display_width * 3);
|
|
||||||
}
|
}
|
||||||
if (lbuf) free(lbuf);
|
if (lbuf) free(lbuf);
|
||||||
Webserver->client().stop();
|
Webserver->client().stop();
|
||||||
|
@ -6796,6 +6999,13 @@ const char SCRIPT_MSG_SLIDER[] PROGMEM =
|
||||||
const char SCRIPT_MSG_CHKBOX[] PROGMEM =
|
const char SCRIPT_MSG_CHKBOX[] PROGMEM =
|
||||||
"<div><center><label><b>%s</b><input type='checkbox' %s onchange='seva(%d,\"%s\")'></label></div>";
|
"<div><center><label><b>%s</b><input type='checkbox' %s onchange='seva(%d,\"%s\")'></label></div>";
|
||||||
|
|
||||||
|
const char SCRIPT_MSG_PULLDOWNa[] PROGMEM =
|
||||||
|
"<div><label for=\'pu_%s\'>%s:</label><select style='width:200px' name='pu%d' id='pu_%s' onchange='seva(value,\"%s\")'>";
|
||||||
|
const char SCRIPT_MSG_PULLDOWNb[] PROGMEM =
|
||||||
|
"<option %s value='%d'>%s</option>";
|
||||||
|
const char SCRIPT_MSG_PULLDOWNc[] PROGMEM =
|
||||||
|
"</select></div>";
|
||||||
|
|
||||||
const char SCRIPT_MSG_TEXTINP[] PROGMEM =
|
const char SCRIPT_MSG_TEXTINP[] PROGMEM =
|
||||||
"<div><center><label><b>%s</b><input type='text' value='%s' style='width:200px' onfocusin='pr(0)' onfocusout='pr(1)' onchange='siva(value,\"%s\")'></label></div>";
|
"<div><center><label><b>%s</b><input type='text' value='%s' style='width:200px' onfocusin='pr(0)' onfocusout='pr(1)' onchange='siva(value,\"%s\")'></label></div>";
|
||||||
|
|
||||||
|
@ -7098,7 +7308,43 @@ void ScriptWebShow(char mc) {
|
||||||
uval = 1;
|
uval = 1;
|
||||||
}
|
}
|
||||||
WSContentSend_PD(SCRIPT_MSG_CHKBOX, label, (char*)cp, uval, vname);
|
WSContentSend_PD(SCRIPT_MSG_CHKBOX, label, (char*)cp, uval, vname);
|
||||||
|
} else if (!strncmp(lin, "pd(", 3)) {
|
||||||
|
// pull down
|
||||||
|
char *lp = lin + 3;
|
||||||
|
char *slp = lp;
|
||||||
|
float val;
|
||||||
|
lp = GetNumericArgument(lp, OPER_EQU, &val, 0);
|
||||||
|
SCRIPT_SKIP_SPACES
|
||||||
|
|
||||||
|
char vname[16];
|
||||||
|
ScriptGetVarname(vname, slp, sizeof(vname));
|
||||||
|
|
||||||
|
SCRIPT_SKIP_SPACES
|
||||||
|
char pulabel[SCRIPT_MAXSSIZE];
|
||||||
|
lp = GetStringArgument(lp, OPER_EQU, pulabel, 0);
|
||||||
|
|
||||||
|
WSContentSend_PD(SCRIPT_MSG_PULLDOWNa, vname, pulabel, 1, vname, vname);
|
||||||
|
|
||||||
|
// get pu labels
|
||||||
|
uint8_t index = 1;
|
||||||
|
while (*lp) {
|
||||||
|
SCRIPT_SKIP_SPACES
|
||||||
|
lp = GetStringArgument(lp, OPER_EQU, pulabel, 0);
|
||||||
|
char *cp;
|
||||||
|
if (val == index) {
|
||||||
|
cp = (char*)"selected";
|
||||||
|
} else {
|
||||||
|
cp = (char*)"";
|
||||||
|
}
|
||||||
|
WSContentSend_PD(SCRIPT_MSG_PULLDOWNb, cp, index, pulabel);
|
||||||
|
SCRIPT_SKIP_SPACES
|
||||||
|
if (*lp == ')') {
|
||||||
|
lp++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
index++;
|
||||||
|
}
|
||||||
|
WSContentSend_PD(SCRIPT_MSG_PULLDOWNc);
|
||||||
} else if (!strncmp(lin, "bu(", 3)) {
|
} else if (!strncmp(lin, "bu(", 3)) {
|
||||||
char *lp = lin + 3;
|
char *lp = lin + 3;
|
||||||
uint8_t bcnt = 0;
|
uint8_t bcnt = 0;
|
||||||
|
@ -8295,6 +8541,42 @@ void lvgl_setup(void) {
|
||||||
|
|
||||||
#endif // USE_LVGL
|
#endif // USE_LVGL
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef USE_TIMERS
|
||||||
|
int32_t get_tpars(uint32_t index, uint32_t sel) {
|
||||||
|
int32_t retval = 0;
|
||||||
|
switch (sel) {
|
||||||
|
case 0:
|
||||||
|
retval = Settings->timer[index].time;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
//retval = Settings->timer[index].window;
|
||||||
|
retval = timer_window[index];
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
retval = Settings->timer[index].repeat;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
retval = Settings->timer[index].days;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
retval = Settings->timer[index].device;
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
retval = Settings->timer[index].power;
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
retval = Settings->timer[index].mode;
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
retval = Settings->timer[index].arm;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
/*********************************************************************************************\
|
/*********************************************************************************************\
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
Loading…
Reference in New Issue