#include #include #include "..\lib\7188.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 unsigned Data7[512]; unsigned NewData[DATA_SIZE]; char szCmd1[80]; int ComPort=1; /* 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); /* char hex_to_ascii[16]={ '0','1','2','3', '4','5','6','7', '8','9','A','B', 'C','D','E','F', }; */ /* ------------------------------------------------------------------- */ /* ------------------------------------------------------------------- */ 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) printf(" -> 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) printf(" * 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) printf(" * type=2, addr=%d, value=%d",addr,value); /* write_to_easyview_2(addr,value); */ } return(NoError); /* receive OK */ } /* ------------------------------------------------------------------- */ /* int ascii_to_hex(char c) { if (c<='9') return(c-'0'); else return(c-'A'+10); } */ /* ------------------------------------------------------------------- */ 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; int Read7060(void) { int ret; unsigned char buf[20]; int value=0; ClearCom(2); printf("\nRead 7060"); ret=SendCmdTo7000(2,"@04",0); ret=ReceiveResponseFrom7000(2,buf,600L,0); value=0xF^ascii_to_hex(buf[4]); value<<=4; value+=ascii_to_hex(buf[2]); NewData[1]=(Data7[1]&0xFF00)+value; printf(" %s-->(%02X)",buf,value); return ret; } int Set7060(unsigned data) { char cmd[5]="@040"; char buf[10]; ClearCom(2); cmd[3]=hex_to_ascii[data]; printf("\nSet 7060-->%s",cmd); SendCmdTo7000(2,cmd,0); return ReceiveResponseFrom7000(2,buf,600L,0); } int Read7013(void) { int ret; unsigned char buf[20]; int value=0; int minus=0; ClearCom(2); printf("\nRead 7013"); ret=SendCmdTo7000(2,"#01",0); if(ret) { Serror7013++; printf("(Send Error=%u) ret=%d",Serror7013,ret); } else { ret=ReceiveResponseFrom7000(2,buf,600L,0); if(ret==NoError){ if(buf[1]=='-') minus=1; 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; printf(" %s -->%d",buf+1,value); } else { Rerror7013++; printf("(Receive Error=%u) ret=%d",Rerror7013,ret); } } return ret; } int Read7021(void) { printf("\nRead 7021"); return NoError; } int Read7017(void) { int ret; unsigned char buf[40],*ptr; int value=0; int i,j; ClearCom(2); printf("\nRead 7017"); ret=SendCmdTo7000(2,"$03A",0); ret=ReceiveResponseFrom7000(2,buf,600L,0); ptr=buf+1; for(i=0;i<8;i++){ value=0; for(j=0;j<4;j++){ value<<=4; value|=ascii_to_hex(*ptr++); } NewData[2+i*2]=(int)(value*40000L/65536L); } return ret; } int DataIn(void) { unsigned data; Read7060(); Read7017(); Read7013(); return NoError; } 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){ printf("\nError: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){ printf("\nError: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){ printf("\nError:Write to easyview %d [%d]",i,ret); } } } } return ret; } int Control(void) { static int cnt7021=0; static int mode7021=1; int ret; char cmd[12]="#0200.000"; char buf[10]; ClearCom(2); 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; printf("\nSet 7021 to %d mA",cnt7021); ret=SendCmdTo7000(2,cmd,0); if(ret) { Serror7021++; printf("(Send Error=%u) ret=%d",Serror7021,ret); } else { ret=ReceiveResponseFrom7000(2,buf,600L,0); if(ret) { Rerror7021++; printf("(Receive Error=%u) ret=%d",Rerror7021,ret); } } return ret; } void main() { 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; InitLib(); /* driver initial */ InstallCom(2,9600L,8,0,1); /* COM3, RS-232, full-duplex mode, INT */ InstallCom(ComPort,9600L,8,0,1); /* COM3, RS-232, full-duplex mode, INT */ /* connect to EasyView */ Init5DigitLed(); /* initial & blank the 5-digit LED */ LedOn(); /* red-LED on */ EnableWDT(); while(!quit) { RefreshWDT(); if (IsCom(ComPort)) { if (ComPort!=4) printf("\nReceive COM_%d",ComPort); LedMode=!LedMode; if(LedMode) LedOn(); else LedOff(); c=ReadCom(ComPort); if(c==STX){ /* receive STX from easyview */ k=read_touch7(&TouchType,&TouchAddr,&TouchValue); if(k==NoError) { if (TouchType==1){ if(TouchAddr==0){ /* Page number */ Show5DigitLed(1,TouchValue); } } else if(TouchType==2){ if(TouchAddr>=16 && TouchAddr<=19){ if(TouchValue) Data7[TouchAddr>>4] |= 1<<(TouchAddr&0x0F); else Data7[TouchAddr>>4] &=~(1<<(TouchAddr&0x0F)); Show5DigitLed(3,TouchValue); Set7060(Data7[1]&0x0F); } } } } } else { static int count=0; count++; ClearCom(2); for(i=0;i exit this program */ if ((c=='q') || (c=='Q')) { quit=1; } } } DisableWDT(); RestoreCom(2); RestoreCom(ComPort); printf("\n7013 Error s=%u r=%u",Serror7013,Rerror7013); printf("\n7017 Error s=%u r=%u",Serror7017,Rerror7017); printf("\n7060 Error s=%u r=%u",Serror7060,Rerror7060); printf("\n7021 Error s=%u r=%u",Serror7021,Rerror7021); }