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.
Gambar 1. Alur panggilan inisialisasi stack UWB (tombol UWB diaktifkan)
Gambar 2. Alur panggilan deinisialisasi stack UWB (tombol UWB dinonaktifkan)
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.
- Ganti kode negara: Kode negara yang dipaksakan melalui perintah shell adb (pengujian lokal atau otomatis).
- Kode negara telepon: Kode negara yang diambil melalui seluler. Jika ada beberapa SIM yang menampilkan kode berbeda, kode negara yang dipilih tidak dapat ditentukan.
- Kode negara Wi-Fi: Kode negara yang diambil melalui Wi-Fi (80211.ad).
- 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.
- Kode negara lokasi: Kode negara yang diambil dari penyedia lokasi gabungan
LocationManager
. - 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
|
|
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 Nilai:
|
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
Definisi bit:
|
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:
|
SUPPORTED_AOA_RESULT_REQ_ANTENNA_INTERLEAVING |
1 | 0xE3 |
1 | Nilai 1 byte yang menunjukkan dukungan untuk fitur interleaving antena. Nilai:
|
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:
|
SUPPORTED_DIAGNOSTICS |
1 | 0xE7 |
2 | Nilai 1 byte yang menunjukkan dukungan pelaporan diagnostik. Nilai:
|
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
Nilai:
|
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. |