एनएफ़सी कंट्रोलर इंटरफ़ेस (एनसीआई) का इस्तेमाल, एनएफ़सी कंट्रोलर (एनएफ़सीसी) के साथ इंटरैक्ट करने के लिए किया जाता है. इस पेज पर Android के मालिकाना हक वाले NCI कमांड की खास बातें बताई गई हैं.
एनसीआई की परिभाषाएं
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_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_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_CMD |
NCI_MT_RSP | NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_RSP |
सुविधाओं की जानकारी पाने का निर्देश
होस्ट, NFCC के साथ काम करने वाली Android की मालिकाना हक वाली सुविधाओं की सूची के बारे में क्वेरी करने के लिए, NCI_ANDROID_GET_CAPS_CMD
का इस्तेमाल करता है. NCI_ANDROID_GET_CAPS_CMD
कमांड में कोई पैरामीटर नहीं होता.
एनएफ़सीसी को NCI_ANDROID_GET_CAPS_RSP
स्टेटस के साथ STATUS_OK
जवाब देना होगा. साथ ही, काम करने वाली सुविधाओं और सुविधाओं की सूची भी देनी होगी.
अगर एनएफ़सीसी NCI_ANDROID_GET_CAPS_CMD
के साथ काम नहीं करता है, तो होस्ट को यह मानना होगा कि
हर एक सुविधा डिफ़ॉल्ट वैल्यू के हिसाब से काम करती है. अगर एनएफ़सी के जवाब में, किसी खास क्षमता के बारे में जानकारी नहीं दी जाती है, तो होस्ट को यह मानकर चलना चाहिए कि उस सुविधा में डिफ़ॉल्ट तौर पर तय की गई वैल्यू है.
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 में स्टेटस कोड देखें. |
पोलिंग लूप की सूचना
हर पोलिंग लूप फ़्रेम के बाद, एनएफ़सीसी को होस्ट को 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 ऑक्टेट | पोलिंग डेटा रिपोर्ट की लंबाई (मी॰) जिसमें टाइमस्टैंप और गेन फ़ील्ड शामिल हैं. | |||||
टाइमस्टैंप | 4 ऑक्टेट | पोलिंग अनुरोध मिलने के मिलीसेकंड में मेज़र किया गया टाइमस्टैंप, बिग एंडियन. | |||||
गेन | 1 ऑक्टेट | पोलिंग के अनुरोध की ज़रूरत.
0xFF से पता चलता है कि वैल्यू उपलब्ध नहीं है. |
|||||
डेटा | मी॰ - 5 ऑक्टेट | पोलिंग अनुरोध में मौजूद, पहचान से जुड़ा डेटा दिखाता है |
फ़्रेम के टाइप
पोल फ़्रेम | टाइप | साइज़ | वैल्यू/ब्यौरा | |
---|---|---|---|---|
रिमोट फ़ील्ड | 0x00 | 1 ऑक्टेट | 0x00 | फ़ील्ड बंद है |
0x01 | फ़ील्ड चालू है | |||
0x02..0xFF | आरएफ़यू | |||
एनएफ़सी-ए | 0x01 | n ऑक्टेट | वैल्यू में ISO 14443-3 कमांड शामिल होना चाहिए. उदाहरण के लिए, REQ या WUP | |
एनएफ़सी-बी | 0x02 | n ऑक्टेट | वैल्यू में AIF बाइट और ISO 14443-3 कमांड शामिल होना चाहिए (उदाहरण के लिए, REQ या WUP) | |
एनएफ़सी-एफ़ | 0x03 | एन ऑक्टेट | वैल्यू में ISO 14443-3 कमांड शामिल होना चाहिए. उदाहरण के लिए, REQ या WUP | |
एनएफ़सी-वी | 0x04 | n ऑक्टेट | वैल्यू में ISO 14443-3 कमांड शामिल होना चाहिए. उदाहरण के लिए, REQ या WUP | |
कोई जानकारी नहीं है | 0x07 | n ऑक्टेट | रॉ फ़्रेम डेटा |
फ़्लैग बाइट की परिभाषा
झंडे | ||||||||
---|---|---|---|---|---|---|---|---|
b0 | b1 | बी2 | b3 | बी4 | 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 | निगरानी मोड चालू है |