-
[C#]Serial 버퍼 Data 이어 붙이기C#/WPF_예제소스 2022. 3. 28. 11:28
private void SP_TempData() { Buffer.BlockCopy(bTemp, 0, bBuffer, 0, iTempLen); //iTempLen == bTemp.length while ((iBuffLen + iTempLen) < bBuffer.Length) { try { int len = sp.Read(bBuffer, iTempLen + iBuffLen, (bBuffer.Length - (iTempLen + iBuffLen))); iBuffLen += len; } catch (Exception ex) { break; } } iBuffLen = 0; iSyncHeader = SyncChar.Length + bHeader.Length + bReserved.Length; // 8바이트 + 8바이트 + 8바이트 = 24바이트 for (int offsetNo = 0; offsetNo < intBytes - SyncChar.Length; offsetNo++) { int okLen = 0; for (int okNo = 0; okNo < SyncChar.Length; okNo++) { if (bBuffer[offsetNo + okNo] == SyncChar[okNo]) okLen++; } if (okLen == SyncChar.Length) { iDataNo = offsetNo + iSyncHeader; iTempLen = bBuffer.Length - (iDataNo + idataLen); if (iTempLen < 0) iTempLen = 0; Buffer.BlockCopy(bBuffer, offsetNo + okLen, bHeader, 0, bHeader.Length); // 헤더파싱 if (intBytes - iDataNo >= idataLen) // 버퍼가 온도 데이터크기 이상일 경우 { try { Buffer.BlockCopy(bBuffer, iDataNo, bData, 0, bData.Length); Buffer.BlockCopy(bBuffer, iDataNo + idataLen, bTemp, 0, iTempLen); // 남은 바이트 bTemp에 보관 UpdateFrameData(spID, bData); break; } catch (Exception ex) { Debug.WriteLine(ex.Message); } } else // 버퍼가 온도 데이터 크기보다 작을 경우 { try { sp.Read(bTemp, 0, idataLen - (intBytes - iDataNo)); //부족한 온도데이터만큼 읽어들여서 intBytes == bBuffer.length Buffer.BlockCopy(bBuffer, iDataNo, bData, 0, (intBytes - iDataNo)); //bData에 버퍼의 온도데이터 파싱 Buffer.BlockCopy(bTemp, 0, bData, (intBytes - iDataNo), idataLen - (intBytes - iDataNo)); //bData에 부족한 온도데이터 파싱 iTempLen = 0; UpdateFrameData(spID, bData); break; } catch (Exception ex) { Debug.WriteLine(ex.Message); } } } } if (iArrData != null) { iSenNo = bHeader[0]; EventFrameDataHandler?.Invoke(iSenNo, iArrData); // MainWindow에서 EventFrameDataHandler에 추가한 메소드 실행. } string bufferValue = BitConverter.ToString(bBuffer);//.Replace("-", ""); Debug.Write(bufferValue); Debug.WriteLine(""); Debug.WriteLine(bBuffer.Length); Debug.WriteLine("Header: " + BitConverter.ToString(bHeader)); Debug.WriteLine("Sensor No: " + iSenNo); }
728x90'C# > WPF_예제소스' 카테고리의 다른 글
[C#]CSV파일 (0) 2022.03.30 [C#] 파일경로 설정 (0) 2022.03.29 [C#]Polygon (0) 2022.02.28 [C#]Viewport2DVisual3D (0) 2022.02.28 [C#] Thread vs Threadstart (0) 2022.02.18 댓글