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

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

?? commbase.cs

?? 用C#語言編寫
?? CS
?? 第 1 頁 / 共 4 頁
字號:
				//JH 1.1: Avoid use of GetHandleInformation for W98 compatability.
				if (hPort != (System.IntPtr)Win32Com.INVALID_HANDLE_VALUE) return true;
				ThrowException("Offline");
				return false;
			}
			else
			{
				if (auto) 
				{
					if (Open()) return true;
				}
				ThrowException("Offline");
				return false;
			}
		}

	}

	/// <summary>
	/// Overlays CommBase to provide line or packet oriented communications to derived classes. Strings
	/// are sent and received and the Transact method is added which transmits a string and then blocks until
	/// a reply string has been received (subject to a timeout).
	/// </summary>
	public abstract class CommLine : CommBase {
		private byte[] RxBuffer;
		private uint RxBufferP = 0;
		private ASCII RxTerm;
		private ASCII[] TxTerm;
		private ASCII[] RxFilter;
		private string RxString = "";
		private ManualResetEvent TransFlag = new ManualResetEvent(true);
		private uint TransTimeout;

		/// <summary>
		/// Extends CommBaseSettings to add the settings used by CommLine.
		/// </summary>
		public class CommLineSettings : CommBase.CommBaseSettings 
		{
			/// <summary>
			/// Maximum size of received string (default: 256)
			/// </summary>
			public int rxStringBufferSize = 256;
			/// <summary>
			/// ASCII code that terminates a received string (default: CR)
			/// </summary>
			public ASCII rxTerminator = ASCII.CR;
			/// <summary>
			/// ASCII codes that will be ignored in received string (default: null)
			/// </summary>
			public ASCII[] rxFilter;
			/// <summary>
			/// Maximum time (ms) for the Transact method to complete (default: 500)
			/// </summary>
			public int transactTimeout = 500;
			/// <summary>
			/// ASCII codes transmitted after each Send string (default: null)
			/// </summary>
			public ASCII[] txTerminator;

			public static new CommLineSettings LoadFromXML(Stream s)
			{
				return (CommLineSettings)LoadFromXML(s, typeof(CommLineSettings));
			}
		}
	
		/// <summary>
		/// Queue the ASCII representation of a string and then the set terminator bytes for sending.
		/// </summary>
		/// <param name="toSend">String to be sent.</param>
		protected void Send(string toSend) 
		{
			//JH 1.1: Use static encoder for efficiency. Thanks to Prof. Dr. Peter Jesorsky!
			uint l = (uint)Encoding.ASCII.GetByteCount(toSend);
			if (TxTerm != null) l += (uint)TxTerm.GetLength(0);
			byte[] b = new byte[l];
			byte[] s = Encoding.ASCII.GetBytes(toSend);
			int i;
			for (i = 0; (i <= s.GetUpperBound(0)); i++) b[i] = s[i];
			if (TxTerm != null) for (int j = 0; (j <= TxTerm.GetUpperBound(0)); j++, i++) b[i] = (byte)TxTerm[j];
			Send(b);
		}

		/// <summary>
		/// Transmits the ASCII representation of a string followed by the set terminator bytes and then
		/// awaits a response string.
		/// </summary>
		/// <param name="toSend">The string to be sent.</param>
		/// <returns>The response string.</returns>
		protected string Transact(string toSend) {
			Send(toSend);
			TransFlag.Reset();
			if (!TransFlag.WaitOne((int)TransTimeout, false)) ThrowException("Timeout");
			string s;
			lock(RxString) {s = RxString;}
			return s;
		}
		
		/// <summary>
		/// If a derived class overrides ComSettings(), it must call this prior to returning the settings to
		/// the base class.
		/// </summary>
		/// <param name="s">Class containing the appropriate settings.</param>
		protected void Setup(CommLineSettings s) {
			RxBuffer = new byte[s.rxStringBufferSize];
			RxTerm = s.rxTerminator;
			RxFilter = s.rxFilter;
			TransTimeout = (uint)s.transactTimeout;
			TxTerm = s.txTerminator;
		}

		/// <summary>
		/// Override this to process unsolicited input lines (not a result of Transact).
		/// </summary>
		/// <param name="s">String containing the received ASCII text.</param>
		protected virtual void OnRxLine(string s) {}

		protected override void OnRxChar(byte ch) {
			ASCII ca = (ASCII)ch;
			if ((ca == RxTerm) || (RxBufferP > RxBuffer.GetUpperBound(0))) {
				//JH 1.1: Use static encoder for efficiency. Thanks to Prof. Dr. Peter Jesorsky!
				lock(RxString) {RxString = Encoding.ASCII.GetString(RxBuffer, 0, (int)RxBufferP);}
				RxBufferP = 0;
				if (TransFlag.WaitOne(0,false)) {
					OnRxLine(RxString);
				} else {
					TransFlag.Set();
				}
			} else {
				bool wr = true;
				if (RxFilter != null) {
					for (int i=0; i <= RxFilter.GetUpperBound(0); i++) if (RxFilter[i] == ca) wr = false;
				}
				if (wr) {
					RxBuffer[RxBufferP] = ch;
					RxBufferP++;
				}
			}
		}
	}

	/// <summary>
	/// Exception used for all errors.
	/// </summary>
	public class CommPortException : ApplicationException
	{
		/// <summary>
		/// Constructor for raising direct exceptions
		/// </summary>
		/// <param name="desc">Description of error</param>
		public CommPortException(string desc) : base(desc) {}

		/// <summary>
		/// Constructor for re-raising exceptions from receive thread
		/// </summary>
		/// <param name="e">Inner exception raised on receive thread</param>
		public CommPortException(Exception e) : base("Receive Thread Exception", e) {}
	}

	internal class Win32Com {

		/// <summary>
		/// Opening Testing and Closing the Port Handle.
		/// </summary>
		[DllImport("kernel32.dll", SetLastError=true)]
		internal static extern IntPtr CreateFile(String lpFileName, UInt32 dwDesiredAccess, UInt32 dwShareMode,
			IntPtr lpSecurityAttributes, UInt32 dwCreationDisposition, UInt32 dwFlagsAndAttributes,
			IntPtr hTemplateFile);

		//Constants for errors:
			internal const UInt32 ERROR_FILE_NOT_FOUND = 2;
			internal const UInt32 ERROR_INVALID_NAME = 123;
			internal const UInt32 ERROR_ACCESS_DENIED = 5;
			internal const UInt32 ERROR_IO_PENDING = 997;
			internal const UInt32 ERROR_IO_INCOMPLETE = 996;

		//Constants for return value:
			internal const Int32 INVALID_HANDLE_VALUE = -1;

		//Constants for dwFlagsAndAttributes:
			internal const UInt32 FILE_FLAG_OVERLAPPED = 0x40000000;

		//Constants for dwCreationDisposition:
			internal const UInt32 OPEN_EXISTING = 3;

		//Constants for dwDesiredAccess:
			internal const UInt32 GENERIC_READ = 0x80000000;
			internal const UInt32 GENERIC_WRITE = 0x40000000;

		[DllImport("kernel32.dll")]
		internal static extern Boolean CloseHandle(IntPtr hObject);

		/// <summary>
		/// Manipulating the communications settings.
		/// </summary>

		[DllImport("kernel32.dll")]
		internal static extern Boolean GetCommState(IntPtr hFile, ref DCB lpDCB);

		[DllImport("kernel32.dll")]
		internal static extern Boolean GetCommTimeouts(IntPtr hFile, out COMMTIMEOUTS lpCommTimeouts);

		[DllImport("kernel32.dll")]
		internal static extern Boolean BuildCommDCBAndTimeouts(String lpDef, ref DCB lpDCB, ref COMMTIMEOUTS lpCommTimeouts);

		[DllImport("kernel32.dll")]
		internal static extern Boolean SetCommState(IntPtr hFile, [In] ref DCB lpDCB);

		[DllImport("kernel32.dll")]
		internal static extern Boolean SetCommTimeouts(IntPtr hFile, [In] ref COMMTIMEOUTS lpCommTimeouts);

		[DllImport("kernel32.dll")]
		internal static extern Boolean SetupComm(IntPtr hFile, UInt32 dwInQueue, UInt32 dwOutQueue);

		[StructLayout( LayoutKind.Sequential )] internal struct COMMTIMEOUTS 
		{
			//JH 1.1: Changed Int32 to UInt32 to allow setting to MAXDWORD
			internal UInt32 ReadIntervalTimeout;
			internal UInt32 ReadTotalTimeoutMultiplier;
			internal UInt32 ReadTotalTimeoutConstant;
			internal UInt32 WriteTotalTimeoutMultiplier;
			internal UInt32 WriteTotalTimeoutConstant;
		}
		//JH 1.1: Added to enable use of "return immediately" timeout.
		internal const UInt32 MAXDWORD = 0xffffffff;

		[StructLayout( LayoutKind.Sequential )] internal struct DCB 
		{
			internal Int32 DCBlength;
			internal Int32 BaudRate;
			internal Int32 PackedValues;
			internal Int16 wReserved;
			internal Int16 XonLim;
			internal Int16 XoffLim;
			internal Byte  ByteSize;
			internal Byte  Parity;
			internal Byte  StopBits;
			internal Byte XonChar;
			internal Byte XoffChar;
			internal Byte ErrorChar;
			internal Byte EofChar;
			internal Byte EvtChar;
			internal Int16 wReserved1;

			internal void init(bool parity, bool outCTS, bool outDSR, int dtr, bool inDSR, bool txc, bool xOut,
				bool xIn, int rts)
			{
				//JH 1.3: Was 0x8001 ans so not setting fAbortOnError - Thanks Larry Delby!
				DCBlength = 28; PackedValues = 0x4001;
				if (parity) PackedValues |= 0x0002;
				if (outCTS) PackedValues |= 0x0004;
				if (outDSR) PackedValues |= 0x0008;
				PackedValues |= ((dtr & 0x0003) << 4);
				if (inDSR) PackedValues |= 0x0040;
				if (txc) PackedValues |= 0x0080;
				if (xOut) PackedValues |= 0x0100;
				if (xIn) PackedValues |= 0x0200;
				PackedValues |= ((rts & 0x0003) << 12);

			}
		}

		/// <summary>
		/// Reading and writing.
		/// </summary>
		[DllImport("kernel32.dll", SetLastError=true)]
		internal static extern Boolean WriteFile(IntPtr fFile, Byte[] lpBuffer, UInt32 nNumberOfBytesToWrite,
			out UInt32 lpNumberOfBytesWritten, IntPtr lpOverlapped);

		[StructLayout( LayoutKind.Sequential )] internal struct OVERLAPPED 
		{
			internal UIntPtr Internal;
			internal UIntPtr InternalHigh;
			internal UInt32 Offset;
			internal UInt32 OffsetHigh;
			internal IntPtr hEvent;
		}

		[DllImport("kernel32.dll")]
		internal static extern Boolean SetCommMask(IntPtr hFile, UInt32 dwEvtMask);

		// Constants for dwEvtMask:
			internal const UInt32 EV_RXCHAR = 0x0001;
			internal const UInt32 EV_RXFLAG = 0x0002;
			internal const UInt32 EV_TXEMPTY = 0x0004;
			internal const UInt32 EV_CTS = 0x0008;
			internal const UInt32 EV_DSR = 0x0010;
			internal const UInt32 EV_RLSD = 0x0020;
			internal const UInt32 EV_BREAK = 0x0040;
			internal const UInt32 EV_ERR = 0x0080;
			internal const UInt32 EV_RING = 0x0100;
			internal const UInt32 EV_PERR = 0x0200;
			internal const UInt32 EV_RX80FULL = 0x0400;
			internal const UInt32 EV_EVENT1 = 0x0800;
			internal const UInt32 EV_EVENT2 = 0x1000;

		[DllImport("kernel32.dll", SetLastError=true)]
		internal static extern Boolean WaitCommEvent(IntPtr hFile, IntPtr lpEvtMask, IntPtr lpOverlapped);

		[DllImport("kernel32.dll")]
		internal static extern Boolean CancelIo(IntPtr hFile);
		
		[DllImport("kernel32.dll", SetLastError=true)]
		internal static extern Boolean ReadFile(IntPtr hFile, [Out] Byte[] lpBuffer, UInt32 nNumberOfBytesToRead,
			out UInt32 nNumberOfBytesRead, IntPtr lpOverlapped);

		[DllImport("kernel32.dll")]
		internal static extern Boolean TransmitCommChar(IntPtr hFile, Byte cChar);

		/// <summary>
		/// Control port functions.
		/// </summary>
		[DllImport("kernel32.dll")]
		internal static extern Boolean EscapeCommFunction(IntPtr hFile, UInt32 dwFunc);

		// Constants for dwFunc:
			internal const UInt32 SETXOFF = 1;
			internal const UInt32 SETXON = 2;
			internal const UInt32 SETRTS = 3;
			internal const UInt32 CLRRTS = 4;
			internal const UInt32 SETDTR = 5;
			internal const UInt32 CLRDTR = 6;
			internal const UInt32 RESETDEV = 7;
			internal const UInt32 SETBREAK = 8;
			internal const UInt32 CLRBREAK = 9;
		
		[DllImport("kernel32.dll")]
		internal static extern Boolean GetCommModemStatus(IntPtr hFile, out UInt32 lpModemStat);

		// Constants for lpModemStat:
			internal const UInt32 MS_CTS_ON = 0x0010;
			internal const UInt32 MS_DSR_ON = 0x0020;
			internal const UInt32 MS_RING_ON = 0x0040;
			internal const UInt32 MS_RLSD_ON = 0x0080;

		/// <summary>
		/// Status Functions.
		/// </summary>
		[DllImport("kernel32.dll", SetLastError=true)]
		internal static extern Boolean GetOverlappedResult(IntPtr hFile, IntPtr lpOverlapped,
			out UInt32 nNumberOfBytesTransferred, Boolean bWait);

		[DllImport("kernel32.dll")]
		internal static extern Boolean ClearCommError(IntPtr hFile, out UInt32 lpErrors, IntPtr lpStat);
		[DllImport("kernel32.dll")]
		internal static extern Boolean ClearCommError(IntPtr hFile, out UInt32 lpErrors, out COMSTAT cs);

		//Constants for lpErrors:
			internal const UInt32 CE_RXOVER = 0x0001;
			internal const UInt32 CE_OVERRUN = 0x0002;
			internal const UInt32 CE_RXPARITY = 0x0004;
			internal const UInt32 CE_FRAME = 0x0008;
			internal const UInt32 CE_BREAK = 0x0010;
			internal const UInt32 CE_TXFULL = 0x0100;
			internal const UInt32 CE_PTO = 0x0200;
			internal const UInt32 CE_IOE = 0x0400;
			internal const UInt32 CE_DNS = 0x0800;
			internal const UInt32 CE_OOP = 0x1000;
			internal const UInt32 CE_MODE = 0x8000;

		[StructLayout( LayoutKind.Sequential )] internal struct COMSTAT 
		{
			internal const uint fCtsHold = 0x1;
			internal const uint fDsrHold = 0x2;
			internal const uint fRlsdHold = 0x4;
			internal const uint fXoffHold = 0x8;
			internal const uint fXoffSent = 0x10;
			internal const uint fEof = 0x20;
			internal const uint fTxim = 0x40;
			internal UInt32 Flags;
			internal UInt32 cbInQue;
			internal UInt32 cbOutQue;
		}
		[DllImport("kernel32.dll")]
		internal static extern Boolean GetCommProperties(IntPtr hFile, out COMMPROP cp);

		[StructLayout( LayoutKind.Sequential )] internal struct COMMPROP
		{
			internal UInt16 wPacketLength; 
			internal UInt16 wPacketVersion; 
			internal UInt32 dwServiceMask; 
			internal UInt32 dwReserved1; 
			internal UInt32 dwMaxTxQueue; 
			internal UInt32 dwMaxRxQueue; 
			internal UInt32 dwMaxBaud; 
			internal UInt32 dwProvSubType; 
			internal UInt32 dwProvCapabilities; 
			internal UInt32 dwSettableParams; 
			internal UInt32 dwSettableBaud; 
			internal UInt16 wSettableData; 
			internal UInt16 wSettableStopParity; 
			internal UInt32 dwCurrentTxQueue; 
			internal UInt32 dwCurrentRxQueue; 
			internal UInt32 dwProvSpec1; 
			internal UInt32 dwProvSpec2; 
			internal Byte wcProvChar; 
		}
	
	}

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美手机在线视频| 成人在线综合网站| 免费观看久久久4p| 久久99蜜桃精品| 99久久99久久精品免费观看 | 国产精品亚洲人在线观看| 国产在线看一区| 色婷婷久久综合| 欧美一区二区福利在线| 久久精品免视看| 亚洲高清视频在线| 国产精品久久毛片| 日日夜夜精品视频免费| 国产麻豆一精品一av一免费| eeuss鲁片一区二区三区在线看| 欧美性极品少妇| 国产精品丝袜一区| 日韩激情一区二区| 91丨九色丨国产丨porny| 欧美电视剧在线观看完整版| 国产亚洲精久久久久久| 婷婷久久综合九色综合伊人色| 国模一区二区三区白浆| 欧美剧情电影在线观看完整版免费励志电影 | 欧美aa在线视频| 色国产综合视频| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆 | 天堂午夜影视日韩欧美一区二区| 国产成人99久久亚洲综合精品| 日韩精品一区二区三区四区| 亚洲成人在线免费| 在线欧美日韩国产| 一区二区高清在线| 欧美一区二区视频在线观看| 色综合久久久久久久久久久| 精品免费日韩av| 蜜桃精品在线观看| 91精品国产丝袜白色高跟鞋| 一区二区三区在线播放| 九一九一国产精品| 精品国免费一区二区三区| 午夜精品视频在线观看| 色综合久久88色综合天天 | 国产精品青草综合久久久久99| 日本在线不卡一区| 欧美日韩大陆一区二区| 夜夜嗨av一区二区三区网页| 欧美午夜片在线看| 日韩vs国产vs欧美| 911精品国产一区二区在线| 亚洲成人免费在线| 91精品国产欧美一区二区18 | 欧美v国产在线一区二区三区| 麻豆91精品91久久久的内涵| 一区二区三区资源| 久久久久久久国产精品影院| 在线观看亚洲精品视频| 国产激情精品久久久第一区二区| 亚洲欧美成aⅴ人在线观看| 日韩精品最新网址| 91.com在线观看| 色综合色综合色综合色综合色综合| 毛片不卡一区二区| 亚洲第一福利视频在线| 伊人色综合久久天天人手人婷| 91小视频在线免费看| 国产乱人伦偷精品视频不卡| 免费久久精品视频| 日韩国产欧美在线视频| 亚洲国产经典视频| 欧美在线小视频| 91国偷自产一区二区使用方法| 懂色一区二区三区免费观看| 精品一区二区日韩| 日韩经典一区二区| 视频一区二区不卡| 亚洲国产成人av| 日韩精品国产欧美| 极品美女销魂一区二区三区| 国模套图日韩精品一区二区| 蜜桃视频一区二区三区在线观看| 日韩成人一级大片| 国产综合久久久久久鬼色| 亚洲五月六月丁香激情| 一区二区三区免费在线观看| 国产欧美日韩在线| 国产三级一区二区三区| 国产欧美精品一区aⅴ影院| 久久精品日韩一区二区三区| 精品久久久久久久一区二区蜜臀| 日韩视频一区二区| 亚洲欧美在线视频观看| 亚洲国产一区视频| 久久99久久精品欧美| 粉嫩一区二区三区性色av| 99久久精品99国产精品| 在线免费一区三区| www国产精品av| 亚洲欧美日韩综合aⅴ视频| 韩国精品一区二区| 欧美色窝79yyyycom| 国产精品久久久久国产精品日日| 麻豆高清免费国产一区| 国产乱人伦精品一区二区在线观看 | 91国产丝袜在线播放| 51精品久久久久久久蜜臀| 国产精品免费av| 日韩高清欧美激情| 成人av小说网| xvideos.蜜桃一区二区| 亚洲成a人片综合在线| 91亚洲精华国产精华精华液| 日韩精品中午字幕| 日韩黄色一级片| 欧美一区二区女人| 日韩高清不卡在线| 色狠狠色狠狠综合| 国产日韩精品视频一区| 免费看精品久久片| 欧美一卡二卡在线观看| 香蕉久久夜色精品国产使用方法 | 色94色欧美sute亚洲线路二| 欧美变态凌虐bdsm| 国产精品久久久久9999吃药| 国产一区二区久久| 亚洲欧洲日韩av| 在线这里只有精品| 天天综合天天综合色| 69精品人人人人| 久久99久久精品欧美| 欧美tk—视频vk| 日韩精品一区二区三区在线| 男女性色大片免费观看一区二区| 欧美一级理论片| 黄色资源网久久资源365| 久久夜色精品一区| 九九九久久久精品| 国产精品免费aⅴ片在线观看| 不卡的av在线| 午夜久久久影院| 日韩欧美国产麻豆| 成人免费视频一区| 喷白浆一区二区| 国产精品久久久久影视| 欧美色偷偷大香| 成人黄色小视频| 亚洲欧美日韩国产中文在线| 亚洲精品一线二线三线| 欧美日韩国产免费| 欧美日韩一区二区在线观看视频| www.成人在线| 成人精品亚洲人成在线| 欧美日韩免费视频| 不卡av在线网| 久草中文综合在线| 亚洲一区二区3| 欧美草草影院在线视频| 国产.精品.日韩.另类.中文.在线.播放| 日韩午夜电影av| 精品成人在线观看| 精品国产免费久久| 久久久国产午夜精品| 久久久久99精品国产片| 国产精品免费久久| 一级日本不卡的影视| 亚洲精品国产精华液| 亚洲一区二区三区三| 午夜精品福利视频网站| 日韩国产成人精品| 午夜精品久久久| 国产成人午夜精品5599| 欧美综合色免费| 日韩小视频在线观看专区| 久久久国产精品不卡| 国产精品护士白丝一区av| 自拍偷在线精品自拍偷无码专区 | aaa亚洲精品一二三区| 在线免费精品视频| 精品国产乱码久久久久久蜜臀| 国产精品嫩草99a| 日韩成人一级片| 欧美日韩国产综合一区二区三区| 欧美精品一区在线观看| 中文字幕 久热精品 视频在线| 中文字幕一区三区| 亚洲激情自拍偷拍| 日本中文字幕一区二区视频| 国内不卡的二区三区中文字幕| 岛国一区二区三区| 欧美日韩免费视频| 欧美国产精品专区| 亚洲gay无套男同| 99国产精品久久久久久久久久久| 欧美日韩大陆一区二区| 欧美国产日韩a欧美在线观看| 亚洲丝袜自拍清纯另类| 精品综合久久久久久8888| 欧美在线一区二区三区| 久久久久久久久久久久久女国产乱| 一区二区不卡在线播放 |