สแต็กแถบความถี่กว้างยิ่งยวด (UWB) ของ AOSP
ใช้อินเทอร์เฟซ UCI ที่กำหนดโดย FiRa
เป็นพื้นผิว HAL อินเทอร์เฟซ HAL ใช้ไปป์แบบทึบ
(IUwbChip::sendUciMessage() และ IUwbClientCallback::onUciMessage()) เพื่อส่ง
และรับคำสั่ง การตอบกลับ และการแจ้งเตือนของอินเทอร์เฟซคำสั่ง UWB (UCI)
ผู้ให้บริการ UWB ของ Android ทุกรายต้องรองรับข้อความทั้งหมดที่กำหนดไว้ในข้อกำหนดของ FiRa
เฟรมเวิร์ก UWB เข้ากันได้แบบย้อนหลังและทำงานร่วมกับ UCI
เวอร์ชันใดก็ได้ที่ผู้ให้บริการ UWB นำไปใช้ในอุปกรณ์ เนื่องจากเฟรมเวิร์ก AOSP UWB เป็นโมดูล
จึงสามารถเพิ่มการรองรับคำขอเปลี่ยนแปลง (CR) ที่ได้รับอนุมัติจาก
ข้อกำหนด UCI ฉบับร่างที่กำหนดเป้าหมายสำหรับการเปิดตัวมาตรฐาน FiRa ที่สำคัญได้ด้วย CR ฉบับร่างดังกล่าวที่นำมาใช้แล้วอาจมีการเปลี่ยนแปลง
คำจำกัดความของอินเทอร์เฟซ
อินเทอร์เฟซ 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ผู้ให้บริการ Fused Location - รหัสประเทศเริ่มต้นของ 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 ของอุปกรณ์และเปลี่ยนลักษณะการทำงานตามนั้น
รายการคำขอการเปลี่ยนแปลงฉบับร่างที่โมดูล UWB รองรับ
โมดูล UWB เวอร์ชัน #330810000 รองรับ CR ฉบับร่างต่อไปนี้สำหรับ FiRa 2.0
อินเทอร์เฟซ UCI ของ Android (ส่วนของผู้ให้บริการ FiRa)
ข้อกำหนด UCI จะกำหนดชุดตัวระบุกลุ่ม (GID) และตัวระบุ Opcode (OID) สำหรับข้อความทั้งหมดที่กำหนดไว้ในข้อกำหนด ข้อกำหนด ยังสงวนชุด GID ที่สงวนไว้สำหรับการใช้งานของผู้ให้บริการโดยเฉพาะด้วย สแต็ก UWB ของ AOSP ใช้ GID และ OID ของผู้ให้บริการบางรายการสำหรับคำสั่งเฉพาะของ Android ที่ไม่ได้กำหนดไว้ในข้อกำหนด ดูรายละเอียดได้ที่ส่วนที่ 8.4 ของข้อกำหนด UCI
ข้อความของผู้ให้บริการเหล่านี้ที่ Android ใช้จะกำหนดไว้ในแพ็กเกจ HAL ของ android.hardware.uwb.fira_android
การกำหนดเวอร์ชันอินเทอร์เฟซของผู้ให้บริการ
ผู้ให้บริการ 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 ด้วยเหตุผลด้านกฎระเบียบ |