/** * TODO file description * * Created on 2020/04/09. */ #ifndef CSPEMU_CONSOLE_IOIMPL_H #define CSPEMU_CONSOLE_IOIMPL_H #include #include #include #include /** Console ring buffer capacity */ #define CONSOLE_BUFSIZE 512 /** Enum for tagging ioimpl kind */ enum console_iokind { CONSOLE_IO_FILES, CONSOLE_IO_TELNET, }; #define CONSOLE_IOIMPL_MAGIC 0x079fbf72 struct console_ioimpl { /** This is a tag for the following union */ enum console_iokind kind; union { /** STDIO variant data */ struct { /** STDIN */ FILE *inf; /** STDOUT */ FILE *outf; } files; /** Telnet variant data */ struct { /** TCP client handle */ TcpdClient_t tcpcli; /** Received data ring buffer */ RingbufHandle_t console_stdin_ringbuf; } telnet; }; /** Console context */ console_ctx_t ctx; uint32_t __magic; }; /** * Setup UART IO for console */ void console_setup_uart_stdio(void); /** * Start console for stdin/stdout (UART) * * @param pIo - pointer where the allocated struct will be stored * @param hdl - handle to the created task, can be NULL if not used * @return success */ esp_err_t console_start_stdio(struct console_ioimpl **pIo, TaskHandle_t * hdl); /** * Start console for a TCP client * * @param pIo - pointer where the allocated struct will be stored * @param hdl - handle to the created task, can be NULL if not used * @param client - TCP server client handle * @return success */ esp_err_t console_start_tcp(struct console_ioimpl **pIo, TaskHandle_t * hdl, TcpdClient_t client); #endif //CSPEMU_CONSOLE_IOIMPL_H