⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 busmodem.c

📁 抄水表手持POS代码
💻 C
📖 第 1 页 / 共 2 页
字号:
if (ModemTx(tmp, 4,rand()*rand() ,MODEM_CP_LINK,2500)==MODEM_OK)      {
	return MODEM_OK;
  }
else if (ModemTx(tmp, 4,rand()*rand() ,MODEM_CP_LINK,2500)==MODEM_OK) { 
	return MODEM_OK;
  }
else     ; 	
return MODEM_NOK;
}

char  ModemLogin(char username[10],char password[10],char opsnr[4])
{
uchar xdata tmp[100],i;
srand(255);
for(i=0;i<10;i++) {tmp[i]=username[i];tmp[10+i]=password[i];}
for(i=0;i<4;i++) tmp[20+i]=opsnr[i];
for(i=0;i<16;i++) {tmp[24+i]=rand();tmp[40+i]=tmp[24+i];}
if (ModemTx(tmp, 56,11 ,MODEM_CP_LOGIN,2500)==MODEM_OK) 
  {
//    _Display(0,1,"登陆成功         ",16); 	//get_key();
	return MODEM_OK;
  }
else if (ModemTx(tmp, 56,11 ,MODEM_CP_LOGIN,2500)==MODEM_OK) 
  { 
//    _Display(0,1,"登陆成功       ",16); 	//get_key();
    return MODEM_OK;
  }
//else  str_display(LCD1,1,0,"登陆失败        ");	//get_key();
return MODEM_NOK;
}
/*
char  ModemCheckTime(unsigned char *rbuf)
{
unsigned int sum=0;
uchar xdata buf[32],crc16[2];//,tmp[16];
int   ret,i;  
  buf[0]=0xa9; 		      		buf[1]=0x6e;   
  buf[2]=0;	buf[3]=0; 	      
  buf[4]=0;	buf[5]=0; 	  
  buf[6]=MODEM_CP_CHECKTIME;					buf[7]=MODEM_CP_CHECKTIME^0xff; 	  
  for(i=0;i<8;i++) sum=sum+(unsigned int)buf[i];
  buf[8]  =(unsigned char) sum;
  buf[9]  =(unsigned char)(sum>>8);  
  _Calc_crc(CRC16,  10, buf, buf+8+2);  
  _delay_1ms(2);ret=modem_write(modemhd,12,buf);
  if ( ret <= 0 ) 	 {return MODEM_NOK; }

  i=modem_rec(1500,26,rbuf);

  if(i!=26)    {return MODEM_NOK;}
  if ((rbuf[0]!=0xa9) || (rbuf[1]!=0x6e) ) return MODEM_NOK;
  if ((rbuf[2]!=0x00) || (rbuf[3]!=0x00) || (rbuf[4]!=14) || (rbuf[5]!=0x00) || (rbuf[6]!=MODEM_CP_CHECKTIME) )      return MODEM_NOK;
  sum=0;
  for(i=0;i<22;i++)  sum=sum+(int)rbuf[i];
  if(rbuf[22]!=(unsigned char)(sum) )    return MODEM_NOK;
  if(rbuf[23]!=(unsigned char)(sum>>8) ) return MODEM_NOK;
_  Calc_crc(CRC16,  24,rbuf,crc16);
  if(rbuf[24]  !=crc16[0] ) return MODEM_NOK;
  if(rbuf[25]  !=crc16[1] ) return MODEM_NOK;
  return MODEM_OK;
}
/*
unsigned char  ModemInit()
{
   int ret,len,i;
    char buf[40];
	uchar hd1;
	beep(2,1);
    hd1 = modem_open("MODEM1");
    if ( hd1 == 0 )
	{
		modem_close(modemhd);
		delay(1000);
        hd1 = modem_open("MODEM1");
        if ( hd1 == 0 )  {return MODEM_NOK;}
	}
	beep(1,1);
	modemhd=hd1;
	strcpy(buf,"ATE1H0\r");
	len = strlen(buf);
   	ret = modem_write(modemhd, len, buf );
  	if ( ret <= 0 )	{	modem_close(modemhd);	return MODEM_NOK;    }
	for(i=0;i<4;i++) {
    	ret = modem_retcode(modemhd, buf, 40);
    	if(ret==RE_NONE) {	delay (1000);	continue; 	} 
		else if(ret==RE_OK)	  {return MODEM_OK;  }
    }
	return MODEM_NOK;
}
*/

/*
void  ModemOffline()
{
 modem_close(modemhd);
}

char ModemOnline()
{
if (ModemTx(NULL, 0,0 ,0,1300)==MODEM_OK) return MODEM_OK;
delay(1000);
if (ModemTx(NULL, 0,0 ,0,1300)==MODEM_OK) return MODEM_OK;
return MODEM_NOK;
}
*/
char ModemTx5(unsigned char *txbuf, int length,unsigned int sno ,unsigned char funno,int waittm)
{
  if(ModemTx(txbuf, length,sno ,funno,waittm)==MODEM_OK) return MODEM_OK;  _delay_1ms(100);
  if(ModemTx(txbuf, length,sno ,funno,waittm)==MODEM_OK) return MODEM_OK;  _delay_1ms(200);
  if(ModemTx(txbuf, length,sno ,funno,waittm)==MODEM_OK) return MODEM_OK;  _delay_1ms(200);
  if(ModemTx(txbuf, length,sno ,funno,waittm)==MODEM_OK) return MODEM_OK;  _delay_1ms(500);
  if(ModemTx(txbuf, length,sno ,funno,waittm)==MODEM_OK) return MODEM_OK;
  return MODEM_NOK;
}
/*
int  ModemReq(unsigned char *rbuf, int length, unsigned char funno, int dl)
{
 return ModemTx(rbuf, length,0 ,funno,dl);
}

char ModemSendFunno(unsigned char *txbuf, int length,unsigned int sno ,unsigned char funno)
{
  unsigned char xdata buf[1024];//,tmp[16];
  unsigned int  sum=0;
  int i,ret;
  if(length>1000) 		      return MODEM_NOK;
  buf[0]=0xa9; 		      		buf[1]=0x6e;   
  buf[2]=(unsigned char)sno;	buf[3]=sno>>8; 	      
  buf[4]=(unsigned char)length;	buf[5]=length>>8; 	  
  buf[6]=funno;					buf[7]=funno^0xff; 	  
  for(i=0;i<length;i++)   buf[8+i]=txbuf[i];
  for(i=0;i<(length+8);i++) sum=sum+(unsigned int)buf[i];
  buf[8+length]  =(unsigned char) sum;
  buf[9+length]  =(unsigned char)(sum>>8);  
  _Calc_crc(CRC16,  length+10, buf, buf+8+length+2);  
  _delay_1ms(2);ret=modem_write(modemhd,length+12,buf);
  if ( ret <= 0 ) 	 {return MODEM_NOK; }
  return MODEM_OK;
}



unsigned char ModemFunno(unsigned char *rbuf,int length,unsigned char funno, int waittm)
{
  uchar crc[2],tmp[16];
  int i;
  unsigned sum;
  i=modem_rec(waittm,length,rbuf);
  if(i!=length)    {return MODEM_NOK;}
  if ((rbuf[0]!=0xa9) || (rbuf[1]!=0x6e) ) return MODEM_NOK;
  if ((rbuf[2]!=0x00) || (rbuf[3]!=0x00) || (rbuf[4]!=length-12) || (rbuf[5]!=0x00) || (rbuf[6]!=funno) )      return MODEM_NOK;
  sum=0;
  for(i=0;i<length-4;i++)  sum=sum+(int)rbuf[i];
  if(rbuf[length-4]!=(unsigned char)(sum) )    return MODEM_NOK;
  if(rbuf[length-3]!=(unsigned char)(sum>>8) ) return MODEM_NOK;

  _Calc_crc(CRC16,length-2,rbuf,crc);
  if(rbuf[length-2]  !=crc[0] ) return MODEM_NOK;
  if(rbuf[length-1]  !=crc[1] ) return MODEM_NOK;

 return MODEM_OK;
}
*/
//test uart1 operation
char ModemTx(unsigned char *txbuf, int length,unsigned int sno ,unsigned char funno,int waittm)
{
  unsigned char xdata buf[1024],rbuf[100],crc16[2];//,tmp[16];
  unsigned int  sum=0;
  int i,ret;
  if(length>1000) 		      return MODEM_NOK;
  buf[0]=0xa9; 		      		buf[1]=0x6e;   
  buf[2]=(unsigned char)sno;	buf[3]=sno>>8; 	      
  buf[4]=(unsigned char)length;	buf[5]=length>>8; 	  
  buf[6]=funno;					buf[7]=funno^0xff; 	  
  for(i=0;i<length;i++)   buf[8+i]=txbuf[i];
  for(i=0;i<(length+8);i++) sum=sum+(unsigned int)buf[i];
  buf[8+length]  =(unsigned char) sum;
  buf[9+length]  =(unsigned char)(sum>>8);  
  _Calc_crc(CRC16,  length+10, buf, buf+8+length+2);  
  _delay_1ms(2);ret=modem_write(modemhd,length+12,buf);
  if ( ret <= 0 ) 	 {return MODEM_NOK; }

  memset(rbuf,0,sizeof(rbuf));
  i=modem_rec(waittm,17,rbuf);
  if(i!=17)    {return MODEM_NOK;}
  if ((rbuf[0]!=0xa9) || (rbuf[1]!=0x6e) ) return MODEM_NOK;
  if ((rbuf[2]!=0x00) || (rbuf[3]!=0x00) || (rbuf[4]!=0x05) || (rbuf[5]!=0x00) || (rbuf[6]!=0x00) )      return MODEM_NOK;
  if (memcmp(buf+2,rbuf+8,5)!=0) return MODEM_NOK;
  sum=0;
  for(i=0;i<13;i++)  sum=sum+(int)rbuf[i];
  if(rbuf[13]!=(unsigned char)(sum) )    return MODEM_NOK;
  if(rbuf[14]!=(unsigned char)(sum>>8) ) return MODEM_NOK;
  _Calc_crc(CRC16,  15,rbuf,crc16);
  if(rbuf[15]  !=crc16[0] ) return MODEM_NOK;
  if(rbuf[16]  !=crc16[1] ) return MODEM_NOK;
  return MODEM_OK;
}

/*int ModemRx(unsigned char *rbuf, int length,int dl)
{
//datformat: 0xa9,0x6e,sno[0], sno[1], length[0],length[1],txbuf[0], txbuf[1], data[0...length-1],sum[0],sum[1],crc[0],crc[1]
//datformat: 0xa9,0x6e,sno[0], sno[1], length[0],length[1],sum[0],sum[1],crc[0],crc[1]
  unsigned char xdata buf[1024];
  unsigned int  sum=0;
  int i,r_ret,t_ret;
  _delay_1ms(dl);
  r_ret=modem_rec(10,length,buf);
  if(r_ret<12)    {return 0;}
  if ((rbuf[0]!=0xa9) || (rbuf[1]!=0x6e) ) return 0;
  if (rbuf[6]!=(rbuf[7]^0xff) )  return 0;
  buf[0]=0xa9; 		      		buf[1]=0x6e;   
  buf[2]=rbuf[2];				buf[3]=rbuf[3]; 	      
  buf[4]=5;						buf[5]=0; 	  
  buf[6]=buf[6];				buf[7]=rbuf[7]; 	  
  for(i=0;i<5;i++)   buf[8+i]=rbuf[i];
  for(i=0;i<(5+8);i++) sum=sum+(unsigned int)buf[i];
  buf[8+5]  =(unsigned char) sum;
  buf[9+5]  =(unsigned char)(sum>>8);  
  _Calc_crc(CRC16,  5+10, buf, buf+8+5+2);  
  t_ret=modem_write(modemhd,5+12,buf);
  if ( t_ret <= 0 ) 	 {return 0; }
  return r_ret;
}


int Calc_crc(uchar mode, uchar len, uchar *in, uchar *out)//CRC
{
  int  i, j, stat;
  uint crc;
  stat=MI_CRC_ZERO;
  if (mode==CRC8) {
	*out=0xC7;	// bit-swapped 0xE3
	for (j=0; j<len; j++){
	  *out=*out^in[j];
	  for(i=0;i<8;i++) {if (*out&0x80) *out=(*out<<1)^0x1D;	else  *out = *out<<1;  }
	}
	if (*out)  stat=MI_CRC_NOTZERO;
  }
  else { // CRC16  //	crc = 0xC78C;	// bit-swapped 0x31E3
	crc = 0x0000;	// bit-swapped 0x31E3
	for (j=0;j<len; j++){
	  crc=crc^((uint)in[j]<<8);
	  for (i=0;i<8;i++)  {if (crc&0x8000) crc=(crc<<1)^0x1021; else crc=crc<<1; }
	}
	out[0]=(uchar)(crc>>8);	out[1]=(uchar)crc;
	if (crc) stat=MI_CRC_NOTZERO;
  }
  return (stat);
}

*/
int modem_rec(int dltm,int recnum,uchar *buf)
{
  unsigned char xdata buff[300];
  int reclen=0,n,i,dlcnt=0;
  while(1)
  {
//  if (reclen>=recnum) 	return  reclen;
  if (dlcnt>=(dltm/100)) return MODEM_NOK;  //over time
  _delay_1ms(100);dlcnt++;
  memset(buff,0,sizeof(buff));
  n=modem_read(modemhd,100,buff);
  if (n==0) continue;
  else if(n<0) return MODEM_NOK;
  else if(n>0) 
       {
	   for(i=0;i<n;i++) {reclen++;buf[i]=buff[i];if (i>=256) return reclen;}
	   while(1)
		  {
		  if (reclen>=recnum) return reclen;
		  if (dlcnt>=(dltm/100)) return reclen;
		  _delay_1ms(100);dlcnt++;
          memset(buff,0,sizeof(buff));
		  n=modem_read(modemhd,100,buff);
		  if (n==0)    return reclen;
		  else if(n<0) return MODEM_NOK;   
		  else if(n>0) 
		     for(i=0;i<n;i++)  {buf[reclen]=buff[i];reclen++;if (i>=256) return reclen;}
          }
       }  
  }
}
/*

int modem_retcode(int modemhd, char *buf, int len)
{
    int i, ret;
    uchar state=Leading_CR;
    uchar xdata *p; 
    uchar xdata str[32];
    p = (uchar *)buf;
    for(i=0;i<len;i++) {
        ret =  modem_read((uchar)modemhd, 1, p);
        if(ret<0) return ret;
        else if(ret==0) {
            _delay_1ms(mspb);
            ret = modem_read((uchar)modemhd, 1, p);
            if(ret<0) return ret;
            else if(ret==0) return 0;
        }
         if(ret>0){_Display(0,0,_R232Buf,16); 
			_Display(0,1,buf,16);
			sprintf(str,"ret=%02x           ",(uint)ret);_Display(0,2,str,16);}
        switch(state)
        {
        case Leading_CR:
            if(*p=='\r') state = Leading_LF;
            break;
        case Leading_LF:
            if(*p=='\n') state = Message;
            else if(*p!='\r') state = Leading_CR;
            break;
        case Message:
            if(*p=='\r') {
                *p = 0;
                state = Trailing_LF;
            } else p++;
            break;
        case Trailing_LF:
            if(*p=='\n') {
                //get ret code
	            for(i=0;i<11;i++) {
		            if(strncmp(buf, RetInfo[i], strlen(RetInfo[i]))==0)
			            break;
	            }
                return (i+1);
            } else return (-3);//retcode invalid
        }
    }
    return (-4);//retcode too long
}

*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -