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 ต้องแสดงเวอร์ชันของแพ็กเกจ HAL android.hardware.uwb.fira_android
ที่รองรับในอุปกรณ์ดังกล่าวผ่าน 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 ด้วยเหตุผลด้านกฎระเบียบ |