อินเทอร์เฟซตัวควบคุม NFC (NCI) ใช้เพื่อโต้ตอบกับตัวควบคุม NFC (NFCC) หน้านี้จะอธิบายข้อกำหนดของคำสั่ง NCI ที่เป็นกรรมสิทธิ์ของ Android
คําจํากัดความของ NCI
คำสั่ง NCI ที่เป็นกรรมสิทธิ์ของ Android ใช้รหัสกลุ่ม (GID) 0xF
และพื้นที่โค้ดตัวระบุอ็อปโค้ด (OID) ของ Android 0xC
รูปแบบแพ็กเก็ตทั่วไป
รูปแบบแพ็กเก็ต NCI ของ Android เป็นไปตามข้อกำหนด NCI สำหรับแพ็กเก็ตควบคุมที่ใช้ Group_ID 0xF
และ Opcode_ID 0x0C
ที่เป็นกรรมสิทธิ์ สำหรับข้อความที่เป็นกรรมสิทธิ์ของ Android แต่ละรายการ คุณต้องตั้งค่าไบต์แรกของเพย์โหลดแพ็กเก็ตเป็น opcode ของ Android (0x0C
) แพ็กเก็ตควบคุมของ Android ใช้ Message_Type
และ PBF
เพื่อระบุคำสั่ง การตอบกลับ และการแจ้งเตือนในลักษณะเดียวกับคำสั่งมาตรฐาน
รูปแบบแพ็กเก็ต Android แสดงอยู่ในตารางต่อไปนี้
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
Message_Type
|
PBF
|
Group_ID = 0xF (PROPRIETARY)
|
|||||
สงวนไว้สำหรับการใช้งานในอนาคต (RFU) | Opcode_ID = 0x0C (ANDROID)
|
||||||
Payload_Length
|
|||||||
Android_Opcode_ID
|
|||||||
Android_Payload
|
|||||||
ตัวระบุอ็อปโค้ด Android ที่กำหนดไว้แสดงอยู่ในตารางต่อไปนี้ ข้อมูลจำเพาะของแต่ละแพ็กเก็ตจะแสดงในส่วนถัดไป
OID ของ Android | ประเภทข้อความ | ชื่อข้อความ |
---|---|---|
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
|
|
0x | NCI_MT_NTF | NCI_ANDROID_POLLING_FRAME_NTF
|
0x04 | NCI_MT_CMD | NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_CMD |
RSP NCI | NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_RSP |
รับคำสั่งความสามารถ
โฮสต์ใช้ NCI_ANDROID_GET_CAPS_CMD
เพื่อค้นหารายการฟีเจอร์ที่เป็นกรรมสิทธิ์ของ Android ที่ NFCC รองรับ คำสั่ง NCI_ANDROID_GET_CAPS_CMD
จะไม่ใช้พารามิเตอร์ใดๆ
NFCC ต้องตอบกลับด้วยNCI_ANDROID_GET_CAPS_RSP
การตอบกลับที่มีสถานะSTATUS_OK
และรายการความสามารถและฟีเจอร์ที่รองรับ
หาก NFCC ไม่รองรับ NCI_ANDROID_GET_CAPS_CMD
โฮสต์ต้องถือว่าความสามารถแต่ละรายการใช้ค่าเริ่มต้นที่ระบุ หาก NFCC ไม่ได้แสดงความสามารถที่ระบุในการตอบกลับ โฮสต์ต้องถือว่าความสามารถดังกล่าวมีค่าเริ่มต้นที่ระบุ
NCI_ANDROID_GET_CAPS_CMD
ฟิลด์เพย์โหลด | ขนาด | ค่า/คําอธิบาย | |||||
---|---|---|---|---|---|---|---|
ไม่มี | 0 อ็อกเท็ต |
NCI_ANDROID_GET_CAPS_RSP
ฟิลด์เพย์โหลด | ขนาด | ค่า/คําอธิบาย | |||||
---|---|---|---|---|---|---|---|
สถานะ | 1 อ็อกเท็ต | ดูรหัสสถานะในตาราง 140 ของข้อกําหนดของ NCI | |||||
Android_Version
|
2 อ็อกเท็ต | ระบุเวอร์ชันข้อกำหนด Android ที่ NFCC นำมาใช้ | |||||
0x0000 | Android 15 | ||||||
จํานวนความสามารถ | 1 อ็อกเท็ต | จํานวน (n) ของความสามารถที่รองรับ | |||||
Capabilities[0..n] | (m + 2) * n อ็อกเท็ต | ความสามารถที่รองรับ | |||||
ประเภท | 1 อ็อกเท็ต | ตัวระบุของความสามารถ | |||||
Len | 1 อ็อกเท็ต | ความยาว (m) ของค่า | |||||
ค่า | ม. อ็อกเท็ต | มูลค่าของความสามารถ |
ความสามารถที่เป็นกรรมสิทธิ์ของ Android
ชื่อความสามารถ | รหัส | ขนาด | ค่า/คําอธิบาย | |||||
---|---|---|---|---|---|---|---|---|
โหมดสังเกตการณ์ | 0x00 | 1 อ็อกเท็ต | รองรับโหมดสังเกตการณ์
0x00 (ค่าเริ่มต้น) - ไม่รองรับฟีเจอร์นี้ 0x01 - รองรับฟีเจอร์ด้วยการปิดใช้งาน RF จากโฮสต์ (จำเป็นสำหรับ Android 15 ขึ้นไป) ค่าอื่นๆ ทั้งหมดคือ RFU |
|||||
การแจ้งเตือนเฟรมแบบสำรวจ | 0x | 1 อ็อกเท็ต | รองรับการแจ้งเตือนของเฟรมแบบสำรวจ 0x01 หากรองรับ 0x00 (ค่าเริ่มต้น) หากไม่รองรับ ค่าอื่นๆ ทั้งหมดคือ RFU | |||||
โหมดประหยัดพลังงาน | 0x02 | 1 อ็อกเท็ต | การสนับสนุนโหมดประหยัดพลังงาน 0x01 หากรองรับ ส่วน 0x00 (ค่าเริ่มต้น) จะไม่ได้รับการสนับสนุน ค่าอื่นๆ ทั้งหมดคือ RFU | |||||
ตัวกรองลูปการโหวตของ Auotransact | 0x03 | 1 อ็อกเท็ต | การรองรับตัวกรองลูปการสำรวจในเฟิร์มแวร์เพื่อข้ามโหมดสังเกตการณ์สำหรับรูปแบบที่เฉพาะเจาะจงเมื่อเปิดใช้โหมดสังเกตการณ์ทั่วโลก
0x00 (ค่าเริ่มต้น) - ไม่รองรับฟีเจอร์นี้ 0x01 - รองรับตัวกรองลูปการสำรวจ ค่าอื่นๆ ทั้งหมดคือ RFU |
|||||
0x04..0xFF | 0 อ็อกเท็ต | สงวนไว้สำหรับการใช้งานในอนาคต |
คำสั่งการประหยัดพลังงาน
หากต้องการเปลี่ยน NFCC เป็นโหมดประหยัดพลังงาน โฮสต์สามารถใช้คำสั่ง NCI_ANDROID_POWER_SAVING_CMD
NFCC ต้องตอบกลับด้วย NCI_ANDROID_POWER_SAVING_RSP
พร้อมรหัสสถานะที่บ่งบอกถึงความสำเร็จหรือความล้มเหลว
ขณะอยู่ในโหมดประหยัดพลังงาน โฮสต์ต้องไม่ส่งคําสั่งใดๆ ไปยัง NFCC และ NFCC ต้องไม่ส่งการแจ้งเตือนหรือการตอบกลับไปยังโฮสต์ NFCC หรือองค์ประกอบที่ปลอดภัยแบบฝัง (eSE) สามารถรับคำขอการชำระเงินขาเข้าโดยอัตโนมัติตามการกำหนดค่าการกำหนดเส้นทางที่ตั้งไว้ก่อนที่จะเปิดใช้โหมดประหยัดพลังงาน
หากต้องการกลับไปใช้โหมดกำลังไฟเต็ม โฮสต์สามารถรีเซ็ตหรือเริ่มต้น NFCC อีกครั้ง
NCI_ANDROID_POWER_SAVING_CMD
ฟิลด์เพย์โหลด | ขนาด | ค่า/คําอธิบาย | |
---|---|---|---|
โหมดประหยัดพลังงาน | 1 อ็อกเท็ต | 0x00 | ปิดใช้โหมดประหยัดพลังงาน |
0x | เปิดใช้โหมดประหยัดพลังงาน |
NCI_ANDROID_POWER_SAVING_RSP
ฟิลด์เพย์โหลด | ขนาด | ค่า/คําอธิบาย | |||||
---|---|---|---|---|---|---|---|
สถานะ | 1 อ็อกเท็ต | ดูรหัสสถานะในตาราง 140 ของข้อกำหนด NCI |
ตั้งค่าคำสั่งโหมดสังเกตการณ์
โฮสต์จะใช้คำสั่ง NCI_ANDROID_PASSIVE_OBSERVE_MODE_CMD
เพื่อเปิดใช้งานหรือปิดใช้งานโหมดสังเกตการณ์ได้ NFCC ต้องตอบกลับด้วย NCI_ANDROID_PASSIVE_OBSERVE_MODE_RSP
พร้อมรหัสสถานะที่บ่งบอกถึงความสำเร็จหรือความล้มเหลว
เมื่อปิดใช้โหมดสังเกตการณ์ NFCC ต้องใช้กิจกรรมโหมดฟังมาตรฐานตามข้อกำหนดทางเทคนิคของกิจกรรม
เมื่อโหมดสังเกตการณ์ทำงานอยู่ NFCC ต้องไม่ตอบสนองต่อคำขอโพลใดๆ ในระหว่างลูปการโพลในโหมดฟังจนกว่าจะได้รับอนุญาตอย่างชัดเจนจากโฮสต์ NFCC ต้องส่งRF_FIELD_INFO_NTF
การแจ้งเตือน (ตามที่ระบุไว้ในส่วนที่ 5.3 ของข้อกำหนด NCI) เมื่อตรวจพบการเปิดใช้งานภาคสนาม หากการค้นพบโหมดแบบสำรวจทำงานอยู่ NFCC ต้องใช้งานกิจกรรมโหมดแบบสำรวจตามข้อกำหนดทางเทคนิคของกิจกรรม
NFCC สามารถแคชข้อมูลการสำรวจเพื่อดำเนินการเปิดใช้งานอุปกรณ์ทันทีที่ปิดใช้งานโหมดสังเกตการณ์
NFCC ควรปิดโหมดสังเกตการณ์หากโฮสต์ปิดเครื่องด้วยเหตุผลใดก็ตาม (เช่น แบตเตอรี่หมดหรือผู้ใช้เป็นผู้ปิด) เพื่อให้ธุรกรรม SE ดำเนินการต่อได้
NCI_ANDROID_PASSIVE_OBSERVE_MODE_CMD
ฟิลด์เพย์โหลด | ขนาด | ค่า/คำอธิบาย | |
---|---|---|---|
โหมดสังเกต | 1 อ็อกเท็ต | 0x00 | ปิดใช้โหมดสังเกตการณ์ (ค่าเริ่มต้น) |
0x | เปิดใช้โหมดสังเกตการณ์ |
NCI_ANDROID_PASSIVE_OBSERVE_MODE_RSP
ฟิลด์เพย์โหลด | ขนาด | ค่า/คําอธิบาย | |||||
---|---|---|---|---|---|---|---|
สถานะ | 1 อ็อกเท็ต | ดูรหัสสถานะในตาราง 140 ของข้อมูลจำเพาะ NCI |
การแจ้งเตือนเกี่ยวกับลูปการโหวต
NFCC ต้องส่งNCI_ANDROID_POLLING_FRAME_NTF
การแจ้งเตือนไปยังโฮสต์หลังจากเฟรมลูปการโหวตแต่ละเฟรม เมื่อสร้างการแจ้งเตือนทั้ง RF_FIELD_INFO_NTF
และ
NCI_ANDROID_POLLING_FRAME_NTF
แล้ว NFCC ต้องส่ง
NCI_ANDROID_POLLING_FRAME_NTF
หลังจาก RF_FIELD_INFO_NTF
การแจ้งเตือน NCI_ANDROID_POLLING_FRAME_NTF
จะไม่ขึ้นอยู่กับว่าโหมดสังเกตการณ์ทำงานอยู่หรือไม่ เมื่อโหมดสังเกตการณ์ทำงานอยู่ NFCC จะต้องส่งการแจ้งเตือน NCI_ANDROID_POLLING_FRAME_NTF
เสมอก่อนที่จะดําเนินธุรกรรมต่อ
NCI_ANDROID_POLLING_FRAME_NTF
ฟิลด์เพย์โหลด | ขนาด | ค่า/คำอธิบาย | |||||
---|---|---|---|---|---|---|---|
Polling Data[0..n] | (m +3) * n อ็อกเท็ต | รายการคำขอการสำรวจที่ได้รับนับตั้งแต่การแจ้งเตือนครั้งล่าสุด ผลการค้นหาแต่ละรายการจะแสดงประเภท (เทคโนโลยี) ของคำขอที่ได้รับและข้อมูลที่ระบุตัวตนได้จากคำขอ ทั้งนี้ขึ้นอยู่กับเทคโนโลยี | |||||
ประเภท | 1 อ็อกเท็ต | ดูประเภทเฟรม | |||||
ธง | 1 อ็อกเท็ต | ดูไบต์ Flag | |||||
ความยาว | 1 อ็อกเท็ต | ความยาว (ม.) ของรายงานข้อมูลการสำรวจ รวมถึงฟิลด์การประทับเวลาและอัตราขยาย | |||||
การประทับเวลา | 4 อ็อกเท็ต | การประทับเวลาที่วัดเป็นมิลลิวินาทีของการรับคําขอการโหวตแบบ Big Endian | |||||
อัตราขยาย | 1 อ็อกเท็ต | ความแรงของคำขอการสำรวจ
0xFF บ่งบอกว่าไม่มีค่า |
|||||
ข้อมูล | ม. - 5 อ็อกเท็ต | แสดงข้อมูลที่ระบุตัวตนได้ในคําขอการโหวต |
ประเภทเฟรม
เฟรมแบบสำรวจ | ประเภท | ขนาด | ค่า/คําอธิบาย | |
---|---|---|---|---|
ฟิลด์ระยะไกล | 0x00 | 1 อ็อกเท็ต | 0x00 | ปิดช่อง |
0x | ฟิลด์เปิดอยู่ | |||
0x02..0xFF | แบบ RFU | |||
NFC-A | 0x01 | อ็อกเท็ต n | ค่าต้องมีคำสั่ง ISO 14443-3 (เช่น REQ หรือ WUP) | |
NFC-B | 0x02 | อ็อกเท็ต n | ค่าต้องมีไบต์ AIF และคำสั่ง ISO 14443-3 (เช่น REQ หรือ WUP) | |
NFC-F | 0x | อ็อกเท็ต n | ค่าต้องมีคำสั่ง ISO 14443-3 (เช่น REQ หรือ WUP) | |
NFC-V | 0x04 | อ็อกเท็ต n | ค่าต้องมีคำสั่ง ISO 14443-3 (เช่น REQ หรือ WUP) | |
ไม่ทราบ | 0x07 | อ็อกเท็ต n | ข้อมูลเฟรมดิบ |
คำจำกัดความของไบต์แฟล็ก
ธง | ||||||||
---|---|---|---|---|---|---|---|---|
b0 | ข1 | วิ | b3 | b4 | b5 | b6 | b7 | |
0 | เฟรมสั้น | แบบ RFU | RFU | RFU | RFU | RFU | RFU | RFU |
1 | เฟรมขนาดยาว |
คำสั่งสถานะโหมดสังเกตการณ์การค้นหา
หากต้องการเรียกดูสถานะปัจจุบันของโหมดคำสั่งแบบพาสซีฟ โฮสต์สามารถใช้คำสั่ง NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_CMD
NFCC ต้องตอบกลับด้วย NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_RSP
พร้อมรหัสสถานะที่บ่งบอกถึงความสำเร็จหรือความล้มเหลว
NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_CMD
ฟิลด์เพย์โหลด | ขนาด | ค่า/คําอธิบาย | |||||
---|---|---|---|---|---|---|---|
ไม่มี | 0 อ็อกเท็ต |
NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_RSP
ฟิลด์เพย์โหลด | ขนาด | ค่า/คําอธิบาย | |
---|---|---|---|
สถานะ | 1 อ็อกเท็ต | ดูรหัสสถานะในตาราง 140 ของข้อกำหนด NCI | |
โหมดสังเกต | 1 อ็อกเท็ต | 0x00 | ปิดใช้โหมดสังเกตการณ์แล้ว |
0x | เปิดใช้โหมดสังเกตการณ์อยู่ |