|
void __fastcall TForm1::ComPort2RxChar(TObject *Sender, int Count)
{
len = ComPort2->ReadStr(Str, Count);
memset(imsi, 0, 4097);
for(i=1; i<=len; i++) imsi[i-1] = Str[i];
strncat(tcpTmpBuf, imsi, StrLen(imsi));
for(a=0, index=0, start=0; a<StrLen(tcpTmpBuf); a++)
{
if(tcpTmpBuf[a] == 0x02 && start==0)
{
start = 1;
memset(TempBuf, 0, 4096);
index = 0;
}
if(start==1)
{
TempBuf[index] = tcpTmpBuf[a];
index++;
}
if(tcpTmpBuf[a]==0x04 && start==1)
{
memset(tcpTmpBuf, 0, 4097);
break;
}
}
:
:
tcpTmpBuf, imsi, TempBuf모두 char형으로 배열을 잡았고요...
memset(imsi, 0, 4097);
for(i=1; i<=len; i++) imsi[i-1] = Str[i]; 이부분도 에러가 나진 않습니다.
제대로 한건지는 모르겠지만,,,
아무튼 20개까지는 들어오는 신호를 제대로 잡아줍니다.
참고로 제가 받는 신호가..
0x02로 시작해서 0x04로 끝나는 17바이트의 데이타거든요..
근데 신호가 한번에 모두 들어오는게 아니라 끊겼다가 들어곤 해서..(첨에 이걸 생각못해서 무지 애먹었죠--)
일단 Str로 받고,,
그걸 배열(imsi)에 하나씩 넣고,,
그 배열을 전역변수 배열에 카피해서 strncat(tcpTmpBuf, imsi, StrLen(imsi));
맨 마지막 for문에서 전역변수 배열을 처음부터 끝까지 검사해서 데이타를 추출해서 사용하거든요.
물론 올바른 데이타를 추츨했을 경우에는 전역변수 배열을 초기화시키고요..
|