#include #include #include #include #include"..\lib\8000.h" #define MAX_CMD_NO 130 int argc=0; char *argv[MAX_CMD_NO]; #define CMD_BUFFER_SIZE 81 int NoPrompt; int CmdIdx=0; int CommandInput=0; char CmdBuf[CMD_BUFFER_SIZE]; char *PromptCom0="[7000]"; char Com2CmdBuf[80]; unsigned timeout=250; const unsigned long far *TickCount=(unsigned long far *)0x0040006CL; unsigned long GetTimeTick(void) { return *TickCount; } char CmdBuffer[256]; int CommandToArg(char *cmd) { int i; int mode=0; argc=0; strcpy(CmdBuffer,cmd); cmd=CmdBuffer; while(*cmd){ if(mode){ if(*cmd==' '){ *cmd=0; mode=0; } } else { if(*cmd != ' '){ argv[argc]=cmd; argc++; mode=1; if(argc >= MAX_CMD_NO) break; } } cmd++; } return argc; } int lastdata; void GetCommand(void) { int data; if(CmdIdx >= CMD_BUFFER_SIZE-1) return; while(Kbhit()){ data=Getch(); if(lastdata!='\n'&& data=='\r') Putch('\n'); lastdata=data; if(data=='\n' || data=='\r'){ Putch(data); /* echo input cmd */ CmdBuf[CmdIdx]=0; CommandInput=1; CmdIdx=0; break; } else if(data==8){ /* //backspace */ if(CmdIdx){ Putch(data); /* echo input cmd */ CmdIdx--; } } else { Putch(data); /* echo input cmd */ CmdBuf[CmdIdx++]=data; if(CmdIdx >= CMD_BUFFER_SIZE-1) break; } } } void main(void) { int quit=0; int key; unsigned long EndTime,StartTime; int WaitEcho=0; int AutoScan=0,StopAutoScan=0; int AutoAddr=0; int ShowPrompt=1; int Slot=1; static int StartAddr=0,EndAddr=255; long baud; void SetCom2Baud(long baud); InstallCom0(115200,8,0); /* COM0 alwaye 115200,N,8,1 */ Slot=2; ChangeToSlot(Slot); /* outp(0,1<<(Slot-1)); */ while(!quit){ if(ShowPrompt) { ShowPrompt=0; Puts(PromptCom0); } GetCommand(); if(CommandInput){ CommandInput=0; if(CommandToArg(CmdBuf)){ /* Print("Argc=%d Argv[0]=%s\n\r",argc,argv[0]); */ if(argc==1){ if(AutoScan && argv[0][0]=='q') StopAutoScan=1; if(!stricmp(argv[0],"exit") || !stricmp(argv[0],"quit")){ quit=1; } else if(!stricmp(argv[0],"scan")){ AutoScan=1; AutoAddr=StartAddr; ShowPrompt=1; } else { ToCom0Str(argv[0]); ToCom0('\r'); EndTime=(StartTime=GetTimeTick())+timeout; WaitEcho=1; Print("Slot%d Echo]",Slot); } } else if(argc==2){ if(!stricmp(argv[0],"start")){ key=atoi(argv[1]); if(key>=0 && key <=255) { StartAddr=key; if(EndAddr=0 && key <=255) { EndAddr=key; if(StartAddr>EndAddr) StartAddr=EndAddr; Print("StartAddr=%d(%02X)\n\rEndAddr=%d(%02X)\n\r", StartAddr,StartAddr,EndAddr,EndAddr); } else Print("Error: must 0 <= address <= 255\n\r"); ShowPrompt=1; } else if(!stricmp(argv[0],"timeout")){ timeout=atoi(argv[1]); Print("set Timeout to %d\n\r",timeout); } else if(!stricmp(argv[0],"slot")){ if(argc>=2) { Slot=atoi(argv[1]); if(Slot<1 || Slot >4) Slot=1; outp(0,1<<(Slot-1)); // set slot } Print("Change to SLOT %d\n\r",Slot); ShowPrompt=1; } else { Print("Error command!\n\r"); ShowPrompt=1; } } } } if(AutoScan && !WaitEcho){ Print("\rScan %02X",AutoAddr); sprintf(Com2CmdBuf,"@00%02X\r",AutoAddr); ToCom0Str(Com2CmdBuf); EndTime=(StartTime=GetTimeTick())+timeout; WaitEcho=1; } while(IsCom0()){ key=ReadCom0(); if(key=='\r') { Print("{%ldms}\n\r",GetTimeTick()-StartTime); if(WaitEcho) WaitEcho=0; if(AutoScan){ if(!StopAutoScan){ Delay(100); AutoAddr++; if(AutoAddr>EndAddr){ AutoAddr=0; ShowPrompt=1; } } else AutoScan=StopAutoScan=0; } else { ShowPrompt=1; } } else Putch(key); } if(WaitEcho && (GetTimeTick() > EndTime) ){ WaitEcho=0; if(!AutoScan){ Print("!!! Timeout !!!\n\r%s",PromptCom0); } else if(!StopAutoScan){ AutoAddr++; if(AutoAddr>EndAddr){ AutoScan=AutoAddr=0; Puts("\n\r"); ShowPrompt=1; } } else { AutoScan=StopAutoScan=0; ShowPrompt=1; } } } RestoreCom0(); }