# ifndef __SER_BRIDGE_H__
# define __SER_BRIDGE_H__
# include <ip_addr.h>
# include <c_types.h>
# include <espconn.h>
# define MAX_CONN 4
# define SER_BRIDGE_TIMEOUT 300 // 300 seconds = 5 minutes
// Send buffer size
# define MAX_TXBUFFER (2*1460)
enum connModes {
cmInit = 0 , // initialization mode: nothing received yet
cmPGMInit , // initialization mode for programming
cmTransparent , // transparent mode
cmPGM , // Arduino/AVR/ARM programming mode
cmTelnet , // use telnet escape sequences for programming mode
} ;
typedef struct serbridgeConnData {
struct espconn * conn ;
enum connModes conn_mode ; // connection mode
uint8_t telnet_state ;
uint16 txbufferlen ; // length of data in txbuffer
char * txbuffer ; // buffer for the data to send
char * sentbuffer ; // buffer sent, awaiting callback to get freed
uint32_t txoverflow_at ; // when the transmitter started to overflow
bool readytosend ; // true, if txbuffer can be sent by espconn_sent
} serbridgeConnData ;
// port1 is transparent&programming, second port is programming only
void ICACHE_FLASH_ATTR serbridgeInit ( int port1 , int port2 ) ;
void ICACHE_FLASH_ATTR serbridgeInitPins ( void ) ;
void ICACHE_FLASH_ATTR serbridgeUartCb ( char * buf , short len ) ;
void ICACHE_FLASH_ATTR serbridgeReset ( ) ;
int ICACHE_FLASH_ATTR serbridgeInMCUFlashing ( ) ;
// callback when receiving UART chars when in programming mode
extern void ( * programmingCB ) ( char * buffer , short length ) ;
# endif /* __SER_BRIDGE_H__ */