/// <summary> /// Обработать событие приёма данных по последовательному порту /// </summary> protected void serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e) { KPLogic targetKP = null; if (!ExecProcUnreadIncomingReq(kpList[0], serialConn, ref targetKP)) { serialConn.DiscardInBuffer(); } }
/// <summary> /// Listens to the serial port for incoming data. /// </summary> /// <remarks>This methods works in a separate thread. Is used in Mono.</remarks> protected void ListenSerialPort() { byte[] buffer = new byte[SlaveInBufLen]; int readCnt = 0; int prevReadCnt = 0; while (!terminated) { try { serialConn.SerialPort.ReadTimeout = 0; try { readCnt += serialConn.SerialPort.Read(buffer, readCnt, SlaveInBufLen - readCnt); } catch (TimeoutException) { } Thread.Sleep(ReadIntervalTimeout); if (prevReadCnt == readCnt && readCnt > 0 || readCnt == SlaveInBufLen) { KPLogic targetKP = null; if (!ExecProcIncomingReq(firstKP, buffer, 0, readCnt, ref targetKP)) { serialConn.DiscardInBuffer(); } readCnt = 0; } prevReadCnt = readCnt; } catch (Exception ex) { WriteToLog(string.Format(Localization.UseRussian ? "Ошибка при прослушивании последовательного порта: {0}" : "Error listening to the serial port: {0}", ex.Message)); } } }