private DaqData ProcessPacket(List <DaqDataPacket> packets, DaqDataPacket packet) { DaqData result = null; if (packet.DataType == DaqDataType.DAQ_DATA) { packets.Add(packet); if (lastGaps != null && packets.Count == PacketCountFor1Sec) { result = PopAndProcessAsyncPackets(packets); } } else if (packet.DataType == DaqDataType.GAP_DATA) { if (lastGaps == null) { //연결 후 처음 gap 받은 시점(이전의 DAQ_DATA는 미완성 데이타) packets.Clear(); } var gapAndRpm = packet.ToWords(); lastGaps = gapAndRpm.Take(8).Select(w => ConvertGap(w)).ToArray(); lastRpm1 = ConvertRpm(packet.Bytes, 16); lastRpm2 = ConvertRpm(packet.Bytes, 20); } return(result); }
public DaqData FetchData() { List <DaqDataPacket> packets = new List <DaqDataPacket>(); DaqData result = null; while (result == null) { var packet = DaqDataPacket.RecvDataPacket(this, qs, "fetch", trace); result = ProcessPacket(packets, packet); } return(result); }
//모자른 만큼만 추가로 스트림에서 읽음 public byte[] PullLast(int size) { var readSize = size - byteQueue.Count; if (readSize <= 0) { return(byteQueue.Take(size).ToArray()); } var block = DaqDataPacket.ReadBlock(stream, readSize); foreach (var b in block) { byteQueue.AddLast(b); } return(byteQueue.Take(size).ToArray()); }