- Set button 1-5 label - eg.`\e]81;Yes\a`
+ Set label for button _n_ = 1-5 (code 81-85) to _t_ - e.g.`\e]81;Yes\a`
sets the first button text to "Yes".
+
+
+
+ \e]90+n;m\a
+
+
+
+ Set message for button _n_ = 1-5 (code 81-85) to _m_ - e.g.`\e]94;iv\a`
+ sets the 3rd button to send string "iv" when pressed.
+
+
@@ -88,7 +95,7 @@
`\e[8;r;ct`
-
Set screen size (this is a command borrowed from xterm)
+
Set screen size to _r_ rows and _c_ columns (this is a command borrowed from Xterm)
diff --git a/html_orig/pages/term.php b/html_orig/pages/term.php
index 4bafecd..a99361e 100644
--- a/html_orig/pages/term.php
+++ b/html_orig/pages/term.php
@@ -5,7 +5,7 @@
console.error("Page load failed, refreshing…");
location.reload(true);
}
- }, 2000);
+ }, 3000);
@@ -48,10 +48,10 @@
});
} catch(e) {
console.error(e);
- console.error("Fail, reloading in 1s…");
+ console.error("Fail, reloading in 3s…");
setTimeout(function() {
location.reload(true);
- }, 1000);
+ }, 3000);
}
function toggleSoftKb(yes) {
diff --git a/html_orig/sass/pages/_about.scss b/html_orig/sass/pages/_about.scss
index 38ae5ba..072d2f5 100644
--- a/html_orig/sass/pages/_about.scss
+++ b/html_orig/sass/pages/_about.scss
@@ -60,7 +60,7 @@
width: 100%;
td:nth-child(1) {
- width: 6em;
+ width: 8em;
}
}
}
@@ -86,7 +86,7 @@
div {
display: inline-block;
- width: 2.5em;
+ width: 2.7em;
border: 1px solid #666;
height: 3em;
margin: 1px;
diff --git a/user/ansi_parser.c b/user/ansi_parser.c
index c940c95..117ebb5 100644
--- a/user/ansi_parser.c
+++ b/user/ansi_parser.c
@@ -133,14 +133,12 @@ ansi_parser(char newchar)
#endif
// Handle simple characters immediately (bypass parser)
- if (newchar < ' ') {
+ if (newchar < ' ' && !inside_string) {
switch (newchar) {
case ESC:
- if (!inside_string) {
- // Reset state
- cs = ansi_start;
- // now the ESC will be processed by the parser
- }
+ // Reset state
+ cs = ansi_start;
+ // now the ESC will be processed by the parser
break; // proceed to parser
// Literally passed
@@ -168,10 +166,7 @@ ansi_parser(char newchar)
case BEL:
// bel is also used to terminate OSC
- if (!inside_string) {
- apars_handle_bel();
- return;
- }
+ apars_handle_bel();
break;
case ENQ:
@@ -185,14 +180,12 @@ ansi_parser(char newchar)
return;
default:
- // Discard all others
+ // Discard all other control codes
return;
}
} else {
- // >= ' '
-
// bypass the parser for simple characters (speed-up)
- if (cs == ansi_start) {
+ if (cs == ansi_start && newchar >= ' ') {
apars_handle_plainchar(newchar);
return;
}
@@ -205,7 +198,7 @@ ansi_parser(char newchar)
// The parser
-/* #line 209 "user/ansi_parser.c" */
+/* #line 202 "user/ansi_parser.c" */
{
const char *_acts;
unsigned int _nacts;
@@ -383,7 +376,7 @@ execFuncs:
while ( _nacts-- > 0 ) {
switch ( *_acts++ ) {
case 0:
-/* #line 185 "user/ansi_parser.rl" */
+/* #line 178 "user/ansi_parser.rl" */
{
ansi_warn("Parser error.");
apars_show_context();
@@ -392,7 +385,7 @@ execFuncs:
}
break;
case 1:
-/* #line 194 "user/ansi_parser.rl" */
+/* #line 187 "user/ansi_parser.rl" */
{
if ((*p) != 0) {
apars_handle_plainchar((*p));
@@ -400,7 +393,7 @@ execFuncs:
}
break;
case 2:
-/* #line 202 "user/ansi_parser.rl" */
+/* #line 195 "user/ansi_parser.rl" */
{
// Reset the CSI builder
leadchar = NUL;
@@ -416,13 +409,13 @@ execFuncs:
}
break;
case 3:
-/* #line 216 "user/ansi_parser.rl" */
+/* #line 209 "user/ansi_parser.rl" */
{
leadchar = (*p);
}
break;
case 4:
-/* #line 220 "user/ansi_parser.rl" */
+/* #line 213 "user/ansi_parser.rl" */
{
if (arg_cnt == 0) arg_cnt = 1;
// x10 + digit
@@ -432,7 +425,7 @@ execFuncs:
}
break;
case 5:
-/* #line 228 "user/ansi_parser.rl" */
+/* #line 221 "user/ansi_parser.rl" */
{
if (arg_cnt == 0) arg_cnt = 1; // handle case when first arg is empty
arg_cnt++;
@@ -440,14 +433,14 @@ execFuncs:
}
break;
case 6:
-/* #line 234 "user/ansi_parser.rl" */
+/* #line 227 "user/ansi_parser.rl" */
{
apars_handle_csi(leadchar, arg, arg_cnt, (*p));
{cs = 1;goto _again;}
}
break;
case 7:
-/* #line 245 "user/ansi_parser.rl" */
+/* #line 238 "user/ansi_parser.rl" */
{
leadchar = (*p);
str_ni = 0;
@@ -457,13 +450,13 @@ execFuncs:
}
break;
case 8:
-/* #line 253 "user/ansi_parser.rl" */
+/* #line 246 "user/ansi_parser.rl" */
{
string_buffer[str_ni++] = (*p);
}
break;
case 9:
-/* #line 257 "user/ansi_parser.rl" */
+/* #line 250 "user/ansi_parser.rl" */
{
inside_string = false;
string_buffer[str_ni++] = '\0';
@@ -472,41 +465,41 @@ execFuncs:
}
break;
case 10:
-/* #line 270 "user/ansi_parser.rl" */
+/* #line 263 "user/ansi_parser.rl" */
{
apars_handle_hash_cmd((*p));
{cs = 1;goto _again;}
}
break;
case 11:
-/* #line 275 "user/ansi_parser.rl" */
+/* #line 268 "user/ansi_parser.rl" */
{
apars_handle_short_cmd((*p));
{cs = 1;goto _again;}
}
break;
case 12:
-/* #line 280 "user/ansi_parser.rl" */
+/* #line 273 "user/ansi_parser.rl" */
{
apars_handle_space_cmd((*p));
{cs = 1;goto _again;}
}
break;
case 13:
-/* #line 287 "user/ansi_parser.rl" */
+/* #line 280 "user/ansi_parser.rl" */
{
leadchar = (*p);
{cs = 9;goto _again;}
}
break;
case 14:
-/* #line 292 "user/ansi_parser.rl" */
+/* #line 285 "user/ansi_parser.rl" */
{
apars_handle_chs_designate(leadchar, (*p));
{cs = 1;goto _again;}
}
break;
-/* #line 510 "user/ansi_parser.c" */
+/* #line 503 "user/ansi_parser.c" */
}
}
goto _again;
@@ -524,7 +517,7 @@ _again:
while ( __nacts-- > 0 ) {
switch ( *__acts++ ) {
case 0:
-/* #line 185 "user/ansi_parser.rl" */
+/* #line 178 "user/ansi_parser.rl" */
{
ansi_warn("Parser error.");
apars_show_context();
@@ -534,7 +527,7 @@ _again:
goto _again;}
}
break;
-/* #line 538 "user/ansi_parser.c" */
+/* #line 531 "user/ansi_parser.c" */
}
}
}
@@ -542,6 +535,6 @@ goto _again;}
_out: {}
}
-/* #line 315 "user/ansi_parser.rl" */
+/* #line 308 "user/ansi_parser.rl" */
}
diff --git a/user/ansi_parser.rl b/user/ansi_parser.rl
index 2f4b4a6..d8c9f69 100644
--- a/user/ansi_parser.rl
+++ b/user/ansi_parser.rl
@@ -102,14 +102,12 @@ ansi_parser(char newchar)
#endif
// Handle simple characters immediately (bypass parser)
- if (newchar < ' ') {
+ if (newchar < ' ' && !inside_string) {
switch (newchar) {
case ESC:
- if (!inside_string) {
- // Reset state
- cs = ansi_start;
- // now the ESC will be processed by the parser
- }
+ // Reset state
+ cs = ansi_start;
+ // now the ESC will be processed by the parser
break; // proceed to parser
// Literally passed
@@ -137,10 +135,7 @@ ansi_parser(char newchar)
case BEL:
// bel is also used to terminate OSC
- if (!inside_string) {
- apars_handle_bel();
- return;
- }
+ apars_handle_bel();
break;
case ENQ:
@@ -154,14 +149,12 @@ ansi_parser(char newchar)
return;
default:
- // Discard all others
+ // Discard all other control codes
return;
}
} else {
- // >= ' '
-
// bypass the parser for simple characters (speed-up)
- if (cs == ansi_start) {
+ if (cs == ansi_start && newchar >= ' ') {
apars_handle_plainchar(newchar);
return;
}
diff --git a/user/ansi_parser_callbacks.c b/user/ansi_parser_callbacks.c
index 4bb9ebb..fa6173f 100644
--- a/user/ansi_parser_callbacks.c
+++ b/user/ansi_parser_callbacks.c
@@ -7,7 +7,6 @@
#include
#include
#include "ansi_parser_callbacks.h"
-#include "uart_driver.h"
#include "cgi_sockets.h"
#include "version.h"
#include "uart_buffer.h"
@@ -21,7 +20,6 @@ void ICACHE_FLASH_ATTR
apars_respond(const char *str)
{
UART_SendAsync(str, -1);
- //UART_WriteString(UART0, str, UART_TIMEOUT_US);
}
/**
diff --git a/user/apars_osc.c b/user/apars_osc.c
index 5e0679d..2bf4649 100644
--- a/user/apars_osc.c
+++ b/user/apars_osc.c
@@ -42,6 +42,9 @@ apars_handle_osc(const char *buffer)
else if (n >= 81 && n <= 85) { // ESPTerm: action button label
screen_set_button_text(n - 80, buffer);
}
+ else if (n >= 91 && n <= 95) { // ESPTerm: action button text
+ strncpy(termconf_scratch.btn_msg[n - 91], buffer, TERM_BTN_MSG_LEN);
+ }
else {
ansi_noimpl("OSC %d ; %s ST", n, buffer);
}
diff --git a/user/cgi_sockets.c b/user/cgi_sockets.c
index 36f68c6..a5de07e 100644
--- a/user/cgi_sockets.c
+++ b/user/cgi_sockets.c
@@ -3,16 +3,16 @@
#include
#include "cgi_sockets.h"
-#include "uart_driver.h"
#include "screen.h"
#include "uart_buffer.h"
#include "ansi_parser.h"
#include "jstring.h"
-#define LOOPBACK 0
-
+// Heartbeat interval in ms
#define HB_TIME 1000
+// Buffer size (sent in one go)
+// Must be less than httpd sendbuf
#define SOCK_BUF_LEN 2000
volatile bool notify_available = true;
@@ -37,6 +37,10 @@ notifyCooldownTimCb(void *arg)
notify_cooldown = false;
}
+/**
+ * Tell browser we have new content
+ * @param arg
+ */
static void ICACHE_FLASH_ATTR
notifyContentTimCb(void *arg)
{
@@ -71,6 +75,10 @@ notifyContentTimCb(void *arg)
TIMER_START(¬ifyCooldownTim, notifyCooldownTimCb, termconf->display_cooldown_ms, 0);
}
+/**
+ * Tell browsers about the new text labels
+ * @param arg
+ */
static void ICACHE_FLASH_ATTR
notifyLabelsTimCb(void *arg)
{
@@ -124,6 +132,14 @@ void ICACHE_FLASH_ATTR screen_notifyChange(ScreenNotifyChangeTopic topic)
}
}
+/**
+ * mouse event rx
+ * @param evt - event type: p, r, m
+ * @param y - coord 0-based
+ * @param x - coord 0-based
+ * @param button - which button, 1-based. 0=none
+ * @param mods - modifier keys bitmap: meta|alt|shift|ctrl
+ */
void ICACHE_FLASH_ATTR sendMouseAction(char evt, int y, int x, int button, u8 mods)
{
// one-based
@@ -219,7 +235,7 @@ void ICACHE_FLASH_ATTR updateSockRx(Websock *ws, char *data, int len, int flags)
// action button press
btnNum = (u8) (data[1]);
if (btnNum > 0 && btnNum < 10) {
- UART_SendAsync(termconf->btn_msg[btnNum-1], -1);
+ UART_SendAsync(termconf_scratch.btn_msg[btnNum-1], -1);
}
break;
@@ -242,6 +258,7 @@ void ICACHE_FLASH_ATTR updateSockRx(Websock *ws, char *data, int len, int flags)
}
}
+/** Send a heartbeat msg */
void ICACHE_FLASH_ATTR heartbeatTimCb(void *unused)
{
if (notify_available) {
diff --git a/user/cgi_term_cfg.c b/user/cgi_term_cfg.c
index 1f7ee62..6b8ec41 100644
--- a/user/cgi_term_cfg.c
+++ b/user/cgi_term_cfg.c
@@ -168,11 +168,67 @@ cgiTermCfgSetParams(HttpdConnData *connData)
strncpy_safe(termconf->title, buff, 64); // ATTN those must match the values in
}
- for (int i = 1; i <= TERM_BTN_COUNT; i++) {
- sprintf(buff, "btn%d", i);
+ for (int btn_i = 1; btn_i <= TERM_BTN_COUNT; btn_i++) {
+ sprintf(buff, "btn%d", btn_i);
if (GET_ARG(buff)) {
- dbg("Button%d default text: \"%s\"", i, buff);
- strncpy_safe(termconf->btn[i-1], buff, TERM_BTN_LEN);
+ dbg("Button%d default text: \"%s\"", btn_i, buff);
+ strncpy_safe(termconf->btn[btn_i-1], buff, TERM_BTN_LEN);
+ }
+
+ sprintf(buff, "bm%d", btn_i);
+ if (GET_ARG(buff)) {
+ dbg("Button%d message (ASCII): \"%s\"", btn_i, buff);
+
+ // parse: comma,space or semicolon separated decimal values of ASCII codes
+ char c;
+ char *cp = buff;
+ int char_i = 0;
+ int acu = 0;
+ bool lastsp = 1;
+ char buff_bm[TERM_BTN_MSG_LEN];
+ while ((c = *cp++) != 0) {
+ if (c == ' ' || c == ',' || c == ';') {
+ if(lastsp) continue;
+
+ if (acu==0 || acu>255) {
+ warn("Bad value! %d", acu);
+ redir_url += sprintf(redir_url, "bm%d,", btn_i);
+ break;
+ }
+
+ if (char_i >= TERM_BTN_MSG_LEN-1) {
+ warn("Too long! %d", acu);
+ redir_url += sprintf(redir_url, "bm%d,", btn_i);
+ break;
+ }
+
+ dbg("acu %d", acu);
+ buff_bm[char_i++] = (char)acu;
+
+ // prepare for next char
+ acu = 0;
+ lastsp = 1;
+ } else if (c>='0'&&c<='9') {
+ lastsp = 0;
+ acu *= 10;
+ acu += c - '0';
+ } else {
+ warn("Bad syntax!");
+ redir_url += sprintf(redir_url, "bm%d,", btn_i);
+ break;
+ }
+ }
+ if (lastsp && char_i == 0) {
+ warn("Required!");
+ redir_url += sprintf(redir_url, "bm%d,", btn_i);
+ }
+ if (!lastsp) {
+ buff_bm[char_i++] = (char)acu;
+ }
+ buff_bm[char_i] = 0;
+ dbg("%s, chari = %d", buff_bm, char_i);
+
+ strncpy(termconf->btn_msg[btn_i-1], buff_bm, TERM_BTN_MSG_LEN);
}
}
@@ -252,10 +308,27 @@ tplTermCfg(HttpdConnData *connData, char *token, void **arg)
strncpy_safe(buff, termconf->title, BUFLEN);
}
else {
- for (int i = 1; i <= TERM_BTN_COUNT; i++) {
- sprintf(buff2, "btn%d", i);
+ for (int btn_i = 1; btn_i <= TERM_BTN_COUNT; btn_i++) {
+ sprintf(buff2, "btn%d", btn_i);
if (streq(token, buff2)) {
- strncpy_safe(buff, termconf->btn[i-1], BUFLEN);
+ strncpy_safe(buff, termconf->btn[btn_i-1], BUFLEN);
+ break;
+ }
+
+ sprintf(buff2, "bm%d", btn_i);
+ if (streq(token, buff2)) {
+ char c;
+ char *bp = buff;
+ char *cp = termconf->btn_msg[btn_i-1];
+ int n = 0;
+ while((c = *cp++) != 0) {
+ if(n>0) {
+ *bp = ',';
+ bp++;
+ }
+ bp += sprintf(bp, "%d", (int)c);
+ n++;
+ }
break;
}
}
diff --git a/user/uart_asyncdrv.c- b/user/uart_asyncdrv.c-
deleted file mode 100644
index c257b67..0000000
--- a/user/uart_asyncdrv.c-
+++ /dev/null
@@ -1,830 +0,0 @@
-/*
- * File : uart.c
- * Copyright (C) 2013 - 2016, Espressif Systems
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of version 3 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see .
- */
-#include
-#include
-#include "uart_asyncdrv.h-"
-
-// UartDev is defined and initialized in rom code.
-extern UartDevice UartDev;
-
-struct UartBuffer {
- uint32 UartBuffSize;
- uint8 *pUartBuff;
- uint8 *pInPos;
- uint8 *pOutPos;
- STATUS BuffState;
- uint16 Space; //remanent space of the buffer
- uint8 TcpControl;
- struct UartBuffer *nextBuff;
-};
-
-struct UartRxBuff {
- uint32 UartRxBuffSize;
- uint8 *pUartRxBuff;
- uint8 *pWritePos;
- uint8 *pReadPos;
- STATUS RxBuffState;
- uint32 Space; //remanent space of the buffer
-};
-
-LOCAL struct UartBuffer* pTxBuffer = NULL;
-LOCAL struct UartBuffer* pRxBuffer = NULL;
-
-// Forward declare
-#if UART_BUFF_EN
-LOCAL void Uart_Buf_Cpy(struct UartBuffer* pCur, char* pdata , uint16 data_len);
-void uart_buf_free(struct UartBuffer* pBuff);
-void tx_buff_enq(char* pdata, uint16 data_len );
-LOCAL void tx_fifo_insert(struct UartBuffer* pTxBuff, uint8 data_len, uint8 uart_no);
-void tx_start_uart_buffer(uint8 uart_no);
-uint16 rx_buff_deq(char* pdata, uint16 data_len );
-void Uart_rx_buff_enq();
-#endif
-
-//void ICACHE_FLASH_ATTR uart_test_rx();
-STATUS uart_tx_one_char(uint8 uart, uint8 TxChar);
-STATUS uart_tx_one_char_no_wait(uint8 uart, uint8 TxChar);
-void uart1_sendStr_no_wait(const char *str);
-struct UartBuffer* UART_AsyncBufferInit(u32 size);
-
-void uart_rx_intr_enable(uint8 uart_no);
-void uart_rx_intr_disable(uint8 uart_no);
-void uart0_tx_buffer(uint8 *buf, uint16 len);
-
-void uart0_sendStr(const char *str);
-
-
-/*uart demo with a system task, to output what uart receives*/
-/*this is a example to process uart data from task,please change the priority to fit your application task if exists*/
-/*it might conflict with your task, if so,please arrange the priority of different task, or combine it to a different event in the same task. */
-#define uart_recvTaskPrio 0
-#define uart_recvTaskQueueLen 10
-os_event_t uart_recvTaskQueue[uart_recvTaskQueueLen];
-
-#define DBG
-#define DBG1 uart1_sendStr_no_wait
-#define DBG2 os_printf
-
-
-LOCAL void uart0_rx_intr_handler(void *para);
-
-/******************************************************************************
- * FunctionName : uart_config
- * Description : Internal used function
- * UART0 used for data TX/RX, RX buffer size is 0x100, interrupt enabled
- * UART1 just used for debug output
- * Parameters : uart_no, use UART0 or UART1 defined ahead
- * Returns : NONE
-*******************************************************************************/
-LOCAL void ICACHE_FLASH_ATTR
-uart_config(uint8 uart_no)
-{
- if (uart_no == UART1){
- PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO2_U, FUNC_U1TXD_BK);
- }else{
- /* rcv_buff size if 0x100 */
- ETS_UART_INTR_ATTACH(uart0_rx_intr_handler, &(UartDev.rcv_buff));
- PIN_PULLUP_DIS(PERIPHS_IO_MUX_U0TXD_U);
- PIN_FUNC_SELECT(PERIPHS_IO_MUX_U0TXD_U, FUNC_U0TXD);
- #if UART_HW_RTS
- PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDO_U, FUNC_U0RTS); //HW FLOW CONTROL RTS PIN
- #endif
- #if UART_HW_CTS
- PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTCK_U, FUNC_U0CTS); //HW FLOW CONTROL CTS PIN
- #endif
- }
- uart_div_modify(uart_no, UART_CLK_FREQ / (UartDev.baut_rate));//SET BAUDRATE
-
- WRITE_PERI_REG(UART_CONF0(uart_no), ((UartDev.exist_parity & UART_PARITY_EN_M) << UART_PARITY_EN_S) //SET BIT AND PARITY MODE
- | ((UartDev.parity & UART_PARITY_M) <> UART_TXFIFO_CNT_S & UART_TXFIFO_CNT) < 126) {
- break;
- }
- }
- WRITE_PERI_REG(UART_FIFO(uart) , TxChar);
- return OK;
-}
-
-/******************************************************************************
- * FunctionName : uart1_write_char
- * Description : Internal used function
- * Do some special deal while tx char is '\r' or '\n'
- * Parameters : char c - character to tx
- * Returns : NONE
-*******************************************************************************/
-LOCAL void ICACHE_FLASH_ATTR
-uart1_write_char(char c)
-{
- if (c == '\n'){
- uart_tx_one_char(UART1, '\r');
- uart_tx_one_char(UART1, '\n');
- }else if (c == '\r'){
-
- }else{
- uart_tx_one_char(UART1, c);
- }
-}
-
-//os_printf output to fifo or to the tx buffer
-LOCAL void ICACHE_FLASH_ATTR
-uart0_write_char_no_wait(char c)
-{
-#if UART_BUFF_EN //send to uart0 fifo but do not wait
- uint8 chr;
-// if (c == '\n'){
-// chr = '\r';
-// tx_buff_enq(&chr, 1);
-// chr = '\n';
-// tx_buff_enq(&chr, 1);
-// }else if (c == '\r'){
-//
-// }else{
- tx_buff_enq(&c,1);
-// }
-#else //send to uart tx buffer
- if (c == '\n'){
- uart_tx_one_char_no_wait(UART0, '\r');
- uart_tx_one_char_no_wait(UART0, '\n');
- }else if (c == '\r'){
-
- }
- else{
- uart_tx_one_char_no_wait(UART0, c);
- }
-#endif
-}
-
-/******************************************************************************
- * FunctionName : uart0_tx_buffer
- * Description : use uart0 to transfer buffer
- * Parameters : uint8 *buf - point to send buffer
- * uint16 len - buffer len
- * Returns :
-*******************************************************************************/
-void ICACHE_FLASH_ATTR
-uart0_tx_buffer(uint8 *buf, uint16 len)
-{
- uint16 i;
- for (i = 0; i < len; i++)
- {
- uart_tx_one_char(UART0, buf[i]);
- }
-}
-
-/******************************************************************************
- * FunctionName : uart0_sendStr
- * Description : use uart0 to transfer buffer
- * Parameters : uint8 *buf - point to send buffer
- * uint16 len - buffer len
- * Returns :
-*******************************************************************************/
-void ICACHE_FLASH_ATTR
-uart0_sendStr(const char *str)
-{
- while(*str){
- uart_tx_one_char(UART0, *str++);
- }
-}
-void at_port_print(const char *str) __attribute__((alias("uart0_sendStr")));
-/******************************************************************************
- * FunctionName : uart0_rx_intr_handler
- * Description : Internal used function
- * UART0 interrupt handler, add self handle code inside
- * Parameters : void *para - point to ETS_UART_INTR_ATTACH's arg
- * Returns : NONE
-*******************************************************************************/
-LOCAL void
-uart0_rx_intr_handler(void *para)
-{
- /* uart0 and uart1 intr combine togther, when interrupt occur, see reg 0x3ff20020, bit2, bit0 represents
- * uart1 and uart0 respectively
- */
- uint8 RcvChar;
- uint8 uart_no = UART0;//UartDev.buff_uart_no;
- uint8 fifo_len = 0;
- uint8 buf_idx = 0;
- uint8 temp,cnt;
- //RcvMsgBuff *pRxBuff = (RcvMsgBuff *)para;
-
- /*ATTENTION:*/
- /*IN NON-OS VERSION SDK, DO NOT USE "ICACHE_FLASH_ATTR" FUNCTIONS IN THE WHOLE HANDLER PROCESS*/
- /*ALL THE FUNCTIONS CALLED IN INTERRUPT HANDLER MUST BE DECLARED IN RAM */
- /*IF NOT , POST AN EVENT AND PROCESS IN SYSTEM TASK */
- if(UART_FRM_ERR_INT_ST == (READ_PERI_REG(UART_INT_ST(uart_no)) & UART_FRM_ERR_INT_ST)){
- DBG1("FRM_ERR\r\n");
- WRITE_PERI_REG(UART_INT_CLR(uart_no), UART_FRM_ERR_INT_CLR);
- }else if(UART_RXFIFO_FULL_INT_ST == (READ_PERI_REG(UART_INT_ST(uart_no)) & UART_RXFIFO_FULL_INT_ST)){
- // Full interrupt - FIFO threshold reached
- DBG("f");
- uart_rx_intr_disable(UART0);
- WRITE_PERI_REG(UART_INT_CLR(UART0), UART_RXFIFO_FULL_INT_CLR);
- system_os_post(uart_recvTaskPrio, 0, 0); // tell the handler
- }else if(UART_RXFIFO_TOUT_INT_ST == (READ_PERI_REG(UART_INT_ST(uart_no)) & UART_RXFIFO_TOUT_INT_ST)){
- // Timeout interrupt - Line idle for a while
- DBG("t");
- uart_rx_intr_disable(UART0);
- WRITE_PERI_REG(UART_INT_CLR(UART0), UART_RXFIFO_TOUT_INT_CLR);
- system_os_post(uart_recvTaskPrio, 0, 0); // tell the handler
- }else if(UART_TXFIFO_EMPTY_INT_ST == (READ_PERI_REG(UART_INT_ST(uart_no)) & UART_TXFIFO_EMPTY_INT_ST)){
- DBG("e");
- // TX fifo is empty, can send more.
-
- /* to output uart data from uart buffer directly in empty interrupt handler*/
- /*instead of processing in system event, in order not to wait for current task/function to quit */
- /*ATTENTION:*/
- /*IN NON-OS VERSION SDK, DO NOT USE "ICACHE_FLASH_ATTR" FUNCTIONS IN THE WHOLE HANDLER PROCESS*/
- /*ALL THE FUNCTIONS CALLED IN INTERRUPT HANDLER MUST BE DECLARED IN RAM */
- CLEAR_PERI_REG_MASK(UART_INT_ENA(UART0), UART_TXFIFO_EMPTY_INT_ENA);
- #if UART_BUFF_EN
- tx_start_uart_buffer(UART0);
- #endif
- //system_os_post(uart_recvTaskPrio, 1, 0);
- WRITE_PERI_REG(UART_INT_CLR(uart_no), UART_TXFIFO_EMPTY_INT_CLR);
-
- }else if(UART_RXFIFO_OVF_INT_ST == (READ_PERI_REG(UART_INT_ST(uart_no)) & UART_RXFIFO_OVF_INT_ST)){
- WRITE_PERI_REG(UART_INT_CLR(uart_no), UART_RXFIFO_OVF_INT_CLR);
- DBG1("RX OVF!!\r\n");
- }
-
-}
-
-/******************************************************************************
- * FunctionName : uart_init
- * Description : user interface for init uart
- * Parameters : UartBautRate uart0_br - uart0 bautrate
- * UartBautRate uart1_br - uart1 bautrate
- * Returns : NONE
-*******************************************************************************/
-#if UART_SELFTEST&UART_BUFF_EN
-os_timer_t buff_timer_t;
-void ICACHE_FLASH_ATTR
-uart_test_rx()
-{
- uint8 uart_buf[128]={0};
- uint16 len = 0;
- len = rx_buff_deq(uart_buf, 128 );
- tx_buff_enq(uart_buf,len);
-}
-#endif
-
-LOCAL void ICACHE_FLASH_ATTR ///////
-uart_recvTask(os_event_t *events)
-{
- if(events->sig == 0){
- #if UART_BUFF_EN
- Uart_rx_buff_enq();
- #else
- uint8 fifo_len = (READ_PERI_REG(UART_STATUS(UART0))>>UART_RXFIFO_CNT_S)&UART_RXFIFO_CNT;
- uint8 d_tmp = 0;
- uint8 idx=0;
- for(idx=0;idxsig == 1){
- #if UART_BUFF_EN
- //already move uart buffer output to uart empty interrupt
- //tx_start_uart_buffer(UART0);
- #else
-
- #endif
- }
-}
-
-void ICACHE_FLASH_ATTR
-uart_init(UartBautRate uart0_br, UartBautRate uart1_br)
-{
- /*this is a example to process uart data from task,please change the priority to fit your application task if exists*/
- system_os_task(uart_recvTask, uart_recvTaskPrio, uart_recvTaskQueue, uart_recvTaskQueueLen); //demo with a task to process the uart data
-
- UartDev.baut_rate = uart0_br;
- uart_config(UART0);
- UartDev.baut_rate = uart1_br;
- uart_config(UART1);
- ETS_UART_INTR_ENABLE();
-
- #if UART_BUFF_EN
- pTxBuffer = UART_AsyncBufferInit(UART_TX_BUFFER_SIZE);
- pRxBuffer = UART_AsyncBufferInit(UART_RX_BUFFER_SIZE);
- #endif
-
-
- /*option 1: use default print, output from uart0 , will wait some time if fifo is full */
- //do nothing...
-
- /*option 2: output from uart1,uart1 output will not wait , just for output debug info */
- /*os_printf output uart data via uart1(GPIO2)*/
- os_install_putc1((void *)uart1_write_char); //use this one to output debug information via uart1 //
-
- /*option 3: output from uart0 will skip current byte if fifo is full now... */
- /*see uart0_write_char_no_wait:you can output via a buffer or output directly */
- /*os_printf output uart data via uart0 or uart buffer*/
- //os_install_putc1((void *)uart0_write_char_no_wait); //use this to print via uart0
-
- #if UART_SELFTEST&UART_BUFF_EN
- os_timer_disarm(&buff_timer_t);
- os_timer_setfn(&buff_timer_t, uart_test_rx , NULL); //a demo to process the data in uart rx buffer
- os_timer_arm(&buff_timer_t,10,1);
- #endif
-}
-
-//void ICACHE_FLASH_ATTR
-//uart_reattach()
-//{
-// uart_init(BIT_RATE_115200, BIT_RATE_115200);
-//}
-
-/******************************************************************************
- * FunctionName : uart_tx_one_char_no_wait
- * Description : uart tx a single char without waiting for fifo
- * Parameters : uint8 uart - uart port
- * uint8 TxChar - char to tx
- * Returns : STATUS
-*******************************************************************************/
-STATUS uart_tx_one_char_no_wait(uint8 uart, uint8 TxChar)
-{
- uint8 fifo_cnt = (( READ_PERI_REG(UART_STATUS(uart))>>UART_TXFIFO_CNT_S)& UART_TXFIFO_CNT);
- if (fifo_cnt < 126) {
- WRITE_PERI_REG(UART_FIFO(uart) , TxChar);
- }
- return OK;
-}
-
-//STATUS uart0_tx_one_char_no_wait(uint8 TxChar)
-//{
-// uint8 fifo_cnt = (( READ_PERI_REG(UART_STATUS(UART0))>>UART_TXFIFO_CNT_S)& UART_TXFIFO_CNT);
-// if (fifo_cnt < 126) {
-// WRITE_PERI_REG(UART_FIFO(UART0) , TxChar);
-// }
-// return OK;
-//}
-
-
-/******************************************************************************
- * FunctionName : uart1_sendStr_no_wait
- * Description : uart tx a string without waiting for every char, used for print debug info which can be lost
- * Parameters : const char *str - string to be sent
- * Returns : NONE
-*******************************************************************************/
-void uart1_sendStr_no_wait(const char *str)
-{
- while(*str){
- uart_tx_one_char_no_wait(UART1, *str++);
- }
-}
-
-
-#if UART_BUFF_EN
-/******************************************************************************
- * FunctionName : Uart_Buf_Init
- * Description : tx buffer enqueue: fill a first linked buffer
- * Parameters : char *pdata - data point to be enqueue
- * Returns : NONE
-*******************************************************************************/
-struct UartBuffer* ICACHE_FLASH_ATTR
-UART_AsyncBufferInit(uint32 buf_size)
-{
- uint32 heap_size = system_get_free_heap_size();
- if(heap_size <=buf_size){
- DBG1("no buf for uart\n\r");
- return NULL;
- }else{
- DBG("test heap size: %d\n\r",heap_size);
- struct UartBuffer* pBuff = (struct UartBuffer* )os_malloc(sizeof(struct UartBuffer));
- pBuff->UartBuffSize = buf_size;
- pBuff->pUartBuff = (uint8*)os_malloc(pBuff->UartBuffSize);
- pBuff->pInPos = pBuff->pUartBuff;
- pBuff->pOutPos = pBuff->pUartBuff;
- pBuff->Space = (uint16) pBuff->UartBuffSize;
- pBuff->BuffState = OK;
- pBuff->nextBuff = NULL;
- pBuff->TcpControl = RUN;
- return pBuff;
- }
-}
-
-
-//copy uart buffer
-LOCAL void Uart_Buf_Cpy(struct UartBuffer* pCur, char* pdata , uint16 data_len)
-{
- if(data_len == 0) return;
-
- uint16 tail_len = (uint16) (pCur->pUartBuff + pCur->UartBuffSize - pCur->pInPos);
- if(tail_len >= data_len){ //do not need to loop back the queue
- os_memcpy(pCur->pInPos , pdata , data_len );
- pCur->pInPos += ( data_len );
- pCur->pInPos = (pCur->pUartBuff + (pCur->pInPos - pCur->pUartBuff) % pCur->UartBuffSize );
- pCur->Space -=data_len;
- }else{
- os_memcpy(pCur->pInPos, pdata, tail_len);
- pCur->pInPos += ( tail_len );
- pCur->pInPos = (pCur->pUartBuff + (pCur->pInPos - pCur->pUartBuff) % pCur->UartBuffSize );
- pCur->Space -=tail_len;
- os_memcpy(pCur->pInPos, pdata+tail_len , data_len-tail_len);
- pCur->pInPos += ( data_len-tail_len );
- pCur->pInPos = (pCur->pUartBuff + (pCur->pInPos - pCur->pUartBuff) % pCur->UartBuffSize );
- pCur->Space -=( data_len-tail_len);
- }
-
-}
-
-/******************************************************************************
- * FunctionName : uart_buf_free
- * Description : deinit of the tx buffer
- * Parameters : struct UartBuffer* pTxBuff - tx buffer struct pointer
- * Returns : NONE
-*******************************************************************************/
-void ICACHE_FLASH_ATTR
-uart_buf_free(struct UartBuffer* pBuff)
-{
- os_free(pBuff->pUartBuff);
- os_free(pBuff);
-}
-
-
-//rx buffer dequeue
-uint16 ICACHE_FLASH_ATTR
-rx_buff_deq(char* pdata, uint16 data_len)
-{
- uint16 buf_len = (pRxBuffer->UartBuffSize- pRxBuffer->Space);
- uint16 tail_len = pRxBuffer->pUartBuff + pRxBuffer->UartBuffSize - pRxBuffer->pOutPos ;
- uint16 len_tmp = 0;
- len_tmp = ((data_len > buf_len)?buf_len:data_len);
- if(pRxBuffer->pOutPos <= pRxBuffer->pInPos){
- os_memcpy(pdata, pRxBuffer->pOutPos,len_tmp);
- pRxBuffer->pOutPos+= len_tmp;
- pRxBuffer->Space += len_tmp;
- }else{
- if(len_tmp>tail_len){
- os_memcpy(pdata, pRxBuffer->pOutPos, tail_len);
- pRxBuffer->pOutPos += tail_len;
- pRxBuffer->pOutPos = (pRxBuffer->pUartBuff + (pRxBuffer->pOutPos- pRxBuffer->pUartBuff) % pRxBuffer->UartBuffSize );
- pRxBuffer->Space += tail_len;
-
- os_memcpy(pdata+tail_len , pRxBuffer->pOutPos, len_tmp-tail_len);
- pRxBuffer->pOutPos+= ( len_tmp-tail_len );
- pRxBuffer->pOutPos= (pRxBuffer->pUartBuff + (pRxBuffer->pOutPos- pRxBuffer->pUartBuff) % pRxBuffer->UartBuffSize );
- pRxBuffer->Space +=( len_tmp-tail_len);
- }else{
- //os_printf("case 3 in rx deq\n\r");
- os_memcpy(pdata, pRxBuffer->pOutPos, len_tmp);
- pRxBuffer->pOutPos += len_tmp;
- pRxBuffer->pOutPos = (pRxBuffer->pUartBuff + (pRxBuffer->pOutPos- pRxBuffer->pUartBuff) % pRxBuffer->UartBuffSize );
- pRxBuffer->Space += len_tmp;
- }
- }
- if(pRxBuffer->Space >= UART_FIFO_LEN){
- uart_rx_intr_enable(UART0);
- }
- return len_tmp;
-}
-
-
-//move data from uart fifo to rx buffer
-void Uart_rx_buff_enq()
-{
- uint8 fifo_len,buf_idx;
- uint8 fifo_data;
- #if 1
- fifo_len = (READ_PERI_REG(UART_STATUS(UART0))>>UART_RXFIFO_CNT_S)&UART_RXFIFO_CNT;
- if(fifo_len >= pRxBuffer->Space){
- os_printf("buf full!!!\n\r");
- }else{
- buf_idx=0;
- while(buf_idx < fifo_len){
- buf_idx++;
- fifo_data = READ_PERI_REG(UART_FIFO(UART0)) & 0xFF;
- *(pRxBuffer->pInPos++) = fifo_data;
- if(pRxBuffer->pInPos == (pRxBuffer->pUartBuff + pRxBuffer->UartBuffSize)){
- pRxBuffer->pInPos = pRxBuffer->pUartBuff;
- }
- }
- pRxBuffer->Space -= fifo_len ;
- if(pRxBuffer->Space >= UART_FIFO_LEN){
- //os_printf("after rx enq buf enough\n\r");
- uart_rx_intr_enable(UART0);
- }
- }
- #endif
-}
-
-
-//fill the uart tx buffer
-void ICACHE_FLASH_ATTR
-tx_buff_enq(char* pdata, uint16 data_len )
-{
- if(pTxBuffer == NULL){
- DBG1("\n\rnull, create buffer struct\n\r");
- pTxBuffer = UART_AsyncBufferInit(UART_TX_BUFFER_SIZE);
- if(pTxBuffer!= NULL){
- Uart_Buf_Cpy(pTxBuffer , pdata, data_len );
- }else{
- DBG1("uart tx MALLOC no buf \n\r");
- }
- }else{
- if(data_len <= pTxBuffer->Space){
- Uart_Buf_Cpy(pTxBuffer , pdata, data_len);
- }else{
- DBG1("UART TX BUF FULL!!!!\n\r");
- }
- }
- #if 0
- if(pTxBuffer->Space <= URAT_TX_LOWER_SIZE){
- set_tcp_block();
- }
- #endif
- SET_PERI_REG_MASK(UART_CONF1(UART0), (UART_TX_EMPTY_THRESH_VAL & UART_TXFIFO_EMPTY_THRHD)<pOutPos++));
- if(pTxBuff->pOutPos == (pTxBuff->pUartBuff + pTxBuff->UartBuffSize)){
- pTxBuff->pOutPos = pTxBuff->pUartBuff;
- }
- }
- pTxBuff->pOutPos = (pTxBuff->pUartBuff + (pTxBuff->pOutPos - pTxBuff->pUartBuff) % pTxBuff->UartBuffSize );
- pTxBuff->Space += data_len;
-}
-
-
-/******************************************************************************
- * FunctionName : tx_start_uart_buffer
- * Description : get data from the tx buffer and fill the uart tx fifo, co-work with the uart fifo empty interrupt
- * Parameters : uint8 uart_no - uart port num
- * Returns : NONE
-*******************************************************************************/
-void tx_start_uart_buffer(uint8 uart_no)
-{
- uint8 tx_fifo_len = (READ_PERI_REG(UART_STATUS(uart_no))>>UART_TXFIFO_CNT_S)&UART_TXFIFO_CNT;
- uint8 fifo_remain = UART_FIFO_LEN - tx_fifo_len ;
- uint8 len_tmp;
- uint16 tail_ptx_len,head_ptx_len,data_len;
- //struct UartBuffer* pTxBuff = *get_buff_prt();
-
- if(pTxBuffer){
- data_len = (pTxBuffer->UartBuffSize - pTxBuffer->Space);
- if(data_len > fifo_remain){
- len_tmp = fifo_remain;
- tx_fifo_enq(pTxBuffer, len_tmp, uart_no);
- SET_PERI_REG_MASK(UART_INT_ENA(UART0), UART_TXFIFO_EMPTY_INT_ENA);
- }else{
- len_tmp = data_len;
- tx_fifo_enq(pTxBuffer, len_tmp, uart_no);
- }
- }else{
- DBG1("pTxBuff null \n\r");
- }
-}
-
-#endif
-
-
-void uart_rx_intr_disable(uint8 uart_no)
-{
-#if 1
- CLEAR_PERI_REG_MASK(UART_INT_ENA(uart_no), UART_RXFIFO_FULL_INT_ENA|UART_RXFIFO_TOUT_INT_ENA);
-#else
- ETS_UART_INTR_DISABLE();
-#endif
-}
-
-void uart_rx_intr_enable(uint8 uart_no)
-{
-#if 1
- SET_PERI_REG_MASK(UART_INT_ENA(uart_no), UART_RXFIFO_FULL_INT_ENA|UART_RXFIFO_TOUT_INT_ENA);
-#else
- ETS_UART_INTR_ENABLE();
-#endif
-}
-
-
-//========================================================
-LOCAL void
-uart0_write_char(char c)
-{
- if (c == '\n') {
- uart_tx_one_char(UART0, '\r');
- uart_tx_one_char(UART0, '\n');
- } else if (c == '\r') {
- } else {
- uart_tx_one_char(UART0, c);
- }
-}
-
-void ICACHE_FLASH_ATTR
-UART_SetWordLength(uint8 uart_no, UartBitsNum4Char len)
-{
- SET_PERI_REG_BITS(UART_CONF0(uart_no),UART_BIT_NUM,len,UART_BIT_NUM_S);
-}
-
-void ICACHE_FLASH_ATTR
-UART_SetStopBits(uint8 uart_no, UartStopBitsNum bit_num)
-{
- SET_PERI_REG_BITS(UART_CONF0(uart_no),UART_STOP_BIT_NUM,bit_num,UART_STOP_BIT_NUM_S);
-}
-
-void ICACHE_FLASH_ATTR
-UART_SetLineInverse(uint8 uart_no, UART_LineLevelInverse inverse_mask)
-{
- CLEAR_PERI_REG_MASK(UART_CONF0(uart_no), UART_LINE_INV_MASK);
- SET_PERI_REG_MASK(UART_CONF0(uart_no), inverse_mask);
-}
-
-void ICACHE_FLASH_ATTR
-UART_SetParity(uint8 uart_no, UartParityMode Parity_mode)
-{
- CLEAR_PERI_REG_MASK(UART_CONF0(uart_no), UART_PARITY |UART_PARITY_EN);
- if(Parity_mode==NONE_BITS){
- }else{
- SET_PERI_REG_MASK(UART_CONF0(uart_no), Parity_mode|UART_PARITY_EN);
- }
-}
-
-void ICACHE_FLASH_ATTR
-UART_SetBaudrate(uint8 uart_no,uint32 baud_rate)
-{
- uart_div_modify(uart_no, UART_CLK_FREQ /baud_rate);
-}
-
-void ICACHE_FLASH_ATTR
-UART_SetFlowCtrl(uint8 uart_no,UART_HwFlowCtrl flow_ctrl,uint8 rx_thresh)
-{
- if(flow_ctrl&USART_HardwareFlowControl_RTS){
- PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDO_U, FUNC_U0RTS);
- SET_PERI_REG_BITS(UART_CONF1(uart_no),UART_RX_FLOW_THRHD,rx_thresh,UART_RX_FLOW_THRHD_S);
- SET_PERI_REG_MASK(UART_CONF1(uart_no), UART_RX_FLOW_EN);
- }else{
- CLEAR_PERI_REG_MASK(UART_CONF1(uart_no), UART_RX_FLOW_EN);
- }
- if(flow_ctrl&USART_HardwareFlowControl_CTS){
- PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTCK_U, FUNC_UART0_CTS);
- SET_PERI_REG_MASK(UART_CONF0(uart_no), UART_TX_FLOW_EN);
- }else{
- CLEAR_PERI_REG_MASK(UART_CONF0(uart_no), UART_TX_FLOW_EN);
- }
-}
-
-void ICACHE_FLASH_ATTR
-UART_WaitTxFifoEmpty(uint8 uart_no , uint32 time_out_us) //do not use if tx flow control enabled
-{
- uint32 t_s = system_get_time();
- while (READ_PERI_REG(UART_STATUS(uart_no)) & (UART_TXFIFO_CNT << UART_TXFIFO_CNT_S)){
-
- if(( system_get_time() - t_s )> time_out_us){
- break;
- }
- WRITE_PERI_REG(0X60000914, 0X73);//WTD
-
- }
-}
-
-
-bool ICACHE_FLASH_ATTR
-UART_CheckOutputFinished(uint8 uart_no, uint32 time_out_us)
-{
- uint32 t_start = system_get_time();
- uint8 tx_fifo_len;
- uint32 tx_buff_len;
- while(1){
- tx_fifo_len =( (READ_PERI_REG(UART_STATUS(uart_no))>>UART_TXFIFO_CNT_S)&UART_TXFIFO_CNT);
- if(pTxBuffer){
- tx_buff_len = ((pTxBuffer->UartBuffSize)-(pTxBuffer->Space));
- }else{
- tx_buff_len = 0;
- }
-
- if( tx_fifo_len==0 && tx_buff_len==0){
- return TRUE;
- }
- if( system_get_time() - t_start > time_out_us){
- return FALSE;
- }
- WRITE_PERI_REG(0X60000914, 0X73);//WTD
- }
-}
-
-
-void ICACHE_FLASH_ATTR
-UART_ResetFifo(uint8 uart_no)
-{
- SET_PERI_REG_MASK(UART_CONF0(uart_no), UART_RXFIFO_RST | UART_TXFIFO_RST);
- CLEAR_PERI_REG_MASK(UART_CONF0(uart_no), UART_RXFIFO_RST | UART_TXFIFO_RST);
-}
-
-void ICACHE_FLASH_ATTR
-UART_ClearIntrStatus(uint8 uart_no,uint32 clr_mask)
-{
- WRITE_PERI_REG(UART_INT_CLR(uart_no), clr_mask);
-}
-
-void ICACHE_FLASH_ATTR
-UART_SetIntrEna(uint8 uart_no,uint32 ena_mask)
-{
- SET_PERI_REG_MASK(UART_INT_ENA(uart_no), ena_mask);
-}
-
-
-void ICACHE_FLASH_ATTR
-UART_SetPrintPort(uint8 uart_no)
-{
- if(uart_no==1){
- os_install_putc1(uart1_write_char);
- }else{
- /*option 1: do not wait if uart fifo is full,drop current character*/
- os_install_putc1(uart0_write_char_no_wait);
- /*option 2: wait for a while if uart fifo is full*/
- os_install_putc1(uart0_write_char);
- }
-}
-
-
-//========================================================
-
-//
-///*test code*/
-//void ICACHE_FLASH_ATTR
-//uart_init_2(UartBautRate uart0_br, UartBautRate uart1_br)
-//{
-// // rom use 74880 baut_rate, here reinitialize
-// UartDev.baut_rate = uart0_br;
-// UartDev.exist_parity = STICK_PARITY_EN;
-// UartDev.parity = EVEN_BITS;
-// UartDev.stop_bits = ONE_STOP_BIT;
-// UartDev.data_bits = EIGHT_BITS;
-//
-// uart_config(UART0);
-// UartDev.baut_rate = uart1_br;
-// uart_config(UART1);
-// ETS_UART_INTR_ENABLE();
-//
-// // install uart1 putc callback
-// os_install_putc1((void *)uart1_write_char);//print output at UART1
-//}
-//
-//
diff --git a/user/uart_asyncdrv.h- b/user/uart_asyncdrv.h-
deleted file mode 100644
index 5730e00..0000000
--- a/user/uart_asyncdrv.h-
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- * File : uart.h
- * Copyright (C) 2013 - 2016, Espressif Systems
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of version 3 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see .
- */
-#ifndef UART_APP_H
-#define UART_APP_H
-
-#include
-
-#define UART_TX_BUFFER_SIZE 512 //Ring buffer length of tx buffer
-#define UART_RX_BUFFER_SIZE 512 //Ring buffer length of rx buffer
-
-#define UART_BUFF_EN 1 //use uart buffer , FOR UART0
-#define UART_SELFTEST 0 //set 1:enable the loop test demo for uart buffer, FOR UART0
-
-#define UART_HW_RTS 0 //set 1: enable uart hw flow control RTS, PIN MTDO, FOR UART0
-#define UART_HW_CTS 0 //set1: enable uart hw flow contrl CTS , PIN MTCK, FOR UART0
-
-#define UART0 0
-#define UART1 1
-
-typedef enum {
- FIVE_BITS = 0x0,
- SIX_BITS = 0x1,
- SEVEN_BITS = 0x2,
- EIGHT_BITS = 0x3
-} UartBitsNum4Char;
-
-typedef enum {
- ONE_STOP_BIT = 0x1,
- ONE_HALF_STOP_BIT = 0x2,
- TWO_STOP_BIT = 0x3
-} UartStopBitsNum;
-
-typedef enum {
- NONE_BITS = 0x2,
- ODD_BITS = 1,
- EVEN_BITS = 0
-} UartParityMode;
-
-typedef enum {
- STICK_PARITY_DIS = 0,
- STICK_PARITY_EN = 1
-} UartExistParity;
-
-typedef enum {
- UART_None_Inverse = 0x0,
- UART_Rxd_Inverse = UART_RXD_INV,
- UART_CTS_Inverse = UART_CTS_INV,
- UART_Txd_Inverse = UART_TXD_INV,
- UART_RTS_Inverse = UART_RTS_INV,
-} UART_LineLevelInverse;
-
-
-typedef enum {
- BIT_RATE_300 = 300,
- BIT_RATE_600 = 600,
- BIT_RATE_1200 = 1200,
- BIT_RATE_2400 = 2400,
- BIT_RATE_4800 = 4800,
- BIT_RATE_9600 = 9600,
- BIT_RATE_19200 = 19200,
- BIT_RATE_38400 = 38400,
- BIT_RATE_57600 = 57600,
- BIT_RATE_74880 = 74880,
- BIT_RATE_115200 = 115200,
- BIT_RATE_230400 = 230400,
- BIT_RATE_460800 = 460800,
- BIT_RATE_921600 = 921600,
- BIT_RATE_1843200 = 1843200,
- BIT_RATE_3686400 = 3686400,
-} UartBautRate;
-
-typedef enum {
- NONE_CTRL,
- HARDWARE_CTRL,
- XON_XOFF_CTRL
-} UartFlowCtrl;
-
-typedef enum {
- USART_HardwareFlowControl_None = 0x0,
- USART_HardwareFlowControl_RTS = 0x1,
- USART_HardwareFlowControl_CTS = 0x2,
- USART_HardwareFlowControl_CTS_RTS = 0x3
-} UART_HwFlowCtrl;
-
-typedef enum {
- EMPTY,
- UNDER_WRITE,
- WRITE_OVER
-} RcvMsgBuffState;
-
-typedef struct {
- uint32 RcvBuffSize;
- uint8 *pRcvMsgBuff;
- uint8 *pWritePos;
- uint8 *pReadPos;
- uint8 TrigLvl; //JLU: may need to pad
- RcvMsgBuffState BuffState;
-} RcvMsgBuff;
-
-typedef struct {
- uint32 TrxBuffSize;
- uint8 *pTrxBuff;
-} TrxMsgBuff;
-
-typedef enum {
- BAUD_RATE_DET,
- WAIT_SYNC_FRM,
- SRCH_MSG_HEAD,
- RCV_MSG_BODY,
- RCV_ESC_CHAR,
-} RcvMsgState;
-
-typedef struct {
- UartBautRate baut_rate;
- UartBitsNum4Char data_bits;
- UartExistParity exist_parity;
- UartParityMode parity;
- UartStopBitsNum stop_bits;
- UartFlowCtrl flow_ctrl;
- RcvMsgBuff rcv_buff;
- TrxMsgBuff trx_buff;
- RcvMsgState rcv_state;
- int received;
- int buff_uart_no; //indicate which uart use tx/rx buffer
-} UartDevice;
-
-void uart_init(UartBautRate uart0_br, UartBautRate uart1_br);
-
-///////////////////////////////////////
-#define UART_FIFO_LEN 128 //define the tx fifo length
-#define UART_TX_EMPTY_THRESH_VAL 0x10
-
-
-typedef enum {
- RUN = 0,
- BLOCK = 1,
-} TCPState;
-
-
-//==============================================
-#define FUNC_UART0_CTS 4
-#define FUNC_U0CTS 4
-#define FUNC_U1TXD_BK 2
-#define UART_LINE_INV_MASK (0x3f<<19)
-void UART_SetWordLength(uint8 uart_no, UartBitsNum4Char len);
-void UART_SetStopBits(uint8 uart_no, UartStopBitsNum bit_num);
-void UART_SetLineInverse(uint8 uart_no, UART_LineLevelInverse inverse_mask);
-void UART_SetParity(uint8 uart_no, UartParityMode Parity_mode);
-void UART_SetBaudrate(uint8 uart_no, uint32 baud_rate);
-void UART_SetFlowCtrl(uint8 uart_no, UART_HwFlowCtrl flow_ctrl, uint8 rx_thresh);
-void UART_WaitTxFifoEmpty(uint8 uart_no, uint32 time_out_us); //do not use if tx flow control enabled
-void UART_ResetFifo(uint8 uart_no);
-void UART_ClearIntrStatus(uint8 uart_no, uint32 clr_mask);
-void UART_SetIntrEna(uint8 uart_no, uint32 ena_mask);
-void UART_SetPrintPort(uint8 uart_no);
-bool UART_CheckOutputFinished(uint8 uart_no, uint32 time_out_us);
-//==============================================
-
-// Buffer functions
-uint16 rx_buff_deq(char* pdata, uint16 data_len);
-void tx_buff_enq(char* pdata, uint16 data_len);
-
-#endif
-
diff --git a/user/user_main.c b/user/user_main.c
index 49ab732..c51b3f5 100644
--- a/user/user_main.c
+++ b/user/user_main.c
@@ -94,13 +94,11 @@ void ICACHE_FLASH_ATTR user_init(void)
wifi_set_opmode(NULL_MODE); // saves to flash if changed - this might avoid the current spike on startup?
printf("\r\n");
- banner("====== ESP8266 Remote Terminal ======");
+ banner("====== ESPTerm ======");
banner_info("Firmware (c) Ondrej Hruska, 2017");
- banner_info("github.com/MightyPork/esp-vt100-firmware");
+ banner_info(TERMINAL_GITHUB_REPO);
banner_info("");
- banner_info("Version " FIRMWARE_VERSION ", built " __DATE__ " at " __TIME__);
- banner_info("");
- banner_info("Department of Measurement, CTU Prague");
+ banner_info("Version "FIRMWARE_VERSION", built " __DATE__ " at " __TIME__);
printf("\r\n");
ioInit();