Ultra geniş bant HAL arayüzü

AOSP ultra geniş bant (UWB) yığını, HAL yüzeyi olarak FiRa tarafından tanımlanan UCI arayüzünü kullanır. HAL arayüzü, UWB komut arayüzü (UCI) komutlarını, yanıtlarını ve bildirimlerini göndermek ve almak için opak bir kanal (IUwbChip::sendUciMessage() ve IUwbClientCallback::onUciMessage()) kullanır. Tüm Android UWB tedarikçileri, FiRa spesifikasyonunda tanımlanan tüm mesajları desteklemelidir. Ultra geniş bant çerçevesi geriye dönük olarak uyumludur ve cihazda ultra geniş bant satıcısı tarafından uygulanan tüm UCI sürümleriyle çalışır. AOSP UWB çerçevesi bir modül olduğundan, büyük FiRa standart sürümleri için hedeflenen taslak UCI spesifikasyonlarından onaylanmış değişiklik istekleri (CR) için de seçici olarak destek ekleyebilir. Uygulanan bu tür taslak hazır yanıtlar değişebilir.

Arayüz tanımı

UWB HAL arayüzü, kararlı AIDL kullanılarak tanımlanır. Ana arayüzde android.hardware.uwb paketi kullanılır.

android.hardware.uwb paketindeki iki ana arayüz şunlardır:

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);

}

UWB çerçevesinden HAL çağrı akışı

Aşağıdaki resimlerde, UWB yığını başlatma, UWB yığını başlatmayı kaldırma ve UWB oturumu başlatma ve durdurma işlemleri için UWB çerçevesinden gelen çağrı akışı gösterilmektedir.

UWB yığını başlatma

1. şekil. UWB yığını başlatma çağrı akışı (UWB açma/kapatma)

Ultra geniş bant yığını başlatmayı kaldırma

Şekil 2. UWB yığını başlatmayı kaldırma çağrısı akışı (UWB kapatıldığında)

UWB oturumunu başlatma ve durdurma

3.Şekil UWB oturumunu başlatma/durdurma akışı

UWB ülke kodu yapılandırması

1. Şekil'de gösterildiği gibi, UWB çerçevesi, UWB yığınını başlatma sırasında tedarikçi alanındaki UCI komutunu ANDROID_SET_COUNTRY_CODE (GID=0xC, OID=0x1) kullanarak UWB ülke kodunu yapılandırır. UWB çerçevesi, UWB ülke kodunu aşağıdaki kaynakları kullanarak belirlemeye çalışır (öncelik sırasına göre listelenmiştir). UWB çerçevesi, ülke kodunun belirlendiği ilk kaynakta durur.

  1. Ülke kodunu geçersiz kılma: Bir adb shell komutuyla zorlanan ülke kodu (yerel veya otomatik test).
  2. Telefon ülke kodu: Hücresel bağlantı üzerinden alınan ülke kodu. Farklı kodlar döndüren birden fazla SIM varsa seçilen ülke kodu belirlenemez.
  3. Kablosuz ülke kodu: Kablosuz (80211.ad) üzerinden alınan ülke kodu.
  4. Bilinen son telefon ülke kodu: Hücresel bağlantı üzerinden alınan bilinen son ülke kodu. Farklı kodlar döndüren birden fazla SIM varsa seçilen ülke kodu belirlenemez.
  5. Konum ülke kodu: LocationManager Birleştirilmiş konum sağlayıcıdan alınan ülke kodu.
  6. OEM varsayılan ülke kodu: Cihaz üreticisi tarafından ayarlanan ülke kodu.

UWB çerçevesi bir UWB ülke kodunu belirleyemezse ANDROID_SET_COUNTRY_CODE değeriyle UCI komutunu çağırır ve UWB uygulamalarını UWB yığını durumunun DISABLED olduğu konusunda bilgilendirir.DEFAULT_COUNTRY_CODE ("00") Daha sonra, UWB çerçevesi geçerli bir ülke kodu belirleyebildiğinde ANDROID_SET_COUNTRY_CODE komutunu kullanarak yeni ülke kodunu yapılandırır ve UWB uygulamalarına UWB yığınının READY olduğunu bildirir.

Bir ülkedeki yerel düzenlemeler nedeniyle UWB kullanılamıyorsa UWB denetleyicisi STATUS_CODE_ANDROID_REGULATION_UWB_OFF durum kodunu döndürür. Ultra geniş bant çerçevesi daha sonra ultra geniş bant uygulamalarına ultra geniş bant yığını durumunun DISABLED olduğunu bildirir.

Bir kullanıcı farklı bir ülkeye seyahat ettiğinde UWB çerçevesi, ANDROID_SET_COUNTRY_CODE UCI komutunu kullanarak yeni bir ülke kodu yapılandırır. UWB denetleyicisi tarafından döndürülen durum koduna (yeni ülkedeki UWB düzenlemelerine göre) bağlı olarak, bu durum UWB yığını durumunda değişikliğe yol açabilir.

FIRA UCI spesifikasyonuyla tanımlanan komut biçimi

UCI kontrol paketlerinin biçimi için UCI spesifikasyonunun 4.4.2 bölümüne bakın.

Arayüz sürümü oluşturma

UCI spesifikasyonu, UWB satıcılarının UCI_GET_DEVICE_INFO_RSP ve UCI_GET_CAPS_INFO_RSP komutlarını kullanarak cihaz tarafından uygulanan UCI yığını sürümünü göstermesine olanak tanır. Çerçeve, cihazın UCI sürümünü getirmek ve davranışını buna göre değiştirmek için bu komutları kullanır.

UWB modülü tarafından desteklenen taslak CR'lerin listesi

FiRa 2.0 için aşağıdaki taslak CR'ler, UWB modülü sürüm #330810000 tarafından desteklenir:

Android UCI arayüzü (FiRa satıcı bölümü)

UCI spesifikasyonu, spesifikasyon tarafından tanımlanan tüm mesajlar için bir grup tanımlayıcı (GID) ve işlem kodu tanımlayıcı (OID) grubu tanımlar. Spesifikasyon, yalnızca satıcı kullanımı için ayrılmış bir dizi GID'yi de ayırır. AOSP UWB yığını, spesifikasyonda tanımlanmayan Android'e özgü komutlar için bu satıcı GID'lerinden ve OID'lerinden bazılarını kullanır. Ayrıntılar için UCI spesifikasyonunun 8.4 bölümüne bakın.

Android tarafından kullanılan bu satıcı mesajları, android.hardware.uwb.fira_android HAL paketinde tanımlanır.

Tedarikçi arayüzü sürümü oluşturma

UWB tedarikçileri, cihazda desteklenen android.hardware.uwb.fira_android HAL paketinin sürümünü IUwbChip.getSupportedAndroidUciVersion() aracılığıyla kullanıma sunmalıdır. Çerçeve, geriye dönük uyumluluğu sağlamak için bu sürüm oluşturma bilgilerini kullanır.

Android GID'lerinin ve OID'lerinin listesi

Aşağıdaki tabloda Android için GID'ler ve OID'ler listelenmiştir. GID'ler 0xE ve 0xF, Android OEM'leri tarafından kullanılmak üzere ayrılmıştır.

GID OID Tanım
ANDROID = 0xC ANDROID_GET_POWER_STATS = 0x0 Ultra Geniş Bant gücüyle ilgili istatistikleri almak için komut ve yanıt tarafından kullanılır. Yalnızca UwbVendorCapabilityTlvTypes.SUPPORTED_POWER_STATS_QUERY 1 olarak ayarlanmışsa desteklenir.
ANDROID_SET_COUNTRY_CODE = 0x1

Geçerli düzenleyici ülke kodunu ayarlamak için kullanılır (SIM veya kablosuz ağ kullanılarak belirlenir ya da OEM tarafından sabit kodlanmıştır). Ülke kodu, ISO-3166 ülke koduna karşılık gelen 2 baytlık bir değer olarak gönderilir. Ülke kodunun bilinmediğini belirtmek için 00 değeri kullanılır.

ANDROID_RANGE_DIAGNOSTICS = 0x2 UWB aralığı teşhis istatistiklerini almak için bildirim tarafından kullanılır. Yalnızca UwbVendorCapabilityTlvTypes.SUPPORTED_DIAGNOSTICS, 1 olarak ayarlanmışsa desteklenir.
OEM = 0xE,0xF 0x00 - 0x3F OEM kullanımı için ayrılmıştır.

UCI spesifikasyonunda tanımlanan mesajlara tedarikçi uzantıları

Bu bölümde, UCI spesifikasyonunda tanımlanan iletilere yönelik satıcı uzantılarının ayrıntıları açıklanmaktadır.

SESSION_SET_APP_CONFIG_[CMD|RSP] ve SESSION_GET_APP_CONFIG_[CMD|RSP]

Aşağıda, APP_CONFIG içindeki TLV'lerin satıcıya ayrılmış bölümünde AOSP yığını tarafından tanımlanan tür uzunluğu değerleri (TLV'ler) verilmiştir:

  • GID: 0001b (UWB oturum yapılandırma grubu)
  • OID: 000011b (SESSION_SET_APP_CONFIG_CMD)
  • OID: 000100b (SESSION_GET_APP_CONFIG_CMD)

Aşağıdaki tabloda, UWB oturumu yapılandırma iletilerinin parametreleri listelenmiştir.

Parametre adı Uzunluk
(oktet)
Etiket
(kimlikler)
Tedarikçi arayüzü sürümü Açıklama
NB_OF_RANGE_MEASUREMENTS 1 0xE3 1 AOA_RESULT_REQ, 0xF0 olarak ayarlanmışsa araya yerleştirme oranı. Yalnızca UwbVendorCapabilityTlvTypes.SUPPORTED_AOA_RESULT_REQ_ANTENNA_INTERLEAVING 1 olarak ayarlanmışsa desteklenir.
NB_OF_AZIMUTH_MEASUREMENTS 1 0xE4 1
NB_OF_ELEVATION_MEASUREMENTS 1 0xE5 1
ENABLE_DIAGNOSTICS 1 0xE8 2

Teşhis raporlamasını etkinleştirmek veya devre dışı bırakmak için kullanılan 1 baytlık değer. Bu parametreyi yalnızca CORE_GET_CAPS_INFO_RSP, SUPPORTED_DIAGNOSTICS ile birlikte 1 değeri döndürdüğünde yapılandırın. Bu değer, teşhis raporlama özelliğinin desteklendiğini gösterir.

Değerler:

  • 1: Özellik etkinleştirildi
  • 0: Özellik devre dışı bırakıldı

DIAGRAMS_FRAME_REPORTS_FIELDS 1 veya 4 0xE9 2

Teşhis raporlamasını yapılandırmak için 1 veya 4 baytlık bit maskesi. Bu bit maskesi, Android 14 veya sonraki sürümlerde 1 bayt, Android 13 veya önceki sürümlerde ise 4 bayttır.

Bu parametreyi yalnızca CORE_GET_CAPS_INFO_RSP, 1 değeriyle SUPPORTED_DIAGNOSTICS döndürdüğünde yapılandırın. Bu değer, teşhis raporlama özelliğinin desteklendiğini gösterir.

Bit tanımları:

  • b0 (0x01): RSSI alanlarını etkinleştirin
  • b1 (0x02): AoA alanlarını etkinleştirme
  • b2 (0x04): CIR alanlarını etkinleştirme

CORE_GET_CAPS_INFO_RSP

Aşağıda, CAPS_INFO içindeki TLV'lerin tedarikçiye ayrılmış bölümünde AOSP yığını tarafından tanımlanan TLV'ler verilmiştir:

  • GID: 0000b (UWB çekirdek grubu)
  • OID: 000011b (CORE_GET_CAPS_INFO_RSP)

Aşağıdaki tabloda, UWB özelliği mesajlarının parametreleri listelenmiştir.

Parametre adı Uzunluk
(oktet)
Etiket
(kimlikler)
Tedarikçi arayüzü sürümü Açıklama
SUPPORTED_POWER_STATS_QUERY 1 0xC0 1

Güç istatistikleri sorgusu desteğini gösteren 1 baytlık değer.

Değerler:

  • 1: Özellik destekleniyor
  • 0: Özellik desteklenmiyor
SUPPORTED_AOA_RESULT_REQ_ANTENNA_INTERLEAVING 1 0xE3 1

Anten aralama özelliğinin desteklendiğini gösteren 1 baytlık değer.

Değerler:

  • 1: Özellik destekleniyor
  • 0: Özellik desteklenmiyor
SUPPORTED_MIN_RANGING_INTERVAL_MS 4 0xE4 2 Milisaniye cinsinden desteklenen minimum aralık ölçme aralığını gösteren 4 baytlık değer.
SUPPORTED_RANGE_DATA_NTF_CONFIG 4 0xE5 2 Desteklenen RANGE_DATA_NTF_CONFIG değerlerini gösteren 4 baytlık bit maskesi. Her bitin, RANGE_DATA_NTF_CONFIG içinde SET_APP_CFG_CMD kullanılan değerlere karşılık geldiği bit maskesi.
SUPPORTED_RSSI_REPORTING 1 0xE6 2

RSSI raporlamasının desteklenip desteklenmediğini gösteren 1 baytlık değer.

Değerler:

  • 1: Özellik destekleniyor
  • 0: Özellik desteklenmiyor
SUPPORTED_DIAGNOSTICS 1 0xE7 2

Tanılama raporlamasının desteklenip desteklenmediğini gösteren 1 baytlık değer.

Değerler:

  • 1: Özellik destekleniyor
  • 0: Özellik desteklenmiyor
SUPPORTED_MIN_SLOT_DURATION_RSTU 4 0xE8 2 RSTU'da desteklenen minimum yuva süresini belirten 4 baytlık değer.
SUPPORTED_MAX_RANGING_SESSION_NUMBER 4 0xE9 2 Desteklenen maksimum FiRa mesafe ölçme oturumu sayısını gösteren 4 baytlık değer.
SUPPORTED_CHANNELS_AOA 2 0xEA 2

AoA'yı destekleyen kanalları belirtmek için kullanılan 2 baytlık bit maskesi. Bit maskesindeki her 1 belirli bir UWB kanalına karşılık gelir.

Değerler:

  • 0x01: 5. kanal desteklenir.
  • 0x02: 6. kanal desteklenir.
  • 0x04: 8. kanal desteklenir
  • 0x08: Channel 9 desteklenir
  • 0x10: Channel 10 desteklenir.
  • 0x20: 12. kanal desteklenir
  • 0x40: Channel 13 desteklenir.
  • 0x80: Kanal 14 desteklenir.

Durum kodları

Tedarikçi alanındaki durum kodları aşağıda verilmiştir. Bunlar, UWB alt sistemi (UWBS) tarafından UCI yanıtlarında (ör. SESSION_START_RSP) döndürülür.

Durum kodu Değer Açıklama
STATUS_ERROR_STOPPED_DUE_TO_OTHER_SESSION_CONFLICT 0x52

Mevcut mesafe ölçme oturumu, diğer CCC veya FiRa mesafe ölçme oturumlarıyla çakışma nedeniyle başlatılamadığında döndürülen durum kodu.

STATUS_REGULATION_UWB_OFF 0x53

Mevcut mesafe ölçme oturumu, UWB ile ilgili yasal nedenlerden dolayı başlatılamadığında döndürülen durum kodu.

SESSION_STATUS_NTF içindeki durum değişikliği nedeni kodu

Aşağıda, SESSION_STATUS_NTF içinde bir UWBS tarafından döndürülen durum alanı için tedarikçi alanında tanımlanan durum değişikliği nedeni kodları verilmiştir. Bu bildirim, bir mesafe ölçme oturumunun durumu değiştiğinde (örneğin, ACTIVE'dan IDLE'ya) UWBS tarafından gönderilir.

Durum değişikliği neden kodu Değer Açıklama
REASON_ERROR_INVALID_CHANNEL_WITH_AOA 0x80

Yapılandırılan kanal AoA aralığını desteklemediğinden oturum durumu değişti.

REASON_ERROR_STOPPED_DUE_TO_OTHER_SESSION_CONFLICT 0x81

Diğer CCC veya FiRa mesafe ölçme oturumlarıyla çakışma nedeniyle oturum durumu değişti.

REASON_REGULATION_UWB_OFF 0x82

Yasal bir nedenle UWB devre dışı bırakılması gerektiği için oturum durumu değişti.