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