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

📄 protocol.c.bak

📁 dsp tmslf2407a 汇编,c的原代码,包括i2c,scitimer,fir等的很多程序.
💻 BAK
📖 第 1 页 / 共 5 页
字号:
   	if(flags != 0x01)
   	{
      	if( deviceAddr == pcdata[1] )   //本机地址执行      		
         	resp_para_err();        	//块号参数超出标签允许值    
   	}
   	else
   	{
      	flags = ISOFlagsSys|0x20;	//address_flag
      	viccdata[0] = 13;
      	viccdata[1] = flags;
      	viccdata[2] = Select_cmd;
      	for(i=3,j=12;i<11;i++,j--) {viccdata[i] = pcdata[j];}
      	wr_crc_send();
      	ISOMode = ISOModeSys;      		
      	i = sendISOCmd();   
      	CS_RAM_1;
      	if( deviceAddr == pcdata[1] )  	//本机地址执行
      	{ 
         	if(i==0)              	//标签没有返回         		
            	resp_no_trns();         	
         	else
         	{
            	if(viccdata[1]==0)                 //成功执行
            	{ 
               		pcdata[0] = 6;
               		pcdata[1] = deviceAddr;
               		pcdata[2] = ISO_MANDATORY_CMD;
               		pcdata[3] = OK;
               		wr_crc_resp();
            	}
            	else	            			  //标签返回ISO错误
               		resp_iso_err();            			
         	}          		     		
      	}
   	}   
}
/***************************************************/
void reset_ready_pro(void) 
{
   	uchar flags,len,addr;
   	uchar i,j;
   	uchar flag =0; 
   
   	addr = pcdata[1];
   	flags = pcdata[4]&0x07;
   	if((flags==0)||(flags==2))	//不带uid
   	{
      	if(flags==0) { flags = ISOFlagsSys&0xcf;}
      	else         { flags = ISOFlagsSys|0x10;}	//select_flag
      	viccdata[0] = 5;
      	viccdata[1] = flags;
      	viccdata[2] = Reset_rdy_cmd;
   	}
   	else if(flags ==1)
   	{
      	flags = ISOFlagsSys|0x20;              //address_flag 
      	viccdata[0] = 13;
      	viccdata[1] = flags;
      	viccdata[2] = Reset_rdy_cmd;
      	for(i=3,j=12;i<11;i++,j--) {viccdata[i] = pcdata[j];}
   	} 
   	else   
		flag = 1;
 
   	if(flag==1)
   	{
      	if( deviceAddr == pcdata[1] )//本机地址执行      		
        	resp_para_err();
   	}
   	else
   	{   
      	wr_crc_send();
      	ISOMode = ISOModeSys;         		
      	j = sendISOCmd();     
      	CS_RAM_1; 		       
      	if(deviceAddr == pcdata[1] ) //本机地址执行
      	{
        	if(j==0)                     // 标签没有返回
           		resp_no_trns();
        	else if(viccdata[1] == 0)    // 正确返回 
        	{
       			pcdata[0] = 6;
       			pcdata[1] = deviceAddr;
       			pcdata[2] = ISO_MANDATORY_CMD;
       			pcdata[3] = OK;
       			wr_crc_resp();
      		}  
      		else                         // 标签返回ISO错误         		
           		resp_iso_err();
   		}      
   	}
}
/***************************************************/ 
void wr_AFI_pro(void)
{
   	uchar flags,addr;
   	uchar i,j;
   	uchar flag =0; 
   
   	addr = pcdata[1];
   	flags = pcdata[4]&0x07;
   	if((flags==0)||(flags==2))	//不带uid
   	{
      	if(flags==0) { flags = ISOFlagsSys&0xcf;}
      	else         { flags = ISOFlagsSys|0x10;}	//select_flag
      	flags |= 0x40; 		//option_flag                  
        viccdata[0] = 6;
      	viccdata[1] = flags;
      	viccdata[2] = Wr_AFI_cmd;
      	viccdata[3] = pcdata[5]; //afi
   	}
   	else if(flags ==1)	//带uid
   	{
      	flags = ISOFlagsSys|0x20;   // addess_flag                               
      	flags |= 0x40;			//option_flag=1 
      	viccdata[0] = 14;
      	viccdata[1] = flags;
      	viccdata[2] = 0x27;
      	for(i=3,j=12;i<11;i++,j--) {viccdata[i] = pcdata[j];}
      	viccdata[11] = pcdata[13];//afi
   	} 
   	else
      	flag = 1;

   	if(flag==1)	//mode error
   	{
      	if( deviceAddr == pcdata[1] )   //本机地址执行      		
        	resp_para_err();
   	}
   	else
   	{   
      	wr_crc_send();
      	ISOMode = ISOModeSys|0x10;   //write       		   		      				
      	j = sendISOCmd();      		
        CS_RAM_1;
      	if( deviceAddr == pcdata[1])  //本机地址执行
      	{
        	if(j==0)                     //标签没有返回
          		resp_no_trns();

        	else if(viccdata[1] == 0)   // 正确返回
        	{
        		pcdata[0] = 6;
        		pcdata[1] = deviceAddr;
        		pcdata[2] = ISO_MANDATORY_CMD;
        		pcdata[3] = OK;
        		wr_crc_resp();
        	}  
         	else                         // 标签返回ISO错误   
            	resp_iso_err();         	
      	}
   	}
}
void lock_AFI_pro(void)
{
   	uchar flags,len,addr;
   	uchar i,j;
   	uchar flag =0; 
	   
   	addr = pcdata[1];
   	flags = pcdata[4]&0x07;
   	if((flags==0)||(flags==2))	//不带uid
   	{
      	if(flags==0) { flags = ISOFlagsSys&0xcf;}
      	else         { flags = ISOFlagsSys|0x10;}	//select_flag
      	flags |= 0x40; 			//option_flag  
      	
      	viccdata[0] = 5;
      	viccdata[1] = flags;
      	viccdata[2] = 0x28;
   	}
   	else if(flags ==1)	//带uid
   	{
      	flags = ISOFlagsSys|0x20;  // address                                
      	flags |= 0x40; 			//option_flag                  
      	viccdata[0] = 13;
      	viccdata[1] = flags;
      	viccdata[2] = 0x28;
      	for(i=3,j=12;i<11;i++,j--) {viccdata[i] = pcdata[j];}
   	} 
   	else   	
      	flag = 1;  
   	if(flag==1)
   	{
      	if( deviceAddr==pcdata[1] )   //本机地址执行      		
         	resp_para_err();
   	}
   	else
   	{   
      	wr_crc_send();
      	ISOMode = ISOModeSys | 0x10;	//write       		 		
      	j = sendISOCmd();      		
	    CS_RAM_1;
      	if( deviceAddr==pcdata[1] )  //本机地址执行
      	{
        	if(j==0)                     // 标签没有返回
        		resp_no_trns();
        	else if(viccdata[1] == 0)    // 正确返回
        	{
        		pcdata[0] = 6;
        		pcdata[1] = deviceAddr;
        		pcdata[2] = ISO_MANDATORY_CMD;
        		pcdata[3] = OK;
        		wr_crc_resp();
        	}  
         	else                         // 标签返回ISO错误
            	resp_iso_err();
      	}
   	}    
}
/***************************************************/
void wr_DSFID_pro(void)
{
   	uchar flags,len,addr;
   	uchar i,j;
   	uchar flag =0; 
   
   	addr = pcdata[1];
   	flags = pcdata[4]&0x07;
   	if((flags==0)||(flags==2))	//不带uid
   	{   		
      	if(flags==0) { flags = ISOFlagsSys&0xcf;}
      	else         { flags = ISOFlagsSys|0x10;}	//select_flag
      	flags |= 0x40; 			//option_flag  
      	viccdata[0] = 6;
      	viccdata[1] = flags;
      	viccdata[2] = Wr_DSFID_cmd;
      	viccdata[3] = pcdata[5]; 
   	}
   	else if(flags ==1)	//带uid
   	{
   		flags = ISOFlagsSys|0x20;                                  
      	flags |= 0x40;		//option_flag 
      	viccdata[0] = 14;
      	viccdata[1] = flags;
      	viccdata[2] = Wr_DSFID_cmd;
      	for(i=3,j=12;i<11;i++,j--) {viccdata[i] = pcdata[j];}
      	viccdata[11] = pcdata[13];
   	} 
   	else 
   	{  
      	flag = 1;
   	}   
   	if(flag==1)
   	{
      	if( deviceAddr==pcdata[1] )   //本机地址执行
      	{  
        	resp_para_err();
      	}
   	}
   	else
   	{   
      	wr_crc_send();
      	ISOMode = ISOModeSys | 0x10;     //write       			
      	j = sendISOCmd(); 
      	CS_RAM_1;
      	if( deviceAddr==pcdata[1] )  //本机地址执行
      	{
        	if(j==0)                     // 标签没有返回
         	{
            	resp_no_trns();
         	}
         	else if(viccdata[1] == 0)    // 正确返回
         	{
            	pcdata[0] = 6;
            	pcdata[1] = deviceAddr;
            	pcdata[2] = ISO_MANDATORY_CMD;
            	pcdata[3] = OK;
            	wr_crc_resp();
         	}  
         	else                       //标签返回ISO错误
            	resp_iso_err();
      	}
   	}
}
/***************************************************/
void lock_DSFID_pro(void)
{
   	uchar flags,len,addr;
   	uchar i,j;
   	uchar flag =0; 
   
   	addr = pcdata[1];
   	flags = pcdata[4]&0x07;
   	if((flags==0)||(flags==2))	//不带uid
   	{
      	if(flags==0) { flags = ISOFlagsSys&0xcf;}
      	else         { flags = ISOFlagsSys|0x10;}	//select_flag
      	flags |= 0x40;			//option_flag  
      	viccdata[0] = 5;
      	viccdata[1] = flags;
      	viccdata[2] = 0x2a;
   	}
   	else if(flags ==1)		//带uid
   	{
      	flags = ISOFlagsSys|0x20;     //address_flag                             
      	flags |= 0x40; 		//option_flag                 
      	viccdata[0] = 13;
      	viccdata[1] = flags;
      	viccdata[2] = 0x2a;
      	for(i=3,j=12;i<11;i++,j--) {viccdata[i] = pcdata[j];}
   	} 
   	else  
      	flag = 1;

   	if(flag==1)
   	{
		if( deviceAddr==pcdata[1] )  //本机地址执行
			resp_para_err();
   	}
   	else
   	{   
      	wr_crc_send();
      	ISOMode = ISOModeSys | 0x10;  //write       		    		
      	j = sendISOCmd();      		
        CS_RAM_1;
      	if( deviceAddr==pcdata[1] )    //本机地址执行
      	{
        	if(j==0)                    //标签没有返回
        		resp_no_trns();
         	else if(viccdata[1] == 0)    // 正确返回 
         	{
            	pcdata[0] = 6;
            	pcdata[1] = deviceAddr;
            	pcdata[2] = ISO_MANDATORY_CMD;
            	pcdata[3] = OK;
            	wr_crc_resp();
         	}  
         	else                         //标签返回ISO错误
            	resp_iso_err();
      	}
   	}    
}
/***************************************************/
void get_info_pro(void)
{
   	uchar flags,len,addr;
   	uchar i,j;
   	uchar flag = 0; 
   
   	addr = pcdata[1];
   	flags = pcdata[4]&0x07;
   
   	if((flags==0)||(flags==2))	//不带uid
   	{   		
   		if(flags==0) { flags = ISOFlagsSys&0xcf;}
      	else         { flags = ISOFlagsSys|0x10;}	//select_flag
      	      			
      	viccdata[0] = 5;      		    		
      	viccdata[1] = flags;
      	viccdata[2] = Get_sysInf_cmd;
   	}
   	else if(flags ==1)	//带uid
   	{
      	flags = ISOFlagsSys|0x20;	//	address_flag      		
      	viccdata[0] = 13;
      	viccdata[1] = flags;
      	viccdata[2] = Get_sysInf_cmd;
      	for(i=3,j=12;i<11;i++,j--) {viccdata[i] = pcdata[j];}
   	}
   	else
      	flag = 1;

   	if(flag==1)
   	{
      	if( deviceAddr==pcdata[1])  //本机地址执行
        	resp_para_err();                       //块号参数超出标签允许值
   	}  
   	else
   	{
      	wr_crc_send();
      	ISOMode = ISOModeSys;     //read      		
      	i = sendISOCmd();   
      	CS_RAM_1;   		
      	if(i==0) { resp_no_trns(); }
      	else
      	{
        	if(viccdata[1]==0)
         	{
            	pcdata[0] = 19;
            	pcdata[1] = deviceAddr;
            	pcdata[2] = ISO_MANDATORY_CMD;
            	pcdata[3] = OK;
            	pcdata[4] = viccdata[11];      //DSFID*/
            	for(i=5,j=10;i<13;i++,j--) {pcdata[i] = viccdata[j];}
            		pcdata[13] = viccdata[12];     //AFI
            	pcdata[14] = viccdata[13] ++;  //block size
            	pcdata[15] = viccdata[14] ++;  //num block
            	pcdata[16] = viccdata[15];     //ic_ref
            	wr_crc_resp();
         	}
         	else { resp_iso_err(); }
		}
   	}
}
/***************************************************/
void get_mul_sec_pro(void)
{	
   	uchar flags,len,n_b,addr;
   	uchar i,j;
   	uchar flag =0; 
   
   	addr = pcdata[1];
   	flags = pcdata[4]&0x07;
   	if( (flags==0)||(flags==2) )	//不带uid
   	{
      	if(pcdata[5] >63) { flag = 1;} 
      	if(pcdata[6] >32) { flag = 1;}       //最多一次读取32个块
      	if(flag == 0)
      	{
        	if(flags==0) { flags = ISOFlagsSys&0xcf;}
      		else         { flags = ISOFlagsSys|0x10;}	//select_flag
        	   		
        	n_b = pcdata[6] ;   //040311         		
        	viccdata[0] = 7;
        	viccdata[1] = flags;
        	viccdata[2] = Get_mulBSS_cmd;
        	viccdata[3] = pcdata[5] ;
        	viccdata[4] = pcdata[6] ;
      	}
   	}
   	else if(flags==1)	//带uid
   	{
      	if(pcdata[13] >63) { flag = 1;}
      	if(pcdata[14] >32) { flag = 1;}	//最多一次读取32个块
      	if(flag==0)
      	{
        	n_b = pcdata[14] ;   //040311         		
        	flags = ISOFlagsSys | 0x20;	//address_flag         		
        	viccdata[0] = 15;
        	viccdata[1] = flags;
        	viccdata[2] = Get_mulBSS_cmd;
        	for(i=3,j=12;i<11;i++,j--) {viccdata[i] = pcdata[j];}
        	viccdata[11] = pcdata[13];
        	viccdata[12] = pcdata[14];
      	}
   	}
   	else { flag = 1;}
	   
   	if( deviceAddr == pcdata[1] )   //本机地址执行
   	{
      	if(flag == 1)                               //块号参数超出标签允许值      	
        	resp_para_err();                         //块号参数超出标签允许值     
      	else
      	{
        	wr_crc_send();
        	ISOMode = ISOModeSys;          		     		
        	i = sendISOCmd(); 
        	CS_RAM_1;
        	if(i==0) { resp_no_trns(); }
        	else
        	{
        		if(viccdata[1]==0)              

⌨️ 快捷键说明

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