AOSP ใช้สแต็กแถบความถี่กว้างยิ่งยวด (UWB) ที่ใช้อินเทอร์เฟซ UCI ที่ FiRa กำหนดเป็นแพลตฟอร์ม HAL อินเทอร์เฟซ HAL ใช้ไปป์ทึบ (IUwbChip::sendUciMessage()
และ IUwbClientCallback::onUciMessage()
) เพื่อส่งและรับคําสั่ง การตอบกลับ และการแจ้งเตือนของอินเทอร์เฟซคําสั่ง UWB (UCI)
ผู้ให้บริการ UWB ทั้งหมดของ Android ต้องรองรับข้อความทั้งหมดที่ระบุไว้ในข้อกำหนดของ FiRa เฟรมเวิร์ก UWB ใช้งานย้อนหลังได้และทำงานร่วมกับ UCI เวอร์ชันใดก็ได้ที่ผู้ให้บริการ UWB ติดตั้งใช้งานในอุปกรณ์ เนื่องจากเฟรมเวิร์ก UWB ของ AOSP เป็นโมดูล จึงสามารถเพิ่มการรองรับคำขอเปลี่ยนแปลง (CR) ที่อนุมัติแล้วจากข้อกำหนดฉบับร่างของ UCI ที่มุ่งเป้าไปยังรุ่นมาตรฐาน FiRa หลักได้ เนื้อหาร่างคำตอบที่ติดตั้งใช้งานอาจมีการเปลี่ยนแปลง
คําจํากัดความของอินเทอร์เฟซ
อินเทอร์เฟซ UWB HAL กำหนดโดยใช้ AIDL ที่เสถียร
อินเทอร์เฟซหลักใช้แพ็กเกจ android.hardware.uwb
อินเทอร์เฟซหลัก 2 รายการในandroid.hardware.uwb
แพ็กเกจมีดังนี้
IUwbChip.aidl
package android.hardware.uwb;
interface IUwbChip {
String getName();
void open(in android.hardware.uwb.IUwbClientCallback clientCallback);
void close();
void coreInit();
void sessionInit(int sessionId);
int getSupportedAndroidUciVersion();
int sendUciMessage(in byte[] data);
}
IUwbClientCallback.aidl
package android.hardware.uwb;
interface IUwbClientCallback {
oneway void onUciMessage(in byte[] data);
oneway void onHalEvent(in android.hardware.uwb.UwbEvent event, in android.hardware.uwb.UwbStatus status);
}
ขั้นตอนการโทรผ่าน HAL จากเฟรมเวิร์ก UWB
รูปภาพต่อไปนี้แสดงขั้นตอนการเรียกใช้จากเฟรมเวิร์ก UWB สำหรับการเริ่มต้นใช้งานสแต็ก UWB การปลดค่าเริ่มต้นสแต็ก UWB และกระบวนการเริ่มและหยุดเซสชัน UWB
รูปที่ 1 ขั้นตอนการเรียกใช้เพื่อเริ่มต้นสแต็ก UWB (เปิดสวิตช์ UWB)
รูปที่ 2 เวิร์กโฟลว์การเรียกใช้เพื่อล้างค่าเริ่มต้นของสแต็ก UWB (ปิดสวิตช์ UWB)
รูปที่ 3 ขั้นตอนการเริ่ม/หยุดเซสชัน UWB
การกําหนดค่ารหัสประเทศ UWB
ดังที่แสดงในรูปที่ 1 เฟรมเวิร์ก UWB จะกำหนดค่ารหัสประเทศ UWB ระหว่างการเริ่มต้นใช้งานสแต็ก UWB โดยใช้คำสั่ง UCI ของพื้นที่ขายตัวแทนจำหน่าย ANDROID_SET_COUNTRY_CODE
(GID=0xC
, OID=0x1
) เฟรมเวิร์ก UWB จะพยายามระบุรหัสประเทศ UWB โดยใช้แหล่งที่มาต่อไปนี้ (แสดงตามลําดับความสําคัญ) เฟรมเวิร์ก UWB จะหยุดที่แหล่งที่มาแรกที่มีการกำหนดรหัสประเทศ
- ลบล้างรหัสประเทศ: บังคับใช้รหัสประเทศผ่านคําสั่ง adb shell (การทดสอบในเครื่องหรือการทดสอบอัตโนมัติ)
- รหัสประเทศของโทรศัพท์: รหัสประเทศที่ดึงข้อมูลผ่านเครือข่ายมือถือ หากมีซิมหลายใบที่แสดงรหัสต่างกัน รหัสประเทศที่เลือกจะเป็นแบบไม่แน่นอน
- รหัสประเทศของ Wi-Fi: รหัสประเทศที่ดึงข้อมูลผ่าน Wi-Fi (80211.ad)
- รหัสประเทศของโทรศัพท์ที่ทราบล่าสุด: รหัสประเทศที่ทราบล่าสุดที่ดึงข้อมูลผ่านเครือข่ายมือถือ หากมีซิมหลายใบที่แสดงรหัสต่างกัน รหัสประเทศที่เลือกจะเป็นแบบไม่กำหนด
- รหัสประเทศของสถานที่ตั้ง: รหัสประเทศที่ดึงมาจาก
LocationManager
ผู้ให้บริการตำแหน่งแบบรวม - รหัสประเทศเริ่มต้นของ OEM: รหัสประเทศที่ผู้ผลิตอุปกรณ์กำหนด
หากเฟรมเวิร์ก UWB ไม่สามารถระบุรหัสประเทศ UWB ได้ ระบบจะเรียกใช้ANDROID_SET_COUNTRY_CODE
คําสั่ง UCI ที่มีค่าเป็น DEFAULT_COUNTRY_CODE ("00")
และแจ้งให้แอป UWB ทราบว่าสถานะสแต็ก UWB คือ DISABLED
หลังจากนั้น เมื่อเฟรมเวิร์ก UWB ระบุรหัสประเทศที่ถูกต้องได้ ก็จะกำหนดค่ารหัสประเทศใหม่โดยใช้คำสั่ง ANDROID_SET_COUNTRY_CODE
และแจ้งให้แอป UWB ทราบว่าสแต็ก UWB นั้นคือ READY
หากใช้ UWB ไม่ได้เนื่องจากกฎระเบียบท้องถิ่นในประเทศ ตัวควบคุม UWB จะแสดงรหัสสถานะ STATUS_CODE_ANDROID_REGULATION_UWB_OFF
จากนั้นเฟรมเวิร์ก UWB จะแจ้งให้แอป UWB ทราบว่าสถานะสแต็ก UWB คือ DISABLED
เมื่อผู้ใช้เดินทางไปยังประเทศอื่น เฟรมเวิร์ก UWB จะกำหนดค่ารหัสประเทศใหม่โดยใช้ANDROID_SET_COUNTRY_CODE
คําสั่ง UCI การดำเนินการนี้อาจส่งผลให้สถานะสแต็ก UWB เปลี่ยนแปลงไป ทั้งนี้ขึ้นอยู่กับรหัสสถานะที่ตัวควบคุม UWB แสดง (ตามกฎระเบียบ UWB ในประเทศใหม่)
รูปแบบคำสั่งที่กําหนดโดยข้อกําหนด FIRA UCI
สำหรับรูปแบบของแพ็กเก็ตควบคุม UCI โปรดดูส่วนที่ 4.4.2 ของข้อมูลจำเพาะ UCI
การกำหนดเวอร์ชันอินเทอร์เฟซ
ข้อกำหนด UCI ช่วยให้ผู้ให้บริการ UWB แสดงเวอร์ชันของแพ็กเกจ UCI ที่อุปกรณ์นำมาใช้งานโดยใช้คำสั่ง UCI_GET_DEVICE_INFO_RSP
และ UCI_GET_CAPS_INFO_RSP
เฟรมเวิร์กใช้คําสั่งเหล่านี้เพื่อดึงข้อมูลเวอร์ชัน UCI ของอุปกรณ์และเปลี่ยนลักษณะการทํางานตามความเหมาะสม
รายการ CR ฉบับร่างที่โมดูล UWB รองรับ
โมดูล UWB เวอร์ชัน #330810000 รองรับร่างคำขอแจ้งข้อบกพร่อง (CR) สำหรับ FiRa 2.0 ต่อไปนี้
อินเทอร์เฟซ UCI ของ Android (ส่วนที่เป็นผู้ให้บริการ FiRa)
ข้อกำหนด UCI จะกำหนดชุดตัวระบุกลุ่ม (GID) และตัวระบุการดำเนินการ (OID) สำหรับข้อความทั้งหมดที่ข้อกำหนดกำหนด ข้อกําหนดยังสงวนชุด GID สําหรับการใช้งานของผู้ให้บริการโดยเฉพาะด้วย สแต็ก UWB ของ AOSP ใช้ GID และ OID ของผู้ให้บริการบางส่วนเหล่านี้สำหรับคำสั่งเฉพาะ Android ที่ไม่ได้ระบุไว้ในข้อกำหนด โปรดดูรายละเอียดที่ส่วนที่ 8.4 ของข้อกำหนด UCI
ข้อความของผู้ให้บริการเหล่านี้ที่ Android ใช้จะกำหนดไว้ในแพ็กเกจ android.hardware.uwb.fira_android
HAL
การกำหนดเวอร์ชันอินเทอร์เฟซของผู้ให้บริการ
ผู้ให้บริการ UWB ต้องแสดงเวอร์ชันของandroid.hardware.uwb.fira_android
แพ็กเกจ HAL ที่รองรับในอุปกรณ์ผ่าน
IUwbChip.getSupportedAndroidUciVersion()
เฟรมเวิร์กใช้ข้อมูลการกําหนดเวอร์ชันนี้เพื่อจัดการความเข้ากันได้แบบย้อนหลัง
รายการ GID และ OID ของ Android
ตารางต่อไปนี้แสดง GID และ OID สำหรับ Android GID 0xE
และ 0xF
สงวนไว้สำหรับ OEM ของ Android
GID | OID | คำจำกัดความ |
---|---|---|
ANDROID = 0xC |
ANDROID_GET_POWER_STATS = 0x0 |
ใช้โดยคําสั่งและการตอบกลับเพื่อรับสถิติที่เกี่ยวข้องกับพลังงาน UWB
รองรับก็ต่อเมื่อตั้งค่า UwbVendorCapabilityTlvTypes.SUPPORTED_POWER_STATS_QUERY เป็น 1 |
ANDROID_SET_COUNTRY_CODE = 0x1 |
ใช้เพื่อตั้งค่ารหัสประเทศตามกฎระเบียบปัจจุบัน (กำหนดโดยใช้ซิมหรือ Wi-Fi หรือ OEM กำหนดไว้อย่างเจาะจง) ระบบจะส่งรหัสประเทศเป็นค่า 2 ไบต์ที่สอดคล้องกับรหัสประเทศ ISO-3166 ระบบจะใช้ค่า |
|
ANDROID_RANGE_DIAGNOSTICS = 0x2 |
การแจ้งเตือนใช้เพื่อรับสถิติการวินิจฉัยระยะสัญญาณ UWB
รองรับก็ต่อเมื่อตั้งค่า UwbVendorCapabilityTlvTypes.SUPPORTED_DIAGNOSTICS เป็น 1
|
|
OEM = 0xE,0xF |
0x00 - 0x3F |
สงวนไว้สำหรับการใช้งาน OEM |
ส่วนขยายของผู้ให้บริการสำหรับข้อความที่กําหนดไว้ในข้อกําหนด UCI
ส่วนนี้จะอธิบายรายละเอียดส่วนขยายของผู้ให้บริการสำหรับข้อความที่กําหนดตามข้อกําหนด UCI
SESSION_SET_APP_CONFIG_[CMD|RSP] และ SESSION_GET_APP_CONFIG_[CMD|RSP]
ค่าความยาวของประเภท (TLV) ที่ระบุโดยสแต็ก AOSP ในส่วน TLV ที่ผู้ให้บริการสงวนไว้ของ APP_CONFIG
มีดังนี้
- GID: 0001b (กลุ่มการกําหนดค่าเซสชัน UWB)
- OID: 000011b (
SESSION_SET_APP_CONFIG_CMD
) - OID: 000100b (
SESSION_GET_APP_CONFIG_CMD
)
ตารางต่อไปนี้แสดงรายการพารามิเตอร์สำหรับข้อความการกําหนดค่าเซสชัน UWB
ชื่อพารามิเตอร์ | ความยาว (อ็อบเจ็กต์) |
แท็ก (รหัส) |
เวอร์ชันอินเทอร์เฟซของผู้ให้บริการ | คำอธิบาย |
---|---|---|---|---|
NB_OF_RANGE_MEASUREMENTS |
1 | 0xE3 |
1 | อัตราส่วนการแทรกคั่นหากตั้งค่า AOA_RESULT_REQ เป็น 0xF0 รองรับก็ต่อเมื่อตั้งค่า UwbVendorCapabilityTlvTypes.SUPPORTED_AOA_RESULT_REQ_ANTENNA_INTERLEAVING เป็น 1 |
NB_OF_AZIMUTH_MEASUREMENTS |
1 | 0xE4 |
1 | |
NB_OF_ELEVATION_MEASUREMENTS |
1 | 0xE5 |
1 | |
ENABLE_DIAGNOSTICS |
1 | 0xE8 |
2 | ค่า 1 ไบต์เพื่อเปิดหรือปิดใช้การรายงานการวินิจฉัย
กำหนดค่าพารามิเตอร์นี้เฉพาะในกรณีที่ ค่า:
|
DIAGRAMS_FRAME_REPORTS_FIELDS |
1 หรือ 4 | 0xE9 |
2 | บิตมาสก์ 1 ไบต์หรือ 4 ไบต์เพื่อกําหนดค่าการรายงานการวินิจฉัย หน้ากากบิตนี้จะมีขนาด 1 ไบต์ใน Android 14 ขึ้นไป และ 4 ไบต์ใน Android 13 หรือต่ำกว่า กำหนดค่าพารามิเตอร์นี้เฉพาะในกรณีที่ คำจำกัดความของบิต
|
CORE_GET_CAPS_INFO_RSP
TLV ต่อไปนี้กำหนดโดยสแต็ก AOSP ในส่วน TLV ที่ผู้ให้บริการสงวนไว้ของ CAPS_INFO
- GID: 0000b (กลุ่มหลัก UWB)
- OID: 000011b (
CORE_GET_CAPS_INFO_RSP
)
ตารางต่อไปนี้แสดงพารามิเตอร์สำหรับข้อความเกี่ยวกับความสามารถของ UWB
ชื่อพารามิเตอร์ | ความยาว (อ็อบเจ็กต์) |
แท็ก (รหัส) |
เวอร์ชันอินเทอร์เฟซของผู้ให้บริการ | คำอธิบาย |
---|---|---|---|---|
SUPPORTED_POWER_STATS_QUERY |
1 | 0xC0 |
1 | ค่า 1 ไบต์ที่ระบุว่ารองรับการค้นหาสถิติกำลังไฟฟ้า ค่า:
|
SUPPORTED_AOA_RESULT_REQ_ANTENNA_INTERLEAVING |
1 | 0xE3 |
1 | ค่า 1 ไบต์ที่ระบุว่ารองรับฟีเจอร์การซ้อนกันของเสาอากาศ ค่า:
|
SUPPORTED_MIN_RANGING_INTERVAL_MS |
4 | 0xE4 |
2 | ค่า 4 ไบต์ที่ระบุช่วงเวลาการช่วงขั้นต่ำที่รองรับเป็นมิลลิวินาที |
SUPPORTED_RANGE_DATA_NTF_CONFIG |
4 | 0xE5 |
2 | บิตมาสก์ 4 ไบต์ที่ระบุค่า RANGE_DATA_NTF_CONFIG ที่รองรับ
บิตมาสก์ที่แต่ละบิตสอดคล้องกับค่าที่ใช้ใน RANGE_DATA_NTF_CONFIG ใน SET_APP_CFG_CMD |
SUPPORTED_RSSI_REPORTING |
1 | 0xE6 |
2 | ค่า 1 ไบต์ที่ระบุการรองรับการรายงาน RSSI ค่า:
|
SUPPORTED_DIAGNOSTICS |
1 | 0xE7 |
2 | ค่า 1 ไบต์ที่ระบุการรองรับการรายงานการวินิจฉัย ค่า:
|
SUPPORTED_MIN_SLOT_DURATION_RSTU |
4 | 0xE8 |
2 | ค่า 4 ไบต์ที่ระบุระยะเวลาของช่องขั้นต่ำที่รองรับใน RSTU |
SUPPORTED_MAX_RANGING_SESSION_NUMBER |
4 | 0xE9 |
2 | ค่า 4 ไบต์ที่ระบุจำนวนเซสชันการวัดระยะทาง FiRa สูงสุดที่รองรับ |
SUPPORTED_CHANNELS_AOA |
2 | 0xEA |
2 | บิตมาสก์ 2 ไบต์เพื่อระบุช่องที่รองรับ AoA ค่า:
|
รหัสสถานะ
รหัสสถานะต่อไปนี้อยู่ในช่องผู้ให้บริการ ข้อมูลเหล่านี้จะแสดงในการตอบกลับ UCI (เช่น SESSION_START_RSP
) โดยระบบย่อย UWB (UWBS)
รหัสสถานะ | ค่า | คำอธิบาย |
---|---|---|
STATUS_ERROR_STOPPED_DUE_TO_OTHER_SESSION_CONFLICT |
0x52 |
รหัสสถานะที่แสดงเมื่อเริ่มเซสชันการวัดระยะปัจจุบันไม่ได้เนื่องจากมีความขัดแย้งกับเซสชันการวัดระยะ CCC หรือ FiRa อื่นๆ |
STATUS_REGULATION_UWB_OFF |
0x53 |
รหัสสถานะที่แสดงเมื่อเริ่มเซสชันการวัดระยะปัจจุบันไม่ได้เนื่องจากเหตุผลด้านกฎระเบียบของ UWB |
รหัสเหตุผลการเปลี่ยนแปลงสถานะใน SESSION_STATUS_NTF
ต่อไปนี้คือรหัสเหตุผลการเปลี่ยนแปลงสถานะที่กําหนดในพื้นที่ของผู้ให้บริการสําหรับช่องสถานะที่ UWBS แสดงใน SESSION_STATUS_NTF
UWBS จะส่งการแจ้งเตือนนี้เมื่อสถานะของเซสชันการวัดระยะมีการเปลี่ยนแปลง (เช่น จาก ACTIVE
เป็น IDLE
)
รหัสเหตุผลของการเปลี่ยนแปลงสถานะ | ค่า | คำอธิบาย |
---|---|---|
REASON_ERROR_INVALID_CHANNEL_WITH_AOA |
0x80 |
สถานะเซสชันมีการเปลี่ยนแปลงเนื่องจากช่องทางที่กําหนดค่าไว้ไม่รองรับการวัดระยะ AoA |
REASON_ERROR_STOPPED_DUE_TO_OTHER_SESSION_CONFLICT |
0x81 |
สถานะเซสชันมีการเปลี่ยนแปลงเนื่องจากขัดแย้งกับเซสชันการวัดระยะ CCC หรือ FiRa อื่นๆ |
REASON_REGULATION_UWB_OFF |
0x82 |
สถานะเซสชันเปลี่ยนแปลงเนื่องจากต้องปิดใช้ UWB เนื่องจากเหตุผลด้านกฎระเบียบ |