RFModuleFunc.H
上传用户:shyuanyi
上传日期:2008-05-24
资源大小:69k
文件大小:12k
源码类别:

RFID编程

开发平台:

C/C++

  1. #ifndef __RF_MODULE_FUNC_H__
  2. #define __RF_MODULE_FUNC_H__
  3. //Mifare函数返回值定义
  4. #define MI_OK                           0
  5. #define MI_CHK_OK                       0
  6. #define MI_CRC_ZERO                     0
  7. #define MI_CRC_NOTZERO                  1
  8. #define MI_NOTAGERR                     1
  9. #define MI_CHK_FAILED                   1
  10. #define MI_CRCERR                       2
  11. #define MI_CHK_COMPERR                  2
  12. #define MI_EMPTY                        3
  13. #define MI_AUTHERR                      4
  14. #define MI_PARITYERR                    5
  15. #define MI_CODEERR                      6
  16. #define MI_SERNRERR                     8
  17. #define MI_KEYERR                       9
  18. #define MI_NOTAUTHERR                   10
  19. #define MI_BITCOUNTERR                  11
  20. #define MI_BYTECOUNTERR                 12
  21. #define MI_IDLE                         13
  22. #define MI_TRANSERR                     14
  23. #define MI_WRITEERR                     15
  24. #define MI_INCRERR                      16
  25. #define MI_DECRERR                      17
  26. #define MI_READERR                      18
  27. #define MI_OVFLERR                      19
  28. #define MI_POLLING                      20
  29. #define MI_FRAMINGERR                   21
  30. #define MI_ACCESSERR                    22
  31. #define MI_UNKNOWN_COMMAND              23
  32. #define MI_COLLERR                      24
  33. #define MI_RESETERR                     25
  34. #define MI_INITERR                      25
  35. #define MI_INTERFACEERR                 26
  36. #define MI_ACCESSTIMEOUT                27
  37. #define MI_NOBITWISEANTICOLL            28
  38. #define MI_QUIT                         30
  39. #define MI_RECBUF_OVERFLOW              50 
  40. #define MI_SENDBYTENR                   51
  41. #define MI_SENDBUF_OVERFLOW             53
  42. #define MI_BAUDRATE_NOT_SUPPORTED       54
  43. #define MI_SAME_BAUDRATE_REQUIRED       55
  44. #define MI_WRONG_PARAMETER_VALUE        60
  45. #define MI_BREAK                        99
  46. #define MI_NY_IMPLEMENTED               100
  47. #define MI_NO_MFRC                      101
  48. #define MI_MFRC_NOTAUTH                 102
  49. #define MI_WRONG_DES_MODE               103
  50. #define MI_HOST_AUTH_FAILED             104
  51. #define MI_WRONG_LOAD_MODE              106
  52. #define MI_WRONG_DESKEY                 107
  53. #define MI_MKLOAD_FAILED                108
  54. #define MI_FIFOERR                      109
  55. #define MI_WRONG_ADDR                   110
  56. #define MI_DESKEYLOAD_FAILED            111
  57. #define MI_WRONG_SEL_CNT                114
  58. #define MI_WRONG_TEST_MODE              117
  59. #define MI_TEST_FAILED                  118
  60. #define MI_TOC_ERROR                    119
  61. #define MI_COMM_ABORT                   120
  62. #define MI_INVALID_BASE                 121
  63. #define MI_MFRC_RESET                   122
  64. #define MI_WRONG_VALUE                  123
  65. #define MI_VALERR                       124
  66. #define MI_SAKERR                       0x46 //added by robbie
  67. //rf  Error
  68. #define  RF_OK        0
  69. #define  RF_ERR        255
  70. //常量定义
  71. #define ALL_CARD     1
  72. #define IDLE_CARD 0
  73. #define KEYA 0x00
  74. #define KEYB 0x04
  75. #define DECREMENT 0xc0
  76. #define INCREMENT 0xc1
  77. #define RESTORE   0xc2
  78. //卡类定义
  79. #define  MIFARE_PRO 2
  80. #define  MIFARE_ONE 4
  81. #define  MIFARE_LIGHT 16
  82. //define rf_buffer
  83. #define  SEQNR  0
  84. #define  COMMAND                 1
  85. #define  STATUS                  1
  86. #define  LENGTH                  2
  87. #define  MODE                    3
  88. #define  BCNT                    3
  89. #define  ADR                     3
  90. #define  SERNR                   3
  91. #define  SIZE                    3
  92. #define  TIME                    3
  93. #define  TAGTYPE                 3
  94. #define  INFO                    3
  95. #define  DATA  3
  96. #define  SECNR                   4
  97. #define  DATABYTES               4
  98. #define  VALUE                   4
  99. #define  NKEY                    5
  100. #define  AUTHMODE  7
  101. #define  ADRCHKWR  8
  102. #define  DATACHKWR  9
  103. #define ERROR_BLOCK_VERIFY 150 //块数据校验出错
  104. #define ERROR_BUSINESS_INFO_INVALID 151 //交易信息数据非法,无法恢复
  105. #define ERROR_BUSINESS_LIMIT_INFO_INVALID 152 //交易特别限制信息非法,无法恢复
  106. #define ERROR_PUBLIC_MONEY_INVALID 153 //公共钱包数据非法,无法恢复
  107. #define ERROR_NO_COMPLITE 154 //卡操作未完成,需重刷,否则有可能多扣款
  108. #define ERROR_PARAMETER_INVALID 155 //参数无效
  109. #define ERROR_FILL_INFO_VALID 156 //充值记录无效
  110. //=============================结构表定义==============================
  111. //卡结构分配表(共16字节对应16个扇区,已划分7个扇区)
  112. typedef struct _CARD_STRUCT{
  113. unsigned char cCompanyInfoSector; //公司信息扇区地址
  114. unsigned char cCardholderInfoSector;//持卡人信息扇区地址
  115. unsigned char cPublicMoneySector; //公共钱包区地址
  116. unsigned char cBusinessInfoSector; //交易信息区
  117. unsigned char cTimeCounterSector; //计时信息区
  118. unsigned char cOrderDinnerSector; //订餐信息区
  119. unsigned char cBusinessLimitInfoSector; //交易特别限制信息区
  120. unsigned char cReserve8; //备用8
  121. unsigned char cReserve9; //备用9
  122. unsigned char cReserve10; //备用10
  123. unsigned char cReserve11; //备用11
  124. unsigned char cReserve12; //备用12
  125. unsigned char cReserve13; //备用13
  126. unsigned char cReserve14; //备用14
  127. unsigned char cReserve15; //备用15
  128. unsigned char cReserve16; //备用16
  129. }sttCardStruct;
  130. //公司信息结构(共15字节)
  131. typedef struct _COMPANY_INFO{
  132. unsigned char cCompanyNumber[4]; //公司编码
  133. unsigned char cSubCompanyNumber[5]; //子公司编码
  134. unsigned char cCompanyAddressNumber[6]; //公司地址编码
  135. }sttCompanyInfo;
  136. //持卡人信息结构(40字节)
  137. typedef struct _CARDHOLDER_INFO{
  138. unsigned char cNumber[10]; //持卡人编号
  139. unsigned char cSerialNo[3]; //发卡流水号
  140. unsigned char cName[16]; //持卡人姓名
  141. unsigned char cCardType[2]; //卡类
  142. unsigned char cActiveDate[3]; //启用日期 YY MM DD
  143. unsigned char cInvalidDate[3]; //有效日期 YY MM DD
  144. unsigned char cPassword[3]; //密码
  145. unsigned char cState; //状态
  146. }sttCardholderInfo;
  147. //充值信息结构(15字节)
  148. typedef struct _FILL_INFO{
  149. unsigned char cDateTime[6]; //充值日期时间,格式:YY MM DD HH MM SS
  150. long   lMoney; //充值金额
  151. int   iTimes; //充值次数
  152. unsigned char cDeviceNo[2]; //设备编号
  153. unsigned char cMode; //充值类别
  154. }sttFillInfo;
  155. //交易信息结构(29字节基本信息+15字节充值信息=44字节)
  156. typedef struct _BUSINESS_INFO{
  157. long          lMoney; //货币钱包金额
  158. unsigned int  iTimes; //次钱包值
  159. unsigned char cDate[3]; //交易日期 YY MM DD
  160. unsigned char cIndex[3]; //交易流水号
  161. unsigned char cDayTotalTimes; //日累计交易次数
  162. unsigned int  iMonthTotalTimes; //月累计交易次数
  163. unsigned char cDayTotalMoney[3]; //日累计交易金额
  164. unsigned char cMonthTotalMoney[3]; //月累计交易金额
  165. unsigned char cLimit[8]; //8类累计交易次数
  166. sttFillInfo   stFillInfo; //充值信息
  167. }sttBusinessInfo;
  168. //订餐信息结构(14字节)
  169. typedef struct _ORDER_DINNER_INFO{
  170. unsigned char cDateTime1[6]; //订餐时间1
  171. unsigned char cOrderMode1; //订餐时间1的订餐模式
  172. unsigned char cDateTime2[6]; //订餐时间2
  173. unsigned char cOrderMode2; //订餐时间2的订餐模式
  174. }sttOrderDinnerInfo;
  175. //计时消费信息结构(12字节)
  176. typedef struct _TIME_COUNT_INFO{
  177. unsigned char cStartDateTime[6]; //开始时间
  178. unsigned char cStopDateTime[6]; //结束时间
  179. }sttTimeCountInfo;
  180. //========================函数声明=========================
  181. //----------------------模块信息函数-----------------------
  182. //取得RfModule模块版本号
  183. unsigned char RfModule_GetVersion(unsigned char *Version);
  184. //取得模块内部信息
  185. unsigned char mifs_get_info(unsigned char *_Info);
  186. //------------------Mifare模块基本操作函数-----------------
  187. //RfModule初始化
  188. void  Rf_Init(void);
  189. //Rf模块重新初始化(Rf模块内已经初始化,可不调用此函数)
  190. unsigned char mifs_config(void);
  191. //寻卡
  192. //_Mode:寻卡模式,值为IDLE_CARD或ALL_CARD
  193. //_TagType[2]: 返回寻到的卡类等值
  194. //返回:见错误代码定义
  195. unsigned char mifs_request(unsigned char _Mode,unsigned char *_TagType);
  196. //防冲突
  197. //_Bcnt: 值为0-32 0为找一张最安全的卡
  198. //_SNR[4]:返回寻到的卡系列号
  199. //返回:见错误代码定义
  200. unsigned char mifs_anticoll(unsigned char _Bcnt,unsigned char *_SNR);
  201. //选择卡
  202. //_SNR:要选取的卡系列号
  203. //_Size: 返回选卡结果
  204. //返回:见错误代码定义
  205. unsigned char mifs_select(unsigned char *_SNR,unsigned char *_Size);
  206. //开始校验密钥(密钥存在RC500内)
  207. //_Mode:校验模式,KEYA为校验A密钥,KEYB为校验B密钥
  208. //_SecNr:要较验的扇区0-15
  209. unsigned char mifs_authentication(unsigned char _Mode,unsigned char _SecNr);
  210. //直接校验密码(校验最后一次选择的卡)
  211. //_Mode:校验模式,KEYA为校验A密钥,KEYB为校验B密钥
  212. //_SecNr[4]:要校验密钥的卡系列号
  213. //_Key[6]: 具体密钥
  214. //返回:见错误代码定义
  215. unsigned char mifs_authKey(unsigned char _Mode,
  216.    unsigned char _SecNr,
  217.    unsigned char *_Key);
  218. //加载密码到RC500内存中
  219. //_Mode:密钥类别,KEYA为A密钥,KEYB为B密钥
  220. //_SecNr:密钥对应的扇区,值0-15
  221. //_Nkey[6]: 具体密钥
  222. //返回:见错误代码定义
  223. unsigned char mifs_load_key(unsigned char _Mode,
  224. unsigned char _SecNr,
  225. unsigned char *_Nkey);
  226. //增值操作
  227. //_Adr:操作数据块,值为1-62(扣除密钥块)
  228. //_Value: 操作值指针,C51格式,高字节在前,低字节在后
  229. //返回:见错误代码定义
  230. unsigned char mifs_increment(unsigned char _Adr,long *_Value);
  231. //减值操作
  232. //_Adr:操作数据块,值为1-62(扣除密钥块)
  233. //_Value: 操作值指针,C51格式,高字节在前,低字节在后
  234. //返回:见错误代码定义
  235. unsigned char mifs_decrement(unsigned char _Adr,long *_Value);
  236. //增减值操作
  237. //_Mode:操作模式,DECREMENT减值操作,INCREMENT增值操作
  238. //_Adr:源数据块,值为1-62(扣除密钥块)
  239. //_Value: 操作值指针,C51格式,高字节在前,低字节在后
  240. //_Trans_Adr:目标数据据块,值为1-62(扣除密钥块),
  241. //注:目录数据块必须同源数据块同一个扇区,可以同一个块
  242. //返回:见错误代码定义
  243. unsigned char mifs_value(unsigned char _Mode,
  244.  unsigned char _Adr,
  245.  long *_Value,
  246.  unsigned char _Trans_Adr);
  247. //读卡
  248. //_Adr:要读的块,值0-63
  249. //_Data[16]:返回读出的数据
  250. //返回:见错误代码定义
  251. unsigned char mifs_read(unsigned char _Adr,unsigned char *_Data);
  252. //写卡
  253. //_Adr:要写的块,值1-63
  254. //_Data[16]:返回读出的数据
  255. //返回:见错误代码定义
  256. unsigned char mifs_write(unsigned char _Adr,unsigned char *_Data);
  257. //停止当前卡
  258. //返回:见错误代码定义
  259. unsigned char mifs_halt(void);
  260. //复位当前卡
  261. //_Msec:延时ms
  262. //返回:见错误代码定义
  263. unsigned char mifs_reset(unsigned char _Msec);
  264. //关掉RC500
  265. //返回:见错误代码定义
  266. unsigned char mifs_close(void);
  267. //写模块内RC500的EEPROM
  268. //_Adr:写入开始地址
  269. //_Length:写入长度
  270. //_Data:写入数据
  271. //返回:见错误代码定义
  272. unsigned char mifs_read_E2(unsigned char _Adr,
  273.    unsigned char _Length,
  274.    unsigned char *_Data);
  275. //读模块内RC500的EEPROM
  276. //_Adr:读开始地址
  277. //_Length:读出长度
  278. //_Data:读出数据
  279. //返回:见错误代码定义
  280. unsigned char mifs_write_E2(unsigned char _Adr,
  281. unsigned char _Length,
  282. unsigned char *_Data);
  283. char SetCardApplicationSector(sttCardStruct *pstCardStruct);
  284. char GetCardApplicationSector(sttCardStruct *pstCardStruct);
  285. char RfIsCardIn(unsigned char CardSerialNo[]);
  286. char ReadCompanyInfo(unsigned char CardSerialNo[],
  287.  unsigned char AuthMode,
  288.  unsigned char Key[],
  289.  sttCompanyInfo *pstCompanyInfo);
  290. char ReadCardholderInfo(unsigned char CardSerialNo[],
  291. unsigned char AuthMode,
  292. unsigned char Key[],
  293.     sttCardholderInfo *pstCardholderInfo);
  294. char ReadBusinessInfo(unsigned char CardSerialNo[],
  295.   unsigned char AuthMode,
  296.   unsigned char Key[],
  297.   sttBusinessInfo *pstBusinessInfo);
  298. char Consume(unsigned char CardSerialNo[],
  299.  unsigned char Date[],
  300.  unsigned char Index,
  301.  long lExpenditure,
  302.  unsigned char Flag,
  303.  sttBusinessInfo *pstBusinessInfo);
  304. char ReadOrderDinnerInfoSector(unsigned char CardSerialNo[],
  305.    unsigned char AuthMode,
  306.    unsigned char Key[],
  307.    sttOrderDinnerInfo *pstOrderDinnerInfo);
  308. char WriteOrderDinnerInfo(unsigned char Index,
  309.   unsigned char DateTime[],
  310.   unsigned char OrderMode);
  311. char SetCardState(unsigned char CardSerialNo[],
  312.   unsigned char AuthMode,
  313.       unsigned char Key[],
  314.   unsigned char State);
  315. char Fill(unsigned char CardSerialNo[], 
  316.   sttBusinessInfo *pstBusinessInfo);
  317. #endif