อินเทอร์เฟซ HAL ของ UWB

สแต็กแถบความถี่กว้างยิ่งยวด (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

การเริ่มต้นสแต็ก UWB

รูปที่ 1 ลำดับการเรียกใช้การเริ่มต้นสแต็ก UWB (เปิด UWB)

การยกเลิกการเริ่มต้นสแต็ก UWB

รูปที่ 2 ลำดับการเรียกใช้การยกเลิกการเริ่มต้นสแต็ก UWB (ปิดสวิตช์ UWB)

การเริ่มและหยุดเซสชัน UWB

รูปที่ 3 ขั้นตอนการเริ่ม/หยุดเซสชัน UWB

การกำหนดค่ารหัสประเทศ UWB

ดังที่แสดงในรูปที่ 1 เฟรมเวิร์ก UWB จะกำหนดค่ารหัสประเทศ UWB ในระหว่างการเริ่มต้นสแต็ก UWB โดยใช้คำสั่ง UCI ในพื้นที่ของผู้ให้บริการ ANDROID_SET_COUNTRY_CODE (GID=0xC, OID=0x1) เฟรมเวิร์ก UWB จะพยายาม กำหนดรหัสประเทศ UWB โดยใช้แหล่งที่มาต่อไปนี้ (เรียงตามลำดับความสำคัญ) เฟรมเวิร์ก UWB จะหยุดที่แหล่งที่มาแรกที่มีการกำหนดรหัสประเทศ

  1. ลบล้างรหัสประเทศ: รหัสประเทศที่บังคับผ่านคำสั่ง adb shell (การทดสอบในเครื่องหรืออัตโนมัติ)
  2. รหัสประเทศของโทรศัพท์: รหัสประเทศที่ดึงข้อมูลผ่านเครือข่ายมือถือ หากมีซิมหลายซิมที่แสดงรหัสแตกต่างกัน รหัสประเทศที่เลือกจะไม่มีการกำหนด
  3. รหัสประเทศ Wi-Fi: รหัสประเทศที่ดึงข้อมูลผ่าน Wi-Fi (80211.ad)
  4. รหัสประเทศของโทรศัพท์ที่ทราบล่าสุด: รหัสประเทศที่ทราบล่าสุดซึ่งดึงข้อมูล ผ่านเครือข่ายมือถือ หากมีซิมหลายซิมที่แสดงรหัสต่างกัน รหัสประเทศที่เลือกจะไม่ได้กำหนดไว้ล่วงหน้า
  5. รหัสประเทศของสถานที่ตั้ง: รหัสประเทศที่ดึงมาจากLocationManager ผู้ให้บริการตำแหน่งที่ผสานรวม
  6. รหัสประเทศเริ่มต้นของ 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 ระบบจะใช้ค่า 00 เพื่อระบุว่าไม่ทราบรหัสประเทศ

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 ไบต์เพื่อเปิดหรือปิดใช้การรายงานการวินิจฉัย กำหนดค่าพารามิเตอร์นี้เฉพาะเมื่อ CORE_GET_CAPS_INFO_RSP แสดงผล SUPPORTED_DIAGNOSTICS ที่มีค่าเป็น 1 ซึ่งบ่งชี้ว่าระบบรองรับฟีเจอร์การรายงานการวินิจฉัย

ค่า:

  • 1: เปิดใช้ฟีเจอร์แล้ว
  • 0: ฟีเจอร์ปิดใช้อยู่

DIAGRAMS_FRAME_REPORTS_FIELDS 1 หรือ 4 0xE9 2

บิตมาสก์ 1 ไบต์หรือ 4 ไบต์เพื่อกำหนดค่าการรายงานการวินิจฉัย บิตแมสก์นี้มีขนาด 1 ไบต์ใน Android 14 ขึ้นไปและ 4 ไบต์ใน Android 13 ลงไป

กำหนดค่าพารามิเตอร์นี้เฉพาะเมื่อ CORE_GET_CAPS_INFO_RSP แสดงผล SUPPORTED_DIAGNOSTICS ที่มีค่าเป็น 1 ซึ่งบ่งบอกว่าระบบรองรับฟีเจอร์การรายงานการวินิจฉัย

คำจำกัดความของบิต

  • b0 (0x01): เปิดใช้งานฟิลด์ RSSI
  • b1 (0x02): เปิดใช้งานฟิลด์ AoA
  • b2 (0x04): เปิดใช้งานฟิลด์ CIR

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 ไบต์ที่ระบุการรองรับการค้นหาสถิติการใช้พลังงาน

ค่า:

  • 1: รองรับฟีเจอร์
  • 0: ไม่รองรับฟีเจอร์
SUPPORTED_AOA_RESULT_REQ_ANTENNA_INTERLEAVING 1 0xE3 1

ค่า 1 ไบต์ที่ระบุการรองรับฟีเจอร์การสลับเสาอากาศ

ค่า:

  • 1: รองรับฟีเจอร์
  • 0: ไม่รองรับฟีเจอร์
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

ค่า:

  • 1: รองรับฟีเจอร์
  • 0: ไม่รองรับฟีเจอร์
SUPPORTED_DIAGNOSTICS 1 0xE7 2

ค่า 1 ไบต์ที่บ่งบอกถึงการรองรับการรายงานการวินิจฉัย

ค่า:

  • 1: รองรับฟีเจอร์
  • 0: ไม่รองรับฟีเจอร์
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 แต่ละ 1 ในบิตมาสก์จะสอดคล้องกับช่อง UWB ที่เฉพาะเจาะจง

ค่า:

  • 0x01: รองรับ Channel 5
  • 0x02: รองรับช่อง 6
  • 0x04: รองรับช่อง 8
  • 0x08: รองรับ Channel 9
  • 0x10: รองรับ Channel 10
  • 0x20: รองรับช่อง 12
  • 0x40: รองรับช่อง 13
  • 0x80: รองรับช่อง 14

รหัสสถานะ

รหัสสถานะในพื้นที่ของผู้ให้บริการมีดังนี้ โดยจะแสดงในการตอบกลับ 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 ด้วยเหตุผลด้านกฎระเบียบ