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

2019-04-10 09:52

st=rf_anticoll(0,snr);

注:request指令之后应立即调用anticoll,除非卡的序列号已知。 (22)int rf_select(unsigned long _Snr,unsigned char *_Size); 功 能:从多个卡中选取一个给定序列号的卡 参 数:unsigned long _Snr:卡序列号

unsigned char *_Size:指向返回的卡容量的数据 返 回:成功则返回 0 例: int st;

unsigned long snr=239474; unsigned char *size; st=rf_select(snr,size);

注:上述rf_card()函数包含了20~22三个低级函数。每次对卡重新操作时首先要调用

rf_card()函数(或连续调用20~22三个函数)。 (23) int rf_reset(unsigned int _Msec); 功 能:射频读写模块复位

参 数:unsigned int _Msec:复位时间,0~500毫秒有效 返 回:成功则返回 0 例:int st;

st=rf_reset(60)

(24) int rf_HL_initval(unsigned char _Mode,unsigned char _SecNr, unsigned long _Value,unsigned long *_Snr); 功 能:高级初始化值

参 数:unsigned char _Mode:寻卡模式

Mode=0:IDLE模式,一次只对一张卡操作 Mode=1:ALL模式,一次可对多张卡操作 Mode=2:只对序列号等于snr的卡操作 unsigned char _SecNr:扇区号(0~15) unsigned long _Value:初始值

unsigned long *_Snr:卡的序列号地址 返 回:成功则返回 0

例:if((rf_HL_initval(0x1,1,100L,&snr))!=0) { printf(\ }

printf(\ printf(\

注:下述五个高级函数为几个低级函数的组合,使用前可不必执行rf_card()和rf_authentication指令。

(25) int rf_HL_decrement(unsigned char _Mode,unsigned char _SecNr, unsigned long _Value,unsigned long _Snr,

unsigned long *_NValue, unsigned long *_NSnr);

功 能:高级减值操作

参 数:unsigned char _Mode:寻卡模式,参考HL_initval() unsigned char _SecNr:扇区地址(0~15) unsigned long _Value:要减的值 unsigned long _Snr:卡的序列号 unsigned long *_NValue:减后的值

unsigned long *_NSnr:返回卡的序列号地址 返 回:成功则返回 0

例: if((rf_HL_decrement(1,1,1L,snr,&Rvalue,&Rsnr))!=0) {

printf(\continue; }

printf(\

(26)int rf_HL_increment(unsigned char _Mode,unsigned char _SecNr, unsigned long _Value,unsigned long _Snr, unsigned long *_NValue,unsigned long *_NSnr); 功 能:高级增值操作

参 数:unsigned char _Mode:寻卡模式,参考HL_initval() unsigned char _SecNr:扇区地址(0~15) unsigned long _Value:要加的值 unsigned long _Snr:卡的序列号 unsigned long *_NValue:加后的值

unsigned long *_NSnr:返回卡的序列号地址 返 回:成功则返回 0

例: if((rf_HL_increment(1,1,1L,snr,&Rvalue,&Rsnr))!=0) {

printf(\continue; }

printf(\

(27)int rf_HL_write(unsigned char _Mode,unsigned char _Adr, unsigned long *_Snr,unsigned char *_Data); 功 能:高级写数据

参 数:unsigned char _Mode:寻卡模式

Mode=0:IDLE模式,一次只对一张卡操作 1:ALL模式,一次可对多张卡操作 2:只对序列号等于snr的卡操作 unsigned char _Adr:块地址(1~63) unsigned long *_Snr:卡的序列号地址 unsigned char *_Data:写入的数据 返 回:成功则返回 0

例: if((rf_HL_write(1,5,Snr,HLdata))!=0) { printf(\ }

(28) int rf_HL_read(unsigned char _Mode,unsigned char _Adr,unsigned long _Snr,

unsigned char *_Data, unsigned long *_NSnr); 功 能:高级读数据

参 数:unsigned char _Mode:寻卡模式,参考HL?write() unsigned char _Adr:块地址(0~63) unsigned long _Snr:卡的序列号 unsigned char *_Data:读出的数据 unsigned long *_NSnr:返回卡的序列号 返 回:成功则返回 0

例:if((rf_HL_read(1,5,snr,HLdata,&Rsnr))!=0) {

printf(\ }

(29) int rf_encrypt (char *key, char *ptrsource,unsigned int msglen , char * ptrdest) 功 能:DES算法加密函数

参 数:char *key:指向加密用的密钥

char *ptrsource:指向要加密码的原文

unsigned int msglen: 原文长度,必需为8的倍数 char *ptrdest: 指向加密后的密文 返回:成功返回0

例: char key[]=”12345678”;

char ptrsource[]=”abcdefghabcdefgh”; char*ptrdest;

st=ic_encrypt(dkey,ptrsource,16,ptrdest);

将长度为16的”abcdefghabcdefgh”用密码“12345678” 加密

(30) int rf_decrypt(char *key,char ptrsource,unsigned int msglen, char *ptrdest) 功能:DES算法解密函数

参数:char *key:加密的密钥 char ptrsource: 密文

unsigned int msglen: 原文长度必需为8的倍数 char *ptrdest: 原文 返回:成功返回0

例:略。使用过程与ic_encrypt相反。

(31) int rf_initval_ml(unsigned int _Value);

功 能:初始化值,仅适用于ML卡 参 数:unsigned int _Value:初始值 返 回:成功则返回 0 例:int st;

value=1000;

st=rf_initval(value); /*将ML卡电子钱包赋初值1000*/ 注:必须先赋初始化值, 然后才可以执行减值操作。

(32)int rf_decrment_ml(unsigned int _Value); 功 能:减值操作,仅适用于ML卡

参 数: unsigned int _Value:要减的值 返 回:成功则返回 0

例:int st;

st=rf_decrement(10); /*将ML卡钱包的值减少10 */ (33)int rf_readvl_ml(unsigned int *_Value); 功 能:读值操作,仅适用于ML卡

参 数: unsigned int * _Value:指向读出值的地址 返 回:成功则返回 0 例:int st;

unsigned int value;

st=rf_readvl_ml(&value); /*读出钱包的值*/

3.5 Windows 16位动态库

(1)int rf_init(int port,long baud); 功 能:初始化串口

参 数:int port:通讯口号(0~3)

long baud:通讯波特率(9600~57600),不可缺省 返 回:成功则返回设备描述符(≥0) 例:int icdev;

icdev=rf_init(1,57600); /*初始化com2口以波特率57600*/

(2)void rf_exit(int icdev); 功 能:关闭串口

参 数:int icdev:rf_init()返回的设备描述符 返 回:无

例:rf_exit(icdev);

(3) int rf_card(int icdev,unsigned char _Mode,unsigned long *_Snr); 功 能:寻卡,能返回在工作区域内某张卡的序列号 参 数:int icdev:rf_init()返回的设备描述符 unsigned char _Mode:寻卡模式

Mode=0:IDLE模式,一次只选一张卡 Mode=1: ALL模式,一次可选多张卡

unsigned long *_Snr:返回卡的序列号地址 返 回:成功则返回 0 例:int st;

unsigned long snr;

st=rf_card(icdev,IDLE,&snr);

注:如果模式设为0,则在对卡操作完成后,须执行rf_halt()指令中止对卡的操作。

这样,只有该卡离开并重新进入操作区时,读写器才能对它再次操作。 (4)int rf_authentication(int icdev ,unsigned char _Mode,unsigned char _SecNr);

功 能:验证某一扇区密码

参 数:int icdev:rf_init()返回的设备描述符 unsigned char _Mode:验证密码的方式 取值如下:

0 — 用KEYSET0和KEYA验证 1 — 用KEYSET1和KEYA验证 2 — 用KEYSET2和KEYA验证 4 — 用KEYSET0和KEYB验证 5 — 用KEYSET1和KEYB验证 6 — 用KEYSET2和KEYB验证

unsigned char _SecNr:要验证密码的扇区号(0~15) 返 回:成功则返回 0 例:int st;

st=rf_authentication(icdev,0,0);

注:每张卡上有A密码和B密码,可根据实际需要确定是否使用B密码,这由卡的存取

控制位来决定。此外,读写器中可以存放三套密码,用来校验具有不同密码的卡。

可用rf_load_key()来分别装入,只有装入后才能使用验证密码函数验证。

(5) int rf_halt(int icdev); 功 能:中止卡操作

参 数:int icdev:rf_init()返回的设备描述符 返 回:成功则返回 0 例:int st;

st=rf_halt(icdev);

注:使用rf_card()函数时,如果模式选择为 IDLE,则在对卡进行读写操作完毕后,

必须执行rf_halt(),且只能当该卡离开操作区域并再次进入时,读写器才能够

再次操作它。


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

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

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

马上注册会员

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