Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

NFCManagerTool.js 6.8KB

vor 1 Jahr
vor 1 Jahr
vor 1 Jahr
vor 1 Jahr
vor 1 Jahr
vor 1 Jahr
vor 1 Jahr
vor 1 Jahr
vor 1 Jahr
vor 1 Jahr
vor 1 Jahr
vor 1 Jahr
vor 1 Jahr
vor 1 Jahr
vor 1 Jahr
vor 1 Jahr
vor 1 Jahr
vor 1 Jahr
vor 1 Jahr
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329
  1. var config = require("./NFCConfig");
  2. var successCode = config.nfcSuccessCode();
  3. var errorCode = config.nfcErrorCode();
  4. var nfcAdapter = null;
  5. var isoDep = null;
  6. var isFirst = false;
  7. export function startScanNfcDevice(callBack) {
  8. isFirst = false;
  9. initNfcAdapter(function(res) {
  10. if (res.code == successCode) {
  11. console.log('初始化NFC适配器实例成功', res)
  12. //注册贴卡监听回调
  13. nfcAdapter.onDiscovered(function(res) {
  14. console.log('监听回调到卡片了', res);
  15. if (!isFirst) {
  16. if (res.techs.includes(nfcAdapter.tech.isoDep)) { //获取isoDep实例
  17. console.log('发现' + nfcAdapter.tech.isoDep + '卡');
  18. isoDep = nfcAdapter.getIsoDep();
  19. isFirst = true;
  20. callBack.call(this, {
  21. code: successCode,
  22. msg: "搜索卡片成功",
  23. data: isoDep
  24. })
  25. }
  26. }
  27. });
  28. //开始监听贴卡
  29. nfcAdapter.startDiscovery({
  30. success: function(res) {
  31. console.log('监听贴卡成功', res)
  32. },
  33. fail: function(err) {
  34. console.log('监听贴卡失败', err)
  35. var msg = "";
  36. if (err) {
  37. msg = nfcErrMsg(err.errCode)
  38. }
  39. callBack.call(this, {
  40. code: errorCode,
  41. msg: msg,
  42. data: null
  43. })
  44. },
  45. })
  46. } else {
  47. //初始化NFC实例失败
  48. callBack.call(this, res)
  49. }
  50. })
  51. };
  52. export function onDiscovered(callBack) {
  53. //注册贴卡监听回调
  54. nfcAdapter.onDiscovered(discoverHandler);
  55. }
  56. export function offDiscovered(callBack) {
  57. //注册贴卡监听回调
  58. nfcAdapter.offDiscovered(discoverHandler);
  59. }
  60. function discoverHandler(res, callBack) {
  61. if (res.techs.includes(nfcAdapter.tech.isoDep)) { //获取isoDep实例
  62. console.log('发现' + nfcAdapter.tech.isoDep + '卡');
  63. isoDep = nfcAdapter.getIsoDep();
  64. callBack.call(this, {
  65. code: successCode,
  66. msg: "搜索卡片成功",
  67. data: isoDep
  68. })
  69. }
  70. }
  71. export function startDiscovery(callBack) {
  72. //开始监听贴卡
  73. nfcAdapter.startDiscovery({
  74. success: function(res) {
  75. console.log('监听贴卡成功', res)
  76. },
  77. fail: function(err) {
  78. console.log('监听贴卡失败', err)
  79. var msg = "";
  80. if (err) {
  81. msg = nfcErrMsg(err.errCode)
  82. }
  83. callBack.call(this, {
  84. code: errorCode,
  85. msg: msg,
  86. data: null
  87. })
  88. }
  89. })
  90. }
  91. export function stopScanNfcDevice(callBack) {
  92. if (nfcAdapter != null) {
  93. nfcAdapter.stopDiscovery({
  94. success: function(res) {
  95. callBack.call(this, {
  96. code: successCode,
  97. msg: "停止扫描成功",
  98. data: null
  99. })
  100. },
  101. fail: function(err) {
  102. var msg = "";
  103. if (err) {
  104. msg = nfcErrMsg(err.errCode)
  105. }
  106. callBack.call(this, {
  107. code: errorCode,
  108. msg: msg,
  109. data: null
  110. })
  111. }
  112. })
  113. } else {
  114. callBack.call(this, {
  115. code: successCode,
  116. msg: "暂无NFC适配器实例",
  117. data: null
  118. })
  119. }
  120. };
  121. export function connectDevice(callBack) {
  122. if (isoDep != null) {
  123. isoDep.connect({
  124. success: function(res) {
  125. console.log('连接卡片成功', res)
  126. callBack.call(this, {
  127. code: successCode,
  128. msg: "连接卡片成功",
  129. data: null
  130. })
  131. },
  132. fail: function(err) {
  133. var msg = "";
  134. if (err) {
  135. msg = nfcErrMsg(err.errCode)
  136. }
  137. console.log("链接卡片失败:", err.errCode)
  138. callBack.call(this, {
  139. code: errorCode,
  140. msg: msg,
  141. data: null
  142. })
  143. }
  144. })
  145. } else {
  146. callBack.call(this, {
  147. code: errorCode,
  148. msg: "连接卡片不存在",
  149. data: null
  150. })
  151. }
  152. };
  153. export function disConnectDevice(callBack) {
  154. if (isoDep != null) {
  155. isoDep.close({
  156. success: function(res) {
  157. callBack.call(this, {
  158. code: successCode,
  159. msg: "断开卡片成功",
  160. data: null
  161. })
  162. },
  163. fail: function(err) {
  164. var msg = "";
  165. if (err) {
  166. msg = nfcErrMsg(err.errCode)
  167. }
  168. callBack.call(this, {
  169. code: errorCode,
  170. msg: msg,
  171. data: null
  172. })
  173. }
  174. })
  175. } else {
  176. callBack.call(this, {
  177. code: successCode,
  178. msg: "暂无连接卡片",
  179. data: null
  180. })
  181. }
  182. };
  183. export function sendMessageToDevice(cmdArr, callBack) {
  184. if (cmdArr.length <= 0) {
  185. callBack.call(this, {
  186. code: errorCode,
  187. msg: "发送数据不能为空",
  188. data: null
  189. })
  190. return
  191. }
  192. var resultCmdArr = [];
  193. for (var i = 0; i < cmdArr.length; i++) {
  194. var sendbuf = hexStringToArrayBuffer(cmdArr[i]);
  195. isoDep.transceive({
  196. data: sendbuf,
  197. success: function(res) {
  198. var resultCmd = arrayBufferToHexString(res.data);
  199. resultCmdArr.push(resultCmd);
  200. if (resultCmdArr.length == cmdArr.length) {
  201. callBack.call(this, {
  202. code: successCode,
  203. msg: "发送数据成功",
  204. data: resultCmdArr
  205. })
  206. }
  207. },
  208. fail: function(err) {
  209. if (i == 0) {
  210. console.log('发送数据失败', err);
  211. var msg = "";
  212. if (err) {
  213. msg = nfcErrMsg(err.errCode)
  214. }
  215. callBack.call(this, {
  216. code: errorCode,
  217. msg: msg,
  218. data: null
  219. })
  220. return
  221. }
  222. }
  223. });
  224. }
  225. };
  226. export function removeObj() {
  227. isoDep = null;
  228. nfcAdapter = null;
  229. }
  230. function initNfcAdapter(callBack) {
  231. // #ifdef MP-ALIPAY
  232. // nfcAdapter = my.getNFCAdapter() //获取NFC适配器实例
  233. // #endif
  234. // #ifdef MP-WEIXIN
  235. nfcAdapter = wx.getNFCAdapter() //获取NFC适配器实例
  236. // #endif
  237. console.log("获取NFC适配器实例:", nfcAdapter);
  238. if (nfcAdapter != null) {
  239. callBack.call(this, {
  240. code: successCode,
  241. msg: "初始化NFC适配器实例成功",
  242. data: null
  243. })
  244. } else {
  245. callBack.call(this, {
  246. code: errorCode,
  247. msg: "初始化NFC适配器实例失败",
  248. data: null
  249. })
  250. }
  251. };
  252. //十六进制字符串转字节数组
  253. function hexStringToArrayBuffer(str) {
  254. var hex = str;
  255. return new Uint8Array(hex.match(/[\da-f]{2}/gi).map(function(h) {
  256. return parseInt(h, 16)
  257. })).buffer;
  258. };
  259. //字节数组转十六进制字符串
  260. function arrayBufferToHexString(buffer) {
  261. return Array.prototype.map.call(new Uint8Array(buffer), x => ('00' +
  262. x.toString(16)).slice(-2)).join('');
  263. };
  264. function nfcErrMsg(errCode) {
  265. switch (errCode) {
  266. case 0:
  267. return "正常";
  268. break;
  269. case 13000:
  270. return "设备不支持NFC";
  271. break;
  272. case 13001:
  273. return "系统NFC开关未打开";
  274. break;
  275. case 13010:
  276. return "未知错误";
  277. break;
  278. case 13019:
  279. return "用户未授权";
  280. break;
  281. case 13011:
  282. return "参数无效";
  283. break;
  284. case 13012:
  285. return "将参数解析为NdefMessage失败";
  286. break;
  287. case 13021:
  288. return "已经开始NFC扫描";
  289. break;
  290. case 13018:
  291. return "尝试在未开始NFC扫描时停止NFC扫描";
  292. break;
  293. case 13022:
  294. return "标签已经连接";
  295. break;
  296. case 13023:
  297. return "尝试在未连接标签时断开连接";
  298. break;
  299. case 13013:
  300. return "未扫描到NFC标签";
  301. break;
  302. case 13014:
  303. return "无效的标签技术";
  304. break;
  305. case 13015:
  306. return "从标签上获取对应技术失败";
  307. break;
  308. case 13024:
  309. return "当前标签技术不支持该功能";
  310. break
  311. case 13017:
  312. return "相关读写操作失败";
  313. break
  314. default:
  315. return "连接失败";
  316. break
  317. }
  318. }