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

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

?? serial.h

?? serial communication (cseral class with handshaking control)
?? H
字號(hào):
//	Serial.h - Definition of the CSerial class
//
//	Copyright (C) 1999-2002 Ramon de Klein (R.de.Klein@iaf.nl)
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.


#ifndef __SERIAL_H
#define __SERIAL_H


//////////////////////////////////////////////////////////////////////
//
// CSerial - Win32 wrapper for serial communications
//
// Serial communication often causes a lot of problems. This class
// tries to supply an easy to use interface to deal with serial
// devices.
//
// The class is actually pretty ease to use. You only need to open
// the COM-port, where you need to specify the basic serial
// communication parameters. You can also choose to setup handshaking
// and read timeout behaviour.
//
// The following serial classes are available:
//
// CSerial      - Serial communication support.
// CSerialEx    - Serial communication with listener thread for events
// CSerialSync  - Serial communication with synchronized event handler
// CSerialWnd   - Asynchronous serial support, which uses the Win32
//                message queue for event notification.
// CSerialMFC   - Preferred class to use in MFC-based GUI windows.
// 
//
// Pros:
// -----
//	- Easy to use (hides a lot of nasty Win32 stuff)
//	- Fully ANSI and Unicode aware
//
// Cons:
// -----
//  - Little less flexibility then native Win32 API, however you can
//    use this API at the same time for features which are missing
//    from this class.
//  - Incompatible with Windows 95 or Windows NT v3.51 (or earlier),
//    because CancelIo isn't support on these platforms. Define the
//	  SERIAL_NO_CANCELIO macro for support of these platforms as
//	  well. When this macro is defined, then only time-out values of
//	  0 or INFINITE are valid.
//
//
// Copyright (C) 1999-2002 Ramon de Klein
//                         (R.de.Klein@iaf.nl)

class CSerial
{
// Class enumerations
public:
	// Communication event
	typedef enum
	{
		EEventUnknown  	   = -1,			// Unknown event
		EEventNone  	   = 0,				// Event trigged without cause
		EEventBreak 	   = EV_BREAK,		// A break was detected on input
		EEventCTS   	   = EV_CTS,		// The CTS signal changed state
		EEventDSR   	   = EV_DSR,		// The DSR signal changed state
		EEventError 	   = EV_ERR,		// A line-status error occurred
		EEventRing  	   = EV_RING,		// A ring indicator was detected
		EEventRLSD  	   = EV_RLSD,		// The RLSD signal changed state
		EEventRecv  	   = EV_RXCHAR,		// Data is received on input
		EEventRcvEv 	   = EV_RXFLAG,		// Event character was received on input
		EEventSend		   = EV_TXEMPTY,	// Last character on output was sent
		EEventPrinterError = EV_PERR,		// Printer error occured
		EEventRx80Full	   = EV_RX80FULL,	// Receive buffer is 80 percent full
		EEventProviderEvt1 = EV_EVENT1,		// Provider specific event 1
		EEventProviderEvt2 = EV_EVENT2,		// Provider specific event 2
	} 
	EEvent;

	// Baudrate
	typedef enum
	{
		EBaudUnknown = -1,			// Unknown
		EBaud110     = CBR_110,		// 110 bits/sec
		EBaud300     = CBR_300,		// 300 bits/sec
		EBaud600     = CBR_600,		// 600 bits/sec
		EBaud1200    = CBR_1200,	// 1200 bits/sec
		EBaud2400    = CBR_2400,	// 2400 bits/sec
		EBaud4800    = CBR_4800,	// 4800 bits/sec
		EBaud9600    = CBR_9600,	// 9600 bits/sec
		EBaud14400   = CBR_14400,	// 14400 bits/sec
		EBaud19200   = CBR_19200,	// 19200 bits/sec (default)
		EBaud38400   = CBR_38400,	// 38400 bits/sec
		EBaud56000   = CBR_56000,	// 56000 bits/sec
		EBaud57600   = CBR_57600,	// 57600 bits/sec
		EBaud115200  = CBR_115200,	// 115200 bits/sec
		EBaud128000  = CBR_128000,	// 128000 bits/sec
		EBaud256000  = CBR_256000,	// 256000 bits/sec
		EBaudUserDef = 0,			// 'User defined'
	}
	EBaudrate;

	// Data bits (5-8)
	typedef enum
	{
		EDataUnknown = -1,			// Unknown
		EData5       =  5,			// 5 bits per byte
		EData6       =  6,			// 6 bits per byte
		EData7       =  7,			// 7 bits per byte
		EData8       =  8			// 8 bits per byte (default)
	}
	EDataBits;

	// Parity scheme
	typedef enum
	{
		EParUnknown = -1,			// Unknown
		EParNone    = NOPARITY,		// No parity (default)
		EParOdd     = ODDPARITY,	// Odd parity
		EParEven    = EVENPARITY,	// Even parity
		EParMark    = MARKPARITY,	// Mark parity
		EParSpace   = SPACEPARITY	// Space parity
	}
	EParity;

	// Stop bits
	typedef enum
	{
		EStopUnknown = -1,			// Unknown
		EStop1       = ONESTOPBIT,	// 1 stopbit (default)
		EStop1_5     = ONE5STOPBITS,// 1.5 stopbit
		EStop2       = TWOSTOPBITS	// 2 stopbits
	} 
	EStopBits;

	// Handshaking
	typedef enum
	{
		EHandshakeUnknown		= -1,	// Unknown
		EHandshakeOff			=  0,	// No handshaking
		EHandshakeHardware		=  1,	// Hardware handshaking (RTS/CTS)
		EHandshakeSoftware		=  2	// Software handshaking (XON/XOFF)
	} 
	EHandshake;

	// Timeout settings
	typedef enum
	{
		EReadTimeoutUnknown		= -1,	// Unknown
		EReadTimeoutNonblocking	=  0,	// Always return immediately
		EReadTimeoutBlocking	=  1	// Block until everything is retrieved
	}
	EReadTimeout;

	// Communication errors
	typedef enum
	{
		EErrorUnknown = 0,			// Unknown
		EErrorBreak   = CE_BREAK,	// Break condition detected
		EErrorFrame   = CE_FRAME,	// Framing error
		EErrorIOE     = CE_IOE,		// I/O device error
		EErrorMode    = CE_MODE,	// Unsupported mode
		EErrorOverrun = CE_OVERRUN,	// Character buffer overrun, next byte is lost
		EErrorRxOver  = CE_RXOVER,	// Input buffer overflow, byte lost
		EErrorParity  = CE_RXPARITY,// Input parity error
		EErrorTxFull  = CE_TXFULL	// Output buffer full
	}
	EError;

	// Port availability
	typedef enum
	{
		EPortUnknownError = -1,		// Unknown error occurred
		EPortAvailable    =  0,		// Port is available
		EPortNotAvailable =  1,		// Port is not present
		EPortInUse        =  2		// Port is in use

	} 
	EPort;

// Construction
public:
	CSerial();
	virtual ~CSerial();

// Operations
public:
	// Check if particular COM-port is available (static method).
	static EPort CheckPort (LPCTSTR lpszDevice);

	// Open the serial communications for a particular COM port. You
	// need to use the full devicename (i.e. "COM1") to open the port.
	// It's possible to specify the size of the input/output queues.
	virtual LONG Open (LPCTSTR lpszDevice, DWORD dwInQueue = 0, DWORD dwOutQueue = 0);

	// Close the serial port.
	virtual LONG Close (void);

	// Setup the communication settings such as baudrate, databits,
	// parity and stopbits. The default settings are applied when the
	// device has been opened. Call this function if these settings do
	// not apply for your application. If you prefer to use integers
	// instead of the enumerated types then just cast the integer to
	// the required type. So the following two initializations are
	// equivalent:
	//
	//   Setup(EBaud9600,EData8,EParNone,EStop1)
	//
	// or
	//
	//   Setup(EBaudrate(9600),EDataBits(8),EParity(NOPARITY),EStopBits(ONESTOPBIT))
	//
	// In the latter case, the types are not validated. So make sure
	// that you specify the appropriate values.
	virtual LONG Setup (EBaudrate eBaudrate     = EBaud9600,
                        DWORD     userBaudrate  = 9600,
						EDataBits eDataBits     = EData8,
						EParity   eParity       = EParNone,
						EStopBits eStopBits     = EStop1);

	// Set/clear the event character. When this byte is being received
	// on the serial port then the EEventRcvEv event is signalled,
	// when the mask has been set appropriately. If the fAdjustMask flag
	// has been set, then the event mask is automatically adjusted.
	virtual LONG SetEventChar (BYTE bEventChar, bool fAdjustMask = true);

	// Set the event mask, which indicates what events should be
	// monitored. The WaitEvent method can only monitor events that
	// have been enabled. The default setting only monitors the
	// error events and data events. An application may choose to
	// monitor CTS. DSR, RLSD, etc as well.
	virtual LONG SetMask (DWORD dwMask = EEventBreak|EEventError|EEventRecv);

	// The WaitEvent method waits for one of the events that are
	// enabled (see SetMask).
	virtual LONG WaitEvent (LPOVERLAPPED lpOverlapped = 0, DWORD dwTimeout = INFINITE);

	// Setup the handshaking protocol. There are three forms of
	// handshaking:
	//
	// 1) No handshaking, so data is always send even if the receiver
	//    cannot handle the data anymore. This can lead to data loss,
	//    when the sender is able to transmit data faster then the
	//    receiver can handle.
	// 2) Hardware handshaking, where the RTS/CTS lines are used to
	//    indicate if data can be sent. This mode requires that both
	//    ports and the cable support hardware handshaking. Hardware
	//    handshaking is the most reliable and efficient form of
	//    handshaking available, but is hardware dependant.
	// 3) Software handshaking, where the XON/XOFF characters are used
	//    to throttle the data. A major drawback of this method is that
	//    these characters cannot be used for data anymore.
	virtual LONG SetupHandshaking (EHandshake eHandshake);

	// Read operations can be blocking or non-blocking. You can use
	// this method to setup wether to use blocking or non-blocking
	// reads. Non-blocking reads is the default, which is required
	// for most applications.
	//
	// 1) Blocking reads, which will cause the 'Read' method to block
	//    until the requested number of bytes have been read. This is
	//    useful if you know how many data you will receive.
	// 2) Non-blocking reads, which will read as many bytes into your
	//    buffer and returns almost immediately. This is often the
	//    preferred setting.
	virtual LONG SetupReadTimeouts (EReadTimeout eReadTimeout);

	// Obtain communication settings
    virtual bool       EnumeratedBaudrate(DWORD BaudRate);  // pomocna za GetBaudrate
	virtual EBaudrate  GetBaudrate    (DWORD& userBaudrate);
	virtual EDataBits  GetDataBits    (void);
	virtual EParity    GetParity      (void);
	virtual EStopBits  GetStopBits    (void);
	virtual EHandshake GetHandshaking (void);
	virtual DWORD      GetEventMask   (void);
	virtual BYTE       GetEventChar   (void);

    // Funkcija koja se koriste za procenu vremena prenosa podataka.
    // Konvertuje enumeracije u numericke tipove podataka pogodne
    // za sracunavanje vremena prenosa poruka.
    // Ako je neka enumeracija 'Unknown', funkcija uzima vrednost parametra
    // koja bi dala najduze vreme prenosa, ali vraca false.
    virtual bool GetSpeedSettings( DWORD& baudrate, BYTE& databits, 
                                   BYTE& paritybits, double& stopbits );

	// Write data to the serial port. Note that we are only able to
	// send ANSI strings, because it probably doesn't make sense to
	// transmit Unicode strings to an application.
	virtual LONG Write (const void* pData, size_t iLen, DWORD* pdwWritten = 0, LPOVERLAPPED lpOverlapped = 0, DWORD dwTimeout = INFINITE);
	virtual LONG Write (LPCSTR pString, DWORD* pdwWritten = 0, LPOVERLAPPED lpOverlapped = 0, DWORD dwTimeout = INFINITE);

	// Read data from the serial port. Refer to the description of
	// the 'SetupReadTimeouts' for an explanation about (non) blocking
	// reads and how to use this.
	virtual LONG Read (void* pData, size_t iLen, DWORD* pdwRead = 0, LPOVERLAPPED lpOverlapped = 0, DWORD dwTimeout = INFINITE);

	// Send a break
	LONG Break (void);

	// Determine what caused the event to trigger
	EEvent GetEventType (void);

	// Obtain the error
	EError GetError (void);

	// Obtain the COMM and event handle
	HANDLE GetCommHandle (void)		{ return m_hFile; }

	// Check if com-port is opened
	bool IsOpen (void) const		{ return (m_hFile != 0); }

	// Obtain last error status
	LONG GetLastError (void) const	{ return m_lLastError; }

	// Obtain CTS/DSR/RING/RLSD settings
	bool GetCTS (void);
	bool GetDSR (void);
	bool GetRing (void);
	bool GetRLSD (void);

	// Purge all buffers
	LONG Purge (void);

    // Razne RS232 funkcije koje su naknadno dodate u klasu
    void TransmitChar(char cChar);
    void Escape(DWORD dwFunc);
    void ClearDTR(void);
    void ClearRTS(void);
    void SetDTR(void);
    void SetRTS(void);
    void SetXOFF(void);
    void SetXON(void);
    void ClearBreak(void);
    void SetBreak(void);

protected:
	// Internal helper class which wraps DCB structure
	class CDCB : public DCB
	{
	public:
		CDCB() { DCBlength = sizeof(DCB); }
	};

// Attributes
protected:
	LONG	m_lLastError;		// Last serial error
	HANDLE	m_hFile;			// File handle
	EEvent	m_eEvent;			// Event type
	DWORD	m_dwEventMask;		// Event mask
	HANDLE	m_hevtOverlapped;	// Event handle for internal overlapped operations

// CancelIo wrapper (for Win95 compatibility)
protected:

#ifdef SERIAL_NO_CANCELIO
	// Windows 95 support needs a wrapper
	void CheckTimeout (DWORD dwTimeout);
	BOOL CancelIo (void);
#else
	// No Windows 95 support means, simply forwarding the call
	void CheckTimeout (DWORD /*dwTimeout*/)		{}
	BOOL CancelIo (void)						{ return ::CancelIo(m_hFile); }
#endif	// SERIAL_NO_CANCELIO
};

#endif	// __SERIAL_H

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧洲在线观看av| 国产成人免费在线视频| 欧美一区二区不卡视频| 免费av成人在线| 国产日韩欧美综合在线| 欧美做爰猛烈大尺度电影无法无天| 偷偷要91色婷婷| 国产嫩草影院久久久久| 中文字幕成人av| 日韩视频123| 91农村精品一区二区在线| 亚洲h精品动漫在线观看| 久久久久久99久久久精品网站| aaa欧美色吧激情视频| 蜜桃精品视频在线| 亚洲精品国久久99热| 精品国产乱码久久久久久影片| 色哟哟国产精品| 国产在线播精品第三| 一区二区三区精品在线观看| 久久久www免费人成精品| 国产亚洲一本大道中文在线| 538在线一区二区精品国产| 国产麻豆精品久久一二三| 国产精品一区二区你懂的| 日本不卡1234视频| 九九九精品视频| 午夜精品久久久久久久蜜桃app| 日韩国产欧美三级| 亚洲国产成人高清精品| 亚洲欧美激情在线| 亚洲欧洲日本在线| 亚洲成人你懂的| 国产一区二区按摩在线观看| 成人av网址在线| 国产成人精品三级麻豆| 91福利在线导航| 91农村精品一区二区在线| 欧美精品一级二级| 欧美亚洲国产一卡| 欧美在线999| 欧美大片一区二区三区| 欧美一区二区视频在线观看| 国产亚洲精品久| 亚洲国产精品久久久男人的天堂| 精品一区二区三区日韩| 91啪在线观看| 亚洲精品一线二线三线| 亚洲欧美日韩电影| 极品尤物av久久免费看| 一本久久a久久精品亚洲| 91.成人天堂一区| 国产精品久久免费看| 亚洲国产精品v| 偷拍一区二区三区四区| 高清av一区二区| 国产成人精品免费网站| 欧美探花视频资源| 中文字幕av不卡| 天天色综合天天| 成人av免费在线观看| 日韩午夜在线观看| 亚洲精品国产精品乱码不99 | 国产精品一区二区x88av| 在线观看亚洲专区| 国产精品无码永久免费888| 成人免费在线视频观看| 老司机免费视频一区二区| 国产一区美女在线| 欧美美女一区二区| 亚洲精品国产一区二区精华液 | 欧美岛国在线观看| 亚洲在线视频网站| 日韩精品一级二级 | 狠狠v欧美v日韩v亚洲ⅴ| 久久精品噜噜噜成人av农村| 色婷婷精品大在线视频| 国产精品―色哟哟| 国产一区二区女| 日韩免费高清视频| 热久久免费视频| 欧美日韩你懂的| 欧美大黄免费观看| 亚洲国产精品影院| 99久久精品免费| 91精品综合久久久久久| 亚洲精品视频在线观看网站| 国产91在线观看丝袜| 精品美女在线观看| 亚洲精品乱码久久久久久久久| 国产精品18久久久久久久久| 日韩视频免费直播| 青青草国产精品亚洲专区无| 欧美日韩精品三区| 国产免费成人在线视频| 国产伦精品一区二区三区在线观看 | 白白色亚洲国产精品| 国产欧美日韩卡一| 懂色av中文字幕一区二区三区| 2024国产精品| 亚洲图片欧美色图| 欧美影院午夜播放| 亚洲一区二区av电影| 欧美午夜视频网站| 亚洲一区视频在线| 精品视频1区2区| 亚洲美女在线一区| 欧美亚洲一区三区| 性做久久久久久免费观看| 欧美日韩国产一级| 免费久久99精品国产| 欧美成人video| 国产精品一区二区果冻传媒| 国产三级精品三级| av午夜一区麻豆| 一区二区三区中文在线观看| 欧美在线视频你懂得| 午夜电影一区二区三区| 日韩视频中午一区| 国产乱码字幕精品高清av| 国产精品视频一二三区| a亚洲天堂av| 亚洲一二三区不卡| 欧美一区二区三区不卡| 国产一区二区三区观看| 国产精品久久久久aaaa樱花| 欧美自拍偷拍午夜视频| 日本视频一区二区| 久久久青草青青国产亚洲免观| 成人18精品视频| 亚洲第一二三四区| 精品国产免费久久| 91亚洲国产成人精品一区二三 | 成人福利在线看| 亚洲一区二区av在线| 欧美不卡激情三级在线观看| 成人免费视频播放| 久久久国产午夜精品| av一区二区久久| 午夜伊人狠狠久久| 国产三级精品视频| 欧美在线免费视屏| 国产毛片一区二区| 一区二区三区不卡视频在线观看| 欧美精品久久一区| 风间由美性色一区二区三区| 一区二区三区不卡视频在线观看| 日韩免费看网站| 99re免费视频精品全部| 男人的天堂亚洲一区| 国产精品久久毛片av大全日韩| 欧美精品久久久久久久久老牛影院| 久久av中文字幕片| 一区二区三区四区五区视频在线观看 | 成人黄色免费短视频| 亚洲电影第三页| 欧美国产日韩亚洲一区| 欧美日韩一级二级| 成人黄色在线网站| 美女视频第一区二区三区免费观看网站| 国产午夜久久久久| 欧美一区二区三区思思人| 成人avav影音| 麻豆一区二区三| 一卡二卡三卡日韩欧美| 国产日韩欧美a| 日韩欧美国产麻豆| 欧美综合欧美视频| 成人高清视频在线观看| 韩国女主播一区二区三区| 视频一区视频二区中文字幕| 亚洲三级电影网站| 欧美日韩一级片网站| 不卡的av网站| 国产一区二区三区久久久| 亚洲一区二区三区在线| 日本一区二区久久| 日韩视频在线观看一区二区| 欧美午夜精品理论片a级按摩| 不卡的电影网站| 国产精品亚洲а∨天堂免在线| 日韩电影在线看| 又紧又大又爽精品一区二区| 国产精品高清亚洲| 久久久久久日产精品| 日韩欧美激情四射| 欧美日韩国产bt| 欧美亚洲国产一卡| 91福利在线观看| 在线免费一区三区| 色综合天天狠狠| 91在线porny国产在线看| 成人午夜激情视频| 东方aⅴ免费观看久久av| 国产一区不卡精品| 国产精品538一区二区在线| 国产在线视频精品一区| 狠狠色丁香婷综合久久| 国产综合色在线| 国产激情91久久精品导航|