72 #define SLIP_ESC_END 0xDC 73 #define SLIP_ESC_ESC 0xDD 77 #define SLIP_MAX_SIZE 1500 84 #ifndef SLIP_SIO_SPEED 85 #define SLIP_SIO_SPEED(sio_fd) 0 88 enum slipif_recv_state {
100 struct pbuf *rxpackets;
116 struct slipif_priv *priv;
126 priv = (
struct slipif_priv *)netif->
state;
132 for (q = p; q !=
NULL; q = q->
next) {
133 for (i = 0; i < q->
len; i++) {
169 slipif_output_v4(
struct netif *netif,
struct pbuf *p,
const ip4_addr_t *ipaddr)
172 return slipif_output(netif, p);
187 slipif_output_v6(
struct netif *netif,
struct pbuf *p,
const ip6_addr_t *ipaddr)
190 return slipif_output(netif, p);
203 slipif_rxbyte(
struct netif *netif,
u8_t c)
205 struct slipif_priv *priv;
211 priv = (
struct slipif_priv *)netif->
state;
213 switch (priv->state) {
214 case SLIP_RECV_NORMAL:
217 if (priv->recved > 0) {
226 priv->p = priv->q =
NULL;
227 priv->i = priv->recved = 0;
232 priv->state = SLIP_RECV_ESCAPE;
238 case SLIP_RECV_ESCAPE:
251 priv->state = SLIP_RECV_NORMAL;
258 if (priv->p ==
NULL) {
263 if (priv->p ==
NULL) {
270 if (priv->q !=
NULL) {
280 if ((priv->p !=
NULL) && (priv->recved <= SLIP_MAX_SIZE)) {
281 ((
u8_t *)priv->p->payload)[priv->i] = c;
284 if (priv->i >= priv->p->len) {
287 if (priv->p->next !=
NULL && priv->p->next->len > 0) {
289 priv->p = priv->p->next;
306 slipif_rxbyte_input(
struct netif *netif,
u8_t c)
309 p = slipif_rxbyte(netif, c);
317 #if SLIP_USE_RX_THREAD 326 slipif_loop_thread(
void *nf)
329 struct netif *netif = (
struct netif *)nf;
330 struct slipif_priv *priv = (
struct slipif_priv *)netif->
state;
333 if (
sio_read(priv->sd, &c, 1) > 0) {
334 slipif_rxbyte_input(netif, c);
359 struct slipif_priv *priv;
365 priv = (
struct slipif_priv *)
mem_malloc(
sizeof(
struct slipif_priv));
370 netif->
name[0] =
's';
371 netif->
name[1] =
'l';
372 netif->output = slipif_output_v4;
374 netif->output_ip6 = slipif_output_v6;
376 netif->
mtu = SLIP_MAX_SIZE;
382 sio_num = netif->
num;
395 priv->state = SLIP_RECV_NORMAL;
399 priv->rxpackets =
NULL;
407 #if SLIP_USE_RX_THREAD 424 struct slipif_priv *priv;
429 priv = (
struct slipif_priv *)netif->
state;
432 slipif_rxbyte_input(netif, c);
443 slipif_process_rxqueue(
struct netif *netif)
445 struct slipif_priv *priv;
451 priv = (
struct slipif_priv *)netif->
state;
454 while (priv->rxpackets !=
NULL) {
455 struct pbuf *p = priv->rxpackets;
462 priv->rxpackets = q->
next;
465 priv->rxpackets =
NULL;
481 slipif_rxbyte_enqueue(
struct netif *netif,
u8_t data)
484 struct slipif_priv *priv = (
struct slipif_priv *)netif->
state;
487 p = slipif_rxbyte(netif, data);
490 if (priv->rxpackets !=
NULL) {
520 slipif_received_byte(
struct netif *netif,
u8_t data)
524 slipif_rxbyte_enqueue(netif, data);
538 slipif_received_bytes(
struct netif *netif,
u8_t *data,
u8_t len)
545 for (i = 0; i <
len; i++, rxdata++) {
546 slipif_rxbyte_enqueue(netif, *rxdata);
#define SLIPIF_THREAD_STACKSIZE
sys_thread_t sys_thread_new(const char *name, lwip_thread_fn thread, void *arg, int stacksize, int prio)
err_t slipif_init(struct netif *netif)
u32_t sio_tryread(sio_fd_t fd, u8_t *data, u32_t len)
void mem_free(void *rmem)
u32_t sio_read(sio_fd_t fd, u8_t *data, u32_t len)
void pbuf_realloc(struct pbuf *p, u16_t new_len)
struct pbuf * pbuf_alloc(pbuf_layer layer, u16_t length, pbuf_type type)
#define PBUF_POOL_BUFSIZE
#define SYS_ARCH_DECL_PROTECT(lev)
void sio_send(u8_t c, sio_fd_t fd)
u8_t pbuf_free(struct pbuf *p)
#define PBUF_LINK_ENCAPSULATION_HLEN
#define LINK_STATS_INC(x)
#define LWIP_ASSERT(message, assertion)
#define SLIPIF_THREAD_PRIO
sio_fd_t sio_open(u8_t devnum)
void slipif_poll(struct netif *netif)
void pbuf_cat(struct pbuf *h, struct pbuf *t)
#define SYS_ARCH_PROTECT(lev)
#define SYS_ARCH_UNPROTECT(lev)
#define SLIPIF_THREAD_NAME
#define MIB2_INIT_NETIF(netif, type, speed)
void * mem_malloc(mem_size_t size)
#define LWIP_DEBUGF(debug, message)
#define LWIP_UNUSED_ARG(x)