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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? api_lib.c

?? freertosV4.40 是一種small的嵌入式系統(tǒng)。利于嵌入式開好者入門學(xué)習(xí)嵌入式操作系統(tǒng)。通過對(duì)于源碼的學(xué)習(xí)可以很好的掌握freertos的運(yùn)行機(jī)制。
?? C
?? 第 1 頁 / 共 2 頁
字號(hào):
  }
  return (conn->err = ERR_OK);
}

err_t
netconn_bind(struct netconn *conn, struct ip_addr *addr,
      u16_t port)
{
  struct api_msg *msg;

  if (conn == NULL) {
    return ERR_VAL;
  }

  if (conn->type != NETCONN_TCP &&
     conn->recvmbox == SYS_MBOX_NULL) {
    if ((conn->recvmbox = sys_mbox_new()) == SYS_MBOX_NULL) {
      return ERR_MEM;
    }
  }
  
  if ((msg = memp_malloc(MEMP_API_MSG)) == NULL) {
    return (conn->err = ERR_MEM);
  }
  msg->type = API_MSG_BIND;
  msg->msg.conn = conn;
  msg->msg.msg.bc.ipaddr = addr;
  msg->msg.msg.bc.port = port;
  api_msg_post(msg);
  sys_mbox_fetch(conn->mbox, NULL);
  memp_free(MEMP_API_MSG, msg);
  return conn->err;
}


err_t
netconn_connect(struct netconn *conn, struct ip_addr *addr,
       u16_t port)
{
  struct api_msg *msg;
  
  if (conn == NULL) {
    return ERR_VAL;
  }


  if (conn->recvmbox == SYS_MBOX_NULL) {
    if ((conn->recvmbox = sys_mbox_new()) == SYS_MBOX_NULL) {
      return ERR_MEM;
    }
  }
  
  if ((msg = memp_malloc(MEMP_API_MSG)) == NULL) {
    return ERR_MEM;
  }
  msg->type = API_MSG_CONNECT;
  msg->msg.conn = conn;  
  msg->msg.msg.bc.ipaddr = addr;
  msg->msg.msg.bc.port = port;
  api_msg_post(msg);
  sys_mbox_fetch(conn->mbox, NULL);
  memp_free(MEMP_API_MSG, msg);
  return conn->err;
}

err_t
netconn_disconnect(struct netconn *conn)
{
  struct api_msg *msg;
  
  if (conn == NULL) {
    return ERR_VAL;
  }

  if ((msg = memp_malloc(MEMP_API_MSG)) == NULL) {
    return ERR_MEM;
  }
  msg->type = API_MSG_DISCONNECT;
  msg->msg.conn = conn;  
  api_msg_post(msg);
  sys_mbox_fetch(conn->mbox, NULL);
  memp_free(MEMP_API_MSG, msg);
  return conn->err;

}

err_t
netconn_listen(struct netconn *conn)
{
  struct api_msg *msg;

  if (conn == NULL) {
    return ERR_VAL;
  }

  if (conn->acceptmbox == SYS_MBOX_NULL) {
    conn->acceptmbox = sys_mbox_new();
    if (conn->acceptmbox == SYS_MBOX_NULL) {
      return ERR_MEM;
    }
  }
  
  if ((msg = memp_malloc(MEMP_API_MSG)) == NULL) {
    return (conn->err = ERR_MEM);
  }
  msg->type = API_MSG_LISTEN;
  msg->msg.conn = conn;
  api_msg_post(msg);
  sys_mbox_fetch(conn->mbox, NULL);
  memp_free(MEMP_API_MSG, msg);
  return conn->err;
}

struct netconn *
netconn_accept(struct netconn *conn)
{
  struct netconn *newconn;
  
  if (conn == NULL) {
    return NULL;
  }
  
  sys_mbox_fetch(conn->acceptmbox, (void **)&newconn);
  /* Register event with callback */
  if (conn->callback)
      (*conn->callback)(conn, NETCONN_EVT_RCVMINUS, 0);
  
  return newconn;
}

struct netbuf *
netconn_recv(struct netconn *conn)
{
  struct api_msg *msg;
  struct netbuf *buf;
  struct pbuf *p;
  u16_t len;
    
  if (conn == NULL) {
    return NULL;
  }
  
  if (conn->recvmbox == SYS_MBOX_NULL) {
    conn->err = ERR_CONN;
    return NULL;
  }

  if (conn->err != ERR_OK) {
    return NULL;
  }

  if (conn->type == NETCONN_TCP) {
    if (conn->pcb.tcp->state == LISTEN) {
      conn->err = ERR_CONN;
      return NULL;
    }


    buf = memp_malloc(MEMP_NETBUF);

    if (buf == NULL) {
      conn->err = ERR_MEM;
      return NULL;
    }
    
    sys_mbox_fetch(conn->recvmbox, (void **)&p);

    if (p != NULL)
    {
        len = p->tot_len;
        conn->recv_avail -= len;
    }
    else
        len = 0;
    
    /* Register event with callback */
      if (conn->callback)
        (*conn->callback)(conn, NETCONN_EVT_RCVMINUS, len);

    /* If we are closed, we indicate that we no longer wish to receive
       data by setting conn->recvmbox to SYS_MBOX_NULL. */
    if (p == NULL) {
      memp_free(MEMP_NETBUF, buf);
      sys_mbox_free(conn->recvmbox);
      conn->recvmbox = SYS_MBOX_NULL;
      return NULL;
    }

    buf->p = p;
    buf->ptr = p;
    buf->fromport = 0;
    buf->fromaddr = NULL;

    /* Let the stack know that we have taken the data. */
    if ((msg = memp_malloc(MEMP_API_MSG)) == NULL) {
      conn->err = ERR_MEM;
      return buf;
    }
    msg->type = API_MSG_RECV;
    msg->msg.conn = conn;
    if (buf != NULL) {
      msg->msg.msg.len = buf->p->tot_len;
    } else {
      msg->msg.msg.len = 1;
    }
    api_msg_post(msg);

    sys_mbox_fetch(conn->mbox, NULL);
    memp_free(MEMP_API_MSG, msg);
  } else {
    sys_mbox_fetch(conn->recvmbox, (void **)&buf);
  conn->recv_avail -= buf->p->tot_len;
    /* Register event with callback */
    if (conn->callback)
        (*conn->callback)(conn, NETCONN_EVT_RCVMINUS, buf->p->tot_len);
  }

  

    
  LWIP_DEBUGF(API_LIB_DEBUG, ("netconn_recv: received %p (err %d)\n", (void *)buf, conn->err));


  return buf;
}

err_t
netconn_send(struct netconn *conn, struct netbuf *buf)
{
  struct api_msg *msg;

  if (conn == NULL) {
    return ERR_VAL;
  }

  if (conn->err != ERR_OK) {
    return conn->err;
  }

  if ((msg = memp_malloc(MEMP_API_MSG)) == NULL) {
    return (conn->err = ERR_MEM);
  }

  LWIP_DEBUGF(API_LIB_DEBUG, ("netconn_send: sending %d bytes\n", buf->p->tot_len));
  msg->type = API_MSG_SEND;
  msg->msg.conn = conn;
  msg->msg.msg.p = buf->p;
  api_msg_post(msg);

  sys_mbox_fetch(conn->mbox, NULL);
  memp_free(MEMP_API_MSG, msg);
  return conn->err;
}

err_t
netconn_write(struct netconn *conn, void *dataptr, u16_t size, u8_t copy)
{
  struct api_msg *msg;
  u16_t len;
  
  if (conn == NULL) {
    return ERR_VAL;
  }

  if (conn->err != ERR_OK) {
    return conn->err;
  }
  
  if (conn->sem == SYS_SEM_NULL) {
    conn->sem = sys_sem_new(0);
    if (conn->sem == SYS_SEM_NULL) {
      return ERR_MEM;
    }
  }

  if ((msg = memp_malloc(MEMP_API_MSG)) == NULL) {
    return (conn->err = ERR_MEM);
  }
  msg->type = API_MSG_WRITE;
  msg->msg.conn = conn;
        

  conn->state = NETCONN_WRITE;
  while (conn->err == ERR_OK && size > 0) {
    msg->msg.msg.w.dataptr = dataptr;
    msg->msg.msg.w.copy = copy;
    
    if (conn->type == NETCONN_TCP) {
      if (tcp_sndbuf(conn->pcb.tcp) == 0) {
  sys_sem_wait(conn->sem);
  if (conn->err != ERR_OK) {
    goto ret;
  }
      }
      if (size > tcp_sndbuf(conn->pcb.tcp)) {
  /* We cannot send more than one send buffer's worth of data at a
     time. */
  len = tcp_sndbuf(conn->pcb.tcp);
      } else {
  len = size;
      }
    } else {
      len = size;
    }
    
    LWIP_DEBUGF(API_LIB_DEBUG, ("netconn_write: writing %d bytes (%d)\n", len, copy));
    msg->msg.msg.w.len = len;
    api_msg_post(msg);
    sys_mbox_fetch(conn->mbox, NULL);    
    if (conn->err == ERR_OK) {
      dataptr = (void *)((u8_t *)dataptr + len);
      size -= len;
    } else if (conn->err == ERR_MEM) {
      conn->err = ERR_OK;
      sys_sem_wait(conn->sem);
    } else {
      goto ret;
    }
  }
 ret:
  memp_free(MEMP_API_MSG, msg);
  conn->state = NETCONN_NONE;
  if (conn->sem != SYS_SEM_NULL) {
    sys_sem_free(conn->sem);
    conn->sem = SYS_SEM_NULL;
  }
  
  return conn->err;
}

err_t
netconn_close(struct netconn *conn)
{
  struct api_msg *msg;

  if (conn == NULL) {
    return ERR_VAL;
  }
  if ((msg = memp_malloc(MEMP_API_MSG)) == NULL) {
    return (conn->err = ERR_MEM);
  }

  conn->state = NETCONN_CLOSE;
 again:
  msg->type = API_MSG_CLOSE;
  msg->msg.conn = conn;
  api_msg_post(msg);
  sys_mbox_fetch(conn->mbox, NULL);
  if (conn->err == ERR_MEM &&
     conn->sem != SYS_SEM_NULL) {
    sys_sem_wait(conn->sem);
    goto again;
  }
  conn->state = NETCONN_NONE;
  memp_free(MEMP_API_MSG, msg);
  return conn->err;
}

err_t
netconn_err(struct netconn *conn)
{
  return conn->err;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美亚洲另类制服综合在线 | 成人午夜在线播放| 亚洲图片你懂的| 欧美成人猛片aaaaaaa| 99re成人精品视频| 韩国av一区二区三区四区| 亚洲一区二区三区中文字幕在线| 久久久美女毛片| 6080午夜不卡| 欧美性欧美巨大黑白大战| 国产宾馆实践打屁股91| 国产成人亚洲综合a∨猫咪| 一区二区三区国产精品| 欧美国产精品一区| 精品久久久久久综合日本欧美| 欧美在线观看视频在线| av成人老司机| 国产成人综合亚洲网站| 免费成人你懂的| 日韩中文字幕区一区有砖一区| 成人免费小视频| 亚洲国产精品t66y| 国产亚洲成av人在线观看导航| 日韩一本二本av| 91麻豆精品国产无毒不卡在线观看| 色综合久久88色综合天天6| 成人免费毛片aaaaa**| 国产电影一区在线| 国产麻豆精品视频| 国产在线看一区| 久久精品国产成人一区二区三区| 日韩精品亚洲专区| 视频一区欧美日韩| 午夜视频一区在线观看| 亚洲成人激情综合网| 亚洲已满18点击进入久久| 亚洲免费在线视频一区 二区| 国产精品电影一区二区三区| 中文无字幕一区二区三区 | 亚洲综合激情网| 亚洲精品视频在线观看网站| 亚洲人妖av一区二区| 亚洲特级片在线| 亚洲欧美国产三级| 亚洲小少妇裸体bbw| 亚洲一区二区在线视频| 亚洲成人动漫精品| 日韩av一区二区在线影视| 免费观看成人av| 韩国成人福利片在线播放| 国产精品夜夜嗨| 成人午夜视频在线| 99国产精品国产精品毛片| 色婷婷综合久色| 欧美人妇做爰xxxⅹ性高电影| 欧美精品在线视频| 精品国产一区二区三区不卡 | 一区二区三区在线观看网站| 亚洲午夜视频在线| 日韩国产欧美一区二区三区| 麻豆国产精品一区二区三区| 国产精品中文字幕日韩精品| 精品无人码麻豆乱码1区2区| 国产精品18久久久久久vr| 成人免费黄色大片| 91在线码无精品| 欧美最猛黑人xxxxx猛交| 欧美一卡二卡在线观看| 久久久精品综合| 最新热久久免费视频| 亚洲免费看黄网站| 日本不卡视频在线观看| 国产成人夜色高潮福利影视| 91毛片在线观看| 在线观看91精品国产麻豆| 日韩欧美电影一二三| 精品美女被调教视频大全网站| 国产精品网站导航| 亚洲成人精品一区二区| 国产一区二区精品久久91| 99久久免费精品高清特色大片| 91豆麻精品91久久久久久| 欧美不卡激情三级在线观看| 国产精品美女www爽爽爽| 天天综合色天天综合| 成人免费不卡视频| 欧美一区二区三区爱爱| 国产精品国产自产拍高清av| 免费观看久久久4p| 91蝌蚪porny| 欧美精品一区二区三区蜜桃视频 | 欧美色图天堂网| 久久久久综合网| 日日夜夜一区二区| 成人黄色小视频| 欧美videossexotv100| 一区二区三区在线免费视频 | 激情综合色综合久久综合| 色8久久人人97超碰香蕉987| 久久免费精品国产久精品久久久久| 亚洲欧美日韩在线不卡| 黄一区二区三区| 欧美色区777第一页| 国产精品久久久久aaaa樱花| 老鸭窝一区二区久久精品| 欧美在线一二三四区| 欧美激情在线看| 精品亚洲成a人| 欧美一区二区三级| 亚洲成a人在线观看| 94-欧美-setu| 国产精品视频看| 国产乱色国产精品免费视频| 欧美一级日韩不卡播放免费| 亚洲午夜av在线| 91久久精品一区二区三| 亚洲欧美在线aaa| 成人app在线观看| 国产精品三级av| 国产精品一区久久久久| 精品卡一卡二卡三卡四在线| 日韩av成人高清| 67194成人在线观看| 首页国产欧美久久| 欧美欧美欧美欧美首页| 亚洲国产精品久久久久婷婷884| 91丨porny丨在线| 亚洲丝袜自拍清纯另类| 不卡免费追剧大全电视剧网站| 久久综合中文字幕| 国产一区二区在线看| 精品国产精品一区二区夜夜嗨| 日本亚洲一区二区| 91精品国产色综合久久| 国产精品不卡视频| 99精品视频中文字幕| 国产精品免费视频网站| 99久久久国产精品| 中文字幕日本乱码精品影院| 国产suv精品一区二区三区| 国产精品视频麻豆| av一区二区三区| 亚洲九九爱视频| 欧美亚洲禁片免费| 婷婷夜色潮精品综合在线| 欧美视频在线观看一区| 丝袜亚洲另类丝袜在线| 91精品国产91久久久久久一区二区| 午夜亚洲国产au精品一区二区| 欧美日本一道本| 亚洲国产欧美日韩另类综合| 777午夜精品视频在线播放| 欧美bbbbb| 欧美韩国日本不卡| av电影一区二区| 亚洲福利一区二区三区| 欧美电影一区二区三区| 久久99这里只有精品| 久久精品水蜜桃av综合天堂| 99精品视频中文字幕| 亚洲国产裸拍裸体视频在线观看乱了| 精品视频一区 二区 三区| 久久电影网站中文字幕| 国产欧美精品日韩区二区麻豆天美| av在线一区二区三区| 一级中文字幕一区二区| 国产精品美女久久福利网站| 91免费看视频| 日本不卡高清视频| 国产精品乱码一区二区三区软件 | 美女视频网站黄色亚洲| 国产日韩欧美电影| 91丨porny丨蝌蚪视频| 日韩精品亚洲专区| 国产日产精品1区| 欧美三级乱人伦电影| 韩国精品免费视频| 亚洲一区日韩精品中文字幕| 欧美一区二区三区成人| 99精品视频一区二区| 调教+趴+乳夹+国产+精品| 欧美—级在线免费片| 欧美性猛片xxxx免费看久爱| 国产在线麻豆精品观看| 亚洲一二三级电影| 久久久久99精品一区| 欧美久久久影院| 成人一级黄色片| 免费精品视频在线| 亚洲伦理在线精品| 久久蜜桃av一区精品变态类天堂| 色天使色偷偷av一区二区| 国产麻豆日韩欧美久久| 香蕉影视欧美成人| ...中文天堂在线一区| 欧美xingq一区二区| 一本大道久久精品懂色aⅴ| 国产麻豆精品视频| 香港成人在线视频| 亚洲人精品一区|