求助:根据一个读卡器的协议写一个标准的c++类
时间:2011-12-07
来源:互联网
对标准的c++语言不熟悉,有没有大牛能帮写一个类?
或者有做过这方面的,给个代码,我参考下自己写也行
C/C++ code
或者有做过这方面的,给个代码,我参考下自己写也行
C/C++ code
通讯格式: 波特率:9600 8 1 N 数据包长度L(1byte) 命令字C(1byte) 数据包D(L-1bytes) 通讯方向: -> 下位机送给上位机 <- 上位机送给下位机 IC卡读写器Demo程序: 1) 启动 <- 02 0B 0F (02为长度,0B为命令字,测试凤鸣器,0F凤鸣器响的时间) -> 01 00 (01为长度,00为测试成功) 2) 寻卡 <- 02 02 26 (02为命令字,26为RegMfOutSelect) -> 03 00 04 00 (00为命令成功代码,04表示Mifare One卡) <- 02 0B 0F -> 01 00 3) 防冲突 <- 01 03 (03为命令字) -> 05 00 52 00 75 7A (52 00 75 7A为卡号CardSerialNo) <- 02 0B 0F -> 01 00 4) 选择 <- 01 04 (04为命令字) -> 03 00 80 00 <- 02 0B 0F -> 01 00 5) 终止 <- 01 01 (01为命令字) -> 01 00 <- 02 0B 0F -> 01 00 6) 参数设置 <- 01 0C (0C为命令字) -> 01 00 7) 密码下载(扇区1密码为12个F) <- 09 06 60 01 FF FF FF FF FF FF (06为命令字,60为PICC_AUTHENT1A(61为PICC_AUTHENT1B),01为扇区号,12个F为密码) -> 01 00 <- 02 0B 0F -> 01 00 8) 数据读(扇区1块0块1块2) <- 02 02 52 (02为命令字,52为PICC_REQALL) -> 03 00 04 00 (04为RegFIFOLength) <- 01 03 (03为命令字) -> 05 00 52 00 75 7A (52 00 75 7A为卡号) <- 01 04 (04为命令字) -> 03 00 08 00 <- 04 05 60 01 04 (05为命令字,60为PICC_AUTHENT1A(61为PICC_AUTHENT1B),01为扇区1,04为RegFIFOLength) -> 01 00 <- 02 08 04 (08为命令号,04为块号) -> 11 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (16个00为数据) <- 02 08 05 (08为命令号,05为块号) -> 11 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (16个00为数据) <- 02 08 06 (08为命令号,06为块号) -> 11 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (16个00为数据) <- 02 08 07 (08为命令号,07为块号) -> 11 00 00 00 00 00 00 00 ff 07 80 69 ff ff ff ff ff ff (第一个00为返回代码,后面6个00为密码A,ff 07 80 69为控制位,后面6个ff为密码B) <- 02 0B 0F -> 01 00 9) 数据写(扇区1块0块1块2) <- 12 09 04 12 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (09为命令字,04为块号,12开始的16个字节为要写的数据) -> 01 00 <- 02 0B 0F -> 01 00 <- 12 09 05 45 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (09为命令字,05为块号,45开始的16个字节为要写的数据) -> 01 00 <- 02 0B 0F -> 01 00 <- 12 09 06 78 90 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (09为命令字,06为块号,78开始的16个字节为要写的数据) -> 01 00 <- 02 0B 0F -> 01 00 <- 12 09 07 11 11 11 11 11 11 ff 07 80 69 11 11 11 11 11 11 (09为命令字,07为块号,把密码A和密码B都修改成1) -> 01 00 <- 02 0B 0F -> 01 00 10) 块值操作(初始化) <- 12 09 04 11 11 11 11 EE EE EE EE 11 11 11 11 04 FB 04 FB (09为命令字,04为块号,11开始的16个字节为要写的数据) -> 01 00 <- 02 0B 0F -> 01 00 11) 块值操作(读出) <- 02 08 04 (08为命令字,04为块号) -> 11 00 11 11 11 11 EE EE EE EE 11 11 11 11 04 FB 04 FB (11后面的16个自己是读出来的数据) <- 02 0B 0F -> 01 00 12) 块值操作(加值) <- 08 0A C1 04 22 22 22 22 04 (0A为命令字,C1为PICC_INCREMENT,04为块号,4个字节的22是要加值的数据,04为块号) -> 01 00 <- 02 0B 0F -> 01 00 13) 块值操作(减值) <- 08 0A C0 04 11 11 11 11 04 (0A为命令字,C1为PICC_DECREMENT为块号,4个字节的11是要减值的数据,04为块号) -> 01 00 <- 02 0B 0F -> 01 00 14) 修改密码 <- 02 02 26 (02为命令字,26为RegMfOutSelect) -> 03 00 04 00 <- 01 03 (03为命令字) -> 05 00 52 00 75 7A (52 00 75 7A为卡号) <- 01 04 (04为命令字) -> 03 00 80 00 <- 04 05 60 01 04 (05为命令字,60为PICC_AUTHENT1A(61为PICC_AUTHENT1B),01为扇区号,04为RegFIFOLength) -> 01 00 <- 12 09 07 33 33 33 33 33 33 ff 07 80 69 33 33 33 33 33 33 (09为命令字,07为块号,33后面的12个字节为新密码) -> 01 00 <- 02 0B 0F -> 01 00 /* 扇区0 块0 块1 块2 块3 扇区1 块4 块5 块6 块7 扇区2 块8 块9 块10 块11 扇区3 块12 块13 块14 块15 扇区4 块16 块17 块18 块19 扇区5 块19 块20 块21 块22 扇区6 块23 块24 块25 块26 扇区7 块27 块28 块29 块30 扇区8 块31 块32 块33 块34 扇区9 块35 块36 块37 块38 扇区10 块39 块40 块41 块42 扇区11 块43 块44 块45 块46 扇区12 块47 块48 块49 块50 扇区13 块51 块52 块53 块54 扇区14 块55 块56 块57 块58 扇区15 块59 块60 块61 块62 */
作者: tomelrg 发布时间: 2011-12-07
C/C++ code
新增加的命令: 2、07 12 52 01 60 01 04 04 为单次寻卡、防冲突、选择卡、校验密码、读卡命令 解释:01为标志位,60为密码A,01为校验密码的扇区号,04为校验密码的块号,04为要读的块号 正确返回:11 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 解释:00为正确执行,00后面的是读出来的数据 3、17 12 52 02 60 01 04 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00为单次寻卡、防冲突、选择卡、校验密码、写卡命令 解释:02为标志位,60为密码A,01为校验密码的扇区号,04为校验密码的块号,04为要写的块号,00后面是要写进去的数据 正确返回:01 00 4、02 13 26 为自动循环寻卡命令(这个命令运行中,发 01 15 为在自动循环的状态下强制退出) 错误返回:01 03 无卡退出 01 01 异常出错 01 ff 无效命令字 举理解说明: 1、比如读第一扇区的全部数据 1)下载密码操作: 09 06 60 01 FF FF FF FF FF FF (06为命令字,60为PICC_AUTHENT1A(61为PICC_AUTHENT1B),01为扇区号,12个F为密码) 2)校验密码并读出其中的一个块(比如04块,这个块是任意选的) 07 12 52 01 60 01 04 04 为单次寻卡、防冲突、选择卡、校验密码、读卡命令 3)读其他的块(也可以用第二条命令来读,但是那样会慢很多,用下面这个命令就会快很多的) 02 08 05(06、07) 2、比如写第一扇区的全部数据 1)下载密码操作: 09 06 60 01 FF FF FF FF FF FF (06为命令字,60为PICC_AUTHENT1A(61为PICC_AUTHENT1B),01为扇区号,12个F为密码) 2)校验密码并写出其中的一个块(比如04块,这个块是任意选的) 17 12 52 02 60 01 04 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00为单次寻卡、防冲突、选择卡、校验密码、写卡命令 3)写其他的块(也可以用第二条命令来写,但是那样会慢很多,用下面这个命令就会快很多的) 12 09 05(06、07)00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
作者: tomelrg 发布时间: 2011-12-07
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28