From 1e617f3c87f965c20710ab54e06f5a18127acd1e Mon Sep 17 00:00:00 2001 From: Martin Ger Date: Sat, 16 Dec 2017 13:49:42 +0100 Subject: [PATCH] added command backlog --- README.md | 8 +++++++- SCRIPTING.md | 2 +- firmware/0x00000.bin | Bin 45152 -> 45264 bytes firmware/0x10000.bin | Bin 303644 -> 303980 bytes firmware/sha1sums | 4 ++-- user/cli.c | 42 ++++++++++++++++++++++++++++++++++++++++-- user/global.h | 4 ++++ user/lang.c | 4 ++++ user/user_config.h | 5 +++++ user/user_main.c | 19 +++++++++++++++++-- 10 files changed, 80 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index adeec91..4bd9666 100644 --- a/README.md +++ b/README.md @@ -102,12 +102,18 @@ The esp_uMQTT_broker comes with a build-in scripting engine. A script enables th The script specific CLI commands are: -- script [_portno_|delete]: opens port for upload of scripts or deletes the current script +- script [_portno_|url|delete]: opens port for upload of scripts, downloads a script from an URL, or just deletes the current one - show script [_line_no_]: dumps the currently active script starting with the given line (dumpy only about 1 KB, repeat command for more lines) - set @[num] _value_: sets the flash variable "num" (for use in scripts) to the given inital value (must be shorter than 63 chars) - set pwm_period _period_: sets the PWM period in terms of 200ns slots (default: 5000, = 0.1ms ^= 1KHz) - show vars: dumps all variables of the current program incl. the persistent flash variables + +Debug commands: - set script_logging [0|1]: switches logging of script execution on or off (not permanently stored in the configuration) +- set backlog _buffersize_: sets the size of the backlog buffer (0 = backlog off, default, not permanently stored in the configuration) +- show backlog: dumps the backlog to the remote console + +The backlog buffer stores the most recent console outputs of the running script and the CLI. If you detect an error situation you can log into the remote console and dump the recent output with "show backlog". Scripts with size up to 4KB are uploaded to the esp_uMQTT_broker using a network interface. diff --git a/SCRIPTING.md b/SCRIPTING.md index 9eea9f2..0f7969d 100644 --- a/SCRIPTING.md +++ b/SCRIPTING.md @@ -129,7 +129,7 @@ This event happens when the GPIO pin with the given number generates an interrup ``` http_response ``` -This event happens when an HTTP-request has been sent with "http_get" and a response arrives. The actual body of the response can be accessed in the actions via the special variable _$this_http_body_, the HTTP return code via the special variable _$this_http_code_. These variables are only defined inside the "on http_response" clause. +This event happens when an HTTP-request has been sent with "http_get" or "http_post" and a response arrives. The actual body of the response can be accessed in the actions via the special variable _$this_http_body_, the HTTP return code via the special variable _$this_http_code_. To identify responses from multiple requests the special variables _$this_http_host_ and _$this_http_path_ can be tested. They contain the host and the path of the request. All these variables are only defined inside the "on http_response" clause. ## Actions ``` diff --git a/firmware/0x00000.bin b/firmware/0x00000.bin index 9a79b8faea7027450d633654e0faad0748fa267b..326016545db628182b6240cdad3663428078b17b 100644 GIT binary patch delta 5192 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 delta 5157 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 K#G&q_7XA&mSFU6L diff --git a/firmware/0x10000.bin b/firmware/0x10000.bin index 2d40db27db9fca42d2c61309497e60a50797f302..9f2aa9f36b01457e6817627bf4736750c78a9420 100644 GIT binary patch delta 39075 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 delta 38667 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 z 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 diff --git a/firmware/sha1sums b/firmware/sha1sums index 11d5ed5..0128af6 100644 --- a/firmware/sha1sums +++ b/firmware/sha1sums @@ -1,2 +1,2 @@ -033d48114a262ca73b6b505079e92bb2870b934d 0x00000.bin -efa7d3a70c006f6d7e4cd8115dfde375275324f8 0x10000.bin +e3485af0d2789bc28327150b3106c84550f33f08 0x00000.bin +90aacf464f6572c424438b96ea484051f66b5735 0x10000.bin diff --git a/user/cli.c b/user/cli.c index d3ec61b..b85390c 100644 --- a/user/cli.c +++ b/user/cli.c @@ -337,6 +337,21 @@ void ICACHE_FLASH_ATTR console_handle_command(struct espconn *pespconn) { #endif goto command_handled_2; } +#ifdef BACKLOG + if (nTokens >= 2 && strcmp(tokens[1], "backlog") == 0) { + uint16_t len; + if (backlog_buffer == NULL) + goto command_handled_2; + while (ringbuf_bytes_free(console_tx_buffer) && (len=ringbuf_bytes_used(backlog_buffer))) { + if (len > sizeof(response)-1) + len = sizeof(response)-1; + ringbuf_memcpy_from(response, backlog_buffer, len); + to_console(response); + } + + goto command_handled_2; + } +#endif #ifdef SCRIPTED if (nTokens >= 2 && strcmp(tokens[1], "script") == 0) { if (config.locked) { @@ -880,15 +895,38 @@ void ICACHE_FLASH_ATTR console_handle_command(struct espconn *pespconn) { if (strcmp(tokens[1], "broker_access") == 0) { config.mqtt_broker_access = atoi(tokens[2]) & (LOCAL_ACCESS | REMOTE_ACCESS); - os_sprintf(response, "Broker access set\r\n", config.config_port); + os_sprintf(response, "Broker access set\r\n"); goto command_handled; } if (strcmp(tokens[1], "broker_autoretain") == 0) { config.auto_retained = atoi(tokens[2]) != 0; - os_sprintf(response, "Broker autoretain set\r\n", config.config_port); + os_sprintf(response, "Broker autoretain set\r\n"); goto command_handled; } +#ifdef BACKLOG + if (strcmp(tokens[1], "backlog") == 0) { + int backlog_size = atoi(tokens[2]); + if (backlog_size != 0) { + if (backlog_buffer != NULL) { + os_sprintf(response, "Backlog already set\r\n"); + goto command_handled; + } + backlog_buffer = ringbuf_new(backlog_size); + if (backlog_buffer == NULL) { + os_sprintf(response, "No memory\r\n"); + goto command_handled; + } + os_sprintf(response, "Backlog set to %d chars\r\n", backlog_size); + } else { + if (backlog_buffer != NULL) { + ringbuf_free(&backlog_buffer); + } + os_sprintf(response, "Backlog off\r\n"); + } + goto command_handled; + } +#endif #ifdef SCRIPTED if (strcmp(tokens[1], "script_logging") == 0) { lang_logging = atoi(tokens[2]); diff --git a/user/global.h b/user/global.h index 8706b16..825b98b 100644 --- a/user/global.h +++ b/user/global.h @@ -41,6 +41,10 @@ void http_script_cb(char *response_body, int http_status, char *response_headers void script_connected_cb(void *arg); #endif +#ifdef BACKLOG +ringbuf_t backlog_buffer; +#endif + void console_handle_command(struct espconn *pespconn); void to_console(char *str); void do_command(char *t1, char *t2, char *t3); diff --git a/user/lang.c b/user/lang.c index d715ef5..973173b 100644 --- a/user/lang.c +++ b/user/lang.c @@ -4,6 +4,8 @@ #include "lang.h" #include "global.h" +#ifdef SCRIPTED + #ifdef NTP #include "ntp.h" #endif @@ -1950,3 +1952,5 @@ void ICACHE_FLASH_ATTR interpreter_http_reply(char *hostname, char *path, char * } #endif +#endif /* SCRIPTED */ + diff --git a/user/user_config.h b/user/user_config.h index 118824b..768a5ee 100644 --- a/user/user_config.h +++ b/user/user_config.h @@ -98,6 +98,11 @@ #define REMOTE_CONFIG 1 #define CONSOLE_SERVER_PORT 7777 +// +// Define this to support console backlog +// +#define BACKLOG 1 + // // Size of the console buffers // diff --git a/user/user_main.c b/user/user_main.c index 3cb62a0..ea0e7a3 100644 --- a/user/user_main.c +++ b/user/user_main.c @@ -257,8 +257,8 @@ void ICACHE_FLASH_ATTR free_script(void) { #endif /* SCRIPTED */ 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); + char payload[len]; if (len == 0) return; @@ -270,8 +270,18 @@ void ICACHE_FLASH_ATTR console_send_response(struct espconn *pespconn, bool seri client_sent_pending = true; } } else { - if (system_output >= SYSTEM_OUTPUT_CMD || serial_force) + if (system_output >= SYSTEM_OUTPUT_CMD || serial_force) { UART_Send(0, payload, len); + } +#ifdef BACKLOG + if (backlog_buffer != NULL) { + char outbuf[10]; + if (ringbuf_bytes_free(backlog_buffer) < len && !ringbuf_is_empty(backlog_buffer)) { + ringbuf_memcpy_from(outbuf, backlog_buffer, sizeof(outbuf)); + } + ringbuf_memcpy_into(backlog_buffer, payload, len); + } +#endif } } @@ -506,7 +516,9 @@ static void ICACHE_FLASH_ATTR user_procTask(os_event_t * events) { char data[bytes_count+1]; ringbuf_memcpy_from(data, console_rx_buffer, bytes_count); data[bytes_count] = '\0'; +#ifdef SCRIPTED interpreter_serial_input(data, bytes_count); +#endif } else { console_handle_command(pespconn); } @@ -739,6 +751,9 @@ void user_init() { do_ip_config = false; my_ip.addr = 0; t_old = 0; +#ifdef BACKLOG + backlog_buffer = NULL; +#endif console_rx_buffer = ringbuf_new(MAX_CON_CMD_SIZE); console_tx_buffer = ringbuf_new(MAX_CON_SEND_SIZE);