MF-50N非接触式IC卡读写函数(4)

2019-04-10 09:52

(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”


MF-50N非接触式IC卡读写函数(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:业余篮球队训练计划

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: