From 1910386729c58621a1e9fa85793b596659ba00b9 Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 16 Jan 2017 16:37:53 +0100 Subject: [PATCH] Added support for Telnet commands to generate BREAK BREAK could be generated through Telnet command syntax (see RFC2217) by offering "Set BREAK state ON", "Set BREAK state OFF" and "Request BREAK state". --- serial/serbridge.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/serial/serbridge.c b/serial/serbridge.c index d233375..ee5ea37 100644 --- a/serial/serbridge.c +++ b/serial/serbridge.c @@ -44,6 +44,9 @@ serbridgeConnData connData[MAX_CONN]; #define SetDataSize 2 // Set data size #define SetParity 3 // Set parity #define SetControl 5 // Set control lines +#define BRK_REQ 4 // request current BREAK state +#define BRK_ON 5 // set BREAK (TX-line to LOW) +#define BRK_OFF 6 // reset BREAK #define DTR_ON 8 // used here to reset microcontroller #define DTR_OFF 9 #define RTS_ON 11 // used here to signal ISP (in-system-programming) to uC @@ -156,6 +159,28 @@ telnetUnwrap(serbridgeConnData *conn, uint8_t *inBuf, int len) } if (in_mcu_flashing > 0) in_mcu_flashing--; break; + case BRK_REQ: + char respBuf[7] = { IAC, SB, ComPortOpt, SetControl, GPIO_INPUT_GET(1), IAC, SE }; + espbuffsend(conn, respBuf, 7); +#ifdef SERBR_DBG + os_printf("Telnet: BREAK state requested: state = %d)\n", GPIO_INPUT_GET(1)); +#endif + break; + case BRK_ON: + while (((READ_PERI_REG(UART_STATUS(UART0))>>UART_TXFIFO_CNT_S)&UART_TXFIFO_CNT)>0); // wait until TX-FIFO of UART0 is empty + PIN_FUNC_SELECT(PERIPHS_IO_MUX_U0TXD_U, FUNC_GPIO1); // set TX pint to IO + GPIO_OUTPUT_SET(1, 0); +#ifdef SERBR_DBG + os_printf("Telnet: BREAK ON: set TX to LOW\n"); +#endif + break; + case BRK_OFF: + GPIO_OUTPUT_SET(1, 1); + PIN_FUNC_SELECT(PERIPHS_IO_MUX_U0TXD_U, FUNC_U0TXD); +#ifdef SERBR_DBG + os_printf("Telnet: BREAK OFF: set TX to HIGH\n"); +#endif + break; } state = TN_end; break;