एनएफ़सी कंट्रोलर इंटरफ़ेस (एनसीआई) का इस्तेमाल, एनएफ़सी कंट्रोलर (एनएफ़सीसी) के साथ इंटरैक्ट करने के लिए किया जाता है. इस पेज पर, Android के मालिकाना एनसीआई निर्देशों की खास बातों के बारे में बताया गया है.
एनसीआई की परिभाषाएं
Android के मालिकाना हक वाले एनसीआई कमांड, मालिकाना हक वाले ग्रुप आईडी (जीआईडी) 0xF
और 0xC
के Android ऑपरेंड कोड आइडेंटिफ़ायर (ओआईडी) कोड स्पेस का इस्तेमाल करते हैं.
सामान्य पैकेट फ़ॉर्मैट
Android एनसीआई पैकेट फ़ॉर्मैट, एनसीआई स्पेसिफ़िकेशन का पालन करता है. यह Group_ID 0xF
और Opcode_ID 0x0C
का इस्तेमाल करके, कंट्रोल पैकेट के लिए एनसीआई स्पेसिफ़िकेशन का पालन करता है. Android के हर मालिकाना मैसेज के लिए, पैकेट पेलोड का पहला बाइट, Android ऑपरेंड कोड (0x0C
) पर सेट होना चाहिए. Android कंट्रोल पैकेट, निर्देशों, जवाबों, और सूचनाओं की पहचान करने के लिए, स्टैंडर्ड निर्देशों की तरह ही Message_Type
और PBF
का इस्तेमाल करते हैं.
Android पैकेट फ़ॉर्मैट, नीचे दी गई टेबल में दिखाया गया है:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
Message_Type
|
PBF
|
Group_ID = 0xF (PROPRIETARY)
|
|||||
आने वाले समय में इस्तेमाल के लिए रिज़र्व किया गया (आरएफ़यू) | Opcode_ID = 0x0C (ANDROID)
|
||||||
Payload_Length
|
|||||||
Android_Opcode_ID
|
|||||||
Android_Payload
|
|||||||
असाइन किए गए Android ऑपरेंड कोड आइडेंटिफ़ायर, नीचे दी गई टेबल में दिए गए हैं. अगले सेक्शन में, हर पैकेट के लिए स्पेसिफ़िकेशन दिया गया है.
Android OID | मैसेज का टाइप | मैसेज का नाम |
---|---|---|
0x00 | NCI_MT_CMD | NCI_ANDROID_GET_CAPS_CMD |
NCI_MT_RSP | NCI_ANDROID_GET_CAPS_RSP
|
|
0x01 | NCI_MT_CMD | NCI_ANDROID_POWER_SAVING_CMD
|
NCI_MT_RSP | NCI_ANDROID_POWER_SAVING_RSP
|
|
0x02 | NCI_MT_CMD | NCI_ANDROID_PASSIVE_OBSERVE_MODE_CMD |
NCI_MT_RSP | NCI_ANDROID_PASSIVE_OBSERVE_MODE_RSP
|
|
0x03 | NCI_MT_NTF | NCI_ANDROID_POLLING_FRAME_NTF
|
0x04 | NCI_MT_CMD | NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_CMD |
NCI_MT_RSP | NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_RSP |
सुविधाओं की जानकारी पाने का निर्देश
होस्ट, एनएफ़सीसी के साथ काम करने वाली Android की मालिकाना हक वाली सुविधाओं की सूची के बारे में क्वेरी करने के लिए, NCI_ANDROID_GET_CAPS_CMD
का इस्तेमाल करता है. NCI_ANDROID_GET_CAPS_CMD
कमांड में कोई पैरामीटर नहीं होता.
एनएफ़सीसी को NCI_ANDROID_GET_CAPS_RSP
स्टेटस के साथ STATUS_OK
जवाब देना होगा. साथ ही, काम करने वाली सुविधाओं और सुविधाओं की सूची भी देनी होगी.
अगर एनएफ़सीसी NCI_ANDROID_GET_CAPS_CMD
के साथ काम नहीं करता है, तो होस्ट को यह मानना होगा कि सुविधाओं की हर वैल्यू, तय की गई डिफ़ॉल्ट वैल्यू होती है. अगर NFCC, रिस्पॉन्स में किसी तय की गई सुविधा की जानकारी नहीं देता है, तो होस्ट को यह मान लेना चाहिए कि सुविधा की डिफ़ॉल्ट वैल्यू तय की गई है.
NCI_ANDROID_GET_CAPS_CMD
पेलोड फ़ील्ड | साइज़ | वैल्यू/ब्यौरा | |||||
---|---|---|---|---|---|---|---|
लागू नहीं | 0 ऑक्टेट |
NCI_ANDROID_GET_CAPS_RSP
पेलोड फ़ील्ड | साइज़ | वैल्यू/ब्यौरा | |||||
---|---|---|---|---|---|---|---|
स्थिति | 1 ऑक्टेट | एनसीआई स्पेसिफ़िकेशन की टेबल 140 में स्टेटस कोड देखें. | |||||
Android_Version
|
दो ऑक्टेट | इससे, Android की उन ज़रूरी शर्तों के वर्शन की पहचान होती है जिन्हें एनएफ़सीसी लागू करता है. | |||||
0x0000 | Android 15 | ||||||
सुविधाओं की संख्या | 1 ऑक्टेट | काम करने वाली सुविधाओं की संख्या (n) | |||||
Capabilities[0..n] | (m + 2) * n ऑक्टेट | इस्तेमाल की जा सकने वाली सुविधाएं | |||||
टाइप | 1 ऑक्टेट | सुविधा का आइडेंटिफ़ायर | |||||
लेन | 1 ऑक्टेट | वैल्यू की लंबाई (मीटर) | |||||
वैल्यू | m ऑक्टेट | सुविधा की वैल्यू |
Android की मालिकाना हक वाली सुविधाएं
क्षमता का नाम | आईडी | साइज़ | वैल्यू/ब्यौरा | |||||
---|---|---|---|---|---|---|---|---|
निगरानी मोड | 0x00 | 1 ऑक्टेट | निगरानी मोड के लिए सहायता.
0x00 (डिफ़ॉल्ट) - इस सुविधा के साथ काम नहीं करता. 0x01 - होस्ट से आरएफ बंद करने की सुविधा के साथ काम करता है (Android 15 या उसके बाद के वर्शन के लिए ज़रूरी है). अन्य सभी वैल्यू, आरएफ़यू हैं. |
|||||
पोलिंग फ़्रेम की सूचना | 0x01 | 1 ऑक्टेट | पोलिंग फ़्रेम की सूचनाओं के लिए सहायता. अगर यह सुविधा काम करती है, तो 0x01 और अगर नहीं करती है, तो 0x00 (डिफ़ॉल्ट). अन्य सभी वैल्यू, आरएफ़यू हैं. | |||||
बैटरी सेव करने वाला मोड | 0x02 | 1 ऑक्टेट | बैटरी सेव करने वाले मोड के साथ काम करना. अगर यह सुविधा काम करती है, तो 0x01 और अगर नहीं करती है, तो 0x00 (डिफ़ॉल्ट). अन्य सभी वैल्यू, आरएफ़यू हैं. | |||||
Auotransact polling loop filter | 0x03 | 1 ऑक्टेट | फ़र्मवेयर में पोलिंग लूप फ़िल्टर के लिए सहायता, ताकि निगरानी मोड को दुनिया भर में चालू होने पर, खास पैटर्न के लिए निगरानी मोड को बायपास किया जा सके.
0x00 (डिफ़ॉल्ट) - इस सुविधा के साथ काम नहीं करता 0x01 - पोलिंग लूप फ़िल्टर के साथ काम करता है अन्य सभी वैल्यू, आरएफ़यू हैं |
|||||
0x04..0xFF | 0 ऑक्टेट | आने वाले समय में इस्तेमाल के लिए रिज़र्व किया गया |
बैटरी बचाने का कमांड
एनएफ़सीसी को पावर सेविंग मोड में ट्रांज़िशन करने के लिए, होस्ट NCI_ANDROID_POWER_SAVING_CMD
कमांड का इस्तेमाल कर सकता है. एनएफ़सीसी को NCI_ANDROID_POWER_SAVING_RSP
के साथ जवाब देना होगा. साथ ही, इसमें स्टेटस कोड देना होगा, ताकि यह पता चल सके कि अनुरोध पूरा हो गया है या नहीं.
पावर सेविंग मोड में, होस्ट को एनएफ़सीसी को कोई निर्देश नहीं भेजना चाहिए और एनएफ़सीसी को होस्ट को कोई सूचना या जवाब नहीं भेजना चाहिए. एनएफ़सीसी या एम्बेड किया गया सुरक्षित एलिमेंट (eSE), पावर सेविंग मोड चालू करने से पहले सेट किए गए रूटिंग कॉन्फ़िगरेशन के हिसाब से, पेमेंट के आने वाले अनुरोधों को अपने-आप स्वीकार कर सकता है.
फ़ुल पावर मोड पर वापस जाने के लिए, होस्ट एनएफ़सीसी को रीसेट या फिर से शुरू कर सकता है.
NCI_ANDROID_POWER_SAVING_CMD
पेलोड फ़ील्ड | साइज़ | वैल्यू/ब्यौरा | |
---|---|---|---|
बैटरी सेव करने वाला मोड | 1 ऑक्टेट | 0x00 | पावर सेविंग मोड बंद करना |
0x01 | बैटरी सेव करने वाला मोड चालू करना |
NCI_ANDROID_POWER_SAVING_RSP
पेलोड फ़ील्ड | साइज़ | वैल्यू/ब्यौरा | |||||
---|---|---|---|---|---|---|---|
स्थिति | 1 ऑक्टेट | एनसीआई स्पेसिफ़िकेशन की टेबल 140 में स्टेटस कोड देखें, |
निगरानी मोड सेट करने का निर्देश
निगरानी मोड को चालू या बंद करने के लिए, होस्ट NCI_ANDROID_PASSIVE_OBSERVE_MODE_CMD
कमांड का इस्तेमाल कर सकता है. एनएफ़सीसी को NCI_ANDROID_PASSIVE_OBSERVE_MODE_RSP
के साथ जवाब देना होगा. साथ ही, इसमें स्टेटस कोड होना चाहिए, जिससे यह पता चल सके कि अनुरोध पूरा हुआ है या नहीं.
निगरानी मोड बंद होने पर, एनएफ़सीसी को गतिविधि की तकनीकी जानकारी के मुताबिक, स्टैंडर्ड सुनने के मोड की गतिविधि लागू करनी होगी.
निगरानी मोड चालू होने पर, NFCC को सुनने वाले मोड में पोल करने के दौरान, किसी भी पोल अनुरोध का जवाब नहीं देना चाहिए. ऐसा तब तक नहीं करना चाहिए, जब तक होस्ट से साफ़ तौर पर अनुमति न मिल जाए. फ़ील्ड चालू होने का पता चलने पर, एनएफ़सीसी को RF_FIELD_INFO_NTF
सूचना भेजनी होगी. यह सूचना, एनसीआई स्पेसिफ़िकेशन के सेक्शन 5.3 में बताई गई है. अगर पोल मोड डिस्कवरी चालू है, तो एनएफ़सीसी को गतिविधि की तकनीकी जानकारी के मुताबिक, पोल मोड गतिविधि को लागू करना होगा.
एनएफ़सीसी, पोल की जानकारी को कैश मेमोरी में सेव कर सकता है, ताकि निगरानी मोड बंद होने के तुरंत बाद डिवाइस को चालू किया जा सके.
अगर होस्ट किसी वजह से बंद हो जाता है, तो NFCC को निगरानी मोड बंद कर देना चाहिए. उदाहरण के लिए, बैटरी खत्म होने या उपयोगकर्ता के बंद करने की वजह से. इससे SE लेन-देन जारी रह सकते हैं.
NCI_ANDROID_PASSIVE_OBSERVE_MODE_CMD
पेलोड फ़ील्ड | साइज़ | वैल्यू/ब्यौरा | |
---|---|---|---|
निगरानी मोड | 1 ऑक्टेट | 0x00 | निगरानी मोड बंद करना (डिफ़ॉल्ट) |
0x01 | निगरानी मोड चालू करना |
NCI_ANDROID_PASSIVE_OBSERVE_MODE_RSP
पेलोड फ़ील्ड | साइज़ | वैल्यू/ब्यौरा | |||||
---|---|---|---|---|---|---|---|
स्थिति | 1 ऑक्टेट | एनसीआई स्पेसिफ़िकेशन की टेबल 140 में स्टेटस कोड देखें. |
पोलिंग लूप की सूचना
हर पोलिंग लूप फ़्रेम के बाद, NFCC को होस्ट को NCI_ANDROID_POLLING_FRAME_NTF
सूचना भेजनी चाहिए. जब RF_FIELD_INFO_NTF
और
NCI_ANDROID_POLLING_FRAME_NTF
, दोनों सूचनाएं जनरेट की जाती हैं, तो एनएफ़सीसी को RF_FIELD_INFO_NTF
के बाद
NCI_ANDROID_POLLING_FRAME_NTF
भेजनी होगी.
NCI_ANDROID_POLLING_FRAME_NTF
की सूचना, इस बात पर निर्भर नहीं करती कि निगरानी मोड चालू है या नहीं. निगरानी मोड चालू होने पर, लेन-देन शुरू करने से पहले एनएफ़सीसी को हमेशा NCI_ANDROID_POLLING_FRAME_NTF
सूचना भेजनी होगी.
NCI_ANDROID_POLLING_FRAME_NTF
पेलोड फ़ील्ड | साइज़ | वैल्यू/ब्यौरा | |||||
---|---|---|---|---|---|---|---|
Polling Data[0..n] | (m +3) * n ऑक्टेट | पिछली सूचना के बाद से मिले, पोलिंग के अनुरोधों की सूची. हर नतीजे में, मिले अनुरोधों का टाइप (टेक्नोलॉजी) और टेक्नोलॉजी के हिसाब से, अनुरोध से मिला पहचाने जा सकने वाला डेटा दिखता है. | |||||
टाइप | 1 ऑक्टेट | फ़्रेम के टाइप देखें. | |||||
झंडे | 1 ऑक्टेट | फ़्लैग बाइट देखें. | |||||
लंबाई | 1 ऑक्टेट | पोल के डेटा की रिपोर्ट की लंबाई (मीटर), जिसमें टाइमस्टैंप और गेन फ़ील्ड शामिल हैं. | |||||
टाइमस्टैंप | चार ऑक्टेट | पोलिंग रिक्वेस्ट मिलने के समय का टाइमस्टैंप, मिलीसेकंड में. यह टाइमस्टैंप, बिग इंडियन फ़ॉर्मैट में होता है. | |||||
गेन | 1 ऑक्टेट | पोलिंग के अनुरोध की ज़रूरत.
0xFF से पता चलता है कि वैल्यू उपलब्ध नहीं है. |
|||||
डेटा | m - पांच ऑक्टेट | पोलिंग अनुरोध में मौजूद, पहचान से जुड़ा डेटा दिखाता है |
फ़्रेम के टाइप
पोल फ़्रेम | टाइप | साइज़ | वैल्यू/ब्यौरा | |
---|---|---|---|---|
रिमोट फ़ील्ड | 0x00 | 1 ऑक्टेट | 0x00 | फ़ील्ड बंद है |
0x01 | फ़ील्ड चालू है | |||
0x02..0xFF | आरएफ़यू | |||
एनएफ़सी-ए | 0x01 | n ऑक्टेट | वैल्यू में ISO 14443-3 कमांड शामिल होना चाहिए. उदाहरण के लिए, REQ या WUP | |
एनएफ़सी-बी | 0x02 | n ऑक्टेट | वैल्यू में AIF बाइट और ISO 14443-3 कमांड शामिल होना चाहिए (उदाहरण के लिए, REQ या WUP) | |
एनएफ़सी-एफ़ | 0x03 | n ऑक्टेट | वैल्यू में ISO 14443-3 कमांड शामिल होना चाहिए. उदाहरण के लिए, REQ या WUP | |
एनएफ़सी-वी | 0x04 | n ऑक्टेट | वैल्यू में ISO 14443-3 कमांड शामिल होना चाहिए. उदाहरण के लिए, REQ या WUP | |
कोई जानकारी नहीं है | 0x07 | n ऑक्टेट | रॉ फ़्रेम डेटा |
फ़्लैग बाइट की परिभाषा
झंडे | ||||||||
---|---|---|---|---|---|---|---|---|
b0 | b1 | b2 | b3 | b4 | b5 | b6 | b7 | |
0 | छोटा फ़्रेम | आरएफ़यू | आरएफ़यू | आरएफ़यू | आरएफ़यू | आरएफ़यू | आरएफ़यू | आरएफ़यू |
1 | लंबा फ़्रेम |
'निगरानी मोड की स्थिति' क्वेरी करने का निर्देश
पैसिव ऑर्डर मोड की मौजूदा स्थिति देखने के लिए, होस्ट NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_CMD
कमांड का इस्तेमाल कर सकता है. एनएफ़सीसी को NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_RSP
के साथ जवाब देना चाहिए. साथ ही, स्टेटस कोड से यह बताना चाहिए कि अनुरोध पूरा हो गया है या नहीं.
NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_CMD
पेलोड फ़ील्ड | साइज़ | वैल्यू/ब्यौरा | |||||
---|---|---|---|---|---|---|---|
लागू नहीं | 0 ऑक्टेट |
NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_RSP
पेलोड फ़ील्ड | साइज़ | वैल्यू/ब्यौरा | |
---|---|---|---|
स्थिति | 1 ऑक्टेट | एनसीआई स्पेसिफ़िकेशन की टेबल 140 में स्टेटस कोड देखें, | |
निगरानी मोड | 1 ऑक्टेट | 0x00 | निगरानी मोड बंद है |
0x01 | निगरानी मोड चालू है |