protected override void bus_DataReceived(object sender, SerialDataReceivedEventArgs e) { ISerialPort port = (ISerialPort)sender; if (port.AvailableBytes == 0) { Logger.Trace("Available bytes lost! " + port.ToString()); return; } lock (bufferSync) { byte[] data = port.ReadAvailable(); if (messageBufferLength + data.Length > messageBuffer.Length) { Logger.Trace("Buffer overflow. Extending it. " + port.ToString()); byte[] newBuffer = new byte[messageBuffer.Length * 2]; Array.Copy(messageBuffer, newBuffer, messageBufferLength); messageBuffer = newBuffer; } if (data.Length == 1) { messageBuffer[messageBufferLength++] = data[0]; } else { Array.Copy(data, 0, messageBuffer, messageBufferLength, data.Length); messageBufferLength += data.Length; } while (messageBufferLength >= DBusMessage.PacketLengthMin || messageBufferLength >= DS2Message.PacketLengthMin) { Message dBusMessage = DBusMessage.TryCreate(messageBuffer, messageBufferLength); Message ds2Message = DS2Message.TryCreate(messageBuffer, messageBufferLength); Message m = ds2Message ?? dBusMessage; if (m == null) { if (!DBusMessage.CanStartWith(messageBuffer, messageBufferLength)) { Logger.Trace("Buffer skip: non-dBus data detected: " + messageBuffer[0].ToHex()); SkipBuffer(1); continue; } return; } ProcessMessage(m); //#if DEBUG //m.PerformanceInfo.TimeEnqueued = DateTime.Now; //#endif //messageReadQueue.Enqueue(m); SkipBuffer(m.PacketLength); } lastMessage = DateTime.Now; } }
static void iBus_DataReceived(object sender, SerialDataReceivedEventArgs e) { ISerialPort port = (ISerialPort)sender; if (port.AvailableBytes == 0) { Logger.Warning("Available bytes lost! " + port.ToString()); return; } lock (bufferSync) { byte[] data = port.ReadAvailable(); #if DEBUG //Logger.Info(data.ToHex(' '), "<!"); #endif /*#if DEBUG // TODO remove #if after tests * if (messageBufferLength > 0) * { * Logger.Warning("WD"); * var elapsed = (DateTime.Now - lastMessage).GetTotalMilliseconds(); * if (elapsed > messageReadTimeout) * { * Logger.Warning("Buffer skip: timeout ("+elapsed+"ms) data: " + messageBuffer.SkipAndTake(0, messageBufferLength).ToHex(" ")); * messageBufferLength = 0; * } * } #endif*/ if (messageBufferLength + data.Length > messageBuffer.Length) { Logger.Info("Buffer overflow. Extending it. " + port.ToString()); byte[] newBuffer = new byte[messageBuffer.Length * 2]; Array.Copy(messageBuffer, newBuffer, messageBufferLength); messageBuffer = newBuffer; } if (data.Length == 1) { messageBuffer[messageBufferLength++] = data[0]; } else { Array.Copy(data, 0, messageBuffer, messageBufferLength, data.Length); messageBufferLength += data.Length; } while (messageBufferLength >= Message.PacketLengthMin) { Message m = Message.TryCreate(messageBuffer, messageBufferLength); if (m == null) { if (!Message.CanStartWith(messageBuffer, messageBufferLength)) { Logger.Warning("Buffer skip: non-iBus data detected: " + messageBuffer[0].ToHex()); SkipBuffer(1); continue; } return; } ProcessMessage(m); //#if DEBUG //m.PerformanceInfo.TimeEnqueued = DateTime.Now; //#endif //messageReadQueue.Enqueue(m); SkipBuffer(m.PacketLength); } lastMessage = DateTime.Now; } }
protected virtual void bus_DataReceived(object sender, SerialDataReceivedEventArgs e) { ISerialPort port = (ISerialPort)sender; if (port.AvailableBytes == 0) { Logger.Warning("Available bytes lost! " + port.ToString()); return; } lock (bufferSync) { byte[] data = port.ReadAvailable(); if (messageBufferLength + data.Length > messageBuffer.Length) { Logger.Warning("Buffer overflow. Extending it. " + _portName); byte[] newBuffer = new byte[messageBuffer.Length * 2]; Array.Copy(messageBuffer, newBuffer, messageBufferLength); messageBuffer = newBuffer; } if (data.Length == 1) { #if DebugOnRealDeviceOverFTDI && OnBoardMonitorEmulator // remove 0x00 when FTDI sends it for first time if (data[0] == 0x00) { return; } #endif messageBuffer[messageBufferLength++] = data[0]; } else { Array.Copy(data, 0, messageBuffer, messageBufferLength, data.Length); messageBufferLength += data.Length; } bool shouldDisplayCorruptedMessageBuffer = true; while (messageBufferLength >= Message.PacketLengthMin) { Message m = Message.TryCreate(messageBuffer, messageBufferLength); if (m == null) { if (!Message.CanStartWith(messageBuffer, messageBufferLength)) { if (shouldDisplayCorruptedMessageBuffer) { //Logger.Warning("Buffer skip: non-" + _portName + " data detected: " + messageBuffer[0].ToHex()); //Logger.Warning("Buffer skip: non-" + _portName + " data detected: " + messageBuffer.ToHex()); shouldDisplayCorruptedMessageBuffer = false; } SkipBuffer(1); continue; } return; } ProcessMessage(m); //#if DEBUG //m.PerformanceInfo.TimeEnqueued = DateTime.Now; //#endif //messageReadQueue.Enqueue(m); SkipBuffer(m.PacketLength); shouldDisplayCorruptedMessageBuffer = true; } lastMessage = DateTime.Now; } }