/* demo98.c use I-7188 timer function to send/receive data to/from 7000's modules. and set timeout in time unit ms. COM2: 9600,N,8,1 RS-485 */ #include #include #include"..\lib\7188.h" unsigned char Com2Buf[80]={0}; int Com2Idx=0; int fCom2HasDataIn=0; unsigned char Com4InBuf[80]={0}; int Com4Idx=0; int CheckSum=0; unsigned long Timeout=500; /* default timeout=0.5 sec */ int bWait485Echo=0; int fTimeOut=0; void MonitorCom2(void) { unsigned char data; while(IsCom(2)){ data=ReadCom(2); if(data=='\r'){ Com2Buf[Com2Idx]=0; fCom2HasDataIn=1; break; } else { Com2Buf[Com2Idx++]=data; } } if(bWait485Echo && !fCom2HasDataIn){ unsigned long t; StopWatchReadValue(0,&t); if(t>Timeout) { fTimeOut=1; bWait485Echo=0; } } } void ToCom485(int port,unsigned char *buf,int checksum) { unsigned char sum=0; if(!(*buf)) return; Set485DirToTransmit(port); while(*buf){ ToCom(port,*buf); if(checksum){ sum+=*buf; } buf++; } if(checksum){ ToCom(port,hex_to_ascii[sum>>4]); ToCom(port,hex_to_ascii[sum&0x0f]); } ToCom(port,'\r'); WaitTransmitOver(port); Set485DirToReceive(port); } void CheckCom2Data(int checksum) { unsigned char sum=0; int i; for(i=0;i>4) || ascii_to_hex(Com2Buf[i+1])!=(sum&0x0f)){ printf("!!! Checksum error !!! (%02X)-->%c%c",sum,Com2Buf[i],Com2Buf[i+1]); } } else { putchar(Com2Buf[i++]); putchar(Com2Buf[i++]); } putchar('\r'); putchar('\n'); Com2Idx=0; } void main(int argc,char *argv[]) { int quit=0; unsigned char data; long baud=9600; if(argc>1){ baud=atol(argv[1]); if(baud<1200 || baud>115200) baud=9600; } printf("COM2,%ld,N,8,1\n",baud); InstallCom(2,baud,8,0,1); TimerOpen(); InstallUserTimer(MonitorCom2); while(!quit){ if(kbhit4()){ data=getch4(); switch(data){ case 'q': quit=1; break; case 's': CheckSum=!CheckSum; printf("\nCheckSum=%d\n",CheckSum); break; case '\r': if(Com4Idx){ Com4InBuf[Com4Idx]=0; Com4Idx=0; } putchar('\r'); putchar('\n'); ToCom485(2,Com4InBuf,CheckSum); bWait485Echo=1; StopWatchStart(0); break; case '\b': if(Com4Idx){ Com4Idx--; putchar('\b'); } break; default: Com4InBuf[Com4Idx++]=data; putchar(data); break; } } if(fTimeOut){ fTimeOut=0; bWait485Echo=0; printf(" !!! Timeout !!! \n"); } if(fCom2HasDataIn){ CheckCom2Data(CheckSum); fCom2HasDataIn=0; bWait485Echo=0; } } TimerClose(); RestoreCom(2); }