public uMCPInoPort(string portName, BaudRate baudrate, bool selectDefaultState, uint selectIntMs, uint timeoutIntMs, byte packetSize, byte maxMessages) { timer = new PrecisionTimer(); timer.Period = 100; timer.Mode = Mode.Periodic; timer.Tick += (o, e) => { node.OnTick(); }; node = new uMCPInoNode(selectDefaultState, timeoutIntMs, selectIntMs, packetSize, maxMessages); node.OnSTATEChangedEventHandler += (o, e) => { OnStateChangedEventHandler.Rise(this, e); }; node.OnSELECTChangedEventHandler += (o, e) => { OnSelectChangedEventHandler.Rise(this, e); }; node.OnDataBlockAcknowledgedEventHandler += (o, e) => { OnDataBlockAcknowledgedEventHandler.Rise(this, e); }; node.OnDataBlockReceivedEventHandler += (o, e) => { OnDataBlockReceivedEventHandler.Rise(this, e); }; node.OnActionInfoEventHandler += (o, e) => { OnActionInfoEventHandler.Rise(this, e); }; node.OnTransmitterEmptyEventHandler += (o, e) => { OnTransmitterEmptyEventHandler.Rise(this, e); }; node.OnOutcomingEventHandler += new EventHandler <uMCPInoDataEventArgs>(node_OnOutcomingEventHandler); port = new SerialPort(portName, (int)baudrate); port.DataReceived += (o, e) => { var data = new byte[port.BytesToRead]; port.Read(data, 0, data.Length); node.OnIncomingData(data); }; port.ErrorReceived += (o, e) => { PortErrorEventHandler.Rise(this, e); }; }
private void onDTADTE(uMCPPacket packet) { DTADTEReceived++; if (state == uMCPState.RUNNING) { uMCPDATAPacket dPacket = (packet as uMCPDATAPacket); if (dPacket.TCNT <= R + 1) { if (dPacket.TCNT == Convert.ToByte((R + 1) % 256)) { R++; OnDataBlockReceivedEventHandler.Rise(this, new uMCPDataEventArgs(dPacket.DATA)); BytesReceived += Convert.ToUInt32(dPacket.DATA.Length); } SACK = true; } SREP = false; IsTimeoutTimerRunning = false; if ((dPacket.RCNT == N) || (IsByteInRangeExclusive(A, N, dPacket.RCNT))) { AcknowledgeSentItems(dPacket.RCNT); } if (dPacket.PTYPE == uMCPPacketType.DTA) { IsTimeoutTimerRunning = true; } SELECT = (dPacket.PTYPE == uMCPPacketType.DTE); } }