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

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

?? pl2303.c

?? Linux 下 USB轉(zhuǎn)串口驅(qū)動(dòng)程序源代碼,沒有問題,很好用
?? C
?? 第 1 頁 / 共 2 頁
字號(hào):
/* * Prolific USB Serial Adapter Driver * *  Copyright (C) 2001 *      Prolific Technology Inc. * *  This program is largely derived from work by the linux-usb group *  and associated source files.  Please see the usb/serial files for *  individual credits and copyrights. * */#include <linux/config.h>#include <linux/kernel.h>#include <linux/sched.h>#include <linux/signal.h>#include <linux/errno.h>#include <linux/poll.h>#include <linux/init.h>#include <linux/slab.h>#include <linux/fcntl.h>#include <linux/tty.h>#include <linux/tty_driver.h>#include <linux/tty_flip.h>#include <linux/module.h>#include <linux/spinlock.h>#include <linux/usb.h>#ifdef USB_SERIAL_DEBUGstatic int  debug = 1;#else// static int  debug;#endif#include "usb-serial.h"#include "pl2303.h"#define TRUE  1#define FALSE 0/* function prototypes for a Prolific USB Serial Adapter */static int                                prolific_sa_startup(struct usb_serial *serial);static void                               prolific_sa_shutdown(struct usb_serial *serial);static int                                prolific_sa_open(struct usb_serial_port *port, struct file *filp);static void                               prolific_sa_close(struct usb_serial_port *port, struct file *filp);static void                               prolific_sa_read_int_callback(struct urb *urb);static void                               prolific_sa_set_termios(struct usb_serial_port *port, struct termios *old);static int                                prolific_sa_ioctl(struct usb_serial_port  *port, struct file             *file,                                                            unsigned int            cmd, unsigned long           arg);static void                               prolific_sa_break_ctl(struct usb_serial_port *port, int break_state);static void                               prolific_set_dcr_state(struct usb_serial_port *port, int set);static int							  prolific_sa_write(struct usb_serial_port *port, int from_user, const unsigned char *buf, int count);static void							  prolific_sa_write_bulk_callback(struct urb *urb);static __devinitdata struct usb_device_id id_table_combined[] = {  { USB_DEVICE(PROLIFIC_SA_VID, PROLIFIC_SA_PID) },  { } /* Terminating entry */};static __devinitdata struct usb_device_id prolific_sa_table[] = {  { USB_DEVICE(PROLIFIC_SA_VID, PROLIFIC_SA_PID) },  { } /* Terminating entry */};MODULE_DEVICE_TABLE(usb, id_table_combined);/* All of the device info needed for the Prolific serial converter */struct usb_serial_device_type prolific_sa_device ={name:  "Prolific USB Serial Adapter",  id_table : prolific_sa_table,                       /* the Prolific device */  needs_interrupt_in : MUST_HAVE,                     /* this device must have an interrupt in endpoint */  needs_bulk_in : MUST_HAVE,                          /* this device must have a bulk in endpoint */  needs_bulk_out : MUST_HAVE,                         /* this device must have a bulk out endpoint */  num_interrupt_in : 1,  num_bulk_in : 1,  num_bulk_out : 1,  num_ports : 1,  open : prolific_sa_open,  close : prolific_sa_close,  write : prolific_sa_write,  read_int_callback : prolific_sa_read_int_callback,  /* How we get the status info */  write_bulk_callback : prolific_sa_write_bulk_callback,  ioctl : prolific_sa_ioctl,  set_termios : prolific_sa_set_termios,  break_ctl : prolific_sa_break_ctl,  startup : prolific_sa_startup,  shutdown : prolific_sa_shutdown,};struct line_coding {  unsigned long dwDTERate;  unsigned char bCharFormat;  unsigned char bParityType;  unsigned char bDatabits;};struct prolific_sa_private {  unsigned long       control_state;  unsigned char       last_lsr;  unsigned char       last_msr;  int                 bad_flow_control;  struct line_coding  lineCoding;  unsigned short      RTSDTRState;};/* * *************************************************************************** * Prolific USB Serial Adapter specific driver functions * *************************************************************************** */#define WDR_TIMEOUT (HZ * 5)  /* default urb timeout *//* assumes that struct usb_serial *serial is available */#define BSA_USB_CMD(r, v) \  usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0), (r), PROLIFIC_SA_SET_REQUEST_CLASS_TYPE, (v), 0, NULL, 0, \                  WDR_TIMEOUT)#define BSA_USB_CMD_SET_DATA(r, v, data) \  usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0), (r), PROLIFIC_SA_SET_REQUEST_CLASS_TYPE, (v), 0, data, \                  sizeof(data), WDR_TIMEOUT)#define BSA_USB_CMD_SET_DATA_LEN(r, v, data, size) \  usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0), (r), PROLIFIC_SA_SET_REQUEST_CLASS_TYPE, (v), 0, data, \                  size, WDR_TIMEOUT)#define BSA_USB_CMD_SET_VENDOR(r, v, idx) \  usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0), (r), PROLIFIC_SA_SET_REQUEST_VENDOR_TYPE, (v), (idx), \                  NULL, 0, WDR_TIMEOUT)#define BSA_USB_CMD_GET_VENDOR_DATA(r, v, data, size) \  usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0), (r), PROLIFIC_SA_GET_REQUEST_VENDOR_TYPE, (v), 0, data, \                  size, WDR_TIMEOUT)/* do some startup allocations not currently performed by usb_serial_probe() */static int prolific_sa_startup(struct usb_serial *serial){  struct usb_device           *dev = serial->dev;  struct prolific_sa_private  *priv;  /* allocate the private data structure */  serial->port->private = kmalloc(sizeof(struct prolific_sa_private), GFP_KERNEL);  if(!serial->port->private)    return(-1); /* error */  priv = (struct prolific_sa_private *)serial->port->private;  /* set initial values for control structures */  priv->control_state = 0;  priv->last_lsr = 0;  priv->last_msr = 0;  /* see comments at top of file */  priv->bad_flow_control = (dev->descriptor.bcdDevice <= 0x0206) ? 1 : 0;  info("bcdDevice: %04x, bfc: %d", dev->descriptor.bcdDevice, priv->bad_flow_control);  init_waitqueue_head(&serial->port->write_wait);  return(0);}static void prolific_sa_shutdown(struct usb_serial *serial){  int i;  dbg(__FUNCTION__);  /* stop reads and writes on all ports */  for(i = 0; i < serial->num_ports; ++i) {    while(serial->port[i].open_count > 0) {      prolific_sa_close(&serial->port[i], NULL);    }    /* My special items, the standard routines free my urbs */    if(serial->port[i].private)      kfree(serial->port[i].private);  }}static int prolific_sa_open(struct usb_serial_port *port, struct file *filp){  unsigned long flags;  dbg(__FUNCTION__ " port %d", port->number);  spin_lock_irqsave(&port->port_lock, flags);  ++port->open_count;  MOD_INC_USE_COUNT;  if(!port->active) {    port->active = 1;    /*Start reading from the device*/    /* TODO: Look at possibility of submitting mulitple URBs to device to		 *       enhance buffering.  Win trace shows 16 initial read URBs.		 */    port->read_urb->dev = port->serial->dev;    if(usb_submit_urb(port->read_urb))      err("usb_submit_urb(read bulk) failed");    port->interrupt_in_urb->dev = port->serial->dev;    if(usb_submit_urb(port->interrupt_in_urb))      err(" usb_submit_urb(read int) failed");  }  spin_unlock_irqrestore(&port->port_lock, flags);  return 0;} /* prolific_sa_open */static void prolific_sa_close(struct usb_serial_port *port, struct file *filp){  unsigned long flags;  dbg(__FUNCTION__ " port %d", port->number);  spin_lock_irqsave(&port->port_lock, flags);  --port->open_count;  MOD_DEC_USE_COUNT;  if(port->open_count <= 0) {    /* shutdown our bulk reads and writes */    usb_unlink_urb(port->write_urb);    usb_unlink_urb(port->read_urb);    usb_unlink_urb(port->interrupt_in_urb); /* wgg - do I need this? I think so. */    port->active = 0;  }  spin_unlock_irqrestore(&port->port_lock, flags);} /* prolific_sa_close */static void prolific_sa_read_int_callback(struct urb *urb){  struct usb_serial_port      *port = (struct usb_serial_port *)urb->context;  struct prolific_sa_private  *priv = (struct prolific_sa_private *)port->private;  struct usb_serial           *serial;  unsigned char               *data = urb->transfer_buffer;  /* the urb might have been killed. */  if(urb->status)    return;  if(port_paranoia_check(port, "prolific_sa_read_interrupt"))    return;  serial = port->serial;  if(serial_paranoia_check(serial, "prolific_sa_read_interrupt"))    return;  usb_serial_debug_data(__FILE__, __FUNCTION__, urb->actual_length, data);  /* Handle known interrupt data */  /* ignore data[0] and data[1] */  priv->last_msr = data[PROLIFIC_SA_MSR_INDEX];  dbg("interrupt: 0x%02x", priv->last_msr);  /* Record Control Line states */  if(priv->last_msr & PROLIFIC_SA_MSR_DSR)    priv->control_state |= TIOCM_DSR;  else    priv->control_state &= ~TIOCM_DSR;  if(priv->last_msr & PROLIFIC_SA_MSR_CTS)    priv->control_state |= TIOCM_CTS;  else    priv->control_state &= ~TIOCM_CTS;  if(priv->last_msr & PROLIFIC_SA_MSR_RI)    priv->control_state |= TIOCM_RI;  else    priv->control_state &= ~TIOCM_RI;  if(priv->last_msr & PROLIFIC_SA_MSR_CD)    priv->control_state |= TIOCM_CD;  else    priv->control_state &= ~TIOCM_CD;  /* Now to report any errors */  priv->last_lsr = data[PROLIFIC_SA_LSR_INDEX];#if 0  if(priv->last_lsr & PROLIFIC_SA_LSR_ERR) {    tty = port->tty;    /* Overrun Error */    if(priv->last_lsr & PROLIFIC_SA_LSR_OE) {    }    /* Parity Error */    if(priv->last_lsr & PROLIFIC_SA_LSR_PE) {    }    /* Framing Error */    if(priv->last_lsr & PROLIFIC_SA_LSR_FE) {    }    /* Break Indicator */    if(priv->last_lsr & PROLIFIC_SA_LSR_BI) {    }  }#endif  /* INT urbs are automatically re-submitted */}static void prolific_sa_set_termios(struct usb_serial_port *port, struct termios *old_termios){  struct usb_serial           *serial = port->serial;  struct prolific_sa_private  *priv = (struct prolific_sa_private *)port->private;  unsigned int                cflag = port->tty->termios->c_cflag;  unsigned int                old_cflag = old_termios->c_cflag;  unsigned long               rate = 115200;  unsigned char               format = 0, parity = 0, size = 8;  info(__FUNCTION__ " - cflag: 0x%4X, old_cflag: 0x%4X", cflag, old_cflag);  /* Set the baud rate */  if((cflag & CBAUD) != (old_cflag & CBAUD)) {    /* reassert DTR and (maybe) RTS on transition from B0 */    if((old_cflag & CBAUD) == B0) {

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本精品一区二区三区高清| 国产伦精品一区二区三区免费 | 日韩欧美一级二级三级久久久| 五月综合激情网| 在线成人午夜影院| 蜜臀av一区二区在线观看| 欧美一级片在线| 久久99精品久久久久婷婷| 2023国产精品视频| 国产不卡免费视频| 亚洲精品欧美激情| 欧美精品tushy高清| 精品一区二区三区av| 国产女同性恋一区二区| 91捆绑美女网站| 偷拍与自拍一区| 久久人人97超碰com| 成人av资源下载| 亚洲成人精品在线观看| 欧美电视剧在线观看完整版| 国产成人免费在线观看| 亚洲黄色免费电影| 精品国产伦一区二区三区免费| 成人av免费在线观看| 亚洲一区二区在线视频| 精品人在线二区三区| 成人国产免费视频| 午夜精品aaa| 国产日韩欧美精品在线| 欧美视频一区在线| 国产成人午夜精品5599| 亚洲国产美女搞黄色| 久久五月婷婷丁香社区| 欧美亚洲免费在线一区| 国产精品99久久久久久有的能看 | 青青草国产成人99久久| 中文字幕成人av| 欧美一区二区私人影院日本| 国产99久久久精品| 日本成人在线电影网| 亚洲色图在线播放| 久久久久成人黄色影片| 欧美视频一区在线观看| 成人免费观看av| 久久精品国产**网站演员| 一区二区在线观看av| 久久九九久久九九| 欧美一区二区三区的| 色综合久久久网| 国产精品91一区二区| 日韩av电影免费观看高清完整版| 亚洲视频网在线直播| 国产婷婷色一区二区三区四区| 欧美肥妇free| 欧美三级三级三级爽爽爽| 不卡电影一区二区三区| 国产中文字幕精品| 美女视频黄频大全不卡视频在线播放| 亚洲欧美日韩电影| 国产精品高潮呻吟| 中文字幕 久热精品 视频在线 | 国产在线播放一区| 蜜桃av一区二区| 亚洲成人动漫精品| 亚洲自拍偷拍麻豆| 亚洲色图欧洲色图婷婷| 国产欧美一二三区| 久久精品亚洲一区二区三区浴池| 91精品国产免费| 4438x成人网最大色成网站| 欧美在线免费观看视频| 在线免费av一区| 91香蕉视频mp4| 91视频91自| 一本色道久久综合亚洲精品按摩| 99re热视频这里只精品| av不卡在线播放| 99在线精品一区二区三区| 粉嫩欧美一区二区三区高清影视| 国产福利视频一区二区三区| 国产一区二区成人久久免费影院| 久久国产尿小便嘘嘘| 久久精品999| 国产精选一区二区三区| 久草精品在线观看| 国产乱子伦一区二区三区国色天香| 精品一区二区精品| 国产乱人伦偷精品视频不卡| 国产福利一区二区三区视频在线| 成人午夜又粗又硬又大| 北岛玲一区二区三区四区| 99re热视频精品| 欧美日韩中字一区| 日韩视频免费观看高清完整版 | 久久综合999| 久久久亚洲高清| 中文字幕乱码一区二区免费| 国产精品久久久久久久午夜片| 樱花影视一区二区| 日日夜夜免费精品| 国产精品69久久久久水密桃| av一区二区三区四区| 91行情网站电视在线观看高清版| 欧美日韩一区二区欧美激情| 日韩视频123| 国产精品国产三级国产普通话蜜臀 | 中文字幕在线一区二区三区| 亚洲欧美日韩国产另类专区| 视频一区在线播放| 国产精品996| 欧美亚洲尤物久久| 久久嫩草精品久久久精品一| 国产精品国模大尺度视频| 亚洲成a人片在线观看中文| 国产一区欧美日韩| 色94色欧美sute亚洲线路一ni| 91精品国产综合久久精品| 国产日韩精品一区二区三区 | 欧美一卡二卡在线观看| 中文一区一区三区高中清不卡| 一区二区三区视频在线看| 激情欧美一区二区三区在线观看| 99免费精品视频| 欧美一级二级三级蜜桃| 亚洲欧洲日韩av| 青青草国产成人99久久| 97精品国产露脸对白| 日韩免费高清电影| 亚洲精品写真福利| 国产一区亚洲一区| 欧美日韩夫妻久久| 亚洲视频 欧洲视频| 激情综合网av| 欧美精选一区二区| 亚洲欧美福利一区二区| 国内精品免费**视频| 欧美伦理视频网站| 亚洲欧美日韩在线| 国产成人99久久亚洲综合精品| 欧美久久久久久久久| 亚洲三级电影网站| 国产69精品久久777的优势| 欧美一级免费大片| 一区二区三区**美女毛片| 成人综合在线观看| 久久久久久久免费视频了| 日韩在线一二三区| 精品婷婷伊人一区三区三| 国产精品国产三级国产专播品爱网 | 欧美电视剧在线观看完整版| 亚洲高清免费观看高清完整版在线观看| 国产99久久久国产精品免费看| 日韩一区二区三免费高清| 同产精品九九九| 欧美三级日本三级少妇99| 亚洲日本欧美天堂| av不卡在线播放| 中文字幕在线观看一区| 成人国产精品视频| 国产精品激情偷乱一区二区∴| 国产福利电影一区二区三区| 日韩视频在线你懂得| 日本强好片久久久久久aaa| 欧美男女性生活在线直播观看| 亚洲一本大道在线| 欧美色综合久久| 亚洲一二三四在线观看| 欧美视频一区二区三区在线观看 | 午夜天堂影视香蕉久久| 欧美性极品少妇| 天涯成人国产亚洲精品一区av| 欧美精品乱码久久久久久按摩| 天天亚洲美女在线视频| 91麻豆精品国产自产在线观看一区 | 亚洲第一成人在线| 欧美精品久久99| 免费一级片91| 精品国产电影一区二区| 国产一区二区三区免费看| 久久久.com| av成人老司机| 亚洲小说欧美激情另类| 欧美日韩和欧美的一区二区| 婷婷激情综合网| 精品欧美乱码久久久久久1区2区 | 久久久天堂av| 成人高清免费观看| 一区二区三区四区五区视频在线观看 | 亚洲激情av在线| 欧美日韩精品一二三区| 免费在线欧美视频| 久久久久久免费毛片精品| 99久久综合色| 亚洲动漫第一页| 精品日韩一区二区三区免费视频| 国内国产精品久久| 亚洲三级在线播放| 91精品国产综合久久国产大片| 激情深爱一区二区| 亚洲美女视频在线|