implemented loopback option SRM

This commit is contained in:
2017-09-06 14:44:42 +02:00
parent 6d98d2c6da
commit 5f6566a6fd
8 changed files with 61 additions and 14 deletions
+1
View File
@@ -51,6 +51,7 @@ return [
'term.fn_alt_mode' => 'SS3 Fn keys',
'term.show_config_links' => 'Show nav links',
'term.show_buttons' => 'Show buttons',
'term.loopback' => 'Local Echo',
// terminal color labels
'color.0' => 'Black',
+6
View File
@@ -152,6 +152,12 @@
<input type="hidden" id="show_config_links" name="show_config_links" value="%show_config_links%">
</div>
<div class="Row checkbox" >
<label><?= tr('term.loopback') ?></label><!--
--><span class="box" tabindex=0 role=checkbox></span>
<input type="hidden" id="loopback" name="loopback" value="%loopback%">
</div>
<div class="Row buttons">
<a class="button icn-ok" href="#" onclick="qs('#form-2').submit()"><?= tr('apply') ?></a>
</div>
+12
View File
@@ -74,6 +74,18 @@
Show (`h`) or hide (`l`) menu/help links under the screen.
</td>
</tr>
<tr>
<td>
<code>
\e[12h \\
\e[12l
</code>
</td>
<td>
Enable (`h`) or disable (`l`) Send-Receive Mode (SRM).
SRM is the opposite of Local Echo, meaning `\e[12h` disables and `\e[12l` enables Local Echo.
</td>
</tr>
<tr>
<td>`\e[8;<i>r</i>;<i>c</i>t`</td>
<td>Set screen size (this is a command borrowed from xterm)</td>
+4
View File
@@ -552,6 +552,10 @@ static void ICACHE_FLASH_ATTR do_csi_privattr(CSI_Data *opts)
if (n == 4) {
screen_set_insert_mode(yn);
}
if (n == 12) {
// SRM is inverted, according to vt510 manual
termconf_scratch.loopback = !yn;
}
else if (n == 20) {
screen_set_newline_mode(yn);
}
+10 -8
View File
@@ -206,22 +206,23 @@ void ICACHE_FLASH_ATTR updateSockRx(Websock *ws, char *data, int len, int flags)
char c = data[0];
switch (c) {
case 's':
// pass string verbatim
#if LOOPBACK
for(int i=4;i<strlen(data); i++) {
ansi_parser(data[i]);
}
#else
// pass string verbatim
if (termconf_scratch.loopback) {
for (int i = 1; i < strlen(data); i++) {
ansi_parser(data[i]);
}
}
UART_SendAsync(data+1, -1);
#endif
break;
case 'b':
// action button press
btnNum = (u8) (data[1]);
if (btnNum > 0 && btnNum < 10) {
UART_SendAsync((const char *) &btnNum, 1); // TODO this is where we use user-configured codes
UART_SendAsync(termconf->btn_msg[btnNum], -1);
}
break;
case 'm':
case 'p':
case 'r':
@@ -235,6 +236,7 @@ void ICACHE_FLASH_ATTR updateSockRx(Websock *ws, char *data, int len, int flags)
sendMouseAction(c,y,x,b,m);
break;
default:
ws_warn("Bad command.");
}
+11 -2
View File
@@ -132,6 +132,12 @@ cgiTermCfgSetParams(HttpdConnData *connData)
termconf->show_config_links = (bool)n;
}
if (GET_ARG("loopback")) {
dbg("Loopback: %s", buff);
n = atoi(buff);
termconf->loopback = (bool)n;
}
if (GET_ARG("default_fg")) {
dbg("Screen default FG: %s", buff);
n = atoi(buff);
@@ -162,7 +168,7 @@ cgiTermCfgSetParams(HttpdConnData *connData)
strncpy_safe(termconf->title, buff, 64); // ATTN those must match the values in
}
for (int i = 1; i <= 5; i++) {
for (int i = 1; i <= TERM_BTN_COUNT; i++) {
sprintf(buff, "btn%d", i);
if (GET_ARG(buff)) {
dbg("Button%d default text: \"%s\"", i, buff);
@@ -230,6 +236,9 @@ tplTermCfg(HttpdConnData *connData, char *token, void **arg)
else if (streq(token, "show_config_links")) {
sprintf(buff, "%d", (int)termconf->show_config_links);
}
else if (streq(token, "loopback")) {
sprintf(buff, "%d", (int)termconf->loopback);
}
else if (streq(token, "theme")) {
sprintf(buff, "%d", termconf->theme);
}
@@ -243,7 +252,7 @@ tplTermCfg(HttpdConnData *connData, char *token, void **arg)
strncpy_safe(buff, termconf->title, BUFLEN);
}
else {
for (int i = 1; i <= 5; i++) {
for (int i = 1; i <= TERM_BTN_COUNT; i++) {
sprintf(buff2, "btn%d", i);
if (streq(token, buff2)) {
strncpy_safe(buff, termconf->btn[i-1], BUFLEN);
+11 -1
View File
@@ -135,8 +135,9 @@ terminal_restore_defaults(void)
termconf->default_bg = 0;
termconf->default_fg = 7;
sprintf(termconf->title, SCR_DEF_TITLE);
for(int i=1; i <= 5; i++) {
for(int i=1; i <= TERM_BTN_COUNT; i++) {
sprintf(termconf->btn[i-1], "%d", i);
sprintf(termconf->btn_msg[i-1], "%c", i);
}
termconf->theme = 0;
termconf->parser_tout_ms = SCR_DEF_PARSER_TOUT_MS;
@@ -181,6 +182,15 @@ terminal_apply_settings_noclear(void)
changed = 1;
}
// Migrate to v3
if (termconf->config_version < 3) {
dbg("termconf: Updating to version 3");
for(int i=1; i <= TERM_BTN_COUNT; i++) {
sprintf(termconf->btn_msg[i-1], "%c", i);
}
changed = 1;
}
termconf->config_version = TERMCONF_VERSION;
// Validation...
+6 -3
View File
@@ -36,10 +36,12 @@
// Size designed for the terminal config structure
// Must be constant to avoid corrupting user config after upgrade
#define TERMCONF_SIZE 200
#define TERMCONF_SIZE 300
#define TERM_BTN_LEN 10
#define TERM_BTN_MSG_LEN 10
#define TERM_TITLE_LEN 64
#define TERM_BTN_COUNT 5
#define SCR_DEF_DISPLAY_TOUT_MS 10
#define SCR_DEF_DISPLAY_COOLDOWN_MS 30
@@ -52,7 +54,7 @@
/** Maximum screen size (determines size of the static data array) */
#define MAX_SCREEN_SIZE (80*25)
#define TERMCONF_VERSION 2
#define TERMCONF_VERSION 3
// --- Persistent Settings ---
@@ -62,7 +64,7 @@ typedef struct {
u8 default_bg; // should be the Color typedef, but this way the size is more explicit
u8 default_fg;
char title[TERM_TITLE_LEN];
char btn[5][TERM_BTN_LEN];
char btn[TERM_BTN_COUNT][TERM_BTN_LEN];
u8 theme;
u32 parser_tout_ms;
u32 display_tout_ms;
@@ -72,6 +74,7 @@ typedef struct {
bool loopback;
bool show_buttons;
bool show_config_links;
char btn_msg[TERM_BTN_COUNT][TERM_BTN_MSG_LEN];
} TerminalConfigBundle;
// Live config