Antarmuka UWB HAL

Stack ultra-wideband (UWB) AOSP menggunakan antarmuka UCI yang ditentukan FiRa sebagai permukaan HAL. Antarmuka HAL menggunakan saluran buram (IUwbChip::sendUciMessage() dan IUwbClientCallback::onUciMessage()) untuk mengirim dan menerima perintah, respons, dan notifikasi antarmuka perintah UWB (UCI). Semua vendor UWB Android harus mendukung semua pesan yang ditentukan spesifikasi FiRa. Framework UWB kompatibel mundur dan berfungsi dengan versi UCI apa pun yang diterapkan oleh vendor UWB di perangkat. Karena framework UWB AOSP adalah modul, framework ini juga dapat menambahkan dukungan secara selektif untuk permintaan perubahan (CR) yang disetujui dari draf spesifikasi UCI yang ditujukan untuk rilis standar FiRa utama. Setiap draf CR yang diterapkan dapat berubah sewaktu-waktu.

Definisi antarmuka

Antarmuka HAL UWB ditentukan menggunakan AIDL stabil. Antarmuka utama menggunakan paket android.hardware.uwb.

Berikut adalah dua antarmuka utama dalam paket 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);

}

Alur panggilan HAL dari framework UWB

Gambar berikut mengilustrasikan alur panggilan dari framework UWB untuk inisialisasi stack UWB, deinisialisasi stack UWB, serta proses mulai dan berhenti sesi UWB.

Inisialisasi stack UWB

Gambar 1. Alur panggilan inisialisasi stack UWB (tombol UWB diaktifkan)

Deinisialisasi stack UWB

Gambar 2. Alur panggilan deinisialisasi stack UWB (tombol UWB dinonaktifkan)

Memulai dan menghentikan sesi UWB

Gambar 3. Alur mulai/berhenti sesi UWB

Konfigurasi kode negara UWB

Seperti yang ditunjukkan pada Gambar 1, framework UWB mengonfigurasi kode negara UWB selama inisialisasi stack UWB menggunakan perintah UCI ruang vendor ANDROID_SET_COUNTRY_CODE (GID=0xC, OID=0x1). Framework UWB mencoba menentukan kode negara UWB menggunakan sumber berikut (yang tercantum dalam urutan prioritas). Framework UWB berhenti di sumber pertama tempat kode negara ditentukan.

  1. Ganti kode negara: Kode negara yang dipaksakan melalui perintah shell adb (pengujian lokal atau otomatis).
  2. Kode negara telepon: Kode negara yang diambil melalui seluler. Jika ada beberapa SIM yang menampilkan kode berbeda, kode negara yang dipilih tidak dapat ditentukan.
  3. Kode negara Wi-Fi: Kode negara yang diambil melalui Wi-Fi (80211.ad).
  4. Kode negara telephony terakhir yang diketahui: Kode negara terakhir yang diketahui dan diambil melalui jaringan seluler. Jika ada beberapa SIM yang menampilkan kode yang berbeda, kode negara yang dipilih tidak deterministik.
  5. Kode negara lokasi: Kode negara yang diambil dari penyedia lokasi gabungan LocationManager.
  6. Kode negara default OEM: Kode negara yang ditetapkan oleh produsen perangkat.

Jika framework UWB tidak dapat menentukan kode negara UWB, framework akan memanggil perintah UCI ANDROID_SET_COUNTRY_CODE dengan nilai DEFAULT_COUNTRY_CODE ("00") dan memberi tahu aplikasi UWB bahwa status stack UWB adalah DISABLED. Selanjutnya, saat framework UWB dapat menentukan kode negara yang valid, framework tersebut akan mengonfigurasi kode negara baru menggunakan perintah ANDROID_SET_COUNTRY_CODE dan memberi tahu aplikasi UWB bahwa stack UWB READY.

Jika UWB tidak dapat digunakan karena peraturan setempat di suatu negara, pengontrol UWB akan menampilkan kode status STATUS_CODE_ANDROID_REGULATION_UWB_OFF. Framework UWB kemudian memberi tahu aplikasi UWB bahwa status stack UWB adalah DISABLED.

Saat pengguna bepergian ke negara lain, framework UWB mengonfigurasi kode negara baru menggunakan perintah UCI ANDROID_SET_COUNTRY_CODE. Bergantung pada kode status yang ditampilkan oleh pengontrol UWB (berdasarkan peraturan UWB di negara baru), hal ini dapat menyebabkan perubahan pada status stack UWB.

Format perintah yang ditentukan spesifikasi UCI FIRA

Untuk format paket kontrol UCI, lihat bagian 4.4.2 spesifikasi UCI.

Pembuatan versi antarmuka

Spesifikasi UCI memungkinkan vendor UWB mengekspos versi stack UCI yang diterapkan oleh perangkat menggunakan perintah UCI_GET_DEVICE_INFO_RSP dan UCI_GET_CAPS_INFO_RSP. Framework menggunakan perintah ini untuk mengambil versi UCI perangkat dan mengubah perilakunya sesuai dengan versi tersebut.

Daftar draf CR yang didukung oleh modul UWB

Draf CR berikut untuk FiRa 2.0 didukung oleh modul UWB versi #330810000:

Antarmuka UCI Android (bagian vendor FiRa)

Spesifikasi UCI menentukan serangkaian ID grup (GID) dan ID opcode (OID) untuk semua pesan yang ditentukan spesifikasi. Spesifikasi juga mencadangkan serangkaian GID yang dicadangkan secara eksklusif untuk penggunaan vendor. Stack UWB AOSP menggunakan beberapa GID dan OID vendor ini untuk perintah khusus Android yang tidak ditentukan dalam spesifikasi. Untuk mengetahui detailnya, lihat bagian 8.4 spesifikasi UCI.

Pesan vendor yang digunakan oleh Android ini ditentukan dalam paket HAL android.hardware.uwb.fira_android.

Pembuatan versi antarmuka vendor

Vendor UWB harus mengekspos versi paket HAL android.hardware.uwb.fira_android yang didukung di perangkat melalui IUwbChip.getSupportedAndroidUciVersion(). Framework menggunakan informasi versi ini untuk menangani kompatibilitas mundur.

Daftar GID dan OID Android

Tabel berikut mencantumkan GID dan OID untuk Android. GID 0xE dan 0xF dicadangkan untuk digunakan oleh OEM Android.

GID OID Definisi
ANDROID = 0xC ANDROID_GET_POWER_STATS = 0x0 Digunakan oleh perintah dan respons untuk mendapatkan statistik terkait daya UWB. Hanya didukung jika UwbVendorCapabilityTlvTypes.SUPPORTED_POWER_STATS_QUERY disetel ke 1.
ANDROID_SET_COUNTRY_CODE = 0x1

Digunakan untuk menyetel kode negara peraturan saat ini (ditentukan menggunakan SIM atau Wi-Fi, atau dikodekan secara permanen oleh OEM). Kode negara dikirim sebagai nilai 2 byte yang sesuai dengan kode negara ISO-3166. Nilai 00 digunakan untuk menunjukkan bahwa kode negara tidak diketahui.

ANDROID_RANGE_DIAGNOSTICS = 0x2 Digunakan oleh notifikasi untuk mendapatkan statistik diagnostik pengukuran UWB. Hanya didukung jika UwbVendorCapabilityTlvTypes.SUPPORTED_DIAGNOSTICS ditetapkan ke 1.
OEM = 0xE,0xF 0x00 - 0x3F Dicadangkan untuk penggunaan OEM.

Ekstensi vendor untuk pesan yang ditentukan spesifikasi UCI

Bagian ini menjelaskan detail ekstensi vendor untuk pesan yang ditentukan spesifikasi UCI.

SESSION_SET_APP_CONFIG_[CMD|RSP] dan SESSION_GET_APP_CONFIG_[CMD|RSP]

Berikut adalah nilai panjang jenis (TLV) yang ditentukan oleh stack AOSP di bagian TLV yang dicadangkan vendor dalam APP_CONFIG:

  • GID: 0001b (Grup konfigurasi sesi UWB)
  • OID: 000011b (SESSION_SET_APP_CONFIG_CMD)
  • OID: 000100b (SESSION_GET_APP_CONFIG_CMD)

Tabel berikut mencantumkan parameter untuk pesan konfigurasi sesi UWB.

Nama parameter Panjang
(oktet)
Tag
(ID)
Versi antarmuka vendor Deskripsi
NB_OF_RANGE_MEASUREMENTS 1 0xE3 1 Rasio penyisipan jika AOA_RESULT_REQ ditetapkan ke 0xF0. Hanya didukung jika UwbVendorCapabilityTlvTypes.SUPPORTED_AOA_RESULT_REQ_ANTENNA_INTERLEAVING ditetapkan ke 1.
NB_OF_AZIMUTH_MEASUREMENTS 1 0xE4 1
NB_OF_ELEVATION_MEASUREMENTS 1 0xE5 1
ENABLE_DIAGNOSTICS 1 0xE8 2

Nilai 1 byte untuk mengaktifkan atau menonaktifkan pelaporan diagnostik. Konfigurasi parameter ini hanya jika CORE_GET_CAPS_INFO_RSP menampilkan SUPPORTED_DIAGNOSTICS dengan nilai 1 yang menunjukkan bahwa fitur pelaporan diagnostik didukung.

Nilai:

  • 1: Fitur diaktifkan
  • 0: Fitur dinonaktifkan

DIAGRAMS_FRAME_REPORTS_FIELDS 1 atau 4 0xE9 2

Bitmask 1 byte atau 4 byte untuk mengonfigurasi pelaporan diagnostik. Bitmask ini berukuran 1 byte di Android 14 atau yang lebih tinggi dan 4 byte di Android 13 atau yang lebih rendah.

Konfigurasi parameter ini hanya jika CORE_GET_CAPS_INFO_RSP menampilkan SUPPORTED_DIAGNOSTICS dengan nilai 1 yang menunjukkan bahwa fitur pelaporan diagnostik didukung.

Definisi bit:

  • b0 (0x01): Aktifkan kolom RSSI
  • b1 (0x02): Mengaktifkan kolom AoA
  • b2 (0x04): Mengaktifkan kolom CIR

CORE_GET_CAPS_INFO_RSP

Berikut adalah TLV yang ditentukan oleh stack AOSP di bagian TLV yang dicadangkan vendor di CAPS_INFO:

  • GID: 0000b (grup inti UWB)
  • OID: 000011b (CORE_GET_CAPS_INFO_RSP)

Tabel berikut mencantumkan parameter untuk pesan kemampuan UWB.

Nama parameter Panjang
(oktet)
Tag
(ID)
Versi antarmuka vendor Deskripsi
SUPPORTED_POWER_STATS_QUERY 1 0xC0 1

Nilai 1 byte yang menunjukkan dukungan untuk kueri statistik daya.

Nilai:

  • 1: Fitur didukung
  • 0: Fitur tidak didukung
SUPPORTED_AOA_RESULT_REQ_ANTENNA_INTERLEAVING 1 0xE3 1

Nilai 1 byte yang menunjukkan dukungan untuk fitur interleaving antena.

Nilai:

  • 1: Fitur didukung
  • 0: Fitur tidak didukung
SUPPORTED_MIN_RANGING_INTERVAL_MS 4 0xE4 2 Nilai 4 byte yang menunjukkan interval pengukuran minimum yang didukung dalam milidetik.
SUPPORTED_RANGE_DATA_NTF_CONFIG 4 0xE5 2 Bitmask 4 byte yang menunjukkan nilai RANGE_DATA_NTF_CONFIG yang didukung. Bitmask dengan setiap bit sesuai dengan nilai yang digunakan dalam RANGE_DATA_NTF_CONFIG di SET_APP_CFG_CMD.
SUPPORTED_RSSI_REPORTING 1 0xE6 2

Nilai 1 byte yang menunjukkan dukungan pelaporan RSSI.

Nilai:

  • 1: Fitur didukung
  • 0: Fitur tidak didukung
SUPPORTED_DIAGNOSTICS 1 0xE7 2

Nilai 1 byte yang menunjukkan dukungan pelaporan diagnostik.

Nilai:

  • 1: Fitur didukung
  • 0: Fitur tidak didukung
SUPPORTED_MIN_SLOT_DURATION_RSTU 4 0xE8 2 Nilai 4 byte yang menunjukkan durasi slot minimum yang didukung dalam RSTU.
SUPPORTED_MAX_RANGING_SESSION_NUMBER 4 0xE9 2 Nilai 4 byte yang menunjukkan jumlah sesi pengukuran jarak FiRa maksimum yang didukung.
SUPPORTED_CHANNELS_AOA 2 0xEA 2

Masker bit 2 byte untuk menunjukkan channel yang mendukung AoA. Setiap 1 dalam bitmask sesuai dengan saluran UWB tertentu.

Nilai:

  • 0x01: Channel 5 didukung
  • 0x02: Mendukung Channel 6
  • 0x04: Mendukung Channel 8
  • 0x08: Channel 9 didukung
  • 0x10: Channel 10 didukung
  • 0x20: Mendukung Channel 12
  • 0x40: Channel 13 didukung
  • 0x80: Channel 14 didukung

Kode status

Berikut adalah kode status di ruang vendor. Nilai ini ditampilkan dalam respons UCI (seperti SESSION_START_RSP) oleh subsistem UWB (UWBS).

Kode status Nilai Deskripsi
STATUS_ERROR_STOPPED_DUE_TO_OTHER_SESSION_CONFLICT 0x52

Kode status ditampilkan saat sesi pengukuran jarak saat ini tidak dapat dimulai karena konflik dengan sesi pengukuran jarak CCC atau FiRa lainnya.

STATUS_REGULATION_UWB_OFF 0x53

Kode status ditampilkan saat sesi pengukuran jarak saat ini tidak dapat dimulai karena alasan peraturan UWB.

Kode alasan perubahan status di SESSION_STATUS_NTF

Berikut adalah kode alasan perubahan status yang ditentukan di ruang vendor untuk kolom status yang ditampilkan oleh UWBS dalam SESSION_STATUS_NTF. Notifikasi ini dikirim oleh UWBS saat status sesi pengukuran jarak berubah (misalnya, dari ACTIVE ke IDLE).

Kode alasan perubahan status Nilai Deskripsi
REASON_ERROR_INVALID_CHANNEL_WITH_AOA 0x80

Status sesi berubah karena saluran yang dikonfigurasi tidak mendukung pengukuran AoA.

REASON_ERROR_STOPPED_DUE_TO_OTHER_SESSION_CONFLICT 0x81

Status sesi berubah karena konflik dengan sesi pengukuran jarak CCC atau FiRa lainnya.

REASON_REGULATION_UWB_OFF 0x82

Status sesi berubah karena UWB harus dinonaktifkan karena alasan peraturan.