-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathHkNfcB.cpp
92 lines (73 loc) · 1.86 KB
/
HkNfcB.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#include "HkNfcRule.h"
#ifdef HKNFCRW_USE_NFCB
#include "HkNfcRw.h"
#include "HkNfcB.h"
#include "NfcPcd.h"
#define LOG_TAG "HkNfcB"
#include "nfclog.h"
namespace {
//Polling
const uint8_t INLISTPASSIVETARGET[] = { 0x03, 0x00 };
const uint8_t INLISTPASSIVETARGET_RES = 0x01;
}
/**
* [NFC-B]Polling
*
* @retval true 成功
* @retval false 失敗
*/
bool HkNfcB::polling()
{
int ret;
uint8_t responseLen;
uint8_t* pData;
ret = NfcPcd::inListPassiveTarget(
INLISTPASSIVETARGET, sizeof(INLISTPASSIVETARGET),
&pData, &responseLen);
if (!ret || (responseLen < 17)) {
//LOGE("pollingB fail: ret=%d/len=%d\n", ret, responseLen);
return false;
}
//[0] d5
//[1] 4b
//[2] NbTg
//[3] Tg
if(*(pData + 3) != 0x01) {
LOGE("bad TargetNo : %02x", *(pData + 3));
return false;
}
//[4] 50
if(*(pData + 4) != 0x50) {
LOGE("not ATQB : %02x", *(pData + 4));
return false;
}
//[5..8]NFCID0
NfcPcd::setNfcId(pData + 5, NFCID_LEN);
LOGD("NFCID0 : %02x%02x%02x%02x\n", *(pData + 5), *(pData + 6), *(pData + 7), *(pData + 8));
//Application Data
//[9]AFI
LOGD("AFI : %02x\n", *(pData + 9));
//[10]CRC_B(AID)[0]
//[11]CRC_B(AID)[1]
LOGD("CRC_B(AID) : %02x%02x\n", *(pData + 10), *(pData + 11));
//[12]Number of application
LOGD("Number of application : %02x\n", *(pData + 12));
//Protocol Info
//[13]Bit_Rate_Capability
LOGD("Bit_Rate_Capability : %02x\n", *(pData + 13));
//[14][FSCI:4][Protocol_Type:4]
LOGD("FSCI : %x\n", *(pData + 14) >> 4);
LOGD("Protocol_Type : %x\n", *(pData + 14) & 0x0f);
//[15][FWI:4][ADC:2][FO:2]
LOGD("FWI : %x\n", *(pData + 15) >> 4);
LOGD("ADC : %x\n", (*(pData + 15) >> 2) & 0x03);
LOGD("FO : %x\n", *(pData + 15) & 0x03);
//[??]optional
//ATTRIB_RES
//[16]Length
for(int i=0; i<*(pData + 16); i++) {
LOGD("[ATTRIB_RES]%02x\n", *(pData + 17 + i));
}
return true;
}
#endif /* HKNFCRW_USE_NFCB */