亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? slipif.c

?? stm32+ucos-ii
?? C
字號:
/**
 * @file
 * SLIP Interface
 *
 */

/*
 * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
 * All rights reserved. 
 *
 * Redistribution and use in source and binary forms, with or without 
 * modification, are permitted provided that the following conditions 
 * are met: 
 * 1. Redistributions of source code must retain the above copyright 
 *    notice, this list of conditions and the following disclaimer. 
 * 2. Redistributions in binary form must reproduce the above copyright 
 *    notice, this list of conditions and the following disclaimer in the 
 *    documentation and/or other materials provided with the distribution. 
 * 3. Neither the name of the Institute nor the names of its contributors 
 *    may be used to endorse or promote products derived from this software 
 *    without specific prior written permission. 
 *
 * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND 
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE 
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 
 * SUCH DAMAGE. 
 *
 * This file is built upon the file: src/arch/rtxc/netif/sioslip.c
 *
 * Author: Magnus Ivarsson <magnus.ivarsson(at)volvo.com> 
 */

/* 
 * This is an arch independent SLIP netif. The specific serial hooks must be
 * provided by another file. They are sio_open, sio_recv and sio_send
 */

#include "netif/slipif.h"
#include "lwip/opt.h"

#if LWIP_HAVE_SLIPIF

#include "lwip/def.h"
#include "lwip/pbuf.h"
#include "lwip/sys.h"
#include "lwip/stats.h"
#include "lwip/snmp.h"
#include "lwip/sio.h"

#define SLIP_END     0300 /* 0xC0 */
#define SLIP_ESC     0333 /* 0xDB */
#define SLIP_ESC_END 0334 /* 0xDC */
#define SLIP_ESC_ESC 0335 /* 0xDD */

#define MAX_SIZE     1500

/**
 * Send a pbuf doing the necessary SLIP encapsulation
 *
 * Uses the serial layer's sio_send()
 *
 * @param netif the lwip network interface structure for this slipif
 * @param p the pbuf chaing packet to send
 * @param ipaddr the ip address to send the packet to (not used for slipif)
 * @return always returns ERR_OK since the serial layer does not provide return values
 */
err_t
slipif_output(struct netif *netif, struct pbuf *p, struct ip_addr *ipaddr)
{
  struct pbuf *q;
  u16_t i;
  u8_t c;

  LWIP_ASSERT("netif != NULL", (netif != NULL));
  LWIP_ASSERT("netif->state != NULL", (netif->state != NULL));
  LWIP_ASSERT("p != NULL", (p != NULL));

  LWIP_UNUSED_ARG(ipaddr);

  /* Send pbuf out on the serial I/O device. */
  sio_send(SLIP_END, netif->state);

  for (q = p; q != NULL; q = q->next) {
    for (i = 0; i < q->len; i++) {
      c = ((u8_t *)q->payload)[i];
      switch (c) {
      case SLIP_END:
        sio_send(SLIP_ESC, netif->state);
        sio_send(SLIP_ESC_END, netif->state);
        break;
      case SLIP_ESC:
        sio_send(SLIP_ESC, netif->state);
        sio_send(SLIP_ESC_ESC, netif->state);
        break;
      default:
        sio_send(c, netif->state);
        break;
      }
    }
  }
  sio_send(SLIP_END, netif->state);
  return ERR_OK;
}

/**
 * Handle the incoming SLIP stream character by character
 *
 * Poll the serial layer by calling sio_recv()
 *
 * @param netif the lwip network interface structure for this slipif
 * @return The IP packet when SLIP_END is received 
 */
static struct pbuf *
slipif_input(struct netif *netif)
{
  u8_t c;
  /* q is the whole pbuf chain for a packet, p is the current pbuf in the chain */
  struct pbuf *p, *q;
  u16_t recved;
  u16_t i;

  LWIP_ASSERT("netif != NULL", (netif != NULL));
  LWIP_ASSERT("netif->state != NULL", (netif->state != NULL));

  q = p = NULL;
  recved = i = 0;
  c = 0;

  while (1) {
    c = sio_recv(netif->state);
    switch (c) {
    case SLIP_END:
      if (recved > 0) {
        /* Received whole packet. */
        /* Trim the pbuf to the size of the received packet. */
        pbuf_realloc(q, recved);
        
        LINK_STATS_INC(link.recv);
        
        LWIP_DEBUGF(SLIP_DEBUG, ("slipif: Got packet\n"));
        return q;
      }
      break;

    case SLIP_ESC:
      c = sio_recv(netif->state);
      switch (c) {
      case SLIP_ESC_END:
        c = SLIP_END;
        break;
      case SLIP_ESC_ESC:
        c = SLIP_ESC;
        break;
      }
      /* FALLTHROUGH */

    default:
      /* byte received, packet not yet completely received */
      if (p == NULL) {
        /* allocate a new pbuf */
        LWIP_DEBUGF(SLIP_DEBUG, ("slipif_input: alloc\n"));
        p = pbuf_alloc(PBUF_LINK, PBUF_POOL_BUFSIZE, PBUF_POOL);

        if (p == NULL) {
          LINK_STATS_INC(link.drop);
          LWIP_DEBUGF(SLIP_DEBUG, ("slipif_input: no new pbuf! (DROP)\n"));
          /* don't process any further since we got no pbuf to receive to */
          break;
        }

        if (q != NULL) {
          /* 'chain' the pbuf to the existing chain */
          pbuf_cat(q, p);
        } else {
          /* p is the first pbuf in the chain */
          q = p;
        }
      }

      /* this automatically drops bytes if > MAX_SIZE */
      if ((p != NULL) && (recved <= MAX_SIZE)) {
        ((u8_t *)p->payload)[i] = c;
        recved++;
        i++;
        if (i >= p->len) {
          /* on to the next pbuf */
          i = 0;
          if (p->next != NULL && p->next->len > 0) {
            /* p is a chain, on to the next in the chain */
            p = p->next;
          } else {
            /* p is a single pbuf, set it to NULL so next time a new
             * pbuf is allocated */
            p = NULL;
          }
        }
      }
      break;
    }
  }
  return NULL;
}

#if !NO_SYS
/**
 * The SLIP input thread.
 *
 * Feed the IP layer with incoming packets
 *
 * @param nf the lwip network interface structure for this slipif
 */
static void
slipif_loop(void *nf)
{
  struct pbuf *p;
  struct netif *netif = (struct netif *)nf;

  while (1) {
    p = slipif_input(netif);
    if (p != NULL) {
      if (netif->input(p, netif) != ERR_OK) {
        pbuf_free(p);
        p = NULL;
      }
    }
  }
}
#endif /* !NO_SYS */

/**
 * SLIP netif initialization
 *
 * Call the arch specific sio_open and remember
 * the opened device in the state field of the netif.
 *
 * @param netif the lwip network interface structure for this slipif
 * @return ERR_OK if serial line could be opened,
 *         ERR_IF is serial line couldn't be opened
 *
 * @note netif->num must contain the number of the serial port to open
 *       (0 by default)
 */
err_t
slipif_init(struct netif *netif)
{

  LWIP_DEBUGF(SLIP_DEBUG, ("slipif_init: netif->num=%"U16_F"\n", (u16_t)netif->num));

  netif->name[0] = 's';
  netif->name[1] = 'l';
  netif->output = slipif_output;
  netif->mtu = MAX_SIZE;
  netif->flags = NETIF_FLAG_POINTTOPOINT;

  /* Try to open the serial port (netif->num contains the port number). */
  netif->state = sio_open(netif->num);
  if (!netif->state) {
    /* Opening the serial port failed. */
    return ERR_IF;
  }

  /* initialize the snmp variables and counters inside the struct netif
   * ifSpeed: no assumption can be made without knowing more about the
   * serial line!
   */
  NETIF_INIT_SNMP(netif, snmp_ifType_slip, 0);

  /* Create a thread to poll the serial line. */
  sys_thread_new(SLIPIF_THREAD_NAME, slipif_loop, netif, SLIPIF_THREAD_STACKSIZE, SLIPIF_THREAD_PRIO);
  return ERR_OK;
}
#endif /* LWIP_HAVE_SLIPIF */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲123区在线观看| 日本一区二区免费在线观看视频| 国产成人自拍在线| 国产中文一区二区三区| 激情深爱一区二区| 韩国视频一区二区| 国产精品一二三四区| 国产精品主播直播| 国产成人av一区| 国产69精品一区二区亚洲孕妇| 国产一区在线不卡| 国产成人99久久亚洲综合精品| 成人免费高清在线观看| 91免费视频观看| 在线亚洲一区二区| 欧美美女黄视频| 日韩三级.com| 中文在线一区二区| 亚洲激情自拍偷拍| 日韩在线一区二区| 国产一区美女在线| av亚洲精华国产精华精华 | 中文字幕制服丝袜一区二区三区| 国产亚洲综合色| 亚洲色大成网站www久久九九| 亚洲一区二区三区小说| 免费在线一区观看| 91社区在线播放| 欧美一区二区三区四区五区| 欧美高清在线精品一区| 一区二区三区资源| 精品一区二区三区不卡 | 欧美在线不卡一区| 精品久久一区二区| 亚洲欧美一区二区不卡| 青青草伊人久久| av动漫一区二区| 欧美电影免费观看完整版| 国产精品嫩草影院av蜜臀| 亚洲aⅴ怡春院| 丁香激情综合国产| 91精品在线观看入口| 综合在线观看色| 国产一区三区三区| 91麻豆精品国产91久久久使用方法| 国产欧美一区二区精品婷婷| 五月天国产精品| 91在线视频免费91| 久久久亚洲精品石原莉奈| 亚洲在线免费播放| 99精品黄色片免费大全| 久久色.com| 日本欧美肥老太交大片| 在线免费观看日本一区| 国产精品私人影院| 极品少妇xxxx精品少妇| 91精品久久久久久久99蜜桃 | 中文字幕久久午夜不卡| 热久久国产精品| 欧美性大战久久久久久久蜜臀| 久久精品这里都是精品| 美女看a上一区| 欧美男人的天堂一二区| 一区二区三区欧美久久| 色一区在线观看| 国产精品久久久久久亚洲伦 | 欧美一区二区三区在线观看| 一区二区三区日韩精品| 91丝袜呻吟高潮美腿白嫩在线观看| 2023国产精品| 精品一区二区在线视频| 欧美一区二区三区四区久久| 天堂久久一区二区三区| 欧美狂野另类xxxxoooo| 五月天丁香久久| 欧美一区2区视频在线观看| 日韩国产精品大片| 日韩三级在线观看| 精品一区二区三区在线视频| 欧美成人精品1314www| 国产在线不卡一卡二卡三卡四卡| 日韩欧美国产高清| 国产美女久久久久| 欧美国产精品一区二区三区| 成人动漫一区二区| 亚洲欧美国产三级| 欧美色图12p| 日韩电影在线观看一区| 精品少妇一区二区三区视频免付费 | 亚洲欧美日韩国产综合| 91久久精品网| 丝袜a∨在线一区二区三区不卡| 欧美日韩午夜影院| 麻豆精品视频在线| 国产精品久久久久久久久动漫| 99天天综合性| 亚洲一区二区偷拍精品| 欧美一区二区三区四区高清| 国产一区视频网站| 亚洲精品五月天| 7777女厕盗摄久久久| 国产高清精品久久久久| 亚洲欧洲日韩女同| 欧美乱妇15p| 国产成人av影院| 亚洲图片欧美色图| 久久先锋影音av| 色吊一区二区三区| 捆绑变态av一区二区三区| 国产精品久久久久影院| 91精品欧美综合在线观看最新| 国产精品一区二区男女羞羞无遮挡| 亚洲精品中文字幕乱码三区| 日韩女优制服丝袜电影| 色婷婷av一区二区三区之一色屋| 奇米精品一区二区三区在线观看| 1000部国产精品成人观看| 欧美一级二级三级蜜桃| 日本久久一区二区三区| 久久99精品国产91久久来源| 亚洲精品国产视频| 久久久久国产精品麻豆ai换脸| 在线视频国内一区二区| 国产精品1区2区3区在线观看| 夜夜爽夜夜爽精品视频| 国产欧美一区二区精品性| 日韩一级欧美一级| 在线观看国产一区二区| 成人精品一区二区三区中文字幕| 日韩高清中文字幕一区| 一区二区三区精品视频在线| 久久精品一二三| 日韩片之四级片| 欧美三片在线视频观看 | 欧美精品 日韩| 色综合久久久网| 懂色av一区二区在线播放| 免费观看成人鲁鲁鲁鲁鲁视频| 亚洲精品视频免费看| 日本一区二区在线不卡| 久久久久久久久久久久电影| 欧美v日韩v国产v| 制服丝袜亚洲网站| 欧美高清hd18日本| 日本韩国一区二区| 91老司机福利 在线| 成人午夜在线视频| 成人黄色在线视频| 成人黄色免费短视频| 国产69精品久久久久777| 国产盗摄女厕一区二区三区| 国产精品91xxx| 国产盗摄精品一区二区三区在线| 国产一区二区在线影院| 国产精品一区二区你懂的| 韩国一区二区视频| 国产河南妇女毛片精品久久久| 激情另类小说区图片区视频区| 蜜臀av一区二区| 国产一区二区在线观看视频| 国产又黄又大久久| www.欧美精品一二区| 色综合久久六月婷婷中文字幕| 色噜噜久久综合| 欧美美女一区二区在线观看| 日韩亚洲欧美在线| 久久久久久日产精品| 中文字幕一区二| 一区二区三区欧美日| 日韩电影一区二区三区四区| 狠狠色综合色综合网络| 成人晚上爱看视频| 在线精品视频免费观看| 欧美一级在线视频| 国产日产欧美一区二区视频| 国产精品女主播av| 亚洲大片免费看| 精品一区中文字幕| 91同城在线观看| 91麻豆精品国产91久久久久久| 久久久久久久久久久黄色| 亚洲免费高清视频在线| 蜜桃精品视频在线观看| 风流少妇一区二区| 欧美日韩一区二区三区高清| 精品国产三级电影在线观看| 国产精品国产三级国产a| 婷婷开心久久网| 成人黄色国产精品网站大全在线免费观看| 91亚洲精品久久久蜜桃网站| 欧美一区二区在线免费播放| 中文字幕在线免费不卡| 免费观看日韩av| 色狠狠av一区二区三区| 欧美精品一区在线观看| 日韩综合一区二区| 成人av手机在线观看| 日韩精品一区二区三区蜜臀 | 久久无码av三级| 亚洲一区二区三区中文字幕|