/////////////////////////////////////////////////////////////////////////////////////////// /// <summary> /// Syncronous Send. Sends a Esys protocol message over the serial port and waits for /// the response. Returns the reponse if successful, null otherwise. /// </summary> /////////////////////////////////////////////////////////////////////////////////////////// private Message Send(Message message, int timeout) { if (Connected) { lock (mSyncLock) { Esys.Protocol.Message result = null; int count = timeout / 20; mResult = null; mMsgNumber = (mMsgNumber >= 99999) ? 1 : mMsgNumber + 1; message.Number = mMsgNumber; mPort.Write(message.ToString()); for (int i = 0; i < count; i++) { result = mResult; if (result != null && result.Number == message.Number && result is Message) { break; } else { result = null; Thread.Sleep(20); } } return (Message)result; } } else { return null; } }
/////////////////////////////////////////////////////////////////////////////////////////// /// <summary> /// Event handler called when data is received on the serial port (mPort) /// </summary> /////////////////////////////////////////////////////////////////////////////////////////// private void mPort_DataReceived(object sender, SerialDataReceivedEventArgs e) { Message result = new Message(); string endchar = ASCIIEncoding.ASCII.GetString(new byte[] { 0x03 }); try { string data = mPort.ReadTo(endchar); data = data.Remove(0, 1); //Remove the start char if (result.TryParse(data)) { mResult = result; } } catch { //ArgumentException -The length of the value parameter is 0. //ArgumentNullException -The value parameter is nullNothingnullptra null reference (Nothing in Visual Basic). //InvalidOperationException -The specified port is not open. //TimeoutException -The operation did not complete before the time-out period ended. } }