unsigned char *_Data:写入数据,块长度为32Byte 返 回:成功则返回 0 例:__int16 st;
unsigned char data[32]=\ /* data赋值为16个0xaa*/
st=rf_write_hex(icdev,1,data); /*写入块1*/
(10)__int16 rf_initval(HANDLE icdev,unsigned char _Adr,unsigned long _Value);
功 能:初始化块值
参 数:HANDLE icdev:rf_init()返回的设备描述符 unsigned char _Adr:块地址(1~63) unsigned long _Value:初始值 返 回:成功则返回 0 例:__int16 st;
unsigned long value;
value=1000;
st=rf_initval(icdev,1,value); /*将块1的值初始化为value*/
注:作为数值处理的块,是以特殊格式存贮的,所以必须用初始化值函数初始化,
初始化之后方可进行读、减、加的处理。
(11)__int16 rf_increment(HANDLE icdev,unsigned char _Adr,unsigned long _Value);
功 能:块增值操作
参 数:HANDLE icdev:rf_init()返回的设备描述符 unsigned char _Adr:块地址(1~63) unsigned long _Value:要增加的值 返 回:成功则返回 0; 例:__int16 st;
unsigned long value;
value=1;
st=rf_increment(icdev,1,value); /*将块1的值增加value*/ (12)__int16 rf_decrment(HANDLE icdev,unsigned char _Adr,unsigned long _Value);
功 能:块减值操作
参 数:HANDLE icdev:rf_init()返回的设备描述符 unsigned char _Adr:块地址(1~63) unsigned long _Value:要减少的值 返 回:成功则返回 0 例:__int16 st;
unsigned long value;
value=1;
st=rf_decrement(icdev,1,value); /*将块1的值减少value*/ (13)__int16 rf_readval(HANDLE icdev,unsigned char _Adr,unsigned long *_Value); 功 能:读值
参 数:HANDLE icdev:rf_init()返回的设备描述符 unsigned char _Adr:块地址(0~63)
unsigned long *_Value:返回读出值的地址 返 回:成功返回0 例:__int16 st;
unsigned long value;
st=rf_readval(icdev,1,&value); /*读出块1的值,放入value*/
(14)__int16 rf_restore(HANDLE icdev,unsigned char _Adr); 功 能:将某块的数据传入卡的内部寄存器中
参 数:HANDLE icdev:rf_init()返回的设备描述符 unsigned char _Adr:要进行回传的地址 返 回:成功返回0 例:__int16 st;
st=rf_restore(icdev,1); 注:用此函数将某一块内的数值传入卡的内部寄存器,然后用rf_transfer()函数
将寄存器的数据再传送到另一块中去,即实现了块与块之间的数值传送。 (15)__int16 rf_transfer(HANDLE icdev,unsigned char _Adr); 功 能:将寄存器的数据传送到某一块中
参 数:HANDLE icdev:rf_init()返回的设备描述符 unsigned char _Adr:要传送的地址(0~63) 返 回:成功返回0 例:__int16 st;
st=rf_transfer(icdev,1); 注:见rf_restore()的说明。
(16)__int16 rf_load_key(HANDLE icdev,unsigned char _Mode,unsigned char SecNr,
unsigned char * _Nkey); 功 能:向读写器的RAM装入密码
参 数:HANDLE icdev:rf_init()返回的设备描述符
unsigned char _Mode :同 rf_authentication() unsigned char _SecNr:同 rf_authentication()
unsigned char *_Nkey:包含了要写入硬件系统RAM中的卡密码 返 回:成功则返回 0
例://key A and key B
unsigned char tk[2][7]= { {0xa0,0xa1,0xa2,0xa3,0xa4,0xa5}, {0xb0,0xb1,0xb2,0xb3,0xb4,0xb5} }; /*装入1扇区的A密码 0套,*/
if((rf_load_key(icdev,0, 1,tk[1]))!=0) {
printf(\ rf_exit(); exit(1); }
注:*_Nkey是与卡中的密码相对应的密码。
(17)__int16 rf_load_key_hex(HANDLE icdev,unsigned char _Mode, unsigned char SecNr,char * _Nkey); 功 能:向读写器的RAM装入16进制密码
参 数:HANDLE icdev:rf_init()返回的设备描述符
unsigned char _Mode :同 rf_authentication() unsigned char _SecNr:同 rf_authentication() unsigned char *_Nkey:要写入读写器RAM中的卡密码 返 回:成功则返回 0 例://key A
unsigned char tk[]= \等同于{0xa0_.0xa5}*/ /*装入1扇区的A密码|0套,*/
if((rf_load_key_Hex(icdev,0, 1,tk))!=0) {
printf(\ rf_exit(); exit(1); }
注:*_Nkey是与卡中的密码相对应的密码。
(18)_int16 rf_get_status(unsigned char *_Status); 功 能:取得读写器的版本号,如“mwrf025_v2.0”
参 数:unsigned char *_Status:返回读写器版本信息 返 回:成功则返回 0 例:int st;
unsigned char status[32]; st=rf_get_status(status);
(19) __int16 rf_request(int icdev,unsigned char _Mode, unsigned int *TagType);
功 能:寻卡请求
参 数: HANDLE icdev:设备描述符
unsigned char _Mode:寻卡模式,为0或1 Mode=0:IDLE模式,一次只选一张卡 Mode=1:ALL模式, 一次可选多张卡
unsigned int *Tagtype:指向返回的卡类型值 返 回:成功则返回 0 例:int st;
st=rf_request(icdev,IDLE,tagtype); 注:对卡操作前先执行寻卡指令
(20)__int16 rf_anticoll(int icdev,unsigned char _Bcnt,unsigned long *_Snr);
功 能:防止卡冲突;返回卡的序列号 参 数:HANDLE icdev: 设备描述符 unsigned char _Bcnt: 预选卡所用的位数,标准值为0(不考虑系列号) unsigned long *_Snr: 返回的卡序列号地址 返 回:成功则返回 0 例:int st;
st=rf_anticoll(0,snr);
注:request指令之后应立即调用anticoll,除非卡的序列号已知。
(21)__int16 rf_select(int icdev,unsigned long _Snr,unsigned char *_Size);
功 能:从多个卡中选取一个给定序列号的卡 参 数:HANDLE icdev:设备描述符 unsigned long _Snr:卡序列号
unsigned char *_Size:指向返回的卡容量的数据 返 回:成功则返回 0 例: int st; snr=239474;
st=rf_select(snr,size); /* 返回239474卡的容量 */
注:上述rf_card()寻卡函数包含了19~21三个低级函数。每次对卡重新操作时首先要调用rf_card()函数(或连续调用19~21三个函数)。
(22)__int16 rf_encrypt(char *key,char *ptrsource,unsigned __int16 msglen,
char *ptrdest); 功 能:DES算法加密
参 数:char *key:加密的密码,长度为8 char *ptrsource:原文
unsigned __int16 msglen:原文长度 char *ptrdest:密文 返 回:成功则返回0
例:/* 将长度为16的”abcdefghabcdefgh”用密码“12345678”加密 */ rf_encrypt(“12345678”,”abcdefghabcdefgh”,16,ptrdest)
(23)__int16 rf_decrypt(char *key,char *ptrsource,unsigned __int16 msglen,
char *ptrdest);
功 能:DES算法解密函数
参 数:char *key:加密的密码,长度为8 char *ptrsource:加密后密文
unsigned __int16 msglen:原文长度 char *ptrdest:原文 返 回:成功则返回0
例:略,使用过程与rf_encrypt相反。
(24)__int rf_beep(unsigned int _Msec); 功 能:蜂鸣
参 数:unsigned int _Msec:蜂鸣时间的长短,单位是10毫秒; 返 回:成功则返回 0 例:int st;
st=rf_beep(10); /*鸣叫100毫秒*/
(25)__int rf_disp(HANDLE icdev,unsigned char pt_mode,unsigned int digit);
功 能:使读写器的数码管显示数字
参 数:HANDLE icdev:rf_init()返回的设备描述符 unsigned char pt_mode: 小数点显示模式 取值如下:
0 — 小数点熄灭
1 — 个位后的小数点位亮 2 — 十位后的小数点位亮 3 — 百位后的小数点位亮 4 — 千位后的小数点位亮 unsigned int digit:要显示的数 返 回:成功则返回 0 例:int st;
st=rf_disp(icdev,0,1234); /*显示整数1234*/ (26)__int16 rf_reset(HANDLE icdev,unsigned __int16 _Msec); 功 能:射频头复位
参 数:HANDLE icdev:rf_init()返回的设备描述符
unsigned __int16 _Msec:复位时间,0~500毫秒有效 返 回:成功则返回 0
例:st=rf_reset(icdev,60);
(27)__int16 rf_HL_initval(HANDLE icdev,unsigned char _Mode,unsigned char _SecNr,
unsigned long _Value,unsigned char *_Snr); 功 能:高级初始化值
参 数:HANDLE icdev:rf_init()返回的设备描述符 unsigned char _Mode:寻卡模式,为0、1或2
Mode=0: IDLE模式,一次只操作一张卡