Commit 0344002f8a29dc62e1ab8ffb932e66fa664cd334

Authored by liuye
1 parent 691a0ae0

feat(dlcm&doc):支持华大智宝cpu卡,并增加相关文档资料

支持华大智宝cpu卡,并增加相关文档资料。主要修改替换秘钥接口和创建文件接口。
dlcm/dlcm/DLCCard.cc
... ... @@ -280,8 +280,7 @@ int DLCCard::InstallCardKey(const unsigned char* dir, const unsigned char key_id
280 280 {
281 281 int result = 0;
282 282  
283   -
284   - unsigned char dir_hex[2] = { 0 }, key_hex[16] = { 0 },/* au8OldKey[16] = { 0 },*/ main_key_hex[16] = { 0 };
  283 + unsigned char dir_hex[2] = { 0 }, key_hex[16] = { 0 }, main_key_hex[16] = { 0 };
285 284 StringToHex(dir, 4, dir_hex);
286 285 StringToHex(key, 32, key_hex);
287 286 StringToHex(key_main, 32, main_key_hex);
... ... @@ -393,6 +392,41 @@ int DLCCard::InstallCardKey(const unsigned char* dir, const unsigned char key_id
393 392 CalculateMac(cmd, 37, random, main_key_hex, &cmd[37]);
394 393 result = InstallKey(cmd, 41);
395 394 }
  395 + case kCardHDZB:
  396 + {
  397 + unsigned char cmd[33] = { 0x84, 0xd4, 0x01, 0x00, 0x1c };
  398 + unsigned char key_data[24] = { 0 };
  399 + key_data[0] = 0x13;
  400 + key_data[3] = 0x00;
  401 + memcpy(&key_data[4], key_hex, 16);
  402 + key_data[20] = 0x80;
  403 + key_data[21] = 0x00;
  404 + key_data[22] = 0x00;
  405 + key_data[23] = 0x00;
  406 +
  407 + if (key_type == 0)
  408 + {
  409 + key_data[1] = 0x00;
  410 + key_data[2] = 0x00;
  411 + }
  412 + else if (key_type == 1)
  413 + {
  414 + key_data[1] = 0x00;
  415 + key_data[2] = 0x01;
  416 + }
  417 + else if (key_type == 2)
  418 + {
  419 + key_data[1] = 0x01;
  420 + key_data[2] = 0x01;
  421 + }
  422 +
  423 + Encrypt(key_data, 24, main_key_hex, &cmd[5]);
  424 +
  425 + unsigned char random[8] = { 0 };
  426 + GetRandom(random, 8);
  427 + CalculateMac(cmd, 29, random, main_key_hex, &cmd[29]);
  428 + result = InstallKey(cmd, 33);
  429 + }
396 430 break;
397 431 }
398 432 return result;
... ... @@ -717,6 +751,61 @@ int DLCCard::CreatCardFile(const unsigned char* parent_dir, const unsigned char*
717 751 }
718 752  
719 753 }
  754 + else if (card_mf = kCardHDZB)
  755 + {
  756 + if (file_type == kFTDDF)
  757 + {
  758 + if (SelectDir(parent_dir_hex))
  759 + {
  760 + return kCanNotFindDir;
  761 + }
  762 +
  763 + unsigned char key[16] = { 0 };
  764 + StringToHex((const unsigned char*)k25FileKey, 32, key);
  765 + if (ExternalAuthenticate(0x00, key, NULL))
  766 + {
  767 + return kVerifyKeyFailure;
  768 + }
  769 +
  770 + unsigned char create_file_cmd[26] = { 0x80, 0xe0, 0x00, 0x02, 0x1d };
  771 + memcpy(&create_file_cmd[5], file_name_hex, 2);
  772 + memcpy(&create_file_cmd[7], file_size_hex, 2);
  773 + create_file_cmd[9] = 0x00;
  774 + create_file_cmd[10] = 0x00;
  775 + create_file_cmd[11] = 0x00;
  776 + create_file_cmd[12] = 0x00;
  777 + create_file_cmd[13] = file_name_hex[1];
  778 + create_file_cmd[14] = 0xb9;
  779 + create_file_cmd[15] = 0x00;
  780 + create_file_cmd[16] = 0x01;
  781 + create_file_cmd[17] = 0x03;
  782 + memcpy(&create_file_cmd[18], kDF10FileAID, 8);
  783 +
  784 + unsigned char recv_data[kHalfBlock], recv_data_len = 0;
  785 + result = DLCDevice::Instance().SendCommand(create_file_cmd, 15, recv_data, recv_data_len);
  786 +
  787 + if (result != kSuccess)
  788 + {
  789 + result = kCreateKeyFileFailed;
  790 + break;
  791 + }
  792 +
  793 + unsigned char create_key_file_cmd[13] = { 0x80, 0xe0, 0x00, 0x0b, 0x08, 0x00, 0x10, 0x02, 0x00, 0x00, 0x33, 0x00, 0x00 };
  794 +
  795 + unsigned char recv[kHalfBlock], recv_len = 0;
  796 + result = DLCDevice::Instance().SendCommand(create_key_file_cmd, 13, recv, recv_len);
  797 + }
  798 + else if (file_type == kFTEF)
  799 + {
  800 + unsigned char cmd[18] = { 0x80, 0xe0, 0x00, 0x03, 0x0d};
  801 + memcpy(&cmd[5], file_name_hex, 2);
  802 + memcpy(&cmd[7], file_size_hex, 2);
  803 + memset(&cmd[9], 0x00, 9);
  804 +
  805 + unsigned char recv[kHalfBlock], recv_len = 0;
  806 + result = DLCDevice::Instance().SendCommand(cmd, 18, recv, recv_len);
  807 + }
  808 + }
720 809 }while (0);
721 810  
722 811 return result;
... ...
dlcm/dlcm/DLCCard.h
... ... @@ -15,6 +15,7 @@ enum CardManufacturer
15 15 kCardHS = 0x20,
16 16 kCardMTLTLD = 0x30,
17 17 kCardKDZN = 0x40,
  18 + kCardHDZB = 0x70,
18 19 kCardNULL = 0xff
19 20 };
20 21  
... ...
dlcm/dlcm/stdafx.h
... ... @@ -5,27 +5,6 @@
5 5 #include "dcrf32.h"
6 6 #include "CDLTools.h"
7 7  
8   -
9   -//const int NULL = 0;
10   -
11   -//typedef signed char int8_t;
12   -//typedef short unsigned int_t;
13   -//typedef int int_t;
14   -//typedef long long int64_t;
15   -//typedef unsigned char unsigned char;
16   -//typedef unsigned short uunsigned int_t;
17   -//typedef unsigned int uint_t;
18   -//typedef unsigned long long uint64_t;
19   -//typedef unsigned char* PBlock;
20   -
21   -//#define BLOCK 250 //目前文件0005和0015文件最大250个字节,可以存储500个字符
22   -//#define RBLOCK 254 //加上结尾9000,最大可返回254字节的数据
23   -//#define HBLOCK 256
24   -//#define QBLOCK 128
25   -//#define WBLOCK 521
26   -//#define DBLOCK 1024
27   -//#
28   -
29 8 const int kHalfBlock = 256;
30 9 const int kBlock = 512;
31 10 const int kDoubleBlock = 1024;
... ...
doc/D8&&T10ULM最新开发包/demo/help.chm 0 → 100644
No preview for this file type
doc/D8&&T10ULM最新开发包/demo/help.chw 0 → 100644
No preview for this file type
doc/D8&&T10ULM最新开发包/sdk/dcrf32.h 0 → 100644
  1 +// -*- mode:c++ -*-
  2 +
  3 +/**
  4 + * @file
  5 + * @author Wei Yang <wstcreator@hotmail.com>
  6 + * @date Tue Dec 20 11:42:16 2016
  7 + * @brief 读写器功能接口声明文件。
  8 + */
  9 +
  10 +#ifndef DCRF32_H_
  11 +#define DCRF32_H_
  12 +
  13 +#ifdef WIN32
  14 +#include <winsock2.h>
  15 +#pragma comment(lib, "ws2_32.lib")
  16 +#define USER_API __stdcall
  17 +#else
  18 +typedef int HANDLE;
  19 +#define USER_API
  20 +#endif
  21 +
  22 +#ifdef __cplusplus
  23 +extern "C" {
  24 +#endif
  25 +
  26 + /**
  27 + * @brief 库入口。
  28 + * @par 说明:
  29 + * 可以获取或设置一些库相关参数,此接口可不掉用,如需调用必须放在所有其它接口之前调用。
  30 + * @param[in] flag 标记,用于决定 @a context 的类型和含义。
  31 + * @n 0 - 表示获取库版本, @a context 类型为char *,请至少分配8个字节。
  32 + * @n 1 - 表示设置库的工作目录, @a context 类型为const char *。
  33 + * @n 2 - 表示设置库调用者的工作目录, @a context 类型为const char *。
  34 + * @n 3 - 保留内部使用,表示设置辅助接口上下文, @a context 类型为自定义结构指针。
  35 + * @n 4 - 保留内部使用,表示获取辅助接口上下文, @a context 类型为自定义结构指针。
  36 + * @param[in,out] context 参数实际类型和含义由 @a flag 的值来决定。
  37 + */
  38 + void USER_API LibMain(int flag, void *context);
  39 +
  40 + /**
  41 + * @brief 配置端口名称。
  42 + * @par 说明:
  43 + * 用于配置端口对应的物理名称,在调用 ::dc_init 之前可以使用此接口来改变端口号内部对应的默认物理名称,如Windows平台下0端口号对应的默认名称为"COM1",Linux平台下0端口号对应的默认名称为"/dev/ttyS0"。
  44 + * @param[in] port 端口号,同 ::dc_init 的 @a port ,但仅支持串口模式和蓝牙模式的端口号,即:0~99、300~399。
  45 + * @param[in] name 物理名称。
  46 + */
  47 + void USER_API dc_config_port_name(short port, const char *name);
  48 +
  49 + /**
  50 + * @brief 打开设备。
  51 + * @par 说明:
  52 + * 建立设备的通讯并且分配相应的资源,大部分功能接口都需要在此过程后才能进行,在不需要使用设备后,必须使用 ::dc_exit 去关闭设备的通讯和释放资源。
  53 + * @param[in] port 端口号。
  54 + * @n 0~99 - 表示串口模式(编号物理对应),编号0表示第一个串口合法设备,编号1表示第二个串口合法设备,以此类推。
  55 + * @n 100~199 - 表示USB模式(编号逻辑对应),编号100表示第一个USB合法设备,编号1表示第二个USB合法设备,以此类推。
  56 + * @n 200~299 - 表示PCSC模式(编号逻辑对应),编号200表示第一个PCSC合法设备,编号201表示第二个PCSC合法设备,以此类推。
  57 + * @n 300~399 - 表示蓝牙模式(编号逻辑对应),编号300表示第一个蓝牙合法设备,编号301表示第二个蓝牙合法设备,以此类推。
  58 + * @param[in] baud 波特率,只针对串口模式有效。
  59 + * @return <0表示失败,否则为设备标识符。
  60 + */
  61 + HANDLE USER_API dc_init(short port, int baud);
  62 +
  63 + /**
  64 + * @brief 关闭设备。
  65 + * @par 说明:
  66 + * 关闭设备的通讯和释放资源。
  67 + * @param[in] icdev 设备标识符。
  68 + * @return <0表示失败,==0表示成功。
  69 + */
  70 + short USER_API dc_exit(HANDLE icdev);
  71 +
  72 + /**
  73 + * @brief 获取名称。
  74 + * @par 说明:
  75 + * 此接口将获取一个用于识别当前打开设备与软件层对应的逻辑名称,获取的逻辑名称仅供内部使用。
  76 + * @param[in] icdev 设备标识符。
  77 + * @param[out] name 返回的名称字符串,请至少分配64个字节。
  78 + * @return <0表示失败,==0表示成功。
  79 + */
  80 + short USER_API dc_getname(HANDLE icdev, char *name);
  81 +
  82 + /**
  83 + * @brief 保留。
  84 + */
  85 + short USER_API dc_config(HANDLE icdev, unsigned char _Mode, unsigned char _Baud);
  86 +
  87 + /**
  88 + * @brief 寻卡请求。
  89 + * @par 说明:
  90 + * 支持ISO 14443 Type A类型卡片的寻卡请求。
  91 + * @param[in] icdev 设备标识符。
  92 + * @param[in] _Mode 模式,0x00表示对空闲卡进行操作,0x01表示对所有卡操作。
  93 + * @param[out] TagType 返回的ATQA值。
  94 + * @return <0表示失败,==0表示成功,==1表示无卡或无法寻到卡片。
  95 + */
  96 + short USER_API dc_request(HANDLE icdev, unsigned char _Mode, unsigned short *TagType);
  97 +
  98 + /**
  99 + * @brief 防卡冲突。
  100 + * @par 说明:
  101 + * 支持ISO 14443 Type A类型卡片的防卡冲突。
  102 + * @param[in] icdev 设备标识符。
  103 + * @param[in] _Bcnt 保留,固定为0x00。
  104 + * @param[out] _Snr 返回的卡序列号。
  105 + * @return <0表示失败,==0表示成功。
  106 + */
  107 + short USER_API dc_anticoll(HANDLE icdev, unsigned char _Bcnt, unsigned int *_Snr);
  108 +
  109 + /**
  110 + * @brief 选卡操作。
  111 + * @par 说明:
  112 + * 通过指定序列号,选取相应的卡片。
  113 + * @param[in] icdev 设备标识符。
  114 + * @param[in] _Snr 卡片序列号。
  115 + * @param[out] _Size 返回的SAK值。
  116 + * @return <0表示失败,==0表示成功。
  117 + */
  118 + short USER_API dc_select(HANDLE icdev, unsigned int _Snr, unsigned char *_Size);
  119 +
  120 + /**
  121 + * @brief 验证M1卡密码。
  122 + * @par 说明:
  123 + * 使用设备内部装载的密码来验证M1卡密码。
  124 + * @param[in] icdev 设备标识符。
  125 + * @param[in] _Mode 模式。
  126 + * @n 0x00 - 表示用设备内部装载的第0套A密码来验证当前选取卡片的A密码。
  127 + * @n 0x01 - 表示用设备内部装载的第1套A密码来验证当前选取卡片的A密码。
  128 + * @n 0x02 - 表示用设备内部装载的第2套A密码来验证当前选取卡片的A密码。
  129 + * @n 0x04 - 表示用设备内部装载的第0套B密码来验证当前选取卡片的B密码。
  130 + * @n 0x05 - 表示用设备内部装载的第1套B密码来验证当前选取卡片的B密码。
  131 + * @n 0x06 - 表示用设备内部装载的第2套B密码来验证当前选取卡片的B密码。
  132 + * @param[in] _SecNr 要验证密码的扇区号。
  133 + * @return <0表示失败,==0表示成功。
  134 + */
  135 + short USER_API dc_authentication(HANDLE icdev, unsigned char _Mode, unsigned char _SecNr);
  136 +
  137 + /**
  138 + * @brief 终止卡操作。
  139 + * @par 说明:
  140 + * 使卡片进入终止状态,此时必须把卡移出感应区后再次放入感应区才能寻到这张卡。
  141 + * @param[in] icdev 设备标识符。
  142 + * @return <0表示失败,==0表示成功。
  143 + */
  144 + short USER_API dc_halt(HANDLE icdev);
  145 +
  146 + /**
  147 + * @brief 读卡数据。
  148 + * @par 说明:
  149 + * 读取卡内数据,对于M1卡,一次读取一个块的数据,为16个字节;对于ML卡,一次读取相同属性的两页,为8个字节。
  150 + * @param[in] icdev 设备标识符。
  151 + * @param[in] _Adr 地址。
  152 + * @n M1卡 - S50块地址(0~63),S70块地址(0~255)。
  153 + * @n ML卡 - 页地址(0~11)。
  154 + * @param[out] _Data 固定返回16个字节数据,真实数据可能小于16个字节。
  155 + * @return <0表示失败,==0表示成功。
  156 + */
  157 + short USER_API dc_read(HANDLE icdev, unsigned char _Adr, unsigned char *_Data);
  158 +
  159 + /**
  160 + * @brief 读卡数据。
  161 + * @par 说明:
  162 + * ::dc_read 的HEX形式接口,参数 @a _Data 为HEX格式。
  163 + */
  164 + short USER_API dc_read_hex(HANDLE icdev, unsigned char _Adr, char *_Data);
  165 +
  166 + /**
  167 + * @brief 写卡数据。
  168 + * @par 说明:
  169 + * 写入数据到卡片内,对于M1卡,一次必须写入一个块的数据,为16个字节;对于ML卡,一次必须写入一个页的数据,为4个字节。
  170 + * @param[in] icdev 设备标识符。
  171 + * @param[in] _Adr 地址。
  172 + * @n M1卡 - S50块地址(1~63),S70块地址(1~255)。
  173 + * @n ML卡 - 页地址(2~11)。
  174 + * @param[out] _Data 固定传入16个字节数据,真实数据可能小于16个字节。
  175 + * @return <0表示失败,==0表示成功。
  176 + */
  177 + short USER_API dc_write(HANDLE icdev, unsigned char _Adr, unsigned char *_Data);
  178 +
  179 + /**
  180 + * @brief 写卡数据。
  181 + * @par 说明:
  182 + * ::dc_write 的HEX形式接口,参数 @a _Data 为HEX格式。
  183 + */
  184 + short USER_API dc_write_hex(HANDLE icdev, unsigned char _Adr, char *_Data);
  185 +
  186 + /**
  187 + * @brief 保留。
  188 + */
  189 + short USER_API dc_write_TS(HANDLE icdev);
  190 +
  191 + /**
  192 + * @brief 装载设备密码。
  193 + * @par 说明:
  194 + * 装载M1卡密码到设备内部,装载后可以在特定时候用 ::dc_authentication 来验证M1卡密码。注意:由于多次装载设备密码可能会受硬件存储寿命限制,此接口只用于密码相对固定,装载次数少的场合。
  195 + * @param[in] icdev 设备标识符。
  196 + * @param[in] _Mode 模式,同 ::dc_authentication 的 @a _Mode 。
  197 + * @param[in] _SecNr 对应装载的扇区号。
  198 + * @param[in] _NKey 写入设备中的卡密码,固定为6个字节。
  199 + * @return <0表示失败,==0表示成功。
  200 + */
  201 + short USER_API dc_load_key(HANDLE icdev, unsigned char _Mode, unsigned char _SecNr, unsigned char *_NKey);
  202 +
  203 + /**
  204 + * @brief 装载设备密码。
  205 + * @par 说明:
  206 + * ::dc_load_key 的HEX形式接口,参数 @a _NKey 为HEX格式。
  207 + */
  208 + short USER_API dc_load_key_hex(HANDLE icdev, unsigned char _Mode, unsigned char _SecNr, char *_NKey);
  209 +
  210 + /**
  211 + * @brief 寻卡请求、防卡冲突、选卡操作。
  212 + * @par 说明:
  213 + * 内部包含了 ::dc_request ::dc_anticoll ::dc_select 的功能。
  214 + * @param[in] icdev 设备标识符。
  215 + * @param[in] _Mode 模式,同 ::dc_request 的 @a _Mode 。
  216 + * @param[out] _Snr 返回的卡序列号。
  217 + * @return <0表示失败,==0表示成功,==1表示无卡或无法寻到卡片。
  218 + */
  219 + short USER_API dc_card(HANDLE icdev, unsigned char _Mode, unsigned int *_Snr);
  220 +
  221 + /**
  222 + * @brief 寻卡请求、防卡冲突、选卡操作。
  223 + * @par 说明:
  224 + * ::dc_card 的HEX形式接口,参数 @a snrstr 为HEX格式。
  225 + */
  226 + short USER_API dc_card_hex(HANDLE icdev, unsigned char _Mode, unsigned char *snrstr);
  227 +
  228 + /**
  229 + * @brief M1卡密码配置块操作。
  230 + * @par 说明:
  231 + * 修改M1卡密码配置块数据,M1卡密码配置块也就是每个扇区的最后一块,包含密码A、控制字节、密码B数据。
  232 + * @param[in] icdev 设备标识符。
  233 + * @param[in] _SecNr 扇区号。
  234 + * @param[in] _KeyA 密码A,固定为6个字节。
  235 + * @param[in] _B0 块0控制字(当一扇区有16块时,对应为块0~4的控制字),低3位(D2D1D0)对应C10、C20、C30。
  236 + * @param[in] _B1 块1控制字(当一扇区有16块时,对应为块5~9的控制字),低3位(D2D1D0)对应C11、C21、C31。
  237 + * @param[in] _B2 块2控制字(当一扇区有16块时,对应为块10~14的控制字),低3位(D2D1D0)对应C12、C22、C32。
  238 + * @param[in] _B3 块3控制字(当一扇区有16块时,对应为块15的控制字),低3位(D2D1D0)对应C13、C23、C33。
  239 + * @param[in] _Bk 保留,固定为0x00。
  240 + * @param[in] _KeyB 密码B,固定为6个字节。
  241 + * @return <0表示失败,==0表示成功。
  242 + */
  243 + short USER_API dc_changeb3(HANDLE icdev, unsigned char _SecNr, unsigned char *_KeyA, unsigned char _B0, unsigned char _B1, unsigned char _B2, unsigned char _B3, unsigned char _Bk, unsigned char *_KeyB);
  244 +
  245 + /**
  246 + * @brief M1卡密码配置块操作。
  247 + * @par 说明:
  248 + * ::dc_changeb3 的HEX形式接口,参数 @a _KeyA @a _KeyB 为HEX格式。
  249 + */
  250 + short USER_API dc_changeb3_hex(HANDLE icdev, unsigned char _SecNr, const char *_KeyA, unsigned char _B0, unsigned char _B1, unsigned char _B2, unsigned char _B3, unsigned char _Bk, const char *_KeyB);
  251 +
  252 + /**
  253 + * @brief M1卡值块回传。
  254 + * @par 说明:
  255 + * 用于把指定的值块内容暂存,后续可以使用 ::dc_transfer 将暂存值块内容传递到另一块中,实现块与块之间数值传送。
  256 + * @param[in] icdev 设备标识符。
  257 + * @param[in] _Adr 要回传的块地址。
  258 + * @return <0表示失败,==0表示成功。
  259 + */
  260 + short USER_API dc_restore(HANDLE icdev, unsigned char _Adr);
  261 +
  262 + /**
  263 + * @brief M1卡值块传递。
  264 + * @par 说明:
  265 + * 用于把 ::dc_restore 暂存的值块内容传递到指定块中,实现块与块之间数值传送。
  266 + * @param[in] icdev 设备标识符。
  267 + * @param[in] _Adr 要传递的块地址。
  268 + * @return <0表示失败,==0表示成功。
  269 + */
  270 + short USER_API dc_transfer(HANDLE icdev, unsigned char _Adr);
  271 +
  272 + /**
  273 + * @brief M1卡值块加值。
  274 + * @par 说明:
  275 + * 用于操作M1卡值块,使块值增加指定数值。
  276 + * @param[in] icdev 设备标识符。
  277 + * @param[in] _Adr 块地址。
  278 + * @param[in] _Value 要增加的数值。
  279 + * @return <0表示失败,==0表示成功。
  280 + */
  281 + short USER_API dc_increment(HANDLE icdev, unsigned char _Adr, unsigned int _Value);
  282 +
  283 + /**
  284 + * @brief M1卡值块减值。
  285 + * @par 说明:
  286 + * 用于操作M1卡值块,使块值减少指定数值。
  287 + * @param[in] icdev 设备标识符。
  288 + * @param[in] _Adr 块地址。
  289 + * @param[in] _Value 要减少的数值。
  290 + * @return <0表示失败,==0表示成功。
  291 + */
  292 + short USER_API dc_decrement(HANDLE icdev, unsigned char _Adr, unsigned int _Value);
  293 +
  294 + /**
  295 + * @brief M1卡值块初始化。
  296 + * @par 说明:
  297 + * 用于操作M1卡,使得指定块为值块,并且初始化此值块为指定数值。
  298 + * @param[in] icdev 设备标识符。
  299 + * @param[in] _Adr 块地址。
  300 + * @param[in] _Value 初始化数值。
  301 + * @return <0表示失败,==0表示成功。
  302 + */
  303 + short USER_API dc_initval(HANDLE icdev, unsigned char _Adr, unsigned int _Value);
  304 +
  305 + /**
  306 + * @brief M1卡值块读值。
  307 + * @par 说明:
  308 + * 用于读取M1卡值块数值。
  309 + * @param[in] icdev 设备标识符。
  310 + * @param[in] _Adr 要读取的块地址。
  311 + * @param[out] _Value 返回的数值。
  312 + * @return <0表示失败,==0表示成功。
  313 + */
  314 + short USER_API dc_readval(HANDLE icdev, unsigned char _Adr, unsigned int *_Value);
  315 +
  316 + /**
  317 + * @brief ML卡值初始化。
  318 + * @par 说明:
  319 + * 用于操作ML卡,初始化卡内容为指定数值。
  320 + * @param[in] icdev 设备标识符。
  321 + * @param[in] _Value 初始化数值。
  322 + * @return <0表示失败,==0表示成功。
  323 + */
  324 + short USER_API dc_initval_ml(HANDLE icdev, unsigned short _Value);
  325 +
  326 + /**
  327 + * @brief ML卡读值。
  328 + * @par 说明:
  329 + * 用于读取ML卡数值。
  330 + * @param[in] icdev 设备标识符。
  331 + * @param[out] _Value 返回的数值。
  332 + * @return <0表示失败,==0表示成功。
  333 + */
  334 + short USER_API dc_readval_ml(HANDLE icdev, unsigned short *_Value);
  335 +
  336 + /**
  337 + * @brief ML卡减值。
  338 + * @par 说明:
  339 + * 用于操作ML卡值,使值减少指定数值。
  340 + * @param[in] icdev 设备标识符。
  341 + * @param[in] _Value 要减少的数值。
  342 + * @return <0表示失败,==0表示成功。
  343 + */
  344 + short USER_API dc_decrement_ml(HANDLE icdev, unsigned short _Value);
  345 +
  346 + /**
  347 + * @brief 验证M1卡密码。
  348 + * @par 说明:
  349 + * 使用设备内部装载的密码来验证M1卡密码。
  350 + * @param[in] icdev 设备标识符。
  351 + * @param[in] _Mode 模式,同 ::dc_authentication 的 @a _Mode 。
  352 + * @param[in] KeyNr 要验证密码的扇区号。
  353 + * @param[in] Adr 要验证密码扇区中的块号,此块号非卡片绝对块号。
  354 + * @return <0表示失败,==0表示成功。
  355 + */
  356 + short USER_API dc_authentication_2(HANDLE icdev, unsigned char _Mode, unsigned char KeyNr, unsigned char Adr);
  357 +
  358 + /**
  359 + * @brief 第二级防卡冲突。
  360 + * @par 说明:
  361 + * 支持ISO 14443 Type A类型卡片的第二级防卡冲突。
  362 + * @param[in] icdev 设备标识符。
  363 + * @param[in] _Bcnt 保留,固定为0x00。
  364 + * @param[out] _Snr 返回的卡序列号。
  365 + * @return <0表示失败,==0表示成功。
  366 + */
  367 + short USER_API dc_anticoll2(HANDLE icdev, unsigned char _Bcnt, unsigned int *_Snr);
  368 +
  369 + /**
  370 + * @brief 第二级选卡操作。
  371 + * @par 说明:
  372 + * 通过指定序列号,选取相应的卡片。
  373 + * @param[in] icdev 设备标识符。
  374 + * @param[in] _Snr 卡片序列号。
  375 + * @param[out] _Size 返回的SAK值。
  376 + * @return <0表示失败,==0表示成功。
  377 + */
  378 + short USER_API dc_select2(HANDLE icdev, unsigned int _Snr, unsigned char *_Size);
  379 +
  380 + /**
  381 + * @brief 保留。
  382 + */
  383 + short USER_API dc_HL_write(HANDLE icdev, unsigned char _Mode, unsigned char _Adr, unsigned int *_Snr, unsigned char *_Data);
  384 +
  385 + /**
  386 + * @brief 保留。
  387 + */
  388 + short USER_API dc_HL_writehex(HANDLE icdev, unsigned char _Mode, unsigned char _Adr, unsigned int *_Snr, unsigned char *_Data);
  389 +
  390 + /**
  391 + * @brief 保留。
  392 + */
  393 + short USER_API dc_HL_read(HANDLE icdev, unsigned char _Mode, unsigned char _Adr, unsigned int _Snr, unsigned char *_Data, unsigned int *_NSnr);
  394 +
  395 + /**
  396 + * @brief 保留。
  397 + */
  398 + short USER_API dc_HL_readhex(HANDLE icdev, unsigned char _Mode, unsigned char _Adr, unsigned int _Snr, unsigned char *_Data, unsigned int *_NSnr);
  399 +
  400 + /**
  401 + * @brief 高层验证M1卡密码。
  402 + * @par 说明:
  403 + * 内部包含了 ::dc_card ::dc_authentication 的功能。
  404 + * @param[in] icdev 设备标识符。
  405 + * @param[in] reqmode 寻卡请求模式,同 ::dc_request 的 @a _Mode 。
  406 + * @param[in] snr 保留,固定为0。
  407 + * @param[in] authmode 验证模式,同 ::dc_authentication 的 @a _Mode 。
  408 + * @param[in] secnr 要验证密码的扇区号。
  409 + * @return <0表示失败,==0表示成功,==1表示无卡或无法寻到卡片。
  410 + */
  411 + short USER_API dc_HL_authentication(HANDLE icdev, unsigned char reqmode, unsigned int snr, unsigned char authmode, unsigned char secnr);
  412 +
  413 + /**
  414 + * @brief 检查之前写入的数据。
  415 + * @par 说明:
  416 + * 内部包含了 ::dc_card ::dc_authentication ::dc_read 的功能,并且验证传入和读取的数据是否一致。
  417 + * @param[in] icdev 设备标识符。
  418 + * @param[in] Snr 卡序列号,用于内部核对。
  419 + * @param[in] authmode 验证模式,同 ::dc_authentication 的 @a _Mode 。
  420 + * @param[in] Adr 块地址。
  421 + * @param[in] _data 块数据,固定为16个字节。
  422 + * @return <0表示失败,==0表示成功,==1表示无卡或无法寻到卡片。
  423 + */
  424 + short USER_API dc_check_write(HANDLE icdev, unsigned int Snr, unsigned char authmode, unsigned char Adr, unsigned char *_data);
  425 +
  426 + /**
  427 + * @brief 检查之前写入的数据。
  428 + * @par 说明:
  429 + * ::dc_check_write 的HEX形式接口,参数 @a _data 为HEX格式。
  430 + */
  431 + short USER_API dc_check_writehex(HANDLE icdev, unsigned int Snr, unsigned char authmode, unsigned char Adr, unsigned char *_data);
  432 +
  433 + /**
  434 + * @brief 获取设备版本。
  435 + * @par 说明:
  436 + * 获取设备内部固件代码的版本。
  437 + * @param[in] icdev 设备标识符。
  438 + * @param[out] sver 返回的版本字符串,请至少分配128个字节。
  439 + * @return <0表示失败,==0表示成功。
  440 + */
  441 + short USER_API dc_getver(HANDLE icdev, unsigned char *sver);
  442 +
  443 + /**
  444 + * @brief 保留。
  445 + */
  446 + short USER_API dc_update(HANDLE icdev);
  447 +
  448 + /**
  449 + * @brief 保留。
  450 + */
  451 + short USER_API dc_clr_control_bit(HANDLE icdev, unsigned char _b);
  452 +
  453 + /**
  454 + * @brief 保留。
  455 + */
  456 + short USER_API dc_set_control_bit(HANDLE icdev, unsigned char _b);
  457 +
  458 + /**
  459 + * @brief 复位射频。
  460 + * @par 说明:
  461 + * 复位设备的射频,可以关闭,关闭并且启动。
  462 + * @param[in] icdev 设备标识符。
  463 + * @param[in] _Msec 为0表示关闭射频,否则为复位时间,单位为10毫秒,一般调用建议值为10。
  464 + * @return <0表示失败,==0表示成功。
  465 + */
  466 + short USER_API dc_reset(HANDLE icdev, unsigned short _Msec);
  467 +
  468 + /**
  469 + * @brief 设备蜂鸣。
  470 + * @par 说明:
  471 + * 设备蜂鸣器发出指定时间的蜂鸣声。
  472 + * @param[in] icdev 设备标识符。
  473 + * @param[in] _Msec 蜂鸣时间,单位为10毫秒。
  474 + * @return <0表示失败,==0表示成功。
  475 + */
  476 + short USER_API dc_beep(HANDLE icdev, unsigned short _Msec);
  477 +
  478 + /**
  479 + * @brief 液晶显示。
  480 + * @par 说明:
  481 + * 显示指定字符串到液晶屏幕上。
  482 + * @param[in] icdev 设备标识符。
  483 + * @param[in] dispstr 要显示的字符串。
  484 + * @return <0表示失败,==0表示成功。
  485 + */
  486 + short USER_API dc_disp_str(HANDLE icdev, char *dispstr);
  487 +
  488 + /**
  489 + * @brief 读EEPROM。
  490 + * @par 说明:
  491 + * 读取设备内部EEPROM中的数据,可以用作数据保存等。
  492 + * @param[in] icdev 设备标识符。
  493 + * @param[in] offset 偏移地址。
  494 + * @param[in] length 读取长度。
  495 + * @param[out] rec_buffer 返回的数据。
  496 + * @return <0表示失败,==0表示成功。
  497 + */
  498 + short USER_API dc_srd_eeprom(HANDLE icdev, short offset, short length, unsigned char *rec_buffer);
  499 +
  500 + /**
  501 + * @brief 写EEPROM。
  502 + * @par 说明:
  503 + * 写入数据到设备内部EEPROM中,可以用作数据保存等。
  504 + * @param[in] icdev 设备标识符。
  505 + * @param[in] offset 偏移地址。
  506 + * @param[in] length 写入长度。
  507 + * @param[in] send_buffer 传入数据。
  508 + * @return <0表示失败,==0表示成功。
  509 + */
  510 + short USER_API dc_swr_eeprom(HANDLE icdev, short offset, short length, unsigned char *send_buffer);
  511 +
  512 + /**
  513 + * @brief 写EEPROM。
  514 + * @par 说明:
  515 + * 同 ::dc_swr_eeprom 。
  516 + */
  517 + short USER_API swr_alleeprom(HANDLE icdev, short offset, short length, unsigned char *snd_buffer);
  518 +
  519 + /**
  520 + * @brief 读EEPROM。
  521 + * @par 说明:
  522 + * 同 ::dc_srd_eeprom 。
  523 + */
  524 + short USER_API srd_alleeprom(HANDLE icdev, short offset, short length, unsigned char *receive_buffer);
  525 +
  526 + /**
  527 + * @brief 读EEPROM。
  528 + * @par 说明:
  529 + * ::dc_srd_eeprom 的HEX形式接口,参数 @a rec_buffer 为HEX格式。
  530 + */
  531 + short USER_API dc_srd_eepromhex(HANDLE icdev, short offset, short length, unsigned char *rec_buffer);
  532 +
  533 + /**
  534 + * @brief 写EEPROM。
  535 + * @par 说明:
  536 + * ::dc_swr_eeprom 的HEX形式接口,参数 @a send_buffer 为HEX格式。
  537 + */
  538 + short USER_API dc_swr_eepromhex(HANDLE icdev, short offset, short length, unsigned char *send_buffer);
  539 +
  540 + /**
  541 + * @brief 获取设备时间。
  542 + * @par 说明:
  543 + * 获取设备当前的时间。
  544 + * @param[in] icdev 设备标识符。
  545 + * @param[out] time 返回的时间,长度为7个字节,格式为'年'、'星期'、'月'、'日'、'时'、'分'、'秒'。如:0x16,0x01,0x12,0x08,0x16,0x20,0x10表示2016年星期一12月8日16时20分10秒。
  546 + * @return <0表示失败,==0表示成功。
  547 + */
  548 + short USER_API dc_gettime(HANDLE icdev, unsigned char *time);
  549 +
  550 + /**
  551 + * @brief 获取设备时间。
  552 + * @par 说明:
  553 + * ::dc_gettime 的HEX形式接口,参数 @a time 为HEX格式。
  554 + */
  555 + short USER_API dc_gettimehex(HANDLE icdev, char *time);
  556 +
  557 + /**
  558 + * @brief 设置设备时间。
  559 + * @par 说明:
  560 + * 设置设备的当前时间。
  561 + * @param[in] icdev 设备标识符。
  562 + * @param[in] time 传入时间,长度为7个字节,格式为'年'、'星期'、'月'、'日'、'时'、'分'、'秒'。如:0x16,0x01,0x12,0x08,0x16,0x20,0x10表示2016年星期一12月8日16时20分10秒。
  563 + * @return <0表示失败,==0表示成功。
  564 + */
  565 + short USER_API dc_settime(HANDLE icdev, unsigned char *time);
  566 +
  567 + /**
  568 + * @brief 设置设备时间。
  569 + * @par 说明:
  570 + * ::dc_settime 的HEX形式接口,参数 @a time 为HEX格式。
  571 + */
  572 + short USER_API dc_settimehex(HANDLE icdev, char *time);
  573 +
  574 + /**
  575 + * @brief 保留。
  576 + */
  577 + short USER_API dc_setbright(HANDLE icdev, unsigned char bright);
  578 +
  579 + /**
  580 + * @brief 保留。
  581 + */
  582 + short USER_API dc_ctl_mode(HANDLE icdev, unsigned char mode);
  583 +
  584 + /**
  585 + * @brief 保留。
  586 + */
  587 + short USER_API dc_disp_mode(HANDLE icdev, unsigned char mode);
  588 +
  589 + /**
  590 + * @brief 单DES加解密。
  591 + * @par 说明:
  592 + * ::dcdes 的HEX形式接口,参数 @a key @a sour @a dest 为HEX格式。
  593 + */
  594 + short USER_API dcdeshex(unsigned char *key, unsigned char *sour, unsigned char *dest, short m);
  595 +
  596 + /**
  597 + * @brief 单DES加解密。
  598 + * @par 说明:
  599 + * 使用单DES算法对数据进行加密/解密。
  600 + * @param[in] key 8个字节密钥。
  601 + * @param[in] sour 8个字节要做加密/解密的数据。
  602 + * @param[out] dest 返回8个字节运算后的数据。
  603 + * @param[in] m 模式,0-解密,1-加密。
  604 + * @return <0表示失败,==0表示成功。
  605 + */
  606 + short USER_API dcdes(unsigned char *key, unsigned char *sour, unsigned char *dest, short m);
  607 +
  608 + /**
  609 + * @brief 指示灯点亮/熄灭。
  610 + * @par 说明:
  611 + * 点亮/熄灭设备的指示灯。
  612 + * @param[in] icdev 设备标识符。
  613 + * @param[in] _OnOff 0-点亮,1-熄灭。
  614 + * @return <0表示失败,==0表示成功。
  615 + */
  616 + short USER_API dc_light(HANDLE icdev, unsigned short _OnOff);
  617 +
  618 + /**
  619 + * @brief 液晶显示。
  620 + * @par 说明:
  621 + * 显示指定数据到液晶屏幕上。
  622 + * @param[in] icdev 设备标识符。
  623 + * @param[in] offset 屏幕偏移。
  624 + * @param[in] displen 显示数据的长度。
  625 + * @param[in] dispstr 显示数据。
  626 + * @return <0表示失败,==0表示成功。
  627 + */
  628 + short USER_API dc_high_disp(HANDLE icdev, unsigned char offset, unsigned char displen, unsigned char *dispstr);
  629 +
  630 + /**
  631 + * @brief 设置当前接触式卡座。
  632 + * @par 说明:
  633 + * 设置当前接触式卡座为指定卡座,用于多卡座切换卡操作。
  634 + * @param[in] icdev 设备标识符。
  635 + * @param[in] _Byte 卡座编号。
  636 + * @n 0x0C - 附卡座/接触式CPU1卡座。
  637 + * @n 0x0B - 接触式CPU2卡座。
  638 + * @n 0x0D - SAM1卡座。
  639 + * @n 0x0E - SAM2卡座。
  640 + * @n 0x0F - SAM3卡座。
  641 + * @n 0x11 - SAM4卡座。
  642 + * @n 0x12 - SAM5卡座。
  643 + * @n 0x13 - SAM6卡座/ESAM芯片。
  644 + * @n 0x14 - SAM7卡座。
  645 + * @n 0x15 - SAM8卡座。
  646 + * @return <0表示失败,==0表示成功。
  647 + */
  648 + short USER_API dc_setcpu(HANDLE icdev, unsigned char _Byte);
  649 +
  650 + /**
  651 + * @brief 接触式CPU卡复位。
  652 + * @par 说明:
  653 + * 对当前卡座CPU卡进行复位操作,此复位为冷复位。
  654 + * @param[in] icdev 设备标识符。
  655 + * @param[out] rlen 返回复位信息的长度。
  656 + * @param[out] databuffer 返回的复位信息,请至少分配128个字节。
  657 + * @return <0表示失败,==0表示成功。
  658 + */
  659 + short USER_API dc_cpureset(HANDLE icdev, unsigned char *rlen, unsigned char *databuffer);
  660 +
  661 + /**
  662 + * @brief 接触式CPU卡指令交互。
  663 + * @par 说明:
  664 + * 对当前卡座CPU卡进行指令交互操作,注意此接口不封装卡协议部分。
  665 + * @param[in] icdev 设备标识符。
  666 + * @param[in] slen 发送数据的长度。
  667 + * @param[in] sendbuffer 发送数据。
  668 + * @param[out] rlen 返回数据的长度。
  669 + * @param[out] databuffer 返回的数据。
  670 + * @return <0表示失败,==0表示成功。
  671 + */
  672 + short USER_API dc_cpuapdusource(HANDLE icdev, unsigned char slen, unsigned char *sendbuffer, unsigned char *rlen, unsigned char *databuffer);
  673 +
  674 + /**
  675 + * @brief 接触式CPU卡指令交互。
  676 + * @par 说明:
  677 + * 对当前卡座CPU卡进行指令交互操作,注意此接口已封装卡协议部分。
  678 + * @param[in] icdev 设备标识符。
  679 + * @param[in] slen 发送数据的长度。
  680 + * @param[in] sendbuffer 发送数据。
  681 + * @param[out] rlen 返回数据的长度。
  682 + * @param[out] databuffer 返回的数据。
  683 + * @return <0表示失败,==0表示成功。
  684 + */
  685 + short USER_API dc_cpuapdu(HANDLE icdev, unsigned char slen, unsigned char *sendbuffer, unsigned char *rlen, unsigned char *databuffer);
  686 +
  687 + /**
  688 + * @brief 接触式CPU卡复位。
  689 + * @par 说明:
  690 + * ::dc_cpureset 的HEX形式接口,参数 @a databuffer 为HEX格式。
  691 + */
  692 + short USER_API dc_cpureset_hex(HANDLE icdev, unsigned char *rlen, char *databuffer);
  693 +
  694 + /**
  695 + * @brief 接触式CPU卡指令交互。
  696 + * @par 说明:
  697 + * ::dc_cpuapdusource 的HEX形式接口,参数 @a sendbuffer @a databuffer 为HEX格式。
  698 + */
  699 + short USER_API dc_cpuapdusource_hex(HANDLE icdev, unsigned char slen, char *sendbuffer, unsigned char *rlen, char *databuffer);
  700 +
  701 + /**
  702 + * @brief 接触式CPU卡指令交互。
  703 + * @par 说明:
  704 + * ::dc_cpuapdu 的HEX形式接口,参数 @a sendbuffer @a databuffer 为HEX格式。
  705 + */
  706 + short USER_API dc_cpuapdu_hex(HANDLE icdev, unsigned char slen, char *sendbuffer, unsigned char *rlen, char *databuffer);
  707 +
  708 + /**
  709 + * @brief 接触式CPU卡指令交互。
  710 + * @par 说明:
  711 + * 对当前卡座CPU卡进行指令交互操作,注意此接口已封装卡协议部分,内部处理了SW1为0x61和0x6C的情况。
  712 + * @param[in] icdev 设备标识符。
  713 + * @param[in] slen 发送数据的长度。
  714 + * @param[in] sendbuffer 发送数据。
  715 + * @param[out] rlen 返回数据的长度。
  716 + * @param[out] databuffer 返回的数据。
  717 + * @return <0表示失败,==0表示成功。
  718 + */
  719 + short USER_API dc_cpuapdurespon(HANDLE icdev, unsigned char slen, unsigned char *sendbuffer, unsigned char *rlen, unsigned char *databuffer);
  720 +
  721 + /**
  722 + * @brief 接触式CPU卡指令交互。
  723 + * @par 说明:
  724 + * ::dc_cpuapdurespon 的HEX形式接口,参数 @a sendbuffer @a databuffer 为HEX格式。
  725 + */
  726 + short USER_API dc_cpuapdurespon_hex(HANDLE icdev, unsigned char slen, char *sendbuffer, unsigned char *rlen, char *databuffer);
  727 +
  728 + /**
  729 + * @brief 接触式CPU卡下电。
  730 + * @par 说明:
  731 + * 对当前卡座CPU卡进行下电操作。
  732 + * @param[in] icdev 设备标识符。
  733 + * @return <0表示失败,==0表示成功。
  734 + */
  735 + short USER_API dc_cpudown(HANDLE icdev);
  736 +
  737 + /**
  738 + * @brief 保留。
  739 + */
  740 + short USER_API dc_set_addr(unsigned char saddr);
  741 +
  742 + /**
  743 + * @brief 保留。
  744 + */
  745 + HANDLE USER_API dc_init_485(short port, int baud);
  746 +
  747 + /**
  748 + * @brief 保留。
  749 + */
  750 + short USER_API dc_changebaud_485(HANDLE icdev, int baud);
  751 +
  752 + /**
  753 + * @brief 保留。
  754 + */
  755 + short USER_API dc_change_addr(HANDLE icdev, unsigned char saddr);
  756 +
  757 + /**
  758 + * @brief 非接触式CPU卡复位。
  759 + * @par 说明:
  760 + * 对感应区CPU卡进行复位操作。
  761 + * @param[in] icdev 设备标识符。
  762 + * @param[out] rlen 返回复位信息的长度。
  763 + * @param[out] receive_data 返回的复位信息,请至少分配128个字节。
  764 + * @return <0表示失败,==0表示成功。
  765 + */
  766 + short USER_API dc_pro_reset(HANDLE icdev, unsigned char *rlen, unsigned char *receive_data);
  767 +
  768 + /**
  769 + * @brief 非接触式CPU卡指令交互。
  770 + * @par 说明:
  771 + * 对感应区CPU卡进行指令交互操作,注意此接口已封装卡协议部分。
  772 + * @param[in] icdev 设备标识符。
  773 + * @param[in] slen 发送数据的长度。
  774 + * @param[in] sendbuffer 发送数据。
  775 + * @param[out] rlen 返回数据的长度。
  776 + * @param[out] databuffer 返回的数据。
  777 + * @param[in] timeout 超时值,此值只在部分设备的底层使用,单位为250毫秒,一般调用建议值为7。
  778 + * @return <0表示失败,==0表示成功。
  779 + */
  780 + short USER_API dc_pro_command(HANDLE icdev, unsigned char slen, unsigned char *sendbuffer, unsigned char *rlen, unsigned char *databuffer, unsigned char timeout);
  781 +
  782 + /**
  783 + * @brief 非接触式CPU卡复位。
  784 + * @par 说明:
  785 + * ::dc_pro_reset 的HEX形式接口,参数 @a receive_data 为HEX格式。
  786 + */
  787 + short USER_API dc_pro_resethex(HANDLE icdev, unsigned char *rlen, char *receive_data);
  788 +
  789 + /**
  790 + * @brief 非接触式CPU卡复位。
  791 + * @par 说明:
  792 + * 对感应区CPU卡进行复位操作。
  793 + * @param[in] icdev 设备标识符。
  794 + * @param[out] rlen 返回复位信息的长度。
  795 + * @param[out] receive_data 返回的复位信息,请至少分配128个字节。
  796 + * @return <0表示失败,==0表示成功。
  797 + */
  798 + short USER_API dc_pro_resetInt(HANDLE icdev, unsigned char *rlen, unsigned char *receive_data);
  799 +
  800 + /**
  801 + * @brief 非接触式CPU卡复位。
  802 + * @par 说明:
  803 + * ::dc_pro_resetInt 的HEX形式接口,参数 @a receive_data 为HEX格式。
  804 + */
  805 + short USER_API dc_pro_resetInt_hex(HANDLE icdev, unsigned char *rlen, char *receive_data);
  806 +
  807 + /**
  808 + * @brief 非接触式CPU卡指令交互。
  809 + * @par 说明:
  810 + * ::dc_pro_command 的HEX形式接口,参数 @a sendbuffer @a databuffer 为HEX格式。
  811 + */
  812 + short USER_API dc_pro_commandhex(HANDLE icdev, unsigned char slen, char *sendbuffer, unsigned char *rlen, char *databuffer, unsigned char timeout);
  813 +
  814 + /**
  815 + * @brief 非接触式CPU卡指令交互。
  816 + * @par 说明:
  817 + * 对感应区CPU卡进行指令交互操作,注意此接口不封装卡协议部分。
  818 + * @param[in] icdev 设备标识符。
  819 + * @param[in] slen 发送数据的长度。
  820 + * @param[in] sendbuffer 发送数据。
  821 + * @param[out] rlen 返回数据的长度。
  822 + * @param[out] databuffer 返回的数据。
  823 + * @param[in] timeout 超时值,此值只在部分设备的底层使用,单位为250毫秒,一般调用建议值为7。
  824 + * @return <0表示失败,==0表示成功。
  825 + */
  826 + short USER_API dc_pro_commandsource(HANDLE icdev, unsigned char slen, unsigned char *sendbuffer, unsigned char *rlen, unsigned char *databuffer, unsigned char timeout);
  827 +
  828 + /**
  829 + * @brief 非接触式CPU卡指令交互。
  830 + * @par 说明:
  831 + * ::dc_pro_commandsource 的HEX形式接口,参数 @a sendbuffer @a databuffer 为HEX格式。
  832 + */
  833 + short USER_API dc_pro_commandsourcehex(HANDLE icdev, unsigned char slen, char *sendbuffer, unsigned char *rlen, char *databuffer, unsigned char timeout);
  834 +
  835 + /**
  836 + * @brief 非接触式CPU卡指令交互。
  837 + * @par 说明:
  838 + * 对感应区CPU卡进行指令交互操作,注意此接口不封装卡协议部分。
  839 + * @param[in] icdev 设备标识符。
  840 + * @param[in] slen 发送数据的长度。
  841 + * @param[in] sendbuffer 发送数据。
  842 + * @param[out] rlen 返回数据的长度。
  843 + * @param[out] databuffer 返回的数据。
  844 + * @param[in] timeout 超时值,此值只在部分设备的底层使用,单位为250毫秒,一般调用建议值为7。
  845 + * @return <0表示失败,==0表示成功。
  846 + */
  847 + short USER_API dc_pro_commandsource_int(HANDLE icdev, unsigned int slen, unsigned char *sendbuffer, unsigned int *rlen, unsigned char *databuffer, unsigned char timeout);
  848 +
  849 + /**
  850 + * @brief 终止非接触式CPU卡操作。
  851 + * @par 说明:
  852 + * 使非接触式CPU卡进入终止状态,此时必须把卡移出感应区后再次放入感应区才能寻到这张卡。
  853 + * @param[in] icdev 设备标识符。
  854 + * @return <0表示失败,==0表示成功。
  855 + */
  856 + short USER_API dc_pro_halt(HANDLE icdev);
  857 +
  858 + /**
  859 + * @brief SHC1102卡寻卡请求。
  860 + * @par 说明:
  861 + * 支持SHC1102卡的寻卡请求。
  862 + * @param[in] icdev 设备标识符。
  863 + * @param[in] _Mode 模式,0x00表示对空闲卡进行操作,0x01表示对所有卡操作。
  864 + * @param[out] TagType 返回的ATQA值。
  865 + * @return <0表示失败,==0表示成功,==1表示无卡或无法寻到卡片。
  866 + */
  867 + short USER_API dc_request_shc1102(HANDLE icdev, unsigned char _Mode, unsigned short *TagType);
  868 +
  869 + /**
  870 + * @brief 验证SHC1102卡密码。
  871 + * @par 说明:
  872 + * 使用传入的密码来验证SHC1102卡密码。
  873 + * @param[in] icdev 设备标识符。
  874 + * @param[in] _Data 密码,固定为4个字节。
  875 + * @return <0表示失败,==0表示成功。
  876 + */
  877 + short USER_API dc_auth_shc1102(HANDLE icdev, unsigned char *_Data);
  878 +
  879 + /**
  880 + * @brief 读SHC1102卡。
  881 + * @par 说明:
  882 + * 读取SHC1102卡的数据。
  883 + * @param[in] icdev 设备标识符。
  884 + * @param[in] _Adr 块地址(0~15)。
  885 + * @param[out] _Data 返回的数据,固定为4个字节。
  886 + * @return <0表示失败,==0表示成功。
  887 + */
  888 + short USER_API dc_read_shc1102(HANDLE icdev, unsigned char _Adr, unsigned char *_Data);
  889 +
  890 + /**
  891 + * @brief 写SHC1102卡。
  892 + * @par 说明:
  893 + * 写入数据到SHC1102卡中。
  894 + * @param[in] icdev 设备标识符。
  895 + * @param[in] _Adr 块地址(2~15)。
  896 + * @param[in] _Data 传入数据,固定为4个字节。
  897 + * @return <0表示失败,==0表示成功。
  898 + */
  899 + short USER_API dc_write_shc1102(HANDLE icdev, unsigned char _Adr, unsigned char *_Data);
  900 +
  901 + /**
  902 + * @brief 终止SHC1102卡操作。
  903 + * @par 说明:
  904 + * 使SHC1102卡进入终止状态,此时必须把卡移出感应区后再次放入感应区才能寻到这张卡。
  905 + * @param[in] icdev 设备标识符。
  906 + * @return <0表示失败,==0表示成功。
  907 + */
  908 + short USER_API dc_halt_shc1102(HANDLE icdev);
  909 +
  910 + /**
  911 + * @brief 数据转换。
  912 + * @par 说明:
  913 + * 普通数据换成十六进制字符串(短转长)。
  914 + * @param[in] hex 要转换的数据。
  915 + * @param[out] a 转换后的字符串。
  916 + * @param[in] length 要转换数据的长度。
  917 + * @return <0表示失败,==0表示成功。
  918 + */
  919 + short USER_API hex_a(unsigned char *hex, unsigned char *a, short length);
  920 +
  921 + /**
  922 + * @brief 数据转换。
  923 + * @par 说明:
  924 + * 十六进制字符数据转换为普通数据(长转短)。
  925 + * @param[in] a 要转换的数据。
  926 + * @param[out] hex 转换后的数据。
  927 + * @param[in] len 要转换数据的长度。
  928 + * @return <0表示失败,==0表示成功。
  929 + */
  930 + short USER_API a_hex(unsigned char *a, unsigned char *hex, short len);
  931 +
  932 + /**
  933 + * @brief 配置非接触卡类型。
  934 + * @par 说明:
  935 + * 配置需要操作什么类型的非接触式卡,设备上电后默认操作Type A卡,可以使用此接口来改变类型,一般在寻卡前调用此接口。
  936 + * @param[in] icdev 设备标识符。
  937 + * @param[in] cardtype 类型,'A'表示Type A卡,'B'表示Type B卡。
  938 + * @return <0表示失败,==0表示成功。
  939 + */
  940 + short USER_API dc_config_card(HANDLE icdev, unsigned char cardtype);
  941 +
  942 + /**
  943 + * @brief 寻卡请求。
  944 + * @par 说明:
  945 + * 支持ISO 14443 Type B类型卡片的寻卡请求。
  946 + * @param[in] icdev 设备标识符。
  947 + * @param[in] _Mode 保留,固定为0x00。
  948 + * @param[in] AFI 应用族标识符。
  949 + * @param[in] N 时间槽编号。
  950 + * @param[out] ATQB 返回的ATQB值,请至少分配32个字节。
  951 + * @return <0表示失败,==0表示成功。
  952 + */
  953 + short USER_API dc_request_b(HANDLE icdev, unsigned char _Mode, unsigned char AFI, unsigned char N, unsigned char *ATQB);
  954 +
  955 + /**
  956 + * @brief 管道标记。
  957 + * @par 说明:
  958 + * 支持ISO 14443 Type B类型卡片的管道标记。
  959 + * @param[in] icdev 设备标识符。
  960 + * @param[in] N 时间槽编号。
  961 + * @param[out] ATQB 返回的ATQB值,请至少分配32个字节。
  962 + * @return <0表示失败,==0表示成功。
  963 + */
  964 + short USER_API dc_slotmarker(HANDLE icdev, unsigned char N, unsigned char *ATQB);
  965 +
  966 + /**
  967 + * @brief 激活卡片。
  968 + * @par 说明:
  969 + * 支持ISO 14443 Type B类型卡片的激活。
  970 + * @param[in] icdev 设备标识符。
  971 + * @param[in] PUPI 伪唯一PICC标识符,固定为4个字节。
  972 + * @param[in] CID 信道号。
  973 + * @return <0表示失败,==0表示成功。
  974 + */
  975 + short USER_API dc_attrib(HANDLE icdev, unsigned char *PUPI, unsigned char CID);
  976 +
  977 + /**
  978 + * @brief 保留。
  979 + */
  980 + short USER_API dc_open_door(HANDLE icdev, unsigned char cflag);
  981 +
  982 + /**
  983 + * @brief 保留。
  984 + */
  985 + short USER_API dc_open_timedoor(HANDLE icdev, unsigned short utime);
  986 +
  987 + /**
  988 + * @brief 保留。
  989 + */
  990 + short USER_API dc_read_random(HANDLE icdev, unsigned char *data);
  991 +
  992 + /**
  993 + * @brief 保留。
  994 + */
  995 + short USER_API dc_write_random(HANDLE icdev, short length, unsigned char *data);
  996 +
  997 + /**
  998 + * @brief 保留。
  999 + */
  1000 + short USER_API dc_read_random_hex(HANDLE icdev, unsigned char *data);
  1001 +
  1002 + /**
  1003 + * @brief 保留。
  1004 + */
  1005 + short USER_API dc_write_random_hex(HANDLE icdev, short length, unsigned char *data);
  1006 +
  1007 + /**
  1008 + * @brief 保留。
  1009 + */
  1010 + short USER_API dc_erase_random(HANDLE icdev, short length);
  1011 +
  1012 + /**
  1013 + * @brief Mifare Desfire卡认证。
  1014 + * @par 说明:
  1015 + * 对Mifare Desfire卡进行认证。
  1016 + * @param[in] icdev 设备标识符。
  1017 + * @param[in] keyno 密钥号。
  1018 + * @param[in] keylen 密钥数据的长度。
  1019 + * @param[in] authkey 密钥数据。
  1020 + * @param[in] randAdata 传入随机数A,8个字节。
  1021 + * @param[out] randBdata 返回的随机数B,8个字节。
  1022 + * @return <0表示失败,==0表示成功。
  1023 + */
  1024 + short USER_API dc_mfdes_auth(HANDLE icdev, unsigned char keyno, unsigned char keylen, unsigned char *authkey, unsigned char *randAdata, unsigned char *randBdata);
  1025 +
  1026 + /**
  1027 + * @brief 验证M1卡密码。
  1028 + * @par 说明:
  1029 + * 使用传入的密码来验证M1卡密码。
  1030 + * @param[in] icdev 设备标识符。
  1031 + * @param[in] _Mode 模式,0x00表示验证A密码,0x04表示验证B密码。
  1032 + * @param[in] _Addr 要验证密码的扇区号。
  1033 + * @param[in] passbuff 密码,固定为6个字节。
  1034 + * @return <0表示失败,==0表示成功。
  1035 + */
  1036 + short USER_API dc_authentication_pass(HANDLE icdev, unsigned char _Mode, unsigned char _Addr, unsigned char *passbuff);
  1037 +
  1038 + /**
  1039 + * @brief 高层液晶显示。
  1040 + * @par 说明:
  1041 + * 显示指定数据到液晶屏幕上。
  1042 + * @param[in] icdev 设备标识符。
  1043 + * @param[in] dispstr 显示字符串。
  1044 + * @return <0表示失败,==0表示成功。
  1045 + */
  1046 + short USER_API dc_disp_neg(HANDLE icdev, char *dispstr);
  1047 +
  1048 + /**
  1049 + * @brief 非接触式CPU卡指令交互。
  1050 + * @par 说明:
  1051 + * 对感应区CPU卡进行指令交互操作,注意此接口已封装卡协议部分。
  1052 + * @param[in] icdev 设备标识符。
  1053 + * @param[in] slen 发送数据的长度。
  1054 + * @param[in] sendbuffer 发送数据。
  1055 + * @param[out] rlen 返回数据的长度。
  1056 + * @param[out] databuffer 返回的数据。
  1057 + * @param[in] timeout 超时值,此值只在部分设备的底层使用,单位为250毫秒,一般调用建议值为7。
  1058 + * @param[in] FG 分割值,此值只在部分设备的底层使用,单位为字节,一般调用建议值为64。
  1059 + * @return <0表示失败,==0表示成功。
  1060 + */
  1061 + short USER_API dc_pro_commandlink(HANDLE icdev, unsigned char slen, unsigned char *sendbuffer, unsigned char *rlen, unsigned char *databuffer, unsigned char timeout, unsigned char FG);
  1062 +
  1063 + /**
  1064 + * @brief 非接触式CPU卡指令交互。
  1065 + * @par 说明:
  1066 + * ::dc_pro_commandlink 的HEX形式接口,参数 @a sendbuffer @a databuffer 为HEX格式。
  1067 + */
  1068 + short USER_API dc_pro_commandlink_hex(HANDLE icdev, unsigned char slen, unsigned char *sendbuffer, unsigned char *rlen, unsigned char *databuffer, unsigned char timeout, unsigned char FG);
  1069 +
  1070 + /**
  1071 + * @brief 寻卡请求、防卡冲突、选卡操作。
  1072 + * @par 说明:
  1073 + * 内部包含了 ::dc_request ::dc_anticoll ::dc_select ::dc_anticoll2 ::dc_select2 的功能,此接口有设计缺陷,不能返回卡序列号实际长度,建议使用 ::dc_card_n 替代。
  1074 + * @param[in] icdev 设备标识符。
  1075 + * @param[in] _Mode 模式,同 ::dc_request 的 @a _Mode 。
  1076 + * @param[out] _Snr 返回的卡序列号,请至少分配8个字节。
  1077 + * @return <0表示失败,==0表示成功,==1表示无卡或无法寻到卡片。
  1078 + */
  1079 + short USER_API dc_card_double(HANDLE icdev, unsigned char _Mode, unsigned char *_Snr);
  1080 +
  1081 + /**
  1082 + * @brief 寻卡请求、防卡冲突、选卡操作。
  1083 + * @par 说明:
  1084 + * ::dc_card_double 的HEX形式接口,参数 @a _Snr 为HEX格式。
  1085 + */
  1086 + short USER_API dc_card_double_hex(HANDLE icdev, unsigned char _Mode, unsigned char *_Snr);
  1087 +
  1088 + /**
  1089 + * @brief 读ID卡。
  1090 + * @par 说明:
  1091 + * 读取ID卡数据。
  1092 + * @param[in] icdev 设备标识符。
  1093 + * @param[in] times 设备超时值,单位为秒。
  1094 + * @param[out] _Data 返回的数据,固定为5个字节。
  1095 + * @return <0表示失败,==0表示成功。
  1096 + */
  1097 + short USER_API dc_read_idcard(HANDLE icdev, unsigned char times, unsigned char *_Data);
  1098 +
  1099 + /**
  1100 + * @brief 读取id卡。
  1101 + * @par 说明:
  1102 + * ::dc_read_idcard 的HEX形式接口,参数 @a _Data 为HEX格式。
  1103 + */
  1104 + short USER_API dc_read_idcard_hex(HANDLE icdev, unsigned char times, unsigned char *_Data);
  1105 +
  1106 + /**
  1107 + * @brief 验证M1卡密码。
  1108 + * @par 说明:
  1109 + * ::dc_authentication_pass 的HEX形式接口,参数 @a passbuff 为HEX格式。
  1110 + */
  1111 + short USER_API dc_authentication_pass_hex(HANDLE icdev, unsigned char _Mode, unsigned char _Addr, unsigned char *passbuff);
  1112 +
  1113 + /**
  1114 + * @brief 设置接触式CPU卡参数。
  1115 + * @par 说明:
  1116 + * 此接口可控制接触式CPU卡操作的行为,当不掉用时,设备将使用默认方式进行接触式CPU卡操作。
  1117 + * @param[in] icdev 设备标识符。
  1118 + * @param[in] cputype 卡座编号,同 ::dc_setcpu 的 @a _Byte 。
  1119 + * @param[in] cpupro 卡协议编号,0x00表示T0,0x01表示T1,默认为0x00。
  1120 + * @param[in] cpuetu 卡复位波特率编号,0x5C表示9600,0x14表示38400.
  1121 + * @return <0表示失败,==0表示成功。
  1122 + */
  1123 + short USER_API dc_setcpupara(HANDLE icdev, unsigned char cputype, unsigned char cpupro, unsigned char cpuetu);
  1124 +
  1125 + /**
  1126 + * @brief 保留。
  1127 + */
  1128 + short USER_API dc_command(HANDLE icdev, unsigned char cmd, unsigned char slen, unsigned char *sendbuffer, unsigned char *rlen, unsigned char *databuffer);
  1129 +
  1130 + /**
  1131 + * @brief 保留。
  1132 + */
  1133 + short USER_API dc_command_hex(HANDLE icdev, unsigned char cmd, unsigned char slen, char *sendbuffer, unsigned char *rlen, char *databuffer);
  1134 +
  1135 + /**
  1136 + * @brief 保留。
  1137 + */
  1138 + short USER_API dc_creat_mac(unsigned char KeyLen, unsigned char *Key, unsigned short DataLen, unsigned char *Data, unsigned char *InitData, unsigned char AutoFixFlag, unsigned char FixChar, unsigned char *MacData);
  1139 +
  1140 + /**
  1141 + * @brief 保留。
  1142 + */
  1143 + short USER_API dc_creat_mac_hex(unsigned char KeyLen, unsigned char *Key, unsigned short DataLen, unsigned char *Data, unsigned char *InitData, unsigned char AutoFixFlag, unsigned char FixChar, unsigned char *MacData);
  1144 +
  1145 + /**
  1146 + * @brief 保留。
  1147 + */
  1148 + short USER_API dc_creat_mac2(HANDLE icdev, unsigned short DataLen, unsigned char *Data, unsigned char *MacData, unsigned char flag);
  1149 +
  1150 + /**
  1151 + * @brief 保留。
  1152 + */
  1153 + short USER_API dc_creat_mac2_hex(HANDLE icdev, unsigned short DataLen, unsigned char *Data, unsigned char *MacData, unsigned char flag);
  1154 +
  1155 + /**
  1156 + * @brief 保留。
  1157 + */
  1158 + short USER_API dc_encrypt(char *key, char *ptrSource, unsigned short msgLen, char *ptrDest);
  1159 +
  1160 + /**
  1161 + * @brief 保留。
  1162 + */
  1163 + short USER_API dc_decrypt(char *key, char *ptrSource, unsigned short msgLen, char *ptrDest);
  1164 +
  1165 + /**
  1166 + * @brief 保留。
  1167 + */
  1168 + short USER_API dc_encrypt_hex(char *key, char *ptrSource, unsigned short msgLen, char *ptrDest);
  1169 +
  1170 + /**
  1171 + * @brief 保留。
  1172 + */
  1173 + short USER_API dc_decrypt_hex(char *key, char *ptrSource, unsigned short msgLen, char *ptrDest);
  1174 +
  1175 + /**
  1176 + * @brief 保留。
  1177 + */
  1178 + short USER_API dc_HL_write_hex(HANDLE icdev, unsigned char _Mode, unsigned char _Adr, unsigned int *_Snr, unsigned char *_Data);
  1179 +
  1180 + /**
  1181 + * @brief 保留。
  1182 + */
  1183 + short USER_API dc_HL_read_hex(HANDLE icdev, unsigned char _Mode, unsigned char _Adr, unsigned int _Snr, unsigned char *_Data, unsigned int *_NSnr);
  1184 +
  1185 + /**
  1186 + * @brief 检查之前写入的数据。
  1187 + * @par 说明:
  1188 + * ::dc_check_write 的HEX形式接口,参数 @a _data 为HEX格式。
  1189 + */
  1190 + short USER_API dc_check_write_hex(HANDLE icdev, unsigned int Snr, unsigned char authmode, unsigned char Adr, unsigned char *_data);
  1191 +
  1192 + /**
  1193 + * @brief 读EEPROM。
  1194 + * @par 说明:
  1195 + * ::dc_srd_eeprom 的HEX形式接口,参数 @a rec_buffer 为HEX格式。
  1196 + */
  1197 + short USER_API dc_srd_eeprom_hex(HANDLE icdev, short offset, short length, unsigned char *rec_buffer);
  1198 +
  1199 + /**
  1200 + * @brief 写EEPROM。
  1201 + * @par 说明:
  1202 + * ::dc_swr_eeprom 的HEX形式接口,参数 @a send_buffer 为HEX格式。
  1203 + */
  1204 + short USER_API dc_swr_eeprom_hex(HANDLE icdev, short offset, short length, unsigned char *send_buffer);
  1205 +
  1206 + /**
  1207 + * @brief 获取设备时间。
  1208 + * @par 说明:
  1209 + * ::dc_gettime 的HEX形式接口,参数 @a time 为HEX格式。
  1210 + */
  1211 + short USER_API dc_gettime_hex(HANDLE icdev, char *time);
  1212 +
  1213 + /**
  1214 + * @brief 设置设备时间。
  1215 + * @par 说明:
  1216 + * ::dc_settime 的HEX形式接口,参数 @a time 为HEX格式。
  1217 + */
  1218 + short USER_API dc_settime_hex(HANDLE icdev, char *time);
  1219 +
  1220 + /**
  1221 + * @brief 单DES加解密。
  1222 + * @par 说明:
  1223 + * ::dc_des 的HEX形式接口,参数 @a key @a sour @a dest 为HEX格式。
  1224 + */
  1225 + short USER_API dc_des_hex(unsigned char *key, unsigned char *sour, unsigned char *dest, short m);
  1226 +
  1227 + /**
  1228 + * @brief 单DES加解密。
  1229 + * @par 说明:
  1230 + * 使用单DES算法对数据进行加密/解密。
  1231 + * @param[in] key 8个字节密钥。
  1232 + * @param[in] sour 8个字节要做加密/解密的数据。
  1233 + * @param[out] dest 返回8个字节运算后的数据。
  1234 + * @param[in] m 模式,0-解密,1-加密。
  1235 + * @return <0表示失败,==0表示成功。
  1236 + */
  1237 + short USER_API dc_des(unsigned char *key, unsigned char *sour, unsigned char *dest, short m);
  1238 +
  1239 + /**
  1240 + * @brief 非接触式CPU卡复位。
  1241 + * @par 说明:
  1242 + * ::dc_pro_reset 的HEX形式接口,参数 @a receive_data 为HEX格式。
  1243 + */
  1244 + short USER_API dc_pro_reset_hex(HANDLE icdev, unsigned char *rlen, char *receive_data);
  1245 +
  1246 + /**
  1247 + * @brief 非接触式CPU卡指令交互。
  1248 + * @par 说明:
  1249 + * ::dc_pro_command 的HEX形式接口,参数 @a sendbuffer @a databuffer 为HEX格式。
  1250 + */
  1251 + short USER_API dc_pro_command_hex(HANDLE icdev, unsigned char slen, char *sendbuffer, unsigned char *rlen, char *databuffer, unsigned char timeout);
  1252 +
  1253 + /**
  1254 + * @brief 非接触式CPU卡指令交互。
  1255 + * @par 说明:
  1256 + * ::dc_pro_commandsource 的HEX形式接口,参数 @a sendbuffer @a databuffer 为HEX格式。
  1257 + */
  1258 + short USER_API dc_pro_commandsource_hex(HANDLE icdev, unsigned char slen, char *sendbuffer, unsigned char *rlen, char *databuffer, unsigned char timeout);
  1259 +
  1260 + /**
  1261 + * @brief 保留。
  1262 + */
  1263 + short USER_API dc_switch_unix(HANDLE icdev, int baud);
  1264 +
  1265 + /**
  1266 + * @brief 验证M1卡密码。
  1267 + * @par 说明:
  1268 + * 使用传入的密码来验证M1卡密码。
  1269 + * @param[in] icdev 设备标识符。
  1270 + * @param[in] _Mode 模式,0x00表示验证A密码,0x04表示验证B密码。
  1271 + * @param[in] _Addr 要验证密码的块号。
  1272 + * @param[in] passbuff 密码,固定为6个字节。
  1273 + * @return <0表示失败,==0表示成功。
  1274 + */
  1275 + short USER_API dc_authentication_passaddr(HANDLE icdev, unsigned char _Mode, unsigned char _Addr, unsigned char *passbuff);
  1276 +
  1277 + /**
  1278 + * @brief 验证M1卡密码。
  1279 + * @par 说明:
  1280 + * ::dc_authentication_passaddr 的HEX形式接口,参数 @a passbuff 为HEX格式。
  1281 + */
  1282 + short USER_API dc_authentication_passaddr_hex(HANDLE icdev, unsigned char _Mode, unsigned char _Addr, unsigned char *passbuff);
  1283 +
  1284 + /**
  1285 + * @brief 寻FM11RF005卡。
  1286 + * @par 说明:
  1287 + * 对FM11RF005卡进行寻卡操作。
  1288 + * @param[in] icdev 设备标识符。
  1289 + * @param[in] _Mode 模式,模式,同 ::dc_request 的 @a _Mode 。
  1290 + * @param[out] _Snr 返回的卡序列号。
  1291 + * @return <0表示失败,==0表示成功,==1表示无卡或无法寻到卡片。
  1292 + */
  1293 + short USER_API dc_card_fm11rf005(HANDLE icdev, unsigned char _Mode, unsigned int *_Snr);
  1294 +
  1295 + /**
  1296 + * @brief 保留。
  1297 + */
  1298 + short USER_API dc_setusbtimeout(unsigned char ntimes);
  1299 +
  1300 + /**
  1301 + * @brief 保留。
  1302 + */
  1303 + short USER_API dc_mfdes_baud(HANDLE icdev, unsigned char _Mode, unsigned char para);
  1304 +
  1305 + /**
  1306 + * @brief 三DES加解密。
  1307 + * @par 说明:
  1308 + * 使用三DES算法对数据进行加密/解密。
  1309 + * @param[in] key 16个字节密钥。
  1310 + * @param[in] src 8个字节要做加密/解密的数据。
  1311 + * @param[out] dest 返回8个字节运算后的数据。
  1312 + * @param[in] m 模式,0-解密,1-加密。
  1313 + * @return <0表示失败,==0表示成功。
  1314 + */
  1315 + short USER_API dc_tripledes(unsigned char *key, unsigned char *src, unsigned char *dest, short m);
  1316 +
  1317 + /**
  1318 + * @brief 三DES加解密。
  1319 + * @par 说明:
  1320 + * ::dc_tripledes 的HEX形式接口,参数 @a key @a src @a dest 为HEX格式。
  1321 + */
  1322 + short USER_API dc_tripledes_hex(unsigned char *key, unsigned char *src, unsigned char *dest, short m);
  1323 +
  1324 + /**
  1325 + * @brief Mifare Desfire卡认证。
  1326 + * @par 说明:
  1327 + * ::dc_mfdes_auth 的HEX形式接口,参数 @a authkey @a randAdata @a randBdata 为HEX格式。
  1328 + */
  1329 + short USER_API dc_mfdes_auth_hex(HANDLE icdev, unsigned char keyno, unsigned char keylen, unsigned char *authkey, unsigned char *randAdata, unsigned char *randBdata);
  1330 +
  1331 + /**
  1332 + * @brief 保留。
  1333 + */
  1334 + short USER_API dc_pro_sendcommandsource(HANDLE icdev, unsigned char slen, unsigned char *sendbuffer, unsigned char timeout);
  1335 +
  1336 + /**
  1337 + * @brief 保留。
  1338 + */
  1339 + short USER_API dc_pro_receivecommandsource(HANDLE icdev, unsigned char *rlen, unsigned char *databuffer);
  1340 +
  1341 + /**
  1342 + * @brief 保留。
  1343 + */
  1344 + short USER_API dc_inventory(HANDLE icdev, unsigned char flags, unsigned char AFI, unsigned char masklen, unsigned char *rlen, unsigned char *rbuffer);
  1345 +
  1346 + /**
  1347 + * @brief 保留。
  1348 + */
  1349 + short USER_API dc_inventory_hex(HANDLE icdev, unsigned char flags, unsigned char AFI, unsigned char masklen, unsigned char *rlen, unsigned char *rbuffer);
  1350 +
  1351 + /**
  1352 + * @brief 保留。
  1353 + */
  1354 + short USER_API dc_stay_quiet(HANDLE icdev, unsigned char flags, unsigned char *UID);
  1355 +
  1356 + /**
  1357 + * @brief 保留。
  1358 + */
  1359 + short USER_API dc_stay_quiet_hex(HANDLE icdev, unsigned char flags, unsigned char *UID);
  1360 +
  1361 + /**
  1362 + * @brief 保留。
  1363 + */
  1364 + short USER_API dc_select_uid(HANDLE icdev, unsigned char flags, unsigned char *UID);
  1365 +
  1366 + /**
  1367 + * @brief 保留。
  1368 + */
  1369 + short USER_API dc_select_uid_hex(HANDLE icdev, unsigned char flags, unsigned char *UID);
  1370 +
  1371 + /**
  1372 + * @brief 保留。
  1373 + */
  1374 + short USER_API dc_reset_to_ready(HANDLE icdev, unsigned char flags, unsigned char *UID);
  1375 +
  1376 + /**
  1377 + * @brief 保留。
  1378 + */
  1379 + short USER_API dc_reset_to_ready_hex(HANDLE icdev, unsigned char flags, unsigned char *UID);
  1380 +
  1381 + /**
  1382 + * @brief 保留。
  1383 + */
  1384 + short USER_API dc_readblock(HANDLE icdev, unsigned char flags, unsigned char startblock, unsigned char blocknum, unsigned char *UID, unsigned char *rlen, unsigned char *rbuffer);
  1385 +
  1386 + /**
  1387 + * @brief 保留。
  1388 + */
  1389 + short USER_API dc_readblock_hex(HANDLE icdev, unsigned char flags, unsigned char startblock, unsigned char blocknum, unsigned char *UID, unsigned char *rlen, unsigned char *rbuffer);
  1390 +
  1391 + /**
  1392 + * @brief 保留。
  1393 + */
  1394 + short USER_API dc_writeblock(HANDLE icdev, unsigned char flags, unsigned char startblock, unsigned char blocknum, unsigned char *UID, unsigned char wlen, unsigned char *wbuffer);
  1395 +
  1396 + /**
  1397 + * @brief 保留。
  1398 + */
  1399 + short USER_API dc_writeblock_hex(HANDLE icdev, unsigned char flags, unsigned char startblock, unsigned char blocknum, unsigned char *UID, unsigned char wlen, unsigned char *wbuffer);
  1400 +
  1401 + /**
  1402 + * @brief 保留。
  1403 + */
  1404 + short USER_API dc_lock_block(HANDLE icdev, unsigned char flags, unsigned char block, unsigned char *UID);
  1405 +
  1406 + /**
  1407 + * @brief 保留。
  1408 + */
  1409 + short USER_API dc_lock_block_hex(HANDLE icdev, unsigned char flags, unsigned char block, unsigned char *UID);
  1410 +
  1411 + /**
  1412 + * @brief 保留。
  1413 + */
  1414 + short USER_API dc_write_afi(HANDLE icdev, unsigned char flags, unsigned char AFI, unsigned char *UID);
  1415 +
  1416 + /**
  1417 + * @brief 保留。
  1418 + */
  1419 + short USER_API dc_write_afi_hex(HANDLE icdev, unsigned char flags, unsigned char AFI, unsigned char *UID);
  1420 +
  1421 + /**
  1422 + * @brief 保留。
  1423 + */
  1424 + short USER_API dc_lock_afi(HANDLE icdev, unsigned char flags, unsigned char AFI, unsigned char *UID);
  1425 +
  1426 + /**
  1427 + * @brief 保留。
  1428 + */
  1429 + short USER_API dc_lock_afi_hex(HANDLE icdev, unsigned char flags, unsigned char AFI, unsigned char *UID);
  1430 +
  1431 + /**
  1432 + * @brief 保留。
  1433 + */
  1434 + short USER_API dc_write_dsfid(HANDLE icdev, unsigned char flags, unsigned char DSFID, unsigned char *UID);
  1435 +
  1436 + /**
  1437 + * @brief 保留。
  1438 + */
  1439 + short USER_API dc_write_dsfid_hex(HANDLE icdev, unsigned char flags, unsigned char DSFID, unsigned char *UID);
  1440 +
  1441 + /**
  1442 + * @brief 保留。
  1443 + */
  1444 + short USER_API dc_lock_dsfid(HANDLE icdev, unsigned char flags, unsigned char DSFID, unsigned char *UID);
  1445 +
  1446 + /**
  1447 + * @brief 保留。
  1448 + */
  1449 + short USER_API dc_lock_dsfid_hex(HANDLE icdev, unsigned char flags, unsigned char DSFID, unsigned char *UID);
  1450 +
  1451 + /**
  1452 + * @brief 保留。
  1453 + */
  1454 + short USER_API dc_get_systeminfo(HANDLE icdev, unsigned char flags, unsigned char *UID, unsigned char *rlen, unsigned char *rbuffer);
  1455 +
  1456 + /**
  1457 + * @brief 保留。
  1458 + */
  1459 + short USER_API dc_get_systeminfo_hex(HANDLE icdev, unsigned char flags, unsigned char *UID, unsigned char *rlen, unsigned char *rbuffer);
  1460 +
  1461 + /**
  1462 + * @brief 保留。
  1463 + */
  1464 + short USER_API dc_get_securityinfo(HANDLE icdev, unsigned char flags, unsigned char startblock, unsigned char blocknum, unsigned char *UID, unsigned char *rlen, unsigned char *rbuffer);
  1465 +
  1466 + /**
  1467 + * @brief 保留。
  1468 + */
  1469 + short USER_API dc_get_securityinfo_hex(HANDLE icdev, unsigned char flags, unsigned char startblock, unsigned char blocknum, unsigned char *UID, unsigned char *rlen, unsigned char *rbuffer);
  1470 +
  1471 + /**
  1472 + * @brief 获取FM11RF005卡序列号。
  1473 + * @par 说明:
  1474 + * 获取FM11RF005卡序列号。
  1475 + * @param[in] icdev 设备标识符。
  1476 + * @param[out] _Snr 返回的卡序列号。
  1477 + * @return <0表示失败,==0表示成功。
  1478 + */
  1479 + short USER_API dc_getsnr_fm11rf005(HANDLE icdev, unsigned int *_Snr);
  1480 +
  1481 + /**
  1482 + * @brief 获取FM11RF005卡序列号。
  1483 + * @par 说明:
  1484 + * ::dc_getsnr_fm11rf005 的HEX形式接口,参数 @a snrstr 为HEX格式。
  1485 + */
  1486 + short USER_API dc_getsnr_fm11rf005_hex(HANDLE icdev, unsigned char *snrstr);
  1487 +
  1488 + /**
  1489 + * @brief 写FM11RF005卡。
  1490 + * @par 说明:
  1491 + * 写入数据到FM11RF005卡中。
  1492 + * @param[in] icdev 设备标识符。
  1493 + * @param[in] _Adr 块地址(2~15)。
  1494 + * @param[in] _Data 传入数据,固定为4个字节。
  1495 + * @return <0表示失败,==0表示成功。
  1496 + */
  1497 + short USER_API dc_write_fm11rf005(HANDLE icdev, unsigned char _Adr, unsigned char *_Data);
  1498 +
  1499 + /**
  1500 + * @brief 读FM11RF005卡。
  1501 + * @par 说明:
  1502 + * 读取FM11RF005卡的数据。
  1503 + * @param[in] icdev 设备标识符。
  1504 + * @param[in] _Adr 块地址(0~15)。
  1505 + * @param[out] _Data 返回的数据,固定为4个字节。
  1506 + * @return <0表示失败,==0表示成功。
  1507 + */
  1508 + short USER_API dc_read_fm11rf005(HANDLE icdev, unsigned char _Adr, unsigned char *_Data);
  1509 +
  1510 + /**
  1511 + * @brief 读FM11RF005卡。
  1512 + * @par 说明:
  1513 + * ::dc_read_fm11rf005 的HEX形式接口,参数 @a _Data 为HEX格式。
  1514 + */
  1515 + short USER_API dc_read_fm11rf005_hex(HANDLE icdev, unsigned char _Adr, char *_Data);
  1516 +
  1517 + /**
  1518 + * @brief 写FM11RF005卡。
  1519 + * @par 说明:
  1520 + * ::dc_write_fm11rf005 的HEX形式接口,参数 @a _Data 为HEX格式。
  1521 + */
  1522 + short USER_API dc_write_fm11rf005_hex(HANDLE icdev, unsigned char _Adr, char *_Data);
  1523 +
  1524 + /**
  1525 + * @brief 保留。
  1526 + */
  1527 + short USER_API DCDEV_CommandMcu(HANDLE icdev, unsigned char ctimeout, unsigned char slen, unsigned char *sendbuffer, unsigned char *rlen, unsigned char *databuffer);
  1528 +
  1529 + /**
  1530 + * @brief 保留。
  1531 + */
  1532 + short USER_API DCDEV_CommandMcu_Hex(HANDLE icdev, unsigned char ctimeout, unsigned char slen, unsigned char *sendbuffer, unsigned char *rlen, unsigned char *databuffer);
  1533 +
  1534 + /**
  1535 + * @brief 保留。
  1536 + */
  1537 + short USER_API dc_displcd(HANDLE icdev, unsigned char flag);
  1538 +
  1539 + /**
  1540 + * @brief 键盘密码输入。
  1541 + * @par 说明:
  1542 + * 获取键盘按键,用于密码输入,不同的键盘装置可能有不同的效果,如不同的提示音或不同的显示。
  1543 + * @param[in] icdev 设备标识符。
  1544 + * @param[in] ctime 设备超时值,单位为秒。
  1545 + * @param[out] rlen 返回按键数据的长度,不含'\0'。
  1546 + * @param[out] cpass 返回的按键数据,数据格式为'\0'结尾的字符串。
  1547 + * @return <0表示失败,==0表示成功,==0xA1表示取消输入,==0xA2表示输入超时。
  1548 + */
  1549 + short USER_API dc_getinputpass(HANDLE icdev, unsigned char ctime, unsigned char *rlen, unsigned char *cpass);
  1550 +
  1551 + /**
  1552 + * @brief 键盘密码输入。
  1553 + * @par 说明:
  1554 + * 获取键盘按键,用于密码输入,不同的键盘装置可能有不同的效果,如不同的提示音或不同的显示。
  1555 + * @param[in] icdev 设备标识符。
  1556 + * @param[in] ctime 设备超时值,单位为秒。
  1557 + * @param[out] rlen 返回按键数据的长度,不含'\0'。
  1558 + * @param[out] cpass 返回的按键数据,数据格式为'\0'结尾的字符串。
  1559 + * @return <0表示失败,==0表示成功,==0xA1表示取消输入,==0xA2表示输入超时。
  1560 + */
  1561 + short USER_API dc_GetInputPass(HANDLE icdev, unsigned char ctime, unsigned char *rlen, unsigned char *cpass);
  1562 +
  1563 + /**
  1564 + * @brief 读磁条卡。
  1565 + * @par 说明:
  1566 + * 读取磁条卡的数据,支持2、3轨道。
  1567 + * @param[in] icdev 设备标识符。
  1568 + * @param[in] ctime 设备超时值,单位为秒。
  1569 + * @param[out] pTrack2Data 返回的2轨道数据,数据格式为'\0'结尾的字符串。
  1570 + * @param[out] pTrack2Len 返回2轨道数据的长度,不含'\0'。
  1571 + * @param[out] pTrack3Data 返回的3轨道数据,数据格式为'\0'结尾的字符串。
  1572 + * @param[out] pTrack3Len 返回3轨道数据的长度,不含'\0'。
  1573 + * @return <0表示失败,==0表示成功。
  1574 + */
  1575 + short USER_API dc_readmagcard(HANDLE icdev, unsigned char ctime, unsigned char *pTrack2Data, unsigned int *pTrack2Len, unsigned char *pTrack3Data, unsigned int *pTrack3Len);
  1576 +
  1577 + /**
  1578 + * @brief 写磁条卡。
  1579 + * @par 说明:
  1580 + * 写入数据到磁条卡中。
  1581 + * @param[in] icdev 设备标识符。
  1582 + * @param[in] ctime 设备超时值,单位为秒。
  1583 + * @param[in] pTrack1Data 传入1轨道数据。
  1584 + * @param[in] pTrack1Len 1轨道数据的长度。
  1585 + * @param[in] pTrack2Data 传入2轨道数据。
  1586 + * @param[in] pTrack2Len 2轨道数据的长度。
  1587 + * @param[in] pTrack3Data 传入3轨道数据。
  1588 + * @param[in] pTrack3Len 3轨道数据的长度。
  1589 + * @return <0表示失败,==0表示成功。
  1590 + */
  1591 + short USER_API dc_writemagcard(HANDLE icdev, unsigned char ctime, unsigned char *pTrack1Data, unsigned char pTrack1Len, unsigned char *pTrack2Data, unsigned char pTrack2Len, unsigned char *pTrack3Data, unsigned char pTrack3Len);
  1592 +
  1593 + /**
  1594 + * @brief 测试设备通讯。
  1595 + * @par 说明:
  1596 + * 测试和设备之间是否可以正常通讯。
  1597 + * @param[in] icdev 设备标识符。
  1598 + * @return <0表示失败,==0表示成功。
  1599 + */
  1600 + short USER_API dc_testdevicecomm(HANDLE icdev);
  1601 +
  1602 + /**
  1603 + * @brief 显示主界面。
  1604 + * @par 说明:
  1605 + * 使设备屏幕上显示预置的主界面,不同设备的主界面不尽相同。
  1606 + * @param[in] icdev 设备标识符。
  1607 + * @return <0表示失败,==0表示成功。
  1608 + */
  1609 + short USER_API dc_dispmainmenu(HANDLE icdev);
  1610 +
  1611 + /**
  1612 + * @brief 设置设备时间。
  1613 + * @par 说明:
  1614 + * 设置设备的当前时间。
  1615 + * @param[in] icdev 设备标识符。
  1616 + * @param[in] year 年(0~99)。
  1617 + * @param[in] month 月(1~12)。
  1618 + * @param[in] date 日(1~31)。
  1619 + * @param[in] hour 时(0~23)。
  1620 + * @param[in] minute 分(0~59)。
  1621 + * @param[in] second 秒(0~59)。
  1622 + * @return <0表示失败,==0表示成功。
  1623 + */
  1624 + short USER_API dc_setdevicetime(HANDLE icdev, unsigned char year, unsigned char month, unsigned char date, unsigned char hour, unsigned char minute, unsigned char second);
  1625 +
  1626 + /**
  1627 + * @brief 获取设备时间。
  1628 + * @par 说明:
  1629 + * 获取设备当前的时间。
  1630 + * @param[out] icdev 设备标识符。
  1631 + * @param[out] year 年(0~99)。
  1632 + * @param[out] month 月(1~12)。
  1633 + * @param[out] date 日(1~31)。
  1634 + * @param[out] hour 时(0~23)。
  1635 + * @param[out] minute 分(0~59)。
  1636 + * @param[out] second 秒(0~59)。
  1637 + * @return <0表示失败,==0表示成功。
  1638 + */
  1639 + short USER_API dc_getdevicetime(HANDLE icdev, unsigned char *year, unsigned char *month, unsigned char *date, unsigned char *hour, unsigned char *minute, unsigned char *second);
  1640 +
  1641 + /**
  1642 + * @brief 液晶显示。
  1643 + * @par 说明:
  1644 + * 显示指定字符串到液晶屏幕上。
  1645 + * @param[in] icdev 设备标识符。
  1646 + * @param[in] line 行号。
  1647 + * @param[in] offset 偏移。
  1648 + * @param[in] data 要显示的字符串。
  1649 + * @return <0表示失败,==0表示成功。
  1650 + */
  1651 + short USER_API dc_dispinfo(HANDLE icdev, unsigned char line, unsigned char offset, char *data);
  1652 +
  1653 + /**
  1654 + * @brief 液晶显示。
  1655 + * @par 说明:
  1656 + * 显示指定字符串到液晶屏幕上。
  1657 + * @param[in] icdev 设备标识符。
  1658 + * @param[in] offset 屏幕偏移。
  1659 + * @param[in] data 要显示的字符串。
  1660 + * @return <0表示失败,==0表示成功。
  1661 + */
  1662 + short USER_API dc_dispmaininfo(HANDLE icdev, unsigned char offset, char *data);
  1663 +
  1664 + /**
  1665 + * @brief 设备蜂鸣。
  1666 + * @par 说明:
  1667 + * 设备蜂鸣器发出指定时间的蜂鸣声。
  1668 + * @param[in] icdev 设备标识符。
  1669 + * @param[in] beeptime 蜂鸣时间,单位为50毫秒。
  1670 + * @return <0表示失败,==0表示成功。
  1671 + */
  1672 + short USER_API dc_posbeep(HANDLE icdev, unsigned char beeptime);
  1673 +
  1674 + /**
  1675 + * @brief LCD背光控制。
  1676 + * @par 说明:
  1677 + * 控制设备的LCD背光。
  1678 + * @param[in] icdev 设备标识符。
  1679 + * @param[in] cOpenFlag 0-开背光,1-关背光。
  1680 + * @return <0表示失败,==0表示成功。
  1681 + */
  1682 + short USER_API dc_ctlbacklight(HANDLE icdev, unsigned char cOpenFlag);
  1683 +
  1684 + /**
  1685 + * @brief 指示灯控制。
  1686 + * @par 说明:
  1687 + * 控制设备的指示灯。
  1688 + * @param[in] icdev 设备标识符。
  1689 + * @param[in] cLed 指示灯编号,0表示全部指示灯,1表示第一个指示灯,2表示第二个指示灯,以此类推。
  1690 + * @param[in] cOpenFlag 0-点亮,1-熄灭,2-闪烁。
  1691 + * @return <0表示失败,==0表示成功。
  1692 + */
  1693 + short USER_API dc_ctlled(HANDLE icdev, unsigned char cLed, unsigned char cOpenFlag);
  1694 +
  1695 + /**
  1696 + * @brief LCD清屏。
  1697 + * @par 说明:
  1698 + * 清除LCD屏幕的显示内容。
  1699 + * @param[in] icdev 设备标识符。
  1700 + * @param[in] cLine 需要清除的行号,编号从1开始。
  1701 + * @return <0表示失败,==0表示成功。
  1702 + */
  1703 + short USER_API dc_lcdclrscrn(HANDLE icdev, unsigned char cLine);
  1704 +
  1705 + /**
  1706 + * @brief 进入读键盘模式。
  1707 + * @par 说明:
  1708 + * 使设备进入读取键盘的状态,接口本身会直接返回,而不会等待按键完成或设备超时。
  1709 + * @param[in] icdev 设备标识符。
  1710 + * @param[in] ctime 设备超时值,单位为秒。
  1711 + * @return <0表示失败,==0表示成功。
  1712 + */
  1713 + short USER_API dc_passin(HANDLE icdev, unsigned char ctime);
  1714 +
  1715 + /**
  1716 + * @brief 进入读键盘模式。
  1717 + * @par 说明:
  1718 + * 使设备进入读取键盘的状态,接口本身会直接返回,而不会等待按键完成或设备超时。
  1719 + * @param[in] icdev 设备标识符。
  1720 + * @param[in] ctime 设备超时值,单位为秒。
  1721 + * @return <0表示失败,==0表示成功。
  1722 + */
  1723 + short USER_API dc_PassIn(HANDLE icdev, unsigned char ctime);
  1724 +
  1725 + /**
  1726 + * @brief 进入读键盘模式。
  1727 + * @par 说明:
  1728 + * 使设备进入读取键盘的状态,接口本身会直接返回,而不会等待按键完成或设备超时。
  1729 + * @param[in] icdev 设备标识符。
  1730 + * @param[in] ctime 设备超时值,单位为秒。
  1731 + * @param[in] ucmode 模式,0-带卡号,1-不带卡号。
  1732 + * @param[in] cardno 卡号字符串,只用于带卡号的模式。
  1733 + * @return <0表示失败,==0表示成功。
  1734 + */
  1735 + short USER_API dc_passin2(HANDLE icdev, unsigned char ctime, unsigned char ucmode, unsigned char *cardno);
  1736 +
  1737 + /**
  1738 + * @brief 进入读键盘模式。
  1739 + * @par 说明:
  1740 + * 使设备进入读取键盘的状态,接口本身会直接返回,而不会等待按键完成或设备超时。
  1741 + * @param[in] icdev 设备标识符。
  1742 + * @param[in] ctime 设备超时值,单位为秒。
  1743 + * @param[in] ucmode 模式,0-带卡号,1-不带卡号。
  1744 + * @param[in] cardno 卡号字符串,只用于带卡号的模式。
  1745 + * @return <0表示失败,==0表示成功。
  1746 + */
  1747 + short USER_API dc_PassIn2(HANDLE icdev, unsigned char ctime, unsigned char ucmode, unsigned char *cardno);
  1748 +
  1749 + /**
  1750 + * @brief 获取键盘数据。
  1751 + * @par 说明:
  1752 + * 获取设备已经读取到的键盘数据。
  1753 + * @param[in] icdev 设备标识符。
  1754 + * @param[out] rlen 返回按键数据的长度,不含'\0'。
  1755 + * @param[out] cpass 返回的按键数据,数据格式为'\0'结尾的字符串。
  1756 + * @return <0表示失败,==0表示成功。
  1757 + */
  1758 + short USER_API dc_passget(HANDLE icdev, unsigned char *rlen, unsigned char *cpass);
  1759 +
  1760 + /**
  1761 + * @brief 获取键盘数据。
  1762 + * @par 说明:
  1763 + * 获取设备已经读取到的键盘数据。
  1764 + * @param[in] icdev 设备标识符。
  1765 + * @param[out] rlen 返回按键数据的长度,不含'\0'。
  1766 + * @param[out] cpass 返回的按键数据,数据格式为'\0'结尾的字符串。
  1767 + * @return <0表示失败,==0表示成功。
  1768 + */
  1769 + short USER_API dc_PassGet(HANDLE icdev, unsigned char *rlen, unsigned char *cpass);
  1770 +
  1771 + /**
  1772 + * @brief 退出读键盘模式。
  1773 + * @par 说明:
  1774 + * 在设备进入读键盘模式后,设备会一直处于接收键盘输入的状态,这时只有按键完成、设备超时或调用此接口才能使得设备退出这种状态。
  1775 + * @param[in] icdev 设备标识符。
  1776 + * @return <0表示失败,==0表示成功。
  1777 + */
  1778 + short USER_API dc_passcancel(HANDLE icdev);
  1779 +
  1780 + /**
  1781 + * @brief 退出读键盘模式。
  1782 + * @par 说明:
  1783 + * 在设备进入读键盘模式后,设备会一直处于接收键盘输入的状态,这时是只有按键完成、设备超时或调用此接口才能使得设备退出这种状态。
  1784 + * @param[in] icdev 设备标识符。
  1785 + * @return <0表示失败,==0表示成功。
  1786 + */
  1787 + short USER_API dc_PassCancel(HANDLE icdev);
  1788 +
  1789 + /**
  1790 + * @brief 获取键盘输入。
  1791 + * @par 说明:
  1792 + * 获取键盘按键,同时设置输入时屏幕显示的信息。
  1793 + * @param[in] icdev 设备标识符。
  1794 + * @param[in] disptype 显示类型,此类型与设备内置显示条目相关。
  1795 + * @param[in] line 行号,信息将会显示在此行号指定的行中。
  1796 + * @param[in] ctime 设备超时值,单位为秒。
  1797 + * @param[out] rlen 返回按键数据的长度,不含'\0'。
  1798 + * @param[out] ckeydata 返回的按键数据,数据格式为'\0'结尾的字符串。
  1799 + * @return <0表示失败,==0表示成功。
  1800 + */
  1801 + short USER_API dc_getinputkey(HANDLE icdev, unsigned char disptype, unsigned char line, unsigned char ctime, unsigned char *rlen, unsigned char *ckeydata);
  1802 +
  1803 + /**
  1804 + * @brief 保留。
  1805 + */
  1806 + short USER_API dc_displcd_ext(HANDLE icdev, unsigned char flag, unsigned char row, unsigned char offset);
  1807 +
  1808 + /**
  1809 + * @brief 读磁条卡。
  1810 + * @par 说明:
  1811 + * 读取磁条卡的数据,支持1、2、3轨道。
  1812 + * @param[in] icdev 设备标识符。
  1813 + * @param[in] ctime 设备超时值,单位为秒。
  1814 + * @param[out] pTrack1Data 返回的1轨道数据,数据格式为'\0'结尾的字符串。
  1815 + * @param[out] pTrack1Len 返回1轨道数据的长度,不含'\0'。
  1816 + * @param[out] pTrack2Data 返回的2轨道数据,数据格式为'\0'结尾的字符串。
  1817 + * @param[out] pTrack2Len 返回2轨道数据的长度,不含'\0'。
  1818 + * @param[out] pTrack3Data 返回的3轨道数据,数据格式为'\0'结尾的字符串。
  1819 + * @param[out] pTrack3Len 返回3轨道数据的长度,不含'\0'。
  1820 + * @return <0表示失败,==0表示成功。
  1821 + */
  1822 + short USER_API dc_readmagcardall(HANDLE icdev, unsigned char ctime, unsigned char *pTrack1Data, unsigned int *pTrack1Len, unsigned char *pTrack2Data, unsigned int *pTrack2Len, unsigned char *pTrack3Data, unsigned int *pTrack3Len);
  1823 +
  1824 + /**
  1825 + * @brief 获取设备序列号。
  1826 + * @par 说明:
  1827 + * 获取设备内部定制的序列号,设备默认序列号为空,只有预先定制的设备才会存在可用的序列号。
  1828 + * @param[in] icdev 设备标识符。
  1829 + * @param[out] snr 返回的序列号字符串,请至少分配33个字节。
  1830 + * @return <0表示失败,==0表示成功。
  1831 + */
  1832 + short USER_API dc_readdevsnr(HANDLE icdev, unsigned char *snr);
  1833 +
  1834 + /**
  1835 + * @brief 获取设备序列号。
  1836 + * @par 说明:
  1837 + * 获取设备内部定制的序列号,设备默认序列号为空,只有预先定制的设备才会存在可用的序列号。
  1838 + * @param[in] icdev 设备标识符。
  1839 + * @param[out] snr 返回的序列号字符串,请至少分配17个字节。
  1840 + * @return <0表示失败,==0表示成功。
  1841 + */
  1842 + short USER_API dc_readreadersnr(HANDLE icdev, unsigned char *snr);
  1843 +
  1844 + /**
  1845 + * @brief 复位设备。
  1846 + * @par 说明:
  1847 + * 使设备进入上电初始状态。
  1848 + * @param[in] icdev 设备标识符。
  1849 + * @return <0表示失败,==0表示成功。
  1850 + */
  1851 + short USER_API dc_resetdevice(HANDLE icdev);
  1852 +
  1853 + /**
  1854 + * @brief 设置串口设备通讯波特率。
  1855 + * @par 说明:
  1856 + * 设置串口设备通讯波特率。
  1857 + * @param[in] icdev 设备标识符。
  1858 + * @param[in] baud 波特率。
  1859 + * @n 0x00 - 115200。
  1860 + * @n 0x01 - 57600。
  1861 + * @n 0x02 - 38400。
  1862 + * @n 0x03 - 19200。
  1863 + * @n 0x04 - 9600。
  1864 + * @n 0x05 - 4800。
  1865 + * @n 0x06 - 2400。
  1866 + * @n 0x07 - 1200。
  1867 + * @return <0表示失败,==0表示成功。
  1868 + */
  1869 + short USER_API dc_setdevicebaud(HANDLE icdev, unsigned char baud);
  1870 +
  1871 + /**
  1872 + * @brief 读4442卡。
  1873 + * @par 说明:
  1874 + * 读取4442卡的数据。
  1875 + * @param[in] icdev 设备标识符。
  1876 + * @param[in] offset 偏移。
  1877 + * @param[in] length 读取长度。
  1878 + * @param[out] data_buffer 返回的数据。
  1879 + * @return <0表示失败,==0表示成功。
  1880 + */
  1881 + short USER_API dc_read_4442(HANDLE icdev, short offset, short length, unsigned char *data_buffer);
  1882 +
  1883 + /**
  1884 + * @brief 读4442卡。
  1885 + * @par 说明:
  1886 + * ::dc_read_4442 的HEX形式接口,参数 @a data_buffer 为HEX格式。
  1887 + */
  1888 + short USER_API dc_read_4442_hex(HANDLE icdev, short offset, short length, unsigned char *data_buffer);
  1889 +
  1890 + /**
  1891 + * @brief 写4442卡。
  1892 + * @par 说明:
  1893 + * 写入数据到4442卡中。
  1894 + * @param[in] icdev 设备标识符。
  1895 + * @param[in] offset 偏移。
  1896 + * @param[in] length 写入长度。
  1897 + * @param[in] data_buffer 传入数据。
  1898 + * @return <0表示失败,==0表示成功。
  1899 + */
  1900 + short USER_API dc_write_4442(HANDLE icdev, short offset, short length, unsigned char *data_buffer);
  1901 +
  1902 + /**
  1903 + * @brief 写4442卡。
  1904 + * @par 说明:
  1905 + * ::dc_write_4442 的HEX形式接口,参数 @a data_buffer 为HEX格式。
  1906 + */
  1907 + short USER_API dc_write_4442_hex(HANDLE icdev, short offset, short length, unsigned char *data_buffer);
  1908 +
  1909 + /**
  1910 + * @brief 验证4442卡密码。
  1911 + * @par 说明:
  1912 + * 使用传入的密码来验证4442卡密码。
  1913 + * @param[in] icdev 设备标识符。
  1914 + * @param[in] passwd 密码,固定为3个字节。
  1915 + * @return <0表示失败,==0表示成功。
  1916 + */
  1917 + short USER_API dc_verifypin_4442(HANDLE icdev, unsigned char *passwd);
  1918 +
  1919 + /**
  1920 + * @brief 验证4442卡密码。
  1921 + * @par 说明:
  1922 + * ::dc_verifypin_4442 的HEX形式接口,参数 @a passwd 为HEX格式。
  1923 + */
  1924 + short USER_API dc_verifypin_4442_hex(HANDLE icdev, unsigned char *passwd);
  1925 +
  1926 + /**
  1927 + * @brief 读4442卡密码。
  1928 + * @par 说明:
  1929 + * 读取4442卡的密码。
  1930 + * @param[in] icdev 设备标识符。
  1931 + * @param[out] passwd 密码,固定为3个字节。
  1932 + * @return <0表示失败,==0表示成功。
  1933 + */
  1934 + short USER_API dc_readpin_4442(HANDLE icdev, unsigned char *passwd);
  1935 +
  1936 + /**
  1937 + * @brief 读4442卡密码。
  1938 + * @par 说明:
  1939 + * ::dc_readpin_4442 的HEX形式接口,参数 @a passwd 为HEX格式。
  1940 + */
  1941 + short USER_API dc_readpin_4442_hex(HANDLE icdev, unsigned char *passwd);
  1942 +
  1943 + /**
  1944 + * @brief 读4442卡密码计数。
  1945 + * @par 说明:
  1946 + * 读取4442卡的密码计数,此计数值表示可以尝试验证密码的次数。
  1947 + * @param[in] icdev 设备标识符。
  1948 + * @return <0表示失败,否则为密码计数值。
  1949 + */
  1950 + short USER_API dc_readpincount_4442(HANDLE icdev);
  1951 +
  1952 + /**
  1953 + * @brief 修改4442卡密码。
  1954 + * @par 说明:
  1955 + * 修改4442卡的密码。
  1956 + * @param[in] icdev 设备标识符。
  1957 + * @param[in] passwd 密码,固定为3个字节。
  1958 + * @return <0表示失败,==0表示成功。
  1959 + */
  1960 + short USER_API dc_changepin_4442(HANDLE icdev, unsigned char *passwd);
  1961 +
  1962 + /**
  1963 + * @brief 修改4442卡密码。
  1964 + * @par 说明:
  1965 + * ::dc_changepin_4442 的HEX形式接口,参数 @a passwd 为HEX格式。
  1966 + */
  1967 + short USER_API dc_changepin_4442_hex(HANDLE icdev, unsigned char *passwd);
  1968 +
  1969 + /**
  1970 + * @brief 读4442卡保护位。
  1971 + * @par 说明:
  1972 + * 读取4442卡的保护区中哪些位置已经被置保护。
  1973 + * @param[in] icdev 设备标识符。
  1974 + * @param[in] offset 偏移。
  1975 + * @param[in] length 读取长度。
  1976 + * @param[out] data_buffer 返回的数据,数据中含有0x00字节的位置表示已经被置保护。
  1977 + * @return <0表示失败,==0表示成功。
  1978 + */
  1979 + short USER_API dc_readwrotect_4442(HANDLE icdev, short offset, short length, unsigned char *data_buffer);
  1980 +
  1981 + /**
  1982 + * @brief 读4442卡保护位。
  1983 + * @par 说明:
  1984 + * ::dc_readwrotect_4442 的HEX形式接口,参数 @a data_buffer 为HEX格式。
  1985 + */
  1986 + short USER_API dc_readwrotect_4442_hex(HANDLE icdev, short offset, short length, unsigned char *data_buffer);
  1987 +
  1988 + /**
  1989 + * @brief 读4442卡保护位。
  1990 + * @par 说明:
  1991 + * 读取4442卡的保护区中哪些位置已经被置保护。
  1992 + * @param[in] icdev 设备标识符。
  1993 + * @param[in] offset 偏移。
  1994 + * @param[in] length 读取长度。
  1995 + * @param[out] data_buffer 返回的数据,数据中含有0x00字节的位置表示已经被置保护。
  1996 + * @return <0表示失败,==0表示成功。
  1997 + */
  1998 + short USER_API dc_readprotect_4442(HANDLE icdev, short offset, short length, unsigned char *data_buffer);
  1999 +
  2000 + /**
  2001 + * @brief 读4442卡保护位。
  2002 + * @par 说明:
  2003 + * ::dc_readprotect_4442 的HEX形式接口,参数 @a data_buffer 为HEX格式。
  2004 + */
  2005 + short USER_API dc_readprotect_4442_hex(HANDLE icdev, short offset, short length, unsigned char *data_buffer);
  2006 +
  2007 + /**
  2008 + * @brief 写4442卡保护位。
  2009 + * @par 说明:
  2010 + * 对4442卡的保护区中指定位置进行置保护。
  2011 + * @param[in] icdev 设备标识符。
  2012 + * @param[in] offset 偏移。
  2013 + * @param[in] length 写入长度。
  2014 + * @param[in] data_buffer 传入数据,数据中和卡内原有数据相同的字节位置将被置保护。
  2015 + * @return <0表示失败,==0表示成功。
  2016 + */
  2017 + short USER_API dc_writeprotect_4442(HANDLE icdev, short offset, short length, unsigned char *data_buffer);
  2018 +
  2019 + /**
  2020 + * @brief 写4442卡保护位。
  2021 + * @par 说明:
  2022 + * ::dc_writeprotect_4442 的HEX形式接口,参数 @a data_buffer 为HEX格式。
  2023 + */
  2024 + short USER_API dc_writeprotect_4442_hex(HANDLE icdev, short offset, short length, unsigned char *data_buffer);
  2025 +
  2026 + /**
  2027 + * @brief 写24C系列卡。
  2028 + * @par 说明:
  2029 + * 写入数据到24C系列卡中,支持24C01、24C02、24C04、24C08、24C16卡。
  2030 + * @param[in] icdev 设备标识符。
  2031 + * @param[in] offset 偏移。
  2032 + * @param[in] length 写入长度。
  2033 + * @param[in] snd_buffer 传入数据。
  2034 + * @return <0表示失败,==0表示成功。
  2035 + */
  2036 + short USER_API dc_write_24c(HANDLE icdev, short offset, short length, unsigned char *snd_buffer);
  2037 +
  2038 + /**
  2039 + * @brief 写24C系列卡。
  2040 + * @par 说明:
  2041 + * ::dc_write_24c 的HEX形式接口,参数 @a snd_buffer 为HEX格式。
  2042 + */
  2043 + short USER_API dc_write_24c_hex(HANDLE icdev, short offset, short length, unsigned char *snd_buffer);
  2044 +
  2045 + /**
  2046 + * @brief 写24C64系列卡。
  2047 + * @par 说明:
  2048 + * 写入数据到24C64系列卡中,支持24C64、24C512、24C1024卡。
  2049 + * @param[in] icdev 设备标识符。
  2050 + * @param[in] offset 偏移。
  2051 + * @param[in] length 写入长度。
  2052 + * @param[in] snd_buffer 传入数据。
  2053 + * @return <0表示失败,==0表示成功。
  2054 + */
  2055 + short USER_API dc_write_24c64(HANDLE icdev, short offset, short length, unsigned char *snd_buffer);
  2056 +
  2057 + /**
  2058 + * @brief 写24C64系列卡。
  2059 + * @par 说明:
  2060 + * ::dc_write_24c64 的HEX形式接口,参数 @a snd_buffer 为HEX格式。
  2061 + */
  2062 + short USER_API dc_write_24c64_hex(HANDLE icdev, short offset, short length, unsigned char *snd_buffer);
  2063 +
  2064 + /**
  2065 + * @brief 读24C系列卡。
  2066 + * @par 说明:
  2067 + * 读取24C系列卡的数据,支持24C01、24C02、24C04、24C08、24C16卡。
  2068 + * @param[in] icdev 设备标识符。
  2069 + * @param[in] offset 偏移。
  2070 + * @param[in] length 读取长度。
  2071 + * @param[out] receive_buffer 返回的数据。
  2072 + * @return <0表示失败,==0表示成功。
  2073 + */
  2074 + short USER_API dc_read_24c(HANDLE icdev, short offset, short length, unsigned char *receive_buffer);
  2075 +
  2076 + /**
  2077 + * @brief 读24C系列卡。
  2078 + * @par 说明:
  2079 + * ::dc_read_24c 的HEX形式接口,参数 @a receive_buffer 为HEX格式。
  2080 + */
  2081 + short USER_API dc_read_24c_hex(HANDLE icdev, short offset, short length, unsigned char *receive_buffer);
  2082 +
  2083 + /**
  2084 + * @brief 读24C64系列卡。
  2085 + * @par 说明:
  2086 + * 读取24C64系列卡的数据,支持24C64、24C512、24C1024卡。
  2087 + * @param[in] icdev 设备标识符。
  2088 + * @param[in] offset 偏移。
  2089 + * @param[in] length 读取长度。
  2090 + * @param[out] receive_buffer 返回的数据。
  2091 + * @return <0表示失败,==0表示成功。
  2092 + */
  2093 + short USER_API dc_read_24c64(HANDLE icdev, short offset, short length, unsigned char *receive_buffer);
  2094 +
  2095 + /**
  2096 + * @brief 读24C64系列卡。
  2097 + * @par 说明:
  2098 + * ::dc_read_24c64 的HEX形式接口,参数 @a receive_buffer 为HEX格式。
  2099 + */
  2100 + short USER_API dc_read_24c64_hex(HANDLE icdev, short offset, short length, unsigned char *receive_buffer);
  2101 +
  2102 + /**
  2103 + * @brief 读4428卡。
  2104 + * @par 说明:
  2105 + * 读取4428卡的数据。
  2106 + * @param[in] icdev 设备标识符。
  2107 + * @param[in] offset 偏移。
  2108 + * @param[in] length 读取长度。
  2109 + * @param[out] data_buffer 返回的数据。
  2110 + * @return <0表示失败,==0表示成功。
  2111 + */
  2112 + short USER_API dc_read_4428(HANDLE icdev, short offset, short length, unsigned char *data_buffer);
  2113 +
  2114 + /**
  2115 + * @brief 读4428卡。
  2116 + * @par 说明:
  2117 + * ::dc_read_4428 的HEX形式接口,参数 @a data_buffer 为HEX格式。
  2118 + */
  2119 + short USER_API dc_read_4428_hex(HANDLE icdev, short offset, short length, unsigned char *data_buffer);
  2120 +
  2121 + /**
  2122 + * @brief 写4428卡。
  2123 + * @par 说明:
  2124 + * 写入数据到4428卡中。
  2125 + * @param[in] icdev 设备标识符。
  2126 + * @param[in] offset 偏移。
  2127 + * @param[in] length 写入长度。
  2128 + * @param[in] data_buffer 传入数据。
  2129 + * @return <0表示失败,==0表示成功。
  2130 + */
  2131 + short USER_API dc_write_4428(HANDLE icdev, short offset, short length, unsigned char *data_buffer);
  2132 +
  2133 + /**
  2134 + * @brief 写4428卡。
  2135 + * @par 说明:
  2136 + * ::dc_write_4428 的HEX形式接口,参数 @a data_buffer 为HEX格式。
  2137 + */
  2138 + short USER_API dc_write_4428_hex(HANDLE icdev, short offset, short length, unsigned char *data_buffer);
  2139 +
  2140 + /**
  2141 + * @brief 验证4428卡密码。
  2142 + * @par 说明:
  2143 + * 使用传入的密码来验证4428卡密码。
  2144 + * @param[in] icdev 设备标识符。
  2145 + * @param[in] passwd 密码,固定为2个字节。
  2146 + * @return <0表示失败,==0表示成功。
  2147 + */
  2148 + short USER_API dc_verifypin_4428(HANDLE icdev, unsigned char *passwd);
  2149 +
  2150 + /**
  2151 + * @brief 验证4428卡密码。
  2152 + * @par 说明:
  2153 + * ::dc_verifypin_4428 的HEX形式接口,参数 @a passwd 为HEX格式。
  2154 + */
  2155 + short USER_API dc_verifypin_4428_hex(HANDLE icdev, unsigned char *passwd);
  2156 +
  2157 + /**
  2158 + * @brief 读4428卡密码。
  2159 + * @par 说明:
  2160 + * 读取4428卡的密码。
  2161 + * @param[in] icdev 设备标识符。
  2162 + * @param[out] passwd 密码,固定为2个字节。
  2163 + * @return <0表示失败,==0表示成功。
  2164 + */
  2165 + short USER_API dc_readpin_4428(HANDLE icdev, unsigned char *passwd);
  2166 +
  2167 + /**
  2168 + * @brief 读4428卡密码。
  2169 + * @par 说明:
  2170 + * ::dc_readpin_4428 的HEX形式接口,参数 @a passwd 为HEX格式。
  2171 + */
  2172 + short USER_API dc_readpin_4428_hex(HANDLE icdev, unsigned char *passwd);
  2173 +
  2174 + /**
  2175 + * @brief 读4428卡密码计数。
  2176 + * @par 说明:
  2177 + * 读取4428卡的密码计数,此计数值表示可以尝试验证密码的次数。
  2178 + * @param[in] icdev 设备标识符。
  2179 + * @return <0表示失败,否则为密码计数值。
  2180 + */
  2181 + short USER_API dc_readpincount_4428(HANDLE icdev);
  2182 +
  2183 + /**
  2184 + * @brief 修改4428卡密码。
  2185 + * @par 说明:
  2186 + * 修改4428卡的密码。
  2187 + * @param[in] icdev 设备标识符。
  2188 + * @param[in] passwd 密码,固定为2个字节。
  2189 + * @return <0表示失败,==0表示成功。
  2190 + */
  2191 + short USER_API dc_changepin_4428(HANDLE icdev, unsigned char *passwd);
  2192 +
  2193 + /**
  2194 + * @brief 修改4428卡密码。
  2195 + * @par 说明:
  2196 + * ::dc_changepin_4428 的HEX形式接口,参数 @a passwd 为HEX格式。
  2197 + */
  2198 + short USER_API dc_changepin_4428_hex(HANDLE icdev, unsigned char *passwd);
  2199 +
  2200 + /**
  2201 + * @brief 读4428卡保护位。
  2202 + * @par 说明:
  2203 + * 读取4428卡的保护区中哪些位置已经被置保护。
  2204 + * @param[in] icdev 设备标识符。
  2205 + * @param[in] offset 偏移。
  2206 + * @param[in] length 读取长度。
  2207 + * @param[out] data_buffer 返回的数据,数据中含有0x00字节的位置表示已经被置保护。
  2208 + * @return <0表示失败,==0表示成功。
  2209 + */
  2210 + short USER_API dc_readprotect_4428(HANDLE icdev, short offset, short length, unsigned char *data_buffer);
  2211 +
  2212 + /**
  2213 + * @brief 读4428卡保护位。
  2214 + * @par 说明:
  2215 + * ::dc_readprotect_4428 的HEX形式接口,参数 @a data_buffer 为HEX格式。
  2216 + */
  2217 + short USER_API dc_readprotect_4428_hex(HANDLE icdev, short offset, short length, unsigned char *data_buffer);
  2218 +
  2219 + /**
  2220 + * @brief 写4428卡保护位。
  2221 + * @par 说明:
  2222 + * 对4428卡的保护区中指定位置进行置保护。
  2223 + * @param[in] icdev 设备标识符。
  2224 + * @param[in] offset 偏移。
  2225 + * @param[in] length 写入长度。
  2226 + * @param[in] data_buffer 传入数据,数据中和卡内原有数据相同的字节位置将被置保护。
  2227 + * @return <0表示失败,==0表示成功。
  2228 + */
  2229 + short USER_API dc_writeprotect_4428(HANDLE icdev, short offset, short length, unsigned char *data_buffer);
  2230 +
  2231 + /**
  2232 + * @brief 写4428卡保护位。
  2233 + * @par 说明:
  2234 + * ::dc_writeprotect_4428 的HEX形式接口,参数 @a data_buffer 为HEX格式。
  2235 + */
  2236 + short USER_API dc_writeprotect_4428_hex(HANDLE icdev, short offset, short length, unsigned char *data_buffer);
  2237 +
  2238 + /**
  2239 + * @brief 检测4442卡。
  2240 + * @par 说明:
  2241 + * 检测当前卡座中是否存在4442卡。
  2242 + * @param[in] icdev 设备标识符。
  2243 + * @return <0表示失败或不存在,==0表示存在。
  2244 + */
  2245 + short USER_API dc_Check_4442(HANDLE icdev);
  2246 +
  2247 + /**
  2248 + * @brief 检测4428卡。
  2249 + * @par 说明:
  2250 + * 检测当前卡座中是否存在4428卡。
  2251 + * @param[in] icdev 设备标识符。
  2252 + * @return <0表示失败或不存在,==0表示存在。
  2253 + */
  2254 + short USER_API dc_Check_4428(HANDLE icdev);
  2255 +
  2256 + /**
  2257 + * @brief 检测24C01卡。
  2258 + * @par 说明:
  2259 + * 检测当前卡座中是否存在24C01卡。
  2260 + * @param[in] icdev 设备标识符。
  2261 + * @return <0表示失败或不存在,==0表示存在。
  2262 + */
  2263 + short USER_API dc_Check_24C01(HANDLE icdev);
  2264 +
  2265 + /**
  2266 + * @brief 检测24C02卡。
  2267 + * @par 说明:
  2268 + * 检测当前卡座中是否存在24C02卡。
  2269 + * @param[in] icdev 设备标识符。
  2270 + * @return <0表示失败或不存在,==0表示存在。
  2271 + */
  2272 + short USER_API dc_Check_24C02(HANDLE icdev);
  2273 +
  2274 + /**
  2275 + * @brief 检测24C04卡。
  2276 + * @par 说明:
  2277 + * 检测当前卡座中是否存在24C04卡。
  2278 + * @param[in] icdev 设备标识符。
  2279 + * @return <0表示失败或不存在,==0表示存在。
  2280 + */
  2281 + short USER_API dc_Check_24C04(HANDLE icdev);
  2282 +
  2283 + /**
  2284 + * @brief 检测24C08卡。
  2285 + * @par 说明:
  2286 + * 检测当前卡座中是否存在24C08卡。
  2287 + * @param[in] icdev 设备标识符。
  2288 + * @return <0表示失败或不存在,==0表示存在。
  2289 + */
  2290 + short USER_API dc_Check_24C08(HANDLE icdev);
  2291 +
  2292 + /**
  2293 + * @brief 检测24C16卡。
  2294 + * @par 说明:
  2295 + * 检测当前卡座中是否存在24C16卡。
  2296 + * @param[in] icdev 设备标识符。
  2297 + * @return <0表示失败或不存在,==0表示存在。
  2298 + */
  2299 + short USER_API dc_Check_24C16(HANDLE icdev);
  2300 +
  2301 + /**
  2302 + * @brief 检测24C64卡。
  2303 + * @par 说明:
  2304 + * 检测当前卡座中是否存在24C64卡。
  2305 + * @param[in] icdev 设备标识符。
  2306 + * @return <0表示失败或不存在,==0表示存在。
  2307 + */
  2308 + short USER_API dc_Check_24C64(HANDLE icdev);
  2309 +
  2310 + /**
  2311 + * @brief 检测CPU卡。
  2312 + * @par 说明:
  2313 + * 检测当前卡座中是否存在CPU卡。
  2314 + * @param[in] icdev 设备标识符。
  2315 + * @return <0表示失败或不存在,==0表示存在T=0的CPU卡,==1表示存在T=1的CPU卡。
  2316 + */
  2317 + short USER_API dc_Check_CPU(HANDLE icdev);
  2318 +
  2319 + /**
  2320 + * @brief 检测卡。
  2321 + * @par 说明:
  2322 + * 检测当前卡座中存在的卡类型。
  2323 + * @param[in] icdev 设备标识符。
  2324 + * @return <0表示失败或不存在。
  2325 + * @n 8 - 表示存在4442卡。
  2326 + * @n 9 - 表示存在4428卡。
  2327 + * @n 30 - 表示存在T=0的CPU卡。
  2328 + * @n 31 - 表示存在T=1的CPU卡。
  2329 + * @n 21 - 表示存在24C01卡。
  2330 + * @n 22 - 表示存在24C02卡。
  2331 + * @n 23 - 表示存在24C04卡。
  2332 + * @n 24 - 表示存在24C08卡。
  2333 + * @n 25 - 表示存在24C16卡。
  2334 + * @n 26 - 表示存在24C64卡。
  2335 + */
  2336 + short USER_API dc_CheckCard(HANDLE icdev);
  2337 +
  2338 + /**
  2339 + * @brief 保留。
  2340 + */
  2341 + short USER_API dc_getrcinfo(HANDLE icdev, unsigned char *info);
  2342 +
  2343 + /**
  2344 + * @brief 保留。
  2345 + */
  2346 + short USER_API dc_getrcinfo_hex(HANDLE icdev, unsigned char *info);
  2347 +
  2348 + /**
  2349 + * @brief 获取设备长版本。
  2350 + * @par 说明:
  2351 + * 获取设备内部固件代码的长版本,此长版本依赖设备内部固件代码的实现,有可能同设备版本一致。
  2352 + * @param[in] icdev 设备标识符。
  2353 + * @param[out] sver 返回的版本字符串,请至少分配128个字节。
  2354 + * @return <0表示失败,==0表示成功。
  2355 + */
  2356 + short USER_API dc_getlongver(HANDLE icdev, unsigned char *sver);
  2357 +
  2358 + /**
  2359 + * @brief 寻卡请求、防卡冲突、选卡操作。
  2360 + * @par 说明:
  2361 + * 内部包含了 ::dc_request ::dc_anticoll ::dc_select 的功能。
  2362 + * @param[in] icdev 设备标识符。
  2363 + * @param[in] _Mode 模式,同 ::dc_request 的 @a _Mode 。
  2364 + * @param[out] Strsnr 返回的卡序列号,格式为数字字符串。
  2365 + * @return <0表示失败,==0表示成功,==1表示无卡或无法寻到卡片。
  2366 + */
  2367 + short USER_API dc_cardstr(HANDLE icdev, unsigned char _Mode, char *Strsnr);
  2368 +
  2369 + /**
  2370 + * @brief 寻Type A或Type B卡并激活。
  2371 + * @par 说明:
  2372 + * 对Type A或Type B卡进行寻卡和激活。
  2373 + * @param[in] icdev 设备标识符。
  2374 + * @param[out] rlen 返回激活信息的长度。
  2375 + * @param[out] rbuf 返回的激活信息,请至少分配128个字节。
  2376 + * @param[out] type 类型,'A'表示Type A卡,'B'表示Type B卡。
  2377 + * @return <0表示失败,==0表示成功,==1表示无卡或无法寻到卡片。
  2378 + */
  2379 + short USER_API dc_cardAB(HANDLE icdev, unsigned char *rlen, unsigned char *rbuf, unsigned char *type);
  2380 +
  2381 + /**
  2382 + * @brief 寻Type B卡并激活。
  2383 + * @par 说明:
  2384 + * 对Type B卡进行寻卡和激活。
  2385 + * @param[in] icdev 设备标识符。
  2386 + * @param[out] rbuf 返回的激活信息,请至少分配128个字节。
  2387 + * @return <0表示失败,==0表示成功,==1表示无卡或无法寻到卡片。
  2388 + */
  2389 + short USER_API dc_card_b(HANDLE icdev, unsigned char *rbuf);
  2390 +
  2391 + /**
  2392 + * @brief 寻Type B卡并激活。
  2393 + * @par 说明:
  2394 + * ::dc_card_b 的HEX形式接口,参数 @a rbuf 为HEX格式。
  2395 + */
  2396 + short USER_API dc_card_b_hex(HANDLE icdev, char *rbuf);
  2397 +
  2398 + /**
  2399 + * @brief 液晶显示。
  2400 + * @par 说明:
  2401 + * 显示指定字符串到液晶屏幕上。
  2402 + * @param[in] icdev 设备标识符。
  2403 + * @param[in] line 行号。
  2404 + * @param[in] offset 偏移。
  2405 + * @param[in] data 要显示的字符串。
  2406 + * @return <0表示失败,==0表示成功。
  2407 + */
  2408 + short USER_API dc_dispinfo_T8(HANDLE icdev, unsigned char line, unsigned char offset, char *data);
  2409 +
  2410 + /**
  2411 + * @brief 液晶显示。
  2412 + * @par 说明:
  2413 + * 显示指定字符串到液晶屏幕上。
  2414 + * @param[in] icdev 设备标识符。
  2415 + * @param[in] offset 屏幕偏移。
  2416 + * @param[in] data 要显示的字符串。
  2417 + * @return <0表示失败,==0表示成功。
  2418 + */
  2419 + short USER_API dc_dispinfo_pro_T8(HANDLE icdev, unsigned char offset, char *data);
  2420 +
  2421 + /**
  2422 + * @brief LCD清屏。
  2423 + * @par 说明:
  2424 + * 清除LCD屏幕的显示内容。
  2425 + * @param[in] icdev 设备标识符。
  2426 + * @param[in] line 需要清除的行号,编号从1开始。
  2427 + * @return <0表示失败,==0表示成功。
  2428 + */
  2429 + short USER_API dc_clearlcd_T8(HANDLE icdev, unsigned char line);
  2430 +
  2431 + /**
  2432 + * @brief 指示灯点亮/熄灭。
  2433 + * @par 说明:
  2434 + * 点亮/熄灭设备的指示灯。
  2435 + * @param[in] icdev 设备标识符。
  2436 + * @param[in] cled 指示灯编号,0表示全部指示灯,1表示第一个指示灯,2表示第二个指示灯,以此类推。
  2437 + * @param[in] cflag 0-点亮,1-熄灭。
  2438 + * @return <0表示失败,==0表示成功。
  2439 + */
  2440 + short USER_API dc_led_T8(HANDLE icdev, unsigned char cled, unsigned char cflag);
  2441 +
  2442 + /**
  2443 + * @brief 保留。
  2444 + */
  2445 + short USER_API dc_dispmap_T8(HANDLE icdev, unsigned char *mapdata);
  2446 +
  2447 + /**
  2448 + * @brief 保留。
  2449 + */
  2450 + short USER_API dc_displow_T8(HANDLE icdev, unsigned char rs, unsigned char cdata);
  2451 +
  2452 + /**
  2453 + * @brief 读/写射频寄存器。
  2454 + * @par 说明:
  2455 + * 从射频寄存器读取值或写入值到射频寄存器中。
  2456 + * @param[in] icdev 设备标识符。
  2457 + * @param[in] flag 读写标记,0x00表示读,0x01表示写。
  2458 + * @param[in] _Adr 寄存器地址。
  2459 + * @param[in,out] _Data 寄存器值,固定为1个字节。
  2460 + * @return <0表示失败,==0表示成功。
  2461 + */
  2462 + short USER_API dc_rw_rfreg(HANDLE icdev, unsigned char flag, unsigned char _Adr, unsigned char *_Data);
  2463 +
  2464 + /**
  2465 + * @brief 读/写射频寄存器。
  2466 + * @par 说明:
  2467 + * ::dc_rw_rfreg 的HEX形式接口,参数 @a _Data 为HEX格式。
  2468 + */
  2469 + short USER_API dc_rw_rfreg_hex(HANDLE icdev, unsigned char flag, unsigned char _Adr, unsigned char *_Data);
  2470 +
  2471 + /**
  2472 + * @brief 保留。
  2473 + */
  2474 + short USER_API dc_mulrequest_b(HANDLE icdev, unsigned char _Mode, unsigned char AFI, unsigned char *cardnum, unsigned char *mulATQB);
  2475 +
  2476 + /**
  2477 + * @brief 保留。
  2478 + */
  2479 + short USER_API dc_hltb(HANDLE icdev, unsigned char *PUPI);
  2480 +
  2481 + /**
  2482 + * @brief 保留。
  2483 + */
  2484 + short USER_API dc_set_poweroff(HANDLE icdev, unsigned int MsTimes, unsigned char TimerClock, unsigned char TimerReload);
  2485 +
  2486 + /**
  2487 + * @brief 非接触式CPU卡指令交互。
  2488 + * @par 说明:
  2489 + * 对感应区CPU卡进行指令交互操作,注意此接口不封装卡协议部分,带CRC。
  2490 + * @param[in] icdev 设备标识符。
  2491 + * @param[in] slen 发送数据的长度。
  2492 + * @param[in] sendbuffer 发送数据。
  2493 + * @param[out] rlen 返回数据的长度。
  2494 + * @param[out] databuffer 返回的数据。
  2495 + * @param[in] timeout 超时值,此值只在部分设备的底层使用,单位为250毫秒,一般调用建议值为7。
  2496 + * @param[in] CRCSTU CRC值。
  2497 + * @return <0表示失败,==0表示成功。
  2498 + */
  2499 + short USER_API dc_pro_commandsourceCRC(HANDLE icdev, unsigned char slen, unsigned char *sendbuffer, unsigned char *rlen, unsigned char *databuffer, unsigned char timeout, unsigned char CRCSTU);
  2500 +
  2501 + /**
  2502 + * @brief 非接触式CPU卡指令交互。
  2503 + * @par 说明:
  2504 + * ::dc_pro_commandsourceCRC 的HEX形式接口,参数 @a sendbuffer @a databuffer 为HEX格式。
  2505 + */
  2506 + short USER_API dc_pro_commandsourceCRChex(HANDLE icdev, unsigned char slen, char *sendbuffer, unsigned char *rlen, char *databuffer, unsigned char timeout, unsigned char CRCSTU);
  2507 +
  2508 + /**
  2509 + * @brief Mifare Plus卡设置个人化数据(0级)。
  2510 + * @par 说明:
  2511 + * 设置Mifare Plus卡的个人化数据。
  2512 + * @param[in] icdev 设备标识符。
  2513 + * @param[in] BNr 要写入的个人化数据块号。
  2514 + * @param[in] dataperso 要写入的数据,固定为16个字节。
  2515 + * @return <0表示失败,==0表示成功。
  2516 + */
  2517 + short USER_API dc_MFPL0_writeperso(HANDLE icdev, unsigned int BNr, unsigned char *dataperso);
  2518 +
  2519 + /**
  2520 + * @brief Mifare Plus卡设置个人化数据(0级)。
  2521 + * @par 说明:
  2522 + * ::dc_MFPL0_writeperso 的HEX形式接口,参数 @a dataperso 为HEX格式。
  2523 + */
  2524 + short USER_API dc_MFPL0_writeperso_hex(HANDLE icdev, unsigned int BNr, unsigned char *dataperso);
  2525 +
  2526 + /**
  2527 + * @brief Mifare Plus卡提交个人化数据(0级)。
  2528 + * @par 说明:
  2529 + * 提交Mifare Plus卡的个人化数据,提交成功后卡片进入1级状态。
  2530 + * @param[in] icdev 设备标识符。
  2531 + * @return <0表示失败,==0表示成功。
  2532 + */
  2533 + short USER_API dc_MFPL0_commitperso(HANDLE icdev);
  2534 +
  2535 + /**
  2536 + * @brief 验证Mifare Plus卡状态密码(1级)。
  2537 + * @par 说明:
  2538 + * 验证Mifare Plus卡状态密码,用于在1级状态下实现严格的认证。
  2539 + * @param[in] icdev 设备标识符。
  2540 + * @param[in] authkey 认证密码,固定为16个字节。
  2541 + * @return <0表示失败,==0表示成功。
  2542 + */
  2543 + short USER_API dc_MFPL1_authl1key(HANDLE icdev, unsigned char *authkey);
  2544 +
  2545 + /**
  2546 + * @brief 验证Mifare Plus卡状态密码(1级)。
  2547 + * @par 说明:
  2548 + * ::dc_MFPL1_authl1key 的HEX形式接口,参数 @a authkey 为HEX格式。
  2549 + */
  2550 + short USER_API dc_MFPL1_authl1key_hex(HANDLE icdev, unsigned char *authkey);
  2551 +
  2552 + /**
  2553 + * @brief 升级Mifare Plus卡状态到2级(1级)。
  2554 + * @par 说明:
  2555 + * 状态切换函数,执行该操作后,1级状态的卡片转换到2级。
  2556 + * @param[in] icdev 设备标识符。
  2557 + * @param[in] authkey 升级密码,固定为16个字节。
  2558 + * @return <0表示失败,==0表示成功。
  2559 + */
  2560 + short USER_API dc_MFPL1_switchtol2(HANDLE icdev, unsigned char *authkey);
  2561 +
  2562 + /**
  2563 + * @brief 升级Mifare Plus卡状态到3级(1级)。
  2564 + * @par 说明:
  2565 + * 状态切换函数,执行该操作后,1级状态的卡片转换到3级。
  2566 + * @param[in] icdev 设备标识符。
  2567 + * @param[in] authkey 升级密码,固定为16个字节。
  2568 + * @return <0表示失败,==0表示成功。
  2569 + */
  2570 + short USER_API dc_MFPL1_switchtol3(HANDLE icdev, unsigned char *authkey);
  2571 +
  2572 + /**
  2573 + * @brief 升级Mifare Plus卡状态到3级(2级)。
  2574 + * @par 说明:
  2575 + * 状态切换函数,执行该操作后,2级状态的卡片转换到3级。
  2576 + * @param[in] icdev 设备标识符。
  2577 + * @param[in] authkey 升级密码,固定为16个字节。
  2578 + * @return <0表示失败,==0表示成功。
  2579 + */
  2580 + short USER_API dc_MFPL2_switchtol3(HANDLE icdev, unsigned char *authkey);
  2581 +
  2582 + /**
  2583 + * @brief 验证Mifare Plus卡状态密码(3级)。
  2584 + * @par 说明:
  2585 + * 执行3级状态卡片认证,根据密码块号的不同,验证不同的密码。
  2586 + * @param[in] icdev 设备标识符。
  2587 + * @param[in] keyBNr 密码块号。
  2588 + * @param[in] authkey 认证密码,固定为16个字节。
  2589 + * @return <0表示失败,==0表示成功。
  2590 + */
  2591 + short USER_API dc_MFPL3_authl3key(HANDLE icdev, unsigned int keyBNr, unsigned char *authkey);
  2592 +
  2593 + /**
  2594 + * @brief 验证Mifare Plus卡状态密码(3级)。
  2595 + * @par 说明:
  2596 + * ::dc_MFPL3_authl3key 的HEX形式接口,参数 @a authkey 为HEX格式。
  2597 + */
  2598 + short USER_API dc_MFPL3_authl3key_hex(HANDLE icdev, unsigned int keyBNr, unsigned char *authkey);
  2599 +
  2600 + /**
  2601 + * @brief 验证Mifare Plus卡状态密码(3级)。
  2602 + * @par 说明:
  2603 + * 执行3级状态卡片认证,根据密码扇区号的不同,验证不同的密码。
  2604 + * @param[in] icdev 设备标识符。
  2605 + * @param[in] mode 模式,0x00表示验证A密码,内部用0x4000+sectorBNr*2计算密码块,0x04表示验证B密码,内部用0x4000+sectorBNr*2+1计算密码块。
  2606 + * @param[in] sectorBNr 密码扇区号。
  2607 + * @param[in] authkey 认证密码,固定为16个字节。
  2608 + * @return <0表示失败,==0表示成功。
  2609 + */
  2610 + short USER_API dc_MFPL3_authl3sectorkey(HANDLE icdev, unsigned char mode, unsigned int sectorBNr, unsigned char *authkey);
  2611 +
  2612 + /**
  2613 + * @brief 验证Mifare Plus卡状态密码(3级)。
  2614 + * @par 说明:
  2615 + * ::dc_MFPL3_authl3key 的HEX形式接口,参数 @a authkey 为HEX格式。
  2616 + */
  2617 + short USER_API dc_MFPL3_authl3sectorkey_hex(HANDLE icdev, unsigned char mode, unsigned int sectorBNr, unsigned char *authkey);
  2618 +
  2619 + /**
  2620 + * @brief 读Mifare Plus卡数据(3级)。
  2621 + * @par 说明:
  2622 + * 在3级状态下读取Mifare Plus卡数据,可以连续读多块,每块16字节。
  2623 + * @param[in] icdev 设备标识符。
  2624 + * @param[in] BNr 起始块地址。
  2625 + * @param[in] Numblock 块数目,一般不大于6块。
  2626 + * @param[out] readdata 返回的数据。
  2627 + * @return <0表示失败,==0表示成功。
  2628 + */
  2629 + short USER_API dc_MFPL3_readinplain(HANDLE icdev, unsigned int BNr, unsigned char Numblock, unsigned char *readdata);
  2630 +
  2631 + /**
  2632 + * @brief 读Mifare Plus卡数据(3级)。
  2633 + * @par 说明:
  2634 + * ::dc_MFPL3_readinplain 的HEX形式接口,参数 @a readdata 为HEX格式。
  2635 + */
  2636 + short USER_API dc_MFPL3_readinplain_hex(HANDLE icdev, unsigned int BNr, unsigned char Numblock, unsigned char *readdata);
  2637 +
  2638 + /**
  2639 + * @brief 加密模式读Mifare Plus卡数据(3级)。
  2640 + * @par 说明:
  2641 + * 在3级状态下用加密模式读取Mifare Plus卡数据,可以连续读多块,每块16字节。
  2642 + * @param[in] icdev 设备标识符。
  2643 + * @param[in] BNr 起始块地址。
  2644 + * @param[in] Numblock 块数目,一般不大于6块。
  2645 + * @param[out] readdata 返回的数据。
  2646 + * @param[in] flag 标记,0x00表示加密数据内部解密后再返回,0x01表示加密数据直接返回。
  2647 + * @return <0表示失败,==0表示成功。
  2648 + */
  2649 + short USER_API dc_MFPL3_readencrypted(HANDLE icdev, unsigned int BNr, unsigned char Numblock, unsigned char *readdata, unsigned char flag);
  2650 +
  2651 + /**
  2652 + * @brief 加密模式读Mifare Plus卡数据(3级)。
  2653 + * @par 说明:
  2654 + * ::dc_MFPL3_readencrypted 的HEX形式接口,参数 @a readdata 为HEX格式。
  2655 + */
  2656 + short USER_API dc_MFPL3_readencrypted_hex(HANDLE icdev, unsigned int BNr, unsigned char Numblock, unsigned char *readdata, unsigned char flag);
  2657 +
  2658 + /**
  2659 + * @brief 写Mifare Plus卡数据(3级)。
  2660 + * @par 说明:
  2661 + * 在3级状态下写入数据到Mifare Plus卡中,可以连续写多块,每块16字节。
  2662 + * @param[in] icdev 设备标识符。
  2663 + * @param[in] BNr 起始块地址。
  2664 + * @param[in] Numblock 块数目,一般不大于6块。
  2665 + * @param[in] writedata 传入数据。
  2666 + * @return <0表示失败,==0表示成功。
  2667 + */
  2668 + short USER_API dc_MFPL3_writeinplain(HANDLE icdev, unsigned int BNr, unsigned char Numblock, unsigned char *writedata);
  2669 +
  2670 + /**
  2671 + * @brief 写Mifare Plus卡数据(3级)。
  2672 + * @par 说明:
  2673 + * ::dc_MFPL3_writeinplain 的HEX形式接口,参数 @a writedata 为HEX格式。
  2674 + */
  2675 + short USER_API dc_MFPL3_writeinplain_hex(HANDLE icdev, unsigned int BNr, unsigned char Numblock, unsigned char *writedata);
  2676 +
  2677 + /**
  2678 + * @brief 加密模式写Mifare Plus卡数据(3级)。
  2679 + * @par 说明:
  2680 + * 在3级状态下用加密模式写入数据到Mifare Plus卡中,可以连续写多块,每块16字节。注意:写密码时,必须使用此函数并且块数目只能为1。
  2681 + * @param[in] icdev 设备标识符。
  2682 + * @param[in] BNr 起始块地址。
  2683 + * @param[in] Numblock 块数目,一般不大于6块。
  2684 + * @param[in] writedata 传入数据。
  2685 + * @param[in] flag 标记,0x00表示传入数据需内部加密后再使用,0x01表示传入数据直接使用。
  2686 + * @return <0表示失败,==0表示成功。
  2687 + */
  2688 + short USER_API dc_MFPL3_writeencrypted(HANDLE icdev, unsigned int BNr, unsigned char Numblock, unsigned char *writedata, unsigned char flag);
  2689 +
  2690 + /**
  2691 + * @brief 加密模式写Mifare Plus卡数据(3级)。
  2692 + * @par 说明:
  2693 + * ::dc_MFPL3_writeencrypted 的HEX形式接口,参数 @a writedata 为HEX格式。
  2694 + */
  2695 + short USER_API dc_MFPL3_writeencrypted_hex(HANDLE icdev, unsigned int BNr, unsigned char Numblock, unsigned char *writedata, unsigned char flag);
  2696 +
  2697 + /**
  2698 + * @brief 验证Mifare Ultralight C卡密码。
  2699 + * @par 说明:
  2700 + * 使用传入的密码来验证Mifare Ultralight C卡密码。
  2701 + * @param[in] icdev 设备标识符。
  2702 + * @param[in] key 密码,固定为16个字节。
  2703 + * @return <0表示失败,==0表示成功。
  2704 + */
  2705 + short USER_API dc_auth_ulc(HANDLE icdev, unsigned char *key);
  2706 +
  2707 + /**
  2708 + * @brief 验证Mifare Ultralight C卡密码。
  2709 + * @par 说明:
  2710 + * ::dc_auth_ulc 的HEX形式接口,参数 @a key 为HEX格式。
  2711 + */
  2712 + short USER_API dc_auth_ulc_hex(HANDLE icdev, unsigned char *key);
  2713 +
  2714 + /**
  2715 + * @brief 修改Mifare Ultralight C卡密码。
  2716 + * @par 说明:
  2717 + * 修改Mifare Ultralight C卡的密码。
  2718 + * @param[in] icdev 设备标识符。
  2719 + * @param[in] newkey 密码,固定为16个字节。
  2720 + * @return <0表示失败,==0表示成功。
  2721 + */
  2722 + short USER_API dc_changekey_ulc(HANDLE icdev, unsigned char *newkey);
  2723 +
  2724 + /**
  2725 + * @brief 修改Mifare Ultralight C卡密码。
  2726 + * @par 说明:
  2727 + * ::dc_changekey_ulc 的HEX形式接口,参数 @a newkey 为HEX格式。
  2728 + */
  2729 + short USER_API dc_changekey_ulc_hex(HANDLE icdev, unsigned char *newkey);
  2730 +
  2731 + /**
  2732 + * @brief 获取接触式CPU卡参数。
  2733 + * @par 说明:
  2734 + * 此接口可获取接触式CPU卡操作行为的参数。
  2735 + * @param[in] icdev 设备标识符。
  2736 + * @param[in] cputype 卡座编号,同 ::dc_setcpu 的 @a _Byte 。
  2737 + * @param[out] cpupro 卡协议编号,0x00表示T0,0x01表示T1,默认为0x00。
  2738 + * @param[out] cpuetu 卡复位波特率编号,0x5C表示9600,0x14表示38400.
  2739 + * @return <0表示失败,==0表示成功。
  2740 + */
  2741 + short USER_API dc_getcpupara(HANDLE icdev, unsigned char cputype, unsigned char *cpupro, unsigned char *cpuetu);
  2742 +
  2743 + /**
  2744 + * @brief 接触式CPU卡指令交互。
  2745 + * @par 说明:
  2746 + * 对当前卡座CPU卡进行指令交互操作,注意此接口不封装卡协议部分。
  2747 + * @param[in] icdev 设备标识符。
  2748 + * @param[in] slen 发送数据的长度。
  2749 + * @param[in] sendbuffer 发送数据。
  2750 + * @param[out] rlen 返回数据的长度。
  2751 + * @param[out] databuffer 返回的数据。
  2752 + * @return <0表示失败,==0表示成功。
  2753 + */
  2754 + short USER_API dc_cpuapdusourceEXT(HANDLE icdev, short slen, unsigned char *sendbuffer, short *rlen, unsigned char *databuffer);
  2755 +
  2756 + /**
  2757 + * @brief 接触式CPU卡指令交互。
  2758 + * @par 说明:
  2759 + * ::dc_cpuapdusourceEXT 的HEX形式接口,参数 @a sendbuffer @a databuffer 为HEX格式。
  2760 + */
  2761 + short USER_API dc_cpuapdusourceEXT_hex(HANDLE icdev, short slen, char *sendbuffer, short *rlen, char *databuffer);
  2762 +
  2763 + /**
  2764 + * @brief 接触式CPU卡指令交互。
  2765 + * @par 说明:
  2766 + * 对当前卡座CPU卡进行指令交互操作,注意此接口已封装卡协议部分。
  2767 + * @param[in] icdev 设备标识符。
  2768 + * @param[in] slen 发送数据的长度。
  2769 + * @param[in] sendbuffer 发送数据。
  2770 + * @param[out] rlen 返回数据的长度。
  2771 + * @param[out] databuffer 返回的数据。
  2772 + * @return <0表示失败,==0表示成功。
  2773 + */
  2774 + short USER_API dc_cpuapduEXT(HANDLE icdev, short slen, unsigned char *sendbuffer, short *rlen, unsigned char *databuffer);
  2775 +
  2776 + /**
  2777 + * @brief 接触式CPU卡指令交互。
  2778 + * @par 说明:
  2779 + * ::dc_cpuapduEXT 的HEX形式接口,参数 @a sendbuffer @a databuffer 为HEX格式。
  2780 + */
  2781 + short USER_API dc_cpuapduEXT_hex(HANDLE icdev, short slen, char *sendbuffer, short *rlen, char *databuffer);
  2782 +
  2783 + /**
  2784 + * @brief 接触式CPU卡指令交互。
  2785 + * @par 说明:
  2786 + * 对当前卡座CPU卡进行指令交互操作,注意此接口已封装卡协议部分。
  2787 + * @param[in] icdev 设备标识符。
  2788 + * @param[in] slen 发送数据的长度。
  2789 + * @param[in] sendbuffer 发送数据。
  2790 + * @param[out] rlen 返回数据的长度。
  2791 + * @param[out] databuffer 返回的数据。
  2792 + * @return <0表示失败,==0表示成功。
  2793 + */
  2794 + short USER_API dc_cpuapduInt(HANDLE icdev, unsigned int slen, unsigned char *sendbuffer, unsigned int *rlen, unsigned char *databuffer);
  2795 +
  2796 + /**
  2797 + * @brief 接触式CPU卡指令交互。
  2798 + * @par 说明:
  2799 + * ::dc_cpuapduInt 的HEX形式接口,参数 @a sendbuffer @a databuffer 为HEX格式。
  2800 + */
  2801 + short USER_API dc_cpuapduInt_hex(HANDLE icdev, unsigned int slen, char *sendbuffer, unsigned int *rlen, char *databuffer);
  2802 +
  2803 + /**
  2804 + * @brief 非接触式CPU卡指令交互。
  2805 + * @par 说明:
  2806 + * 对感应区CPU卡进行指令交互操作,注意此接口已封装卡协议部分。
  2807 + * @param[in] icdev 设备标识符。
  2808 + * @param[in] slen 发送数据的长度。
  2809 + * @param[in] sendbuffer 发送数据。
  2810 + * @param[out] rlen 返回数据的长度。
  2811 + * @param[out] databuffer 返回的数据。
  2812 + * @param[in] timeout 超时值,此值只在部分设备的底层使用,单位为250毫秒,一般调用建议值为7。
  2813 + * @param[in] FG 分割值,此值只在部分设备的底层使用,单位为字节,一般调用建议值为64。
  2814 + * @return <0表示失败,==0表示成功。
  2815 + */
  2816 + short USER_API dc_pro_commandlinkEXT(HANDLE icdev, unsigned int slen, unsigned char *sendbuffer, unsigned int *rlen, unsigned char *databuffer, unsigned char timeout, unsigned char FG);
  2817 +
  2818 + /**
  2819 + * @brief 非接触式CPU卡指令交互。
  2820 + * @par 说明:
  2821 + * ::dc_pro_commandlinkEXT 的HEX形式接口,参数 @a sendbuffer @a databuffer 为HEX格式。
  2822 + */
  2823 + short USER_API dc_pro_commandlinkEXT_hex(HANDLE icdev, unsigned int slen, unsigned char *sendbuffer, unsigned int *rlen, unsigned char *databuffer, unsigned char timeout, unsigned char FG);
  2824 +
  2825 + /**
  2826 + * @brief 非接触式CPU卡指令交互。
  2827 + * @par 说明:
  2828 + * 对感应区CPU卡进行指令交互操作,注意此接口已封装卡协议部分。
  2829 + * @param[in] icdev 设备标识符。
  2830 + * @param[in] slen 发送数据的长度。
  2831 + * @param[in] sendbuffer 发送数据。
  2832 + * @param[out] rlen 返回数据的长度。
  2833 + * @param[out] databuffer 返回的数据。
  2834 + * @param[in] timeout 超时值,此值只在部分设备的底层使用,单位为250毫秒,一般调用建议值为7。
  2835 + * @return <0表示失败,==0表示成功。
  2836 + */
  2837 + short USER_API dc_pro_commandlinkInt(HANDLE icdev, unsigned int slen, unsigned char *sendbuffer, unsigned int *rlen, unsigned char *databuffer, unsigned char timeout);
  2838 +
  2839 + /**
  2840 + * @brief 非接触式CPU卡指令交互。
  2841 + * @par 说明:
  2842 + * ::dc_pro_commandlinkInt 的HEX形式接口,参数 @a sendbuffer @a databuffer 为HEX格式。
  2843 + */
  2844 + short USER_API dc_pro_commandlinkInt_hex(HANDLE icdev, unsigned int slen, char *sendbuffer, unsigned int *rlen, char *databuffer, unsigned char timeout);
  2845 +
  2846 + /**
  2847 + * @brief 保留。
  2848 + */
  2849 + short USER_API dc_exchangeblock(HANDLE icdev, unsigned char slen, unsigned char *sendbuffer, unsigned char *rlen, unsigned char *databuffer, unsigned char timeout);
  2850 +
  2851 + /**
  2852 + * @brief 保留。
  2853 + */
  2854 + short USER_API dc_exchangeblock_hex(HANDLE icdev, unsigned char slen, unsigned char *sendbuffer, unsigned char *rlen, unsigned char *databuffer, unsigned char timeout);
  2855 +
  2856 + /**
  2857 + * @brief 保留。
  2858 + */
  2859 + short USER_API dc_write1024(HANDLE icdev, unsigned int offset, unsigned int length, unsigned char *writebuffer);
  2860 +
  2861 + /**
  2862 + * @brief 保留。
  2863 + */
  2864 + short USER_API dc_write1024_hex(HANDLE icdev, unsigned int offset, unsigned int length, unsigned char *writebuffer);
  2865 +
  2866 + /**
  2867 + * @brief 保留。
  2868 + */
  2869 + short USER_API dc_read1024(HANDLE icdev, unsigned int offset, unsigned int length, unsigned char *databuffer);
  2870 +
  2871 + /**
  2872 + * @brief 保留。
  2873 + */
  2874 + short USER_API dc_read1024_hex(HANDLE icdev, unsigned int offset, unsigned int length, unsigned char *databuffer);
  2875 +
  2876 + /**
  2877 + * @brief 保留。
  2878 + */
  2879 + short USER_API dc_switch_linux(HANDLE icdev);
  2880 +
  2881 + /**
  2882 + * @brief 接触式CPU卡复位。
  2883 + * @par 说明:
  2884 + * 对当前卡座CPU卡进行复位操作,此复位为热复位。
  2885 + * @param[in] icdev 设备标识符。
  2886 + * @param[out] rlen 返回复位信息的长度。
  2887 + * @param[out] databuffer 返回的复位信息,请至少分配128个字节。
  2888 + * @return <0表示失败,==0表示成功。
  2889 + */
  2890 + short USER_API dc_cpuhotreset(HANDLE icdev, unsigned char *rlen, unsigned char *databuffer);
  2891 +
  2892 + /**
  2893 + * @brief 接触式CPU卡复位。
  2894 + * @par 说明:
  2895 + * ::dc_cpuhotreset 的HEX形式接口,参数 @a databuffer 为HEX格式。
  2896 + */
  2897 + short USER_API dc_cpuhotreset_hex(HANDLE icdev, unsigned char *rlen, char *databuffer);
  2898 +
  2899 + /**
  2900 + * @brief 检测多卡状态。
  2901 + * @par 说明:
  2902 + * 检测设备中存在什么类型的卡片,支持磁卡、非接、接触、身份证。
  2903 + * @param[in] icdev 设备标识符。
  2904 + * @param[out] flag 状态标记,固定为2个字节,可以解析为一个无符号整数(Big-Endian),值为下面列出的一种或多种之和。
  2905 + * @n 0x0001 - 表示已刷磁卡。
  2906 + * @n 0x0002 - 表示卡座存在接触式CPU卡。
  2907 + * @n 0x0004 - 表示卡座存在接触式未知卡。
  2908 + * @n 0x0008 - 表示感应区存在身份证。
  2909 + * @n 0x0010 - 表示感应区存在激活前的Type A CPU卡或Type B CPU卡。
  2910 + * @n 0x0020 - 表示感应区存在激活后的Type A CPU卡或Type B CPU卡。
  2911 + * @n 0x0040 - 表示感应区存在激活前的M1卡。
  2912 + * @n 0x0100 - 表示感应区存在激活前的多张Type A CPU卡。
  2913 + * @n 0x0200 - 表示感应区存在激活前的多张M1卡。
  2914 + * @n 0x0400 - 表示感应区同时存在激活前的Type A CPU卡和M1卡。
  2915 + * @n 0x0800 - 表示刷磁卡失败。
  2916 + * @n 0x1000 - 表示启动刷磁卡模式处于关闭状态。
  2917 + * @n 0x2000 - 表示启动刷磁卡模式处于开启状态。
  2918 + * @n 0x4000 - 表示感应区身份证激活前后状态一致。
  2919 + * @return <0表示失败,==0表示成功,==1表示无卡或无法寻到卡片。
  2920 + */
  2921 + short USER_API dc_card_exist(HANDLE icdev, unsigned char *flag);
  2922 +
  2923 + /**
  2924 + * @brief 检测接触式卡存在。
  2925 + * @par 说明:
  2926 + * 检测接触式卡片是否存在于当前卡座中。
  2927 + * @param[in] icdev 设备标识符。
  2928 + * @return <0表示失败,==0表示存在,==1表示不存在。
  2929 + */
  2930 + short USER_API dc_card_status(HANDLE icdev);
  2931 +
  2932 + /**
  2933 + * @brief 身份证、Type A CPU卡、Type B CPU卡检测。
  2934 + * @par 说明:
  2935 + * 检测感应区是否存在身份证、Type A CPU卡、Type B CPU卡。
  2936 + * @param[in] icdev 设备标识符。
  2937 + * @return <0表示失败,==0表示无卡,==1表示存在身份证,==2表示存在Type A CPU卡,==3表示存在Type B CPU卡。
  2938 + */
  2939 + short USER_API dc_typeab_card_status(HANDLE icdev);
  2940 +
  2941 + /**
  2942 + * @brief 寻卡请求、防卡冲突、选卡操作。
  2943 + * @par 说明:
  2944 + * 内部包含了 ::dc_request ::dc_anticoll ::dc_select ::dc_anticoll2 ::dc_select2 的功能。
  2945 + * @param[in] icdev 设备标识符。
  2946 + * @param[in] _Mode 模式,同 ::dc_request 的 @a _Mode 。
  2947 + * @param[out] SnrLen 返回卡序列号的长度。
  2948 + * @param[out] _Snr 返回的卡序列号,请至少分配8个字节。
  2949 + * @return <0表示失败,==0表示成功,==1表示无卡或无法寻到卡片。
  2950 + */
  2951 + short USER_API dc_card_n(HANDLE icdev, unsigned char _Mode, unsigned int *SnrLen, unsigned char *_Snr);
  2952 +
  2953 + /**
  2954 + * @brief 寻卡请求、防卡冲突、选卡操作。
  2955 + * @par 说明:
  2956 + * ::dc_card_n 的HEX形式接口,参数 @a _Snr 为HEX格式。
  2957 + */
  2958 + short USER_API dc_card_n_hex(HANDLE icdev, unsigned char _Mode, unsigned int *SnrLen, unsigned char *_Snr);
  2959 +
  2960 + /**
  2961 + * @brief 保留。
  2962 + */
  2963 + short USER_API dc_card_n_number(HANDLE icdev, unsigned char _Mode, char *_Snr);
  2964 +
  2965 + /**
  2966 + * @brief 获取单个按键值。
  2967 + * @par 说明:
  2968 + * 获取设备键盘的按键值,每次调用仅能获取单个按键值。
  2969 + * @param[in] icdev 设备标识符。
  2970 + * @param[in] timeout 设备超时值,单位为秒。
  2971 + * @param[out] value 返回的按键值,请至少分配8个字节。
  2972 + * @return <0表示失败,==0表示成功。
  2973 + */
  2974 + short USER_API dc_pass_key_value(HANDLE icdev, unsigned char timeout, char *value);
  2975 +
  2976 + /**
  2977 + * @brief 播放语音。
  2978 + * @par 说明:
  2979 + * 播放设备内置语音。
  2980 + * @param[in] icdev 设备标识符。
  2981 + * @param[in] mode 语音段号(0x01~0x12)。
  2982 + * @return <0表示失败,==0表示成功。
  2983 + */
  2984 + short USER_API dc_play_voice(HANDLE icdev, unsigned char mode);
  2985 +
  2986 + /**
  2987 + * @brief 播放语音。
  2988 + * @par 说明:
  2989 + * 播放设备内置语音。
  2990 + * @param[in] icdev 设备标识符。
  2991 + * @param[in] mode 语音段号(0x01~0x12)。
  2992 + * @return <0表示失败,==0表示成功。
  2993 + */
  2994 + short USER_API dc_playvoice(HANDLE icdev, unsigned char mode);
  2995 +
  2996 + /**
  2997 + * @brief 装载语音。
  2998 + * @par 说明:
  2999 + * 装载语音数据到设备内。
  3000 + * @param[in] icdev 设备标识符。
  3001 + * @param[in] flag 标记,0表示第一包,1表示第二包,以此类推,0xFFFF表示结束包。
  3002 + * @param[in] slen 传入数据的长度,必须小于或等于1024,当标记为结束包的时候为0。
  3003 + * @param[in] sdata 传入数据。
  3004 + * @return <0表示失败,==0表示成功。
  3005 + */
  3006 + short USER_API dc_load_voice(HANDLE icdev, int flag, int slen, const unsigned char *sdata);
  3007 +
  3008 + /**
  3009 + * @brief 磁条卡参数配置。
  3010 + * @par 说明:
  3011 + * 配置操作磁条卡的参数,参数仅针对自动输出的模式有效。
  3012 + * @param[in] icdev 设备标识符。
  3013 + * @param[in] mode 模式,0x00表示不用输出,0x01表示自动输出。
  3014 + * @param[in] track1 1轨道参数。
  3015 + * @n bit0 - 轨道数据输出设置,0表示不输出,1表示输出。
  3016 + * @n bit1 - 轨道数据头设置,0表示无数据头,1表示有数据头。
  3017 + * @n bit2 - 轨道数据尾设置,0表示无数据尾,1表示有数据尾。
  3018 + * @n bit3 - 轨道数据换行符设置,0表示无换行符,1表示有换行符。
  3019 + * @n bit4 - 轨道数据等号与其后数据设置,0表示不输出,1表示输出。
  3020 + * @n bit5~bit7 - 保留。
  3021 + * @param[in] track2 2轨道参数。
  3022 + * @n bit0 - 轨道数据输出设置,0表示不输出,1表示输出。
  3023 + * @n bit1 - 轨道数据头设置,0表示无数据头,1表示有数据头。
  3024 + * @n bit2 - 轨道数据尾设置,0表示无数据尾,1表示有数据尾。
  3025 + * @n bit3 - 轨道数据换行符设置,0表示无换行符,1表示有换行符。
  3026 + * @n bit4 - 轨道数据等号与其后数据设置,0表示不输出,1表示输出。
  3027 + * @n bit5~bit7 - 保留。
  3028 + * @param[in] track3 3轨道参数。
  3029 + * @n bit0 - 轨道数据输出设置,0表示不输出,1表示输出。
  3030 + * @n bit1 - 轨道数据头设置,0表示无数据头,1表示有数据头。
  3031 + * @n bit2 - 轨道数据尾设置,0表示无数据尾,1表示有数据尾。
  3032 + * @n bit3 - 轨道数据换行符设置,0表示无换行符,1表示有换行符。
  3033 + * @n bit4 - 轨道数据等号与其后数据设置,0表示不输出,1表示输出。
  3034 + * @n bit5~bit7 - 保留。
  3035 + * @return <0表示失败,==0表示成功。
  3036 + */
  3037 + short USER_API dc_setmag(HANDLE icdev, unsigned char mode, unsigned char track1, unsigned char track2, unsigned char track3);
  3038 +
  3039 + /**
  3040 + * @brief 设置打印机参数。
  3041 + * @par 说明:
  3042 + * 设置操作打印机的参数。
  3043 + * @param[in] icdev 设备标识符。
  3044 + * @param[in] FontSize 字体设置,0x00表示字符大小为8*16,0x01表示字符大小为12*24,0x02表示字符大小为16*32。
  3045 + * @param[in] Alignment 对齐设置,0x00表示左对齐,0x01表示居中,0x02表示右对齐。
  3046 + * @param[in] LeftMargin 左边距设置,字符大小为8*16时<48,字符大小为12*24时<32,字符大小为16*32时<24。
  3047 + * @param[in] RightMargin 右边距设置,字符大小为8*16时<48,字符大小为12*24时<32,字符大小为16*32时<24。
  3048 + * @param[in] RowPitch 行间隔设置,单位为点。
  3049 + * @param[in] PrintOutRate 打印速度设置(0x00~0x03),0x00最快,0x03最慢。
  3050 + * @return <0表示失败,==0表示成功。
  3051 + */
  3052 + short USER_API dc_setprint(HANDLE icdev, unsigned char FontSize, unsigned char Alignment, unsigned char LeftMargin, unsigned char RightMargin, unsigned char RowPitch, unsigned char PrintOutRate);
  3053 +
  3054 + /**
  3055 + * @brief 查询打印机参数。
  3056 + * @par 说明:
  3057 + * 查询操作打印机的参数。
  3058 + * @param[in] icdev 设备标识符。
  3059 + * @param[out] FontSize 字体设置,0x00表示字符大小为8*16,0x01表示字符大小为12*24,0x02表示字符大小为16*32。
  3060 + * @param[out] Alignment 对齐设置,0x00表示左对齐,0x01表示居中,0x02表示右对齐。
  3061 + * @param[out] LeftMargin 左边距设置,字符大小为8*16时<48,字符大小为12*24时<32,字符大小为16*32时<24。
  3062 + * @param[out] RightMargin 右边距设置,字符大小为8*16时<48,字符大小为12*24时<32,字符大小为16*32时<24。
  3063 + * @param[out] RowPitch 行间隔设置,单位为点。
  3064 + * @param[out] PrintOutRate 打印速度设置(0x00~0x03),0x00最快,0x03最慢。
  3065 + * @return <0表示失败,==0表示成功。
  3066 + */
  3067 + short USER_API dc_checkprint(HANDLE icdev, unsigned char *FontSize, unsigned char *Alignment, unsigned char *LeftMargin, unsigned char *RightMargin, unsigned char *RowPitch, unsigned char *PrintOutRate);
  3068 +
  3069 + /**
  3070 + * @brief 打印字符。
  3071 + * @par 说明:
  3072 + * 打印文本字符信息。
  3073 + * @param[in] icdev 设备标识符。
  3074 + * @param[in] length 字符数据的长度,必须小于或等于480。
  3075 + * @param[in] character 字符数据。
  3076 + * @return <0表示失败,==0表示成功。
  3077 + */
  3078 + short USER_API dc_printcharacter(HANDLE icdev, unsigned short length, unsigned char *character);
  3079 +
  3080 + /**
  3081 + * @brief 打印一维码。
  3082 + * @par 说明:
  3083 + * 打印一维码信息。
  3084 + * @param[in] icdev 设备标识符。
  3085 + * @param[in] hight 一维码的高度。
  3086 + * @param[in] displayflag 显示类型,0x00表示图形在下文本在上,0x01表示图形在上文本在下,0x02表示只显示图形不显示文本。
  3087 + * @param[in] FontSize 字体设置,0x00表示字符大小为8*16,0x01表示字符大小为12*24,0x02表示字符大小为16*32。
  3088 + * @param[in] length 文本数据的长度,必须小于或等于15。
  3089 + * @param[in] Onedimensional 文本数据。
  3090 + * @return <0表示失败,==0表示成功。
  3091 + */
  3092 + short USER_API dc_printOnedimensional(HANDLE icdev, unsigned char hight, unsigned char displayflag, unsigned char FontSize, unsigned short length, unsigned char *Onedimensional);
  3093 +
  3094 + /**
  3095 + * @brief 打印图片。
  3096 + * @par 说明:
  3097 + * 打印图片信息。
  3098 + * @param[in] icdev 设备标识符。
  3099 + * @param[in] length 长度,单位为字节,必须小于或等于48,不能为0。
  3100 + * @param[in] height 高度,单位为点,必须小于100,不能为0。
  3101 + * @param[in] Alignment 对齐设置,0x00表示左对齐,0x01表示居中,0x02表示右对齐。
  3102 + * @param[in] LeftMargin 左边距设置,必须小于或等于48。
  3103 + * @param[in] RightMargin 右边距设置,必须小于或等于48。
  3104 + * @param[in] size 图片数据的大小。
  3105 + * @param[in] Picture 图片数据。
  3106 + * @return <0表示失败,==0表示成功。
  3107 + */
  3108 + short USER_API dc_printPicture(HANDLE icdev, unsigned char length, unsigned char height, unsigned char Alignment, unsigned char LeftMargin, unsigned char RightMargin, unsigned short size, unsigned char *Picture);
  3109 +
  3110 + /**
  3111 + * @brief 进纸。
  3112 + * @par 说明:
  3113 + * 进纸到设备内用于打印。
  3114 + * @param[in] icdev 设备标识符。
  3115 + * @param[in] RowPitch 进纸行数,单位为点。
  3116 + * @return <0表示失败,==0表示成功。
  3117 + */
  3118 + short USER_API dc_printenter(HANDLE icdev, unsigned char RowPitch);
  3119 +
  3120 + /**
  3121 + * @brief 获取打印机状态。
  3122 + * @par 说明:
  3123 + * 获取打印机的状态。
  3124 + * @param[in] icdev 设备标识符。
  3125 + * @param[out] paperstatus 纸状态,0x00表示不缺纸,0x01表示缺纸。
  3126 + * @param[out] tempturestatus 温度状态,0x00表示温度正常,0x01表示温度过高。
  3127 + * @param[out] zkstatus 字库状态。
  3128 + * @n 0x00 - 三种字库都存在。
  3129 + * @n 0x01 - 三种字库都不存在。
  3130 + * @n 0x02 - 存在8*16字库。
  3131 + * @n 0x03 - 存在12*24字库。
  3132 + * @n 0x04 - 存在16*32字库。
  3133 + * @n 0x05 - 存在8*16字库和12*24字库。
  3134 + * @n 0x06 - 存在8*16字库和16*32字库。
  3135 + * @n 0x07 - 存在12*24字库和16*32字库。
  3136 + * @return <0表示失败,==0表示成功。
  3137 + */
  3138 + short USER_API dc_printstatus(HANDLE icdev, unsigned char *paperstatus, unsigned char *tempturestatus, unsigned char *zkstatus);
  3139 +
  3140 + /**
  3141 + * @brief 设置2.4G模块波特率。
  3142 + * @par 说明:
  3143 + * 设置与2.4G模块之间通讯的波特率。
  3144 + * @param[in] icdev 设备标识符。
  3145 + * @param[in] baund 波特率。
  3146 + * @n 0x00 - 2400。
  3147 + * @n 0x01 - 4800。
  3148 + * @n 0x02 - 9600。
  3149 + * @n 0x03 - 14400。
  3150 + * @n 0x04 - 38400。
  3151 + * @n 0x05 - 57600。
  3152 + * @n 0x06 - 115200。
  3153 + * @n 0x07 - 256000。
  3154 + * @return <0表示失败,==0表示成功。
  3155 + */
  3156 + short USER_API dc_set2dot4Gbaund(HANDLE icdev, unsigned char baund);
  3157 +
  3158 + /**
  3159 + * @brief 查询2.4G模块波特率。
  3160 + * @par 说明:
  3161 + * 查询与2.4G模块之间通讯的波特率。
  3162 + * @param[in] icdev 设备标识符。
  3163 + * @param[out] baund 波特率。
  3164 + * @n 0x00 - 2400。
  3165 + * @n 0x01 - 4800。
  3166 + * @n 0x02 - 9600。
  3167 + * @n 0x03 - 14400。
  3168 + * @n 0x04 - 38400。
  3169 + * @n 0x05 - 57600。
  3170 + * @n 0x06 - 115200。
  3171 + * @n 0x07 - 256000。
  3172 + * @return <0表示失败,==0表示成功。
  3173 + */
  3174 + short USER_API dc_check2dot4Gbaund(HANDLE icdev, unsigned char *baund);
  3175 +
  3176 + /**
  3177 + * @brief 2.4G复位。
  3178 + * @par 说明:
  3179 + * 用2.4G进行复位操作,
  3180 + * @param[in] icdev 设备标识符。
  3181 + * @param[out] rlen 返回复位信息的长度。
  3182 + * @param[out] databuffer 返回的复位信息,请至少分配128个字节。
  3183 + * @return <0表示失败,==0表示成功。
  3184 + */
  3185 + short USER_API dc_2dot4_reset(HANDLE icdev, unsigned char *rlen, unsigned char *databuffer);
  3186 +
  3187 + /**
  3188 + * @brief 2.4G复位。
  3189 + * @par 说明:
  3190 + * ::dc_2dot4_reset 的HEX形式接口,参数 @a databuffer 为HEX格式。
  3191 + */
  3192 + short USER_API dc_2dot4_resethex(HANDLE icdev, unsigned char *rlen, unsigned char *databuffer);
  3193 +
  3194 + /**
  3195 + * @brief 2.4G指令交互。
  3196 + * @par 说明:
  3197 + * 用2.4G进行指令交互操作。
  3198 + * @param[in] icdev 设备标识符。
  3199 + * @param[in] slen 发送数据的长度。
  3200 + * @param[in] senddata 发送数据。
  3201 + * @param[out] rlen 返回数据的长度。
  3202 + * @param[out] recvbuffer 返回的数据。
  3203 + * @param[in] timeout 设备超时值,单位为秒。
  3204 + * @return <0表示失败,==0表示成功。
  3205 + */
  3206 + short USER_API dc_2dot4_command(HANDLE icdev, unsigned int slen, unsigned char *senddata, unsigned int *rlen, unsigned char *recvbuffer, unsigned char timeout);
  3207 +
  3208 + /**
  3209 + * @brief 2.4G指令交互。
  3210 + * @par 说明:
  3211 + * ::dc_2dot4_command 的HEX形式接口,参数 @a senddata @a recvbuffer 为HEX格式。
  3212 + */
  3213 + short USER_API dc_2dot4_command_hex(HANDLE icdev, unsigned int slen, unsigned char *senddata, unsigned int *rlen, unsigned char *recvbuffer, unsigned char timeout);
  3214 +
  3215 + /**
  3216 + * @brief 检测1604卡。
  3217 + * @par 说明:
  3218 + * 检测是否存在1604卡。
  3219 + * @param[in] icdev 设备标识符。
  3220 + * @return <0表示失败或不存在,==0表示存在。
  3221 + */
  3222 + short USER_API dc_check_1604(HANDLE icdev);
  3223 +
  3224 + /**
  3225 + * @brief 1604卡下电。
  3226 + * @par 说明:
  3227 + * 对1604卡进行下电操作。
  3228 + * @param[in] icdev 设备标识符。
  3229 + * @return <0表示失败,==0表示成功。
  3230 + */
  3231 + short USER_API dc_down_1604(HANDLE icdev);
  3232 +
  3233 + /**
  3234 + * @brief 读1604卡。
  3235 + * @par 说明:
  3236 + * 读取1604卡的数据。
  3237 + * @param[in] icdev 设备标识符。
  3238 + * @param[in] offset 偏移。
  3239 + * @param[in] length 读取长度。
  3240 + * @param[out] readdata 返回的数据。
  3241 + * @return <0表示失败,==0表示成功。
  3242 + */
  3243 + short USER_API dc_read_1604(HANDLE icdev, unsigned int offset, unsigned int length, unsigned char *readdata);
  3244 +
  3245 + /**
  3246 + * @brief 读1604卡。
  3247 + * @par 说明:
  3248 + * ::dc_read_1604 的HEX形式接口,参数 @a readdata 为HEX格式。
  3249 + */
  3250 + short USER_API dc_read_1604_hex(HANDLE icdev, unsigned int offset, unsigned int length, unsigned char *readdata);
  3251 +
  3252 + /**
  3253 + * @brief 写1604卡。
  3254 + * @par 说明:
  3255 + * 写入数据到1604卡中。
  3256 + * @param[in] icdev 设备标识符。
  3257 + * @param[in] offset 偏移。
  3258 + * @param[in] length 写入长度。
  3259 + * @param[in] writedata 传入数据。
  3260 + * @return <0表示失败,==0表示成功。
  3261 + */
  3262 + short USER_API dc_write_1604(HANDLE icdev, unsigned int offset, unsigned int length, unsigned char *writedata);
  3263 +
  3264 + /**
  3265 + * @brief 写1604卡。
  3266 + * @par 说明:
  3267 + * ::dc_write_1604 的HEX形式接口,参数 @a writedata 为HEX格式。
  3268 + */
  3269 + short USER_API dc_write_1604_hex(HANDLE icdev, unsigned int offset, unsigned int length, unsigned char *writedata);
  3270 +
  3271 + /**
  3272 + * @brief 验证1604卡密码。
  3273 + * @par 说明:
  3274 + * 使用传入的密码来验证1604卡密码。
  3275 + * @param[in] icdev 设备标识符。
  3276 + * @param[in] area 密码区。
  3277 + * @n 0 - 表示总密码。
  3278 + * @n 1 - 表示一区密码。
  3279 + * @n 2 - 表示二区密码。
  3280 + * @n 3 - 表示三区密码。
  3281 + * @n 4 - 表示四区密码。
  3282 + * @n 11 - 表示一区擦除密码。
  3283 + * @n 12 - 表示二区擦除密码。
  3284 + * @n 13 - 表示三区擦除密码。
  3285 + * @n 14 - 表示四区擦除密码。
  3286 + * @param[in] password 密码,固定为2个字节。
  3287 + * @return <0表示失败,==0表示成功。
  3288 + */
  3289 + short USER_API dc_checkpass_1604(HANDLE icdev, short area, unsigned char *password);
  3290 +
  3291 + /**
  3292 + * @brief 验证1604卡密码。
  3293 + * @par 说明:
  3294 + * ::dc_checkpass_1604 的HEX形式接口,参数 @a password 为HEX格式。
  3295 + */
  3296 + short USER_API dc_checkpass_1604_hex(HANDLE icdev, short area, unsigned char *password);
  3297 +
  3298 + /**
  3299 + * @brief 修改1604卡密码。
  3300 + * @par 说明:
  3301 + * 修改1604卡的密码。
  3302 + * @param[in] icdev 设备标识符。
  3303 + * @param[in] area 密码区。
  3304 + * @n 0 - 表示总密码。
  3305 + * @n 1 - 表示一区密码。
  3306 + * @n 2 - 表示二区密码。
  3307 + * @n 3 - 表示三区密码。
  3308 + * @n 4 - 表示四区密码。
  3309 + * @n 11 - 表示一区擦除密码。
  3310 + * @n 12 - 表示二区擦除密码。
  3311 + * @n 13 - 表示三区擦除密码。
  3312 + * @n 14 - 表示四区擦除密码。
  3313 + * @param[in] password 密码,固定为2个字节。
  3314 + * @return <0表示失败,==0表示成功。
  3315 + */
  3316 + short USER_API dc_changepass_1604(HANDLE icdev, short area, unsigned char *password);
  3317 +
  3318 + /**
  3319 + * @brief 修改1604卡密码。
  3320 + * @par 说明:
  3321 + * ::dc_changepass_1604 的HEX形式接口,参数 @a password 为HEX格式。
  3322 + */
  3323 + short USER_API dc_changepass_1604_hex(HANDLE icdev, short area, unsigned char *password);
  3324 +
  3325 + /**
  3326 + * @brief 读1604卡密码计数。
  3327 + * @par 说明:
  3328 + * 读取1604卡的密码计数,此计数值表示可以尝试验证密码的次数。
  3329 + * @param[in] icdev 设备标识符。
  3330 + * @param[in] area 密码区。
  3331 + * @n 0 - 表示总密码。
  3332 + * @n 1 - 表示一区密码。
  3333 + * @n 2 - 表示二区密码。
  3334 + * @n 3 - 表示三区密码。
  3335 + * @n 4 - 表示四区密码。
  3336 + * @n 11 - 表示一区擦除密码。
  3337 + * @n 12 - 表示二区擦除密码。
  3338 + * @n 13 - 表示三区擦除密码。
  3339 + * @n 14 - 表示四区擦除密码。
  3340 + * @return <0表示失败,否则为密码计数值。
  3341 + */
  3342 + short USER_API dc_readcount_1604(HANDLE icdev, short area);
  3343 +
  3344 + /**
  3345 + * @brief 1604卡熔丝。
  3346 + * @par 说明:
  3347 + * 对1604卡进行熔丝操作。
  3348 + * @param[in] icdev 设备标识符。
  3349 + * @return <0表示失败,==0表示成功。
  3350 + */
  3351 + short USER_API dc_fuse_1604(HANDLE icdev);
  3352 +
  3353 + /**
  3354 + * @brief 4428卡下电。
  3355 + * @par 说明:
  3356 + * 对4428卡进行下电操作。
  3357 + * @param[in] icdev 设备标识符。
  3358 + * @return <0表示失败,==0表示成功。
  3359 + */
  3360 + short USER_API dc_down_4428(HANDLE icdev);
  3361 +
  3362 + /**
  3363 + * @brief 4442卡下电。
  3364 + * @par 说明:
  3365 + * 对4442卡进行下电操作。
  3366 + * @param[in] icdev 设备标识符。
  3367 + * @return <0表示失败,==0表示成功。
  3368 + */
  3369 + short USER_API dc_down_4442(HANDLE icdev);
  3370 +
  3371 + /**
  3372 + * @brief 保留。
  3373 + */
  3374 + short USER_API dc_flash_card(HANDLE icdev);
  3375 +
  3376 + /**
  3377 + * @brief 保留。
  3378 + */
  3379 + short USER_API dc_read_walletbalance(HANDLE icdev, unsigned char *walletvalue);
  3380 +
  3381 + /**
  3382 + * @brief 保留。
  3383 + */
  3384 + short USER_API dc_consume_wallet(HANDLE icdev, unsigned char *walletvalue, unsigned char *secret);
  3385 +
  3386 + /**
  3387 + * @brief 保留。
  3388 + */
  3389 + short USER_API dc_transfer_wallet(HANDLE icdev, unsigned char *walletvalue);
  3390 +
  3391 + /**
  3392 + * @brief 保留。
  3393 + */
  3394 + short USER_API dc_authentication_key(HANDLE icdev, unsigned char *data, unsigned char *desdata);
  3395 +
  3396 + /**
  3397 + * @brief 保留。
  3398 + */
  3399 + short USER_API dc_set_terminalnumber(HANDLE icdev, unsigned char length, unsigned char *serieldata);
  3400 +
  3401 + /**
  3402 + * @brief 保留。
  3403 + */
  3404 + short USER_API dc_get_terminalnumber(HANDLE icdev, unsigned char length, unsigned char *serieldata);
  3405 +
  3406 + /**
  3407 + * @brief 保留。
  3408 + */
  3409 + short USER_API dc_set_trademerchantcode(HANDLE icdev, unsigned char length, unsigned char *merchantcode);
  3410 +
  3411 + /**
  3412 + * @brief 保留。
  3413 + */
  3414 + short USER_API dc_get_trademerchantcode(HANDLE icdev, unsigned char length, unsigned char *merchantcode);
  3415 +
  3416 + /**
  3417 + * @brief 保留。
  3418 + */
  3419 + short USER_API dc_set_transactiontype(HANDLE icdev, unsigned char typecode);
  3420 +
  3421 + /**
  3422 + * @brief 保留。
  3423 + */
  3424 + short USER_API dc_get_transactiontype(HANDLE icdev, unsigned char *typecode);
  3425 +
  3426 + /**
  3427 + * @brief 保留。
  3428 + */
  3429 + short USER_API dc_set_tradesecretkey(HANDLE icdev, unsigned char *secretkey);
  3430 +
  3431 + /**
  3432 + * @brief 保留。
  3433 + */
  3434 + short USER_API dc_get_tradesecretkey(HANDLE icdev, unsigned char *secretkey);
  3435 +
  3436 + /**
  3437 + * @brief 保留。
  3438 + */
  3439 + short USER_API dc_set_hardwareserialnumber(HANDLE icdev, unsigned char length, unsigned char *hardwareserial);
  3440 +
  3441 + /**
  3442 + * @brief 保留。
  3443 + */
  3444 + short USER_API dc_get_hardwareserialnumber(HANDLE icdev, unsigned char length, unsigned char *hardwareserial);
  3445 +
  3446 + /**
  3447 + * @brief 保留。
  3448 + */
  3449 + short USER_API dc_reset_factory(HANDLE icdev);
  3450 +
  3451 + /**
  3452 + * @brief 保留。
  3453 + */
  3454 + short USER_API dc_get_signmessageparameters(HANDLE icdev, unsigned char length, unsigned char *parameters);
  3455 +
  3456 + /**
  3457 + * @brief 保留。
  3458 + */
  3459 + short USER_API dc_get_record(HANDLE icdev, unsigned char tablenumber, unsigned char recordnumber, unsigned char *recordquantity, unsigned char *recorddata);
  3460 +
  3461 + /**
  3462 + * @brief 启动读磁条卡。
  3463 + * @par 说明:
  3464 + * 使设备进入监测刷磁条的状态,接口本身会直接返回,而不会等待刷完磁条卡。
  3465 + * @param[in] icdev 设备标识符。
  3466 + * @return <0表示失败,==0表示成功。
  3467 + */
  3468 + short USER_API dc_startreadmag(HANDLE icdev);
  3469 +
  3470 + /**
  3471 + * @brief 停止读磁条卡。
  3472 + * @par 说明:
  3473 + * 在设备进入监测刷磁条的状态后,只有刷完磁条卡或调用此接口才能使得设备退出这种状态。
  3474 + * @param[in] icdev 设备标识符。
  3475 + * @return <0表示失败,==0表示成功。
  3476 + */
  3477 + short USER_API dc_stopreadmag(HANDLE icdev);
  3478 +
  3479 + /**
  3480 + * @brief 获取磁条卡数据。
  3481 + * @par 说明:
  3482 + * 获取设备已经读取到的磁条卡数据。
  3483 + * @param[in] icdev 设备标识符。
  3484 + * @param[out] pTrack1Data 返回的1轨道数据,数据格式为'\0'结尾的字符串。
  3485 + * @param[out] pTrack1Len 返回1轨道数据的长度,不含'\0'。
  3486 + * @param[out] pTrack2Data 返回的2轨道数据,数据格式为'\0'结尾的字符串。
  3487 + * @param[out] pTrack2Len 返回2轨道数据的长度,不含'\0'。
  3488 + * @param[out] pTrack3Data 返回的3轨道数据,数据格式为'\0'结尾的字符串。
  3489 + * @param[out] pTrack3Len 返回3轨道数据的长度,不含'\0'。
  3490 + * @return <0表示失败,==0表示成功,==1表示等待刷卡,==2表示处于停止刷卡状态。
  3491 + */
  3492 + short USER_API dc_readmag(HANDLE icdev, unsigned char *pTrack1Data, unsigned int *pTrack1Len, unsigned char *pTrack2Data, unsigned int *pTrack2Len, unsigned char *pTrack3Data, unsigned int *pTrack3Len);
  3493 +
  3494 + /**
  3495 + * @brief 自动获取磁条卡数据。
  3496 + * @par 说明:
  3497 + * 内部包含了 ::dc_startreadmag ::dc_readmag ::dc_stopreadmag 的功能。
  3498 + * @param[in] icdev 设备标识符。
  3499 + * @param[in] ctime 接口超时值,单位为秒。
  3500 + * @param[out] pTrack1Data 返回的1轨道数据,数据格式为'\0'结尾的字符串。
  3501 + * @param[out] pTrack1Len 返回1轨道数据的长度,不含'\0'。
  3502 + * @param[out] pTrack2Data 返回的2轨道数据,数据格式为'\0'结尾的字符串。
  3503 + * @param[out] pTrack2Len 返回2轨道数据的长度,不含'\0'。
  3504 + * @param[out] pTrack3Data 返回的3轨道数据,数据格式为'\0'结尾的字符串。
  3505 + * @param[out] pTrack3Len 返回3轨道数据的长度,不含'\0'。
  3506 + * @return <0表示失败,==0表示成功,==1表示等待刷卡,==2表示处于停止刷卡状态。
  3507 + */
  3508 + short USER_API dc_readmagcardallA(HANDLE icdev, unsigned char ctime, unsigned char *pTrack1Data, unsigned int *pTrack1Len, unsigned char *pTrack2Data, unsigned int *pTrack2Len, unsigned char *pTrack3Data, unsigned int *pTrack3Len);
  3509 +
  3510 + /**
  3511 + * @brief 设置密码键盘密钥。
  3512 + * @par 说明:
  3513 + * 对密码键盘内的密钥进行设置操作。
  3514 + * @param[in] icdev 设备标识符。
  3515 + * @param[in] flag 标记。
  3516 + * @n 0x00 - 表示装载主密钥,明文装载。
  3517 + * @n 0x01 - 表示装载PIN密钥,密文装载(用主密钥加密)。
  3518 + * @n 0x02 - 表示装载MAC密钥,密文装载(用主密钥加密)。
  3519 + * @n 0x03 - 表示装载TDK密钥,密文装载(用主密钥加密)。
  3520 + * @n 0xF0 - 表示清空主密钥、PIN密钥、MAC密钥、TDK密钥。
  3521 + * @n 0xF1 - 表示清空PIN密钥。
  3522 + * @n 0xF2 - 表示清空MAC密钥。
  3523 + * @n 0xF3 - 表示清空TDK密钥。
  3524 + * @param[in] keylen 密钥数据的长度。
  3525 + * @param[in] keydata 密钥数据。
  3526 + * @param[in] mode 模式,0x00表示单DES密钥,0x01表示三DES密钥,0x02表示SM4密钥,0x03表示24字节三DES密钥。
  3527 + * @return <0表示失败,==0表示成功。
  3528 + */
  3529 + short USER_API dc_InstallKbKey(HANDLE icdev, unsigned char flag, unsigned char keylen, unsigned char *keydata, unsigned char mode);
  3530 +
  3531 + /**
  3532 + * @brief 设置当前密钥组。
  3533 + * @par 说明:
  3534 + * 设置密码键盘当前使用的密钥组。
  3535 + * @param[in] icdev 设备标识符。
  3536 + * @param[in] keyID 密钥组号,从0x00开始编号。
  3537 + * @return <0表示失败,==0表示成功。
  3538 + */
  3539 + short USER_API dc_SetKbKeyID(HANDLE icdev, unsigned char keyID);
  3540 +
  3541 + /**
  3542 + * @brief 获取加密按键数据。
  3543 + * @par 说明:
  3544 + * 从密码键盘获取ANSI X9.8 PIN BLOCK加密的按键数据。
  3545 + * @param[in] icdev 设备标识符。
  3546 + * @param[in] ctime 设备超时值,单位为秒。
  3547 + * @param[in] panlen 卡号的长度。
  3548 + * @param[in] pandata 卡号。
  3549 + * @param[out] rlen 返回加密数据的长度。
  3550 + * @param[out] cpass 返回的加密数据。
  3551 + * @return <0表示失败,==0表示成功,==0xA1表示取消输入,==0xA2表示输入超时。
  3552 + */
  3553 + short USER_API dc_GetEnPass(HANDLE icdev, unsigned char ctime, unsigned char panlen, unsigned char *pandata, unsigned char *rlen, unsigned char *cpass);
  3554 +
  3555 + /**
  3556 + * @brief 保留。
  3557 + */
  3558 + short USER_API dc_get55data(HANDLE icdev, unsigned int slen, unsigned char *sdata, unsigned char *PacketType, unsigned int *rlen, unsigned char *rdata);
  3559 +
  3560 + /**
  3561 + * @brief 保留。
  3562 + */
  3563 + short USER_API dc_CardIssuingScript(HANDLE icdev, unsigned int slen, unsigned char *sdata, unsigned char *TransactionIsInterrupted, unsigned char *TradingResult);
  3564 +
  3565 + /**
  3566 + * @brief 保留。
  3567 + */
  3568 + short USER_API dc_SetEMVPara(HANDLE icdev, unsigned int slen, unsigned char *sdata);
  3569 +
  3570 + /**
  3571 + * @brief 保留。
  3572 + */
  3573 + short USER_API dc_CalculateMACCheck(HANDLE icdev, unsigned char keyindex, unsigned char macmode, unsigned int datalen, unsigned char *srcdata, unsigned char *macdata);
  3574 +
  3575 + /**
  3576 + * @brief 保留。
  3577 + */
  3578 + short USER_API dc_CalculateDes(HANDLE icdev, unsigned char keyindex, unsigned char enmode, unsigned short datalen, unsigned char *srcdata, unsigned char *desdata);
  3579 +
  3580 + /**
  3581 + * @brief 保留。
  3582 + */
  3583 + short USER_API dc_CalculateSm4(HANDLE icdev, unsigned char keyindex, unsigned char enmode, unsigned short datalen, unsigned char *srcdata, unsigned char *sm4data);
  3584 +
  3585 + /**
  3586 + * @brief 用工作密钥加解密。
  3587 + * @par 说明:
  3588 + * 使用密码键盘的工作密钥进行数据加解密操作,仅支持单DES、三DES和24字节三DES算法,算法由设置密钥时确定,请参考 ::dc_InstallKbKey 。
  3589 + * @param[in] icdev 设备标识符。
  3590 + * @param[in] keytype 密钥类型,0x01表示PIN密钥,0x02表示MAC密钥,0x03表示TDK密钥。
  3591 + * @param[in] enmode 运算模式,0x00表示加密,0x01表示解密。
  3592 + * @param[in] sourcedata 传入数据,固定为8个字节。
  3593 + * @param[out] retdata 返回的数据,固定为8个字节。
  3594 + * @return <0表示失败,==0表示成功。
  3595 + */
  3596 + short USER_API dc_CreatDesData(HANDLE icdev, unsigned char keytype, unsigned char enmode, unsigned char *sourcedata, unsigned char *retdata);
  3597 +
  3598 + /**
  3599 + * @brief 用工作密钥加解密。
  3600 + * @par 说明:
  3601 + * 使用密码键盘的工作密钥进行数据加解密操作,仅支持SM4算法,算法由设置密钥时确定,请参考 ::dc_InstallKbKey 。
  3602 + * @param[in] icdev 设备标识符。
  3603 + * @param[in] keytype 密钥类型,0x01表示PIN密钥,0x02表示MAC密钥,0x03表示TDK密钥。
  3604 + * @param[in] enmode 运算模式,0x00表示加密,0x01表示解密。
  3605 + * @param[in] sourcedata 传入数据,固定为16个字节。
  3606 + * @param[out] retdata 返回的数据,固定为16个字节。
  3607 + * @return <0表示失败,==0表示成功。
  3608 + */
  3609 + short USER_API dc_CreatSm4Data(HANDLE icdev, unsigned char keytype, unsigned char enmode, unsigned char *sourcedata, unsigned char *retdata);
  3610 +
  3611 + /**
  3612 + * @brief 用工作密钥加解密。
  3613 + * @par 说明:
  3614 + * 使用密码键盘的工作密钥进行数据加解密操作,仅支持单DES ECB和三DES ECB算法,内部会调用 ::dc_CreatDesData 。
  3615 + * @param[in] icdev 设备标识符。
  3616 + * @param[in] keytype 密钥类型,0x01表示PIN密钥,0x02表示MAC密钥,0x03表示TDK密钥。
  3617 + * @param[in] enmode 运算模式,0x00表示加密,0x01表示解密。
  3618 + * @param[in] slen 传入数据的长度。
  3619 + * @param[in] sourcedata 传入数据。
  3620 + * @param[out] rlen 返回数据的长度。
  3621 + * @param[out] retdata 返回的数据。
  3622 + * @return <0表示失败,==0表示成功。
  3623 + */
  3624 + short USER_API dc_CreatDesDataECB(HANDLE icdev, unsigned char keytype, unsigned char enmode, int slen, unsigned char *sourcedata, int *rlen, unsigned char *retdata);
  3625 +
  3626 + /**
  3627 + * @brief 用工作密钥加解密。
  3628 + * @par 说明:
  3629 + * 使用密码键盘的工作密钥进行数据加解密操作,仅支持SM4 ECB算法,内部会调用 ::dc_CreatSm4Data 。
  3630 + * @param[in] icdev 设备标识符。
  3631 + * @param[in] keytype 密钥类型,0x01表示PIN密钥,0x02表示MAC密钥,0x03表示TDK密钥。
  3632 + * @param[in] enmode 运算模式,0x00表示加密,0x01表示解密。
  3633 + * @param[in] slen 传入数据的长度。
  3634 + * @param[in] sourcedata 传入数据。
  3635 + * @param[out] rlen 返回数据的长度。
  3636 + * @param[out] retdata 返回的数据。
  3637 + * @return <0表示失败,==0表示成功。
  3638 + */
  3639 + short USER_API dc_CreatSm4DataECB(HANDLE icdev, unsigned char keytype, unsigned char enmode, int slen, unsigned char *sourcedata, int *rlen, unsigned char *retdata);
  3640 +
  3641 + /**
  3642 + * @brief 用工作密钥算MAC。
  3643 + * @par 说明:
  3644 + * 使用密码键盘的工作密钥进行数据算MAC操作,内部会调用 ::dc_CreatDesData ::dc_CreatSm4Data 。
  3645 + * @param[in] icdev 设备标识符。
  3646 + * @param[in] keytype 密钥类型,0x01表示PIN密钥,0x02表示MAC密钥,0x03表示TDK密钥。
  3647 + * @param[in] enmode 运算模式,0x00或0x01表示用DES POS ECB算MAC,0x02表示用SM4算MAC,0x03表示用DES X9.9算MAC,0x04表示用三DES X9.19算MAC,0x05表示用三DES POS ECB算MAC,0x06表示用24字节三DES X9.19算MAC,0x07表示用24字节三DES POS ECB算MAC。
  3648 + * @param[in] slen 传入数据的长度。
  3649 + * @param[in] sourcedata 传入数据。
  3650 + * @param[out] rlen 返回数据的长度。
  3651 + * @param[out] retdata 返回的数据。
  3652 + * @return <0表示失败,==0表示成功。
  3653 + */
  3654 + short USER_API dc_CreatMacDataECB(HANDLE icdev, unsigned char keytype, unsigned char enmode, int slen, unsigned char *sourcedata, int *rlen, unsigned char *retdata);
  3655 +
  3656 + /**
  3657 + * @brief 写SD存储。
  3658 + * @par 说明:
  3659 + * 写入数据到SD存储中,可以用作数据保存等。
  3660 + * @param[in] icdev 设备标识符。
  3661 + * @param[in] offset 偏移地址。
  3662 + * @param[in] length 写入长度。
  3663 + * @param[in] writebuffer 传入数据。
  3664 + * @return <0表示失败,==0表示成功。
  3665 + */
  3666 + short USER_API dc_writeSD(HANDLE icdev, int offset, int length, unsigned char *writebuffer);
  3667 +
  3668 + /**
  3669 + * @brief 读SD存储。
  3670 + * @par 说明:
  3671 + * 读取SD存储中的数据,可以用作数据保存等。
  3672 + * @param[in] icdev 设备标识符。
  3673 + * @param[in] offset 偏移地址。
  3674 + * @param[in] length 读取长度。
  3675 + * @param[out] readbuffer 返回的数据。
  3676 + * @return <0表示失败,==0表示成功。
  3677 + */
  3678 + short USER_API dc_readSD(HANDLE icdev, int offset, int length, unsigned char *readbuffer);
  3679 +
  3680 + /**
  3681 + * @brief 设置USB模式。
  3682 + * @par 说明:
  3683 + * 设置USB通讯模式,必须重新对设备进行上电才能生效。
  3684 + * @param[in] icdev 设备标识符。
  3685 + * @param[in] ucmode 模式。
  3686 + * @n 0x00 - 表示中断发送和中断接收,此时VID=257B,PID=3010。
  3687 + * @n 0x01 - 表示控制发送和控制接收,此时VID=257B,PID=3011。
  3688 + * @n 0x02 - 表示控制发送和中断接收,此时VID=0471,PID=7002。
  3689 + * @n 0x03 - 表示控制发送和中断接收,此时VID=0471,PID=7003。
  3690 + * @n 0x04 - 表示控制发送和中断接收,此时VID=0471,PID=7003,支持磁条卡自动上传功能。
  3691 + * @return <0表示失败,==0表示成功。
  3692 + */
  3693 + short USER_API dc_SetUsbMode(HANDLE icdev, unsigned char ucmode);
  3694 +
  3695 + /**
  3696 + * @brief 外接密码键盘通讯。
  3697 + * @par 说明:
  3698 + * 与外置密码键盘进行通讯交互。
  3699 + * @param[in] icdev 设备标识符。
  3700 + * @param[in] ctime 设备超时值,单位为秒。
  3701 + * @param[in] senlen 发送数据的长度。
  3702 + * @param[in] source 发送数据。
  3703 + * @param[out] reclen 返回数据的长度。
  3704 + * @param[out] rdata 返回的数据。
  3705 + * @return <0表示失败,==0表示成功。
  3706 + */
  3707 + short USER_API SD_InstallKey(HANDLE icdev, unsigned char ctime, unsigned char senlen, unsigned char *source, unsigned char *reclen, unsigned char *rdata);
  3708 +
  3709 + /**
  3710 + * @brief 获取外接密码键盘的版本。
  3711 + * @par 说明:
  3712 + * 获取外接密码键盘的版本。
  3713 + * @param[in] icdev 设备标识符。
  3714 + * @param[out] version 返回的版本字符串,请至少分配128个字节。
  3715 + * @return <0表示失败,==0表示成功。
  3716 + */
  3717 + short USER_API SD_IFD_GetVersion(HANDLE icdev, char *version);
  3718 +
  3719 + /**
  3720 + * @brief 外接密码键盘播放语音。
  3721 + * @par 说明:
  3722 + * 播放外接密码键盘内置语音。
  3723 + * @param[in] icdev 设备标识符。
  3724 + * @param[in] _playmode 语音段号(0x01~0x08)。
  3725 + * @n 0x01 - "请输入密码"。
  3726 + * @n 0x02 - "请输入原密码"。
  3727 + * @n 0x03 - "请再输入一次"。
  3728 + * @n 0x04 - "请输入新密码"。
  3729 + * @n 0x05 - "请确认新密码"。
  3730 + * @n 0x06 - "密码修改成功"。
  3731 + * @n 0x07 - "请插卡"。
  3732 + * @n 0x08 - "请刷卡"。
  3733 + * @return <0表示失败,==0表示成功。
  3734 + */
  3735 + short USER_API SD_IFD_PlayVoice(HANDLE icdev, unsigned char _playmode);
  3736 +
  3737 + /**
  3738 + * @brief 外接密码键盘初始化。
  3739 + * @par 说明:
  3740 + * 对外接密码键盘进行初始化操作,使其复位为出厂状态,出厂状态下所有的主密钥内存空间都为字节0x88。
  3741 + * @param[in] icdev 设备标识符。
  3742 + * @return <0表示失败,==0表示成功。
  3743 + */
  3744 + short USER_API SD_IFD_Init(HANDLE icdev);
  3745 +
  3746 + /**
  3747 + * @brief 设置外接密码键盘主密钥。
  3748 + * @par 说明:
  3749 + * 对外接密码键盘内的主密钥进行设置操作。
  3750 + * @param[in] icdev 设备标识符。
  3751 + * @param[in] keyset 密钥组号,从0x00开始编号。
  3752 + * @param[in] oldkey 旧主密钥数据,明文,固定为16个字节。
  3753 + * @param[in] newkey 新主密钥数据,明文,固定为16个字节。
  3754 + * @return <0表示失败,==0表示成功。
  3755 + */
  3756 + short USER_API SD_IFD_SetMainKey(HANDLE icdev, unsigned char keyset, unsigned char *oldkey, unsigned char *newkey);
  3757 +
  3758 + /**
  3759 + * @brief 设置外接密码键盘工作密钥。
  3760 + * @par 说明:
  3761 + * 对外接密码键盘内的工作密钥进行设置操作。
  3762 + * @param[in] icdev 设备标识符。
  3763 + * @param[in] keysetmain 主密钥组号,从0x00开始编号。
  3764 + * @param[in] keysetwork 工作密钥组号,从0x00开始编号。
  3765 + * @param[in] enkeywork 工作密钥数据,密文(用主密钥加密),固定为16个字节。
  3766 + * @return <0表示失败,==0表示成功。
  3767 + */
  3768 + short USER_API SD_IFD_SetWorkKey(HANDLE icdev, unsigned char keysetmain, unsigned char keysetwork, unsigned char *enkeywork);
  3769 +
  3770 + /**
  3771 + * @brief 激活外接密码键盘工作密钥。
  3772 + * @par 说明:
  3773 + * 激活外接密码键盘当前使用的工作密钥。
  3774 + * @param[in] icdev 设备标识符。
  3775 + * @param[in] keysetmain 主密钥组号,从0x00开始编号。
  3776 + * @param[in] keysetwork 工作密钥组号,从0x00开始编号。
  3777 + * @return <0表示失败,==0表示成功。
  3778 + */
  3779 + short USER_API SD_IFD_ActWorkKey(HANDLE icdev, unsigned char keysetmain, unsigned char keysetwork);
  3780 +
  3781 + /**
  3782 + * @brief 设置外接密码键盘最大输入长度。
  3783 + * @par 说明:
  3784 + * 设置外接密码键盘允许用户输入密码的最大长度。
  3785 + * @param[in] icdev 设备标识符。
  3786 + * @param[in] keylength 密码最大长度(1~16)。
  3787 + * @return <0表示失败,==0表示成功。
  3788 + */
  3789 + short USER_API SD_IFD_SetKeyLength(HANDLE icdev, unsigned char keylength);
  3790 +
  3791 + /**
  3792 + * @brief 获取外接密码键盘明文数据。
  3793 + * @par 说明:
  3794 + * 从外接密码键盘获取明文按键数据。
  3795 + * @param[in] icdev 设备标识符。
  3796 + * @param[out] szPasswd 返回的按键数据,数据格式为'\0'结尾的字符串。
  3797 + * @return <0表示失败,==0表示成功,==0xA1表示取消输入,==0xA2表示输入超时。
  3798 + */
  3799 + short USER_API SD_IFD_GetPIN(HANDLE icdev, char *szPasswd);
  3800 +
  3801 + /**
  3802 + * @brief 获取外接密码键盘密文数据。
  3803 + * @par 说明:
  3804 + * 从外接密码键盘获取密文按键数据。
  3805 + * @param[in] icdev 设备标识符。
  3806 + * @param[out] szPasswd 返回的按键数据,数据为密文的HEX格式字符串。
  3807 + * @return <0表示失败,==0表示成功,==0xA1表示取消输入,==0xA2表示输入超时。
  3808 + */
  3809 + short USER_API SD_IFD_GetEnPIN(HANDLE icdev, char *szPasswd);
  3810 +
  3811 + /**
  3812 + * @brief 获取外接密码键盘明文数据。
  3813 + * @par 说明:
  3814 + * 从外接密码键盘获取明文按键数据。
  3815 + * @param[in] icdev 设备标识符。
  3816 + * @param[out] szPasswd 返回的按键数据,数据格式为'\0'结尾的字符串。
  3817 + * @param[in] yyflag 标记。
  3818 + * @n 0x80 - 绿灯亮,液晶显示"欢迎使用",无语音提示。
  3819 + * @n 0x81 - 绿灯亮,液晶显示"请再输入一次",有语音提示。
  3820 + * @n 0x82 - 绿灯亮,液晶显示"请输入密码",有语音提示。
  3821 + * @n 0x83 - 绿灯亮,液晶不操作,无语音提示。
  3822 + * @n 0x84 - 绿灯亮,液晶显示"请输入原密码",有语音提示。
  3823 + * @n 0x85 - 绿灯亮,液晶显示"请输入新密码",有语音提示。
  3824 + * @n 0x86 - 绿灯亮,液晶显示"请输入新密码",无语音提示。
  3825 + * @param[in] timeout 设备超时值,单位为秒。
  3826 + * @return <0表示失败,==0表示成功,==0xA1表示取消输入,==0xA2表示输入超时。
  3827 + */
  3828 + short USER_API SD_IFD_GetPINPro(HANDLE icdev, char *szPasswd, unsigned char yyflag, unsigned char timeout);
  3829 +
  3830 + /**
  3831 + * @brief 获取外接密码键盘密文数据。
  3832 + * @par 说明:
  3833 + * 从外接密码键盘获取密文按键数据。
  3834 + * @param[in] icdev 设备标识符。
  3835 + * @param[out] szPasswd 返回的按键数据,数据格式为'\0'结尾的字符串。
  3836 + * @param[in] yyflag 标记。
  3837 + * @n 0x30 - 密码键盘提示"请输入密码",语音提示,输入密码显示'*'。
  3838 + * @n 0x31 - 密码键盘提示"请再输入一次",语音提示,输入密码显示'*'。
  3839 + * @n 0x32 - 密码键盘提示"请输入密码",无语音提示,输入密码显示'*'。
  3840 + * @n 0x33 - 密码键盘提示"请再输入一次",无语音提示,输入密码显示'*'。
  3841 + * @n 0x34 - 密码键盘提示"请输入密码",语音提示,输入密码明文显示。
  3842 + * @n 0x35 - 密码键盘提示"请再输入一次",语音提示,输入密码明文显示。
  3843 + * @n 0x36 - 密码键盘提示"请输入密码",无语音提示,输入密码明文显示。
  3844 + * @n 0x37 - 密码键盘提示"请再输入一次",无语音提示,输入密码明文显示。
  3845 + * @param[in] modeflag 模式。
  3846 + * @n 0x30 - 按"确认"键或到达指定的PIN长度。
  3847 + * @n 0x31 - 按"确认"键。
  3848 + * @n 0x32 - 到达指定的PIN长度。
  3849 + * @n 0x33 - 到达指定的PIN长度并按"确认"键。
  3850 + * @param[in] timeout 设备超时值,单位为秒。
  3851 + * @return <0表示失败,==0表示成功,==0xA1表示取消输入,==0xA2表示输入超时。
  3852 + */
  3853 + short USER_API SD_IFD_GetEnPINPro(HANDLE icdev, char *szPasswd, unsigned char yyflag, unsigned char modeflag, unsigned char timeout);
  3854 +
  3855 + /**
  3856 + * @brief 获取外接密码键盘密文数据。
  3857 + * @par 说明:
  3858 + * 从外接密码键盘获取ANSI X9.8 PIN BLOCK加密的按键数据。
  3859 + * @param[in] icdev 设备标识符。
  3860 + * @param[out] szPasswd 返回的按键数据,数据格式为'\0'结尾的字符串。
  3861 + * @param[in] yyflag 标记。
  3862 + * @n 0x30 - 密码键盘提示"请输入密码",语音提示,输入密码显示'*'。
  3863 + * @n 0x31 - 密码键盘提示"请再输入一次",语音提示,输入密码显示'*'。
  3864 + * @n 0x32 - 密码键盘提示"请输入密码",无语音提示,输入密码显示'*'。
  3865 + * @n 0x33 - 密码键盘提示"请再输入一次",无语音提示,输入密码显示'*'。
  3866 + * @n 0x34 - 密码键盘提示"请输入密码",语音提示,输入密码明文显示。
  3867 + * @n 0x35 - 密码键盘提示"请再输入一次",语音提示,输入密码明文显示。
  3868 + * @n 0x36 - 密码键盘提示"请输入密码",无语音提示,输入密码明文显示。
  3869 + * @n 0x37 - 密码键盘提示"请再输入一次",无语音提示,输入密码明文显示。
  3870 + * @param[in] modeflag 模式。
  3871 + * @n 0x30 - 按"确认"键或到达指定的PIN长度。
  3872 + * @n 0x31 - 按"确认"键。
  3873 + * @n 0x32 - 到达指定的PIN长度。
  3874 + * @n 0x33 - 到达指定的PIN长度并按"确认"键。
  3875 + * @param[in] cardno 截取后的卡号,固定为12个字节。
  3876 + * @param[in] timeout 设备超时值,单位为秒。
  3877 + * @return <0表示失败,==0表示成功,==0xA1表示取消输入,==0xA2表示输入超时。
  3878 + */
  3879 + short USER_API SD_IFD_GetEnPINBlock(HANDLE icdev, char *szPasswd, unsigned char yyflag, unsigned char modeflag, unsigned char *cardno, unsigned char timeout);
  3880 +
  3881 + /**
  3882 + * @brief 设置外接密码键盘算法。
  3883 + * @par 说明:
  3884 + * 设置外接密码键盘使用的算法。
  3885 + * @param[in] icdev 设备标识符。
  3886 + * @param[in] desmode 模式,0x01表示单DES,0x02表示三DES。
  3887 + * @return <0表示失败,==0表示成功。
  3888 + */
  3889 + short USER_API SD_IFD_SelecetDes(HANDLE icdev, unsigned char desmode);
  3890 +
  3891 + /**
  3892 + * @brief 外接密码键盘液晶显示。
  3893 + * @par 说明:
  3894 + * 显示指定字符串到外接密码键盘的液晶屏幕上。
  3895 + * @param[in] icdev 设备标识符。
  3896 + * @param[in] line 行号。
  3897 + * @param[in] row 偏移。
  3898 + * @param[in] leddata 要显示的字符串。
  3899 + * @param[in] timeout 设备超时值,单位为秒。
  3900 + * @return <0表示失败,==0表示成功。
  3901 + */
  3902 + short USER_API SD_IFD_LEDDisplay(HANDLE icdev, unsigned char line, unsigned char row, unsigned char *leddata, unsigned char timeout);
  3903 +
  3904 + /**
  3905 + * @brief 用外接密码键盘工作密钥加解密。
  3906 + * @par 说明:
  3907 + * 使用外接密码键盘的工作密钥进行数据加解密操作。
  3908 + * @param[in] icdev 设备标识符。
  3909 + * @param[in] mode 运算模式,0x00表示加密,0x01表示解密。
  3910 + * @param[in] srcdata 传入数据,HEX格式字符串。
  3911 + * @param[out] desdata 返回的数据,HEX格式字符串。
  3912 + * @return <0表示失败,==0表示成功。
  3913 + */
  3914 + short USER_API SD_IFD_DES(HANDLE icdev, unsigned char mode, unsigned char *srcdata, unsigned char *desdata);
  3915 +
  3916 + /**
  3917 + * @brief 用外接密码键盘工作密钥加解密。
  3918 + * @par 说明:
  3919 + * 使用外接密码键盘的工作密钥进行数据加解密操作。
  3920 + * @param[in] icdev 设备标识符。
  3921 + * @param[in] srclen 传入数据的长度。
  3922 + * @param[in] srcdata 传入数据。
  3923 + * @param[out] desdata 返回的数据,HEX格式字符串。
  3924 + * @param[in] flag 运算模式,0x00表示加密,0x01表示解密。
  3925 + * @return <0表示失败,==0表示成功。
  3926 + */
  3927 + short USER_API SD_IFD_DesCaculate(HANDLE icdev, unsigned char srclen, unsigned char *srcdata, unsigned char *desdata, unsigned char flag);
  3928 +
  3929 + /**
  3930 + * @brief 用外接密码键盘工作密钥算MAC。
  3931 + * @par 说明:
  3932 + * 使用外接密码键盘的工作密钥进行数据算MAC操作。
  3933 + * @param[in] icdev 设备标识符。
  3934 + * @param[in] srclen 传入数据的长度。
  3935 + * @param[in] srcdata 传入数据。
  3936 + * @param[out] macdata 返回的MAC字符串,请至少分配64个字节。
  3937 + * @return <0表示失败,==0表示成功。
  3938 + */
  3939 + short USER_API SD_IFD_CreateMac(HANDLE icdev, unsigned char srclen, unsigned char *srcdata, unsigned char *macdata);
  3940 +
  3941 + /**
  3942 + * @brief 查找身份证。
  3943 + * @par 说明:
  3944 + * 以读取数据方式查找是否有身份证存在于感应区。
  3945 + * @param[in] icdev 设备标识符。
  3946 + * @return <0表示失败或不存在,==0表示存在。
  3947 + */
  3948 + short USER_API dc_find_i_d(HANDLE icdev);
  3949 +
  3950 + /**
  3951 + * @brief 查找身份证。
  3952 + * @par 说明:
  3953 + * 以读取状态方式查找是否有身份证存在于感应区。
  3954 + * @param[in] icdev 设备标识符。
  3955 + * @return <0表示失败或不存在,==0表示存在。
  3956 + */
  3957 + short USER_API dc_find_i_d_2(HANDLE icdev);
  3958 +
  3959 + /**
  3960 + * @brief 查找身份证。
  3961 + * @par 说明:
  3962 + * 以寻卡方式查找是否有身份证存在于感应区。
  3963 + * @param[in] icdev 设备标识符。
  3964 + * @return <0表示失败或不存在,==0表示存在。
  3965 + */
  3966 + short USER_API dc_find_i_d_speed(HANDLE icdev);
  3967 +
  3968 + /**
  3969 + * @brief 读身份证原始数据。
  3970 + * @par 说明:
  3971 + * 读取身份证模块返回的原始数据,包含基础文字和相片内容。
  3972 + * @param[in] icdev 设备标识符。
  3973 + * @param[out] rdata 返回的数据,请至少分配4096个字节。
  3974 + * @return <0表示失败,==0表示成功。
  3975 + */
  3976 + short USER_API dc_get_i_d_raw_buffer(HANDLE icdev, unsigned char *rdata);
  3977 +
  3978 + /**
  3979 + * @brief 读身份证。
  3980 + * @par 说明:
  3981 + * 读取身份证模块返回的原始数据,包含基础文字和相片内容,内部会做解析并且分配资源来保存,释放资源请使用 ::dc_end_i_d 。
  3982 + * @param[in] icdev 设备标识符。
  3983 + * @return <0表示失败,否则为身份证标识符。
  3984 + */
  3985 + HANDLE USER_API dc_start_i_d(HANDLE icdev);
  3986 +
  3987 + /**
  3988 + * @brief 读身份证。
  3989 + * @par 说明:
  3990 + * 读取身份证模块返回的原始数据,包含基础文字、相片、指纹内容,内部会做解析并且分配资源来保存,释放资源请使用 ::dc_end_i_d 。
  3991 + * @param[in] icdev 设备标识符。
  3992 + * @return <0表示失败,否则为身份证标识符。
  3993 + */
  3994 + HANDLE USER_API dc_start_i_d_2(HANDLE icdev);
  3995 +
  3996 + /**
  3997 + * @brief 获取姓名。
  3998 + * @par 说明:
  3999 + * 获取内部保存的姓名。
  4000 + * @param[in] idhandle 身份证标识符。
  4001 + * @return 返回的姓名字符串。
  4002 + */
  4003 + char *USER_API dc_i_d_query_name(HANDLE idhandle);
  4004 +
  4005 + /**
  4006 + * @brief 获取姓名。
  4007 + * @par 说明:
  4008 + * 获取内部保存的姓名。
  4009 + * @param[in] idhandle 身份证标识符。
  4010 + * @param[out] name 姓名,请至少分配32个字节。
  4011 + * @return <0表示失败,==0表示成功。
  4012 + */
  4013 + short USER_API dc_i_d_query_name_2(HANDLE idhandle, char *name);
  4014 +
  4015 + /**
  4016 + * @brief 获取性别。
  4017 + * @par 说明:
  4018 + * 获取内部保存的性别。
  4019 + * @param[in] idhandle 身份证标识符。
  4020 + * @return 返回的性别字符串。
  4021 + */
  4022 + char *USER_API dc_i_d_query_sex(HANDLE idhandle);
  4023 +
  4024 + /**
  4025 + * @brief 获取性别。
  4026 + * @par 说明:
  4027 + * 获取内部保存的性别。
  4028 + * @param[in] idhandle 身份证标识符。
  4029 + * @param[out] sex 性别,请至少分配8个字节。
  4030 + * @return <0表示失败,==0表示成功。
  4031 + */
  4032 + short USER_API dc_i_d_query_sex_2(HANDLE idhandle, char *sex);
  4033 +
  4034 + /**
  4035 + * @brief 获取民族。
  4036 + * @par 说明:
  4037 + * 获取内部保存的民族。
  4038 + * @param[in] idhandle 身份证标识符。
  4039 + * @return 返回的民族字符串。
  4040 + */
  4041 + char *USER_API dc_i_d_query_nation(HANDLE idhandle);
  4042 +
  4043 + /**
  4044 + * @brief 获取民族。
  4045 + * @par 说明:
  4046 + * 获取内部保存的民族。
  4047 + * @param[in] idhandle 身份证标识符。
  4048 + * @param[out] nation 民族,请至少分配32个字节。
  4049 + * @return <0表示失败,==0表示成功。
  4050 + */
  4051 + short USER_API dc_i_d_query_nation_2(HANDLE idhandle, char *nation);
  4052 +
  4053 + /**
  4054 + * @brief 获取生日。
  4055 + * @par 说明:
  4056 + * 获取内部保存的生日。
  4057 + * @param[in] idhandle 身份证标识符。
  4058 + * @return 返回的生日字符串。
  4059 + */
  4060 + char *USER_API dc_i_d_query_birth(HANDLE idhandle);
  4061 +
  4062 + /**
  4063 + * @brief 获取生日。
  4064 + * @par 说明:
  4065 + * 获取内部保存的生日。
  4066 + * @param[in] idhandle 身份证标识符。
  4067 + * @param[out] birth 生日,请至少分配16个字节。
  4068 + * @return <0表示失败,==0表示成功。
  4069 + */
  4070 + short USER_API dc_i_d_query_birth_2(HANDLE idhandle, char *birth);
  4071 +
  4072 + /**
  4073 + * @brief 获取住址。
  4074 + * @par 说明:
  4075 + * 获取内部保存的住址。
  4076 + * @param[in] idhandle 身份证标识符。
  4077 + * @return 返回的住址字符串。
  4078 + */
  4079 + char *USER_API dc_i_d_query_address(HANDLE idhandle);
  4080 +
  4081 + /**
  4082 + * @brief 获取住址。
  4083 + * @par 说明:
  4084 + * 获取内部保存的住址。
  4085 + * @param[in] idhandle 身份证标识符。
  4086 + * @param[out] address 住址,请至少分配128个字节。
  4087 + * @return <0表示失败,==0表示成功。
  4088 + */
  4089 + short USER_API dc_i_d_query_address_2(HANDLE idhandle, char *address);
  4090 +
  4091 + /**
  4092 + * @brief 获取公民身份号码。
  4093 + * @par 说明:
  4094 + * 获取内部保存的公民身份号码。
  4095 + * @param[in] idhandle 身份证标识符。
  4096 + * @return 返回的公民身份号码字符串。
  4097 + */
  4098 + char *USER_API dc_i_d_query_id_number(HANDLE idhandle);
  4099 +
  4100 + /**
  4101 + * @brief 获取公民身份号码。
  4102 + * @par 说明:
  4103 + * 获取内部保存的公民身份号码。
  4104 + * @param[in] idhandle 身份证标识符。
  4105 + * @param[out] id_number 公民身份号码,请至少分配32个字节。
  4106 + * @return <0表示失败,==0表示成功。
  4107 + */
  4108 + short USER_API dc_i_d_query_id_number_2(HANDLE idhandle, char *id_number);
  4109 +
  4110 + /**
  4111 + * @brief 获取签发机关。
  4112 + * @par 说明:
  4113 + * 获取内部保存的签发机关。
  4114 + * @param[in] idhandle 身份证标识符。
  4115 + * @return 返回的签发机关字符串。
  4116 + */
  4117 + char *USER_API dc_i_d_query_department(HANDLE idhandle);
  4118 +
  4119 + /**
  4120 + * @brief 获取签发机关。
  4121 + * @par 说明:
  4122 + * 获取内部保存的签发机关。
  4123 + * @param[in] idhandle 身份证标识符。
  4124 + * @param[out] department 签发机关,请至少分配32个字节。
  4125 + * @return <0表示失败,==0表示成功。
  4126 + */
  4127 + short USER_API dc_i_d_query_department_2(HANDLE idhandle, char *department);
  4128 +
  4129 + /**
  4130 + * @brief 获取有效期限。
  4131 + * @par 说明:
  4132 + * 获取内部保存的有效期限。
  4133 + * @param[in] idhandle 身份证标识符。
  4134 + * @return 返回的有效期限字符串。
  4135 + */
  4136 + char *USER_API dc_i_d_query_expire_day(HANDLE idhandle);
  4137 +
  4138 + /**
  4139 + * @brief 获取有效期限。
  4140 + * @par 说明:
  4141 + * 获取内部保存的有效期限。
  4142 + * @param[in] idhandle 身份证标识符。
  4143 + * @param[out] expire_day 有效期限,请至少分配32个字节。
  4144 + * @return <0表示失败,==0表示成功。
  4145 + */
  4146 + short USER_API dc_i_d_query_expire_day_2(HANDLE idhandle, char *expire_day);
  4147 +
  4148 + /**
  4149 + * @brief 获取相片原始数据。
  4150 + * @par 说明:
  4151 + * 获取内部保存的相片原始数据,此数据需要通过公安部相片解码库解码才能生成相片图像。
  4152 + * @param[in] idhandle 身份证标识符。
  4153 + * @return 返回的相片原始数据,数据实际长度通过调用 ::dc_i_d_query_photo_len 来获取。
  4154 + */
  4155 + unsigned char *USER_API dc_i_d_query_photo(HANDLE idhandle);
  4156 +
  4157 + /**
  4158 + * @brief 获取相片原始数据。
  4159 + * @par 说明:
  4160 + * 获取内部保存的相片原始数据,此数据需要通过公安部相片解码库解码才能生成相片图像。
  4161 + * @param[in] idhandle 身份证标识符。
  4162 + * @param[out] photo 相片原始数据,请至少分配4096个字节,数据实际长度通过调用 ::dc_i_d_query_photo_len 来获取。
  4163 + * @return <0表示失败,==0表示成功。
  4164 + */
  4165 + short USER_API dc_i_d_query_photo_2(HANDLE idhandle, unsigned char *photo);
  4166 +
  4167 + /**
  4168 + * @brief 获取相片原始数据长度。
  4169 + * @par 说明:
  4170 + * 获取内部保存的相片原始数据的长度。
  4171 + * @param[in] idhandle 身份证标识符。
  4172 + * @return 返回的相片原始数据长度。
  4173 + */
  4174 + unsigned int USER_API dc_i_d_query_photo_len(HANDLE idhandle);
  4175 +
  4176 + /**
  4177 + * @brief 生成相片图像文件。
  4178 + * @par 说明:
  4179 + * 使用内部保存的相片原始数据,通过调用公安部相片解码库解码生成相片图像文件。
  4180 + * @param[in] idhandle 身份证标识符。
  4181 + * @param[in] FileName 文件名,请确保有写入的权限。
  4182 + * @return <0表示失败,==0表示成功。
  4183 + */
  4184 + short USER_API dc_i_d_query_photo_file(HANDLE idhandle, const char *FileName);
  4185 +
  4186 + /**
  4187 + * @brief 生成相片图像数据。
  4188 + * @par 说明:
  4189 + * 使用内部保存的相片原始数据,通过调用公安部相片解码库解码生成相片图像数据。
  4190 + * @param[in] idhandle 身份证标识符。
  4191 + * @param[out] BmpBuffer 返回的相片图像数据,请至少分配65536个字节。
  4192 + * @param[in,out] BmpLength 传入 @a BmpBuffer 分配的字节数,返回相片图像数据的长度。
  4193 + * @return <0表示失败,==0表示成功。
  4194 + */
  4195 + short USER_API dc_i_d_query_photo_bmp_buffer(HANDLE idhandle, unsigned char *BmpBuffer, unsigned int *BmpLength);
  4196 +
  4197 + /**
  4198 + * @brief 获取指纹原始数据。
  4199 + * @par 说明:
  4200 + * 获取内部保存的指纹原始数据。
  4201 + * @param[in] idhandle 身份证标识符。
  4202 + * @return 返回的指纹原始数据,数据实际长度通过调用 ::dc_i_d_query_finger_len 来获取。
  4203 + */
  4204 + unsigned char *USER_API dc_i_d_query_finger(HANDLE idhandle);
  4205 +
  4206 + /**
  4207 + * @brief 获取指纹原始数据。
  4208 + * @par 说明:
  4209 + * 获取内部保存的指纹原始数据。
  4210 + * @param[in] idhandle 身份证标识符。
  4211 + * @param[out] finger 指纹原始数据,请至少分配4096个字节,数据实际长度通过调用 ::dc_i_d_query_finger_len 来获取。
  4212 + * @return <0表示失败,==0表示成功。
  4213 + */
  4214 + short USER_API dc_i_d_query_finger_2(HANDLE idhandle, unsigned char *finger);
  4215 +
  4216 + /**
  4217 + * @brief 获取指纹原始数据长度。
  4218 + * @par 说明:
  4219 + * 获取内部保存的指纹原始数据的长度。
  4220 + * @param[in] idhandle 身份证标识符。
  4221 + * @return 返回的指纹原始数据长度。
  4222 + */
  4223 + unsigned int USER_API dc_i_d_query_finger_len(HANDLE idhandle);
  4224 +
  4225 + /**
  4226 + * @brief 保留。
  4227 + */
  4228 + short USER_API dc_i_d_query_finger_file(HANDLE idhandle, const char *FileName);
  4229 +
  4230 + /**
  4231 + * @brief 保留。
  4232 + */
  4233 + short USER_API dc_i_d_query_finger_bmp_buffer(HANDLE idhandle, unsigned char *BmpBuffer, unsigned int *BmpLength);
  4234 +
  4235 + /**
  4236 + * @brief 释放读身份证资源。
  4237 + * @par 说明:
  4238 + * 释放 ::dc_start_i_d ::dc_start_i_d_2 分配的资源。
  4239 + * @param[in] idhandle 身份证标识符。
  4240 + */
  4241 + void USER_API dc_end_i_d(HANDLE idhandle);
  4242 +
  4243 + /**
  4244 + * @brief 获取身份证UID。
  4245 + * @par 说明:
  4246 + * 获取身份证的唯一标识,长度为8个字节。
  4247 + * @param[in] icdev 设备标识符。
  4248 + * @param[out] uid 返回的UID,固定为8个字节。
  4249 + * @return <0表示失败,==0表示成功。
  4250 + */
  4251 + short USER_API dc_getuid_i_d(HANDLE icdev, unsigned char *uid);
  4252 +
  4253 + /**
  4254 + * @brief LCD显示二维码。
  4255 + * @par 说明:
  4256 + * 在设备LCD显示屏上显示二维码。
  4257 + * @param[in] icdev 设备标识符。
  4258 + * @param[in] point_x X轴偏移点数(0~60)。
  4259 + * @param[in] point_y Y轴偏移点数(0~5)。
  4260 + * @param[in] info 文本字符串。
  4261 + * @return <0表示失败,==0表示成功。
  4262 + */
  4263 + short USER_API dc_display_2dbarcode(HANDLE icdev, int point_x, int point_y, const char *info);
  4264 +
  4265 + /**
  4266 + * @brief 读身份证指纹。
  4267 + * @par 说明:
  4268 + * 读取身份证中的指纹数据。
  4269 + * @param[in] icdev 设备标识符。
  4270 + * @param[out] length 返回指纹数据的长度,不含'\0'。
  4271 + * @param[out] data 返回的指纹数据,HEX格式字符串。
  4272 + * @return <0表示失败,==0表示成功。
  4273 + */
  4274 + short USER_API dc_getfingerdata(HANDLE icdev, int *length, unsigned char *data);
  4275 +
  4276 + /**
  4277 + * @brief 检测卡片位置。
  4278 + * @par 说明:
  4279 + * 检测卡片在设备中的位置。
  4280 + * @param[in] icdev 设备标识符。
  4281 + * @param[out] pos 位置。
  4282 + * @n 0x01 - 卡到开始位。
  4283 + * @n 0x02 - 卡到末位。
  4284 + * @n 0x03 - 卡已锁住。
  4285 + * @return <0表示失败,==0表示成功,==1表示无卡。
  4286 + */
  4287 + short USER_API dc_card_status2(HANDLE icdev, unsigned char *pos);
  4288 +
  4289 + /**
  4290 + * @brief 开卡与锁卡。
  4291 + * @par 说明:
  4292 + * 开卡与锁卡。
  4293 + * @param[in] icdev 设备标识符。
  4294 + * @param[in] flag 标记,0x00表示锁卡,0x01表示开卡。
  4295 + * @return <0表示失败,==0表示成功,==1表示无卡。
  4296 + */
  4297 + short USER_API dc_card_make_and_lock(HANDLE icdev, unsigned char flag);
  4298 +
  4299 + /**
  4300 + * @brief 发送短信。
  4301 + * @par 说明:
  4302 + * 发送短信给指定号码。
  4303 + * @param[in] icdev 设备标识符。
  4304 + * @param[in] phone_no 号码。
  4305 + * @param[in] sms_content 短信内容。
  4306 + * @return <0表示失败,==0表示成功。
  4307 + */
  4308 + short USER_API dc_send_sms(HANDLE icdev, const char *phone_no, const char *sms_content);
  4309 +
  4310 + /**
  4311 + * @brief 指纹模块通讯。
  4312 + * @par 说明:
  4313 + * 与指纹模块进行通讯交互。
  4314 + * @param[in] icdev 设备标识符。
  4315 + * @param[in] ctime 设备超时值,单位为秒。
  4316 + * @param[in] request 发送数据。
  4317 + * @param[in] request_len 发送数据的长度。
  4318 + * @param[out] response 返回的数据。
  4319 + * @param[out] response_len 返回数据的长度。
  4320 + * @return <0表示失败,==0表示成功。
  4321 + */
  4322 + short USER_API dc_fingerprint_io_control(HANDLE icdev, unsigned char ctime, const unsigned char *request, int request_len, unsigned char *response, int *response_len);
  4323 +
  4324 + /**
  4325 + * @brief 保留。
  4326 + */
  4327 + short USER_API dc_keypad_io_control(HANDLE icdev, unsigned char ctime, const unsigned char *request, int request_len, unsigned char *response, int *response_len);
  4328 +
  4329 + /**
  4330 + * @brief 保留。
  4331 + */
  4332 + short USER_API dc_keypad_ImportKey(HANDLE icdev, unsigned char *check_value, unsigned char check_mode, int key_index, int use_key_index, unsigned char enable, const unsigned char *key, int key_len);
  4333 +
  4334 + /**
  4335 + * @brief 保留。
  4336 + */
  4337 + short USER_API dc_keypad_DeleteKey(HANDLE icdev, int key_index);
  4338 +
  4339 + /**
  4340 + * @brief 保留。
  4341 + */
  4342 + short USER_API dc_keypad_SetButtonMark(HANDLE icdev, unsigned int mark_value, unsigned char use);
  4343 +
  4344 + /**
  4345 + * @brief 保留。
  4346 + */
  4347 + short USER_API dc_keypad_Start(HANDLE icdev, unsigned char mode, int max_len, unsigned char auto_end, unsigned char enable_sound);
  4348 +
  4349 + /**
  4350 + * @brief 保留。
  4351 + */
  4352 + short USER_API dc_keypad_End(HANDLE icdev);
  4353 +
  4354 + /**
  4355 + * @brief 保留。
  4356 + */
  4357 + short USER_API dc_keypad_GetPressed(HANDLE icdev, int time_ms, unsigned char *value);
  4358 +
  4359 + /**
  4360 + * @brief 保留。
  4361 + */
  4362 + short USER_API dc_keypad_GetPinBlock(HANDLE icdev, unsigned char mode, int key_index, const unsigned char *customer_data, int customer_data_len, unsigned char *out_data, int *out_data_len);
  4363 +
  4364 + /**
  4365 + * @brief 保留。
  4366 + */
  4367 + short USER_API dc_keypad_GetRandomValue(HANDLE icdev, int length, unsigned char *value);
  4368 +
  4369 + /**
  4370 + * @brief 保留。
  4371 + */
  4372 + short USER_API dc_keypad_GetEncryptDataOfCBC(HANDLE icdev, unsigned char mode, int key_index, const unsigned char *in_data, int in_data_len, unsigned char *out_data, int *out_data_len);
  4373 +
  4374 + /**
  4375 + * @brief 保留。
  4376 + */
  4377 + short USER_API dc_keypad_GetDecryptDataOfCBC(HANDLE icdev, unsigned char mode, int key_index, const unsigned char *in_data, int in_data_len, unsigned char *out_data, int *out_data_len);
  4378 +
  4379 + /**
  4380 + * @brief 保留。
  4381 + */
  4382 + short USER_API dc_keypad_GetEncryptDataOfECB(HANDLE icdev, unsigned char mode, int key_index, const unsigned char *in_data, int in_data_len, unsigned char *out_data, int *out_data_len);
  4383 +
  4384 + /**
  4385 + * @brief 保留。
  4386 + */
  4387 + short USER_API dc_keypad_GetDecryptDataOfECB(HANDLE icdev, unsigned char mode, int key_index, const unsigned char *in_data, int in_data_len, unsigned char *out_data, int *out_data_len);
  4388 +
  4389 + /**
  4390 + * @brief 保留。
  4391 + */
  4392 + short USER_API dc_keypad_GetMACDataOfCBC(HANDLE icdev, unsigned char mode, int key_index, const unsigned char *in_data, int in_data_len, unsigned char *out_data, int *out_data_len);
  4393 +
  4394 + /**
  4395 + * @brief 获取非接触卡类型。
  4396 + * @par 说明:
  4397 + * 获取感应区中存在的非接触卡类型。
  4398 + * @param[in] icdev 设备标识符。
  4399 + * @return <0表示失败。
  4400 + * @n 0x00 - 无卡。
  4401 + * @n 0x11 - Type A CPU Card。
  4402 + * @n 0x13 - Type A Mifare S50。
  4403 + * @n 0x14 - Type A Mifare S70。
  4404 + * @n 0x15 - Type A Mifare Ultralight。
  4405 + * @n 0x21 - Type B CPU Card。
  4406 + * @n 0x22 - Type B 存储卡。
  4407 + */
  4408 + short USER_API dc_RfGetCardType(HANDLE icdev);
  4409 +
  4410 + /**
  4411 + * @brief 保留。
  4412 + */
  4413 + short USER_API dc_RfWaveControl(HANDLE icdev, unsigned char mode);
  4414 +
  4415 + /**
  4416 + * @brief 保留。
  4417 + */
  4418 + short USER_API dc_RfReadChipRegister(HANDLE icdev, unsigned char *register_data);
  4419 +
  4420 + /**
  4421 + * @brief 保留。
  4422 + */
  4423 + short USER_API dc_RfSetChipRegister(HANDLE icdev, unsigned char register_type, unsigned char register_value);
  4424 +
  4425 + /**
  4426 + * @brief 获取身份证UID。
  4427 + * @par 说明:
  4428 + * 获取身份证的唯一标识,长度为8个字节。
  4429 + * @param[in] icdev 设备标识符。
  4430 + * @param[out] _Data 返回的UID,固定为8个字节。
  4431 + * @return <0表示失败,==0表示成功。
  4432 + */
  4433 + short USER_API dc_get_idsnr(HANDLE icdev, unsigned char *_Data);
  4434 +
  4435 + /**
  4436 + * @brief 获取身份证UID。
  4437 + * @par 说明:
  4438 + * ::dc_get_idsnr 的HEX形式接口,参数 @a _Data 为HEX格式。
  4439 + */
  4440 + short USER_API dc_get_idsnr_hex(HANDLE icdev, char *_Data);
  4441 +
  4442 + /**
  4443 + * @brief 密码键盘模块通讯。
  4444 + * @par 说明:
  4445 + * 与密码键盘模块进行通讯交互。
  4446 + * @param[in] icdev 设备标识符。
  4447 + * @param[in] time_100ms 设备超时值,单位为100毫秒。
  4448 + * @param[in] slen 发送数据的长度。
  4449 + * @param[in] sdata 发送数据。
  4450 + * @param[out] rlen 返回数据的长度。
  4451 + * @param[out] rdata 返回的数据。
  4452 + * @return <0表示失败,==0表示成功。
  4453 + */
  4454 + short USER_API dc_PinpadCommunication(HANDLE icdev, int time_100ms, int slen, const unsigned char *sdata, int *rlen, unsigned char *rdata);
  4455 +
  4456 + /**
  4457 + * @brief 读Flash。
  4458 + * @par 说明:
  4459 + * 读取设备内部Flash中的数据,可以用作数据保存等。
  4460 + * @param[in] icdev 设备标识符。
  4461 + * @param[in] offset 偏移地址。
  4462 + * @param[in] length 读取长度。
  4463 + * @param[out] data_buffer 返回的数据。
  4464 + * @return <0表示失败,==0表示成功。
  4465 + */
  4466 + short USER_API dc_ReadFlash(HANDLE icdev, int offset, int length, unsigned char *data_buffer);
  4467 +
  4468 + /**
  4469 + * @brief 写Flash。
  4470 + * @par 说明:
  4471 + * 写入数据到设备内部Flash中,可以用作数据保存等。
  4472 + * @param[in] icdev 设备标识符。
  4473 + * @param[in] offset 偏移地址。
  4474 + * @param[in] length 写入长度。
  4475 + * @param[in] data_buffer 传入数据。
  4476 + * @return <0表示失败,==0表示成功。
  4477 + */
  4478 + short USER_API dc_WriteFlash(HANDLE icdev, int offset, int length, const unsigned char *data_buffer);
  4479 +
  4480 + /**
  4481 + * @brief 检测卡位置状态。
  4482 + * @par 说明:
  4483 + * 检测卡片当前的位置状态。
  4484 + * @param[in] icdev 设备标识符。
  4485 + * @param[out] pos 位置状态,可为多个以下值按位或在一起。
  4486 + * @n 0x00 - 无卡。
  4487 + * @n 0x01 - 无卡,卡在前门口,处夹卡位置。
  4488 + * @n 0x02 - 无卡,卡在前门口,处不夹卡位置。
  4489 + * @n 0x10 - 有卡,不可操作任何卡。
  4490 + * @n 0x11 - 有卡,可操作磁条。
  4491 + * @n 0x12 - 有卡,可操作接触。
  4492 + * @n 0x14 - 有卡,可操作非接触。
  4493 + * @return <0表示失败,==0表示成功。
  4494 + */
  4495 + short USER_API dc_SelfServiceDeviceCardStatus(HANDLE icdev, unsigned char *pos);
  4496 +
  4497 + /**
  4498 + * @brief 进入卡片。
  4499 + * @par 说明:
  4500 + * 进入卡片,操作前设备内有卡则错误。
  4501 + * @param[in] icdev 设备标识符。
  4502 + * @param[in] time_s 设备超时值,单位为秒。
  4503 + * @param[in] mode 模式。
  4504 + * @n 0x00 - 前端进卡,不带磁条。
  4505 + * @n 0x01 - 前端进卡,带磁条。
  4506 + * @n 0x02 - 后端进卡,不带磁条。
  4507 + * @n 0x03 - 后端进卡,带磁条。
  4508 + * @return <0表示失败。
  4509 + * @n 0 - 操作成功。
  4510 + * @n 1 - 设备内已有卡。
  4511 + * @n 2 - 接收超时。
  4512 + * @n 3 - 读磁卡错误。
  4513 + * @n 4 - 参数设置出错。
  4514 + * @n 5 - 异常卡正常弹出。
  4515 + * @n 6 - 异常卡卡在设备内。
  4516 + */
  4517 + short USER_API dc_SelfServiceDeviceCardInject(HANDLE icdev, unsigned char time_s, unsigned char mode);
  4518 +
  4519 + /**
  4520 + * @brief 弹出卡片。
  4521 + * @par 说明:
  4522 + * 弹出卡片,操作前设备内无卡则错误。
  4523 + * @param[in] icdev 设备标识符。
  4524 + * @param[in] time_s 设备超时值,单位为秒。
  4525 + * @param[in] mode 模式。
  4526 + * @n 0x00 - 弹到前端并夹卡。
  4527 + * @n 0x01 - 弹道后端。
  4528 + * @n 0x02 - 弹到前端不夹卡。
  4529 + * @return <0表示失败。
  4530 + * @n 0 - 操作成功。
  4531 + * @n 1 - 设备内没有卡。
  4532 + * @n 2 - 接收超时。
  4533 + * @n 3 - 参数设置出错。
  4534 + * @n 4 - 卡片已到前门夹卡位置,可操作卡片。
  4535 + * @n 5 - 卡片已到前门不夹卡位置,不可操作卡片。
  4536 + */
  4537 + short USER_API dc_SelfServiceDeviceCardEject(HANDLE icdev, unsigned char time_s, unsigned char mode);
  4538 +
  4539 + /**
  4540 + * @brief 移动卡片。
  4541 + * @par 说明:
  4542 + * 移动卡片,操作前设备内无卡则错误。
  4543 + * @param[in] icdev 设备标识符。
  4544 + * @param[in] time_s 设备超时值,单位为秒。
  4545 + * @param[in] mode 模式。
  4546 + * @n 0x00 - 移动到磁条卡操作位置。
  4547 + * @n 0x01 - 移动到接触卡操作位置。
  4548 + * @n 0x02 - 移动到非接触卡操作位置。
  4549 + * @return <0表示失败。
  4550 + * @n 0 - 操作成功。
  4551 + * @n 1 - 设备内没有卡。
  4552 + * @n 2 - 接收超时。
  4553 + * @n 3 - 参数设置出错。
  4554 + * @n 4 - 卡片已到前门不夹卡位置,不可操作卡片。
  4555 + */
  4556 + short USER_API dc_SelfServiceDeviceCardMove(HANDLE icdev, unsigned char time_s, unsigned char mode);
  4557 +
  4558 + /**
  4559 + * @brief 获取传感器状态。
  4560 + * @par 说明:
  4561 + * 获取设备传感器的状态。
  4562 + * @param[in] icdev 设备标识符。
  4563 + * @param[out] value 状态值。
  4564 + * @n bit0 - 电闸门开关传感器,0表示打开,1表示关闭。
  4565 + * @n bit1 - 压卡传感器,0表示卡已被下压,1表示无卡。
  4566 + * @n bit2~bit7 - 分别表示从前端到后端的传感器,每个传感器值0表示有卡,值1表示无卡。
  4567 + * @return <0表示失败,==0表示成功,==1表示掉电无法使用。
  4568 + */
  4569 + short USER_API dc_SelfServiceDeviceSensorStatus(HANDLE icdev, unsigned char *value);
  4570 +
  4571 + /**
  4572 + * @brief 设置弹卡模式。
  4573 + * @par 说明:
  4574 + * 设置弹卡模式。
  4575 + * @param[in] icdev 设备标识符。
  4576 + * @param[in] mode 模式。
  4577 + * @n 0x00 - 弹到前端并夹卡。
  4578 + * @n 0x01 - 弹道后端。
  4579 + * @n 0x02 - 弹到前端不夹卡。
  4580 + * @return <0表示失败,==0表示成功。
  4581 + */
  4582 + short USER_API dc_SelfServiceDeviceConfig(HANDLE icdev, unsigned char mode);
  4583 +
  4584 + /**
  4585 + * @brief 设置前端进卡模式。
  4586 + * @par 说明:
  4587 + * 设置前端进卡模式。
  4588 + * @param[in] icdev 设备标识符。
  4589 + * @param[in] mode 模式。
  4590 + * @n 0x00 - 前端禁止进卡。
  4591 + * @n 0x01 - 前端磁卡方式进卡。
  4592 + * @n 0x02 - 前端开关方式进卡。
  4593 + * @n 0x03 - 前端磁信号方式进卡。
  4594 + * @return <0表示失败,==0表示成功。
  4595 + */
  4596 + short USER_API dc_SelfServiceDeviceConfigFront(HANDLE icdev, unsigned char mode);
  4597 +
  4598 + /**
  4599 + * @brief 设置后端进卡模式。
  4600 + * @par 说明:
  4601 + * 设置后端进卡模式。
  4602 + * @param[in] icdev 设备标识符。
  4603 + * @param[in] mode 模式。
  4604 + * @n 0x00 - 后端禁止进卡。
  4605 + * @n 0x01 - 后端磁卡方式进卡。
  4606 + * @n 0x02 - 后端非磁卡方式进卡。
  4607 + * @return <0表示失败,==0表示成功。
  4608 + */
  4609 + short USER_API dc_SelfServiceDeviceConfigBack(HANDLE icdev, unsigned char mode);
  4610 +
  4611 + /**
  4612 + * @brief 设置停卡位置。
  4613 + * @par 说明:
  4614 + * 设置停卡位置。
  4615 + * @param[in] icdev 设备标识符。
  4616 + * @param[in] mode 模式。
  4617 + * @n 0x00 - 前端不夹卡。
  4618 + * @n 0x01 - 前端夹卡。
  4619 + * @n 0x02 - 接触式IC卡位置。
  4620 + * @n 0x03 - 射频卡位置。
  4621 + * @n 0x04 - 磁卡位置。
  4622 + * @n 0x05 - 弹卡到后端。
  4623 + * @return <0表示失败,==0表示成功。
  4624 + */
  4625 + short USER_API dc_SelfServiceDeviceConfigPlace(HANDLE icdev, unsigned char mode);
  4626 +
  4627 + /**
  4628 + * @brief 检测卡类型。
  4629 + * @par 说明:
  4630 + * 设备将自动移动卡片并且检测卡片类型。
  4631 + * @param[in] icdev 设备标识符。
  4632 + * @return <0表示失败。
  4633 + * @n 0x00 - 表示无法检测到相应卡片。
  4634 + * @n 0x01 - 表示设备内无卡。
  4635 + * @n 0x11 - 表示Type A CPU Card。
  4636 + * @n 0x13 - 表示Type A Mifare S50。
  4637 + * @n 0x14 - 表示Type A Mifare S70。
  4638 + * @n 0x15 - 表示Type A Mifare Ultralight。
  4639 + * @n 0x21 - 表示Type B CPU Card。
  4640 + * @n 0x22 - 表示Type B 存储卡。
  4641 + * @n 0x31 - 表示接触T=0 CPU Card。
  4642 + * @n 0x32 - 表示接触T=1 CPU Card。
  4643 + * @n 0x41 - 表示4442 Card。
  4644 + * @n 0x42 - 表示4428 Card。
  4645 + */
  4646 + short USER_API dc_SelfServiceDeviceCheckCardType(HANDLE icdev);
  4647 +
  4648 + /**
  4649 + * @brief 复位自助设备。
  4650 + * @par 说明:
  4651 + * 使自助设备进入上电初始状态,并且设置参数为缺省参数。
  4652 + * @param[in] icdev 设备标识符。
  4653 + * @return <0表示失败,==0表示成功。
  4654 + */
  4655 + short USER_API dc_SelfServiceDeviceReset(HANDLE icdev);
  4656 +
  4657 + /**
  4658 + * @brief 检测多卡状态。
  4659 + * @par 说明:
  4660 + * 判断是否为多张卡,是否为Type A或Type B卡。
  4661 + * @param[in] icdev 设备标识符。
  4662 + * @param[out] type 卡类型,0x0A表示Type A卡,0x0B表示Type B卡。
  4663 + * @return <0表示失败,==0表示成功,==1表示无卡,==2表示存在多张卡。
  4664 + */
  4665 + short USER_API dc_MulticardStatus(HANDLE icdev, unsigned char *type);
  4666 +
  4667 + /**
  4668 + * @brief 获取多个按键值。
  4669 + * @par 说明:
  4670 + * 获取设备键盘的按键值,每次调用可以获取多个按键值。
  4671 + * @param[in] icdev 设备标识符。
  4672 + * @param[in] ctime 设备超时值,单位为秒。
  4673 + * @param[out] rlen 返回按键数据的长度,不含'\0'。
  4674 + * @param[out] cpass 返回的按键数据,数据格式为'\0'结尾的字符串。
  4675 + * @return <0表示失败,==0表示成功,==0xA1表示取消输入,==0xA2表示输入超时。
  4676 + */
  4677 + short USER_API dc_pass_key_value2(HANDLE icdev, unsigned char ctime, unsigned char *rlen, unsigned char *cpass);
  4678 +
  4679 + /**
  4680 + * @brief 读外部EEPROM。
  4681 + * @par 说明:
  4682 + * 读取设备外部EEPROM中的数据,可以用作数据保存等。
  4683 + * @param[in] icdev 设备标识符。
  4684 + * @param[in] offset 偏移地址。
  4685 + * @param[in] length 读取长度。
  4686 + * @param[out] data_buffer 返回的数据。
  4687 + * @return <0表示失败,==0表示成功。
  4688 + */
  4689 + short USER_API dc_ReadOutEeprom(HANDLE icdev, int offset, int length, unsigned char *data_buffer);
  4690 +
  4691 + /**
  4692 + * @brief 写外部EEPROM。
  4693 + * @par 说明:
  4694 + * 写入数据到设备外部EEPROM中,可以用作数据保存等。
  4695 + * @param[in] icdev 设备标识符。
  4696 + * @param[in] offset 偏移地址。
  4697 + * @param[in] length 写入长度。
  4698 + * @param[in] data_buffer 传入数据。
  4699 + * @return <0表示失败,==0表示成功。
  4700 + */
  4701 + short USER_API dc_WriteOutEeprom(HANDLE icdev, int offset, int length, const unsigned char *data_buffer);
  4702 +
  4703 + /**
  4704 + * @brief 读ID卡。
  4705 + * @par 说明:
  4706 + * 读取ID卡数据。
  4707 + * @param[in] icdev 设备标识符。
  4708 + * @param[in] time_ms 设备超时值,单位为毫秒。
  4709 + * @param[out] rlen 返回数据的长度。
  4710 + * @param[out] rdata 返回的数据。
  4711 + * @return <0表示失败,==0表示成功。
  4712 + */
  4713 + short USER_API dc_ReadIdCardInfo(HANDLE icdev, int time_ms, int *rlen, unsigned char *rdata);
  4714 +
  4715 + /**
  4716 + * @brief 保留。
  4717 + */
  4718 + short USER_API dc_cpy_getkey(HANDLE icdev, unsigned char *respkey, int *resplen);
  4719 +
  4720 + /**
  4721 + * @brief 保留。
  4722 + */
  4723 + short USER_API dc_cpy_setkey(HANDLE icdev, unsigned char *genkey, int keylen);
  4724 +
  4725 + /**
  4726 + * @brief 保留。
  4727 + */
  4728 + short USER_API dc_cpy_cpuapdu(HANDLE icdev, unsigned char slen, unsigned char *sendbuffer, unsigned char *rlen, unsigned char *databuffer);
  4729 +
  4730 + /**
  4731 + * @brief 保留。
  4732 + */
  4733 + short USER_API dc_cpy_cpuapdu_hex(HANDLE icdev, unsigned char slen, char *sendbuffer, unsigned char *rlen, char *databuffer);
  4734 +
  4735 + /**
  4736 + * @brief 保留。
  4737 + */
  4738 + short USER_API dc_cpy_cpuapduInt(HANDLE icdev, unsigned int slen, unsigned char *sendbuffer, unsigned int *rlen, unsigned char *databuffer);
  4739 +
  4740 + /**
  4741 + * @brief 保留。
  4742 + */
  4743 + short USER_API dc_cpy_cpuapduInt_hex(HANDLE icdev, unsigned int slen, char *sendbuffer, unsigned int *rlen, char *databuffer);
  4744 +
  4745 + /**
  4746 + * @brief 保留。
  4747 + */
  4748 + short USER_API dc_cpy_procommand(HANDLE icdev, unsigned char slen, unsigned char *sendbuffer, unsigned char *rlen, unsigned char *databuffer, unsigned char timeout);
  4749 +
  4750 + /**
  4751 + * @brief 保留。
  4752 + */
  4753 + short USER_API dc_cpy_procommand_hex(HANDLE icdev, unsigned char slen, char *sendbuffer, unsigned char *rlen, char *databuffer, unsigned char timeout);
  4754 +
  4755 + /**
  4756 + * @brief 保留。
  4757 + */
  4758 + short USER_API dc_cpy_procommandInt(HANDLE icdev, unsigned int slen, unsigned char *sendbuffer, unsigned int *rlen, unsigned char *databuffer, unsigned char timeout);
  4759 +
  4760 + /**
  4761 + * @brief 保留。
  4762 + */
  4763 + short USER_API dc_cpy_procommandInt_hex(HANDLE icdev, unsigned int slen, char *sendbuffer, unsigned int *rlen, char *databuffer, unsigned char timeout);
  4764 +
  4765 + /**
  4766 + * @brief 非接触式CPU卡指令交互。
  4767 + * @par 说明:
  4768 + * 对感应区CPU卡进行指令交互操作,注意此接口已封装卡协议部分。
  4769 + * @param[in] icdev 设备标识符。
  4770 + * @param[in] slen 发送数据的长度。
  4771 + * @param[in] sendbuffer 发送数据。
  4772 + * @param[out] rlen 返回数据的长度。
  4773 + * @param[out] databuffer 返回的数据。
  4774 + * @param[in] timeout 超时值,此值只在部分设备的底层使用,单位为250毫秒,一般调用建议值为7。
  4775 + * @return <0表示失败,==0表示成功。
  4776 + */
  4777 + short USER_API dc_procommandInt(HANDLE icdev, unsigned int slen, unsigned char *sendbuffer, unsigned int *rlen, unsigned char *databuffer, unsigned char timeout);
  4778 +
  4779 + /**
  4780 + * @brief 非接触式CPU卡指令交互。
  4781 + * @par 说明:
  4782 + * ::dc_procommandInt 的HEX形式接口,参数 @a sendbuffer @a databuffer 为HEX格式。
  4783 + */
  4784 + short USER_API dc_procommandInt_hex(HANDLE icdev, unsigned int slen, char *sendbuffer, unsigned int *rlen, char *databuffer, unsigned char timeout);
  4785 +
  4786 + /**
  4787 + * @brief 保留。
  4788 + */
  4789 + short USER_API dc_ReadRfCfgReg(HANDLE icdev, int type, int number, int *value);
  4790 +
  4791 + /**
  4792 + * @brief 保留。
  4793 + */
  4794 + short USER_API dc_WriteRfCfgReg(HANDLE icdev, int type, int number, int value);
  4795 +
  4796 + /**
  4797 + * @brief 初始化NFC。
  4798 + * @par 说明:
  4799 + * 切换射频到NFC点对点模式,操作NFC点对点模式之前必须使用此接口进行初始化。
  4800 + * @param[in] icdev 设备标识符。
  4801 + * @return <0表示失败,==0表示成功。
  4802 + */
  4803 + short USER_API dc_NfcInit(HANDLE icdev);
  4804 +
  4805 + /**
  4806 + * @brief 激活NFC。
  4807 + * @par 说明:
  4808 + * 寻NFC(即激活NFC后自动链接)并返回ATR数据。
  4809 + * @param[in] icdev 设备标识符。
  4810 + * @param[out] atr 返回的数据。
  4811 + * @param[out] atr_len 返回数据的长度。
  4812 + * @return <0表示失败,==0表示成功。
  4813 + */
  4814 + short USER_API dc_NfcActivate(HANDLE icdev, unsigned char *atr, int *atr_len);
  4815 +
  4816 + /**
  4817 + * @brief 断开NFC。
  4818 + * @par 说明:
  4819 + * 断开链接并关闭天线,调用此接口必须先激活NFC。
  4820 + * @param[in] icdev 设备标识符。
  4821 + * @return <0表示失败,==0表示成功。
  4822 + */
  4823 + short USER_API dc_NfcDeactivate(HANDLE icdev);
  4824 +
  4825 + /**
  4826 + * @brief NFC点对点数据透传(推送服务端)。
  4827 + * @par 说明:
  4828 + * 推送数据到NFC手机,调用此接口必须先激活NFC。
  4829 + * @param[in] icdev 设备标识符。
  4830 + * @param[in] request 发送数据。
  4831 + * @param[in] request_len 发送数据的长度。
  4832 + * @return <0表示失败,==0表示成功。
  4833 + */
  4834 + short USER_API dc_NfcPush(HANDLE icdev, const unsigned char *request, int request_len);
  4835 +
  4836 + /**
  4837 + * @brief NFC点对点数据透传(从服务端接收)。
  4838 + * @par 说明:
  4839 + * 设置接收模式,开启后将进入准备接收NFC手机数据的模式,调用此接口无须激活NFC。
  4840 + * @param[in] icdev 设备标识符。
  4841 + * @param[in] flag 标记,0表示关闭,1表示开启。
  4842 + * @return <0表示失败,==0表示成功。
  4843 + */
  4844 + short USER_API dc_NfcService(HANDLE icdev, int flag);
  4845 +
  4846 + /**
  4847 + * @brief 接收NFC手机数据。
  4848 + * @par 说明:
  4849 + * 设备进入接收模式后,可以使用此接口来接收NFC手机的数据。
  4850 + * @param[in] icdev 设备标识符。
  4851 + * @param[out] response 返回的数据。
  4852 + * @param[out] response_len 返回数据的长度。
  4853 + * @param[in] time_ms 接口超时值,单位为秒。
  4854 + * @return <0表示失败,==0表示成功,==1表示手机不在感应区,==2表示数据需要重新传递。
  4855 + */
  4856 + short USER_API dc_NfcFetch(HANDLE icdev, unsigned char *response, int *response_len, int time_ms);
  4857 +
  4858 + /**
  4859 + * @brief NFC点对点数据透传(从服务端接收)。
  4860 + * @par 说明:
  4861 + * 设置接收模式,开启后将进入准备接收NFC手机数据的模式,调用此接口无须激活NFC。
  4862 + * @param[in] icdev 设备标识符。
  4863 + * @param[in] mode 模式,0表示关闭,1表示开启。
  4864 + * @return <0表示失败,==0表示成功。
  4865 + */
  4866 + short USER_API dc_NfcSimulateCardConfig(HANDLE icdev, int mode);
  4867 +
  4868 + /**
  4869 + * @brief 磁条卡数据自动上传数据模式设置。
  4870 + * @par 说明:
  4871 + * 磁条卡数据自动上传数据模式设置。
  4872 + * @param[in] icdev 设备标识符。
  4873 + * @param[in] mode 模式。
  4874 + * @n 0 - 输出数据中如果带字母,字母转化为大写字母。
  4875 + * @n 1 - 输出数据是原始数据(默认)。
  4876 + * @return <0表示失败,==0表示成功。
  4877 + */
  4878 + short USER_API dc_MagFormatConfig(HANDLE icdev, int mode);
  4879 +
  4880 + /**
  4881 + * @brief 获取通讯模块MAC地址。
  4882 + * @par 说明:
  4883 + * 获取通讯模块MAC地址。
  4884 + * @param[in] icdev 设备标识符。
  4885 + * @param[in] type 模块类型,1表示蓝牙模块,2表示WIFI模块,3表示GPRS/CDMA/全网通等模块。
  4886 + * @param[out] value 返回的MAC地址,数据格式为'\0'结尾的字符串。
  4887 + * @return <0表示失败,==0表示成功。
  4888 + */
  4889 + short USER_API dc_ReadModuleMacAddress(HANDLE icdev, int type, char *value);
  4890 +
  4891 + /**
  4892 + * @brief 设置通讯模块MAC地址。
  4893 + * @par 说明:
  4894 + * 设置通讯模块MAC地址。
  4895 + * @param[in] icdev 设备标识符。
  4896 + * @param[in] type 模块类型,1表示蓝牙模块,2表示WIFI模块,3表示GPRS/CDMA/全网通等模块。
  4897 + * @param[in] value 传入MAC地址,数据格式为'\0'结尾的字符串。
  4898 + * @return <0表示失败,==0表示成功。
  4899 + */
  4900 + short USER_API dc_WriteModuleMacAddress(HANDLE icdev, int type, const char *value);
  4901 +
  4902 + /**
  4903 + * @brief 读取ATS数据。
  4904 + * @par 说明:
  4905 + * 读取Type A、Type B卡的ATS,此接口必须在卡片激活后才可使用。
  4906 + * @param[in] icdev 设备标识符。
  4907 + * @param[out] ats_len 返回ATS数据的长度。
  4908 + * @param[out] ats 返回的ATS数据。
  4909 + * @return <0表示失败,==0表示成功。
  4910 + */
  4911 + short USER_API dc_ReadRfTypeABATS(HANDLE icdev, int *ats_len, unsigned char *ats);
  4912 +
  4913 + /**
  4914 + * @brief 读取ATS数据。
  4915 + * @par 说明:
  4916 + * ::dc_ReadRfTypeABATS 的HEX形式接口,参数 @a ats 为HEX格式。
  4917 + */
  4918 + short USER_API dc_ReadRfTypeABATS_hex(HANDLE icdev, int *ats_len, char *ats);
  4919 +
  4920 + /**
  4921 + * @brief 保留。
  4922 + */
  4923 + short USER_API dc_RfFormatConfig(HANDLE icdev, int mode, int block_number, int offset, int length);
  4924 +
  4925 + /**
  4926 + * @brief Flash扇区擦除。
  4927 + * @par 说明:
  4928 + * 擦除Flash扇区中的数据。
  4929 + * @param[in] icdev 设备标识符。
  4930 + * @param[in] sector 扇区地址,0xFFFF表示擦除全部。
  4931 + * @return <0表示失败,==0表示成功。
  4932 + */
  4933 + short USER_API dc_FlashErase(HANDLE icdev, int sector);
  4934 +
  4935 + /**
  4936 + * @brief 设备蜂鸣。
  4937 + * @par 说明:
  4938 + * 设备蜂鸣器按照指定参数进行蜂鸣,接口本身会直接返回,而不会等待蜂鸣器工作完成。
  4939 + * @param[in] icdev 设备标识符。
  4940 + * @param[in] beep_time_ms 单次蜂鸣时间,单位为毫秒。
  4941 + * @param[in] interval_time_ms 间隔时间,单位为毫秒。
  4942 + * @param[in] count 蜂鸣次数,其中0x0000表示停止,0xFFFF表示无限次。
  4943 + * @return <0表示失败,==0表示成功。
  4944 + */
  4945 + short USER_API dc_BuzzerBeep(HANDLE icdev, unsigned short beep_time_ms, unsigned short interval_time_ms, unsigned short count);
  4946 +
  4947 + /**
  4948 + * @brief 蓝牙模式设置。
  4949 + * @par 说明:
  4950 + * 设置蓝牙模块的通讯模式。
  4951 + * @param[in] icdev 设备标识符。
  4952 + * @param[in] mode 模式,0x00表示串口模式(AT指令集或EEPROM读写),0x01表示蓝牙模式。
  4953 + * @return <0表示失败,==0表示成功。
  4954 + */
  4955 + short USER_API dc_BtModeControl(HANDLE icdev, unsigned char mode);
  4956 +
  4957 + /**
  4958 + * @brief 蓝牙波特率查询/设置。
  4959 + * @par 说明:
  4960 + * 查询/设置蓝牙模块的通讯波特率,修改的是蓝牙模块端。
  4961 + * @param[in] icdev 设备标识符。
  4962 + * @param[in] flag 标记,0x00表示查询,0x01表示设置。
  4963 + * @param[in,out] value 波特率。
  4964 + * @n 0x00 - 9600。
  4965 + * @n 0x01 - 19200。
  4966 + * @n 0x02 - 38400。
  4967 + * @n 0x03 - 57600。
  4968 + * @n 0x04 - 115200。
  4969 + * @return <0表示失败,==0表示成功。
  4970 + */
  4971 + short USER_API dc_BtBaudrateControl(HANDLE icdev, unsigned char flag, unsigned char *value);
  4972 +
  4973 + /**
  4974 + * @brief 蓝牙连接密码查询/设置。
  4975 + * @par 说明:
  4976 + * 查询/设置蓝牙模块的连接密码。
  4977 + * @param[in] icdev 设备标识符。
  4978 + * @param[in] flag 标记,0x00表示查询,0x01表示设置。
  4979 + * @param[in,out] value 密码字符串,查询时请至少分配64个字节。
  4980 + * @return <0表示失败,==0表示成功。
  4981 + */
  4982 + short USER_API dc_BtPasswordControl(HANDLE icdev, unsigned char flag, char *value);
  4983 +
  4984 + /**
  4985 + * @brief 蓝牙模块地址查询/设置。
  4986 + * @par 说明:
  4987 + * 查询/设置蓝牙模块的地址。
  4988 + * @param[in] icdev 设备标识符。
  4989 + * @param[in] flag 标记,0x00表示查询,0x01表示设置。
  4990 + * @param[in,out] length 地址的长度。
  4991 + * @param[in,out] value 地址,查询时请至少分配64个字节。
  4992 + * @return <0表示失败,==0表示成功。
  4993 + */
  4994 + short USER_API dc_BtAddressControl(HANDLE icdev, unsigned char flag, unsigned char *length, unsigned char *value);
  4995 +
  4996 + /**
  4997 + * @brief 蓝牙模块名称查询/设置。
  4998 + * @par 说明:
  4999 + * 查询/设置蓝牙模块的名称。
  5000 + * @param[in] icdev 设备标识符。
  5001 + * @param[in] flag 标记,0x00表示查询,0x01表示设置。
  5002 + * @param[in,out] value 名称字符串,查询时请至少分配64个字节。
  5003 + * @return <0表示失败,==0表示成功。
  5004 + */
  5005 + short USER_API dc_BtNameControl(HANDLE icdev, unsigned char flag, char *value);
  5006 +
  5007 + /**
  5008 + * @brief 蓝牙用户自定义的配置命令。
  5009 + * @par 说明:
  5010 + * 采用读写EEPROM方式进行蓝牙模块的自定义配置。
  5011 + * @param[in] icdev 设备标识符。
  5012 + * @param[in] flag 标记,0x00表示读EEPROM,0x01表示写EEPROM或AT指令集模式。
  5013 + * @param[in] offset 偏移地址。
  5014 + * @param[in] length 数据的长度。
  5015 + * @param[in,out] value 数据。
  5016 + * @return <0表示失败,==0表示成功。
  5017 + */
  5018 + short USER_API dc_BtUserControl(HANDLE icdev, unsigned char flag, int offset, int length, unsigned char *value);
  5019 +
  5020 + /**
  5021 + * @brief 蓝牙软件复位。
  5022 + * @par 说明:
  5023 + * 对蓝牙模块进行软件复位。
  5024 + * @param[in] icdev 设备标识符。
  5025 + * @return <0表示失败,==0表示成功。
  5026 + */
  5027 + short USER_API dc_BtReset(HANDLE icdev);
  5028 +
  5029 + /**
  5030 + * @brief 蓝牙模块通讯测试。
  5031 + * @par 说明:
  5032 + * 蓝牙模块在蓝牙通讯模式下,用此接口可以测试蓝牙通讯是否通畅,数据发送成功后,监测相关串口是否有接收到该数据来判断通讯是否成功。
  5033 + * @param[in] icdev 设备标识符。
  5034 + * @param[in] length 发送数据的长度。
  5035 + * @param[in] value 发送数据。
  5036 + * @return <0表示失败,==0表示成功。
  5037 + */
  5038 + short USER_API dc_BtCommunicationTest(HANDLE icdev, int length, const unsigned char *value);
  5039 +
  5040 + /**
  5041 + * @brief 蓝牙波特率查询/设置。
  5042 + * @par 说明:
  5043 + * 查询/设置与蓝牙模块之间的通讯波特率,修改的是设备端。
  5044 + * @param[in] icdev 设备标识符。
  5045 + * @param[in] flag 标记,0x00表示查询,0x01表示设置。
  5046 + * @param[in,out] value 波特率。
  5047 + * @n 0x00 - 2400。
  5048 + * @n 0x01 - 4800。
  5049 + * @n 0x02 - 9600。
  5050 + * @n 0x03 - 14400。
  5051 + * @n 0x04 - 38400。
  5052 + * @n 0x05 - 57600。
  5053 + * @n 0x06 - 115200。
  5054 + * @n 0x07 - 256000。
  5055 + * @return <0表示失败,==0表示成功。
  5056 + */
  5057 + short USER_API dc_BtWithReaderBaudrateControl(HANDLE icdev, unsigned char flag, unsigned char *value);
  5058 +
  5059 + /**
  5060 + * @brief 蓝牙模块通讯。
  5061 + * @par 说明:
  5062 + * 与蓝牙模块进行通讯交互。
  5063 + * @param[in] icdev 设备标识符。
  5064 + * @param[in] slen 发送数据的长度。
  5065 + * @param[in] sdata 发送数据。
  5066 + * @param[out] rlen 返回数据的长度。
  5067 + * @param[out] rdata 返回的数据。
  5068 + * @return <0表示失败,==0表示成功。
  5069 + */
  5070 + short USER_API dc_BtCommand(HANDLE icdev, int slen, const unsigned char *sdata, int *rlen, unsigned char *rdata);
  5071 +
  5072 + /**
  5073 + * @brief 获取蓝牙信号强度。
  5074 + * @par 说明:
  5075 + * 获取蓝牙信号强度。
  5076 + * @param[in] icdev 设备标识符。
  5077 + * @param[out] state 状态,0x00表示蓝牙未连接,0x01表示蓝牙已连接。
  5078 + * @param[out] value 信号值。
  5079 + * @return <0表示失败,==0表示成功。
  5080 + */
  5081 + short USER_API dc_BtSignalStrength(HANDLE icdev, unsigned char *state, short *value);
  5082 +
  5083 + /**
  5084 + * @brief 获取蓝牙响应。
  5085 + * @par 说明:
  5086 + * 获取蓝牙模块当前执行命令的响应或数据。
  5087 + * @param[in] icdev 设备标识符。
  5088 + * @param[out] length 返回数据的长度。
  5089 + * @param[out] value 返回的数据。
  5090 + * @return <0表示失败,==0表示成功。
  5091 + */
  5092 + short USER_API dc_BtDataResponse(HANDLE icdev, int *length, unsigned char *value);
  5093 +
  5094 + /**
  5095 + * @brief 蓝牙数据透传。
  5096 + * @par 说明:
  5097 + * 此接口用于将从蓝牙接收到的数据透传到外设中,并返回从外设接收的数据。
  5098 + * @param[in] icdev 设备标识符。
  5099 + * @param[in] slen 发送数据的长度。
  5100 + * @param[in] sdata 发送数据。
  5101 + * @param[out] rlen 返回数据的长度。
  5102 + * @param[out] rdata 返回的数据。
  5103 + * @return <0表示失败,==0表示成功。
  5104 + */
  5105 + short USER_API dc_BtDataTransmit(HANDLE icdev, int slen, const unsigned char *sdata, int *rlen, unsigned char *rdata);
  5106 +
  5107 + /**
  5108 + * @brief SAM_A模块指令交互。
  5109 + * @par 说明:
  5110 + * 此接口用于操作居民身份证验证安全控制模块。
  5111 + * @param[in] icdev 设备标识符。
  5112 + * @param[in] code 指令代码。
  5113 + * @n 0x10FF - 复位SAM_A,无发送数据,无返回数据。
  5114 + * @n 0x11FF - SAM_A状态检测,无发送数据,无返回数据。
  5115 + * @n 0x12FF - 读SAM_A管理信息,无发送数据,返回数据为16个字节的SAM_A编号。
  5116 + * @n 0x2001 - 寻找居民身份证,无发送数据,返回数据为4个字节的0x00。
  5117 + * @n 0x2002 - 选取居民身份证,无发送数据,返回数据为8个字节的0x00。
  5118 + * @n 0x3001 - 读机读文字信息和相片信息,无发送数据,返回数据格式为:【2个字节文字信息长度(Big-Endian)】【2个字节相片信息长度(Big-Endian)】【文字信息(不大于256个字节)】【相片信息(不大于1024个字节)】。
  5119 + * @n 0x3010 - 读机读文字信息、相片信息和指纹信息,无发送数据,返回数据格式为:【2个字节文字信息长度(Big-Endian)】【2个字节相片信息长度(Big-Endian)】【2个字节指纹信息长度(Big-Endian)】【文字信息(不大于256个字节)】【相片信息(不大于1024个字节)】【指纹信息(不大于1024个字节)】。
  5120 + * @n 0x3003 - 读追加住址信息,无发送数据,返回数据为70个字节的追加住址信息。
  5121 + * @n 0x6000 - 设置UART接口速率,速率为115200bps,无发送数据,无返回数据。
  5122 + * @n 0x6001 - 设置UART接口速率,速率为57600bps,无发送数据,无返回数据。
  5123 + * @n 0x6002 - 设置UART接口速率,速率为38400bps,无发送数据,无返回数据。
  5124 + * @n 0x6003 - 设置UART接口速率,速率为19200bps,无发送数据,无返回数据。
  5125 + * @n 0x6004 - 设置UART接口速率,速率为9600bps,无发送数据,无返回数据。
  5126 + * @n 0x61FF - 设置SAM_A与射频模块一帧通信数据的最大字节数,发送数据为1个字节的最大字节数,取值返回为0x18~0xFF,默认值为0x58,无返回数据。
  5127 + * @param[in] slen 发送数据的长度。
  5128 + * @param[in] sdata 发送数据。
  5129 + * @param[out] rlen 返回数据的长度。
  5130 + * @param[out] rdata 返回的数据,请至少分配4096个字节。
  5131 + * @return <0表示失败,==0表示成功。
  5132 + */
  5133 + short USER_API dc_SamAControl(HANDLE icdev, int code, int slen, const unsigned char *sdata, int *rlen, unsigned char *rdata);
  5134 +
  5135 + /**
  5136 + * @brief 读身份证。
  5137 + * @par 说明:
  5138 + * 读取身份证的原始信息数据。
  5139 + * @param[in] icdev 设备标识符。
  5140 + * @param[in] type 类型。
  5141 + * @n 1 - 读取文字信息、相片信息和指纹信息。
  5142 + * @n 2 - 读取追加住址信息。
  5143 + * @n 3 - 读取文字信息、相片信息、指纹信息和追加住址信息。
  5144 + * @param[out] text_len 返回文字信息的长度。
  5145 + * @param[out] text 返回的文字信息,请至少分配256个字节。
  5146 + * @param[out] photo_len 返回相片信息的长度。
  5147 + * @param[out] photo 返回的相片信息,请至少分配1024个字节。
  5148 + * @param[out] fingerprint_len 返回指纹信息的长度。
  5149 + * @param[out] fingerprint 返回的指纹信息,请至少分配1024个字节。
  5150 + * @param[out] extra_len 返回追加住址信息的长度。
  5151 + * @param[out] extra 返回的追加住址信息,请至少分配70个字节。
  5152 + * @return <0表示失败,==0表示成功。
  5153 + */
  5154 + short USER_API dc_SamAReadCardInfo(HANDLE icdev, int type, int *text_len, unsigned char *text, int *photo_len, unsigned char *photo, int *fingerprint_len, unsigned char *fingerprint, int *extra_len, unsigned char *extra);
  5155 +
  5156 + /**
  5157 + * @brief 解析文字信息。
  5158 + * @par 说明:
  5159 + * 解析中国人居民身份证文字信息,获取相应的条目。
  5160 + * @param[in] icdev 设备标识符。
  5161 + * @param[in] charset 获取条目将采用的字符集,0表示GBK,1表示UCS-2。
  5162 + * @param[in] info_len 文字信息的长度。
  5163 + * @param[in] info 文字信息。
  5164 + * @param[out] name 姓名,请至少分配64个字节。
  5165 + * @param[out] sex 性别,请至少分配8个字节。
  5166 + * @param[out] nation 民族,请至少分配12个字节。
  5167 + * @param[out] birth_day 出生日期,请至少分配36个字节。
  5168 + * @param[out] address 住址,请至少分配144个字节。
  5169 + * @param[out] id_number 公民身份号码,请至少分配76个字节。
  5170 + * @param[out] department 签发机关,请至少分配64个字节。
  5171 + * @param[out] expire_start_day 证件签发日期,请至少分配36个字节。
  5172 + * @param[out] expire_end_day 证件终止日期,请至少分配36个字节。
  5173 + * @param[out] reserved 预留项,请至少分配76个字节。
  5174 + * @return <0表示失败,==0表示成功。
  5175 + */
  5176 + short USER_API dc_ParseTextInfo(HANDLE icdev, int charset, int info_len, const unsigned char *info, unsigned char *name, unsigned char *sex, unsigned char *nation, unsigned char *birth_day, unsigned char *address, unsigned char *id_number, unsigned char *department, unsigned char *expire_start_day, unsigned char *expire_end_day, unsigned char *reserved);
  5177 +
  5178 + /**
  5179 + * @brief 解析文字信息。
  5180 + * @par 说明:
  5181 + * 解析外国人永久居留证文字信息,获取相应的条目。
  5182 + * @param[in] icdev 设备标识符。
  5183 + * @param[in] charset 获取条目将采用的字符集,0表示GBK,1表示UCS-2。
  5184 + * @param[in] info_len 文字信息的长度。
  5185 + * @param[in] info 文字信息。
  5186 + * @param[out] english_name 英文姓名,请至少分配244个字节。
  5187 + * @param[out] sex 性别,请至少分配8个字节。
  5188 + * @param[out] id_number 永久居留证号码,请至少分配64个字节。
  5189 + * @param[out] citizenship 国籍或所在地区代码,请至少分配16个字节。
  5190 + * @param[out] chinese_name 中文姓名,请至少分配64个字节。
  5191 + * @param[out] expire_start_day 证件签发日期,请至少分配36个字节。
  5192 + * @param[out] expire_end_day 证件终止日期,请至少分配36个字节。
  5193 + * @param[out] birth_day 出生日期,请至少分配36个字节。
  5194 + * @param[out] version_number 证件版本号,请至少分配12个字节。
  5195 + * @param[out] department_code 当次申请受理机关代码,请至少分配20个字节。
  5196 + * @param[out] type_sign 证件类型标识,请至少分配8个字节。
  5197 + * @param[out] reserved 预留项,请至少分配16个字节。
  5198 + * @return <0表示失败,==0表示成功。
  5199 + */
  5200 + short USER_API dc_ParseTextInfoForForeigner(HANDLE icdev, int charset, int info_len, const unsigned char *info, unsigned char *english_name, unsigned char *sex, unsigned char *id_number, unsigned char *citizenship, unsigned char *chinese_name, unsigned char *expire_start_day, unsigned char *expire_end_day, unsigned char *birth_day, unsigned char *version_number, unsigned char *department_code, unsigned char *type_sign, unsigned char *reserved);
  5201 +
  5202 + /**
  5203 + * @brief 解析相片信息。
  5204 + * @par 说明:
  5205 + * 解析相片信息,通过公安部相片解码库还原相片图像数据。
  5206 + * @param[in] icdev 设备标识符。
  5207 + * @param[in] type 相片图像数据的格式,0表示BMP文件,1表示BMP缓存。
  5208 + * @param[in] info_len 相片信息的长度。
  5209 + * @param[in] info 相片信息。
  5210 + * @param[in,out] photo_len 数据的长度。
  5211 + * @n BMP文件 - 无效。
  5212 + * @n BMP缓存 - 传入 @a photo 分配的字节数,返回相片图像数据的长度。
  5213 + * @param[in,out] photo 数据。
  5214 + * @n BMP文件 - 传入文件名,请确保有写入的权限。
  5215 + * @n BMP缓存 - 返回的相片图像数据,请至少分配65536个字节。
  5216 + * @return <0表示失败,==0表示成功。
  5217 + */
  5218 + short USER_API dc_ParsePhotoInfo(HANDLE icdev, int type, int info_len, const unsigned char *info, int *photo_len, unsigned char *photo);
  5219 +
  5220 + /**
  5221 + * @brief 解析其它信息。
  5222 + * @par 说明:
  5223 + * 解析其它信息。
  5224 + * @param[in] icdev 设备标识符。
  5225 + * @param[in] flag 标志,0表示性别,1表示民族,2表示国籍。
  5226 + * @param[in] in_info 传入信息。
  5227 + * @param[out] out_info 返回的信息。
  5228 + * @return <0表示失败,==0表示成功。
  5229 + */
  5230 + short USER_API dc_ParseOtherInfo(HANDLE icdev, int flag, const unsigned char *in_info, unsigned char *out_info);
  5231 +
  5232 + /**
  5233 + * @brief 检测接触式CPU卡。
  5234 + * @par 说明:
  5235 + * 检测当前卡座中CPU卡的状态。
  5236 + * @param[in] icdev 设备标识符。
  5237 + * @return <0表示失败。
  5238 + * @n 0 - 状态未知。
  5239 + * @n 1 - 无卡。
  5240 + * @n 2 - 有卡,但卡类型未知。
  5241 + * @n 3 - 有卡,卡未上电。
  5242 + * @n 4 - 有卡,卡已上电。
  5243 + */
  5244 + short USER_API dc_CpuCardStatus(HANDLE icdev);
  5245 +
  5246 + /**
  5247 + * @brief 唤醒设备。
  5248 + * @par 说明:
  5249 + * 唤醒设备,此接口用于向设备发出唤醒请求,成功则表示设备已经唤醒。
  5250 + * @param[in] icdev 设备标识符。
  5251 + * @return <0表示失败,==0表示成功。
  5252 + */
  5253 + short USER_API dc_WakeDevice(HANDLE icdev);
  5254 +
  5255 + /**
  5256 + * @brief 休眠设备。
  5257 + * @par 说明:
  5258 + * 休眠设备,此接口用于向设备发出休眠请求,执行成功仅仅表示成功发出休眠请求,并不表示设备已经进入休眠状态。
  5259 + * @param[in] icdev 设备标识符。
  5260 + * @return <0表示失败,==0表示成功。
  5261 + */
  5262 + short USER_API dc_RestDevice(HANDLE icdev);
  5263 +
  5264 + /**
  5265 + * @brief 获取电池电量。
  5266 + * @par 说明:
  5267 + * 获取电池电量。
  5268 + * @param[in] icdev 设备标识符。
  5269 + * @param[out] value 电池百分比(0x00~0x64),0x00表示0%,0x64表示100%。
  5270 + * @return <0表示失败,==0表示成功。
  5271 + */
  5272 + short USER_API dc_GetBatteryValue(HANDLE icdev, unsigned char *value);
  5273 +
  5274 + /**
  5275 + * @brief 防卡冲突。
  5276 + * @par 说明:
  5277 + * 支持ISO 14443 Type A类型卡片的防卡冲突。
  5278 + * @param[in] icdev 设备标识符。
  5279 + * @param[in] mode 模式,0x93表示一级,0x95表示二级,0x97表示三级。
  5280 + * @param[in] _Bcnt 保留,固定为0x00。
  5281 + * @param[out] _Snr 返回的卡序列号。
  5282 + * @return <0表示失败,==0表示成功。
  5283 + */
  5284 + short USER_API dc_anticoll_mode(HANDLE icdev, unsigned char mode, unsigned char _Bcnt, unsigned int *_Snr);
  5285 +
  5286 + /**
  5287 + * @brief 选卡操作。
  5288 + * @par 说明:
  5289 + * 通过指定序列号,选取相应的卡片。
  5290 + * @param[in] icdev 设备标识符。
  5291 + * @param[in] mode 模式,0x93表示一级,0x95表示二级,0x97表示三级。
  5292 + * @param[in] _Snr 卡片序列号。
  5293 + * @param[out] _Size 返回的SAK值。
  5294 + * @return <0表示失败,==0表示成功。
  5295 + */
  5296 + short USER_API dc_select_mode(HANDLE icdev, unsigned char mode, unsigned int _Snr, unsigned char *_Size);
  5297 +
  5298 + /**
  5299 + * @brief 激活卡片。
  5300 + * @par 说明:
  5301 + * 支持ISO 14443 Type B类型卡片的激活。
  5302 + * @param[in] icdev 设备标识符。
  5303 + * @param[in] PUPI 伪唯一PICC标识符。
  5304 + * @param[in] CID 信道号。
  5305 + * @return <0表示失败,==0表示成功。
  5306 + */
  5307 + short USER_API dc_attribInt(HANDLE icdev, unsigned char *PUPI, unsigned char CID);
  5308 +
  5309 + /**
  5310 + * @brief 卡上电。
  5311 + * @par 说明:
  5312 + * 对指定卡座的卡片进行上电操作。
  5313 + * @param[in] icdev 设备标识符。
  5314 + * @param[in] icc_slot_no 卡座编号,用户卡为0x0n,SAM卡为0x1n,其中“n”的取值范围为1~F。
  5315 + * @param[out] response 返回的复位信息,请至少分配128个字节。
  5316 + * @return <0表示失败,否则为返回复位信息的长度。
  5317 + * @n -1 - 卡片类型不对。
  5318 + * @n -2 - 无卡。
  5319 + * @n -3 - 有卡未上电。
  5320 + * @n -4 - 卡片无应答。
  5321 + */
  5322 + short USER_API dc_rf_poweron(HANDLE icdev, unsigned char icc_slot_no, unsigned char *response);
  5323 +
  5324 + /**
  5325 + * @brief 卡下电。
  5326 + * @par 说明:
  5327 + * 对指定卡座的卡片进行下电操作。
  5328 + * @param[in] icdev 设备标识符。
  5329 + * @param[in] icc_slot_no 卡座编号,用户卡为0x0n,SAM卡为0x1n,其中“n”的取值范围为1~F。
  5330 + * @return <0表示失败,==0表示成功。
  5331 + * @n -1 - 卡片类型不对。
  5332 + * @n -2 - 无卡。
  5333 + * @n -3 - 有卡未上电。
  5334 + * @n -4 - 卡片无应答。
  5335 + */
  5336 + short USER_API dc_rf_poweroff(HANDLE icdev, unsigned char icc_slot_no);
  5337 +
  5338 + /**
  5339 + * @brief 获取卡状态。
  5340 + * @par 说明:
  5341 + * 获取指定卡座的卡片状态。
  5342 + * @param[in] icdev 设备标识符。
  5343 + * @param[in] icc_slot_no 卡座编号,用户卡为0x0n,SAM卡为0x1n,其中“n”的取值范围为1~F。
  5344 + * @return <0表示失败,==0表示有卡且已上电。
  5345 + * @n -1 - 卡片类型不对。
  5346 + * @n -2 - 无卡。
  5347 + * @n -3 - 有卡未上电。
  5348 + * @n -4 - 卡片无应答。
  5349 + */
  5350 + short USER_API dc_rf_getstatus(HANDLE icdev, unsigned char icc_slot_no);
  5351 +
  5352 + /**
  5353 + * @brief 卡指令交互。
  5354 + * @par 说明:
  5355 + * 对指定卡座的卡片进行指令交互操作。
  5356 + * @param[in] icdev 设备标识符。
  5357 + * @param[in] icc_slot_no 卡座编号,用户卡为0x0n,SAM卡为0x1n,其中“n”的取值范围为1~F。
  5358 + * @param[in] length_of_command_apdu 发送数据的长度。
  5359 + * @param[in] command_apdu 发送数据的长度。
  5360 + * @param[in] length_of_command_apdu 发送数据。
  5361 + * @param[out] response_apdu 返回的数据。
  5362 + * @return <0表示失败,否则为返回数据的长度。
  5363 + * @n -1 - 卡片类型不对。
  5364 + * @n -2 - 无卡。
  5365 + * @n -3 - 有卡未上电。
  5366 + * @n -4 - 卡片无应答。
  5367 + */
  5368 + short USER_API dc_rf_application(HANDLE icdev, unsigned char icc_slot_no, int length_of_command_apdu, unsigned char *command_apdu, unsigned char *response_apdu);
  5369 +
  5370 + /**
  5371 + * @brief 获取多张Type A卡UID。
  5372 + * @par 说明:
  5373 + * 获取多张Type A卡UID。
  5374 + * @param[in] icdev 设备标识符。
  5375 + * @param[out] uid_data 返回的数据,请至少分配256个字节。格式为:【1字节UID条目数量】【1字节UID长度】【UID】【1字节UID2长度】【UID2】...。
  5376 + * @return <0表示失败,==0表示成功。
  5377 + */
  5378 + short USER_API dc_RequestMultiCard(HANDLE icdev, unsigned char *uid_data);
  5379 +
  5380 + /**
  5381 + * @brief 选择一张Type A卡并激活。
  5382 + * @par 说明:
  5383 + * 选择一张Type A卡并激活。
  5384 + * @param[in] icdev 设备标识符。
  5385 + * @param[in] uid_len 传入UID的长度。
  5386 + * @param[in] uid 传入UID。
  5387 + * @return <0表示失败,==0表示成功。
  5388 + */
  5389 + short USER_API dc_ActivateCard(HANDLE icdev, unsigned char uid_len, const unsigned char *uid);
  5390 +
  5391 + /**
  5392 + * @brief 获取最后响应码。
  5393 + * @par 说明:
  5394 + * 获取最后一次和设备交互时设备返回的响应状态代码,此接口获取的响应码依赖设备内部固件代码的实现,不同的设备可能有不一致的响应码。
  5395 + * @param[in] icdev 设备标识符。
  5396 + * @param[out] code 返回的响应码。
  5397 + * @return <0表示失败,==0表示成功。
  5398 + */
  5399 + short USER_API dc_GetLastResponseCode(HANDLE icdev, unsigned int *code);
  5400 +
  5401 + /**
  5402 + * @brief 多个Flash扇区擦除。
  5403 + * @par 说明:
  5404 + * 擦除指定Flash扇区中的数据。
  5405 + * @param[in] icdev 设备标识符。
  5406 + * @param[in] type 类型,0x00表示核心板上的Flash,0x01表示主Spi的Flash,0x02表示备份Spi的Flash,0x03表示语音存储的Flash,0x04表示字库存储的Flash。
  5407 + * @param[in] sector 扇区地址,0xFFFFFFFF表示擦除全部。
  5408 + * @return <0表示失败,==0表示成功。
  5409 + */
  5410 + short USER_API dc_MultiFlashErase(HANDLE icdev, unsigned char type, unsigned int sector);
  5411 +
  5412 + /**
  5413 + * @brief 多个Flash读数据。
  5414 + * @par 说明:
  5415 + * 读取指定Flash中的数据。
  5416 + * @param[in] icdev 设备标识符。
  5417 + * @param[in] type 类型,0x00表示核心板上的Flash,0x01表示主Spi的Flash,0x02表示备份Spi的Flash,0x03表示语音存储的Flash,0x04表示字库存储的Flash。
  5418 + * @param[in] offset_h 偏移地址(高位)。
  5419 + * @param[in] offset_l 偏移地址(低位)。
  5420 + * @param[in] length_h 读取长度(高位)。
  5421 + * @param[in] length_l 读取长度(低位)。
  5422 + * @param[out] data_buffer 返回的数据。
  5423 + * @return <0表示失败,==0表示成功。
  5424 + */
  5425 + short USER_API dc_MultiFlashRead(HANDLE icdev, unsigned char type, unsigned int offset_h, unsigned int offset_l, unsigned int length_h, unsigned int length_l, unsigned char *data_buffer);
  5426 +
  5427 + /**
  5428 + * @brief 多个Flash写数据。
  5429 + * @par 说明:
  5430 + * 写入数据到指定Flash中。
  5431 + * @param[in] icdev 设备标识符。
  5432 + * @param[in] type 类型,0x00表示核心板上的Flash,0x01表示主Spi的Flash,0x02表示备份Spi的Flash,0x03表示语音存储的Flash,0x04表示字库存储的Flash。
  5433 + * @param[in] offset_h 偏移地址(高位)。
  5434 + * @param[in] offset_l 偏移地址(低位)。
  5435 + * @param[in] length_h 读取长度(高位)。
  5436 + * @param[in] length_l 读取长度(低位)。
  5437 + * @param[in] data_buffer 传入数据。
  5438 + * @return <0表示失败,==0表示成功。
  5439 + */
  5440 + short USER_API dc_MultiFlashWrite(HANDLE icdev, unsigned char type, unsigned int offset_h, unsigned int offset_l, unsigned int length_h, unsigned int length_l, const unsigned char *data_buffer);
  5441 +
  5442 + /**
  5443 + * @brief 多个FLASH容量大小获取。
  5444 + * @par 说明:
  5445 + * 获取指定Flash的容量大小。
  5446 + * @param[in] icdev 设备标识符。
  5447 + * @param[in] type 类型,0x00表示核心板上的Flash,0x01表示主Spi的Flash,0x02表示备份Spi的Flash,0x03表示语音存储的Flash,0x04表示字库存储的Flash。
  5448 + * @param[out] length_h 返回的长度(高位)。
  5449 + * @param[out] length_l 返回的长度(低位)。
  5450 + * @return <0表示失败,==0表示成功。
  5451 + */
  5452 + short USER_API dc_MultiFlashGetSize(HANDLE icdev, unsigned char type, unsigned int *length_h, unsigned int *length_l);
  5453 +
  5454 + /**
  5455 + * @brief 多重寻卡。
  5456 + * @par 说明:
  5457 + * 有卡寻卡、无卡寻卡、多卡防冲突。
  5458 + * @param[in] icdev 设备标识符。
  5459 + * @return <0表示失败。
  5460 + * @n 0 - 操作成功。
  5461 + * @n 1 - 未检测到射频卡。
  5462 + * @n 2 - 检测到身份证。
  5463 + * @n 3 - 多卡报错。
  5464 + * @n 4 - 其它射频卡。
  5465 + * @n 5 - 检测到Type A / Type B CPU卡。
  5466 + * @n 6 - 检测到有卡后的卡片还在感应区。
  5467 + */
  5468 + short USER_API dc_RfMultiRequest(HANDLE icdev);
  5469 +
  5470 + /**
  5471 + * @brief TTS语音播放。
  5472 + * @par 说明:
  5473 + * TTS语音播放。
  5474 + * @param[in] icdev 设备标识符。
  5475 + * @param[in] type 类型,0x00表示停止播放,0x01表示播放内容为UCS2编码,0x02表示播放内容为GBK编码。
  5476 + * @param[in] content 播放内容。
  5477 + * @param[in] content_len 播放内容的长度。
  5478 + * @return <0表示失败,==0表示成功。
  5479 + */
  5480 + short USER_API dc_TtsVoicePlay(HANDLE icdev, unsigned char type, const unsigned char *content, int content_len);
  5481 +
  5482 + /**
  5483 + * @brief TTS语音设置。
  5484 + * @par 说明:
  5485 + * TTS语音设置。
  5486 + * @param[in] icdev 设备标识符。
  5487 + * @param[in] type 类型,0x01表示设置语速,0x02表示设置音量,0x03表示设置音色。
  5488 + * @param[in] value 增益值(0x00~0xFF),正常为0x80。
  5489 + * @return <0表示失败,==0表示成功。
  5490 + */
  5491 + short USER_API dc_TtsVoiceConfig(HANDLE icdev, unsigned char type, unsigned char value);
  5492 +
  5493 + /**
  5494 + * @brief 配置二维码工作模式。
  5495 + * @par 说明:
  5496 + * 配置二维码工作模式。
  5497 + * @param[in] icdev 设备标识符。
  5498 + * @param[in] content 配置内容。
  5499 + * @param[in] content_len 配置内容的长度。
  5500 + * @return <0表示失败,==0表示成功。
  5501 + */
  5502 + short USER_API dc_Config2DBarcode(HANDLE icdev, const unsigned char *content, int content_len);
  5503 +
  5504 + /**
  5505 + * @brief 扫描二维码。
  5506 + * @par 说明:
  5507 + * 扫描二维码。
  5508 + * @param[in] icdev 设备标识符。
  5509 + * @param[in] time_ms 设备超时值,单位为毫秒。
  5510 + * @param[out] message_data 二维码,数据格式为'\0'结尾的字符串。
  5511 + * @return <0表示失败,==0表示成功。
  5512 + */
  5513 + short USER_API dc_Scan2DBarcode(HANDLE icdev, unsigned short time_ms, char *message_data);
  5514 +
  5515 + /**
  5516 + * @brief 打开密码键盘。
  5517 + * @par 说明:
  5518 + * 打开密码键盘并且分配相关资源。
  5519 + * @param[in] icdev 设备标识符。
  5520 + * @param[in] number 编号,0表示内置密码键盘,1表示外置密码键盘。
  5521 + * @param[out] version 返回的版本字符串,请至少分配128个字节。
  5522 + * @return <0表示失败,==0表示成功。
  5523 + */
  5524 + short USER_API dc_KeypadOpen(HANDLE icdev, int number, char *version);
  5525 +
  5526 + /**
  5527 + * @brief 关闭密码键盘。
  5528 + * @par 说明:
  5529 + * 关闭密码键盘并且释放相关资源。
  5530 + * @param[in] icdev 设备标识符。
  5531 + * @param[in] number 编号,0表示内置密码键盘,1表示外置密码键盘。
  5532 + * @return <0表示失败,==0表示成功。
  5533 + */
  5534 + short USER_API dc_KeypadClose(HANDLE icdev, int number);
  5535 +
  5536 + /**
  5537 + * @brief 装载密钥。
  5538 + * @par 说明:
  5539 + * 装载密钥到密码键盘中永久保存。
  5540 + * @param[in] icdev 设备标识符。
  5541 + * @param[in] number 编号,0表示内置密码键盘,1表示外置密码键盘。
  5542 + * @param[in] set_index 密钥套索引(0~15)。
  5543 + * @param[in] sub_index 密钥索引(0~15),其中0表示主密钥。
  5544 + * @param[in] type 密钥类型,0表示单DES,1表示三DES,2表示24字节三DES,16表示SM4。
  5545 + * @param[in] mode 装载模式,0表示明文装载,1表示密文装载。
  5546 + * @param[in] key_data 密钥数据。
  5547 + * @param[in] key_len 密钥数据的长度。
  5548 + * @param[in] flag 标志,0表示不验证,1表示验证类别1,2表示验证类别2。
  5549 + * @param[in,out] ex_data 附加数据,含义由 @a flag 的值来决定。
  5550 + * @n flag为1 - ex_data为out形式的参数,返回加密全0x00后的数据。
  5551 + * @n flag为2 - ex_data为In形式的参数,传入加密全0x00后的数据。
  5552 + * @param[in,out] ex_len 附加数据的长度,含义由 @a flag 的值来决定。
  5553 + * @n flag为1 - ex_len为Out形式的参数,返回 @a ex_data 的长度。
  5554 + * @n flag为2 - ex_len为In形式的参数,传入 @a ex_data 的长度。
  5555 + * @return <0表示失败,==0表示成功。
  5556 + */
  5557 + short USER_API dc_KeypadLoadKey(HANDLE icdev, int number, int set_index, int sub_index, int type, int mode, const unsigned char *key_data, int key_len, int flag, unsigned char *ex_data, int *ex_len);
  5558 +
  5559 + /**
  5560 + * @brief 清除密钥。
  5561 + * @par 说明:
  5562 + * 清除密码键盘中指定的密钥。
  5563 + * @param[in] icdev 设备标识符。
  5564 + * @param[in] number 编号,0表示内置密码键盘,1表示外置密码键盘。
  5565 + * @param[in] set_index 密钥套索引(0~15),-1表示全部密钥套。
  5566 + * @param[in] sub_index 密钥索引(0~15),其中0表示主密钥,-1表示全部密钥。
  5567 + * @return <0表示失败,==0表示成功。
  5568 + */
  5569 + short USER_API dc_KeypadClearKey(HANDLE icdev, int number, int set_index, int sub_index);
  5570 +
  5571 + /**
  5572 + * @brief 获取密钥类型。
  5573 + * @par 说明:
  5574 + * 获取密码键盘中指定密钥的类型。
  5575 + * @param[in] icdev 设备标识符。
  5576 + * @param[in] number 编号,0表示内置密码键盘,1表示外置密码键盘。
  5577 + * @param[in] set_index 密钥套索引(0~15)。
  5578 + * @param[in] sub_index 密钥索引(0~15),其中0表示主密钥。
  5579 + * @param[out] type 密钥类型,0表示单DES,1表示三DES,2表示24字节三DES,16表示SM4。
  5580 + * @return <0表示失败,==0表示成功。
  5581 + */
  5582 + short USER_API dc_KeypadGetKeyType(HANDLE icdev, int number, int set_index, int sub_index, int *type);
  5583 +
  5584 + /**
  5585 + * @brief 数据加解密。
  5586 + * @par 说明:
  5587 + * 使用密码键盘中装载的密钥进行数据加解密操作。
  5588 + * @param[in] icdev 设备标识符。
  5589 + * @param[in] number 编号,0表示内置密码键盘,1表示外置密码键盘。
  5590 + * @param[in] set_index 密钥套索引(0~15)。
  5591 + * @param[in] sub_index 密钥索引(0~15),其中0表示主密钥。
  5592 + * @param[in] flag 标志,0表示使用密钥默认算法,1表示使用密钥0~7字节算单DES,2表示使用密钥8~15字节算单DES,3表示使用密钥16~23字节算单DES。
  5593 + * @param[in] mode 模式,0表示加密,1表示解密。
  5594 + * @param[in] in_data 输入数据。
  5595 + * @param[in] in_len 输入数据的长度。
  5596 + * @param[out] out_data 输出数据。
  5597 + * @param[out] out_len 输出数据的长度。
  5598 + * @return <0表示失败,==0表示成功。
  5599 + */
  5600 + short USER_API dc_KeypadAlgorithm(HANDLE icdev, int number, int set_index, int sub_index, int flag, int mode, const unsigned char *in_data, int in_len, unsigned char *out_data, int *out_len);
  5601 +
  5602 + /**
  5603 + * @brief 启动按键输入。
  5604 + * @par 说明:
  5605 + * 启动密码键盘的按键输入,这时设备将开始接收用户的按键输入操作。
  5606 + * @param[in] icdev 设备标识符。
  5607 + * @param[in] number 编号,0表示内置密码键盘,1表示外置密码键盘。
  5608 + * @param[in] mode 模式,0表示获取明文,1表示获取ANSI X9.8 PIN BLOCK加密的按键数据,2表示获取IBM3624加密的按键数据,3表示获取ANSII加密的按键数据。
  5609 + * @param[in] set_index 密钥套索引(0~15),明文模式内部将忽略它的传入。
  5610 + * @param[in] sub_index 密钥索引(0~15),其中0表示主密钥,明文模式内部将忽略它的传入。
  5611 + * @param[in] in_data 输入数据,依赖于模式,明文模式内部将忽略它的传入,密文模式为卡号,固定为12个字节。
  5612 + * @param[in] in_len 输入数据的长度。
  5613 + * @param[in] min_len 最小长度。
  5614 + * @param[in] max_len 最大长度。
  5615 + * @param[in] auto_end 按键时结束控制(此处的结束表示的仅仅是设备是否会自动加入【确认】键值),0表示不自动结束,1表示自动结束。
  5616 + * @param[in] enable_beep 按键时蜂鸣声控制,0表示不使用蜂鸣,1表示使用蜂鸣。
  5617 + * @param[in] time_s 从开始按键后,两次按键之间的时间间隔超时值,单位为秒,其中-1表示不使用时间间隔超时值,0表示缺省值(由设备实现决定)。
  5618 + * @param[out] out_data 输出数据。
  5619 + * @param[out] out_len 输出数据的长度。
  5620 + * @return <0表示失败,==0表示成功。
  5621 + */
  5622 + short USER_API dc_KeypadStartInput(HANDLE icdev, int number, int mode, int set_index, int sub_index, const unsigned char *in_data, int in_len, int min_len, int max_len, int auto_end, int enable_beep, int time_s, unsigned char *out_data, int *out_len);
  5623 +
  5624 + /**
  5625 + * @brief 获取键值。
  5626 + * @par 说明:
  5627 + * 获取一个按下的按键值,每次只能获取一个。
  5628 + * @param[in] icdev 设备标识符。
  5629 + * @param[in] number 编号,0表示内置密码键盘,1表示外置密码键盘。
  5630 + * @param[out] value 明文输入模式下数值键为键值的ASCII值,如键盘1为0x31;密文输入模式下数值键为0x2A;任何输入模式下控制键的键值一致,【退格】为0x08,【确认】为0x0D,【取消】为0x1B,【清除】为0x7F;另外没有按键按下为0xFF,输入超时为0x80。
  5631 + * @return <0表示失败,==0表示成功。
  5632 + */
  5633 + short USER_API dc_KeypadGetKeyValue(HANDLE icdev, int number, unsigned char *value);
  5634 +
  5635 + /**
  5636 + * @brief 退出并且获取密码数据。
  5637 + * @par 说明:
  5638 + * 退出并且获取密码键盘的密码数据,这时设备将停止接收用户的按键输入操作。
  5639 + * @param[in] icdev 设备标识符。
  5640 + * @param[in] number 编号,0表示内置密码键盘,1表示外置密码键盘。
  5641 + * @param[in] mode 模式,0表示仅退出,1表示退出并且获取数据。
  5642 + * @param[out] out_data 输出数据。
  5643 + * @param[out] out_len 输出数据的长度。
  5644 + * @return <0表示失败,==0表示成功。
  5645 + */
  5646 + short USER_API dc_KeypadExitAndGetInput(HANDLE icdev, int number, int mode, unsigned char *out_data, int *out_len);
  5647 +
  5648 + /**
  5649 + * @brief 设置键值。
  5650 + * @par 说明:
  5651 + * 设置一个按下的按键值,每次只能设置一个。
  5652 + * @param[in] icdev 设备标识符。
  5653 + * @param[in] number 编号,0表示内置密码键盘,1表示外置密码键盘。
  5654 + * @param[in] value 数值键为键值的ASCII值,如键盘1为0x31;控制键【退格】为0x08,【确认】为0x0D,【取消】为0x1B,【清除】为0x7F。
  5655 + * @return <0表示失败,==0表示成功。
  5656 + */
  5657 + short USER_API dc_KeypadSetKeyValue(HANDLE icdev, int number, unsigned char value);
  5658 +
  5659 + /**
  5660 + * @brief 获取设备唯一识别码。
  5661 + * @par 说明:
  5662 + * 获取设备内部写入的唯一识别码。
  5663 + * @param[in] icdev 设备标识符。
  5664 + * @param[out] uid 返回的唯一识别码字符串,请至少分配33个字节。
  5665 + * @return <0表示失败,==0表示成功。
  5666 + */
  5667 + short USER_API dc_GetDeviceUid(HANDLE icdev, char *uid);
  5668 +
  5669 + /**
  5670 + * @brief 获取设备商户号。
  5671 + * @par 说明:
  5672 + * 获取设备内部写入的商户号。
  5673 + * @param[in] icdev 设备标识符。
  5674 + * @param[out] number 返回的商户号字符串,请至少分配33个字节。
  5675 + * @return <0表示失败,==0表示成功。
  5676 + */
  5677 + short USER_API dc_GetDeviceTradeNumber(HANDLE icdev, char *number);
  5678 +
  5679 + /**
  5680 + * @brief 获取设备终端号。
  5681 + * @par 说明:
  5682 + * 获取设备内部写入的终端号。
  5683 + * @param[in] icdev 设备标识符。
  5684 + * @param[out] number 返回的终端号字符串,请至少分配33个字节。
  5685 + * @return <0表示失败,==0表示成功。
  5686 + */
  5687 + short USER_API dc_GetDeviceTerminalNumber(HANDLE icdev, char *number);
  5688 +
  5689 + /**
  5690 + * @brief 读取设备自定义信息。
  5691 + * @par 说明:
  5692 + * 读取设备自定义信息。
  5693 + * @param[in] icdev 设备标识符。
  5694 + * @param[out] info 返回的信息,固定为8个字节。
  5695 + * @return <0表示失败,==0表示成功。
  5696 + */
  5697 + short USER_API dc_ReadDeviceCustomInfo(HANDLE icdev, unsigned char *info);
  5698 +
  5699 + /**
  5700 + * @brief 写入设备自定义信息。
  5701 + * @par 说明:
  5702 + * 写入设备自定义信息。
  5703 + * @param[in] icdev 设备标识符。
  5704 + * @param[in] info 传入信息,固定为8个字节。
  5705 + * @return <0表示失败,==0表示成功。
  5706 + */
  5707 + short USER_API dc_WriteDeviceCustomInfo(HANDLE icdev, const unsigned char *info);
  5708 +
  5709 + /**
  5710 + * @brief 读取设备型号名称。
  5711 + * @par 说明:
  5712 + * 读取设备型号名称。
  5713 + * @param[in] icdev 设备标识符。
  5714 + * @param[out] name 返回的型号名称字符串,请至少分配33个字节。
  5715 + * @return <0表示失败,==0表示成功。
  5716 + */
  5717 + short USER_API dc_ReadDeviceTypeName(HANDLE icdev, char *name);
  5718 +
  5719 + /**
  5720 + * @brief 写入设备型号名称。
  5721 + * @par 说明:
  5722 + * 写入设备型号名称。
  5723 + * @param[in] icdev 设备标识符。
  5724 + * @param[in] name 传入型号名称,数据格式为'\0'结尾的字符串。
  5725 + * @return <0表示失败,==0表示成功。
  5726 + */
  5727 + short USER_API dc_WriteDeviceTypeName(HANDLE icdev, const char *name);
  5728 +
  5729 + /**
  5730 + * @brief 无线模块电源控制。
  5731 + * @par 说明:
  5732 + * 无线模块电源控制。
  5733 + * @param[in] icdev 设备标识符。
  5734 + * @param[in] value 开关,0x00表示关闭,0x01表示开启。
  5735 + * @return <0表示失败,==0表示成功。
  5736 + */
  5737 + short USER_API dc_WirelessPowerControl(HANDLE icdev, unsigned char value);
  5738 +
  5739 + /**
  5740 + * @brief 打开TCP链接。
  5741 + * @par 说明:
  5742 + * 打开TCP链接。
  5743 + * @param[in] icdev 设备标识符。
  5744 + * @param[in] type 无线模块类型,0x00表示CDMA,0x01表示GPRS,0x02表示WIFI。
  5745 + * @param[in] network_address IP地址或域名,数据格式为'\0'结尾的字符串。
  5746 + * @param[in] network_port IP端口号,数据格式为'\0'结尾的字符串。
  5747 + * @return <0表示失败,==0表示成功。
  5748 + */
  5749 + short USER_API dc_WirelessTcpOpen(HANDLE icdev, unsigned char type, const char *network_address, const char *network_port);
  5750 +
  5751 + /**
  5752 + * @brief 关闭TCP链接。
  5753 + * @par 说明:
  5754 + * 关闭TCP链接。
  5755 + * @param[in] icdev 设备标识符。
  5756 + * @return <0表示失败,==0表示成功。
  5757 + */
  5758 + short USER_API dc_WirelessTcpClose(HANDLE icdev);
  5759 +
  5760 + /**
  5761 + * @brief 查询网络状态。
  5762 + * @par 说明:
  5763 + * 查询网络状态。
  5764 + * @param[in] icdev 设备标识符。
  5765 + * @param[out] value 状态值,固定为1个字节。
  5766 + * @n 0x00 - 表示TCP初始状态。
  5767 + * @n 0x01 - 表示无线模块无法通讯。
  5768 + * @n 0x02 - 表示无线模块电源关闭。
  5769 + * @n 0x03 - 表示无线模块电源开启。
  5770 + * @n 0x04 - 表示SIM卡异常或者无卡。
  5771 + * @n 0x05 - 表示网络信号异常。
  5772 + * @n 0x06 - 表示无线模块自检成功。
  5773 + * @n 0x07 - 表示TCP空闲状态。
  5774 + * @n 0x08 - 表示TCP已经连接成功。
  5775 + * @n 0x09 - 表示TCP已经断开连接。
  5776 + * @return <0表示失败,==0表示成功。
  5777 + */
  5778 + short USER_API dc_WirelessGetStatus(HANDLE icdev, unsigned char *value);
  5779 +
  5780 + /**
  5781 + * @brief 发送数据到网络端。
  5782 + * @par 说明:
  5783 + * 发送数据到网络端。
  5784 + * @param[in] icdev 设备标识符。
  5785 + * @param[in] type 无线模块类型,0x00表示CDMA,0x01表示GPRS,0x02表示WIFI。
  5786 + * @param[in] data_buffer 发送数据。
  5787 + * @param[in] data_len 发送数据的长度。
  5788 + * @return <0表示失败,==0表示成功。
  5789 + */
  5790 + short USER_API dc_WirelessSend(HANDLE icdev, unsigned char type, const unsigned char *data_buffer, int data_len);
  5791 +
  5792 + /**
  5793 + * @brief 从网络端接收数据。
  5794 + * @par 说明:
  5795 + * 从网络端接收数据。
  5796 + * @param[in] icdev 设备标识符。
  5797 + * @param[in] type 无线模块类型,0x00表示CDMA,0x01表示GPRS,0x02表示WIFI。
  5798 + * @param[in] mode 模式,0x00表示接收的数据格式不带格式头符号,0x01表示接收的数据格式带格式头符号,WIFI模块此参数无效。
  5799 + * @param[in] time_100ms 设备超时值,单位为100毫秒。
  5800 + * @param[out] data_buffer 返回的数据。
  5801 + * @param[out] data_len 返回数据的长度。
  5802 + * @return <0表示失败,==0表示成功。
  5803 + */
  5804 + short USER_API dc_WirelessRecv(HANDLE icdev, unsigned char type, unsigned char mode, unsigned char time_100ms, unsigned char *data_buffer, int *data_len);
  5805 +
  5806 + /**
  5807 + * @brief 配置WIFI参数。
  5808 + * @par 说明:
  5809 + * 配置WIFI参数。
  5810 + * @param[in] icdev 设备标识符。
  5811 + * @param[in] type 无线模块类型,0x00表示CDMA,0x01表示GPRS,0x02表示WIFI。
  5812 + * @param[in] ssid WIFI SSID,数据格式为'\0'结尾的字符串。
  5813 + * @param[in] password WIFI密码,数据格式为'\0'结尾的字符串。
  5814 + * @return <0表示失败,==0表示成功。
  5815 + */
  5816 + short USER_API dc_WirelessWifiConfig(HANDLE icdev, unsigned char type, const char *ssid, const char *password);
  5817 +
  5818 + /**
  5819 + * @brief 获取GPS信息。
  5820 + * @par 说明:
  5821 + * 获取GPS信息。
  5822 + * @param[in] icdev 设备标识符。
  5823 + * @param[in] time_ms 设备超时值,单位为毫秒。
  5824 + * @param[out] data_buffer 返回的数据。
  5825 + * @param[out] data_len 返回数据的长度。
  5826 + * @return <0表示失败,==0表示成功。
  5827 + */
  5828 + short USER_API dc_GpsGetInfo(HANDLE icdev, int time_ms, unsigned char *data_buffer, int *data_len);
  5829 +
  5830 + /**
  5831 + * @brief 设置接触式CPU卡616C配置。
  5832 + * @par 说明:
  5833 + * 设置接触式CPU卡616C配置。
  5834 + * @param[in] icdev 设备标识符。
  5835 + * @param[in] value 配置值,0x00表示设备不处理616C,0x01表示设备处理616C。
  5836 + * @return <0表示失败,==0表示成功。
  5837 + */
  5838 + short USER_API dc_SetCpuCard616C(HANDLE icdev, unsigned char value);
  5839 +
  5840 + /**
  5841 + * @brief 获取接触式CPU卡616C配置。
  5842 + * @par 说明:
  5843 + * 获取接触式CPU卡616C配置。
  5844 + * @param[in] icdev 设备标识符。
  5845 + * @param[out] value 配置值,0x00表示设备不处理616C,0x01表示设备处理616C。
  5846 + * @return <0表示失败,==0表示成功。
  5847 + */
  5848 + short USER_API dc_GetCpuCard616C(HANDLE icdev, unsigned char *value);
  5849 +
  5850 + /**
  5851 + * @brief 获取芯片唯一ID号。
  5852 + * @par 说明:
  5853 + * 获取芯片唯一ID号。
  5854 + * @param[in] icdev 设备标识符。
  5855 + * @param[out] number 返回的ID号字符串,请至少分配128个字节。
  5856 + * @return <0表示失败,==0表示成功。
  5857 + */
  5858 + short USER_API dc_GetChipIdNumber(HANDLE icdev, char *number);
  5859 +
  5860 + /**
  5861 + * @brief 数码管显示。
  5862 + * @par 说明:
  5863 + * 数码管显示。
  5864 + * @param[in] icdev 设备标识符。
  5865 + * @param[in] number 数码管编号(1~12)。
  5866 + * @param[in] mode 模式,0x00表示数据正常显示,0x01表示数据闪烁显示,0x02表示数据不闪烁显示,0x03表示数据带小数点显示。
  5867 + * @param[in] value 显示数据值。
  5868 + * @return <0表示失败,==0表示成功。
  5869 + */
  5870 + short USER_API dc_LedDisplay(HANDLE icdev, unsigned char number, unsigned char mode, unsigned char value);
  5871 +
  5872 + /**
  5873 + * @brief 数码管显示设置。
  5874 + * @par 说明:
  5875 + * 数码管显示设置。
  5876 + * @param[in] icdev 设备标识符。
  5877 + * @param[in] mode 模式。
  5878 + * @n 0x00 - 左移。
  5879 + * @n 0x01 - 右移。
  5880 + * @n 0x02 - 左循环。
  5881 + * @n 0x03 - 右循环。
  5882 + * @n 0x04 - 显示清除。
  5883 + * @n 0x05 - 显示置位。
  5884 + * @n 0x06 - 显示亮度增加。
  5885 + * @n 0x07 - 显示亮度降低。
  5886 + * @n 0x08 - 开显示。
  5887 + * @n 0x09 - 关显示。
  5888 + * @return <0表示失败,==0表示成功。
  5889 + */
  5890 + short USER_API dc_LedControl(HANDLE icdev, unsigned char mode);
  5891 +
  5892 + /**
  5893 + * @brief 透传CRC模式配置。
  5894 + * @par 说明:
  5895 + * 透传CRC模式配置。
  5896 + * @param[in] icdev 设备标识符。
  5897 + * @param[in] tx_crc TXCRC模式,0x00表示内部不处理TXCRC,0x01表示内部处理TXCRC(只支持ISO14443标准卡)。
  5898 + * @param[in] rx_crc RXCRC模式,0x00表示内部不处理RXCRC,0x01表示内部处理RXCRC(只支持ISO14443标准卡)。
  5899 + * @return <0表示失败,==0表示成功。
  5900 + */
  5901 + short USER_API dc_RfCrcModeConfig(HANDLE icdev, unsigned char tx_crc, unsigned char rx_crc);
  5902 +
  5903 + /**
  5904 + * @brief 获取TCP信息。
  5905 + * @par 说明:
  5906 + * 获取TCP信息。
  5907 + * @param[in] icdev 设备标识符。
  5908 + * @param[in] type 类型,0x01表示请求获得模块型号,0x02表示请求获得当前信号强度。
  5909 + * @param[out] data_buffer 返回的数据。
  5910 + * @param[out] data_len 返回数据的长度。
  5911 + * @return <0表示失败,==0表示成功。
  5912 + */
  5913 + short USER_API dc_TcpGetInfo(HANDLE icdev, unsigned char type, unsigned char *data_buffer, int *data_len);
  5914 +
  5915 + /**
  5916 + * @brief 射频天线打开。
  5917 + * @par 说明:
  5918 + * 射频天线打开。
  5919 + * @param[in] icdev 设备标识符。
  5920 + * @return <0表示失败,==0表示成功。
  5921 + */
  5922 + short USER_API dc_RfMarch(HANDLE icdev);
  5923 +
  5924 + /**
  5925 + * @brief 选择天线。
  5926 + * @par 说明:
  5927 + * 选择天线。
  5928 + * @param[in] icdev 设备标识符。
  5929 + * @param[in] number 天线编号(1~2)。
  5930 + * @return <0表示失败,==0表示成功。
  5931 + */
  5932 + short USER_API dc_SelectAntenna(HANDLE icdev, unsigned char number);
  5933 +
  5934 + /**
  5935 + * @brief 读网卡MAC地址。
  5936 + * @par 说明:
  5937 + * 读网卡MAC地址。
  5938 + * @param[in] icdev 设备标识符。
  5939 + * @param[out] data_buffer 返回的网卡地址。
  5940 + * @param[out] data_len 返回网卡地址的长度。
  5941 + * @return <0表示失败,==0表示成功。
  5942 + */
  5943 + short USER_API dc_ReadNicMacAddress(HANDLE icdev, unsigned char *data_buffer, int *data_len);
  5944 +
  5945 + /**
  5946 + * @brief 写网卡MAC地址。
  5947 + * @par 说明:
  5948 + * 写网卡MAC地址。
  5949 + * @param[in] icdev 设备标识符。
  5950 + * @param[in] data_buffer 传入网卡地址。
  5951 + * @param[in] data_len 传入网卡地址的长度。
  5952 + * @return <0表示失败,==0表示成功。
  5953 + */
  5954 + short USER_API dc_WriteNicMacAddress(HANDLE icdev, const unsigned char *data_buffer, int data_len);
  5955 +
  5956 + /**
  5957 + * @brief 测试网卡。
  5958 + * @par 说明:
  5959 + * 测试网卡。
  5960 + * @param[in] icdev 设备标识符。
  5961 + * @param[in] data_buffer 传入IP地址。
  5962 + * @param[in] data_len 传入IP地址的长度。
  5963 + * @return <0表示失败,==0表示成功。
  5964 + */
  5965 + short USER_API dc_TestNic(HANDLE icdev, const unsigned char *data_buffer, int data_len);
  5966 +
  5967 + /**
  5968 + * @brief 测试USB。
  5969 + * @par 说明:
  5970 + * 测试USB。
  5971 + * @param[in] icdev 设备标识符。
  5972 + * @param[in] data_buffer 保留。
  5973 + * @param[in] data_len 保留,固定为0。
  5974 + * @return <0表示失败,==0表示成功。
  5975 + */
  5976 + short USER_API dc_TestUsb(HANDLE icdev, const unsigned char *data_buffer, int data_len);
  5977 +
  5978 + /**
  5979 + * @brief 测试串口。
  5980 + * @par 说明:
  5981 + * 测试串口。
  5982 + * @param[in] icdev 设备标识符。
  5983 + * @param[in] number 串口编号(1~3)。
  5984 + * @param[in] name 主机串口名称,如:"COM1:115200"。
  5985 + * @param[in,out] data_buffer 通讯数据。
  5986 + * @param[in,out] data_len 通讯数据的长度。
  5987 + * @return <0表示失败,==0表示成功。
  5988 + */
  5989 + short USER_API dc_TestCom(HANDLE icdev, unsigned char number, const char *name, unsigned char *data_buffer, int *data_len);
  5990 +
  5991 + /**
  5992 + * @brief 设定临时IP地址。
  5993 + * @par 说明:
  5994 + * 设定临时IP地址。
  5995 + * @param[in] icdev 设备标识符。
  5996 + * @param[in] data_buffer 传入IP地址。
  5997 + * @param[in] data_len 传入IP地址的长度。
  5998 + * @return <0表示失败,==0表示成功。
  5999 + */
  6000 + short USER_API dc_ConfigTempIpAddress(HANDLE icdev, const unsigned char *data_buffer, int data_len);
  6001 +
  6002 + /**
  6003 + * @brief 磁条卡数据自动上传数据模式获取。
  6004 + * @par 说明:
  6005 + * 获取磁条卡数据自动上传数据模式。
  6006 + * @param[in] icdev 设备标识符。
  6007 + * @param[out] mode 模式。
  6008 + * @n 0 - 输出数据中如果带字母,字母转化为大写字母。
  6009 + * @n 1 - 输出数据是原始数据(默认)。
  6010 + * @return <0表示失败,==0表示成功。
  6011 + */
  6012 + short USER_API dc_GetMagFormat(HANDLE icdev, int *mode);
  6013 +
  6014 + /**
  6015 + * @brief 磁条卡参数获取。
  6016 + * @par 说明:
  6017 + * 获取操作磁条卡的参数,参数仅针对自动输出的模式有效。
  6018 + * @param[in] icdev 设备标识符。
  6019 + * @param[out] mode 模式,0x00表示不用输出,0x01表示自动输出。
  6020 + * @param[out] track1 1轨道参数。
  6021 + * @n bit0 - 轨道数据输出设置,0表示不输出,1表示输出。
  6022 + * @n bit1 - 轨道数据头设置,0表示无数据头,1表示有数据头。
  6023 + * @n bit2 - 轨道数据尾设置,0表示无数据尾,1表示有数据尾。
  6024 + * @n bit3 - 轨道数据换行符设置,0表示无换行符,1表示有换行符。
  6025 + * @n bit4 - 轨道数据等号与其后数据设置,0表示不输出,1表示输出。
  6026 + * @n bit5~bit7 - 保留。
  6027 + * @param[out] track2 2轨道参数。
  6028 + * @n bit0 - 轨道数据输出设置,0表示不输出,1表示输出。
  6029 + * @n bit1 - 轨道数据头设置,0表示无数据头,1表示有数据头。
  6030 + * @n bit2 - 轨道数据尾设置,0表示无数据尾,1表示有数据尾。
  6031 + * @n bit3 - 轨道数据换行符设置,0表示无换行符,1表示有换行符。
  6032 + * @n bit4 - 轨道数据等号与其后数据设置,0表示不输出,1表示输出。
  6033 + * @n bit5~bit7 - 保留。
  6034 + * @param[out] track3 3轨道参数。
  6035 + * @n bit0 - 轨道数据输出设置,0表示不输出,1表示输出。
  6036 + * @n bit1 - 轨道数据头设置,0表示无数据头,1表示有数据头。
  6037 + * @n bit2 - 轨道数据尾设置,0表示无数据尾,1表示有数据尾。
  6038 + * @n bit3 - 轨道数据换行符设置,0表示无换行符,1表示有换行符。
  6039 + * @n bit4 - 轨道数据等号与其后数据设置,0表示不输出,1表示输出。
  6040 + * @n bit5~bit7 - 保留。
  6041 + * @return <0表示失败,==0表示成功。
  6042 + */
  6043 + short USER_API dc_GetMag(HANDLE icdev, unsigned char *mode, unsigned char *track1, unsigned char *track2, unsigned char *track3);
  6044 +
  6045 + /**
  6046 + * @brief 获取串口设备通讯波特率。
  6047 + * @par 说明:
  6048 + * 获取串口设备通讯波特率。
  6049 + * @param[in] icdev 设备标识符。
  6050 + * @param[out] baud 波特率。
  6051 + * @n 0x00 - 115200。
  6052 + * @n 0x01 - 57600。
  6053 + * @n 0x02 - 38400。
  6054 + * @n 0x03 - 19200。
  6055 + * @n 0x04 - 9600。
  6056 + * @n 0x05 - 4800。
  6057 + * @n 0x06 - 2400。
  6058 + * @n 0x07 - 1200。
  6059 + * @return <0表示失败,==0表示成功。
  6060 + */
  6061 + short USER_API dc_GetDeviceBaud(HANDLE icdev, unsigned char *baud);
  6062 +
  6063 + /**
  6064 + * @brief 获取USB模式。
  6065 + * @par 说明:
  6066 + * 获取USB通讯模式。
  6067 + * @param[in] icdev 设备标识符。
  6068 + * @param[out] ucmode 模式。
  6069 + * @n 0x00 - 表示中断发送和中断接收,此时VID=257B,PID=3010。
  6070 + * @n 0x01 - 表示控制发送和控制接收,此时VID=257B,PID=3011。
  6071 + * @n 0x02 - 表示控制发送和中断接收,此时VID=0471,PID=7002。
  6072 + * @n 0x03 - 表示控制发送和中断接收,此时VID=0471,PID=7003。
  6073 + * @n 0x04 - 表示控制发送和中断接收,此时VID=0471,PID=7003,支持磁条卡自动上传功能。
  6074 + * @return <0表示失败,==0表示成功。
  6075 + */
  6076 + short USER_API dc_GetUsbMode(HANDLE icdev, unsigned char *ucmode);
  6077 +
  6078 + /**
  6079 + * @brief 接触式CPU卡指令交互。
  6080 + * @par 说明:
  6081 + * 对当前卡座CPU卡进行指令交互操作,注意此接口已封装卡协议部分,内部处理了SW1为0x61和0x6C的情况。
  6082 + * @param[in] icdev 设备标识符。
  6083 + * @param[in] slen 发送数据的长度。
  6084 + * @param[in] sendbuffer 发送数据。
  6085 + * @param[out] rlen 返回数据的长度。
  6086 + * @param[out] databuffer 返回的数据。
  6087 + * @return <0表示失败,==0表示成功。
  6088 + */
  6089 + short USER_API dc_cpuapduresponInt(HANDLE icdev, unsigned int slen, unsigned char *sendbuffer, unsigned int *rlen, unsigned char *databuffer);
  6090 +
  6091 + /**
  6092 + * @brief 接触式CPU卡指令交互。
  6093 + * @par 说明:
  6094 + * ::dc_cpuapduresponInt 的HEX形式接口,参数 @a sendbuffer @a databuffer 为HEX格式。
  6095 + */
  6096 + short USER_API dc_cpuapduresponInt_hex(HANDLE icdev, unsigned int slen, char *sendbuffer, unsigned int *rlen, char *databuffer);
  6097 +
  6098 + /**
  6099 + * @brief 获取二维码数据。
  6100 + * @par 说明:
  6101 + * 获取二维码数据。
  6102 + * @param[in] icdev 设备标识符。
  6103 + * @param[in] times 设备超时值,单位为秒。
  6104 + * @param[out] rlen 返回数据的长度。
  6105 + * @param[out] rdata 返回的数据。
  6106 + * @return <0表示失败,==0表示成功。
  6107 + */
  6108 + short USER_API dc_Get2DBarcodeData(HANDLE icdev, unsigned char times, int *rlen, unsigned char *rdata);
  6109 +
  6110 + /**
  6111 + * @brief 写磁条卡参数设置。
  6112 + * @par 说明:
  6113 + * 写磁条卡参数设置。
  6114 + * @param[in] icdev 设备标识符。
  6115 + * @param[in] mode 模式,0表示写三轨共移动三次,1表示写三轨共移动一次。
  6116 + * @return <0表示失败,==0表示成功。
  6117 + */
  6118 + short USER_API dc_SelfServiceDeviceWriteMagConfig(HANDLE icdev, unsigned char mode);
  6119 +
  6120 + /**
  6121 + * @brief 抖动模式设置。
  6122 + * @par 说明:
  6123 + * 抖动模式设置。
  6124 + * @param[in] icdev 设备标识符。
  6125 + * @param[in] mode 模式,0表示抖动模式,1表示非抖动模式。
  6126 + * @return <0表示失败,==0表示成功。
  6127 + */
  6128 + short USER_API dc_SelfServiceDeviceShakeConfig(HANDLE icdev, unsigned char mode);
  6129 +
  6130 + /**
  6131 + * @brief 语音播放及显示。
  6132 + * @par 说明:
  6133 + * 播放设备内置语音以及是否需要显示。
  6134 + * @param[in] icdev 设备标识符。
  6135 + * @param[in] mode 语音段号(0x01~0x12)。
  6136 + * @param[in] type 显示类型,0表示显示语音播放内容,1表示不显示语音播放内容。
  6137 + * @return <0表示失败,==0表示成功。
  6138 + */
  6139 + short USER_API dc_VoicePlayAndDisplay(HANDLE icdev, unsigned char mode, unsigned char type);
  6140 +
  6141 + /**
  6142 + * @brief 获取银行卡帐户号码。
  6143 + * @par 说明:
  6144 + * 获取银行卡帐户号码。
  6145 + * @param[in] icdev 设备标识符。
  6146 + * @param[in] type 类型,0表示非接触式,1表示接触式。
  6147 + * @param[out] number 返回的银行卡帐户号码字符串,请至少分配64个字节。
  6148 + * @return <0表示失败,==0表示成功。
  6149 + */
  6150 + short USER_API dc_GetBankAccountNumber(HANDLE icdev, int type, char *number);
  6151 +
  6152 +#ifdef __cplusplus
  6153 +}
  6154 +#endif
  6155 +
  6156 +#endif // DCRF32_H_
... ...
doc/D8&&T10ULM最新开发包/sdk/linux/32bit/libdcrf32.so 0 → 100644
No preview for this file type
doc/D8&&T10ULM最新开发包/sdk/linux/32bit/lite/libdcrf32.so 0 → 100644
No preview for this file type
doc/D8&&T10ULM最新开发包/sdk/linux/64bit/libdcrf32.so 0 → 100644
No preview for this file type
doc/D8&&T10ULM最新开发包/sdk/linux/64bit/lite/libdcrf32.so 0 → 100644
No preview for this file type
doc/华大智宝/北京华虹COS用户手册.pdf 0 → 100644
No preview for this file type
doc/华大智宝/华大智宝测试卡问题.txt 0 → 100644
  1 +1.縐醱瘍菴拻弇渣昫
  2 +
  3 +888800000001100001FFFFFFFFFF8888FFFFFFFFFFFFFFFF721FFFFF88880003195344494C49888800031953FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9000
  4 +888800031953100001FFFFFFFFFF8888FFFFFFFFFFFFFFFF721FFFFF88880003195344494C498888000319539000
0 5 \ No newline at end of file
... ...
doc/华大智宝/双界面CPU卡用户参考手册V1.0.pdf 0 → 100644
No preview for this file type
doc/华大智宝/指令.txt 0 → 100644
  1 +80E000021D DFF1 0c00 00 000000 10 B9 00 01 03 ffffffffffffffe0
  2 +80E0000B08 0010 0200 00 33 0000
  3 +80D400101c 180000000000000300FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  4 +80E000030D 0025 0324 000000000000000000
  5 +80E000030D00260709000000000000000000
0 6 \ No newline at end of file
... ...
doc/华大智宝/提供给客户文档20180521/二次发卡.txt 0 → 100644
  1 +clear string
  2 +edit Hstring $SW$
  3 +edit Hstring $RandomSESLK$;计算会话密钥的Random
  4 +edit Hstring $INPUTData$
  5 +edit Hstring $Random$
  6 +edit Hstring $Key$
  7 +edit Hstring $DESKey$
  8 +edit Hstring $DESResult$
  9 +edit Hstring $mw$
  10 +edit Hstring $mkey$
  11 +edit Hstring $tkey$
  12 +edit Hstring $MACInit$
  13 +edit Hstring $MAC$
  14 +edit Hstring $INPUT$
  15 +edit Hstring $Temp$
  16 +edit Hstring $DCCK$
  17 +edit Hstring $DIRK1$
  18 +edit Hstring $DIRK2$
  19 +edit Hstring $DIRK3$
  20 +edit Hstring $DCMK1$
  21 +edit Hstring $DCMK2$
  22 +edit Hstring $DACK$
  23 +edit Hstring $DEAK$
  24 +edit Hstring $DAMK1$
  25 +edit Hstring $DAMK2$
  26 +edit Hstring $DACK2$
  27 +edit Hstring $0001$
  28 +edit Hstring $0005$
  29 +edit Hstring $0006$
  30 +edit Hstring $0015$
  31 +edit Hstring $0016$
  32 +edit Hstring $0019$
  33 +
  34 +RESET
  35 +
  36 +SEND 00A4000002 3F00
  37 +ASSERT 6F148410D6C7D0C5C8DAB4B4D4B0C7F8D3A6D3C3A5009000
  38 +
  39 +SEND 0084000008
  40 +edit $Random$=g_GETSW()
  41 +watch $Random$
  42 +;3-DES
  43 +edit $DESKey$ = FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
  44 +
  45 +edit $Random$ = g_GETSTR($Random$,0,8)
  46 +watch $Random$
  47 +edit $DESResult$ = g_TDES(1 , $DESKey$ , $Random$)
  48 +watch $DESResult$
  49 +send 0082000008 $DESResult$
  50 +assert 9000
  51 +
  52 +;###################################################################################################
  53 +;### MF密钥替换
  54 +;###################################################################################################
  55 +
  56 +edit $DCCK$ = FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
  57 +edit $DACK$ = FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6
  58 +edit $DIRK1$ = 11111111111111111111111111111111
  59 +edit $DIRK2$ = 22222222222222222222222222222222
  60 +edit $DIRK3$ = 33333333333333333333333333333333
  61 +edit $DCMK1$ = FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4
  62 +edit $DCMK2$ = 22222222222222222222222222222222
  63 +edit $DEAK$ = FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7
  64 +edit $DAMK1$ = FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8
  65 +
  66 +edit $0005$ = 888870000001100001FFFFFFFFFF8888FFFFFFFFFFFFFFFF721FFFFF88880003195344494C49888800031953
  67 +;edit $0005$ = 888800000003100002FFFFFFFFFF8888FFFFFFFFFFFFFFFF721FFFFF88880003195344494C49888800031953FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  68 +;edit $0005$ = 888800000005100003FFFFFFFFFF8888FFFFFFFFFFFFFFFF721FFFFF88880003195344494C49888800031953FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  69 +;edit $0005$ = 888800000006100004FFFFFFFFFF8888FFFFFFFFFFFFFFFF721FFFFF88880003195344494C49888800031953FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  70 +edit $0006$ = FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  71 +edit $0015$ = FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  72 +edit $0016$ = FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  73 +
  74 +
  75 +;主控子密钥 $DCCK$
  76 +send 00 84 00 00 08
  77 +edit $SW$ = g_GETSW()
  78 +edit $RandomSESLK$ = g_GETSTR($SW$,0,8)
  79 +watch $RandomSESLK$
  80 +edit $Key$ = FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
  81 +
  82 +edit $mkey$= 13 000000 $DCCK$ 80000000
  83 +watch $mkey$
  84 +edit $mw$ = g_TDES(1 , $Key$ , $mkey$)
  85 +watch $mw$
  86 +edit $MACInit$ = $RandomSESLK$
  87 +edit $DESKey$= $Key$
  88 +edit $INPUT$ = 84D401001C$mw$
  89 +edit $MAC$= g_TMAC($MACInit$ , $DESKey$ , $INPUT$)
  90 +watch $mw$ $MAC$
  91 +edit $Temp$ = $mw$ $MAC$
  92 +watch $Temp$
  93 +;主控子密钥 $DCCK$
  94 +SEND 84D401001C $Temp$
  95 +ASSERT 9000
  96 +
  97 +;维护子密钥 $DCMK1$
  98 +send 00 84 00 00 08
  99 +edit $SW$ = g_GETSW()
  100 +edit $RandomSESLK$ = g_GETSTR($SW$,0,8)
  101 +watch $RandomSESLK$
  102 +
  103 +edit $mkey$= 13 010100 $DCMK1$ 80000000
  104 +watch $mkey$
  105 +edit $mw$ = g_TDES(1 , $DCCK$ , $mkey$)
  106 +watch $mw$
  107 +edit $MACInit$ = $RandomSESLK$
  108 +edit $INPUT$ = 84D401101C$mw$
  109 +edit $MAC$= g_TMAC($MACInit$ , $DCCK$ , $INPUT$)
  110 +watch $mw$ $MAC$
  111 +edit $Temp$ = $mw$ $MAC$
  112 +watch $Temp$
  113 +;维护子密钥 $DAMK$
  114 +SEND 84D401101C $Temp$
  115 +ASSERT 9000
  116 +
  117 +;维护子密钥 $DCMK2$
  118 +send 00 84 00 00 08
  119 +edit $SW$ = g_GETSW()
  120 +edit $RandomSESLK$ = g_GETSTR($SW$,0,8)
  121 +watch $RandomSESLK$
  122 +
  123 +edit $mkey$= 13 010200 $DCMK2$ 80000000
  124 +watch $mkey$
  125 +edit $mw$ = g_TDES(1 , $DCCK$ , $mkey$)
  126 +watch $mw$
  127 +edit $MACInit$ = $RandomSESLK$
  128 +edit $INPUT$ = 84D401101C$mw$
  129 +edit $MAC$= g_TMAC($MACInit$ , $DCCK$ , $INPUT$)
  130 +watch $mw$ $MAC$
  131 +edit $Temp$ = $mw$ $MAC$
  132 +watch $Temp$
  133 +;维护子密钥 $DAMK$
  134 +SEND 84D401101C $Temp$
  135 +ASSERT 9000
  136 +
  137 +;DIRK1~3
  138 +send 00 84 00 00 08
  139 +edit $SW$ = g_GETSW()
  140 +edit $RandomSESLK$ = g_GETSTR($SW$,0,8)
  141 +watch $RandomSESLK$
  142 +
  143 +edit $mkey$= 13 1C0101 $DIRK1$ 80000000
  144 +watch $mkey$
  145 +edit $mw$ = g_TDES(1 , $DCCK$ , $mkey$)
  146 +watch $mw$
  147 +edit $MACInit$ = $RandomSESLK$
  148 +edit $INPUT$ = 84D401101C$mw$
  149 +edit $MAC$= g_TMAC($MACInit$ , $DCCK$ , $INPUT$)
  150 +watch $mw$ $MAC$
  151 +edit $Temp$ = $mw$ $MAC$
  152 +watch $Temp$
  153 +;DIRK1~3
  154 +SEND 84D401101C $Temp$
  155 +ASSERT 9000
  156 +
  157 +;DIRK1~3
  158 +send 00 84 00 00 08
  159 +edit $SW$ = g_GETSW()
  160 +edit $RandomSESLK$ = g_GETSTR($SW$,0,8)
  161 +watch $RandomSESLK$
  162 +
  163 +edit $mkey$= 13 1C0201 $DIRK2$ 80000000
  164 +watch $mkey$
  165 +edit $mw$ = g_TDES(1 , $DCCK$ , $mkey$)
  166 +watch $mw$
  167 +edit $MACInit$ = $RandomSESLK$
  168 +edit $INPUT$ = 84D401101C$mw$
  169 +edit $MAC$= g_TMAC($MACInit$ , $DCCK$ , $INPUT$)
  170 +watch $mw$ $MAC$
  171 +edit $Temp$ = $mw$ $MAC$
  172 +watch $Temp$
  173 +;DIRK1~3
  174 +SEND 84D401101C $Temp$
  175 +ASSERT 9000
  176 +
  177 +;DIRK1~3
  178 +send 00 84 00 00 08
  179 +edit $SW$ = g_GETSW()
  180 +edit $RandomSESLK$ = g_GETSTR($SW$,0,8)
  181 +watch $RandomSESLK$
  182 +
  183 +edit $mkey$= 13 1C0301 $DIRK3$ 80000000
  184 +watch $mkey$
  185 +edit $mw$ = g_TDES(1 , $DCCK$ , $mkey$)
  186 +watch $mw$
  187 +edit $MACInit$ = $RandomSESLK$
  188 +edit $INPUT$ = 84D401101C$mw$
  189 +edit $MAC$= g_TMAC($MACInit$ , $DCCK$ , $INPUT$)
  190 +watch $mw$ $MAC$
  191 +edit $Temp$ = $mw$ $MAC$
  192 +watch $Temp$
  193 +;DIRK1~3
  194 +SEND 84D401101C $Temp$
  195 +ASSERT 9000
  196 +
  197 +;更新0001 dir文件
  198 +;***************************写0001文件*********************************
  199 +SEND 0084000008
  200 +edit $SW$ = g_GETSW()
  201 +edit $RandomSESLK$ = g_GETSTR($SW$,0,8)
  202 +watch $RandomSESLK$
  203 +edit $MACInit$ = $RandomSESLK$
  204 +edit $INPUT$ = 04E2000812 700C610A4F08B5D8C0FBD4DACFDF
  205 +edit $MAC$= g_TMAC($MACInit$ , $DCMK1$ , $INPUT$)
  206 +watch $MAC$
  207 +SEND $INPUT$ $MAC$
  208 +ASSERT 9000
  209 +
  210 +SEND 0084000008
  211 +edit $SW$ = g_GETSW()
  212 +edit $RandomSESLK$ = g_GETSTR($SW$,0,8)
  213 +watch $RandomSESLK$
  214 +edit $MACInit$ = $RandomSESLK$
  215 +edit $INPUT$ = 04E2000812 700C610A5008B5D8C0FBC7AEB0FC
  216 +edit $MAC$= g_TMAC($MACInit$ , $DCMK1$ , $INPUT$)
  217 +watch $MAC$
  218 +SEND $INPUT$ $MAC$
  219 +ASSERT 9000
  220 +
  221 +;第二次更新时
  222 +;SEND 0084000008
  223 +;edit $SW$ = g_GETSW()
  224 +;edit $RandomSESLK$ = g_GETSTR($SW$,0,8)
  225 +;watch $RandomSESLK$
  226 +;edit $MACInit$ = $RandomSESLK$
  227 +;edit $INPUT$ = 04DC010C12 700C610A4F08B5D8C0FBD4DACFDF
  228 +;edit $MAC$= g_TMAC($MACInit$ , $DCMK1$ , $INPUT$)
  229 +;watch $MAC$
  230 +;SEND $INPUT$ $MAC$
  231 +;ASSERT 9000
  232 +
  233 +;更新0005基本信息文件
  234 +;***************************写0005文件*********************************
  235 +SEND 0084000008
  236 +edit $SW$ = g_GETSW()
  237 +edit $RandomSESLK$ = g_GETSTR($SW$,0,8)
  238 +watch $RandomSESLK$
  239 +edit $MACInit$ = $RandomSESLK$
  240 +edit $INPUT$ = 04D6850030 $0005$
  241 +edit $MAC$= g_TMAC($MACInit$ , $DCMK1$ , $INPUT$)
  242 +watch $MAC$
  243 +SEND $INPUT$ $MAC$
  244 +ASSERT 9000
  245 +;更新0006预留信息文件
  246 +;***************************写0006文件*********************************
  247 +SEND 0084000008
  248 +edit $SW$ = g_GETSW()
  249 +edit $RandomSESLK$ = g_GETSTR($SW$,0,8)
  250 +watch $RandomSESLK$
  251 +edit $MACInit$ = $RandomSESLK$
  252 +edit $INPUT$ = 04D6860030 $0006$
  253 +edit $MAC$= g_TMAC($MACInit$ , $DCMK2$ , $INPUT$)
  254 +watch $MAC$
  255 +SEND $INPUT$ $MAC$
  256 +ASSERT 9000
  257 +
  258 +
  259 +;内部认证1
  260 +SEND 0084000008
  261 +edit $Random$=g_GETSW()
  262 +watch $Random$
  263 +;3-DES
  264 +edit $DESKey$ = $DIRK1$
  265 +
  266 +edit $Random$ = g_GETSTR($Random$,0,8)
  267 +watch $Random$
  268 +edit $DESResult$ = g_TDES(1 , $DESKey$ , $Random$)
  269 +watch $DESResult$
  270 +send 0088000108 $DESResult$
  271 +;ASSERT F643AEEE267B96BE 9000
  272 +
  273 +;内部认证2
  274 +SEND 0084000008
  275 +edit $Random$=g_GETSW()
  276 +watch $Random$
  277 +;3-DES
  278 +edit $DESKey$ = $DIRK2$
  279 +
  280 +edit $Random$ = g_GETSTR($Random$,0,8)
  281 +watch $Random$
  282 +edit $DESResult$ = g_TDES(1 , $DESKey$ , $Random$)
  283 +watch $DESResult$
  284 +send 0088000208 $DESResult$
  285 +;ASSERT 2D32365B79BAB9299000
  286 +
  287 +;内部认证3
  288 +SEND 0084000008
  289 +edit $Random$=g_GETSW()
  290 +watch $Random$
  291 +;3-DES
  292 +edit $DESKey$ = $DIRK3$
  293 +
  294 +edit $Random$ = g_GETSTR($Random$,0,8)
  295 +watch $Random$
  296 +edit $DESResult$ = g_TDES(1 , $DESKey$ , $Random$)
  297 +watch $DESResult$
  298 +send 0088000308 $DESResult$
  299 +;ASSERT 60833056F73E2A249000
  300 +
  301 +;DF01:地利在线平台应用
  302 +SEND 00A40400 08 B5D8C0FBD4DACFDF
  303 +ASSERT 6F7F8410B5D8C0FBD4DACFDF0000007479617070A56B9F0801029F0C64FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9000
  304 +
  305 +SEND 0084000008
  306 +edit $Random$=g_GETSW()
  307 +watch $Random$
  308 +;3-DES
  309 +edit $DESKey$ = $DACK$
  310 +
  311 +edit $Random$ = g_GETSTR($Random$,0,8)
  312 +watch $Random$
  313 +edit $DESResult$ = g_TDES(1 , $DESKey$ , $Random$)
  314 +watch $DESResult$
  315 +send 0082000008 $DESResult$
  316 +assert 9000
  317 +
  318 +
  319 +;外部认证密钥 $DEAK$
  320 +send 00 84 00 00 08
  321 +edit $SW$ = g_GETSW()
  322 +edit $RandomSESLK$ = g_GETSTR($SW$,0,8)
  323 +watch $RandomSESLK$
  324 +
  325 +edit $mkey$= 13 000100 $DEAK$ 80000000
  326 +watch $mkey$
  327 +edit $mw$ = g_TDES(1 , $DACK$ , $mkey$)
  328 +watch $mw$
  329 +edit $MACInit$ = $RandomSESLK$
  330 +edit $INPUT$ = 84D401101C$mw$
  331 +edit $MAC$= g_TMAC($MACInit$ , $DACK$ , $INPUT$)
  332 +watch $mw$ $MAC$
  333 +edit $Temp$ = $mw$ $MAC$
  334 +watch $Temp$
  335 +;维护子密钥 $DAMK$
  336 +SEND 84D401101C $Temp$
  337 +ASSERT 9000
  338 +
  339 +;应用维护子密钥 $DCMK2$
  340 +send 00 84 00 00 08
  341 +edit $SW$ = g_GETSW()
  342 +edit $RandomSESLK$ = g_GETSTR($SW$,0,8)
  343 +watch $RandomSESLK$
  344 +
  345 +edit $mkey$= 13 010100 $DAMK1$ 80000000
  346 +watch $mkey$
  347 +edit $mw$ = g_TDES(1 , $DACK$ , $mkey$)
  348 +watch $mw$
  349 +edit $MACInit$ = $RandomSESLK$
  350 +edit $INPUT$ = 84D401101C$mw$
  351 +edit $MAC$= g_TMAC($MACInit$ , $DACK$ , $INPUT$)
  352 +watch $mw$ $MAC$
  353 +edit $Temp$ = $mw$ $MAC$
  354 +watch $Temp$
  355 +;维护子密钥 $DAMK$
  356 +SEND 84D401101C $Temp$
  357 +ASSERT 9000
  358 +
  359 +;外部认证
  360 +SEND 0084000008
  361 +edit $Random$=g_GETSW()
  362 +watch $Random$
  363 +;3-DES
  364 +edit $DESKey$ = $DEAK$
  365 +
  366 +edit $Random$ = g_GETSTR($Random$,0,8)
  367 +watch $Random$
  368 +edit $DESResult$ = g_TDES(1 , $DESKey$ , $Random$)
  369 +watch $DESResult$
  370 +send 0082000108 $DESResult$
  371 +ASSERT 9000
0 372 \ No newline at end of file
... ...
doc/华大智宝/提供给客户文档20180521/双界面CPU卡用户参考手册V1.0.pdf 0 → 100644
No preview for this file type
doc/华大智宝/提供给客户文档20180521/文件系统.txt 0 → 100644
  1 +
  2 +;修改ATS历史字节
  3 +RESET
  4 +SEND 00A4040010 486E656F730000000000000000000000
  5 +ASSERT 9000
  6 +SEND 80F2000010 4845442D484353502D41444D494E3030
  7 +ASSERT 9000
  8 +SEND FFCA0000 04
  9 +
  10 +edit Hstring $UID$
  11 +edit $UID$ = g_GETSW()
  12 +edit $UID$ = g_GETSTR ($UID$,0,4)
  13 +SEND 8012 0700 0D 0C 4D54 0081 3212 8698 $UID$
  14 +
  15 +SEND FFCC000001 93;读ATS
  16 +
  17 +RESET
  18 +SEND 00A4040008A000000003000000
  19 +;ASSERT 6F108408A000000003000000A5049F6501FF9000
  20 +
  21 +edit Hstring $HostRand$ ;Host challenge
  22 +edit $HostRand$ = 1BAD288F2F19780D
  23 +send 8050 00 00 08 $HostRand$
  24 + edit Hstring $SWResult$ ;卡片响应值
  25 + edit Hstring $KeyDivData$ ;Key diversification data 8bytes
  26 + edit Hstring $KeyInfo$ ;Key information 2bytes
  27 + edit Hstring $SeqCNTR$ ;Sequence Counter 2bytes
  28 + edit Hstring $CardRand$ ;Card challenge 6bytes
  29 + edit Hstring $CardCrypt$ ;Card cryptogram 8bytes
  30 + edit Hstring $DerivationData$
  31 + edit Hstring $SessionKey$
  32 + edit Hstring $SCSKey$ ;安全信道静态密钥
  33 + edit Hstring $SMACKey$
  34 + edit Hstring $SENCKey$
  35 + edit Hstring $DESPadding$
  36 + edit Hstring $InputData$ ;要加密数据
  37 + edit Hstring $ICV$
  38 + edit $SWResult$ = g_GETSW()
  39 + watch $SWResult$
  40 + edit $SeqCNTR$ = g_GETSTR($SWResult$,12,2)
  41 + watch $SeqCNTR$
  42 + edit $CardRand$ = g_GETSTR($SWResult$,14,6)
  43 + watch $CardRand$
  44 + edit $DerivationData$ = 0182 $SeqCNTR$ 000000000000000000000000
  45 + watch $DerivationData$
  46 + edit $SCSKey$ = 404142434445464748494A4B4C4D4E4F
  47 + edit $ICV$ = 0000000000000000
  48 + edit $SessionKey$ =g_TDESCBC(1 , $ICV$, $SCSKey$ , $DerivationData$)
  49 + watch $SessionKey$
  50 + edit $InputData$ = $HostRand$ $SeqCNTR$ $CardRand$
  51 + watch $InputData$
  52 + edit $ICV$ = 0000000000000000
  53 + edit $CardCrypt$ = g_ISO9797(1 , 2 ,$ICV$, $SessionKey$ , $InputData$)
  54 + watch $CardCrypt$
  55 + watch $SWResult$
  56 + ;host Crypt
  57 + edit $InputData$ = $SeqCNTR$ $CardRand$ $HostRand$
  58 + watch $InputData$
  59 + ;计算验证密文时ICV不需要加密
  60 + edit Hstring $HostCrypt$
  61 + edit $HostCrypt$ = g_ISO9797(1 , 2 ,$ICV$, $SessionKey$ , $InputData$)
  62 + watch $HostCrypt$
  63 + edit Hstring $CMACResult$
  64 + edit Hstring $SMACKey$
  65 + edit $SMACKey$ = 404142434445464748494A4B4C4D4E4F
  66 + watch $SMACKey$
  67 + edit $DerivationData$ = 0101 $SeqCNTR$ 000000000000000000000000
  68 + watch $DerivationData$
  69 + edit $SessionKey$ = g_TDESCBC(1 ,$ICV$, $SMACKey$ , $DerivationData$)
  70 + watch $SessionKey$
  71 + edit $InputData$ = 8482000010$HostCrypt$
  72 + watch $InputData$
  73 + ;Singal DES plus Final 3DES MAC
  74 + edit $ICV$ = 0000000000000000
  75 + edit $CMACResult$ = g_ISO9797(3 , 2 ,$ICV$, $SessionKey$ , $InputData$)
  76 + watch $CMACResult$
  77 +
  78 +send 8482 00 00 10 $HostCrypt$$CMACResult$
  79 +assert 9000
  80 +
  81 +;###################################################################################################
  82 +;### 删除应用和安装应用
  83 +;###################################################################################################
  84 +;删除地利集团园区应用
  85 +SEND 80E4000012 4F10 D6C7D0C5C8DAB4B4D4B0C7F8D3A6D3C3
  86 +;ASSERT 6A88|009000
  87 +
  88 +;安装地利集团园区应用
  89 +;SEND 80E60C004C 0FF168656400636974796170706C6574 10F168656400636974796170706C657401 10D6C7D0C5C8DAB4B4D4B0C7F8D3A6D3C3 0104 16C914 F2 3F00 4000 40 000000 15 31 00 00 0F03 F300 F70300 00
  90 +;ASSERT 009000
  91 +SEND 80E60C004E 0FF168656400636974796170706C6574 10F168656400636974796170706C657401 10D6C7D0C5C8DAB4B4D4B0C7F8D3A6D3C3 0104 18C916 F2 3F00 4000 40 000000 15 31 00 00 0F03 F300 F70300 F90400
  92 +ASSERT 009000
  93 +
  94 +;###################################################################################################
  95 +;### 个人化地利集团园区应用
  96 +;###################################################################################################
  97 +; 选择地利集团园区应用
  98 +SEND 00A4040010 D6C7D0C5C8DAB4B4D4B0C7F8D3A6D3C3
  99 +ASSERT 6F148410D6C7D0C5C8DAB4B4D4B0C7F8D3A6D3C3A5009000
  100 +
  101 +;外部认证
  102 +edit Hstring $Random$
  103 +edit Hstring $DESKey$
  104 +edit Hstring $SourceData$
  105 +edit Hstring $DESResult$
  106 +edit Hstring $MACInit$
  107 +
  108 +SEND 0084000008
  109 +edit $Random$=g_GETSW()
  110 +watch $Random$
  111 +;3-DES
  112 +edit $DESKey$ = 00000000000000000000000000000000
  113 +
  114 +edit $Random$ = g_GETSTR($Random$,0,8)
  115 +watch $Random$
  116 +edit $DESResult$ = g_TDES(1 , $DESKey$ , $Random$)
  117 +watch $DESResult$
  118 +send 0082000008 $DESResult$
  119 +assert 9000
  120 +
  121 +;开启快速个人化
  122 +SEND 80E5000000
  123 +ASSERT 9000
  124 +
  125 +; 创建0010安全文件
  126 +SEND 80E0000B08 0010 0090 00 33 0000
  127 +ASSERT 9000
  128 +; 创建0001 Dir文件(变长记录) 明文+MAC(DCMK1)
  129 +SEND 80E000050E 0001 0050 0000 00 20 0000 0000 00 01
  130 +ASSERT 9000
  131 +; 创建0005基本信息文件(二进制文件)明文+MAC(DCMK1)
  132 +SEND 80E000030D 0005 00FA 00 00 20 0000 0000 00 01
  133 +ASSERT 9000
  134 +;创建0006保留文件(二进制文件)明文+MAC(DCMK2)
  135 +SEND 80E000030D 0006 00FA 00 00 20 0000 0000 00 02
  136 +ASSERT 9000
  137 +
  138 +;****************装载密钥****************
  139 +;主控DCCK
  140 +SEND 80D40100 13 000000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
  141 +ASSERT 9000
  142 +;DCMK1和DCMK2
  143 +SEND 80D40010 18 0101000000000300 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4
  144 +ASSERT 9000
  145 +SEND 80D40010 18 0102000000000300 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4
  146 +ASSERT 9000
  147 +;DIRK1~3
  148 +SEND 80D40010 18 1C01010000000300 00000000000000000000000000000000
  149 +ASSERT 9000
  150 +SEND 80D40010 18 1C02010000000300 00000000000000000000000000000000
  151 +ASSERT 9000
  152 +SEND 80D40010 18 1C03010000000300 00000000000000000000000000000000
  153 +ASSERT 9000
  154 +
  155 +;--------------------------------DF01地利在线平台应用-----------------------------
  156 +SEND 00A4000002 3F00
  157 +ASSERT 6F148410D6C7D0C5C8DAB4B4D4B0C7F8D3A6D3C3A5009000
  158 +
  159 +SEND 0084000008
  160 +edit $Random$=g_GETSW()
  161 +watch $Random$
  162 +;3-DES
  163 +edit $DESKey$ = FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
  164 +
  165 +edit $Random$ = g_GETSTR($Random$,0,8)
  166 +watch $Random$
  167 +edit $DESResult$ = g_TDES(1 , $DESKey$ , $Random$)
  168 +watch $DESResult$
  169 +send 0082000008 $DESResult$
  170 +assert 9000
  171 +
  172 +;开启快速个人化
  173 +SEND 80E5000000
  174 +ASSERT 9000
  175 +
  176 +;创建DF01:地利在线平台应用
  177 +SEND 80E00002 1D DF01 07FF 00 000000 15 B9 00 01 03 B5D8C0FBD4DACFDF
  178 +ASSERT 9000
  179 +
  180 +; 创建0010安全文件
  181 +SEND 80E0000B08 0010 0200 00 33 0000
  182 +;****************装载密钥****************
  183 +;主控
  184 +SEND 80D40100 13 000000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6
  185 +ASSERT 9000
  186 +;维护 DAMK1 DAMK2
  187 +SEND 80D40010 18 0101000000000300 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8
  188 +ASSERT 9000
  189 +SEND 80D40010 18 0102000000000300 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8
  190 +ASSERT 9000
  191 +;外部认证DEAK
  192 +SEND 80D40010 18 00010000 0000 03AA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7
  193 +ASSERT 9000
  194 +
  195 +; 创建0015卡务信息文件 读(外部认证)写(明文+MAC,DAMK1)
  196 +SEND 80E000030D 0015 00FA 00 00 20 00AA 0000 00 01
  197 +ASSERT 9000
  198 +SEND 00D69500 FA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  199 +ASSERT 9000
  200 +; 创建0016持卡人数据文件 读(自由)写(明文+MAC,DAMK2)
  201 +SEND 80E000030D 0016 00FA 00 00 20 0F11 0000 00 02
  202 +ASSERT 9000
  203 +SEND 00D69600 FA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  204 +ASSERT 9000
  205 +
  206 +; 创建0019(复合)文件(明文+MAC,DAMK2)
  207 +SEND 80E000050E 0019 0119 0000 00 20 0000 0000 00 02
  208 +ASSERT 9000
  209 +
  210 +
  211 +;--------------------------------DF02地利扩展预留应用-----------------------------
  212 +SEND 00A4000002 3F00
  213 +ASSERT 6F148410D6C7D0C5C8DAB4B4D4B0C7F8D3A6D3C3A5009000
  214 +
  215 +SEND 0084000008
  216 +edit $Random$=g_GETSW()
  217 +watch $Random$
  218 +;3-DES
  219 +edit $DESKey$ = FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
  220 +
  221 +edit $Random$ = g_GETSTR($Random$,0,8)
  222 +watch $Random$
  223 +edit $DESResult$ = g_TDES(1 , $DESKey$ , $Random$)
  224 +watch $DESResult$
  225 +send 0082000008 $DESResult$
  226 +assert 9000
  227 +
  228 +;开启快速个人化
  229 +SEND 80E5000000
  230 +ASSERT 9000
  231 +
  232 +;创建DF02:地利扩展预留应用
  233 +SEND 80E00002 1D DF02 07FF 00 000000 15 B9 00 01 03 B5D8C0FBC7AEB0FC
  234 +ASSERT 9000
  235 +
  236 +; 创建0010安全文件
  237 +SEND 80E0000B08 0010 0200 00 33 0000
  238 +;****************装载密钥****************
  239 +;主控
  240 +SEND 80D40100 13 000000 88888888888888888888888888888888
  241 +ASSERT 9000
  242 +
... ...
doc/卡片情况.xlsx
No preview for this file type
doc/打印机/amovie.ocx.zip 0 → 100644
No preview for this file type
doc/智信融创/m1卡/NXP-Mifare1技术说明.pdf 0 → 100644
No preview for this file type
doc/智信融创/m1卡/复旦FM11RF08-8KBits-EEPROM-非接触式射频卡芯片-功能说明书.pdf 0 → 100644
No preview for this file type
doc/硬件卡片总体需求/卡片基本信息字段和初始秘钥说明.docx
No preview for this file type