From ffab86c7e8c737baf10ed486dc84212fc77b795f Mon Sep 17 00:00:00 2001 From: Martin Ger Date: Thu, 30 Nov 2017 21:54:38 +0100 Subject: [PATCH] added serial in scripting --- README.md | 6 +-- SCRIPTING.md | 28 +++++++++-- driver/new_uart.c | 11 ++++- firmware/0x00000.bin | Bin 44880 -> 45072 bytes firmware/0x10000.bin | Bin 302140 -> 302828 bytes firmware/sha1sums | 4 +- include/driver/uart.h | 1 + user/cli.c | 9 ++-- user/config_flash.c | 2 +- user/config_flash.h | 4 ++ user/global.h | 3 ++ user/lang.c | 108 +++++++++++++++++++++++++++++++++++++----- user/lang.h | 4 +- user/user_config.h | 2 +- user/user_main.c | 40 +++++++++++++--- 15 files changed, 186 insertions(+), 36 deletions(-) diff --git a/README.md b/README.md index 3d4e6b3..adeec91 100644 --- a/README.md +++ b/README.md @@ -39,9 +39,9 @@ General commands: - reset [factory]: resets the esp, 'factory' optionally resets WiFi params to default values (works on a locked device only from serial console) - set speed [80|160]: sets the CPU clock frequency (default 80 Mhz) - set config_port _portno_: sets the port number of the console login (default is 7777, 0 disables remote console config) -- set config_access _mode_: controls the networks that allow config access (0: no access, 1: only internal, 2: only external, 3: both (default)) +- set config_access [0|1|2|3]: controls the networks that allow config access (0: no access, 1: only internal, 2: only external, 3: both (default)) - set bitrate [bps]: sets the serial bitrate (default 115200 bps) -- set system_output [0|1]: enables/disables system info/warning output to serial port (default: on=1) +- set system_output [0|1|2]: configures systems handling of the serial port (0: none/script, 1: cli commands/responses, 2: cli and info/warnings (default)). Mode 0 means, that any serial input is forwarded to the scripting engine if enabled - quit: terminates a remote session WiFi and network related commands: @@ -57,7 +57,7 @@ WiFi and network related commands: - set ip dhcp: configures dynamic IP address for the ESP in the uplink network, default - set netmask _netmask_: sets a static netmask for the uplink network - set gw _gw-addr_: sets a static gateway address in the uplink network -- set mdns_mode [0|1|2]: selects, which interface should be announced via mDNS (0=none (default), 1 = STA, 2 = SoftAP) +- set mdns_mode [0|1|2]: selects, which interface should be announced via mDNS (0: none (default), 1: STA, 2: SoftAP) - scan: does a scan for APs While the user interface looks similar to my esp_wifi_repeater at https://github.com/martin-ger/esp_wifi_repeater this does NO NAT routing. AP and STA network are stricly separated and there is no routing in between. The only possible connection via both networks is the uMQTT broker that listens on both interfaces. diff --git a/SCRIPTING.md b/SCRIPTING.md index 072f3a5..89e5c40 100644 --- a/SCRIPTING.md +++ b/SCRIPTING.md @@ -34,8 +34,9 @@ In general, scripts conform to the following BNF: mqttconnect | timer | alarm | - gpio_interrupt (pullup|nopullup) | topic (local|remote) | + gpio_interrupt (pullup|nopullup) | + serial | http_response ::= publish (local|remote) [retained] | @@ -49,6 +50,7 @@ In general, scripts conform to the following BNF: gpio_pinmode (input|output) [pullup] | gpio_out | gpio_pwm | + serial_out | if then [else ] endif | print | println | system | @@ -56,13 +58,14 @@ In general, scripts conform to the following BNF: ::= | | () | not () | retained_topic() | substr(,,) | - csvstr(,,) | json_parse (,) + csvstr(,,) | eatwhite () | + json_parse (,) := '=' | '>' | gte | str_ge | str_gte | '+' | '-' | '*' | '|' | div := | | # | $[any ASCII]* | @ | - gpio_in() | $adc | $this_item | $this_data | $this_gpio | - $this_http_code | $this_http_body | $timestamp | $weekday + gpio_in() | $adc | $this_item | $this_data | $this_serial | + $this_gpio | $this_http_code | $this_http_body | $timestamp | $weekday := "[any ASCII]*" | [any ASCII]* @@ -111,6 +114,11 @@ alarm ``` This event happens when the time-of-day stored in the alarm with the given number is reached. It happens once per day. Alarm times are given as "hh:mm:ss" and are only available if NTP is enabled. Make sure to set the correct "ntp_timezone" to adjust UTC to your location. +``` +serial +``` +This event happens when the "system_output" mode is set to 0 and a carriage return (CR)-terminated string has been received from the serial input. Instead of interpreting it as cli command it is forwarded to the scripting engine. The input value is availabe via the special variable _$this_serial_. + ``` gpio_interrupt (pullup|nopullup) ``` @@ -177,6 +185,11 @@ gpio_pwm ``` Defines the GPIO pin num as PWM output and sets the PWM duty cycle to the given value. The value should be in the range from 0-1000 (0 = off, 1000 = full duty). By default the PWM frequency is 1000Hz. It can be changed with the _pwm_period_ config parameter. +``` +serial_out +``` +Sends the given expression to serial port. + ``` system ``` @@ -214,7 +227,12 @@ Extracts characters from a string. The two constant numbers give the starting po ``` csvstr(,,) ``` -Extracts strings from a CSV-list (correctly a string with a delimiter character). The constant number gives the position (first is postion 1) and the char is the delimiter. Examples: csvstr("one,two,three", 2, ",") is "two", csvstr("system/test/1", 2, "/") is "test" +Extracts strings from a CSV-list (correctly a string with a delimiter character). The constant number gives the position (first is postion 1) and the char is the delimiter. Examples: csvstr("one,two,three", 2, ",") is "two", csvstr("system/test/1", 2, "/") is "test". + +``` +eatwhite() +``` +Eliminates all whitespaces from a string. ``` json_parse (,) diff --git a/driver/new_uart.c b/driver/new_uart.c index dde2a24..5f8b373 100644 --- a/driver/new_uart.c +++ b/driver/new_uart.c @@ -29,6 +29,7 @@ #ifdef _ENABLE_CONSOLE_INTEGRATION uint8_t linked_to_console = 0; + uint8_t echo_on = 1; #endif extern UartDevice UartDev; @@ -68,6 +69,7 @@ void ICACHE_FLASH_ATTR UART_init_console(UartBautRate uart0_br, rxBuff = rxbuffer; txBuff = txBuffer; linked_to_console = 1; + echo_on = 1; uart_config(UART0); UART_SetPrintPort(UART0); @@ -224,6 +226,11 @@ int UART_Recv(uint8 uart_no, char *buffer, int max_buf_len) return index; } +int ICACHE_FLASH_ATTR UART_Echo(uint8 echo) +{ + echo_on = echo; +} + int UART_Send(uint8 uart_no, char *buffer, int len) { int index = 0; @@ -311,7 +318,9 @@ static void uart0_rx_intr_handler(void *para) //if (ch == '\r') ch = '\n'; ringbuf_memcpy_into(rxBuff, &ch, 1); #if _ENABLE_CONSOLE_INTEGRATION == 1 - uart_tx_one_char(uart_no, ch); + if (echo_on){ + uart_tx_one_char(uart_no, ch); + } if (ch == '\r') { system_os_post(0, SIG_CONSOLE_RX, 0); diff --git a/firmware/0x00000.bin b/firmware/0x00000.bin index c0504214d054190fdd9ab164ea819ab5c23dfcb8..d42723920900585d9541044fc6061cbaed67ba17 100644 GIT binary patch delta 5937 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 delta 46456 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 diff --git a/firmware/sha1sums b/firmware/sha1sums index e83aaef..42cccb8 100644 --- a/firmware/sha1sums +++ b/firmware/sha1sums @@ -1,2 +1,2 @@ -65c1e77051ecf1d65eb38017df1096f84b5daa4a 0x00000.bin -a4ce86573e9a5a60ae6665a47d624522e054a0b2 0x10000.bin +f8fcbc261888a7fe6c4d2db2e9b9ce2b13de7a29 0x00000.bin +476c9ae67db3a4117c410d9b664315f83590c9d8 0x10000.bin diff --git a/include/driver/uart.h b/include/driver/uart.h index b9bf4ed..49b5f0c 100644 --- a/include/driver/uart.h +++ b/include/driver/uart.h @@ -229,5 +229,6 @@ void UART_init_console(UartBautRate uart0_br, ringbuf_t rxbuffer, ringbuf_t txBuffer); +int UART_Echo(uint8 echo); #endif diff --git a/user/cli.c b/user/cli.c index d43d3dc..d3ec61b 100644 --- a/user/cli.c +++ b/user/cli.c @@ -263,9 +263,10 @@ void ICACHE_FLASH_ATTR console_handle_command(struct espconn *pespconn) { os_sprintf(response, "Serial bitrate: %d\r\n", config.bit_rate); to_console(response); - if (!config.system_output) - to_console("System output: off\r\n"); - + if (config.system_output < SYSTEM_OUTPUT_INFO) { + os_sprintf(response, "System output: %s\r\n", config.system_output==SYSTEM_OUTPUT_NONE?"none":"command reply"); + to_console(response); + } goto command_handled_2; } @@ -768,7 +769,7 @@ void ICACHE_FLASH_ATTR console_handle_command(struct espconn *pespconn) { if (strcmp(tokens[1],"system_output") == 0) { config.system_output = atoi(tokens[2]); - os_sprintf(response, "System output %s\r\n", config.system_output?"on":"off"); + os_sprintf(response, "System output set to %d\r\n", config.system_output); goto command_handled; } diff --git a/user/config_flash.c b/user/config_flash.c index 8ca08ae..c57482c 100644 --- a/user/config_flash.c +++ b/user/config_flash.c @@ -31,7 +31,7 @@ void config_load_default(sysconfig_p config) { config->my_netmask.addr = 0; // use DHCP config->my_gw.addr = 0; // use DHCP - config->system_output = 1; + config->system_output = SYSTEM_OUTPUT_INFO; config->bit_rate = 115200; config->mdns_mode = 0; // no mDNS diff --git a/user/config_flash.h b/user/config_flash.h index 0ec743b..6d2444e 100644 --- a/user/config_flash.h +++ b/user/config_flash.h @@ -15,6 +15,10 @@ #define MAGIC_NUMBER 0x015005fd +#define SYSTEM_OUTPUT_INFO 2 +#define SYSTEM_OUTPUT_CMD 1 +#define SYSTEM_OUTPUT_NONE 0 + typedef struct { // To check if the structure is initialized or not in flash diff --git a/user/global.h b/user/global.h index 75792f2..8706b16 100644 --- a/user/global.h +++ b/user/global.h @@ -43,3 +43,6 @@ void script_connected_cb(void *arg); void console_handle_command(struct espconn *pespconn); void to_console(char *str); +void do_command(char *t1, char *t2, char *t3); +void con_print(uint8_t *str); +void serial_out(uint8_t *str); diff --git a/user/lang.c b/user/lang.c index 6ef412b..20aebf4 100644 --- a/user/lang.c +++ b/user/lang.c @@ -2,10 +2,8 @@ #include "mem.h" #include "osapi.h" #include "lang.h" -#include "user_config.h" -#include "config_flash.h" -#include "mqtt/mqtt_topics.h" -#include "mqtt/mqtt_retainedlist.h" +#include "global.h" + #ifdef NTP #include "ntp.h" #endif @@ -30,10 +28,6 @@ #define lang_log(...) {if (lang_logging){char log_buffer[256]; os_sprintf (log_buffer, "%s: ", get_timestr()); con_print(log_buffer); os_sprintf (log_buffer, __VA_ARGS__); con_print(log_buffer);}} //#define lang_log //os_printf -extern uint8_t *my_script; -extern void do_command(char *t1, char *t2, char *t3); -extern void con_print(uint8_t *str); - static char EOT[] = "end of text"; #define len_check(x) \ if (interpreter_status==SYNTAX_CHECK && next_token+(x) >= max_token) \ @@ -72,6 +66,9 @@ char *interpreter_data; int interpreter_data_len; int interpreter_timer; int interpreter_timestamp; +bool in_serial_statement; +char *interpreter_serial_data; +int interpreter_serial_data_len; #ifdef GPIO bool in_gpio_statement; int interpreter_gpio; @@ -464,6 +461,7 @@ int ICACHE_FLASH_ATTR parse_statement(int next_token) { while ((next_token = syn_chk ? next_token : search_token(next_token, "on")) < max_token) { in_topic_statement = false; + in_serial_statement = false; #ifdef GPIO in_gpio_statement = false; #endif @@ -588,6 +586,16 @@ int ICACHE_FLASH_ATTR parse_event(int next_token, bool * happend) { } return next_token + 2; } + + if (is_token(next_token, "serial")) { + lang_debug("event serial\r\n"); + in_serial_statement = true; + + *happend = (interpreter_status == SERIAL_INPUT); + if (*happend) + lang_log("on serial\r\n"); + return next_token + 1; + } #ifdef GPIO if (is_token(next_token, "gpio_interrupt")) { lang_debug("event gpio\r\n"); @@ -632,7 +640,7 @@ int ICACHE_FLASH_ATTR parse_event(int next_token, bool * happend) { return next_token + 1; } #endif - return syntax_error(next_token, "'init', 'mqttconnect', 'topic', 'gpio_interrupt', 'alarm', 'http_response', or 'timer' expected"); + return syntax_error(next_token, "'init', 'mqttconnect', 'topic', 'gpio_interrupt', 'serial', 'alarm', 'http_response', or 'timer' expected"); } int ICACHE_FLASH_ATTR parse_action(int next_token, bool doit) { @@ -662,6 +670,20 @@ int ICACHE_FLASH_ATTR parse_action(int next_token, bool doit) { } } + else if (is_token(next_token, "serial_out")) { + char *p_char; + int p_len; + Value_Type p_type; + + len_check(1); + if ((next_token = parse_expression(next_token + 1, &p_char, &p_len, &p_type, doit)) == -1) + return -1; + if (doit) { + lang_log("serial_out '%s'\r\n", p_char); + serial_out(p_char); + } + } + else if (is_token(next_token, "system")) { char *p_char; int p_len; @@ -1131,6 +1153,47 @@ int ICACHE_FLASH_ATTR parse_expression(int next_token, char **data, int *data_le } } } + + else if (is_token(next_token, "eatwhite")) { + lang_debug("val eatwhite\r\n"); + + len_check(3); + if (syn_chk && !is_token(next_token+1, "(")) + return syntax_error(next_token+1, "expected '('"); + + char *str_data; + int str_data_len; + Value_Type str_data_type; + // parse path string + if ((next_token = parse_expression(next_token + 2, &str_data, &str_data_len, &str_data_type, doit)) == -1) + return -1; + if (!doit) + str_data_len = 0; + char str[str_data_len+1]; + if (doit) + os_strcpy(str, str_data); + + if (syn_chk && !is_token(next_token, ")")) + return syntax_error(next_token, "expected ')'"); + next_token++; + + if (doit) { + int i, j; + + for (i=0, j=0; i 0 expected"); - num--; next_token++; if (syn_chk && !is_token(next_token, ",")) @@ -1237,7 +1299,7 @@ int ICACHE_FLASH_ATTR parse_expression(int next_token, char **data, int *data_le int i; char *p, *q; - for (i=0, p=q=str_data; i<=num; p++) { + for (i=0, p=q=str; i<=num; p++) { if (*p == ch || *p == '\0') { i++; if (i > num) { @@ -1496,6 +1558,17 @@ int ICACHE_FLASH_ATTR parse_value(int next_token, char **data, int *data_len, Va *data_type = STRING_T; return next_token + 1; } + + else if (is_token(next_token, "$this_serial")) { + lang_debug("val $this_serial\r\n"); + + if (!in_serial_statement) + return syntax_error(next_token, "undefined $this_serial"); + *data = interpreter_serial_data; + *data_len = interpreter_serial_data_len; + *data_type = DATA_T; + return next_token + 1; + } #ifdef GPIO else if (is_token(next_token, "$this_gpio")) { lang_debug("val $this_gpio\r\n"); @@ -1735,6 +1808,19 @@ int ICACHE_FLASH_ATTR interpreter_topic_received(const char *topic, const char * return parse_statement(0); } +int ICACHE_FLASH_ATTR interpreter_serial_input(const char *data, int data_len) { + if (!script_enabled) + return -1; + + lang_debug("interpreter_topic_received\r\n"); + + interpreter_status = SERIAL_INPUT; + interpreter_serial_data = (char *)data; + interpreter_serial_data_len = data_len; + + return parse_statement(0); +} + #ifdef HTTPC void ICACHE_FLASH_ATTR interpreter_http_reply(char *response_body, int http_status, char *response_headers, int body_size) { if (!script_enabled) diff --git a/user/lang.h b/user/lang.h index 23fa1db..202ac59 100644 --- a/user/lang.h +++ b/user/lang.h @@ -3,8 +3,7 @@ #include "mqtt/mqtt_server.h" - -typedef enum {SYNTAX_CHECK, CONFIG, INIT, MQTT_CLIENT_CONNECT, WIFI_CONNECT, TOPIC_LOCAL, TOPIC_REMOTE, TIMER, GPIO_INT, ALARM, HTTP_RESPONSE} Interpreter_Status; +typedef enum {SYNTAX_CHECK, CONFIG, INIT, MQTT_CLIENT_CONNECT, WIFI_CONNECT, TOPIC_LOCAL, TOPIC_REMOTE, TIMER, SERIAL_INPUT, GPIO_INT, ALARM, HTTP_RESPONSE} Interpreter_Status; typedef enum {STRING_T, DATA_T} Value_Type; typedef struct _var_entry_t { @@ -43,6 +42,7 @@ int interpreter_init(); int interpreter_mqtt_connect(void); int interpreter_wifi_connect(void); int interpreter_topic_received(const char *topic, const char *data, int data_len, bool local); +int interpreter_serial_input(const char *data, int data_len); void init_timestamps(uint8_t *curr_time); void check_timestamps(uint8_t *curr_time); diff --git a/user/user_config.h b/user/user_config.h index f938713..118824b 100644 --- a/user/user_config.h +++ b/user/user_config.h @@ -113,7 +113,7 @@ #define MAX_RETAINED_LEN 0x1000 -typedef enum {SIG_DO_NOTHING=0, SIG_START_SERVER=1, SIG_UART0, SIG_TOPIC_RECEIVED, SIG_SCRIPT_LOADED, SIG_SCRIPT_HTTP_LOADED, SIG_CONSOLE_TX_RAW, SIG_CONSOLE_TX, SIG_CONSOLE_RX} USER_SIGNALS; +typedef enum {SIG_DO_NOTHING=0, SIG_START_SERVER=1, SIG_UART0, SIG_TOPIC_RECEIVED, SIG_SCRIPT_LOADED, SIG_SCRIPT_HTTP_LOADED, SIG_CONSOLE_TX_RAW, SIG_CONSOLE_TX, SIG_SERIAL_TX, SIG_CONSOLE_RX} USER_SIGNALS; #define LOCAL_ACCESS 0x01 #define REMOTE_ACCESS 0x02 diff --git a/user/user_main.c b/user/user_main.c index bb18b08..3cb62a0 100644 --- a/user/user_main.c +++ b/user/user_main.c @@ -44,6 +44,8 @@ static void user_procTask(os_event_t * events); static os_timer_t ptimer; +static int system_output; + /* Some stats */ uint64_t t_old; @@ -254,7 +256,7 @@ void ICACHE_FLASH_ATTR free_script(void) { } #endif /* SCRIPTED */ -void ICACHE_FLASH_ATTR console_send_response(struct espconn *pespconn) { +void ICACHE_FLASH_ATTR console_send_response(struct espconn *pespconn, bool serial_force) { char payload[MAX_CON_SEND_SIZE]; uint16_t len = ringbuf_bytes_used(console_tx_buffer); @@ -268,7 +270,8 @@ void ICACHE_FLASH_ATTR console_send_response(struct espconn *pespconn) { client_sent_pending = true; } } else { - UART_Send(0, &payload, len); + if (system_output >= SYSTEM_OUTPUT_CMD || serial_force) + UART_Send(0, payload, len); } } @@ -277,6 +280,11 @@ void ICACHE_FLASH_ATTR con_print(uint8_t *str) { system_os_post(user_procTaskPrio, SIG_CONSOLE_TX_RAW, (ETSParam) console_conn); } +void ICACHE_FLASH_ATTR serial_out(uint8_t *str) { + ringbuf_memcpy_into(console_tx_buffer, str, os_strlen(str)); + system_os_post(user_procTaskPrio, SIG_SERIAL_TX, (ETSParam) NULL); +} + bool ICACHE_FLASH_ATTR delete_retainedtopics() { clear_retainedtopics(); blob_zero(RETAINED_SLOT, MAX_RETAINED_LEN); @@ -351,7 +359,7 @@ static void ICACHE_FLASH_ATTR tcp_client_sent_cb(void *arg) { struct espconn *pespconn = (struct espconn *)arg; client_sent_pending = false; - console_send_response(pespconn); + console_send_response(pespconn, false); } @@ -472,10 +480,11 @@ static void ICACHE_FLASH_ATTR user_procTask(os_event_t * events) { { ringbuf_memcpy_into(console_tx_buffer, "CMD>", 4); } + case SIG_CONSOLE_TX_RAW: { struct espconn *pespconn = (struct espconn *)events->par; - console_send_response(pespconn); + console_send_response(pespconn, false); if (pespconn != 0 && remote_console_disconnect) espconn_disconnect(pespconn); @@ -483,10 +492,24 @@ static void ICACHE_FLASH_ATTR user_procTask(os_event_t * events) { } break; + case SIG_SERIAL_TX: + { + console_send_response(NULL, true); + } + break; + case SIG_CONSOLE_RX: { struct espconn *pespconn = (struct espconn *)events->par; - console_handle_command(pespconn); + if (pespconn == 0 && system_output == SYSTEM_OUTPUT_NONE) { + int bytes_count = ringbuf_bytes_used(console_rx_buffer); + char data[bytes_count+1]; + ringbuf_memcpy_from(data, console_rx_buffer, bytes_count); + data[bytes_count] = '\0'; + interpreter_serial_input(data, bytes_count); + } else { + console_handle_command(pespconn); + } } break; @@ -761,11 +784,16 @@ void user_init() { // Set bit rate to config value uart_div_modify(0, UART_CLK_FREQ / config.bit_rate); - if (!config.system_output) { + system_output = config.system_output; + if (system_output < SYSTEM_OUTPUT_INFO) { // all system output to /dev/null system_set_os_print(0); os_install_putc1(void_write_char); } + if (system_output < SYSTEM_OUTPUT_CMD) { + // disable UART echo + UART_Echo(0); + } // Configure the AP and start it, if required