(6)int rf_read(int icdev,usigned char _Adr,unsigned char *_Data); 功 能:读数据,一次必须读一个块
参 数:int icdev:rf_init()返回的设备描述符 unsigned char _Adr:块地址(0~63) unsigned char *_Data:读出的数据 返 回:成功则返回0 例:int st;
static unsigned char data[16] st=rf_read(icdev,0,data);
(7) int rf_read_hex(int icdev,usigned char _Adr, char *_Data); 功 能:以十六进制读数据,一次读一个块
参 数:int icdev:rf_init()返回的设备描述符 unsigned char _Adr:块地址(0~63)
char *_Data:读出的数据,数据以16进制形式存放 返 回:成功则返回0 例:int st;
unsigned char data[32]
st=rf_read_hex(icdev,0,data);
(8) int rf_write(int icdev,unsigned char _Adr,unsigned char *_Data); 功 能:写数据, 一次必须写一个块;
参 数:int icdev:rf_init()返回的设备描述符 unsigned char _Adr:块地址(1~63)
unsigned char *_Data:写入数据,块长度为16 B 返 回:成功则返回 0 例:int st;
static unsigned char data[16]=”aaaaaaaabbbbbbbb”; st=rf_write(icdev,1,data); /*写入块1*/
(9) int rf_write_hex(int icdev,unsigned char _Adr,char *_Data) 功 能:以十六进制写数据,一次必须写一个块; 参 数:int icdev:rf_init()返回的设备描述符 unsigned char _Adr:块地址(1~63) char *_Data:写入数据 返 回:成功则返回 0 例:int st; unsigned char write_buf[32]=\ st=rf_write_hex(icdev,1,write_buf);
(10)int rf_initval(int icdev,unsigned char _Adr,unsigned long _Value); 功 能:初始化块值
参 数:int icdev:rf_init()返回的设备描述符 unsigned char _Adr:块地址(1~63) unsigned long _Value:初始值
返 回:成功则返回 0 例:int st
st=rf_initval(icdev,1,100); /*将块1的值初始化为1000*/ 注:作为数值处理的块,是以特殊格式存贮的,必须先初始化值,然后才可进行
读、减、加的处理。
(11)int rf_increment(int icdev,unsigned char _Adr,unsigned long _Value); 功 能:块增值操作
参 数:int icdev:rf_init()返回的设备描述符 unsigned char _Adr:块地址(1~63) unsigned long _Value:要增加的值 返 回:成功则返回 0 例:int st;
st=rf_increment(icdev,1,10); /*将块1的值增加10*/ (12)int rf_decrement(int icdev,unsigned char _Adr,unsigned long _Value); 功 能:块减值操作
参 数:int icdev:rf_init()返回的设备描述符 unsigned char _Adr:块地址(1~63) unsigned long _Value:要减少的值 返 回:成功则返回 0 例:int st;
st=rf_decrement(icdev,1,10); /*将块1的值减少10*/ (13)int rf_readval(int icdev,unsigned char _Adr,unsigned long *_Value); 功 能:读值
参 数:int icdev:rf_init()返回的设备描述符 unsigned char _Adr:块地址(0~63)
unsigned long *_Value:返回读出值的地址 返 回:成功返回0 例:int st;
unsigned long value;
st=rf_readval(icdev,1,&value); /*读出块1的值,放入value*/
(14)int rf_restore(int icdev,unsigned char _Adr); 功 能:回传函数,将块内容传入卡的内部寄存器 参 数:int icdev:rf_init()返回的设备描述符
unsigned char *_Adr:要进行回传的地址(0~63) 返 回:成功返回0 例:int st;
st=rf_restore(icdev,1);
注:用此函数将某一块的数值传入内部寄存器,然后用rf_transfer()函数传送到
另一块中去,即实现了块与块之间的数值传送。
(15)int rf_transfer(int icdev,unsigned char _Adr); 功 能:将寄存器的内容传送到指定块中
参 数:int icdev:rf_init()返回的设备描述符
unsigned char _Adr:要传送的地址(0~63) 返 回:成功返回0 例:int st;
st=rf_transfer(icdev,1); 注:见rf_restore()的说明。
(16)int rf_load_key(int icdev,unsigned char _Mode,unsigned char SecNr, unsigned char *_Nkey); 功 能:向读写器RAM中装入密码
参 数:int 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扇区的0套A密码*/
if((rf_load_key(icdev,0, 1,tk[1]))!=0) { printf(\ rf_exit(); exit(1); }
注:*_Nkey是与卡中的密码相对应的密码。在验证密码之前,先要使用load?_key函数
将卡中的密码写入读写器的RAM中。
(17)int rf_load_key_hex(int icdev,unsigned char _Mode,unsigned char SecNr,
char *_Nkey); 功 能:向读写器RAM中装入十六进制密码 参 数:int icdev:设备描述符
unsigned char _Mode :同 rf_authentication() unsigned char _SecNr:同 rf_authentication() unsigned char *_Nkey:写入读写器中的卡密码 返 回:成功则返回 0
例:/* 装入1扇区的A密码|0套*/
if((rf_load_key_Hex(icdev,0, 1, \ { printf(\ rf_exit();
exit(1); }
注:*_Nkey是与卡中的密码相对应的密码。
(18)int rf_beep(int icdev,unsigned int _Msec); 功 能:蜂鸣
参 数:int icdev:设备描述符
unsigned int _Msec:蜂鸣时间的长短,单位是10毫秒 返 回:成功则返回 0 例:int st;
st=rf_beep(icdev,10); /*鸣叫100毫秒*/
(19)int rf_disp(int icdev,unsigned char pt_mode,unsigned int digit); 功 能:读写器的数码管显示数字
参 数:int 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*/ (20) int rf_request(int icdev,unsigned char _Mode,
unsigned int *TagType); 功 能:寻卡请求
参 数: int icdev:设备描述符
unsigned char _Mode:寻卡模式,为0或1 Mode=0:IDLE模式,一次只选一张卡 Mode=1:ALL模式, 一次可选多张卡
unsigned int *Tagtype:指向返回的卡类型值 返 回:成功则返回 0 例:int st;
st=rf_request(icdev,IDLE,tagtype); 注:对卡操作前先执行寻卡指令
(21)int rf_anticoll(int icdev,unsigned char _Bcnt,unsigned long *_Snr); 功 能:防止卡冲突;返回卡的序列号 参 数:int icdev:设备描述符 unsigned char _Bcnt: 预选卡所用的位数,标准值为0(不考虑系列号) unsigned long *_Snr: 返回的卡序列号地址
返 回:成功则返回 0 例:int st;
st=rf_anticoll(0,snr);
注:request指令之后应立即调用anticoll,除非卡的序列号已知。
(22)int rf_select(int icdev,unsigned long _Snr,unsigned char *_Size); 功 能:从多个卡中选取一个给定序列号的卡 参 数:int icdev:设备描述符
unsigned long _Snr:卡序列号
unsigned char *_Size:指向返回的卡容量的数据 返 回:成功则返回 0 例: int st; snr=239474;
st=rf_select(snr,size); /* 返回239474卡的容量 */
注:上述rf_card()寻卡函数包含了20~22三个低级函数。每次对卡重新操作时首先要调用rf_card()函数(或连续调用20~22三个函数)。
(23)int rf_encrypt(char *key,char *ptrSource,unsigned int msgLen,char *ptrDest);
功 能:DES加密函数
参 数:char *key:指向加密用的密钥
char *ptrSource:指向要加密的原文 unsigned int msglen:原文的长度 char *ptrDest:指向加密后的密文 返 回:成功则返回 0 例:int st;
char dkey[]=\
char dptrSource[]=\ unsigned int dmsglen; char *dptrDest;
dmsglen=strlen(dptrSource);
st=rf_encrypt(dkey,dptrSource,dmsglen,dptrDest);
(24)int rf_decrypt(char *key,char *ptrSource,unsigned int msgLen,char *ptrDest);
功 能:DES解密函数
参 数:char *key:指向解密用的密钥
char *ptrSource:指向要解密的密文 unsigned int msglen:密文的数据长度 char *ptrDest:指向解密后的原文 返 回:成功则返回 0
例:略,过程与解密相反。
(25)int rf_get_status(int icdev,unsigned char *_Status); 功 能:取读写器的的版本号,如“mwrf025_v2.0”