/* Demo program run on I-7188 with MiniOS7. For Trainning BOX II Using new driver to connect to Touch-200 COM2(9600) connect to: Addr #1:7013D Addr #2:7021 Addr #3:7017F Addr #4:7060D COM3(9600) connect to Touch-200: EasyView Data: W 0: Page no W 1: Bit 3-0 --> 7060 DO Bit 7-4 --> 7060 DI W 2: 7017 A/D channel 0 W 4: 7017 A/D channel 1 W 6: 7017 A/D channel 2 W 8: 7017 A/D channel 3 W 10: 7017 A/D channel 4 W 12: 7017 A/D channel 5 W 14: 7017 A/D channel 6 W 16: 7017 A/D channel 7 W 20: 7021 D/A output W 22: 7013 every 100ms read 7013D 1 time every 500ms read 7017F 1 time */ #include #include #include #include "..\lib\i7188.h" #define NoError 0 #define Error 1 #define NoCard 2 #define DLE 0x10 #define STX 0x02 #define ACK 0x06 #define NAK 0x15 #define ETX 0x03 #define DATA_SIZE 30 void AddNextWork(int work); unsigned long tNow; unsigned long t7017,t7013,t7021,t7060; int Do7013=0; int Do7017=0; int Do7021=0; int Do7060_i=0; int Do7060_o=0; #define WORK_7013 1 #define WORK_7017 2 #define WORK_7021 4 #define WORK_7060i 8 #define WORK_7060o 16 #define LIST_NO 16 unsigned long far * const TimeTick=(unsigned long far *)0x0040006CL; unsigned Data7[512]; unsigned NewData[DATA_SIZE]; int ShowMessage=0; char szCmd1[80]; int ComPort=3; /* this value can be 1/3/4 --> COM 1/3/4 */ int read_touch7(int *TouchType, int *TouchAddr, int *TouchValue); int write_to_easyview_1(int addr, unsigned int value); int write_to_easyview_2(int addr, int onoff); int ascii_to_hex(char c); /* ------------------------------------------------------------------- */ /* ------------------------------------------------------------------- */ int read_touch7(int *TouchType, int *TouchAddr, int *TouchValue) { int i,rep,t; char c,str[80]; int retval[20],maxi; char type,onoff; int addr; unsigned int value; if (ComPort!=4 && (ShowMessage & 16)) Print(" -> is touch7"); ToCom(ComPort,ACK); /* send ACK to EASYVIEW */ i=0; rep=0; for (;;) { t=0; while (IsCom(ComPort)==0) { t++; if (t>32760) return(1); /* time out */ } c=ReadCom(ComPort); if(i==0) { if (c==1) {type=1; maxi=9;} else if (c==2) {type=2; maxi=7;} else return(2); /* error cmd */ } else if (type==1) { /* DLE will repeat */ if ((i>=1) && (i<=5) && (c==DLE)) { if (rep==0) rep=1; else rep=0; } } else if (type==2) { /* DLE will repeat */ if ((i>=1) && (i<=3) && (c==DLE)) { if (rep==0) rep=1; else rep=0; } } if (rep==0) { szCmd1[i]=c; i++; if (i>=maxi) break; } } rec_ok: ToCom(ComPort,ACK); /* send ACK to EASYVIEW */ if (type==1) { addr=*(int *)(szCmd1+1); value=*(unsigned int*)(szCmd1+4); *TouchType=1; *TouchAddr=addr; *TouchValue=value; if (ComPort!=4 && (ShowMessage & 16) ) Print(" * type=1, addr=%d, value=%d",addr,value); write_to_easyview_1(addr,value); } else if (type==2) { addr=*(int *)(szCmd1+1); value=szCmd1[3]; *TouchType=2; *TouchAddr=addr; *TouchValue=value; if (ComPort!=4 && (ShowMessage & 16)) Print(" * type=2, addr=%d, value=%d",addr,value); /* write_to_easyview_2(addr,value); */ } return(NoError); /* receive OK */ } /* ------------------------------------------------------------------- */ char cCmd1[9]={ 1, /* 01 */ 0, /* addr_l */ 0, /* addr_h */ 2, /* # */ 0, /* data_l */ 0, /* data_h */ DLE, /* DLE */ ETX, /* ETX */ 0, /* checksum */ }; int write_to_easyview_1(int addr, unsigned int value) { int iRet,i,j,retval[20],hh,ll,val_l,val_h,t; unsigned char xor; char c; int SendTime=0; SendAgain: ToCom(ComPort,STX); /* send STX to EASYVIEW */ t=0; while (IsCom(ComPort)==0){ t++; if (t>32760) return(1); /* time out */ } c=ReadCom(ComPort); if (c==ACK) goto rec_ack; /* receive a ACK from easyview */ return(2); rec_ack: ll=addr&0xff; hh=(addr>>8)&0xff; val_l=value&0xff; val_h=(value>>8)&0xff; /* cCmd1[0]=1;*/ /* 01 */ cCmd1[1]=ll; /* addr_l */ cCmd1[2]=hh; /* addr_h */ /* cCmd1[3]=2; */ /* # */ cCmd1[4]=val_l; /* data_l */ cCmd1[5]=val_h; /* data_h */ /* cCmd1[6]=0x10;*/ /* DLE */ /* cCmd1[7]=0x03;*/ /* ETX */ xor=0; for (i=0; i<=5; i++) { xor = xor ^ cCmd1[i]; retval[i]=ToCom(ComPort,cCmd1[i]); if(cCmd1[i]==DLE){ retval[i]=ToCom(ComPort,cCmd1[i]); xor = xor ^ cCmd1[i]; } } xor = xor ^ DLE ^ ETX; retval[6]=ToCom(ComPort,DLE); retval[7]=ToCom(ComPort,ETX); cCmd1[8]=xor; /* CheckSum */ retval[i]=ToCom(ComPort,xor); t=0; while (IsCom(ComPort)==0) { t++; if (t>3000) return(3); /* time out */ Delay(1); } c=ReadCom(ComPort); if (c==ACK) goto rec_ack2; /* receive a ACK from easyview */ else if(c==NAK){ SendTime++; if(SendTime<2){ goto SendAgain; } else return(4); } rec_ack2: return(0); } /* ------------------------- */ char cCmd2[7]={ 2, /* 02 */ 0, /* addr_l */ 0, /* addr_h */ 0, /* #1/0 */ 0x10, /* DLE */ 0x03, /* ETX */ 0, /* checksum */ }; int write_to_easyview_2(int addr, int onoff) { int iRet,i,xor,j,retval[20],hh,ll,val_l,val_h,t; char c; ToCom(ComPort,STX); /* send ACK to EASYVIEW */ t=0; while (IsCom(ComPort)==0) { if (++t>32760) return(1); /* time out */ } c=ReadCom(ComPort); if (/*(iRet==0) &&*/ (c==ACK)) goto rec_ack; /* receive a ACK from easyview */ return(2); rec_ack: ll=addr&0xff; hh=(addr>>8)&0xff; /*cCmd2[0]=2;*/ /* 02 */ cCmd2[1]=ll; /* addr_l */ cCmd2[2]=hh; /* addr_h */ cCmd2[3]=onoff; /* #1/0 */ /*cCmd2[4]=0x10; */ /* DLE */ /*cCmd2[5]=0x03; */ /* ETX */ xor=0; for (i=0; i<=3; i++) { xor = xor ^ cCmd2[i]; retval[i]=ToCom(ComPort,cCmd2[i]); if(cCmd2[i]==DLE){ retval[i]=ToCom(ComPort,cCmd2[i]); xor = xor ^ cCmd2[i]; } } xor = xor ^ DLE ^ ETX; retval[4]=ToCom(ComPort,DLE); retval[5]=ToCom(ComPort,ETX); retval[6]=ToCom(ComPort,xor); t=0; while (IsCom(ComPort)==0) { if (++t>500) return(3); /* time out */ Delay(1); } c=ReadCom(ComPort); if (c==ACK) goto rec_ack2; /* receive a ACK from easyview */ return(4); rec_ack2: return(0); } static unsigned Serror7013=0,Rerror7013=0; static unsigned Serror7017=0,Rerror7017=0; static unsigned Serror7060=0,Rerror7060=0; static unsigned Serror7021=0,Rerror7021=0; unsigned _7060data; int DataOut(void) {int ret; int i; if(!IsCom(ComPort)) { if(Data7[22]!=NewData[22]){ Data7[22]=NewData[22]; ret=write_to_easyview_1(22,Data7[22]); if(ret!=NoError){ if(ShowMessage & 32) Print("\n\rError:Write to easyview[%d]",ret); } } if(Data7[1]!=NewData[1]){ Data7[1]=NewData[1]; ret=write_to_easyview_1(1,Data7[1]); if(ret!=NoError){ if(ShowMessage & 32) Print("\n\rError:Write to easyview[%d]",ret); } } for(i=2;i<=16;i+=2){ if(Data7[i]!=NewData[i]){ Data7[i]=NewData[i]; ret=write_to_easyview_1(i,Data7[i]); if(ret!=NoError){ if(ShowMessage & 32) Print("\n\rError:Write to easyview %d [%d]",i,ret); } } } } return ret; } typedef struct { int type; unsigned addr; unsigned word; } MemMap; #define TOUCH_DATA_NO 32 MemMap TouchData[TOUCH_DATA_NO]; int TouchInIdx=0,TouchOutIdx=0; void AddTouchData(int type,int addr,unsigned data) { if(((TouchInIdx+1) & (TOUCH_DATA_NO-1)) != TouchOutIdx){ TouchData[TouchInIdx].type=type; TouchData[TouchInIdx].addr=addr; TouchData[TouchInIdx].word=data; if(ShowMessage & 32) Print("\n\r[Add Touch %d(%d %d %d)]",(TouchInIdx-TouchOutIdx)&(TOUCH_DATA_NO-1),type,addr,data); TouchInIdx=(TouchInIdx+1) & (TOUCH_DATA_NO-1); } } MemMap *GetNextTouchWork(void) { MemMap *ret=NULL; if(TouchInIdx!=TouchOutIdx){ ret=&TouchData[TouchOutIdx]; TouchOutIdx++; TouchOutIdx&=(TOUCH_DATA_NO-1); } return ret; } void DoTouch200(void) { static int CurWork=0; static MemMap *MMp=NULL,MM; static int CurMode=0; static int retrycount=0,retrycount1=0; static unsigned long st; static int maxlen; if(CurMode){ /* Receive Data from Touch-200 */ static int type=0; static int addr; static unsigned value; static int mode=0; static int rep=0; static int idx=0; while(IsCom(ComPort)){ switch(mode){ case 0: szCmd1[0]=type=ReadCom(ComPort); if(type==1) { mode=1; maxlen=9; idx=1; } else if(type==2) { maxlen=7; mode=1; idx=1; } else { /* error type */ } break; case 1: /* for type=1 */ if(DLE==(szCmd1[idx]=ReadCom(ComPort))){ if(rep) goto Newdata; else { if(type==1){ if(idx<=5) { rep=1; break; } else goto Newdata; } else { if(idx<=3) { rep=1; break; } else goto Newdata; } } } else { Newdata: rep=0; idx++; } if(idx>=maxlen){ /* check data first */ ToCom(ComPort,ACK); /* send ACK to EASYVIEW */ if (type==1) { addr=*(int *)(szCmd1+1); value=*(unsigned int*)(szCmd1+4); // *TouchType=1; *TouchAddr=addr; *TouchValue=value; if (ComPort!=4 && (ShowMessage & 16) ) Print("\n\r* type=1, addr=%d, value=%d",addr,value); // PushTouchData(1,addr,value); AddTouchData(1,addr,value); Show5DigitLed(1,value); } else if (type==2) { addr=*(int *)(szCmd1+1); value=szCmd1[3]; // *TouchType=2; *TouchAddr=addr; *TouchValue=value; if (ComPort!=4 && (ShowMessage & 16)) Print("\n\r* type=2, addr=%d(%d.%X), value=%d",addr,addr>>4,addr&0x0F,value); /* write_to_easyview_2(addr,value); */ AddTouchData(2,addr,value); // PushTouchData(2,addr,value); if(addr>=16 && addr<=19){ if(value) Data7[addr>>4] |= 1<<(addr&0x0F); else Data7[addr>>4] &=~(1<<(addr&0x0F)); Show5DigitLed(3,value); _7060data=Data7[1]&0x0F; AddNextWork(WORK_7060o); } } /* if OK */ mode=0; CurMode=0; } break; case 2: /* for type=2 */ break; } } } else { if(!CurWork){ if(IsCom(ComPort)){ if(ReadCom(ComPort)==STX){ ToCom(ComPort,ACK); CurMode=1; } } else { MMp=GetNextTouchWork(); if(MMp) { MM=*MMp; CurWork=1; retrycount=retrycount1=0; } } } if(MMp){ switch(CurWork){ case 1: /* send STX to EASYVIEW */ ToCom(ComPort,STX); CurWork=2; st=*TimeTick; break; case 2: /* Wait ACK from EASYVIEW */ if(IsCom(ComPort)){ if(ReadCom(ComPort)==ACK){ CurWork=3; } } else { if(*TimeTick-st > 10){ /* time out */ retrycount++; if(retrycount<3){ CurWork=1; } else { CurWork=0; MMp=NULL; if(ShowMessage & 32) Print("\n\rCannot Send data to Touch-200"); } } } break; case 3: switch(MM.type){ case 1: { unsigned char xor; int i; /* cCmd1[0]=1;*/ /* 01 */ cCmd1[1]=MM.addr&0xff; /* addr_l */ cCmd1[2]=(MM.addr>>8)&0xff; /* addr_h */ /* cCmd1[3]=2; */ /* # */ cCmd1[4]=MM.word&0xff; /* data_l */ cCmd1[5]=(MM.word>>8)&0xff; /* data_h */ /* cCmd1[6]=0x10;*/ /* DLE */ /* cCmd1[7]=0x03;*/ /* ETX */ xor=0; for (i=0; i<=5; i++) { xor ^= cCmd1[i]; ToCom(ComPort,cCmd1[i]); if(cCmd1[i]==DLE){ ToCom(ComPort,cCmd1[i]); xor ^= cCmd1[i]; } } xor = xor ^ DLE ^ ETX; ToCom(ComPort,DLE); ToCom(ComPort,ETX); cCmd1[8]=xor; /* CheckSum */ ToCom(ComPort,xor); } CurWork=4; st=*TimeTick; break; case 2: { int i; unsigned char xor; /*cCmd2[0]=2;*/ /* 02 */ cCmd2[1]=MM.addr&0xff; /* addr_l */ cCmd2[2]=(MM.addr>>8)&0xff; /* addr_h */ cCmd2[3]=MM.word; /* #1/0 */ /*cCmd2[4]=0x10; */ /* DLE */ /*cCmd2[5]=0x03; */ /* ETX */ xor=0; for (i=0; i<=3; i++) { xor ^= cCmd2[i]; ToCom(ComPort,cCmd2[i]); if(cCmd2[i]==DLE){ ToCom(ComPort,cCmd2[i]); xor ^= cCmd2[i]; } } xor = xor ^ DLE ^ ETX; ToCom(ComPort,DLE); ToCom(ComPort,ETX); ToCom(ComPort,xor); } CurWork=4; st=*TimeTick; break; default: CurWork=0; MMp=NULL; if(ShowMessage & 32) Print("\n\r[Error data type]"); break; } break; case 4: /* wait Tiuch-200 echo ACK */ if(IsCom(ComPort)){ switch(ReadCom(ComPort)){ case ACK: CurWork=0; MMp=NULL; if(ShowMessage & 32) Print("\n\r{Send data to Touch-200 OK.}"); break; case NAK: retrycount1++; if(retrycount1<3){ retrycount=0; CurWork=1; } else { CurWork=0; MMp=NULL; if(ShowMessage & 32) Print("\n\rSend data to Touch-200 Error."); } break; default: break; } } else { if(*TimeTick-st > 10){ /* time out */ } } break; } } } } int WorkList[LIST_NO]; int NextWorkIdx=0; int AddWorkIdx=0; unsigned WorkStatus=0; void AddNewWork(int work) { int nextidx=(AddWorkIdx+1)&(LIST_NO-1); if(nextidx!=NextWorkIdx){ if(WorkStatus & work) return; WorkStatus |= work; WorkList[AddWorkIdx]=work; AddWorkIdx=nextidx; if(ShowMessage & 64) Print("\n\rAddNewWork %d",work); } } void AddNextWork(int work) { int nextidx=(NextWorkIdx-1)&(LIST_NO-1); if(nextidx!=NextWorkIdx){ WorkStatus |= work; NextWorkIdx=nextidx; WorkList[NextWorkIdx]=work; if(ShowMessage & 64) Print("\n\rAddNextWork %d",work); } } int GetNextWork(void) { int ret=0; if(NextWorkIdx!=AddWorkIdx){ ret=WorkList[NextWorkIdx]; NextWorkIdx=(NextWorkIdx+1) & (LIST_NO-1); if(ShowMessage & 64) Print("\n\rGetNextWork %d",ret); } return ret; } void AddAllNewWork(void) { if(Do7013 && !(WorkStatus & WORK_7013)){ AddNewWork(WORK_7013); } if(Do7017 && !(WorkStatus & WORK_7017)){ AddNewWork(WORK_7017); } if(Do7021 && !(WorkStatus & WORK_7021)){ AddNewWork(WORK_7021); } if(Do7060_i && !(WorkStatus & WORK_7060i)){ AddNewWork(WORK_7060i); } } int Do7060ofun(void) { static char cmd[6]="@040\r"; static int mode=0,idx; static unsigned long st; static char buf[10]; int value,minus; switch(mode){ case 0: /* send command */ ClearCom(2); cmd[3]=hex_to_ascii[_7060data]; if(ShowMessage & 8) Print("\n\rSet 7060D"); ToCom2Str(cmd); st=*TimeTick; mode=1; idx=0; break; case 1: /* wait receive response */ while(IsCom2()){ buf[idx]=ReadCom2(); if(buf[idx]=='\r'){ if(ShowMessage & 8){ Print("{%lums}",*TimeTick-st); } mode=0; return 0; } else { if(ShowMessage & 8) Putch(buf[idx]); idx++; } } if((*TimeTick-st) > 30){ Rerror7060++; if(ShowMessage & 8) Print("--> 7060_O timeout!(%u)",Rerror7060); mode=0; return 0; } break; } return WORK_7060o; } int Do7060ifun(void) { static int mode=0,idx; static unsigned long st; static char buf[10]; int value,minus; switch(mode){ case 0: /* send command */ ClearCom(2); if(ShowMessage & 8) Print("\n\rRead 7060D"); ToCom2Str("@04\r"); st=*TimeTick; mode=1; idx=0; break; case 1: /* wait receive response */ while(IsCom2()){ buf[idx]=ReadCom2(); if(buf[idx]=='\r'){ if(ShowMessage & 8){ Print("{%lums}",*TimeTick-st); } value=0xF^ascii_to_hex(buf[4]); value<<=4; value+=ascii_to_hex(buf[2]); NewData[1]=(Data7[1]&0xFF00)+value; if(ShowMessage & 8) Print(" -->(%02X)",value); if(Data7[1]!=NewData[1]){ /* For send data to Touch-200 */ Data7[1]=NewData[1]; AddTouchData(1,1,NewData[1]); } mode=0; return 0; } else { if(ShowMessage & 8) Putch(buf[idx]); idx++; } } if((*TimeTick-st) > 30){ Rerror7060++; if(ShowMessage & 8) Print("--> 7060 timeout!(%u)",Rerror7060); mode=0; return 0; } break; } return WORK_7060i; } int Do7013fun(void) { static int mode=0,idx; static unsigned long st; static char buf[20]; int value,minus; switch(mode){ case 0: /* send command */ ClearCom(2); if(ShowMessage & 1) Print("\n\rRead 7013"); ToCom2Str("#01\r"); st=*TimeTick; mode=1; idx=0; break; case 1: /* wait receive response */ while(IsCom2()){ buf[idx]=ReadCom2(); if(buf[idx]=='\r'){ if(ShowMessage & 1){ Print("{%lums}",*TimeTick-st); } if(buf[1]=='-') minus=1; else minus=0; value=buf[2]-'0'; value=value*10+buf[3]-'0'; value=value*10+buf[4]-'0'; value=value*10+buf[6]-'0'; value=value*10+buf[7]-'0'; if(minus) value=-value; NewData[22]=value; if(ShowMessage & 1) Print(" -->%d\n\r",value); if(Data7[22]!=NewData[22]){ /* For send data to Touch-200 */ Data7[22]=NewData[22]; AddTouchData(1,22,NewData[22]); } mode=0; return 0; } else { if(ShowMessage & 1) Putch(buf[idx]); idx++; } } if((*TimeTick-st) > 30){ Rerror7013++; if(ShowMessage & 1) Print("--> 7013 timeout!(%u)",Rerror7013); mode=0; return 0; } break; } return WORK_7013; } int Do7017fun(void) { static int mode=0,idx; static unsigned long st; static char buf[50]; switch(mode){ case 0: ClearCom(2); if(ShowMessage & 4) Print("\n\rRead 7017"); mode=1; ToCom2Str("$03A\r"); st=*TimeTick; idx=0; break; case 1: while(IsCom2()){ buf[idx]=ReadCom2(); if(buf[idx]=='\r'){ unsigned char *ptr; int value=0; int i,j; int addr; if(ShowMessage & 4) { Print("{%lums}\n\r",*TimeTick-st); } ptr=buf+1; for(i=0;i<8;i++){ value=0; for(j=0;j<4;j++){ value<<=4; value|=ascii_to_hex(*ptr++); } addr=2+i*2; NewData[addr]=(int)(value*40000L/65536L); if(Data7[addr]!=NewData[addr]){ /* For send data to Touch-200 */ Data7[addr]=NewData[addr]; AddTouchData(1,addr,NewData[addr]); } } mode=0; return 0; } else { if(ShowMessage & 4) Putch(buf[idx]); idx++; } } if((*TimeTick-st) > 60){ Rerror7017++; if(ShowMessage & 4) Print("--> 7017 timeout!(%u)",Rerror7021); mode=0; return 0; } break; } return WORK_7017; } int Do7021fun(void) { static char cmd[12]="#0200.000\r"; static int cnt7021=0; static int mode7021=1; static int mode=0,idx; static unsigned long st; static char buf[10]; switch(mode){ case 0: if(mode7021){ cnt7021++; if(cnt7021>=20) mode7021=0; } else { cnt7021--; if(cnt7021<=0) mode7021=1; } cmd[3]='0'+cnt7021/10; cmd[4]='0'+cnt7021%10; if(ShowMessage & 2) Print("\n\rSet 7021 to %d mA",cnt7021); mode=1; ToCom2Str(cmd); st=*TimeTick; idx=0; break; case 1: while(IsCom2()){ buf[idx]=ReadCom2(); if(buf[idx]=='\r'){ if(ShowMessage & 2) { Print("{%lums}\n\r",*TimeTick-st); } mode=0; AddTouchData(1,20,cnt7021*1000); return 0; } else { if(ShowMessage & 2) Putch(buf[idx]); idx++; } } if((*TimeTick-st) > 30){ Rerror7021++; if(ShowMessage & 2) Print("--> 7021 timeout!(%u)",Rerror7021); mode=0; return 0; } break; } return WORK_7021; } void DoWork(void) { static int CurWork=0; if(!CurWork) CurWork=GetNextWork(); switch(CurWork){ case WORK_7013: if(!(CurWork=Do7013fun())){ Do7013=0; WorkStatus &= ~WORK_7013; t7013=*TimeTick; } break; case WORK_7017: if(!(CurWork=Do7017fun())){ Do7017=0; WorkStatus &= ~WORK_7017; t7017=*TimeTick; } break; case WORK_7021: if(!(CurWork=Do7021fun())){ Do7021=0; WorkStatus &= ~WORK_7021; t7021=*TimeTick; } break; case WORK_7060i: if(!(CurWork=Do7060ifun())){ Do7060_i=0; WorkStatus &= ~WORK_7060i; t7060=*TimeTick; } break; case WORK_7060o: if(!(CurWork=Do7060ofun())){ Do7060_o=0; WorkStatus &= ~WORK_7060o; } break; default: CurWork=0; break; } } void DoTime(void) { tNow=*TimeTick; if(!Do7013 && (tNow-t7013>100)){ Do7013=1; } if(!Do7017 && (tNow-t7017>500)){ Do7017=1; } if(!Do7021 && (tNow-t7021>1200)){ Do7021=1; } if(!Do7060_i && (tNow-t7060>100)){ Do7060_i=1; } AddAllNewWork(); DoWork(); } void main(int argc,char *argv[]) { int quit=0; int now_i1,now_i2,now_i3,now_i4; int old_i1,old_i2,old_i3,old_i4; int i,k,LedMode=1; char c,rep; int TouchType, TouchAddr, TouchValue; unsigned long Baud200=9600; for(i=1;i=16 && TouchAddr<=19){ if(TouchValue) Data7[TouchAddr>>4] |= 1<<(TouchAddr&0x0F); else Data7[TouchAddr>>4] &=~(1<<(TouchAddr&0x0F)); Show5DigitLed(3,TouchValue); _7060data=Data7[1]&0x0F; AddNextWork(WORK_7060o); } } } } } */ DoTime(); DoTouch200(); if (Kbhit()) { /* is user press PC's keyboard from COM4 */ c=Getch(); /* if this key is Q or Q --> exit this program */ if ((c=='q') || (c=='Q')) { quit=1; } } } // DisableWDT(); RestoreCom(2); RestoreCom(ComPort); if(ShowMessage & 1) Print("\n\r7013 Error s=%u r=%u",Serror7013,Rerror7013); if(ShowMessage & 4) Print("\n\r7017 Error s=%u r=%u",Serror7017,Rerror7017); if(ShowMessage & 8) Print("\n\r7060 Error s=%u r=%u",Serror7060,Rerror7060); if(ShowMessage & 2) Print("\n\r7021 Error s=%u r=%u",Serror7021,Rerror7021); }