/* 1. Compiler: TC 2.0 2. Mode: Large 3. Project: Echocom4.prj Echocom4.c ..\lib\8000l.lib ..\lib\tcpipl.lib 4. Explain: Creating a connection from pc and 8831 to control the 7060. * Press "*bBAUD" to change baudrate Press 'q'(not 'Q') to quit. Press 's'(not 'S') to toggle checksum mode. 5. Hordware: 8831 It's compiled by Tony ----------------------------------------------------- */ #include #include #include #include #include #include"..\LIB\8000.h" #include"..\LIB\vxcomm.h" /*-----------------------------------------------------*/ unsigned no; unsigned char buf[80]; unsigned char OutBuf[80],OutCmd[80]={0}; int idx=0,LastIdx=0; int outidx=0; unsigned long far * const TimeTick=(unsigned long far *)0x0040006CL; void ShowHelp(void) { Puts("\n\rCommand line option:"); Puts("\n\r/bxxxx : set baudrate to xxxx"); Puts("\n\r/cx : set checksum enable(x=1) or Disable(x=0)"); Puts("\n\r--------------------------------------------------"); Puts("\n\roperation Command:"); Puts("\n\r/bxxxx : change baudrate to xxxx"); Puts("\n\r/cx : set checksum enable(x=1) or Disable(x=0)"); Puts("\n\r/a : scan 7000 modules use current setting"); Puts("\n\r/exxx : Set end scan address"); Puts("\n\r/sxxx : Set start scan address"); Puts("\n\rOthers cmd will send to Com1"); Puts("\n\rJust press ENTER will repeat last command\n\r"); } void main(int argc,char *argv[]) { long baud=9600,newbaud,timeout=48; int quit=0; int data; int i; int checksum=0; int fSearch=0; int Addr,EndAddr=255,StartAddr=0; int ShowPrompt=1; unsigned wait=0,wait1=0; unsigned long st; char *Prompt="Echo485>"; if(!Is8000()){ /*detect the current operation system*/ Print("\n\rEcho485.exe must run on I-8831!"); return; } for(i=1;i",Addr); goto SendCmd; } else { if((*TimeTick-st)>=timeout) { wait=0; Addr++; if(Addr>EndAddr){ fSearch=0; Print("\n\r"); ShowPrompt=1; } } } } if(Kbhit()){ data=Getch(); if(data=='\b'){ if(outidx){ outidx--; Putch(data); } } else { Putch(data); if(data=='\r'){ unsigned char sum; ClearCom4(); Putch('\n'); if(outidx) OutBuf[outidx]=0; if(outidx && OutBuf[0]=='/'){ switch(OutBuf[1]){ case 'b': case 'B': newbaud=atol(OutBuf+2); if(NoError==SetBaudrate2(newbaud)) { baud=newbaud; Print("Change baudrate to %ld\n\r",baud); } break; case 'c': case 'C': checksum=atoi(OutBuf+2); Print("CheckSum %s\n\r",checksum ? "Enable":"Disable"); break; case 'a': case 'A': fSearch=1; Addr=StartAddr; Print("Scan from Addr %d(%02X) to %d(%02X)\n\r",StartAddr,StartAddr,EndAddr,EndAddr); break; case 'e': case 'E': EndAddr=atoi(OutBuf+2); EndAddr &= 0xFF; if(EndAddrEndAddr) StartAddr=EndAddr; Print("Set Start scan address to %d(%02X)\n\r",StartAddr,StartAddr); break; /*case 'h': { extern unsigned long Com1InterruptCount; Print("Count=%lu\n\r",Com1InterruptCount); } break;*/ case 't': case 'T': timeout=atol(OutBuf+2); if(timeout<2) timeout=2; Print("Set timeout=%ld\n\r",timeout); break; case '?': ShowHelp(); break; case 'q': case 'Q': quit=1; break; default: Print("Unknown command\n\r"); break; } outidx=0; ShowPrompt=1; } else { SendCmd: if(outidx){ if(!wait){ LastIdx=outidx; strcpy(OutCmd,OutBuf); } } else { outidx=LastIdx; strcpy(OutBuf,OutCmd); } Print("[%s",OutBuf); sum=0; for(i=0;i>4])); Putch(i); ToCom4((i=hex_to_ascii[sum&0xf])); Putch(i); } ToCom4('\r'); Puts("]-->"); outidx=0; st=*TimeTick; if(!wait) wait1=1; } } else { OutBuf[outidx++]=data; } } } if(IsCom4()){ data=ReadCom4(); if(data=='\r'){ buf[idx]=0; wait1=0; Print(" {%lu ms}",*TimeTick-st); if(checksum){ unsigned char sum=0; int i; for(i=0;i>4] || buf[i+1] != hex_to_ascii[sum&0x0f]) { Print(" Check sum error,must be %02X",sum); } } idx=0; if(wait){ Print(" wait=%u",wait); wait=0; Addr++; if(Addr>EndAddr){ fSearch=0; Print("\n\r"); ShowPrompt=1; } } else ShowPrompt=1; Putch(data); Putch('\n'); } else { Putch(data); buf[idx++]=data; if(idx>=79) idx=78; } } else if(wait1 && (*TimeTick-st)>=timeout){ Print("{timeout!}\n\r"); ShowPrompt=1; wait1=0; } } RestoreCom4(); }