|
아래와 같이 하면 맨처음에 Hello나 Enter user name: 또는 Enter login password: 가
들어오면 리턴을 해주는데
맨처음이 아니라 데이터를 송수신 하다가 Hello 등이 들어오면 리턴을 제대로 해주지 않는군요
제가 생각할때는 초기화가 제대로 되지 않는것 같아서 그런거 같은데..
여러곳에서 초기화를 시켜줘도 계속 그러네요..
어느부분에 이상이 있는건가요?
void __fastcall TForm1::Comm1RxChar(TObject *Sender, DWORD Count)
{
char str[500];
unsigned char buffer=0;
DWORD i,j;
int k;
char Buff[100];
static unsigned char data[200],serial_number = 0;
static unsigned char serial_data[500];
String *Str_Data =new String;
Comm1->Read(serial_data,Count);
for(i=0;i<Count;i++)
{
data[serial_number] = serial_data[i] ;
if(memicmp(data,"Hello"sizeof("Hello") ) == 0)
{
memcpy(Buff, "Hi",sizeof("\n\r"));
k = Comm1->Write(Buff,sizeof("Hi"));
memset(Buff,0,100);
}
else if(memicmp(data,"Enter user name: ",sizeof("Enter user name: ") ) == 0)
{
Label5->Caption = "OK";
memcpy(Buff, "Korea\n\r",sizeof("Korea\n\r"));
k = Comm1->Write(Buff,sizeof("Korea\n\r"));
memset(Buff,0,100);
}
else if(memicmp(data,"Enter login password: ",sizeof("Enter login password") ) == 0)
{
memcpy(Buff, "Seoul\n\r",sizeof("Seoul\n\r"));
k = Comm1->Write(Buff,sizeof("Seoul\n\r"));
memset(Buff,0,100);
}
if( data[serial_number] == 0x0d )
{
if( (data[0] != 0x1b) && (data[1] != 0x1b) )
{
*Str_Data = (char)data[0];
for(j=1;j<serial_number ;j++)
{
*Str_Data = *Str_Data + (char)(data[j]);
}
Memo1->Lines->Add(*Str_Data ) ;
while(Memo1->Lines->Count>50)
Memo1->Lines->Delete(0);
Memo1->Perform(EM_LINESCROLL,0,Memo1->Lines->Count-1);
Memo1->SelStart=Memo1->Text.Length()-1;
Memo1->SelLength=1;
}
serial_number = 0;
}
else
{
serial_number++ ;
}
}
}
|