RF Card Serial DataReceived Split Byte Process
int byte_int = 0;
byte[] rcvByteFinal = new byte[10]; // RF카드 10자리 Byte 세팅
private void serial_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
try
{
if (!serial.IsOpen) return; // serial 오픈 확인.
int bytes = serial.BytesToRead;
byte[] buffer = new byte[bytes];
byte[] rcvByte = new byte[bytes];
serial.Read(buffer, 0, bytes);
Array.Copy(buffer, 0, rcvByte, 0, bytes);
// buffer 0 위치부터 bytes 길이만큼 rcvByte 0~bytes에 복사한다.
Array.Clear(buffer, 0, bytes); // buffer 초기화
Array.Copy(rcvByte, 0, rcvByteFinal, byte_int, bytes); // rcvByteFinal에 넣고 또 놓고. 10자리까지 누적
byte_int += bytes; // 누적 Byte Length
for (int i = 0; i < bytes; i++) //메인 루프
{
if (rcvByte[i] == 0x03) // ETX 종료 Byte를 찾는다.
{
if (rcvByteFinal != null)
{
RcvText(rcvByteFinal); // 10자리 RF카드 번호를 모두 받아 왔으니 이제 카드번호를 처리한다.
rcvByteFinal = null; //초기화
rcvByteFinal = new byte[10]; // RF카드번호 10자리 세팅
byte_int = 0; // 누적 byte Length 초기화
}
}
}
Array.Clear(rcvByte, 0, bytes); // rcvByte 초기화
}
catch (Exception Ex)
{
MessageBox.Show(Ex.Message);
}
}