Various changes

Added new function to reset serial bridge.
Modified other serial bridge functions.
Add variables to later allow for the connection type to be
changed(secured, etc).
Set flash values for telnet to defaults if they are not set or =0.
pull/205/head
Alex 9 years ago
parent 338f9838b2
commit 3fdfe93bd4
  1. 28
      esp-link/cgitelnet.c
  2. 5
      esp-link/config.c
  3. 4
      esp-link/config.h
  4. 5
      esp-link/main.c
  5. 2
      html/home.html
  6. 66
      serial/serbridge.c
  7. 4
      serial/serbridge.h

@ -28,12 +28,16 @@ int ICACHE_FLASH_ATTR cgiTelnetSet(HttpdConnData *connData) {
return HTTPD_CGI_DONE; // Connection aborted return HTTPD_CGI_DONE; // Connection aborted
} }
char *coll;
int8_t ok = 0; int8_t ok = 0;
uint16_t port1, port2; uint16_t port1, port2;
ok |= getUInt16Arg(connData, "port1", &port1); ok |= getUInt16Arg(connData, "port1", &port1);
ok |= getUInt16Arg(connData, "port2", &port2); ok |= getUInt16Arg(connData, "port2", &port2);
if (ok < 0) { coll = "Failed to fetch ports. Are they valid?"; goto collision; } if (ok <= 0) { //If we get at least one good value, this should be >= 1
os_printf("Unable to fetch telnet ports.\n Received: port1=%d port2=%d\n",
flashConfig.telnet_port1, flashConfig.telnet_port2);
errorResponse(connData, 400, buff);
return HTTPD_CGI_DONE;
}
if (ok > 0) { if (ok > 0) {
// fill both port variables from flash or ajax provided value // fill both port variables from flash or ajax provided value
@ -41,13 +45,18 @@ int ICACHE_FLASH_ATTR cgiTelnetSet(HttpdConnData *connData) {
if (!port2) port2 = flashConfig.telnet_port2; if (!port2) port2 = flashConfig.telnet_port2;
// check whether ports are different // check whether ports are different
if (port1 == port2) { coll = "Ports cannot be the same!"; goto collision; } if (port1 == port2) {
os_printf("Ports cannot be the same.\n Tried to set: port1=%d port2=%d\n",
flashConfig.telnet_port1, flashConfig.telnet_port2);
errorResponse(connData, 400, buff);
return HTTPD_CGI_DONE;
}
// we're good, set flashconfig // we're good, set flashconfig
flashConfig.telnet_port1 = port1; flashConfig.telnet_port1 = port1;
flashConfig.telnet_port2 = port2; flashConfig.telnet_port2 = port2;
os_printf("Telnet ports changed: port1=%d port2=%d\n", os_printf("Telnet ports changed: port1=%d port2=%d\n",
flashConfig.telnet_port1, flashConfig.telnet_port2); flashConfig.telnet_port1, flashConfig.telnet_port2);
// save to flash // save to flash
if (configSave()) { if (configSave()) {
@ -60,16 +69,13 @@ int ICACHE_FLASH_ATTR cgiTelnetSet(HttpdConnData *connData) {
} }
// apply the changes // apply the changes
serbridgeInit(flashConfig.telnet_port1, flashConfig.telnet_port2); serbridgeInit();
serbridgeStart(1, flashConfig.telnet_port1, flashDefault.telnet_port1mode);
serbridgeStart(2, flashConfig.telnet_port2, flashDefault.telnet_port2mode);
} }
return HTTPD_CGI_DONE; return HTTPD_CGI_DONE;
collision: {
char buff[128];
os_sprintf(buff, "Ports assignment for %s collides with another assignment", coll);
errorResponse(connData, 400, buff);
return HTTPD_CGI_DONE;
}
} }
int ICACHE_FLASH_ATTR cgiTelnet(HttpdConnData *connData) { int ICACHE_FLASH_ATTR cgiTelnet(HttpdConnData *connData) {

@ -37,6 +37,8 @@ FlashConfig flashDefault = {
.stop_bits = ONE_STOP_BIT, .stop_bits = ONE_STOP_BIT,
.telnet_port1 = 23, .telnet_port1 = 23,
.telnet_port2 = 2323, .telnet_port2 = 2323,
.telnet_port1Mode = 0,
.telnet_port2Mode = 0,
}; };
typedef union { typedef union {
@ -163,6 +165,9 @@ bool ICACHE_FLASH_ATTR configRestore(void) {
flashConfig.parity = flashDefault.parity; flashConfig.parity = flashDefault.parity;
flashConfig.stop_bits = flashDefault.stop_bits; flashConfig.stop_bits = flashDefault.stop_bits;
} }
if (flashConfig.telnet_port1 == 0) { flashConfig.telnet_port1 = flashDefault.telnet_port1; }
if (flashConfig.telnet_port2 == 0) { flashConfig.telnet_port2 = flashDefault.telnet_port2; }
return true; return true;
} }

@ -41,8 +41,10 @@ typedef struct {
int8_t data_bits; int8_t data_bits;
int8_t parity; int8_t parity;
int8_t stop_bits; int8_t stop_bits;
uint16_t telnet_port1, // Telnet port settings uint16_t telnet_port1, // Telnet port settings
telnet_port2; telnet_port2;
int8_t telnet_port1mode,
telnet_port2mode;
} FlashConfig; } FlashConfig;
extern FlashConfig flashConfig; extern FlashConfig flashConfig;

@ -181,7 +181,10 @@ user_init(void) {
WEB_Init(); WEB_Init();
// init the wifi-serial transparent bridge (port 23) // init the wifi-serial transparent bridge (port 23)
serbridgeInit(flashConfig.telnet_port1, flashConfig.telnet_port1); serbridgeInit();
serbridgeStart(1, flashConfig.telnet_port1, flashDefault.telnet_port1mode);
serbridgeStart(2, flashConfig.telnet_port2, flashDefault.telnet_port2mode);
uart_add_recv_cb(&serbridgeUartCb); uart_add_recv_cb(&serbridgeUartCb);
#ifdef SHOW_HEAP_USE #ifdef SHOW_HEAP_USE
os_timer_disarm(&prHeapTimer); os_timer_disarm(&prHeapTimer);

@ -50,7 +50,7 @@
<a href="https://github.com/jeelabs/esp-link/blob/master/README.md">the online README</a> <a href="https://github.com/jeelabs/esp-link/blob/master/README.md">the online README</a>
for up-to-date help.</p> for up-to-date help.</p>
</div> </div>
<div class="card"> <div class="card">
<h1>Telnet Serial-Bridge</h1> <h1>Telnet Serial-Bridge</h1>
<p style="margin-bottom:0;">There are two ports available for telnet to use by default: 23 &amp; 2323 <br> <p style="margin-bottom:0;">There are two ports available for telnet to use by default: 23 &amp; 2323 <br>
Note - this time, only port1 may be changed &amp; used sucessfully.</p> Note - this time, only port1 may be changed &amp; used sucessfully.</p>

@ -16,8 +16,9 @@
#define syslog(X1...) #define syslog(X1...)
#endif #endif
static struct espconn serbridgeConn1; // plain bridging port static struct espconn serbridgeConn[1]; // plain bridging port
static struct espconn serbridgeConn2; // programming port static struct espconn serbridgeConn[2]; // programming port
static esp_tcp serbridgeTcp[1], serbridgeTcp[2];
static esp_tcp serbridgeTcp1, serbridgeTcp2; static esp_tcp serbridgeTcp1, serbridgeTcp2;
static int8_t mcu_reset_pin, mcu_isp_pin; static int8_t mcu_reset_pin, mcu_isp_pin;
@ -421,7 +422,7 @@ serbridgeConnectCb(void *arg)
connData[i].readytosend = true; connData[i].readytosend = true;
connData[i].conn_mode = cmInit; connData[i].conn_mode = cmInit;
// if it's the second port we start out in programming mode // if it's the second port we start out in programming mode
if (conn->proto.tcp->local_port == serbridgeConn2.proto.tcp->local_port) if (conn->proto.tcp->local_port == serbridgeConn[2].proto.tcp->local_port)
connData[i].conn_mode = cmPGMInit; connData[i].conn_mode = cmPGMInit;
espconn_regist_recvcb(conn, serbridgeRecvCb); espconn_regist_recvcb(conn, serbridgeRecvCb);
@ -470,35 +471,44 @@ serbridgeInitPins()
// Start transparent serial bridge TCP server on specified port (typ. 23) // Start transparent serial bridge TCP server on specified port (typ. 23)
void ICACHE_FLASH_ATTR void ICACHE_FLASH_ATTR
serbridgeInit(int port1, int port2) serbridgeInit()
{ {
serbridgeInitPins(); serbridgeInitPins();
os_memset(connData, 0, sizeof(connData)); os_memset(connData, 0, sizeof(connData));
os_memset(&serbridgeTcp1, 0, sizeof(serbridgeTcp1)); os_memset(&serbridgeTcp[1], 0, sizeof(serbridgeTcp[1]));
os_memset(&serbridgeTcp2, 0, sizeof(serbridgeTcp2)); os_memset(&serbridgeTcp[2], 0, sizeof(serbridgeTcp[2]));
}
// set-up the primary port for plain bridging
serbridgeConn1.type = ESPCONN_TCP; // Start transparent serial bridge TCP server on specified port (typ. 23)
serbridgeConn1.state = ESPCONN_NONE; void ICACHE_FLASH_ATTR
serbridgeTcp1.local_port = port1; serbridgeStart(int ix, int port, int mode)
serbridgeConn1.proto.tcp = &serbridgeTcp1; {
espconn_regist_connectcb(&serbridgeConn1, serbridgeConnectCb); if (ix < 0 || ix > 2) // FIXME hardcoded limit
espconn_accept(&serbridgeConn1); return;
espconn_tcp_set_max_con_allow(&serbridgeConn1, MAX_CONN); if (serbridgeConn[ix] != NULL) { serbridgeCleanup(serbridgeConn[ix]); } //If we are already initialized, let's clean it up.
espconn_regist_time(&serbridgeConn1, SER_BRIDGE_TIMEOUT, 0); if (0 < port && port < 65536 && port != 80) {
serbridgeConn[ix].type = ESPCONN_TCP;
// set-up the secondary port for programming serbridgeConn[ix].state = ESPCONN_NONE;
serbridgeConn2.type = ESPCONN_TCP; serbridgeTcp[ix].local_port = port;
serbridgeConn2.state = ESPCONN_NONE; serbridgeConn[ix].proto.tcp = &serbridgeTcp[ix];
serbridgeTcp2.local_port = port2;
serbridgeConn2.proto.tcp = &serbridgeTcp2; espconn_regist_connectcb(&serbridgeConn[ix], serbridgeConnectCb);
espconn_accept(&serbridgeConn[ix]);
espconn_regist_connectcb(&serbridgeConn2, serbridgeConnectCb); espconn_tcp_set_max_con_allow(&serbridgeConn[ix], MAX_CONN);
espconn_accept(&serbridgeConn2); espconn_regist_time(&serbridgeConn[ix], SER_BRIDGE_TIMEOUT, 0);
espconn_tcp_set_max_con_allow(&serbridgeConn2, MAX_CONN); }
espconn_regist_time(&serbridgeConn2, SER_BRIDGE_TIMEOUT, 0); }
static void ICACHE_FLASH_ATTR
serbridgeCleanup(void *arg)
{
serbridgeConnData *conn = ((struct espconn*)arg)->reverse;
if (conn == NULL) return;
// Free memory & set to NULL
os_free(conn);
conn = NULL;
} }
int ICACHE_FLASH_ATTR serbridgeInMCUFlashing() int ICACHE_FLASH_ATTR serbridgeInMCUFlashing()

@ -31,11 +31,11 @@ typedef struct serbridgeConnData {
} serbridgeConnData; } serbridgeConnData;
// port1 is transparent&programming, second port is programming only // port1 is transparent&programming, second port is programming only
void ICACHE_FLASH_ATTR serbridgeInit(int port1, int port2); void ICACHE_FLASH_ATTR serbridgeInit();
void ICACHE_FLASH_ATTR serbridgeStart(int ix, int port, int mode);
void ICACHE_FLASH_ATTR serbridgeInitPins(void); void ICACHE_FLASH_ATTR serbridgeInitPins(void);
void ICACHE_FLASH_ATTR serbridgeUartCb(char *buf, short len); void ICACHE_FLASH_ATTR serbridgeUartCb(char *buf, short len);
void ICACHE_FLASH_ATTR serbridgeReset(); void ICACHE_FLASH_ATTR serbridgeReset();
int ICACHE_FLASH_ATTR serbridgeInMCUFlashing(); int ICACHE_FLASH_ATTR serbridgeInMCUFlashing();
// callback when receiving UART chars when in programming mode // callback when receiving UART chars when in programming mode

Loading…
Cancel
Save