private void pHandleOverlappedRead(int Bytes2Read) { this.muOverlapped.hEvent = Rs232.CreateEvent(0, 1, 0, (string)null); if (this.muOverlapped.hEvent == 0) { throw new ApplicationException("Error creating event for overlapped read."); } int num = 0; if (!this.mbWaitOnRead) { this.mabtRxBuf = new byte[checked (Bytes2Read - 1 + 1)]; if (Rs232.ReadFile(this.mhRS, this.mabtRxBuf, Bytes2Read, ref num, ref this.muOverlapped) == 0) { int lastError = Rs232.GetLastError(); if (lastError != 997) { throw new ArgumentException("Overlapped Read Error: " + this.pErr2Text(lastError)); } this.mbWaitOnRead = true; } //else if (this.DataReceivedEvent != null) // this.DataReceivedEvent(this, this.mabtRxBuf); } if (!this.mbWaitOnRead) { return; } switch (Rs232.WaitForSingleObject(this.muOverlapped.hEvent, this.miTimeout)) { case 0: if (Rs232.GetOverlappedResult(this.mhRS, ref this.muOverlapped, ref num, 0) == 0) { int lastError = Rs232.GetLastError(); if (lastError == 996) { throw new ApplicationException("Read operation incomplete"); } throw new ApplicationException("Read operation error " + lastError.ToString()); } //if (this.DataReceivedEvent != null) // this.DataReceivedEvent(this, this.mabtRxBuf); this.mbWaitOnRead = false; break; case 258: throw new Rs232.IOTimeoutException("Timeout error"); default: throw new ApplicationException("Overlapped read error"); } }
private bool pHandleOverlappedWrite(byte[] Buffer) { this.muOverlappedW.hEvent = Rs232.CreateEvent(0, 1, 0, (string)null); if (this.muOverlappedW.hEvent == 0) { throw new ApplicationException("Error creating event for overlapped write."); } Rs232.PurgeComm(this.mhRS, 12); this.mbWaitOnRead = true; int num = 0; bool flag = false; if (Rs232.WriteFile(this.mhRS, Buffer, Buffer.Length, ref num, ref this.muOverlappedW) == 0) { int lastError = Rs232.GetLastError(); if (lastError != 997) { throw new ArgumentException("Overlapped Read Error: " + this.pErr2Text(lastError)); } if (Rs232.WaitForSingleObject(this.muOverlappedW.hEvent, -1) == 0) { if (Rs232.GetOverlappedResult(this.mhRS, ref this.muOverlappedW, ref num, 0) == 0) { flag = true; } else { this.mbWaitOnRead = false; //if (this.TxCompletedEvent != null) // this.TxCompletedEvent(this); } } } else { flag = false; } Rs232.CloseHandle(this.muOverlappedW.hEvent); return(flag); }
public void Open() { int int32 = Convert.ToInt32(RuntimeHelpers.GetObjectValue(Interaction.IIf(this.meMode == Rs232.Mode.Overlapped, (object)1073741824, (object)0))); if (this.miPort <= 0) { throw new ApplicationException("COM Port not defined, use Port property to set it before invoking InitPort"); } try { this.mhRS = Rs232.CreateFile("COM" + this.miPort.ToString(), -1073741824, 0, 0, 3, int32, 0); if (this.mhRS == -1) { throw new Rs232.CIOChannelException("Unable to open COM" + this.miPort.ToString()); } int lpErrors = 0; int num = Rs232.ClearCommError(this.mhRS, lpErrors, 0); num = Rs232.PurgeComm(this.mhRS, 12); Rs232.DCB lpDCB = new DCB(); num = Rs232.GetCommState(this.mhRS, ref lpDCB); num = Rs232.BuildCommDCB(string.Format("baud={0} parity={1} data={2} stop={3}", (object)this.miBaudRate, (object)"NOEM".Substring((int)this.meParity, 1), (object)this.miDataBit, (object)this.meStopBit), ref lpDCB); if (Rs232.SetCommState(this.mhRS, ref lpDCB) == 0) { throw new Rs232.CIOChannelException("Unable to set COM state0" + this.pErr2Text(Rs232.GetLastError())); } num = Rs232.SetupComm(this.mhRS, this.miBufferSize, this.miBufferSize); this.pSetTimeout(); } catch (Exception ex) { ProjectData.SetProjectError(ex); Exception InnerException = ex; throw new Rs232.CIOChannelException(InnerException.Message, InnerException); } }