日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Win32串口操作的技巧

發布時間:2025/3/12 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Win32串口操作的技巧 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.開啟一個 Serial Port
  利用一般開啟檔案的 CreatFile() 即可開啟 serial port device

[cpp] view plaincopy print?
  • HANDLE?CreateFile(??
  • LPCTSTR?lpFileName,?//?pointer?to?name?of?the?file??
  • DWORD?dwDesiredAccess,?//?access?(read-write)?mode??
  • DWORD?dwShareMode,?//?share?mode??
  • LPSECURITY_ATTRIBUTES?lpSecurityAttributes,?//?pointer?to?security?attributes??
  • DWORD?dwCreationDistribution,?//?how?to?create??
  • DWORD?dwFlagsAndAttributes,?//?file?attributes??
  • HANDLE?hTemplateFile?//?handle?to?file?with?attributes?to?copy??
  • );??
  • HANDLE CreateFile( LPCTSTR lpFileName, // pointer to name of the file DWORD dwDesiredAccess, // access (read-write) mode DWORD dwShareMode, // share mode LPSECURITY_ATTRIBUTES lpSecurityAttributes, // pointer to security attributes DWORD dwCreationDistribution, // how to create DWORD dwFlagsAndAttributes, // file attributes HANDLE hTemplateFile // handle to file with attributes to copy );

      用 CreateFile() API.
      lpFileName 為 "COM1" 或是 "COM2"
      dwDersiredAccess 一般為 GENERIC_READ|GENERIC_WRITE
      dwShareMode "必須"為 0, 即不能共享, 但同一個 process 中的不同 thread 在一開啟之后就可以共享.
      lpSecurityAttributes 一般為 NULL
      dwCreateionDistributon 在這里"必須"為 OPEN_EXISTING
      dwFlagsAndAttributes 定義了開啟的屬性, 若是設成 FILE_FLAG_OVERLAPPED 則可使用異步的 I/O.
      hTemplateFile "必須"為 NULL
      傳回檔案 handle
      設定 Serial Port 傳送及接收緩沖區的大小

      在開啟完 serial port 之后, 可以藉由呼叫 SetupComm() 來進行配置傳送時的緩沖區及接收時的緩沖區. 如果沒有呼叫 SetupComm() 的話, Win95 會配置內定的緩沖區.

    [cpp] view plaincopy print?
  • BOOL?SetupComm(??
  • HANDLE?hFile,?//?handle?of?communications?device??
  • DWORD?dwInQueue,?//?size?of?input?buffer??
  • DWORD?dwOutQueue?//?size?of?output?buffer??
  • );??
  • BOOL SetupComm( HANDLE hFile, // handle of communications device DWORD dwInQueue, // size of input buffer DWORD dwOutQueue // size of output buffer );

      2.關閉 Serial Port file

      利用一般的 CloseHandle() 即可.

    [cpp] view plaincopy print?
  • BOOL?CloseHandle(??
  • HANDLE?hObject?//?handle?to?object?to?close??
  • );??
  • BOOL CloseHandle( HANDLE hObject // handle to object to close );

      3.取得 Seial Port 的信息

      在 Win32 里頭, 將一些通訊時會用到的信息用 COMMPROP 這個結構來表示. (當然不僅僅是 Serial Port) 可以用 GetCommProperties() 來取得:

    [cpp] view plaincopy print?
  • BOOL?GetCommProperties(??
  • HANDLE?hFile,?//?handle?of?communications?device??
  • LPCOMMPROP?lpCommProp?//?address?of?communications?properties?structure??
  • );??
  • BOOL GetCommProperties( HANDLE hFile, // handle of communications device LPCOMMPROP lpCommProp // address of communications properties structure );

      COMMPROP 長的像這個樣子:

    [cpp] view plaincopy print?
  • typedef?struct?_COMMPROP?{?//?cmmp??
  • WORD?wPacketLength;?//?packet?size,?in?bytes??
  • WORD?wPacketVersion;?//?packet?version??
  • DWORD?dwServiceMask;?//?services?implemented??
  • DWORD?dwReserved1;?//?reserved??
  • DWORD?dwMaxTxQueue;?//?max?Tx?bufsize,?in?bytes??
  • DWORD?dwMaxRxQueue;?//?max?Rx?bufsize,?in?bytes??
  • DWORD?dwMaxBaud;?//?max?baud?rate,?in?bps??
  • DWORD?dwProvSubType;?//?specific?provider?type??
  • DWORD?dwProvCapabilities;?//?capabilities?supported??
  • DWORD?dwSettableParams;?//?changable?parameters??
  • DWORD?dwSettableBaud;?//?allowable?baud?rates??
  • WORD?wSettableData;?//?allowable?byte?sizes??
  • WORD?wSettableStopParity;?//?stop?bits/parity?allowed??
  • DWORD?dwCurrentTxQueue;?//?Tx?buffer?size,?in?bytes??
  • DWORD?dwCurrentRxQueue;?//?Rx?buffer?size,?in?bytes??
  • DWORD?dwProvSpec1;?//?provider-specific?data??
  • DWORD?dwProvSpec2;?//?provider-specific?data??
  • WCHAR?wcProvChar[1];?//?provider-specific?data??
  • }?COMMPROP;??
  • typedef struct _COMMPROP { // cmmp WORD wPacketLength; // packet size, in bytes WORD wPacketVersion; // packet version DWORD dwServiceMask; // services implemented DWORD dwReserved1; // reserved DWORD dwMaxTxQueue; // max Tx bufsize, in bytes DWORD dwMaxRxQueue; // max Rx bufsize, in bytes DWORD dwMaxBaud; // max baud rate, in bps DWORD dwProvSubType; // specific provider type DWORD dwProvCapabilities; // capabilities supported DWORD dwSettableParams; // changable parameters DWORD dwSettableBaud; // allowable baud rates WORD wSettableData; // allowable byte sizes WORD wSettableStopParity; // stop bits/parity allowed DWORD dwCurrentTxQueue; // Tx buffer size, in bytes DWORD dwCurrentRxQueue; // Rx buffer size, in bytes DWORD dwProvSpec1; // provider-specific data DWORD dwProvSpec2; // provider-specific data WCHAR wcProvChar[1]; // provider-specific data } COMMPROP;

      在這里, lpCommProp 需要 programmer 自行配置空間. 有趣的問題是, 系統在這個結構之后會需要額外的空間. 但是配置者也就是 programmer 卻不知道系統會需要多少. 很簡單的做法是配置一大塊絕對會夠的空間. 另一個聰明的做法是執行兩次 GetCommProperties() , 第一次只配置 sizeof(COMMPROP) 這么大的空間, 因為還沒有開始執行一些動作, 所以系統并不會嘗試著在后面填東西, 所以不會出問題. 接著執行第一次的 GetCommProperties(), 得到結果, 取出結構中的 wPacketLength, 這個 member 代表實際上需要的大小, 然后依據這個大小重新配置一個新的. 這樣的話 , 就不會有浪費任何空間的問題了.

      至于上述 COMMPROP 結構的成員所代表的意思, on-line help 中應該寫的都滿清楚的 .

    4.設定及取得通訊狀態

      你可以利用 COMMPROP 來取得一些狀態, 但是當你想改變目前的設定時你需要兩個 API 來完成:

    [cpp] view plaincopy print?
  • BOOL?GetCommState(??
  • HANDLE?hFile,?//?handle?of?communications?device??
  • LPDCB?lpDCB?//?address?of?device-control?block?structure??
  • );??
  • BOOL GetCommState( HANDLE hFile, // handle of communications device LPDCB lpDCB // address of device-control block structure );

    [cpp] view plaincopy print?
  • BOOL?SetCommState(??
  • HANDLE?hFile,?//?handle?of?communications?device??
  • LPDCB?lpDCB?//?address?of?device-control?block?structure??
  • );??
  • BOOL SetCommState( HANDLE hFile, // handle of communications device LPDCB lpDCB // address of device-control block structure );

      你可以用 GetCommState() 來取得目前 Serial Port 的狀態, 也可以用 SetCommState() 來設定 Serial Port 的狀態.

      DCB 的結構就請自行翻閱 help 啰.

      另外, programmer 最常控制的幾個設定就是 baud rate, parity method, data bits, 還有 stop bit. BuildCommDCB() 提供了對于這幾個常見設定的控制.

    [cpp] view plaincopy print?
  • BOOL?BuildCommDCB(??
  • LPCTSTR?lpDef,?//?pointer?to?device-control?string??
  • LPDCB?lpDCB?//?pointer?to?device-control?block??
  • );??
  • BOOL BuildCommDCB( LPCTSTR lpDef, // pointer to device-control string LPDCB lpDCB // pointer to device-control block );

      lpDef 長的像這樣: "baud=2400 parity=N data=8 stop=1"

    5.通訊設定對話盒

      Win32 API 中提供了一個開啟通訊設定對話盒的 API: CommConfigDialog(), 當呼叫這個 API 時, 會蹦現一個可供設定 Baud Rate, Data Bits, Parity .. 等信息的對話盒, programmer 可以利用它來讓使用者設定一些信息, 并且取得結果.

    [cpp] view plaincopy print?
  • BOOL?CommConfigDialog(??
  • LPTSTR?lpszName,?//?pointer?to?device?name?string??
  • HWND?hWnd,?//?handle?to?window??
  • LPCOMMCONFIG?lpCC?//?pointer?to?comm.?configuration?structure??
  • );??
  • BOOL CommConfigDialog( LPTSTR lpszName, // pointer to device name string HWND hWnd, // handle to window LPCOMMCONFIG lpCC // pointer to comm. configuration structure );

      其中 lpCC 被用來存放設定值的結果.

    [cpp] view plaincopy print?
  • typedef?struct?_COMM_CONFIG?{??
  • DWORD?dwSize;??
  • WORD?wVersion;??
  • WORD?wReserved;??
  • DCB?dcb;??
  • DWORD?dwProviderSubType;??
  • DWORD?dwProviderOffset;??
  • DWORD?dwProviderSize;??
  • WCHAR?wcProviderData[1];??
  • }?COMMCONFIG,?*LPCOMMCONFIG;??
  • typedef struct _COMM_CONFIG { DWORD dwSize; WORD wVersion; WORD wReserved; DCB dcb; DWORD dwProviderSubType; DWORD dwProviderOffset; DWORD dwProviderSize; WCHAR wcProviderData[1]; } COMMCONFIG, *LPCOMMCONFIG;

      在我們呼叫 CommConfigDialog() 之前, dwSize 要設為 sizeof(COMMCONFIG), wVersion 的值在這邊似乎不重要(我不清楚, VC5 的 on-line help 說可以設為 1, 我手中的 book 的范例是設為 0x100), 呼叫完 CommConfigDialog() 之后, 成員 dcb 中的 BaudRate, ByteSize, StopBits, Parity 就是使用者的設定.

    6.Timeout 的機制

      因為傳輸時并不會維持一個絕對穩定的速率. 因為傳輸品質的關系, programer 會需要 timeout 的機制來協助他們做一些控制. 在 Win32 通訊 Timeout 的機制中, timeout 的性質共分為兩類, 先來看看 COMMTIMEOUTS 這個結構:

    [cpp] view plaincopy print?
  • typedef?struct?_COMMTIMEOUTS?{?//?ctmo??
  • DWORD?ReadIntervalTimeout;??
  • ??
  • DWORD?ReadTotalTimeoutMultiplier;??
  • DWORD?ReadTotalTimeoutConstant;??
  • DWORD?WriteTotalTimeoutMultiplier;??
  • DWORD?WriteTotalTimeoutConstant;??
  • }?COMMTIMEOUTS,*LPCOMMTIMEOUTS;??
  • typedef struct _COMMTIMEOUTS { // ctmo DWORD ReadIntervalTimeout;DWORD ReadTotalTimeoutMultiplier; DWORD ReadTotalTimeoutConstant; DWORD WriteTotalTimeoutMultiplier; DWORD WriteTotalTimeoutConstant; } COMMTIMEOUTS,*LPCOMMTIMEOUTS;

      programmer 可以利用 GetCommTimeouts() 和 SetCommTimeouts() 來讀取或是設定目前的 timeout 值.

    [cpp] view plaincopy print?
  • BOOL?GetCommTimeouts(??
  • HANDLE?hFile,?//?handle?of?communications?device??
  • LPCOMMTIMEOUTS?lpCommTimeouts?//?address?of?comm.?time-outs?structure??
  • );??
  • BOOL GetCommTimeouts( HANDLE hFile, // handle of communications device LPCOMMTIMEOUTS lpCommTimeouts // address of comm. time-outs structure );


    [cpp] view plaincopy print?
  • BOOL?SetCommTimeouts(??
  • HANDLE?hFile,?//?handle?of?communications?device??
  • LPCOMMTIMEOUTS?lpCommTimeouts?//?address?of?communications?time-out?structure??
  • );??
  • BOOL SetCommTimeouts( HANDLE hFile, // handle of communications device LPCOMMTIMEOUTS lpCommTimeouts // address of communications time-out structure );  第一種 timeout 的機制稱為 interval timeout, 從字面上的意義很容易可以理解這種 timeout 的機制是讀取字符之間的間隔時間的 timeout, 只有讀取字符時才能夠使用interval timeout. 也就是在這個結構中的 ReadIntervalTimeout, 單位為 ms, 當讀取完一個字符后, 超過了 ReadIntervalTimeout 的值, 卻還沒有讀到下一個字符時, timeout 就發生了.

      第二種 timeout 的機制稱為 total timeout, 顧名思義即是傳輸的總時間的 timeout . 在這種 timeout 的機制下, Win32 提供了一個具有彈性的方式來設定 total timeout. 以讀取的 total timeout 為例, 利用 ReadTotalTimeoutMultiplier 和 ReadTotalTimeoutConstant 構成了一個線性的上限值. 什么意思呢? 實際上的 total timeout 應該是這樣的一個式子:

      ReadTotalTimeout = ReadTotalTimeOutMultiplier * BytesToRead + ReadTotalTimeoutConstant

      WriteTotalTimeout 用同樣的公式來計算. 這樣的話, 不僅可以用一個固定的值來做為 timeout 值, 也可以用條線來做為 timeout 的值, 而隨著要讀取或是要寫的 bytes 數而變動.

      如果不想使用 timeout, 就把 COMMTIMEOUTS 里頭的資料成員都填為 0.

      如果你將 ReadIntervalTimeout 設為 MAXDWORD, 且將 ReadTotalTimeOutMultiplier 和 ReadTotalTimeoutConstant 都設為 0 的話, 那么讀取時, 如果 receive queue 里頭并沒有資料, 讀取的動作將會馬上返回, 而不會停滯在讀取的動作.

      這里有一個和 BuildCommDCB() 很像的 API 叫 BuildCommDCBAndTimeouts():

    [cpp] view plaincopy print?
  • BOOL?BuildCommDCBAndTimeouts(??
  • LPCTSTR?lpDef,?//?pointer?to?the?device-control?string??
  • LPDCB?lpDCB,?//?pointer?to?the?device-control?block??
  • LPCOMMTIMEOUTS?lpCommTimeouts?//?pointer?to?comm.?time-out?structure??
  • );??
  • BOOL BuildCommDCBAndTimeouts( LPCTSTR lpDef, // pointer to the device-control string LPDCB lpDCB, // pointer to the device-control block LPCOMMTIMEOUTS lpCommTimeouts // pointer to comm. time-out structure );

      lpDef 一樣是控制字符串, 可以給像 BuildCommDCB() 中的 lpDef 那樣格式的字符串, 但是多了 "TO=XXX" 這個設定. 如果 "TO=ON", 這個 API 會依據 lpCommTimeouts 里頭的值來設定讀和寫的 timeout 值. 如果 "TO=OFF", 則會設定這個 device 沒有 timeout. 如果是 "ON" 和 "OFF" 之外的其它值, 則 lpCommTimeouts 的設定將會被忽略.

      對了, 在設定完 timeout 值之后, 記得要檢查 COMMPROP 里的 dwProvCapabilities 中的 PCF_INTTIMEOUTS 和 PCF_TOTALTIMEOUTS 兩個 flags 是否有被 set, 以確認 interval timeout 和 total timeout 是否有支持.

    7.讀取資料

      從 serial port 里頭讀取資料就跟讀取一般的檔案一樣, 使用 ReadFile() 來達成.

    [cpp] view plaincopy print?
  • BOOL?ReadFile(??
  • HANDLE?hFile,?//?handle?of?file?to?read??
  • LPVOID?lpBuffer,?//?address?of?buffer?that?receives?data??
  • DWORD?nNumberOfBytesToRead,?//?number?of?bytes?to?read??
  • LPDWORD?lpNumberOfBytesRead,?//?address?of?number?of?bytes?read??
  • LPOVERLAPPED?lpOverlapped?//?address?of?structure?for?data??
  • );??
  • BOOL ReadFile( HANDLE hFile, // handle of file to read LPVOID lpBuffer, // address of buffer that receives data DWORD nNumberOfBytesToRead, // number of bytes to read LPDWORD lpNumberOfBytesRead, // address of number of bytes read LPOVERLAPPED lpOverlapped // address of structure for data );  要注意的是, nNumberOfBytesToRead 設定的是一次最多的讀取量, 很有可能所讀取的值(檢查 lpNumberOfBytesRead)小于這個值. 通常在錯誤發生或是 timeout 發生時這個 API 就會返回.

      PurgeComm() 這個 API 可以用來終止目前正在進行的讀或寫的動作, 也可以 flush 掉 I/O buffer 內等待讀或寫的資料.

    [cpp] view plaincopy print?
  • BOOL?PurgeComm(??
  • HANDLE?hFile,?//?handle?of?communications?resource??
  • DWORD?dwFlags?//?action?to?perform??
  • );??
  • BOOL PurgeComm( HANDLE hFile, // handle of communications resource DWORD dwFlags // action to perform );  其中 dwFlags 共有四種 flags:

      PURGE_TXABORT: 終止目前正在進行的(背景)寫入動作
      PURGE_RXABORT: 終正目前正在進行的(背景)讀取動作
      PURGE_TXCLEAR: flush 寫入的 buffer
      PURGE_TXCLEAR: flush 讀取的 buffer

      而使用 FlushFileBuffers() 可以確保所有的資料都被送出, 這個 API 才會返回.

      另外一個有趣的 API 是 ClearCommError(), 從字面上的意思看來, 它是用來清除錯誤情況用的, 但是實際上它還可以拿來取得目前通訊設備的一些信息.

    [cpp] view plaincopy print?
  • BOOL?ClearCommError(??
  • HANDLE?hFile,?//?handle?to?communications?device??
  • LPDWORD?lpErrors,?//?pointer?to?variable?to?receive?error?codes??
  • LPCOMSTAT?lpStat?//?pointer?to?buffer?for?communications?status??
  • );??
  • BOOL ClearCommError( HANDLE hFile, // handle to communications device LPDWORD lpErrors, // pointer to variable to receive error codes LPCOMSTAT lpStat // pointer to buffer for communications status );  呼叫這個 API 之后, 關于通訊設備的一些信息會被儲存在 lpStat 中, COMSTAT 的結構如下:

    [cpp] view plaincopy print?
  • typedef?struct?_COMSTAT?{?//?cst??
  • DWORD?fCtsHold?:?1;?//?Tx?waiting?for?CTS?signal??
  • DWORD?fDsrHold?:?1;?//?Tx?waiting?for?DSR?signal??
  • DWORD?fRlsdHold?:?1;?//?Tx?waiting?for?RLSD?signal??
  • DWORD?fXoffHold?:?1;?//?Tx?waiting,?XOFF?char?rec'd??
  • DWORD?fXoffSent?:?1;?//?Tx?waiting,?XOFF?char?sent??
  • DWORD?fEof?:?1;?//?EOF?character?sent??
  • DWORD?fTxim?:?1;?//?character?waiting?for?Tx??
  • DWORD?fReserved?:?25;?//?reserved??
  • DWORD?cbInQue;?//?bytes?in?input?buffer??
  • DWORD?cbOutQue;?//?bytes?in?output?buffer??
  • }?COMSTAT,?*LPCOMSTAT??
  • typedef struct _COMSTAT { // cst DWORD fCtsHold : 1; // Tx waiting for CTS signal DWORD fDsrHold : 1; // Tx waiting for DSR signal DWORD fRlsdHold : 1; // Tx waiting for RLSD signal DWORD fXoffHold : 1; // Tx waiting, XOFF char rec'd DWORD fXoffSent : 1; // Tx waiting, XOFF char sent DWORD fEof : 1; // EOF character sent DWORD fTxim : 1; // character waiting for Tx DWORD fReserved : 25; // reserved DWORD cbInQue; // bytes in input buffer DWORD cbOutQue; // bytes in output buffer } COMSTAT, *LPCOMSTAT  藉由 fCtsHold, fDsrHold, fRlsdHold, fXoffHold, fXoffSent 可以知道目前因為什么因素而使通訊阻礙住了.( 跟 handshaking 和 flow control 有關) cbInque 和 cbOutQue 則可以顯示出還有多少 bytes 在讀取或是寫入 queue 中.

      8.寫入資料

      和讀取資料一樣, programmer 可以使用 WriteFile() 來將資料寫入 serial port.

    [cpp] view plaincopy print?
  • BOOL?WriteFile(??
  • HANDLE?hFile,?//?handle?to?file?to?write?to??
  • LPCVOID?lpBuffer,?//?pointer?to?data?to?write?to?file??
  • DWORD?nNumberOfBytesToWrite,?//?number?of?bytes?to?write??
  • LPDWORD?lpNumberOfBytesWritten,?//?pointer?to?number?of?bytes?written??
  • LPOVERLAPPED?lpOverlapped?//?pointer?to?structure?needed?for?overlapped?I/O??
  • );??
  • BOOL WriteFile( HANDLE hFile, // handle to file to write to LPCVOID lpBuffer, // pointer to data to write to file DWORD nNumberOfBytesToWrite, // number of bytes to write LPDWORD lpNumberOfBytesWritten, // pointer to number of bytes written LPOVERLAPPED lpOverlapped // pointer to structure needed for overlapped I/O );  關于通訊設備的寫入有三個很有趣的 API, 它們分別是 SetCommBreak(), ClearCommBreak, 和 TransmitCommChar().

    [cpp] view plaincopy print?
  • BOOL?SetCommBreak(??
  • HANDLE?hFile?//?handle?of?communications?device??
  • );??
  • BOOL SetCommBreak( HANDLE hFile // handle of communications device ); [cpp] view plaincopy print?
  • BOOL?ClearCommBreak(??
  • HANDLE?hFile?//?handle?to?communications?device??
  • );??
  • BOOL ClearCommBreak( HANDLE hFile // handle to communications device );

    [cpp] view plaincopy print?
  • BOOL?TransmitCommChar(??
  • HANDLE?hFile,?//?handle?of?communications?device??
  • char?cChar?//?character?to?transmit??
  • );??
  • BOOL TransmitCommChar( HANDLE hFile, // handle of communications device char cChar // character to transmit );  SetCommBreak() 是用來暫停目前的傳輸作業, 它會使 buffer 中的資料都不再被送出, 這個時候, program 可以去做些雜七雜八的事, 之后, 再利用 ClearCommBreak() 回復傳輸作業.

      TransmitCommChar() 是用來立即性的趕在所有 buffer 數據被送出去之前, 傳輸一個字符的數據出去, 即使 buffer 中還有資料. 換句話說, 這個字符有最高的優先權被送出去.

    9.事件驅動式的 I/O

      在 Win32 里頭, 對于通訊設備的 I/O 可以用像是事件驅動式的方法來達成. 主要是利用一個叫 WaitCommEvent() 的 API. 呼叫這個 API 之后, 會一直 block 到設定的事件發生之后才會返回. 我們先來看看如何設定事件, 再回過頭來看 WaitCommEvent() .

      programer 可以用 GetCommMask() 和 SetCommMask() 來取得或是設定目前設定的通訊事件.

    [cpp] view plaincopy print?
  • BOOL?GetCommMask(??
  • HANDLE?hFile,?//?handle?of?communications?device??
  • LPDWORD?lpEvtMask?//?address?of?variable?to?get?event?mask??
  • );??
  • BOOL GetCommMask( HANDLE hFile, // handle of communications device LPDWORD lpEvtMask // address of variable to get event mask );

    [cpp] view plaincopy print?
  • BOOL?SetCommMask(??
  • HANDLE?hFile,?//?handle?of?communications?device??
  • DWORD?dwEvtMask?//?mask?that?identifies?enabled?events??
  • );??
  • BOOL SetCommMask( HANDLE hFile, // handle of communications device DWORD dwEvtMask // mask that identifies enabled events );  可以設定的事件有 EV_BREAK, EV_CTS, EV_DSR, EV_ERR, EV_RING, EV_RLSD, EV_RXCHAR, EV_RXFLAG, EV_TXEMPTY.(其意義請自行參考 help), 當然, 你可以把它們 or 起來成為組合的事件.

      在設定完想要處理的事件之后, 可以使用 WaitCommEvent()

    [cpp] view plaincopy print?
  • BOOL?WaitCommEvent(??
  • HANDLE?hFile,?//?handle?of?communications?device??
  • LPDWORD?lpEvtMask,?//?address?of?variable?for?event?that?occurred??
  • LPOVERLAPPED?lpOverlapped,?//?address?of?overlapped?structure??
  • );??
  • BOOL WaitCommEvent( HANDLE hFile, // handle of communications device LPDWORD lpEvtMask, // address of variable for event that occurred LPOVERLAPPED lpOverlapped, // address of overlapped structure );

      WaitCommEvent() 會一直 block 到你所設定的通訊事件發生為止. 所以當 WaitCommEvent() 返回時, 你可以由 lpEvtMask 取得究竟是那一事件發生, 再來決定要如何處理.

      舉例來說, 可以用 SetCommMask() 設定事件為 EV_RXCHAR, 那么在呼叫 WaitCommEvent() 時, 它會等到有字符可供讀取時才會返回, 那么在它返回之后, 可以檢查一下 lpEvtMask 中是否 set 了 EV_RXCHAR, 如果是的話就可以用 ReadFile() 去讀取. 這樣的話, 可以避免掉某些情形之下, 需要做 polling 所引起效率不彰的問題.

    10.錯誤的處理

      前面提過的 ClearnCommError() 可以用來取得目前發生錯誤的原因.(請參見 help)

    11.硬件的控制命令

      Win32 中提供了 EscapeCommFunction() 允許 programer 對幾個硬件訊號做控制.

    [cpp] view plaincopy print?
  • BOOL?EscapeCommFunction(??
  • HANDLE?hFile,?//?handle?to?communications?device??
  • DWORD?dwFunc?//?extended?function?to?perform??
  • );??
  • BOOL EscapeCommFunction( HANDLE hFile, // handle to communications device DWORD dwFunc // extended function to perform );  其中 dwFunc 可以是:

    CLRDTR : 讓 DTR OFF
    CLRRTS : 讓 RTS OFF
    SETDTR : 讓 DTR ON
    SETRTS : 讓 RTS ON
    SETXOFF : "仿真" 接收到 XOFF 字符
    SETXON : "仿真" 接收到 XON 字符
    SETBREAK : 和 SetCommBreak() 的意思相同
    CLRBREAK : 和 ClearCommBreak() 的意思相同

    ?

    本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/zeroless/archive/2006/01/10/575581.aspx

    總結

    以上是生活随笔為你收集整理的Win32串口操作的技巧的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    久久国产精品免费一区 | 国产一区二区中文字幕 | 视频国产一区二区三区 | 天天精品视频 | 96国产在线 | 开心婷婷色 | 久久久五月婷婷 | 天天爱天天插 | 91麻豆精品国产91久久久久久久久 | 亚洲最新av | 亚洲国产资源 | 国产精品免费人成网站 | 欧美一二三四在线 | 美女视频一区二区 | 美女网站在线看 | 97人人人| 成人h在线| 国产人成在线视频 | 天天操欧美 | 在线观看av免费 | 最近中文字幕免费视频 | 在线电影日韩 | 精品久久久久一区二区国产 | 国产黄色视 | 三级av免费看 | 成人国产精品一区二区 | 日韩一区二区三区不卡 | 国产精品theporn | 中文字幕在线播放日韩 | 久久综合中文字幕 | 91尤物国产尤物福利在线播放 | 免费网站看v片在线a | 久久精品影视 | 国产精品国产三级国产aⅴ无密码 | 五月婷婷在线综合 | 亚洲一区二区视频 | 国产小视频网站 | 丁香六月在线观看 | 国产91精品一区二区 | 人人擦| 免费看片网页 | 精品国产免费av | 97碰碰精品嫩模在线播放 | 国产日韩欧美自拍 | 久久国产精品电影 | 91精品网站在线观看 | 久久一久久 | av在线成人| 久久调教视频 | 国产在线成人 | 国产精品视频在线观看 | 激情av在线播放 | 久久久免费高清视频 | 在线激情小视频 | 亚洲综合在线五月 | 国产成人精品一区二区三区 | 天天插天天 | bbbb操bbbb | 91亚洲欧美激情 | av片中文字幕 | 九七视频在线 | 高清av在线 | 久久久久欧美精品999 | 精品国产乱码一区二 | 精品一区二区三区香蕉蜜桃 | 久久久久久久av麻豆果冻 | 人人插人人做 | 成人免费看黄 | 黄色免费av | 日韩高清不卡一区二区三区 | 国产成人精品一区一区一区 | 国产高清视频免费 | 免费观看黄 | 日本成址在线观看 | 欧美做受高潮1 | 免费福利视频网站 | 中文字幕在线播放一区二区 | 91精品久久久久久综合乱菊 | 欧美日韩性视频在线 | 天天射综合 | 国产成人一区二区精品非洲 | 天天综合色 | 天天干天天综合 | 91传媒在线看 | 色综合天天综合 | 久久dvd| 天堂在线一区二区三区 | 国产精品欧美一区二区三区不卡 | 一区二区激情视频 | 国产在线观看高清视频 | 狠色在线| 激情视频国产 | 一区二区免费不卡在线 | 丁香花中文在线免费观看 | 日韩电影一区二区在线观看 | 公开超碰在线 | av亚洲产国偷v产偷v自拍小说 | 精品色综合 | 97视频在线免费 | 日韩av手机在线看 | 色婷婷综合久久久中文字幕 | 少妇搡bbbb搡bbb搡忠贞 | 国产99视频在线观看 | 亚洲婷婷综合色高清在线 | 69视频国产 | 国产精品电影在线 | 亚洲精品国产成人av在线 | 免费碰碰 | 国产一级黄色免费看 | 一区二区欧美在线观看 | av888.com| 久久久久久久久久久久久国产精品 | 伊人国产女 | 日韩欧美一区二区在线观看 | 国产在线精品一区二区三区 | 在线观看免费一区 | av电影在线不卡 | 精品国产精品国产偷麻豆 | 国产私拍在线 | 狠狠干夜夜爱 | 午夜精品久久久99热福利 | 精品国产乱码久久久久久1区二区 | 91喷水| 久草在线在线 | 天天操天天干天天操天天干 | 亚洲欧美视频在线播放 | 国产爽妇网| 精品一区二区免费 | 亚洲作爱视频 | 久久综合给合久久狠狠色 | 久久久久久久久久毛片 | av片在线观看 | 精品视频亚洲 | 久草在线视频资源 | 国产日韩中文字幕在线 | 国产免费又爽又刺激在线观看 | 成人羞羞视频在线观看免费 | 欧美最爽乱淫视频播放 | 天天综合网天天 | 亚洲精品久久久久久国 | 亚洲精品黄色在线观看 | 久草91视频 | 天天操天天能 | 草莓视频在线观看免费观看 | 色亚洲激情 | 人人爽人人爽 | 国产精品视频 | 婷婷久操| 婷婷亚洲综合 | 日韩三级视频 | 操碰av| 色大片免费看 | 黄色国产高清 | 日韩精品中文字幕在线观看 | 日本久久精品视频 | 伊人资源视频在线 | 久久国产成人午夜av影院潦草 | 成人网色| 久久精品视频网址 | 国产精品 999 | 99精品久久久 | 91在线网址 | 中文字幕免费观看视频 | av免费观看网站 | 久久久国产精品麻豆 | 91精品视频网站 | 狠狠色伊人亚洲综合成人 | 99视频精品| 中文字幕999 | 欧美日韩国产亚洲乱码字幕 | 成年人电影毛片 | 亚洲精品在线资源 | 一级成人免费视频 | 亚洲专区视频在线观看 | 99精品久久精品一区二区 | 激情六月婷婷久久 | 97视频在线观看网址 | 日韩v在线91成人自拍 | 久久精品一区二区三区中文字幕 | 日韩av偷拍 | 91久久国产自产拍夜夜嗨 | 亚洲人xxx| 久草在线这里只有精品 | 久久伊人爱 | 超碰人人舔 | 免费观看第二部31集 | 99久在线精品99re8热视频 | 久久日本视频 | 国内精品国产三级国产aⅴ久 | 精品久久毛片 | 亚洲视频综合在线 | 99中文字幕视频 | 日本精品视频免费 | 午夜av电影院 | 精品综合久久久 | 久久国产精品一区二区三区 | 中文字幕av电影下载 | 亚洲最大av | 亚洲一区尤物 | 国产v欧美| 国产成人免费 | 9999激情 | 亚洲精品中文在线 | 91成人国产 | 全黄色一级片 | 久久久色 | 激情黄色av| 国产你懂的在线 | 婷婷丁香自拍 | 国产色就色 | 亚洲综合日韩在线 | 日韩影视在线 | 国产美女精品视频 | 中文字幕亚洲精品在线观看 | 91在线精品观看 | 超碰夜夜 | 97色婷婷成人综合在线观看 | 福利一区在线 | 欧美色插 | 亚洲综合激情网 | 国产成人综 | 国产不卡视频在线 | 黄色av影视 | 91久久久久久久一区二区 | 97成人啪啪网 | 国产精品久久久免费 | 欧美特一级片 | 亚洲伊人婷婷 | 婷婷激情综合 | 黄www在线观看 | 亚洲一级国产 | 视频91在线 | 国产一区 在线播放 | 欧美一级免费黄色片 | 国产亚洲精品久久久久5区 成人h电影在线观看 | 中文字幕乱码在线播放 | 天堂在线免费视频 | 久久99热国产| 91高清完整版在线观看 | www在线观看视频 | 综合成人在线 | 免费看毛片在线 | 国产精品一区二区免费视频 | 久久精品国产一区二区三 | 99精品国产99久久久久久福利 | 久久91网 | 国产精品99久久久久久久久久久久 | 免费视频一二三区 | 波多野结衣网址 | 中文在线免费看视频 | 中文字幕在线视频一区二区 | 久久久三级视频 | 日韩黄色影院 | 国产精华国产精品 | 中文字幕 国产视频 | 丁香电影小说免费视频观看 | 成人黄色在线视频 | 国产成年人av | 色综合久久天天 | 美女av电影 | 91日韩精品视频 | 亚洲激情在线视频 | www.亚洲黄| 中文字幕在线观看免费观看 | 久草在线视频资源 | 欧美乱大交 | 久久精品99国产国产精 | 国产精品爽爽久久久久久蜜臀 | 97成人免费 | 一级片黄色片网站 | 亚洲一区二区黄色 | www欧美xxxx| 国产精选在线观看 | 国产精品一区二区久久 | 天天色棕合合合合合合 | 午夜国产福利在线 | 欧美一级裸体视频 | 国产91aaa| 欧美极品xxxx | ,午夜性刺激免费看视频 | 激情www| 成人播放器 | 国产999精品久久久久久 | 麻豆免费在线播放 | 亚洲天天做| 99电影456麻豆 | 天天射天天干 | 精品国产片 | 久久99视频精品 | 精品日韩在线一区 | 日日夜夜添 | 国产视频999 | 国产伦精品一区二区三区免费 | 日韩欧美精选 | 免费a v在线 | 在线视频 你懂得 | av网站在线观看播放 | 江苏妇搡bbbb搡bbbb | 成人sm另类专区 | 深爱开心激情网 | 最近高清中文字幕在线国语5 | 成年人免费看的视频 | 久久亚洲综合国产精品99麻豆的功能介绍 | 丁香激情五月 | 亚洲国产精品成人精品 | 天天操天天操一操 | www.天天色.com | 国产精品亚洲片在线播放 | 99色资源| 免费在线观看成年人视频 | 91在线最新 | 91九色精品| 亚洲电影影音先锋 | 国产97免费 | av亚洲产国偷v产偷v自拍小说 | 麻豆av一区二区三区在线观看 | 99精品免费久久久久久久久日本 | 91麻豆精品国产91久久久久久 | 国产99久久久精品 | 中国精品一区二区 | 午夜黄网 | 日韩va在线观看 | 激情婷婷色 | 久久大视频 | 三级黄色理论片 | 婷婷在线精品视频 | 亚洲精品免费在线 | 麻豆91精品91久久久 | 国产一区在线免费 | 98涩涩国产露脸精品国产网 | 日日干av | 亚洲精品在线免费观看视频 | 丝袜av网站| 久久久国产精品人人片99精片欧美一 | 五月开心六月婷婷 | 欧美一区二区三区特黄 | 欧美日韩性视频在线 | va视频在线观看 | 久久经典视频 | 欧美一级视频免费 | av片子在线观看 | 蜜臀av麻豆| 久久免费大片 | 日韩动漫免费观看高清完整版在线观看 | 国产精品久久久久av免费 | www亚洲国产| 国产精品久久久久亚洲影视 | 成人黄大片视频在线观看 | 国产一级片播放 | 精品天堂av | 97在线观看视频国产 | 天天色宗合 | av福利在线免费观看 | 91午夜精品 | 国产精品女人网站 | 欧美资源在线观看 | 黄色精品免费 | 免费视频你懂得 | 亚洲综合成人在线 | 欧美精品v国产精品 | 97在线免费视频观看 | 中文字幕av一区二区三区四区 | 99热这里只有精品免费 | 久久综合免费视频影院 | 亚洲国产欧美一区二区三区丁香婷 | 狠狠躁夜夜av | 亚洲日本成人网 | 一区二区三区四区精品视频 | 西西444www大胆高清视频 | 亚洲mv大片欧洲mv大片免费 | 国产精品久久9 | 丁香婷婷综合色啪 | 国产资源精品在线观看 | 美女国产| 97综合网| 天天艹日日干 | 国产色在线观看 | 99热精品国产| 在线激情影院一区 | 亚洲精品在线免费播放 | 在线观看视频黄色 | 国产色婷婷精品综合在线手机播放 | 国产精品久久免费看 | 精品国偷自产在线 | 在线亚洲人成电影网站色www | 人人爽人人爽人人爽 | 久久毛片高清国产 | 成 人 黄 色视频免费播放 | 国产亚洲视频在线免费观看 | 亚洲视频播放 | 国产成人99av超碰超爽 | 亚洲国产中文字幕在线视频综合 | 99av国产精品欲麻豆 | 久99久在线| 手机版av在线| 久久婷婷国产色一区二区三区 | 欧美久久久久久 | 国产码电影 | 男女拍拍免费视频 | 免费视频一区 | 欧美一区二区三区在线视频观看 | 狠狠躁18三区二区一区ai明星 | 天天操夜夜曰 | 日韩高清无线码2023 | 亚洲婷婷综合色高清在线 | 麻豆精品视频在线观看免费 | 久久久久久网站 | 毛片.com| 久久久伊人网 | 久久人人爽人人爽人人片av软件 | 中文久久精品 | 亚洲黄色免费在线看 | 五月天国产精品 | 91av大全 | 天天操天天干天天操天天干 | 久久精品综合网 | 热99在线| 国产一二区免费视频 | 欧美日韩国产免费视频 | 日韩视频在线一区 | 久久影视精品 | 玖玖爱在线观看 | 日韩免费b | 日韩1页 | 日韩av一区二区在线影视 | www.国产在线| 国产中文字幕在线播放 | 午夜精品一区二区三区在线播放 | 久久精品超碰 | aaa日本高清在线播放免费观看 | 色网免费观看 | 欧美另类人妖 | 久久av一区二区三区亚洲 | 日韩av偷拍 | 亚洲欧洲日韩 | 激情综合五月天 | 欧美日韩在线免费观看视频 | 91视频一8mav| 国产精品成人国产乱一区 | 精品美女在线观看 | 亚洲a色| av大片免费在线观看 | 久久精品免费 | 免费视频黄| 久久精品99国产精品日本 | 天天操操 | 夜色资源网 | 亚洲一本视频 | av大全在线| 欧美aa一级 | 成人免费观看网址 | av在线专区 | 国产精品免费久久久久影院仙踪林 | 亚洲精品国精品久久99热一 | 一区二区三区四区久久 | 国产中文在线观看 | 天天干夜夜夜 | 在线免费日韩 | 欧美日韩高清一区二区 国产亚洲免费看 | 久久视频一区二区 | 在线看免费 | 中文字幕精品一区二区三区电影 | 激情在线五月天 | www五月天 | 久久久香蕉视频 | 亚洲综合最新在线 | 国内丰满少妇猛烈精品播 | 亚洲综合五月 | 永久免费av在线播放 | 9i看片成人免费看片 | 91自拍视频在线 | 国产亚洲婷婷免费 | 亚洲精品午夜视频 | 丁香花在线观看免费完整版视频 | 中文字幕在线高清 | 国产男女无遮挡猛进猛出在线观看 | 91天堂影院 | a黄色一级 | 日韩免费成人av | 久久久久国产精品免费 | 日韩av电影中文字幕在线观看 | 久久精彩 | 欧美专区国产专区 | 欧美99久久| 视频二区在线视频 | 欧美精品网站 | av在线亚洲天堂 | av电影一区二区三区 | 精品国产精品一区二区夜夜嗨 | 国产资源在线观看 | 日韩中文字幕网站 | 久久免费视频6 | 国产xx视频| 国产中文字幕一区二区 | 亚洲精品美女久久久久网站 | 91福利专区| 国产精品99久久久精品 | 成人一级免费视频 | 久久久免费播放 | 久草久草在线观看 | 91精品视频免费看 | 亚洲aⅴ乱码精品成人区 | 日韩欧美在线观看一区 | 久久av免费观看 | 亚洲国产中文字幕在线视频综合 | 久久歪歪 | 中文字幕国产一区二区 | 久久精品a | 婷婷六月天综合 | 欧美一级高清片 | 国产精品观看视频 | 久久视频在线 | 天天干夜夜 | 亚洲成av| 国产高清久久久久 | 手机看片 | 亚洲欧美视频在线观看 | 探花视频免费观看高清视频 | 日韩视频免费观看高清 | 精品一区二区免费在线观看 | 四虎影视www | 成人免费观看大片 | 天天干天天操天天干 | 日韩精品视频在线观看网址 | 特级片免费看 | 99欧美 | 激情在线免费视频 | 天天摸天天操天天爽 | 午夜国产一区二区 | 欧美伊人网 | 日韩在线视频看看 | 国产精品久久久久久久久久久久午夜 | 日韩高清精品免费观看 | 天天躁天天狠天天透 | 国产精品免费视频观看 | 99视频精品全部免费 在线 | 国产一区二区精品91 | 国产在线一线 | 日韩视频一区二区三区在线播放免费观看 | 国产韩国精品一区二区三区 | 亚洲精品国偷自产在线99热 | a级国产乱理伦片在线观看 亚洲3级 | 国产香蕉97碰碰碰视频在线观看 | 91av电影在线观看 | 欧美久草网 | 91视频国产高清 | 国内精品久久久久久久久久久久 | 欧美日韩免费一区二区 | 日本久久久精品视频 | 最近中文字幕久久 | 超碰97国产精品人人cao | 日韩成人欧美 | 欧美成人精品欧美一级乱 | 婷婷色网视频在线播放 | 97爱爱爱 | 中文字幕久久精品一区 | 中午字幕在线 | 日本公妇在线观看高清 | 国产成人专区 | 久久亚洲精品国产亚洲老地址 | 一区二区欧美激情 | 午夜精品福利在线 | 亚洲精品视频网站在线观看 | 久草资源免费 | 99精品免费久久久久久久久日本 | 中文字幕专区高清在线观看 | 免费在线观看亚洲视频 | 成人黄色免费在线观看 | 天天曰视频| 色婷婷视频在线 | 在线免费黄色av | 国产一级片播放 | 久久91久久久久麻豆精品 | 又色又爽又黄高潮的免费视频 | 日韩av片在线 | 草莓视频在线观看免费观看 | av激情五月 | 国产精品乱码高清在线看 | av黄色影院 | 五月天六月色 | 免费日韩 精品中文字幕视频在线 | 视频国产在线观看18 | 午夜久久福利影院 | 欧美久久久久久 | 成人免费视频网站 | 亚洲国产成人av网 | 国产精品久久久久久久av大片 | 久久久久久综合网天天 | 欧美一级久久久久 | 天天撸夜夜操 | 国产麻豆精品一区 | 欧美日韩色婷婷 | 亚洲 欧美 另类人妖 | 亚洲国产日韩av | 亚洲精品tv久久久久久久久久 | 成人小视频免费在线观看 | 欧美日韩国产一区 | 六月丁香激情综合色啪小说 | 日本成人中文字幕在线观看 | 日韩精品资源 | 日韩精品在线免费播放 | 97成人在线观看视频 | 亚洲最新av在线网站 | 婷婷色 亚洲 | 久久久久久久久网站 | 精品一区二区av | 亚洲成人影音 | 久久99精品热在线观看 | 国产日韩欧美在线看 | 亚洲美女视频在线 | www黄色com | 在线观看亚洲免费视频 | 色婷婷97 | 亚洲在线精品 | 欧美极度另类 | 91久久国产综合精品女同国语 | 干干操操| 黄色毛片在线观看 | av电影在线免费 | 欧美日韩精品久久久 | 狠狠操综合 | 伊色综合久久之综合久久 | 国产美女在线精品免费观看 | 97香蕉久久超级碰碰高清版 | 国产 亚洲 欧美 在线 | 日韩理论电影网 | 人人插人人搞 | 国产人成精品一区二区三 | 国产精品久久亚洲 | 国产香蕉久久精品综合网 | 国产精品久久一卡二卡 | 午夜精品久久久 | 中文日韩在线视频 | 色网免费观看 | 亚洲成a人片在线观看网站口工 | 婷婷射五月 | 午夜视频免费在线观看 | 国产 在线观看 | 天天爱综合| 日日夜夜综合网 | 日韩欧美专区 | 国产伦精品一区二区三区照片91 | 亚洲狠狠婷婷 | 精品国产一区二区三区四区在线观看 | 国产精品福利一区 | 国产99久久精品 | 99精品久久精品一区二区 | 国产精品www| 正在播放五月婷婷狠狠干 | 国产精品白丝jk白祙 | 国产精品亚洲人在线观看 | 国产又黄又爽无遮挡 | 97精品超碰一区二区三区 | 日本三级在线观看中文字 | 亚洲另类视频在线 | 久久国产高清视频 | 午夜精品av | 最新日本中文字幕 | 免费大片黄在线 | 超碰人人在线观看 | 最新中文在线视频 | 中文字幕九九 | 91chinese在线| 玖玖玖在线观看 | 亚洲精品中文字幕在线 | 久草亚洲视频 | 中文字幕日韩免费视频 | 亚洲成人免费在线观看 | 日韩亚洲在线视频 | 黄色亚洲在线 | 国产精品成人av电影 | 精品a级片 | 九九精品视频在线看 | 国产精彩视频一区二区 | 国产一区二区三区黄 | 午夜精品久久久久久久99水蜜桃 | 丁香网五月天 | 不卡日韩av | 国产精品欧美久久久久三级 | 国产短视频在线播放 | 亚洲国产成人在线播放 | 欧女人精69xxxxxx| 亚洲国产精品成人va在线观看 | 狠狠躁夜夜a产精品视频 | 久久久久网址 | 国产小视频在线观看免费 | 亚洲国产中文字幕 | 色偷偷av男人天堂 | 亚州视频在线 | 亚洲欧美日韩精品久久奇米一区 | 日韩美视频| 日韩极品在线 | 又长又大又黑又粗欧美 | 国产视频69 | 99c视频高清免费观看 | 99在线热播 | 水蜜桃亚洲一二三四在线 | 色婷婷久久 | 欧美一级片| 狠狠网站 | 国产精品久久久久久久久久久杏吧 | 久久婷婷国产色一区二区三区 | 九色最新网址 | 中文字幕在线观看免费观看 | 亚洲激情在线播放 | 在线免费观看国产视频 | 天天操天天爽天天干 | 精品国产一区二区三区在线观看 | 91视频com | 久久综合中文色婷婷 | 亚洲国产69| 手机在线看a | 超碰人人91 | av一区二区三区在线 | 亚洲免费av观看 | 日本在线观看一区二区三区 | 97超碰人人澡人人爱学生 | 久久国产影院 | 久久免费视屏 | 天堂av免费观看 | www久久久| 四虎永久免费在线观看 | www.888.av| 久久久亚洲电影 | 久久九精品 | 天天av综合网 | 久久成人高清 | 成人亚洲精品国产www | 日韩欧美视频一区二区三区 | 国产小视频福利在线 | 在线免费观看国产视频 | 国产一区精品在线 | 在线免费观看国产视频 | 亚洲国产精品视频在线观看 | 免费国产ww| 国产精品成人免费精品自在线观看 | 精品国产一区二区三区久久久蜜臀 | 国产高清不卡一区二区三区 | 最近中文字幕视频网 | 麻豆系列在线观看 | 永久免费精品视频网站 | 九九在线精品视频 | 色婷婷www| 日韩在线视频线视频免费网站 | 国产精品入口66mio女同 | 免费久久99精品国产婷婷六月 | 超碰免费久久 | 免费 在线 中文 日本 | a视频免费看 | 综合网成人 | 国产精品一区二区久久精品 | 欧美xxxxx在线视频 | 精品久久国产精品 | 五月花婷婷 | 五月香婷 | 91免费高清观看 | 伊人狠狠 | 99久久99久久综合 | 国产成人精品电影久久久 | 中文字幕在线播出 | 91精品国产乱码在线观看 | 色爱区综合激月婷婷 | 国产色久 | 午夜精品麻豆 | 欧美日韩一区二区三区视频 | 丁香激情五月婷婷 | 五月婷婷综合激情 | 综合网天天射 | 在线免费黄色毛片 | 亚洲韩国一区二区三区 | 国产日本亚洲高清 | 成人黄色一级视频 | 在线观看欧美成人 | 色婷婷狠狠五月综合天色拍 | 国产专区在线看 | 久久免费在线观看视频 | 在线色吧 | 精品99999 | 日韩视频a| 日韩在线观看影院 | 在线午夜电影神马影院 | 国产精品18久久久久久不卡孕妇 | 成 人 黄 色视频免费播放 | 国产精品一区二区无线 | 久久精品久久久久电影 | 国产一区二区高清 | 亚洲资源片 | 偷拍精偷拍精品欧洲亚洲网站 | 日韩一区二区三区在线观看 | 亚洲精品国产精品国 | 日韩av午夜| 国产色网站 | 97超视频| 一区精品久久 | 久久免费视频8 | www.久久91| 91综合视频在线观看 | 日日夜夜精品免费视频 | 超碰人人在线 | 在线综合 亚洲 欧美在线视频 | 很黄很污的视频网站 | 丁香激情五月 | 欧美综合在线观看 | 99国产精品免费网站 | 99精品国产99久久久久久福利 | 色视频在线看 | 超碰av在线免费观看 | 国产乱视频 | 国产美女在线免费观看 | 亚洲国产欧美一区二区三区丁香婷 | 国产福利网站 | 日本性久久 | 国内精品久久久久久久久久 | 国产男女免费完整视频 | 在线亚洲人成电影网站色www | 99精品热视频只有精品10 | 中文字幕一二三区 | 久久国产精品成人免费浪潮 | 国产精品自产拍在线观看网站 | 日韩激情视频 | 午夜美女网站 | 国内视频在线观看 | 久久99在线 | 久久er99热精品一区二区三区 | 国产成人精品电影久久久 | 久久亚洲综合国产精品99麻豆的功能介绍 | 亚洲一区久久久 | 欧美精品小视频 | 亚洲精品视频在线播放 | 色五月情| 91人网站| 成人动漫视频在线 | 免费福利在线 | 久久免费在线观看视频 | 日本精品va在线观看 | 亚洲黄色免费在线看 | 欧美日韩网站 | 开心激情综合网 | 日女人电影 | 在线免费观看的av网站 | 亚洲精品视频在线播放 | 久久精品站 | 国产精品欧美日韩在线观看 | 国产视频亚洲视频 | 亚洲色视频 | 97人人精品 | 久久久这里有精品 | 亚洲国产精品va在线看黑人动漫 | 国产青草视频在线观看 | 日韩精品久久久 | 波多野结衣动态图 | 日本深夜福利视频 | 国产中文字幕在线免费观看 | 欧美日韩久久久 | 伊人久久国产精品 | 中文字幕黄色 | 日韩精品在线观看av | 久久免费视频在线观看 | 亚洲一本视频 | 久久精品亚洲一区二区三区观看模式 | 五月综合婷 | 九九免费观看全部免费视频 | 337p日本欧洲亚洲大胆裸体艺术 | 亚洲精品免费在线观看视频 | 天堂网一区 | 麻豆你懂的 | 欧美一级片免费 | 丁香婷婷综合五月 | 久久99精品久久久久久清纯直播 | 亚洲动漫在线观看 | 99成人免费视频 | 一区二区三区www | 天堂在线v | 2020天天干夜夜爽 | 亚洲国产精品传媒在线观看 | 91亚·色 | 午夜精品久久久久久久99无限制 | 国产精品免费久久久 | 97色资源| 亚洲97在线| 91视频久久久久 | 奇米影音四色 | 97色婷婷成人综合在线观看 | 国产乱老熟视频网88av | 国产午夜三级一区二区三 | 91精品视频免费观看 | 日本福利视频在线 | 国产午夜免费视频 | 日韩91在线 | 99精品视频一区二区 | 99久高清在线观看视频99精品热在线观看视频 | 在线电影a | 亚洲一二三在线 | 亚洲欧洲日韩 | 国产免费一区二区三区网站免费 | 国产成人精品区 | 国产99爱 | 亚洲 中文 欧美 日韩vr 在线 | 日韩欧美精品在线观看视频 | 一区二区三区免费在线观看 | 国产人成精品一区二区三 | 99在线观看免费视频精品观看 | 99久久www| 成人在线免费看视频 | 亚洲日韩中文字幕 | 婷婷亚洲五月色综合 | 久久久免费视频播放 | 91av欧美 | 亚洲欧美日韩国产一区二区三区 | 欧美亚洲国产精品久久高清浪潮 | 亚洲综合视频在线观看 | 欧美va在线观看 | 欧美一区二区伦理片 | 91福利视频免费 | 日本黄色黄网站 | 欧美黑吊大战白妞欧美 | 九九热免费视频在线观看 | 久久国内精品99久久6app | 亚洲成人资源在线观看 | 成人蜜桃视频 | 日本在线观看中文字幕 | 久久精品资源 | 免费黄色激情视频 | av一区在线播放 | 国产精品久久99综合免费观看尤物 | 美女久久久久久久久久 | 久久99国产综合精品 | 国产美女精品视频免费观看 | 精品一区二区三区久久久 | 五月婷婷综合久久 | 免费av一级电影 | 国产色视频123区 | 最近2019好看的中文字幕免费 | 夜夜躁日日躁狠狠久久av | 天天操天天操天天 | 国产精品一区久久久久 | 亚洲天堂色婷婷 | 午夜视频在线瓜伦 | 伊人五月天av | 免费成人黄色片 | 久久久黄色免费网站 | 久热av | 国产精品久久久久久久久久久久午夜片 | a色视频 | 久久夜靖品| 99福利片 | 五月花丁香婷婷 | 久久国产三级 | 国产精品久久久久一区 | 欧美日韩性视频 | 特级毛片网站 | 国产污视频在线观看 | 日韩天堂在线观看 | 久久艹艹| 亚洲九九 | 国产精品久久久久久一二三四五 | 亚洲午夜在线视频 | 国产精品福利在线观看 | 欧美亚洲另类在线视频 | www黄| 综合网久久 | 国产精品午夜av | 久草视频在线观 | 麻豆视传媒官网免费观看 | 人人射人人爱 | 国产真实精品久久二三区 | 国产精品免费久久久久久久久久中文 | 国产精品第三页 | 狠狠操欧美 | 中文字幕日本电影 | 亚洲精品美女久久 | 91大神精品视频在线观看 | 九九九在线观看视频 | 麻豆传媒视频观看 | 久久久久久高清 | 亚洲乱码在线 | 亚洲无吗天堂 | 日本中文字幕网站 | 精品福利在线观看 | 久久精品福利 | 国产超碰97 | 天天操狠狠操夜夜操 | 亚州精品天堂中文字幕 | 97超碰人人看| 久久综合五月婷婷 | 欧美午夜精品久久久久久浪潮 | 亚洲高清av在线 | 国产免费观看高清完整版 | 国产综合激情 | 日韩 在线 | 久久婷婷视频 | 在线不卡视频 | 亚洲综合涩| 五月天综合网站 | 精品一区二区久久久久久久网站 | 国产无套精品久久久久久 | 亚洲一区网 | 日本性xxx|