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

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

?? port.cs

?? 取得GSM基站信息的程序NiceTrack以及源代碼
?? CS
?? 第 1 頁 / 共 2 頁
字號:
using System;
using System.Runtime.InteropServices;
using System.Threading;
using System.Text;

namespace NiceTracker.Serial
{
	public class CommPortException : Exception
	{
		public CommPortException(string desc) : base(desc) {}
	}

	public class Port : IDisposable
	{
		#region delegates and events
		public delegate void CommEvent();
		public delegate void CommChangeEvent(bool NewState);
		public delegate void CommErrorEvent(string Description);

		public event CommErrorEvent OnError;
		public event CommEvent DataReceived;
		public event CommEvent RxOverrun;
		public event CommEvent TxDone;
		public event CommEvent FlagCharReceived;
		public event CommEvent PowerEvent;
		public event CommEvent HighWater;
		public event CommChangeEvent DSRChange;
		public event CommChangeEvent RingChange;
		public event CommChangeEvent CTSChange;
		public event CommChangeEvent RLSDChange;
		#endregion

		#region variable declarations
		private string portName;
		private IntPtr hPort = (IntPtr)CommAPI.INVALID_HANDLE_VALUE;
		
		// default Rx buffer is 1024 bytes
		private uint rxBufferSize = 1024;
		private byte[] rxBuffer;
		private uint prxBuffer	= 0;
		private uint rthreshold = 1;

		// default Tx buffer is 1024 bytes
		private uint txBufferSize = 1024;
		private byte[] txBuffer;
		private uint ptxBuffer	= 0;
		private uint sthreshold = 1;

		private Mutex rxBufferBusy = new Mutex();
		private uint inputLength;

		private DCB dcb = new DCB();
		private DetailedPortSettings portSettings;

		private Thread eventThread;
		private ManualResetEvent threadStarted = new ManualResetEvent(false);
		
		private IntPtr closeEvent;
		private string closeEventName = "CloseEvent";

		private int rts = -1;
		private bool rtsavail = false;
		private int dtr = -1;
		private bool dtravail = false;
		private int brk = -1;

		private bool isOpen = false;
		#endregion

		private void Init()
		{
			// create a system event for synchronizing Closing
			closeEvent = CommAPI.CreateEvent(true, false, closeEventName);

			rxBuffer = new byte[rxBufferSize];
			txBuffer = new byte[txBufferSize];
			portSettings = new DetailedPortSettings();
		}

		#region constructors
		public Port(string PortName)
		{
			portName = PortName;
			Init();
		}

		public Port(string PortName, BasicPortSettings InitialSettings)
		{
			portName = PortName;
			Init();

			//override default ettings
			portSettings.BasicSettings = InitialSettings;
		}

		public Port(string PortName, DetailedPortSettings InitialSettings)
		{
			portName = PortName;
			Init();

			//override default ettings
			portSettings = InitialSettings;
		}

		public Port(string PortName, uint RxBufferSize, uint TxBufferSize)
		{
			rxBufferSize = RxBufferSize;
			txBufferSize = TxBufferSize;
			Init();
		}

		public Port(string PortName, BasicPortSettings InitialSettings, uint RxBufferSize, uint TxBufferSize)
		{
			rxBufferSize = RxBufferSize;
			txBufferSize = TxBufferSize;
			Init();

			//override default ettings
			portSettings.BasicSettings = InitialSettings;
		}

		public Port(string PortName, DetailedPortSettings InitialSettings, uint RxBufferSize, uint TxBufferSize)
		{
			rxBufferSize = RxBufferSize;
			txBufferSize = TxBufferSize;
			Init();

			//override default ettings
			portSettings = InitialSettings;
		}
		#endregion

		// since the event thread blocks until the port handle is closed
		// implement both a Dispose and destrucor to make sure that we
		// clean up as soon as possible
		public void Dispose()
		{
			if(isOpen)
				this.Close();
		}
		
		~Port()
		{
			if(isOpen)
				this.Close();
		}

		public string PortName
		{
			get
			{
				return portName;
			}
			set
			{
				portName = value;
			}
		}

		public bool IsOpen
		{
			get
			{
				return isOpen;
			}
		}

		public bool Open()
		{
			if(isOpen) return false;

			hPort = CommAPI.CreateFile(portName);

			if(hPort == (IntPtr)CommAPI.INVALID_HANDLE_VALUE)
			{
				int e = Marshal.GetLastWin32Error();

				if(e == (int)APIErrors.ERROR_ACCESS_DENIED)
				{
					// port is unavailable
					return false;
				}

				// ClearCommError failed!
				string error = String.Format("CreateFile Failed: {0}", e);
				throw new CommPortException(error);
			}

			
			isOpen = true;

			// set queue sizes
			CommAPI.SetupComm(hPort, rxBufferSize, txBufferSize);

			// transfer the port settings to a DCB structure
			dcb.BaudRate = (uint)portSettings.BasicSettings.BaudRate;
			dcb.ByteSize = portSettings.BasicSettings.ByteSize;
			dcb.EofChar = (sbyte)portSettings.EOFChar;
			dcb.ErrorChar = (sbyte)portSettings.ErrorChar;
			dcb.EvtChar = (sbyte)portSettings.EVTChar;
			dcb.fAbortOnError = portSettings.AbortOnError;
			dcb.fBinary = true;
			dcb.fDsrSensitivity = portSettings.DSRSensitive;
			dcb.fDtrControl = (DCB.DtrControlFlags)portSettings.DTRControl;
			dcb.fErrorChar = portSettings.ReplaceErrorChar;
			dcb.fInX = portSettings.InX;
			dcb.fNull = portSettings.DiscardNulls;
			dcb.fOutX = portSettings.OutX;
			dcb.fOutxCtsFlow = portSettings.OutCTS;
			dcb.fOutxDsrFlow = portSettings.OutDSR;
			dcb.fParity = (portSettings.BasicSettings.Parity == Parity.none) ? false : true;
			dcb.fRtsControl = (DCB.RtsControlFlags)portSettings.RTSControl;
			dcb.fTXContinueOnXoff = portSettings.TxContinueOnXOff;
			dcb.Parity = (byte)portSettings.BasicSettings.Parity;
			dcb.StopBits = (byte)portSettings.BasicSettings.StopBits;
			dcb.XoffChar = (sbyte)portSettings.XoffChar;
			dcb.XonChar = (sbyte)portSettings.XonChar;

			dcb.XonLim = dcb.XoffLim = (ushort)(rxBufferSize / 10);
			
			CommAPI.SetCommState(hPort, dcb);

			// store some state values
			brk = 0;
			dtr = dcb.fDtrControl == DCB.DtrControlFlags.Enable ? 1 : 0;
			rts = dcb.fRtsControl == DCB.RtsControlFlags.Enable ? 1 : 0;

			// set the Comm timeouts
			CommTimeouts ct = new CommTimeouts();

			// reading we'll return immediately
			// this doesn't seem to work as documented
			ct.ReadIntervalTimeout = uint.MaxValue; // this = 0xffffffff
			ct.ReadTotalTimeoutConstant = 0;
			ct.ReadTotalTimeoutMultiplier = 0;

			// writing we'll give 5 seconds
			ct.WriteTotalTimeoutConstant = 5;
			ct.WriteTotalTimeoutMultiplier = 0;

			CommAPI.SetCommTimeouts(hPort, ct);

			// start the receive thread
			eventThread = new Thread(new ThreadStart(CommEventThread));
			eventThread.Priority = ThreadPriority.AboveNormal;
			eventThread.Start();

			// wait for the thread to actually get spun up
			threadStarted.WaitOne();

			return true;
		}

		public bool Close()
		{
			if(!isOpen) return false;

			if(CommAPI.CloseHandle(hPort))
			{
				CommAPI.SetEvent(closeEvent);

				isOpen = false;

				hPort = (IntPtr)CommAPI.INVALID_HANDLE_VALUE;
				
				CommAPI.SetEvent(closeEvent);

				return true;
			}

			return false;
		}

		public byte[] Output
		{
			set
			{
				if(!isOpen) return;

				int written = 0;

				// more than threshold amount so send without buffering
				if(value.GetLength(0) > sthreshold)
				{
					// first send anything already in the buffer
					if(ptxBuffer > 0)
					{
						CommAPI.WriteFile(hPort, txBuffer, ptxBuffer, ref written);
						ptxBuffer = 0;
					}

					CommAPI.WriteFile(hPort, value, (uint)value.GetLength(0), ref written);
				}
				else
				{
					// copy it to the tx buffer
					value.CopyTo(txBuffer, (int)ptxBuffer);
					ptxBuffer += (uint)value.Length;

					// now if the buffer is above sthreshold, send it
					if(ptxBuffer >= sthreshold)
					{
						CommAPI.WriteFile(hPort, txBuffer, ptxBuffer, ref written);
						ptxBuffer = 0;
					}
				}
			}
		}

		public byte[] Input
		{
			get
			{
				if(!isOpen) return null;

				byte[] data = new byte[inputLength];
				data.Initialize();

				if(prxBuffer > 0)
				{
					// check to see if we actually have inputLength bytes in the buffer
					uint bytesToCopy = prxBuffer < inputLength ? prxBuffer : inputLength;

					// prevent the rx thread from adding to the buffer while we use it
					rxBufferBusy.WaitOne();
					
					// copy the buffer to an output variable for inputLength bytes
					Array.Copy(rxBuffer, 0, data, 0, (int)bytesToCopy);

					// shift the data in the Rx Buffer to revove inputLength bytes
					Array.Copy(rxBuffer, (int)bytesToCopy, rxBuffer, 0, (int)(rxBuffer.GetUpperBound(0) - bytesToCopy));

					prxBuffer -= bytesToCopy;
				
					// release the mutex so the Rx thread can work
					rxBufferBusy.ReleaseMutex();
				}
				
				return data;
			}
		}

		public uint InputLen
		{
			get
			{
				return inputLength;
			}
			set
			{
				inputLength = value;
			}
		}

		public uint InBufferCount
		{
			get
			{
				if(!isOpen) return 0;

				return prxBuffer;
			}
		}

		public uint OutBufferCount
		{
			get
			{
				if(!isOpen) return 0;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区毛片| 久久九九国产精品| 日韩美女在线视频| 成人欧美一区二区三区小说| 蜜臀av一级做a爰片久久| 色噜噜偷拍精品综合在线| 久久先锋影音av鲁色资源网| 天堂成人国产精品一区| 色综合久久中文综合久久97| 国产午夜精品一区二区三区嫩草 | 色婷婷综合激情| 久久蜜臀精品av| 老鸭窝一区二区久久精品| 欧美色视频在线| 亚洲综合小说图片| 91视频国产观看| 中文字幕人成不卡一区| 成人免费va视频| 国产日韩欧美综合一区| 国产一区二区美女| 精品剧情在线观看| 看电视剧不卡顿的网站| 日韩视频一区在线观看| 麻豆91精品视频| 欧美一区二区女人| 蜜臀av性久久久久蜜臀aⅴ| 欧美日韩一区久久| 午夜亚洲福利老司机| 欧美日韩在线播放一区| 午夜精品123| 欧美一区二区啪啪| av中文字幕在线不卡| 久久精品一区二区三区不卡牛牛 | 欧美成人一区二区三区片免费| 亚洲一级二级三级| 欧美日韩不卡一区| 免费xxxx性欧美18vr| 欧美精品一区二区三区久久久| 精品无人区卡一卡二卡三乱码免费卡| 日韩欧美一区二区久久婷婷| 欧美精品三级在线观看| 日韩亚洲国产中文字幕欧美| 欧美一区二区福利视频| 日韩成人av影视| 日韩欧美一级精品久久| 韩国女主播一区| 国产日本欧洲亚洲| 99精品视频在线播放观看| 综合激情网...| 欧美伊人精品成人久久综合97 | 欧美日韩激情在线| 首页亚洲欧美制服丝腿| 日韩免费性生活视频播放| 国模少妇一区二区三区| 国产日韩在线不卡| 91福利区一区二区三区| 免费高清在线视频一区·| 久久精品人人做人人综合| 972aa.com艺术欧美| 日韩电影在线观看网站| 久久久久久久久岛国免费| 91麻豆免费观看| 日韩av一级电影| 国产精品天干天干在线综合| 精品视频一区 二区 三区| 精品一区精品二区高清| 亚洲免费在线观看| 日韩欧美亚洲国产精品字幕久久久| 国产在线一区观看| 亚洲一区二区三区中文字幕在线| 亚洲精品一区二区三区蜜桃下载| 99re热视频精品| 免费在线视频一区| 亚洲久本草在线中文字幕| 欧美一区二区三区不卡| 91麻豆高清视频| 久久99精品久久久久久动态图| 亚洲日本在线天堂| 精品国产91九色蝌蚪| 日本精品视频一区二区三区| 国产一区二区三区精品欧美日韩一区二区三区 | 欧美视频一区二区在线观看| 久久99精品久久久久久| 一区二区三区在线视频观看58| 精品成人一区二区三区四区| 日本韩国视频一区二区| 国产成人免费视频一区| 免费在线看成人av| 亚洲一区二区三区不卡国产欧美| 国产喂奶挤奶一区二区三区| 日韩欧美中文字幕精品| 欧美在线高清视频| 色综合网站在线| 丁香桃色午夜亚洲一区二区三区| 免费成人小视频| 亚洲国产美国国产综合一区二区| 国产精品欧美经典| 久久午夜羞羞影院免费观看| 日韩一区二区三免费高清| 欧美色中文字幕| 欧美在线你懂的| 色88888久久久久久影院野外| 风间由美一区二区三区在线观看| 美腿丝袜在线亚洲一区| 日韩精品电影在线观看| 午夜在线成人av| 亚洲国产综合91精品麻豆| 亚洲日本va午夜在线影院| 中文字幕不卡在线观看| 久久精品亚洲精品国产欧美 | 免费人成在线不卡| 天天av天天翘天天综合网色鬼国产| 亚洲三级在线免费观看| 亚洲欧美成人一区二区三区| 国产精品激情偷乱一区二区∴| 国产日韩欧美制服另类| 中文久久乱码一区二区| 国产精品不卡在线| 亚洲欧洲精品一区二区三区 | 在线视频一区二区免费| 91麻豆自制传媒国产之光| 色诱视频网站一区| 色婷婷国产精品综合在线观看| 日本乱人伦aⅴ精品| 在线观看国产精品网站| 欧美精品视频www在线观看| 91精品国产欧美日韩| 欧美成人精精品一区二区频| xnxx国产精品| 国产精品国产三级国产aⅴ无密码| 亚洲欧美日韩中文字幕一区二区三区| 亚洲色欲色欲www在线观看| 亚洲一区影音先锋| 免费看日韩精品| 国产精品一区二区三区四区| 不卡高清视频专区| 色94色欧美sute亚洲线路一久 | 色呦呦一区二区三区| 在线观看日韩高清av| 日韩一级在线观看| 中文字幕在线观看不卡| 午夜一区二区三区在线观看| 蜜臀av性久久久久蜜臀aⅴ| 国产精品综合久久| 欧美伊人精品成人久久综合97| 欧美一区二区三区四区在线观看| 久久久久久免费毛片精品| 亚洲欧洲精品天堂一级 | 亚洲一区二区视频在线| 麻豆精品视频在线观看视频| 成人激情午夜影院| 欧美一区二区久久久| 国产精品人妖ts系列视频| 亚洲一区二区三区在线| 韩国av一区二区三区四区| 色八戒一区二区三区| 日韩欧美一级二级| 亚洲欧美色综合| 国产精品综合一区二区三区| 欧美性xxxxx极品少妇| 国产午夜精品久久久久久免费视 | 国产精品黄色在线观看| 日韩高清不卡一区二区| 91在线视频官网| 日韩精品一区二区三区蜜臀 | 国产成人亚洲综合a∨猫咪| 欧美日韩中文一区| 欧美国产国产综合| 蜜桃精品视频在线| 在线一区二区观看| 中文字幕不卡在线播放| 黑人精品欧美一区二区蜜桃| 欧美视频一区二区三区在线观看| 中文字幕国产一区| 国产一区福利在线| 日韩亚洲欧美成人一区| 亚洲国产美女搞黄色| 99视频在线精品| 国产日本欧美一区二区| 琪琪一区二区三区| 欧美美女直播网站| 亚洲黄色免费电影| 99亚偷拍自图区亚洲| 国产精品丝袜91| 国产乱人伦偷精品视频免下载 | 欧美日韩亚洲综合| 成人免费在线观看入口| 国产91露脸合集magnet| 久久久国产综合精品女国产盗摄| 日韩av一二三| 91精品视频网| 热久久久久久久| 制服丝袜成人动漫| 午夜精品在线视频一区| 欧美日韩精品欧美日韩精品一综合| 亚洲影院在线观看| 欧美性大战久久久久久久蜜臀| 一片黄亚洲嫩模| 欧美三级一区二区| 亚洲mv在线观看|