⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 api_lib.c

📁 这个是vxworks powerpc bsp与ucos的移植
💻 C
📖 第 1 页 / 共 2 页
字号:
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_mallocp(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_freep(MEMP_API_MSG, msg);  return conn->err;}/*-----------------------------------------------------------------------------------*/err_tnetconn_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_mallocp(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_freep(MEMP_API_MSG, msg);  return conn->err;}/*-----------------------------------------------------------------------------------*/err_tnetconn_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_mallocp(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_freep(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);  return newconn;}/*-----------------------------------------------------------------------------------*/struct netbuf *netconn_recv(struct netconn *conn){  struct api_msg *msg;  struct netbuf *buf;  struct pbuf *p;      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_mallocp(MEMP_NETBUF);    if(buf == NULL) {      conn->err = ERR_MEM;      return NULL;    }        sys_mbox_fetch(conn->recvmbox, (void **)&p);        /* If we are closed, we indicate that we no longer wish to recieve       data by setting conn->recvmbox to SYS_MBOX_NULL. */    if(p == NULL) {      memp_freep(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_mallocp(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_freep(MEMP_API_MSG, msg);  } else {    sys_mbox_fetch(conn->recvmbox, (void **)&buf);  }        DEBUGF(API_LIB_DEBUG, ("netconn_recv: received %p (err %d)\n", buf, conn->err));  return buf;}/*-----------------------------------------------------------------------------------*/err_tnetconn_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_mallocp(MEMP_API_MSG)) == NULL) {    return (conn->err = ERR_MEM);  }  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_freep(MEMP_API_MSG, msg);  return conn->err;}/*-----------------------------------------------------------------------------------*/err_tnetconn_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_mallocp(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;    }        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 *)((char *)dataptr + len);      size -= len;    } else if(conn->err == ERR_MEM) {      conn->err = ERR_OK;      sys_sem_wait(conn->sem);    } else {      goto ret;    }  } ret:  memp_freep(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_tnetconn_close(struct netconn *conn){  struct api_msg *msg;  if(conn == NULL) {    return ERR_VAL;  }  if((msg = memp_mallocp(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_freep(MEMP_API_MSG, msg);  return conn->err;}/*-----------------------------------------------------------------------------------*/err_tnetconn_err(struct netconn *conn){  return conn->err;}/*-----------------------------------------------------------------------------------*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -