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

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

?? tty.c

?? MODBUS/TCP to RS-232/485 MODBUS/RTU gateway server
?? C
字號:
/* * OpenMODBUS/TCP to RS-232/485 MODBUS RTU gateway * * tty.c - terminal I/O related procedures * * Copyright (c) 2002-2003, Victor Antonovich (avmlink@vlink.ru) *  * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: *  * - Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. *  * - 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. *  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 REGENTS 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. * * $Id: tty.c,v 1.2 2003/09/27 13:22:52 kapyar Exp $ */#include "tty.h"extern cfg_t cfg;static int tty_break;/* * Flag signal SIG */void tty_sighup(void){  tty_break = TRUE;  return;}/* * Init serial link parameters MOD to PORT name, SPEED and TRXCNTL type */void #ifdef  TRXCTLtty_init(ttydata_t *mod, char *port, int speed, int trxcntl)#elsetty_init(ttydata_t *mod, char *port, int speed)#endif{  mod->fd = -1;  mod->port = port;  mod->speed = speed;#ifdef  TRXCTL  mod->trxcntl = trxcntl;#endif}#ifdef HAVE_LIBUTILchar *tty_get_name(char *ttyfullname);char *tty_get_name(char *ttyfullname){  static char ttynamebuf[INTBUFSIZE + 1];  char *ttyname = ttynamebuf, *ttynameptr = ttyname;  strncpy(ttynamebuf, ttyfullname, INTBUFSIZE);  for (ttynameptr = strtok(ttynamebuf, "/");       ttynameptr;       ttynameptr = strtok(NULL, "/"))  {    ttyname = ttynameptr;  }  return ttyname;}#endif/* * Opening serial link whith parameters in MOD */int tty_open(ttydata_t *mod){#ifdef HAVE_LIBUTIL  int buferr, uuerr;  char *ttyname = tty_get_name(mod->port);#endif  if (mod->fd > 0)    return RC_AOPEN;        /* if already open... */  tty_break = FALSE;#ifdef HAVE_LIBUTIL  if ((uuerr = uu_lock(ttyname)) != UU_LOCK_OK)  {    buferr = errno;#ifdef LOG    log(0, "uu_lock(): can't lock tty device %s (%s)",        ttyname, uu_lockerr(uuerr));#endif      errno = buferr;    return RC_ERR;  }#endif  mod->fd = open(mod->port, O_RDWR | O_NONBLOCK);  if (mod->fd < 0)    return RC_ERR;          /* attempt failed */  return tty_set_attr(mod);}/* * Setting up tty device MOD attributes */int tty_set_attr(ttydata_t *mod){  int flag;  if (tcgetattr(mod->fd, &mod->savedtios))    return RC_ERR;  memcpy(&mod->tios, &mod->savedtios, sizeof(mod->tios));  mod->tios.c_cflag &= ~(CSTOPB | PARENB | PARODD | CRTSCTS);  mod->tios.c_cflag |= CS8 | CREAD | CLOCAL;  mod->tios.c_iflag = FALSE;  mod->tios.c_oflag = FALSE;  mod->tios.c_lflag = FALSE;  mod->tios.c_cc[VTIME] = 0;  mod->tios.c_cc[VMIN] = 1;#ifdef HAVE_CFSETSPEED  cfsetspeed(&mod->tios, tty_transpeed(mod->speed));#else  cfsetispeed(&mod->tios, tty_transpeed(mod->speed));  cfsetospeed(&mod->tios, tty_transpeed(mod->speed));#endif  if (tcsetattr(mod->fd, TCSANOW, &mod->tios))    return RC_ERR;#if defined(TIOCSETA)  ioctl(mod->fd, TIOCSETA, &mod->tios);#else  /* if TIOCSETA is not defined, try to fallback to TCSETA */  ioctl(mod->fd, TCSETA, &mod->tios);#endif  tcflush(mod->fd, TCIOFLUSH);#ifdef  TRXCTL  tty_clr_rts(mod->fd);#endif  flag = fcntl(mod->fd, F_GETFL, 0);  if (flag < 0)    return RC_ERR;  return fcntl(mod->fd, F_SETFL, flag | O_NONBLOCK);}/* * Translate integer SPEED value to speed_t constant */speed_t tty_transpeed(int speed){  speed_t tspeed;  switch (speed)  {  case 0:    tspeed = B0;    break;#if defined(B50)  case 50:    tspeed = B50;    break;#endif#if defined(B75)  case 75:    tspeed = B75;    break;#endif#if defined(B110)  case 110:    tspeed = B110;    break;#endif#if defined(B134)  case 134:    tspeed = B134;    break;#endif#if defined(B150)  case 150:    tspeed = B150;    break;#endif#if defined(B200)  case 200:    tspeed = B200;    break;#endif#if defined(B300)  case 300:    tspeed = B300;    break;#endif#if defined(B600)  case 600:    tspeed = B600;    break;#endif#if defined(B1200)  case 1200:    tspeed = B1200;    break;#endif#if defined(B1800)  case 1800:    tspeed = B1800;    break;#endif#if defined(B2400)  case 2400:    tspeed = B2400;    break;#endif#if defined(B4800)  case 4800:    tspeed = B4800;    break;#endif#if defined(B7200)  case 7200:    tspeed = B7200;    break;#endif#if defined(B9600)  case 9600:    tspeed = B9600;    break;#endif#if defined(B12000)  case 12000:    tspeed = B12000;    break;#endif#if defined(B14400)  case 14400:    tspeed = B14400;    break;#endif#if defined(B19200)  case 19200:    tspeed = B19200;    break;#elif defined(EXTA)  case 19200:    tspeed = EXTA;    break;#endif#if defined(B38400)  case 38400:    tspeed = B38400;    break;#elif defined(EXTB)  case 38400:    tspeed = EXTB;    break;#endif#if defined(B57600)  case 57600:    tspeed = B57600;    break;#endif#if defined(B115200)  case 115200:    tspeed = B115200;    break;#endif  default:    tspeed = DEFAULT_BSPEED;  }  return tspeed;}/* * Prepare tty device MOD to closing */int tty_cooked(ttydata_t *mod){  signal(SIGHUP, SIG_IGN);  signal(SIGPIPE, SIG_IGN);  if (!isatty(mod->fd))    return RC_ERR;  if (tcsetattr(mod->fd, TCSAFLUSH, &mod->savedtios))    return RC_ERR;  return RC_OK;}/* * Closing tty device MOD */int tty_close(ttydata_t *mod){#ifdef HAVE_LIBUTIL  int buferr;  char *ttyname = tty_get_name(mod->port);#endif  if (mod->fd < 0)    return RC_ACLOSE;       /* already closed */  if (tty_cooked(mod))    return RC_ERR;#ifdef HAVE_LIBUTIL  if (close(mod->fd))    return RC_ERR;  if (uu_unlock(ttyname))  {    buferr = errno;#ifdef LOG    log(0, "uu_lock(): can't unlock tty device %s",        ttyname);#endif    errno = buferr;    return RC_ERR;  }  return RC_OK;#else  return close(mod->fd);#endif}#ifdef  TRXCTL/* Set RTS line to active state */void tty_set_rts(int fd){  int mstat = TIOCM_RTS;  ioctl(fd, TIOCMBIS, &mstat);}/* Set RTS line to passive state */void tty_clr_rts(int fd){  int mstat = TIOCM_RTS;  ioctl(fd, TIOCMBIC, &mstat);}#endif/* * Delay for USEC microsecs */voidtty_delay(int usec){  struct timeval tv, ttv;  long ts;  gettimeofday(&tv, NULL);  do  {    (void)gettimeofday(&ttv, NULL);    ts = 1000000 * (ttv.tv_sec - tv.tv_sec) + (ttv.tv_usec - tv.tv_usec);  } while (ts < usec && !tty_break);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
福利视频网站一区二区三区| 亚洲女同女同女同女同女同69| 国产精品免费看片| 中文文精品字幕一区二区| 最新国产精品久久精品| 日韩国产高清在线| 91免费精品国自产拍在线不卡 | 欧美日韩小视频| 久久精品在这里| 青青草一区二区三区| 欧美在线视频不卡| 亚洲人成精品久久久久| 国产一区二区三区免费| 欧美一区二区视频观看视频| 亚洲欧美另类小说| 国产激情精品久久久第一区二区| 欧美精品高清视频| 亚洲影院免费观看| 欧美在线一二三| 国产精品一级在线| 337p日本欧洲亚洲大胆精品 | 欧美福利电影网| 日本一区二区三区视频视频| 免费在线一区观看| 欧美日韩激情在线| 亚洲欧美一区二区久久 | 久久丁香综合五月国产三级网站| 欧美日韩国产另类不卡| 亚洲福利一区二区三区| 不卡的电影网站| 国产精品久久久久久久久久久免费看 | 成人午夜视频在线| 欧美一区二区三区四区高清| 亚洲国产精品影院| 91久久精品一区二区三| 中文字幕一区二区三区在线播放 | 一区二区中文字幕在线| 国产一区二区三区观看| 日韩欧美一二三四区| 麻豆精品国产传媒mv男同| 91精品国产日韩91久久久久久| 亚洲国产欧美一区二区三区丁香婷| 91福利国产成人精品照片| 一区二区在线观看不卡| 欧美日精品一区视频| 日韩av一区二区三区四区| 欧美精品一区男女天堂| 国产成人免费视频| 国产精品福利在线播放| 在线看日本不卡| 日韩1区2区日韩1区2区| 精品国产乱码久久| 成人深夜在线观看| 亚洲综合久久久| 欧美成人一区二区三区| 国产精品主播直播| 亚洲人吸女人奶水| 欧美一区二区三区四区五区| 国产精品中文有码| 亚洲精品视频免费看| 欧美另类高清zo欧美| 国产成人免费视频一区| 亚洲欧美日韩国产综合在线| 欧美挠脚心视频网站| 国产最新精品免费| 亚洲免费观看高清完整版在线观看 | 五月天亚洲精品| 久久人人97超碰com| 在线免费观看不卡av| 精品一区二区在线观看| 国产精品麻豆久久久| 欧美一区二区三区系列电影| 成av人片一区二区| 青青草原综合久久大伊人精品 | av电影天堂一区二区在线观看| 亚洲综合在线第一页| 精品福利一区二区三区| 色婷婷久久久综合中文字幕| 国产一区久久久| 天堂va蜜桃一区二区三区| 国产欧美久久久精品影院| 欧美男生操女生| 日本久久精品电影| 国产精品一区二区黑丝| 日韩高清在线电影| 亚洲免费毛片网站| 久久蜜臀精品av| 日韩欧美中文字幕一区| 欧美午夜一区二区| av在线不卡免费看| 韩国一区二区三区| 午夜精品免费在线观看| 亚洲欧美电影院| 欧美国产日产图区| 精品国产乱码久久久久久闺蜜| 91亚洲国产成人精品一区二三 | 久久91精品国产91久久小草| 亚洲高清视频中文字幕| 国产精品第一页第二页第三页| 精品国产第一区二区三区观看体验| 欧美午夜精品久久久久久孕妇| av午夜精品一区二区三区| 国产69精品久久99不卡| 国产精品综合av一区二区国产馆| 久久精品国内一区二区三区| 天堂成人国产精品一区| 天天操天天综合网| 亚洲成人av免费| 亚洲一卡二卡三卡四卡五卡| 亚洲精品中文在线观看| 亚洲欧美一区二区在线观看| 国产亚洲精品超碰| 国产精品丝袜在线| 国产精品网曝门| 中文一区二区在线观看| 国产精品久久久久久久久图文区| 国产精品视频一二三| 国产精品免费视频一区| 中文字幕在线视频一区| 亚洲欧洲性图库| 一区二区三区色| 国产成人免费视频一区| 久久嫩草精品久久久精品| 欧美mv日韩mv| 久久久噜噜噜久噜久久综合| 久久在线观看免费| 国产欧美日韩在线| 日韩理论片中文av| 一区二区视频在线看| 天堂久久久久va久久久久| 久久99精品国产.久久久久| 国内偷窥港台综合视频在线播放| 国产成人福利片| 色一区在线观看| 7777精品伊人久久久大香线蕉经典版下载 | 国产亚洲1区2区3区| 中文字幕不卡在线观看| 亚洲视频一二三区| 亚洲无线码一区二区三区| 蜜臀av性久久久久av蜜臀妖精| 裸体歌舞表演一区二区| 国产成人aaa| 欧美这里有精品| 在线免费视频一区二区| 一卡二卡欧美日韩| 五月天亚洲婷婷| 国产精品自在欧美一区| 色综合一个色综合亚洲| 欧美精品日韩综合在线| 久久久久久久国产精品影院| 日韩毛片一二三区| 蜜桃久久精品一区二区| 粉嫩一区二区三区性色av| 欧美午夜一区二区| 国产欧美一区二区精品忘忧草| 亚洲黄色免费网站| 久久99热99| 日本福利一区二区| 日韩精品一区二区三区视频 | 欧美精品日韩一本| 久久精品亚洲一区二区三区浴池| 一区二区激情视频| 国产麻豆视频精品| 日韩国产欧美视频| 中文字幕在线观看不卡视频| 一区二区三区小说| 国产剧情一区二区三区| 欧美日韩久久久久久| 国产精品视频在线看| 日韩精品1区2区3区| 99久久精品国产毛片| 久久久久久久综合日本| 日日欢夜夜爽一区| 91麻豆免费看| 国产欧美日韩另类一区| 久久99精品一区二区三区| 欧美日韩亚洲综合在线 | 91美女蜜桃在线| 国产亚洲一区二区在线观看| 亚洲成av人片在线观看无码| 99riav久久精品riav| 久久免费国产精品| 狠狠色丁香久久婷婷综合丁香| 欧美日韩三级视频| 亚洲最新视频在线观看| 99视频精品在线| 国产精品福利一区| eeuss国产一区二区三区| 国产午夜精品久久久久久免费视 | 欧美日韩久久久| 亚洲国产精品天堂| 91久久一区二区| 亚洲精品日韩专区silk| av在线免费不卡| 亚洲免费资源在线播放| 91传媒视频在线播放| 亚洲欧美视频一区| 欧美中文字幕一区二区三区亚洲| 亚洲另类在线一区| 91激情五月电影|