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

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

?? serialsource.c

?? 無線通信的主要編程軟件,是無線通信工作人員的必備工具,關(guān)天相關(guān)教程我會在后續(xù)傳上.
?? C
?? 第 1 頁 / 共 2 頁
字號:
#include <sys/types.h>#include <sys/stat.h>#include <termios.h>#include <unistd.h>#include <errno.h>#include <fcntl.h>#include <stdlib.h>#include <string.h>#include <sys/time.h>#include <stdio.h>#ifdef __CYGWIN__#include <windows.h>#include <io.h>#else#include <stdint.h>#endif/* C implementation of the mote serial protocol. See   net.tinyos.packet.Packetizer for more details */#undef DEBUG#include "serialsource.h"typedef int bool;enum {#ifndef __CYGWIN__  FALSE = 0,  TRUE = 1,#endif  BUFSIZE = 256,  MTU = 256,  ACK_TIMEOUT = 1000000, /* in us */  SYNC_BYTE = 0x7e,  ESCAPE_BYTE = 0x7d,  P_ACK = 64,  P_PACKET_ACK = 65,  P_PACKET_NO_ACK = 66,  P_UNKNOWN = 255};struct packet_list{  uint8_t *packet;  int len;  struct packet_list *next;};struct serial_source {  int fd;  bool non_blocking;  void (*message)(serial_source_msg problem);  /* Receive state */  struct {    uint8_t buffer[BUFSIZE];    int bufpos, bufused;    uint8_t packet[MTU];    bool in_sync, escaped;    int count;    struct packet_list *queue[256]; // indexed by protocol  } recv;  struct {    uint8_t seqno;    uint8_t *escaped;    int escapeptr;    uint16_t crc;  } send;};static tcflag_t parse_baudrate(int requested){  int baudrate;  switch (requested)    {#ifdef B50    case 50: baudrate = B50; break;#endif#ifdef B75    case 75: baudrate = B75; break;#endif#ifdef B110    case 110: baudrate = B110; break;#endif#ifdef B134    case 134: baudrate = B134; break;#endif#ifdef B150    case 150: baudrate = B150; break;#endif#ifdef B200    case 200: baudrate = B200; break;#endif#ifdef B300    case 300: baudrate = B300; break;#endif#ifdef B600    case 600: baudrate = B600; break;#endif#ifdef B1200    case 1200: baudrate = B1200; break;#endif#ifdef B1800    case 1800: baudrate = B1800; break;#endif#ifdef B2400    case 2400: baudrate = B2400; break;#endif#ifdef B4800    case 4800: baudrate = B4800; break;#endif#ifdef B9600    case 9600: baudrate = B9600; break;#endif#ifdef B19200    case 19200: baudrate = B19200; break;#endif#ifdef B38400    case 38400: baudrate = B38400; break;#endif#ifdef B57600    case 57600: baudrate = B57600; break;#endif#ifdef B115200    case 115200: baudrate = B115200; break;#endif#ifdef B230400    case 230400: baudrate = B230400; break;#endif#ifdef B460800    case 460800: baudrate = B460800; break;#endif#ifdef B500000    case 500000: baudrate = B500000; break;#endif#ifdef B576000    case 576000: baudrate = B576000; break;#endif#ifdef B921600    case 921600: baudrate = B921600; break;#endif#ifdef B1000000    case 1000000: baudrate = B1000000; break;#endif#ifdef B1152000    case 1152000: baudrate = B1152000; break;#endif#ifdef B1500000    case 1500000: baudrate = B1500000; break;#endif#ifdef B2000000    case 2000000: baudrate = B2000000; break;#endif#ifdef B2500000    case 2500000: baudrate = B2500000; break;#endif#ifdef B3000000    case 3000000: baudrate = B3000000; break;#endif#ifdef B3500000    case 3500000: baudrate = B3500000; break;#endif#ifdef B4000000    case 4000000: baudrate = B4000000; break;#endif    default:      baudrate = 0;    }  return baudrate;}#ifdef DEBUGstatic void dump(const char *msg, unsigned char *packet, int len){  int i;  printf("%s", msg);  for (i = 0; i < len; i++)    printf(" %02x", packet[i]);  putchar('\n');}#endifstatic void message(serial_source src, serial_source_msg msg){  if (src->message)    src->message(msg);}/* Work around buggy usb serial driver (returns 0 when no data is   available, independent of the blocking/non-blocking mode) */static int buggyread(serial_source src, void *buffer, int n){  fd_set fds;  int cnt;  if (src->non_blocking)    {      cnt = read(src->fd, buffer, n);      if (cnt == 0)	{	  cnt = -1;	  errno = EAGAIN;	}      return cnt;    }  else    for (;;)      {	FD_ZERO(&fds);	FD_SET(src->fd, &fds);	cnt = select(src->fd + 1, &fds, NULL, NULL, NULL);	if (cnt < 0)	  return -1;	cnt = read(src->fd, buffer, n);	if (cnt != 0)	  return cnt;      }}serial_source open_serial_source(const char *device, int baud_rate,				 int non_blocking,				 void (*message)(serial_source_msg problem))/* Effects: opens serial port device at specified baud_rate. If non_blocking     is true, read_serial_packet calls will be non-blocking (writes are     always blocking, for now at least)   Returns: descriptor for serial forwarder at host:port, or     NULL for failure (bad device or bad baud rate) */{  struct termios newtio;  int fd;  tcflag_t baudflag = parse_baudrate(baud_rate);  if (!baudflag)    return NULL;  fd = open(device, O_RDWR | O_NOCTTY | O_NONBLOCK);  if (fd < 0)    return NULL;#ifdef __CYGWIN__  /* For some very mysterious reason, this incantation is necessary to make     the serial port work under some windows machines */  HANDLE handle = (HANDLE)get_osfhandle(fd);  DCB dcb;  if (!(GetCommState(handle, &dcb) && SetCommState(handle, &dcb)))    {      close(fd);      return NULL;    }#endif  /* Serial port setting */  memset(&newtio, 0, sizeof(newtio));  newtio.c_cflag = CS8 | CLOCAL | CREAD;  newtio.c_iflag = IGNPAR | IGNBRK;  cfsetispeed(&newtio, baudflag);  cfsetospeed(&newtio, baudflag);  /* Raw output_file */  newtio.c_oflag = 0;  if (tcflush(fd, TCIFLUSH) >= 0 &&      tcsetattr(fd, TCSANOW, &newtio) >= 0)    {      serial_source src = malloc(sizeof *src);      if (src)	{	  memset(src, 0, sizeof src);	  src->fd = fd;	  src->non_blocking = non_blocking;	  src->message = message;	  src->send.seqno = 37;	  return src;	}    }  close(fd);  return NULL;}int serial_source_fd(serial_source src)/* Returns: the file descriptor used by serial source src (useful when     non-blocking reads were requested)*/{  return src->fd;}int close_serial_source(serial_source src)/* Effects: closes serial source src   Returns: 0 if successful, -1 if some problem occured (but source is     considered closed anyway) */{  int ok = close(src->fd);  free(src);  return ok;}static int source_wait(serial_source src, struct timeval *deadline)/* Effects: waits until deadline for some data on source. deadline     can be NULL for indefinite waiting.   Returns: 0 if data is available, -1 if the deadline expires*/{  struct timeval tv;  fd_set fds;  int cnt;  if (src->recv.bufpos < src->recv.bufused)    return 0;  for (;;)    {      if (deadline)	{	  gettimeofday(&tv, NULL);	  tv.tv_sec = deadline->tv_sec - tv.tv_sec;	  tv.tv_usec = deadline->tv_usec - tv.tv_usec;	  if (tv.tv_usec < 0)	    {	      tv.tv_usec += 1000000;	      tv.tv_sec--;	    }	  if (tv.tv_sec < 0)	    return -1;	}      FD_ZERO(&fds);      FD_SET(src->fd, &fds);      cnt = select(src->fd + 1, &fds, NULL, NULL, deadline ? &tv : NULL);      if (cnt < 0)	{	  if (errno == EINTR)	    continue;	  message(src, msg_unix_error);	  return -1;	}      if (cnt == 0)	return -1;      return 0;    }}static int source_write(serial_source src, const void *buffer, int count){  int actual = 0;  if (fcntl(src->fd, F_SETFL, 0) < 0)    {      message(src, msg_unix_error);      return -1;    }  while (count > 0)    {      int n = write(src->fd, buffer, count);      if (n < 0 && errno == EINTR)	continue;      if (n < 0)	{	  message(src, msg_unix_error);	  actual = -1;	  break;	}      count -= n;      actual += n;      buffer += n;    }  if (fcntl(src->fd, F_SETFL, O_NONBLOCK) < 0)    {      message(src, msg_unix_error);      /* We're in trouble, but there's no obvious fix. */    }  return actual;}static void push_protocol_packet(serial_source src,

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品女同一区二区| 亚洲成av人片一区二区| 亚洲天堂免费在线观看视频| 亚洲国产aⅴ天堂久久| 国产精品99久久久久久久vr| 欧美日韩性生活| 国产精品色噜噜| 久久精品噜噜噜成人av农村| 欧美综合久久久| 国产精品乱人伦中文| 激情文学综合丁香| 欧美一卡2卡3卡4卡| 亚洲愉拍自拍另类高清精品| 成人app在线观看| 国产校园另类小说区| 偷拍一区二区三区| 91久久精品一区二区三区| 国产日产精品1区| 国内精品嫩模私拍在线| 日韩一级片在线播放| 亚洲成精国产精品女| 91久久精品日日躁夜夜躁欧美| 国产亚洲一区二区三区在线观看 | 欧美自拍偷拍午夜视频| 国产精品毛片大码女人| 国产精品资源网| 欧美色图天堂网| 一区二区三区在线不卡| 色一区在线观看| 亚洲精品高清在线| 日本高清不卡视频| 有码一区二区三区| 色999日韩国产欧美一区二区| 亚洲色图一区二区| 91麻豆免费看| 亚洲综合色视频| 欧美三级电影精品| 三级欧美韩日大片在线看| 欧美日本一区二区在线观看| 午夜精品久久久久久久久久久| 欧美日韩亚洲丝袜制服| 日韩高清欧美激情| 日韩欧美在线网站| 国产精品资源在线| 综合亚洲深深色噜噜狠狠网站| 93久久精品日日躁夜夜躁欧美| 亚洲精品国产一区二区精华液| 欧美在线色视频| 日本视频一区二区| 久久日韩精品一区二区五区| 国产高清视频一区| 国产麻豆精品在线观看| 久久久激情视频| 成人午夜视频网站| 亚洲亚洲人成综合网络| 欧美一区二区在线免费观看| 国内精品在线播放| 亚洲欧美另类久久久精品2019| 欧美亚日韩国产aⅴ精品中极品| 五月天欧美精品| 国产婷婷色一区二区三区四区| 不卡的av中国片| 亚洲大片精品永久免费| 久久人人97超碰com| 91蝌蚪porny| 久久精品国产一区二区三| 国产精品动漫网站| 欧美一区中文字幕| 高清不卡在线观看| 丝袜诱惑制服诱惑色一区在线观看 | 视频在线观看一区| 国产三级久久久| 欧美区视频在线观看| 国产精品一区二区黑丝| 亚洲国产精品久久一线不卡| 久久婷婷国产综合精品青草| 欧美色图天堂网| 国产成人精品免费视频网站| 午夜av一区二区三区| 亚洲国产精品成人综合| 欧美一区二区在线免费观看| 99久久精品免费精品国产| 久久黄色级2电影| 一区二区三区不卡在线观看| 久久网站热最新地址| 欧美肥妇bbw| 一本色道久久综合亚洲aⅴ蜜桃| 美女在线视频一区| 亚洲午夜精品网| 国产精品久久久一区麻豆最新章节| 欧美一区二区三区婷婷月色| 色综合一区二区| 成人黄色片在线观看| 精品一区二区免费视频| 亚洲电影在线播放| 一区二区三区在线观看网站| 国产精品三级视频| 国产三级欧美三级日产三级99| 3atv在线一区二区三区| 精品视频一区二区三区免费| 97se亚洲国产综合自在线观| 懂色一区二区三区免费观看| 韩国av一区二区三区四区 | 国产一区二区三区香蕉 | 国产精品一区二区三区网站| 日韩av中文字幕一区二区三区| 亚洲视频一区在线| 国产精品国产三级国产a| 国产欧美一区二区精品久导航 | 色综合色狠狠天天综合色| 成人网在线免费视频| 国内成人免费视频| 国产一区视频网站| 国产一区二区0| 国产成人午夜99999| 国产高清久久久久| 成人性色生活片| 99精品久久免费看蜜臀剧情介绍| 成人99免费视频| 97超碰欧美中文字幕| 91久久精品一区二区三| 91国模大尺度私拍在线视频| 欧美最新大片在线看| 欧美在线你懂的| 欧美另类久久久品| 欧美电视剧在线观看完整版| 欧美r级在线观看| 国产欧美精品国产国产专区| 中文字幕一区二区三区在线不卡| 中文字幕亚洲综合久久菠萝蜜| 亚洲免费观看高清完整| 亚洲国产婷婷综合在线精品| 亚洲成av人片一区二区三区| 日本麻豆一区二区三区视频| 国产一区二区看久久| 国产成人精品综合在线观看| 99麻豆久久久国产精品免费优播| 91小视频在线观看| 6080国产精品一区二区| 精品国产网站在线观看| 国产精品久久久久婷婷| 亚洲va在线va天堂| 精品无码三级在线观看视频| 成人精品国产福利| 欧美群妇大交群中文字幕| 久久网站热最新地址| 亚洲欧洲制服丝袜| 蜜臀av一区二区在线观看| 成人三级在线视频| 欧美日韩一区二区三区视频| 久久综合九色综合欧美就去吻| 成人欧美一区二区三区白人 | 欧美性受极品xxxx喷水| 欧美成人乱码一区二区三区| 国产精品高清亚洲| 亚洲自拍都市欧美小说| 国产精品综合久久| 欧美三级资源在线| 日本一区二区视频在线| 亚洲3atv精品一区二区三区| 国产激情偷乱视频一区二区三区| 欧美天堂亚洲电影院在线播放| 精品久久99ma| 亚洲午夜一区二区| 成人午夜在线视频| 亚洲综合一区二区精品导航| 美国一区二区三区在线播放| 91丝袜美腿高跟国产极品老师 | 国产精品素人视频| 秋霞av亚洲一区二区三| 91一区二区三区在线播放| 久久夜色精品国产欧美乱极品| 一区二区三区免费观看| 成人在线视频一区二区| 日韩午夜精品电影| 午夜精品久久久久久久久久| 97成人超碰视| 国产精品丝袜久久久久久app| 久久99国产精品免费网站| 欧美日韩一区二区在线观看 | 人人超碰91尤物精品国产| 91一区一区三区| 国产精品乱人伦中文| 成人性色生活片免费看爆迷你毛片| 精品少妇一区二区三区在线播放| 天天爽夜夜爽夜夜爽精品视频| 91国在线观看| 亚洲四区在线观看| 99久久精品国产一区二区三区| 2023国产精品自拍| 韩国女主播成人在线| 精品美女被调教视频大全网站| 日本一不卡视频| 日韩欧美一区二区视频| 蜜桃91丨九色丨蝌蚪91桃色| 91精品国产乱码久久蜜臀| 日韩精品视频网| 日韩一区二区三区免费看 | 日韩精品一区二区三区三区免费| 日韩电影免费在线观看网站|