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

📄 ul_l_msg.c

📁 一个linux下rs485驱动程序的源代码
💻 C
字号:
/*******************************************************************  uLan Communication - basic library  ul_l_msg.c	- simple message operations  (C) Copyright 1996,1999 by Pavel Pisa   The uLan driver is distributed under the Gnu General Public Licence.   See file COPYING for details. *******************************************************************///#ifndef _MSC_VER//#include <unistd.h>//#endif /*_MSC_VER*/#include <stdlib.h>//#include <fcntl.h>//#include <stdio.h>#include <sys/types.h>//#include <sys/stat.h>#include <string.h>#include <ul_lib/ulan.h>/* simple message operations */int ul_send_command(ul_fd_t ul_fd,int dadr,int cmd,int flg,                    const void *buf,int len){ int ret;  ul_msginfo msginfo;  memset(&msginfo,0,sizeof(msginfo));  msginfo.dadr=dadr;  msginfo.cmd=cmd;  msginfo.flg=UL_BFL_M2IN|flg;  ret=ul_newmsg(ul_fd,&msginfo);  if(ret<0) return ret;  if(len)if(ul_write(ul_fd,buf,len)!=len)  { ul_abortmsg(ul_fd);    return -1;  };  return ul_freemsg(ul_fd);};int ul_send_command_wait(ul_fd_t ul_fd,int dadr,int cmd,int flg,                         const void *buf,int len){ int stamp;  int ret;  ul_msginfo msginfo;  stamp=ul_send_command(ul_fd,dadr,cmd,flg,buf,len);  if(stamp<0) return stamp;  while(1)   { ret=ul_fd_wait(ul_fd,10);    if(ret<=0) return ret?ret:-1;    ret=ul_acceptmsg(ul_fd,&msginfo);    if(ret<0) return ret;    ul_freemsg(ul_fd);    if(msginfo.stamp==stamp)    { if(msginfo.flg&UL_BFL_FAIL) return -2;      else return 1;    };  };};int ul_send_query(ul_fd_t ul_fd,int dadr,int cmd,int flg,                  const void *buf,int len){ int ret;  ul_msginfo msginfo;  memset(&msginfo,0,sizeof(msginfo));  msginfo.dadr=dadr;  msginfo.cmd=cmd;  msginfo.flg=UL_BFL_M2IN|flg;  ret=ul_newmsg(ul_fd,&msginfo);  if(ret<0) return ret;  if(len)if(ul_write(ul_fd,buf,len)!=len)  { ul_abortmsg(ul_fd);    return -1;  };  memset(&msginfo,0,sizeof(msginfo));  msginfo.flg=UL_BFL_REC|UL_BFL_M2IN;  if(ul_tailmsg(ul_fd,&msginfo)<0)  { ul_abortmsg(ul_fd);    return -1;  };  return ul_freemsg(ul_fd);};int ul_send_query_wait(ul_fd_t ul_fd,int dadr,int cmd,int flg,		    const void *bufin,int lenin,void **bufout,int *lenout){ int stamp;  int ret;  int len;  ul_msginfo msginfo;  stamp=ul_send_query(ul_fd,dadr,cmd,flg,bufin,lenin);  if(stamp<0) return stamp;  while(1)   { ret=ul_fd_wait(ul_fd,10);    if(ret<=0) return ret?ret:-1;    ret=ul_acceptmsg(ul_fd,&msginfo);    if(ret<0) return ret;    if(msginfo.stamp==stamp)    { if(msginfo.flg&UL_BFL_FAIL)        {ul_freemsg(ul_fd); return -2;};      ret=ul_actailmsg(ul_fd,&msginfo);      if(ret<0) {ul_freemsg(ul_fd); return ret;};      if(bufout&&lenout)      { len=msginfo.len;        if(!*bufout) *bufout=malloc(len);        else if(*lenout<len) len=*lenout;        if(ul_read(ul_fd,*bufout,len)!=len)          {ul_freemsg(ul_fd); return -3;};        *lenout=len;      };      ul_freemsg(ul_fd);      return msginfo.len;    };    ul_freemsg(ul_fd);  };};

⌨️ 快捷键说明

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