Interfejs hosta kontrolera (HCI) służy do interakcji z kontrolerem Bluetooth.
Ten dokument zawiera listę wymagań HCI dotyczących Bluetootha (BT) i Bluetootha Low Energy (BLE). Celem jest zapewnienie zgodności dostawców hosta i sterownika BT z tymi wymaganiami platformy, aby można było korzystać z zestawu funkcji opisanego poniżej.
W tym dokumencie specyfikacja Bluetooth Core 5.2 jest określana jako „specyfikacja”. Specyfikacja Bluetooth Core 5.2 jest dostępna na stronie internetowej Bluetooth SIG wraz z innymi przyjętymi dokumentami.
Omówienie ogólne
Możliwości i konfiguracja układu
Jako otwarta platforma Android ma wiele wersji oprogramowania, producentów OEM, dostawców oraz możliwości platform i układów scalonych.
Aby umożliwić zarządzanie różnorodnym środowiskiem i przenoszeniem danych, w tym dokumencie opisaliśmy filozofię projektowania, która pozwala kontrolerom BT udostępniać swoje możliwości (poza standardową specyfikacją Bluetooth Core 5.2). Hostowy moduł BT może następnie używać tych funkcji do określania, które funkcje włączyć.
Obsługa otwartych standardów
Jednym z celów Androida jest obsługa otwartych standardów po ratyfikowaniu ich w specyfikacji Bluetooth. Jeśli funkcja opisana poniżej stanie się dostępna w ramach standardowych metod HCI w przyszłej specyfikacji Bluetooth, będziemy dążyć do tego, aby stała się domyślnym rozwiązaniem.
Funkcje dostawcy
Polecenie specyficzne dla dostawcy: LE_Get_Vendor_Capabilities_Command
Pole polecenia kodu operacji (OCF): 0x153
Parametr polecenia | Rozmiar | Cel |
---|---|---|
NA | Pusta lista poleceń |
W przypadku tego polecenia zostanie wygenerowane zdarzenie „Command Complete”.
Parametr zwracania | Rozmiar | Cel |
---|---|---|
Status |
1 oktet | Stan „Command Complete” |
max_advt_instances (Wycofane) |
1 oktet |
Liczba obsługiwanych wystąpień reklamy. Zarezerwowane po wersji 0.98. Ten parametr jest wycofany w specyfikacji funkcji Google w wersji 0.98 i wyższych na rzecz rozszerzonej reklamy LE dostępnej w specyfikacji BT w wersji 5.0 i wyższych. |
offloaded_resolution_of_private-address (Wycofane) |
1 oktet |
Możliwości procesora BT w RPA. Jeśli jest obsługiwany przez chip, musi zostać włączony przez hosta. 0 = Nieobsługa 1 = Obsługa Zarezerwowane po wersji 0.98. Ten parametr jest wycofany w specyfikacji funkcji Google w wersji 0.98 i wyższych na rzecz funkcji dotyczącej prywatności dostępnej w specyfikacji BT w wersji 4.2 lub nowszej. |
total_scan_results_storage |
2 oktety | Miejsce na dane wyników skanowania w bajtach |
max_irk_list_sz |
1 oktet | Liczba wpisów IRK obsługiwanych przez oprogramowanie układowe |
filtering_support |
1 oktet |
Obsługa filtrowania w kontrolerze 0 = Nieobsługiwane 1 = Obsługiwane |
max_filter |
1 oktet | Liczba obsługiwanych filtrów |
activity_energy_info_support |
1 oktet |
Obsługuje raportowanie informacji o aktywności i energii 0 = brak możliwości 1 = możliwość |
version_supported |
2 oktety |
Określa wersję obsługiwanej specyfikacji funkcji Google byte[0] = numer główny byte[1] = numer podrzędny v1.05 byte[0] = 0x01 byte[1] = 0x05 |
total_num_of_advt_tracked |
2 oktety |
Łączna liczba reklamodawców śledzonych na potrzeby OnLost /OnFound
|
extended_scan_support |
1 oktet | Obsługuje rozszerzone okno i interwał skanowania |
debug_logging_supported |
1 oktet | Obsługuje rejestrowanie binarnych informacji debugowania z kontrolera |
LE_address_generation_offloading_support (Wycofane) |
1 oktet |
0 = nieobsługiwane 1 = obsługiwane Zarezerwowane w wersji 0.98 i nowszych Ten parametr jest wycofany w specyfikacji funkcji Google w wersji 0.98 i wyższych na rzecz funkcji dotyczącej prywatności dostępnej w specyfikacji BT w wersji 4.2 lub nowszej. |
A2DP_source_offload_capability_mask |
4 paź |
Maski bitowe obsługiwanych typów kodeków Bit 0 – SBC Bit 1 – AAC Bit 2 – APTX Bit 3 – APTX HD Bit 4 – LDAC Bity 5–31 są zarezerwowane |
bluetooth_quality_report_support |
1 oktet |
Obsługuje raportowanie zdarzeń jakości Bluetooth 0 = Nieobsługuje 1 = Obsługuje |
dynamic_audio_buffer_support |
4 oktety |
Obsługuje dynamiczny bufor audio w kontrolerze Bluetooth Maski bitowe dla obsługiwanych typów kodeków Bit 0 – SBC Bit 1 – AAC Bit 2 – APTX Bit 3 – APTX HD Bit 4 – LDAC Bity 5–31 są zarezerwowane |
a2dp_offload_v2_support |
1 oktet |
Obsługuje polecenia A2DP offload v2 w kontrolerze Bluetooth (patrz Rozpocznij odciążanie A2DP, Zatrzymaj odciążanie A2DP). 0 = Nieobsługiwane 1 = Obsługiwane |
iso_link_feedback_support |
1 oktet |
Obsługuje zdarzenie ISO Link Feedback 0 = nieobsługiwane 1 = obsługiwane |
Wyniki skanowania zbiorczego
Celem projektu jest ulepszanie sposobu dostarczania powiadomień o zdarzeniach odpowiedzi na skanowanie Bluetooth LE do hosta w celu oszczędzania energii w hostie.
Zmniejszenie częstotliwości powiadamiania przez kontroler procesora aplikacji hosta o wynikach skanowania pozwala procesorowi aplikacji hosta dłużej pozostawać w stanie bezczynności lub uśpienia. Pozwala to zmniejszyć zużycie energii przez hosta. Zwracany parametr total_scan_results_storage
funkcji LE_Get_Vendor_Capabilities_Command
wskazuje, że chip ma możliwość przechowywania wyników skanowania.
Ta funkcja umożliwia zarządzanie i konfigurowanie miejsca na dane wyników skanowania LE w kontrolerze Bluetooth. Magazyn służy do tymczasowego grupowania danych reklamy oraz skanowania danych i metadanych, które są otrzymywane przez kontrolera na potrzeby późniejszego przekazania do hosta.
Oprogramowanie sprzętowe musi obsługiwać 2 rodzaje zbiorczego przetwarzania, które można stosować jednocześnie:
- Skrócone. Zawiera te elementy informacji: {MAC, TX Power, RSSI, Timestamp}
- Pełna. Zawiera te elementy informacji: {MAC, TX Power, RSSI, Timestamp, Adv Data, Scan Response}
LE_Batch_Scan_Command
OCF: 0x156
Parametr polecenia | Rozmiar | Cel |
---|---|---|
Batch_Scan_opcode |
1 oktet |
0x1 – Włączanie funkcji dla konkretnego klienta 0x2 – Ustawianie parametrów przechowywania zbiorczego skanowania 0x3 – Ustawianie parametrów zbiorczego skanowania 0x4 – Czytanie parametrów wyników zbiorczego skanowania |
W przypadku tego polecenia zostanie wygenerowane zdarzenie „Command Complete”. Włączenie funkcji dotyczącej konkretnego klienta nie uruchamia skanowania.
Parametr zwracania | Rozmiar | Cel |
---|---|---|
Status |
1 oktet | Stan „Command Complete” |
Batch_Scan_opcode |
1 oktet |
0x1 – Włączanie funkcji dla konkretnego klienta 0x2 – Ustawianie parametrów przechowywania zbiorczego skanowania 0x3 – Ustawianie parametrów zbiorczego skanowania 0x4 – Czytanie parametrów wyników zbiorczego skanowania |
LE_Batch_Scan_Command: Enable customer-specific feature
Sub OCF: 0x01
Parametr podrzędnego polecenia | Rozmiar | Cel |
---|---|---|
enable_customer_specific_feature_set |
1 oktet |
0x01 – włączanie funkcji zbiorczego skanowania 0x00 – wyłączanie funkcji zbiorczego skanowania |
W przypadku tego polecenia zostanie wygenerowane zdarzenie „Command Complete”.
Parametr zwracania | Rozmiar | Cel |
---|---|---|
Status |
1 oktet | Stan „Command Complete” |
Batch_Scan_opcode |
1 oktet |
0x1 – Włączanie funkcji dla konkretnego klienta 0x2 – Ustawianie parametrów przechowywania zbiorczego skanowania 0x3 – Ustawianie parametrów zbiorczego skanowania 0x4 – Czytanie parametrów wyników zbiorczego skanowania |
LE_Batch_Scan_Command: podkomenda ustawienia parametru miejsca na dane w przypadku skanowania zbiorczego
Sub OCF: 0x02
Parametr podrzędnego polecenia | Rozmiar | Cel |
---|---|---|
Batch_Scan_Full_Max |
1 oktet |
Maksymalna ilość miejsca na dane (w %) przydzielona do pełnego stylu [Zakres: 0-100] |
Batch_Scan_Truncated_Max |
1 oktet |
Maksymalna ilość miejsca na dane (w %) przydzielona do stylu ściętego [Zakres: 0–100] |
Batch_Scan_Notify_Threshold |
1 oktet |
Ustaw poziom powiadomień (w %) dla poszczególnych puli pamięci
[Zakres: 0–100] Ustawienie 0 wyłączy powiadomienia. Wygenerowano zdarzenie HCI dotyczące konkretnego dostawcy (podzdarzenie przekroczenia progu w Storage) |
W przypadku tego polecenia zostanie wygenerowane zdarzenie „Command Complete”.
Parametr zwracania | Rozmiar | Cel |
---|---|---|
Status |
1 oktet | Stan „Command Complete” |
Batch_scan_opcode |
1 oktet | 0x02 [Set Batch Scan parameters] |
LE_Batch_Scan_Command: podkomenda ustawienia parametru zbiorczego skanowania
Sub OCF: 0x03
Parametr podrzędnego polecenia | Rozmiar | Cel |
---|---|---|
Batch_Scan_Mode |
1 oktet |
0x00 – skanowanie zbiorcze jest wyłączone 0x01 – tryb skrócony jest włączony 0x02 – tryb pełny jest włączony 0x03 – tryb skrócony i pełny są włączone |
Duty_cycle_scan_window |
4 oktety | Czas skanowania w ramach skanowania zbiorczego (liczba slotów) |
Duty_cyle_scan_interval |
4 oktety | Interwał zbiorczego skanowania (liczba slotów) |
own_address_type |
1 oktet |
0x00 – publiczny adres urządzenia 0x01 – losowy adres urządzenia |
Batch_scan_Discard_Rule |
1 oktet |
0 – odrzuć najstarszą reklamę 1 – odrzuć reklamę z najsłabszym identyfikatorem RSSI |
Ten podkomendę rozpocznie skanowanie zbiorcze, jeśli jest włączone. W przypadku skanowania z odcięciem wyniki są przechowywane w sposób skrócony, a unikalny klucz dla Truncated style = {BD_ADDR,
scan_interval}. Oznacza to, że dla każdego przedziału skanowania będzie rejestrowany tylko jeden BD_ADDR will
. Rekord, który należy zachować w trybie skróconym, to: {BD_ADDR
,
Tx Power, RSSI, Timestamp}
Gdy włączony jest tryb pełny, używane jest aktywne skanowanie, a odpowiedzi na skanowanie będą rejestrowane. Unikalny klucz pełnego stylu = {MAC, Ad packet}, niezależnie od interwału skanowania. W trybie pełnym należy zachować rekord {BD_ADDR
, Tx Power, RSSI, Timestamp, Ad packet, Scan
Response}. W stylu pełnym ten sam pakiet AD, jeśli jest wyświetlany wielokrotnie w różnych interwałach skanowania, jest rejestrowany tylko raz. Jednak w trybie przyciętym interesuje nas widoczność BA_ADDR
w różnych odstępach czasowych skanowania (raz na każdy interwał skanowania). RSSI to średnia wartość wszystkich duplikatów unikalnej reklamy w okresie skanowania.
W przypadku tego polecenia zostanie wygenerowane zdarzenie „Command Complete”.
Parametr zwracania | Rozmiar | Cel |
---|---|---|
Status |
1 oktet | Stan „Command Complete” |
Batch_scan_opcode |
1 oktet | 0x03 [Ustaw parametry zbiorczego skanowania] |
LE_Batch_Scan_Command: podkomenda odczytu wyników skanowania zbiorczego
Sub OCF: 0x04
Parametr podrzędnego polecenia | Rozmiar | Cel |
---|---|---|
Batch_Scan_Data_read |
1 oktet |
0x01 – dane w trybie obciętym 0x02 – dane w trybie pełnym |
W przypadku tego polecenia zostanie wygenerowane zdarzenie „Command Complete”. Gdy gospodarz wyda to polecenie, wszystkie wyniki w kontrolerze mogą nie zmieścić się w jednym zdarzeniu Zakończenie polecenia. Host będzie powtarzać wydawanie tego polecenia, dopóki odpowiednie wyniki w zdarzeniu Command Complete nie będą wskazywać 0 w polu Liczba rekordów, co oznacza, że kontroler nie ma już więcej rekordów do przekazania hostowi. Każde zdarzenie Command Complete może zawierać wiele rekordów tylko jednego typu danych (pełnych lub obciętych).
Odniesienia do czasu w kontrolerze i hostie nie są zsynchronizowane. Jednostka sygnatury czasowej to 50 ms. Wartość sygnatury czasowej jest określana na podstawie momentu, w którym gospodarz podał wartość atrybutu Read_Batch_Scan_Results_Sub_cmd
. Jeśli czas dotarcia polecenia toT_c
w oprogramowaniu układowym, to rzeczywisty czas, w jakim sygnatura czasowa została pobrana z oprogramowania układowego, toT_fw
. Czas raportowania to:T_c
- T_fw
. T_c
i T_fw
są w domenie czasowej oprogramowania. Dzięki temu gospodarz może obliczyć, jak dawno miało miejsce zdarzenie.
Parametr zwracania | Rozmiar | Cel |
---|---|---|
Status |
1 oktet | Stan „Command Complete” |
Batch_scan_opcode |
1 oktet | 0x03 [Ustaw parametry zbiorczego skanowania] |
Batch_Scan_data_read |
1 oktet | Określa format (skrócony lub pełny). |
num_of_records |
1 oktet | Liczba rekordów Batch_Scan_data_read |
format_of_data |
Zmienna |
Tryb skrócony: Address[0]: 6 oktetów Address_Type[0]: 1 oktet Tx_Pwr[0]: 1 oktet RSSI[0] : 1 oktet Timestamp[0]: 2 oktety [wiele rekordów ( num_of_records ) w wymienionym formacie]Tryb pełny: Address[0]: 6 oktetów Address_Type[0]: 1 oktet Tx_Pwr[0]: 1 oktet RSSI[0]: 1 oktet Timestamp[0]: 2 oktety Adv packet_len[0]: 1 oktet Adv_packet[0]: Adv_packet_len octets Scan_data_resp_len[0]: 1 oktet Scan_data_resp[0]: Scan_data_resp octets[wiele rekordów w wymienionym formacie ( num_of_records )]
|
Filtr treści pakietów reklamowych
Używaj tego polecenia do włączania, wyłączania i konfigurowania filtra treści pakietów reklamowych (APCF) w sterowniku. APCF filtruje raporty reklamowe w kontrolerze, ale nie filtruje reklam okresowych.
LE_APCF_Command
OCF: 0x157
Parametr polecenia | Rozmiar | Cel |
---|---|---|
APCF_opcode |
1 oktet |
0x00 – Włączenie APCF 0x01 – Ustaw parametry filtrowania APCF 0x02 – Adres nadawcy APCF 0x03 – Identyfikator usługi APCF 0x04 – Identyfikator zapytania o usługę APCF 0x05 – Nazwa lokalna APCF 0x06 – Dane producenta APCF 0x07 – Dane usługi APCF 0x08 – Usługa wykrywania transportu APCF 0x09 – Filtr typu reklamy APCF 0x10 - 0xAF – Zarezerwowane na potrzeby przyszłe 0xB0 - 0xDF – Zarezerwowane dla dostawcy 0xE0 - 0xFE – Zarezerwowane na potrzeby przyszłe 0xFF – Rozszerzone funkcje odczytu APCF |
W przypadku tego polecenia zostanie wygenerowane zdarzenie „Command Complete”.
Parametr zwracania | Rozmiar | Cel |
---|---|---|
Status |
1 oktet | Stan zwrotu |
APCF_opcode |
1 oktet |
0x00 – Włączenie APCF 0x01 – Ustaw parametry filtrowania APCF 0x02 – Adres nadawcy APCF 0x03 – Identyfikator usługi APCF 0x04 – Identyfikator zapytania o usługę APCF 0x05 – Nazwa lokalna APCF 0x06 – Dane producenta APCF 0x07 – Dane usługi APCF 0x08 – Usługa wykrywania transportu APCF 0x09 – Filtr typu reklamy APCF 0x10 - 0xAF – Zarezerwowane na potrzeby przyszłe 0xB0 - 0xDF – Zarezerwowane dla dostawcy 0xE0 - 0xFE – Zarezerwowane na potrzeby przyszłe 0xFF – Rozszerzone funkcje odczytu APCF |
LE_APCF_Command: Enable_sub_cmd
Sub OCF: 0x00
Parametr podrzędnego polecenia | Rozmiar | Cel |
---|---|---|
APCF_enable |
1 oktet |
0x01 – włączanie funkcji APCF 0x00 – wyłączanie funkcji APCF |
W przypadku tego polecenia zostanie wygenerowane zdarzenie „Command Complete”.
Parametr zwracania | Rozmiar | Cel |
---|---|---|
Status |
1 oktet | Stan „Command Complete” |
APCF_opcode |
1 oktet | 0x0 – włączanie APCF |
APCF_Enable |
1 oktet | Włączanie/wyłączanie odbywa się za pomocą APCF_enable |
LE_APCF_Command: set_filtering_parameters_sub_cmd
Ten podkomendę służy do dodawania i usuwania specyfikacji filtra lub do czyszczenia listy filtrów na potrzeby filtrowania na chipie.
Sub OCF: 0x01
Parametr podrzędnego polecenia | Rozmiar | Cel |
---|---|---|
APCF_Action |
1 oktet |
0x00 – Dodaj 0x01 – Usuń 0x02 – Wyczyść Usunięcie spowoduje wyczyszczenie określonego filtra wraz z powiązanymi wpisami funkcji w innych tabelach. Wyczyszczenie spowoduje usunięcie wszystkich filtrów i powiązanych wpisów w innych tabelach. |
APCF_Filter_Index |
1 oktet | Indeks filtra (0, max_filter-1 ) |
APCF_Feature_Selection |
2 oktety |
Maski bitowe dla wybranych funkcji: Bit 0: ustaw, aby włączyć filtr adresu transmisji Bit 1: ustaw, aby włączyć filtr zmiany danych usługi Bit 2: ustaw, aby włączyć sprawdzanie identyfikatora UUID usługi Bit 3: ustaw, aby włączyć sprawdzanie identyfikatora UUID zapytania o usługę Bit 4: ustaw, aby włączyć sprawdzanie nazwy lokalnej Bit 5: ustaw, aby włączyć sprawdzanie danych producenta Bit 6: ustaw, aby włączyć sprawdzanie danych usługi Bit 7: ustaw, aby włączyć sprawdzanie usługi wykrywania transportu Bit 8: ustaw, aby włączyć sprawdzanie typu AD |
APCF_List_Logic_Type |
2 oktety |
Operacja logiczna dla każdego wyboru funkcji (na pozycję bitu) określonego w pozycji APCF_Feature_Selection .
Dozwolone tylko wtedy, gdy funkcja jest włączona. Wartość pozycji bitu: 0: LUB 1: I Jeśli wybrana jest logika „I”, pakiet ADV przejdzie przez filtr tylko wtedy, gdy zawiera WSZYSTKIE wpisy z listy. Jeśli wybrany jest operator logiczny „LUB”, pakiet ADV przejdzie przez filtr, jeśli zawiera co najmniej 1 element z listy. |
APCF_Filter_Logic_Type |
1 oktet |
0x00: LUB 0x01: I Uwaga: typ logiki w przypadku pierwszych trzech pól APCF_Feature_Selection to „NIE MA”, co oznacza, że zawsze jest to operator logiczny „I”. Dotyczą one tylko 4 pol (bit 3–6) w pliku APCF_Feature_Selection .
|
rssi_high_thresh |
1 oktet |
[w dBm] Reklamodawca jest uważany za zauważonego tylko wtedy, gdy sygnał jest wyższy niż wysoki próg RSSI. W przeciwnym razie oprogramowanie musi zachowywać się tak, jakby nigdy go nie widziało. |
delivery_mode |
1 oktet |
0x00 – immediate 0x01 – on_found 0x02 – batched
|
onfound_timeout |
2 oktety |
Obowiązuje tylko wtedy, gdy delivery_mode to
on_found .[w milisekundach] Czas, który firmware potrzebuje na pobranie dodatkowych reklam przed przesłaniem danych. |
onfound_timeout_cnt |
1 oktet |
Obowiązuje tylko wtedy, gdy delivery_mode to on_found .[count] Jeśli reklama onFound pozostaje w oprogramowaniu przez czasonfound_timeout , gromadzi kilka reklam, a liczba jest sprawdzana. Jeśli liczba przekroczy onfound_timeout_cnt , zostanie zgłoszona OnFound natychmiast po tym.
|
rssi_low_thresh |
1 oktet |
Obowiązuje tylko wtedy, gdy delivery_mode to
on_found .[w dBm] Pakiet reklamodawcy jest uważany za niewyświetlony, jeśli RSSI otrzymanego pakietu nie przekracza dolnego progu RSSI. |
onlost_timeout |
2 oktety |
Obowiązuje tylko wtedy, gdy delivery_mode to
on_found .[w milisekundach] Jeśli reklama, po jej znalezieniu, nie jest wyświetlana w ciągły sposób przez okres lost_timeout , zostanie natychmiast zgłoszona jako zagubiona.
|
num_of_tracking_entries |
2 oktety |
Obowiązuje tylko wtedy, gdy delivery_mode to
on_found .[liczba] Łączna liczba reklamodawców do śledzenia na podstawie filtra. |
Wartości RSSI muszą być reprezentowane przez uzupełnienie do 2 poziomów w przypadku wartości ujemnych.
Prowadzący będzie mógł skonfigurować wiele filtrów z wartością APCF_Application_Address_type
równą 0x02 (dla wszystkich adresów nadawcy) w celu zarządzania różnymi kombinacjami filtrów.
Filtrowanie, grupowanie i raportowanie to powiązane ze sobą pojęcia. Każda reklama i powiązana z nią odpowiedź na skanowanie musi przejść przez wszystkie filtry, jeden po drugim. Dlatego działania wynikowe (delivery_mode
) są ściśle powiązane z filtrowaniem. Tryby dostawy to: report_immediately
, batch
i onFound
. Wartość OnLost
jest powiązana z wartością OnFound
w tym sensie, że po jej utracie zostanie zastąpiona wartością OnFound
.
Ten schemat przetwarzania przedstawia model koncepcyjny:

Gdy otrzymamy ramkę reklamy (lub odpowiedź na skanowanie), zostanie ona zastosowana do wszystkich filtrów w kolejności sekwencyjnej. Możliwe, że reklama może spowodować natychmiastowe raportowanie na podstawie jednego filtra i zbiorcze tego samego reklamy z powodu innej akcji filtra.
Próg poziomu RSSI (wysoki i niski) umożliwia kontrolowanie, kiedy ramka jest widoczna do przetwarzania filtra, nawet jeśli kontroler otrzymał prawidłowy pakiet. Jeśli tryb dostarczania jest ustawiony na „natychmiastowy” lub „w grupie”, do dalszego przetwarzania przez kontroler używany jest identyfikator RSSI ramki. Różne aplikacje wymagają różnych sposobów raportowania i zbiorowego przetwarzania. Umożliwia to wielu aplikacjom jednoczesne raportowanie lub grupowanie wyników w oprogramowaniu sprzętowym. Przykładem może być sytuacja, w której jedna aplikacja przeprowadza skanowanie zbiorcze, a później inna aplikacja wykonuje zwykłe skanowanie LE. Przed rozpoczęciem skanowania zbiorczego framework lub aplikacja ustawia odpowiednie filtry. Gdy później druga aplikacja przeprowadzi zwykłe skanowanie, poprzednie grupowanie będzie kontynuowane. Jednak ze względu na regularne skanowanie jest to podobne do dodawania filtra null (wraz ze wszystkimi istniejącymi filtrami) wraz z poleceniem skanowania LE. Parametry polecenia skanowania LE mają pierwszeństwo, gdy są aktywne. Gdy zwykłe skanowanie LE jest wyłączone, kontroler wróci do poprzedniego skanowania w grupie, jeśli takie istniało.
Tryb dostarczania OnFound
opiera się na skonfigurowanych filtrach. Kombinacja, która powoduje, że działanie filtra zakończy się powodzeniem, jest uważana za entuz, który należy śledzić w przypadku onLost
. Odpowiada mu podzbiór danych Advt.
Przejście OnFound/OnLost
filtra (jeśli jest włączone) będzie wyglądać tak:

W przypadku tego polecenia zostanie wygenerowane zdarzenie „Command Complete”.
Parametr zwracania | Rozmiar | Cel |
---|---|---|
Status |
1 oktet | Stan „Command Complete” |
APCF_opcode |
1 oktet | 0x01 – APCF Set Filtering Parameters |
APCF_Action |
1 oktet | Odzwierciedlenie polecenia APCF_Action |
APCF_AvailableSpaces |
1 oktet | Liczba dostępnych pozycji w tabeli filtrów |
LE_APCF_Command: broadcast_address_sub_cmd
Ten podkomendę służy do dodawania i usuwania adresu reklamodawcy lub do czyszczenia listy adresów reklamodawców na potrzeby filtrowania na chipie.
Sub OCF: 0x02
Parametr podrzędnego polecenia | Rozmiar | Cel |
---|---|---|
APCF_Action |
1 oktet |
0x00 – Dodaj 0x01 – Usuń 0x02 – Wyczyść Usuń spowoduje usunięcie adresu wybranego nadawcy w określonym filtrze. Wyczyszczenie spowoduje usunięcie wszystkich adresów nadawcy w wybranym filtrze. |
APCF_Filter_Index |
1 oktet | Indeks filtra (0, max_filter-1 ) |
APCF_Broadcaster_Address |
6 oktetów | 6-bajtowy adres urządzenia do dodania do listy adresów nadawcy lub do jej usunięcia |
APCF_Application_Address_type |
1 oktet |
0x00: publiczny 0x01: losowy 0x02: nieokreślony (ignorowanie typu adresu) Aby filtrować raporty reklamowe według typów adresów tożsamości (0x02, 0x03). Aby uzyskać raporty reklamowe z typami adresów 0x02 i 0x03, ustaw to pole na 0x02: NA (ignorowanie typu adresu). |
W przypadku tego polecenia zostanie wygenerowane zdarzenie „Command Complete”.
Parametr zwracania | Rozmiar | Cel |
---|---|---|
Status |
1 oktet | Stan „Command Complete” |
APCF_opcode |
1 oktet | 0x02 – adres nadawcy APCF |
APCF_Action |
1 oktet | Odzwierciedlenie polecenia APCF_Action |
APCF_AvailableSpaces |
1 oktet | Liczba bezpłatnych wpisów nadal dostępnych w tabeli adresów docelowych przesyłania strumieniowego |
LE_APCF_Command: service_uuid_sub_cmd
Ten podkomendę służy do dodawania i usuwania UUID usługi lub do czyszczenia listy UUID usługi na potrzeby filtrowania na chipie.
Sub OCF: 0x03
Parametr podrzędnego polecenia | Rozmiar | Cel |
---|---|---|
APCF_Action |
1 oktet |
0x00 – Dodaj 0x01 – Usuń 0x02 – Wyczyść Wybranie opcji Usuń spowoduje usunięcie określonego adresu UUID usługi w wybranym filtrze. Wyczyszczenie spowoduje usunięcie wszystkich identyfikatorów UUID usługi z wybranego filtra. |
APCF_Filter_Index |
1 oktet | Indeks filtra (0, max_filter -1) |
APCF_UUID |
2,4,16 bajtów | Identyfikator UUID usługi (16-bitowy, 32-bitowy lub 128-bitowy) do dodawania do listy lub usuwania z niej. |
APCF_UUID_MASK |
2,4,16 bajtów |
Maska UUID usługi (16-bitowa, 32-bitowa lub 128-bitowa) do dodania do listy.
Powinien mieć taką samą długość jak APCF_UUID.
|
W przypadku tego polecenia zostanie wygenerowane zdarzenie „Command Complete”.
Parametr zwracania | Rozmiar | Cel |
---|---|---|
Status |
1 oktet | Stan „Command Complete” |
APCF_opcode |
1 oktet | 0x03 – identyfikator usługi APCF |
APCF_Action |
1 oktet | Odzwierciedlenie polecenia APCF_Action |
APCF_AvailableSpaces |
1 oktet | Liczba bezpłatnych wpisów nadal dostępnych w tabeli identyfikatorów UUID usługi |
LE_APCF_Command: solicitation_uuid_sub_cmd
Ten podkomendę służy do dodawania i usuwania identyfikatorów UUID prośby lub do czyszczenia listy identyfikatorów UUID prośby na potrzeby filtrowania na chipie.
Sub OCF: 0x04
Parametr podrzędnego polecenia | Rozmiar | Cel |
---|---|---|
APCF_Action |
1 oktet |
0x00 – Dodaj 0x01 – Usuń 0x02 – Wyczyść Usuń spowoduje usunięcie adresu UUID w prośbie w określonym filtrze. Wyczyszczenie spowoduje usunięcie wszystkich identyfikatorów UUID ofert w wybranym filtrze. |
APCF_Filter_Index |
1 oktet | Indeks filtra (0, max_filter -1) |
APCF_UUID |
2,4,16 bajtów | Identyfikator UUID prośby (16-bitowy, 32-bitowy lub 128-bitowy) do dodania do listy lub usunięcia z niej. |
APCF_UUID_MASK |
2,4,16 bajtów |
Maska UUID zachęty (16-bitowa, 32-bitowa lub 128-bitowa) do dodania do listy. Powinien mieć taką samą długość jak APCF_UUID .
|
W przypadku tego polecenia zostanie wygenerowane zdarzenie „Command Complete”.
Parametr zwracania | Rozmiar | Cel |
---|---|---|
Status |
1 oktet | Stan „Command Complete” |
APCF_opcode |
1 oktet | 0x04 – identyfikator UUID prośby APCF |
APCF_Action |
1 oktet | Odzwierciedlenie polecenia APCF_Action |
APCF_AvailableSpaces |
1 oktet | Liczba bezpłatnych wpisów nadal dostępnych w tabeli identyfikatorów UUID dotyczących zbiórek |
LE_APCF_Command: local_name_sub_cmd
Ten podkomend służy do dodawania i usuwania lokalnych ciągów znaków nazwy oraz do czyszczenia listy lokalnych ciągów znaków nazwy na potrzeby filtrowania na chipie.
Sub OCF: 0x05
Parametr podrzędnego polecenia | Rozmiar | Cel |
---|---|---|
APCF_Action |
1 oktet |
0x00 – Dodaj 0x01 – Usuń 0x02 – Wyczyść Usuń spowoduje usunięcie określonego ciągu nazwy lokalnej w określonym filtrze. Wyczyszczenie spowoduje usunięcie wszystkich lokalnych ciągów znaków nazw w wybranym filtrze. |
APCF_Filter_Index |
1 oktet | Indeks filtra (0, max_filter -1) |
APCF_LocName_Mandata_or_SerData |
Rozmiar zmienny |
Ciąg znaków nazwy lokalnej. Uwagi:
|
W przypadku tego polecenia zostanie wygenerowane zdarzenie „Command Complete”.
Parametr zwracania | Rozmiar | Cel |
---|---|---|
Status |
1 oktet | Stan „Command Complete” |
APCF_opcode |
1 oktet | 0x05 – nazwa lokalna APCF |
APCF_Action |
1 oktet | Odzwierciedlenie polecenia APCF_Action |
APCF_AvailableSpaces |
1 oktet | Liczba bezpłatnych pozycji nadal dostępnych w tabeli nazw lokalnych |
LE_APCF_Command: manf_data_sub_cmd
Ten podkomendę służy do dodawania i usuwania ciągu znaków danych producenta lub do czyszczenia listy ciągów znaków danych producenta na potrzeby filtrowania na chipie.
Sub OCF: 0x06
Parametr podrzędnego polecenia | Rozmiar | Cel |
---|---|---|
APCF_Action |
1 oktet |
0x00 – Dodaj 0x01 – Usuń 0x02 – Wyczyść Usuń spowoduje usunięcie określonego ciągu danych producenta w wybranym filtrze. Wyczyszczenie spowoduje usunięcie wszystkich ciągów znaków danych producenta w określonym filtrze. |
APCF_Filter_Index |
1 oktet | Indeks filtra (0, max_filter -1) |
APCF_LocName_Mandata_or_SerData |
Rozmiar zmienny |
Ciąg znaków zawierający dane producenta. Uwagi:
|
APCF_ManData_Mask |
Rozmiar zmienny |
Maska danych producenta do dodania do listy. Powinien mieć taką samą długość jak APCF_LocName_or_ManData_or_SerData .
|
W przypadku tego polecenia zostanie wygenerowane zdarzenie „Command Complete”.
Parametr zwracania | Rozmiar | Cel |
---|---|---|
Status |
1 oktet | Stan „Command Complete” |
APCF_opcode |
1 oktet | 0x06 – dane producenta APCF |
APCF_Action |
1 oktet | Odzwierciedlenie polecenia APCF_Action |
APCF_AvailableSpaces |
1 oktet | Liczba bezpłatnych pozycji nadal dostępnych w tabeli danych producenta |
LE_APCF_Command: service_data_sub_cmd
Ten podkomendę służy do dodawania i usuwania ciągu danych usługi lub do czyszczenia listy ciągów danych usługi na potrzeby filtrowania na chipie.
Sub OCF: 0x07
Parametr podrzędnego polecenia | Rozmiar | Cel |
---|---|---|
APCF_Action |
1 oktet |
0x00 – Dodaj 0x01 – Usuń 0x02 – Wyczyść „Usuń” spowoduje usunięcie określonego ciągu danych usługi w wybranym filtrze. Wyczyszczenie spowoduje usunięcie wszystkich ciągów danych usługi w wybranym filtrze. |
APCF_Filter_Index |
1 oktet | Indeks filtra (0, max_filter -1) |
APCF_LocName_Mandata_or_SerData |
Rozmiar zmienny |
Ciąg znaków danych usługi. Uwagi:
|
APCF_LocName_Mandata_or_SerData_Mask |
Rozmiar zmienny |
Maska danych usługi do dodania do listy. Powinien mieć taką samą długość jak APCF_LocName_or_ManData_or_SerData.
|
W przypadku tego polecenia zostanie wygenerowane zdarzenie „Command Complete”.
Parametr zwracania | Rozmiar | Cel |
---|---|---|
Status |
1 oktet | Stan „Command Complete” |
APCF_opcode |
1 oktet | 0x07 – dane usługi APCF |
APCF_Action |
1 oktet | Odzwierciedlenie polecenia APCF_Action |
APCF_AvailableSpaces |
1 oktet | Liczba bezpłatnych wpisów nadal dostępnych w tabeli danych usługi |
LE_APCF_Command: ad_type_sub_cmd
Ten podkomendę służy do dodawania i usuwania typu reklamy lub do czyszczenia listy typów reklam na potrzeby filtrowania na chipie. Użyj polecenia read_extended_features_sub_cmd
, aby sprawdzić, czy to polecenie jest obsługiwane.
Jeśli APCF_AD_DATA_Length
= 0, filtr APCF_AD_TYPE
nie porównuje danych reklamy i maski danych reklamy.
Jeśli długość otrzymanego pakietu ADV przekracza AD_DATA_LENGTH
, porównaj tylko pierwsze AD_DATA_LENGTH
bajtów danych AD, a pozostałe dane zignoruj.
Sub OCF: 0x09
Parametr podrzędnego polecenia | Rozmiar | Cel |
---|---|---|
APCF_Action |
1 oktet |
0x00 – Dodaj 0x01 – Usuń 0x02 – Wyczyść Wybranie opcji Usuń spowoduje usunięcie określonego typu reklamy w wybranym filtrze. Wyczyszczenie spowoduje usunięcie wszystkich typów reklam w wybranym filtrze. |
APCF_Filter_Index |
1 oktet | Indeks filtra (0, max_filter -1) |
APCF_AD_TYPE |
1 oktet | Typ reklamy do dodania do listy lub z niej do usunięcia. Zignoruj, gdy APCF_Action ma wartość 0x02 (Wyczyść). |
APCF_AD_DATA_Length |
1 oktet |
0x00 – oznacza, że nie należy filtrować treści danych Ignoruj, gdy APCF_Action ma wartość 0x02 (Wyczyść)
|
APCF_AD_DATA |
Rozmiar zmienny |
Rozmiar zmienny, zależny od wartości APCF_AD_DATA_Length . Ignoruj, gdy APCF_Action = 0x02 (Wyczyść). |
APCF_AD_DATA_MASK |
Rozmiar zmienny |
Rozmiar zmienny, zależny od APCF_AD_DATA_Length Zignoruj, gdy APCF_Action = 0x02 (Wyczyść)Powinien mieć taką samą długość jak APCF_AD_DATA .
|
W przypadku tego polecenia zostanie wygenerowane zdarzenie „Command Complete”.
Parametr zwracania | Rozmiar | Cel |
---|---|---|
Status |
1 oktet | Stan „Command Complete” |
APCF_opcode |
1 oktet | 0x09 – typ reklamy APCF |
APCF_Action |
1 oktet | Odzwierciedlenie polecenia APCF_Action |
APCF_AvailableSpaces |
1 oktet | Liczba bezpłatnych wpisów nadal dostępnych w tabeli Typ reklamy |
LE_APCF_Command: read_extended_features_sub_cmd
Ten podkomend służy do odczytu rozszerzonych funkcji APCF.
Sub OCF: 0xFF
Parametr podrzędnego polecenia | Rozmiar | Cel |
---|---|---|
Nie dotyczy | Pusty parametr polecenia. |
W przypadku tego polecenia zostanie wygenerowane zdarzenie „Command Complete”.
Parametr zwracania | Rozmiar | Cel |
---|---|---|
Status |
1 oktet | Stan „Command Complete” |
APCF_opcode |
1 oktet | 0xFF – APCF_Read_Extended_Features |
APCF_extended_features |
2 oktety |
Maski bitowe obsługiwanych rozszerzonych funkcji:
Wartość bitu
|
polecenie dotyczące informacji o aktywności kontrolera i energii
Te informacje są przeznaczone do analizowania przez funkcje systemu hosta na wyższym poziomie całkowitej aktywności wszystkich komponentów, w tym kontrolera BT i jego stanu makro, w zależności od tego, co dzieje się w aplikacjach i ramach. W tym celu potrzebne są te informacje z poziomu pakietu BT i sterownika:
- BT stack: raportowanie bieżącego stanu makrooperacyjnego kontrolera
- Oprogramowanie sprzętowe: raportowanie informacji o aktywności i energii
Stany makra BT host stack określone na poziomie użytkownika:
- Stan bezczynności: [skanowanie strony, reklama LE, skanowanie zapytania, skanowanie LE]
- Skanowanie: [wyświetlenie/zapytanie/próba połączenia]
- Aktywny: [ACL link on, SCO link ongoing, sniff mode]
Działania, które kontroler śledzi w trakcie swojego działania, to czas Tx, czas Rx, czas bezczynności i łączna ilość zużytej energii. Zostaną wyczyszczone po odczytaniu przez gospodarza.
LE_Get_Controller_Activity_Energy_Info
To polecenie jest specyficzne dla dostawcy.
OCF: 0x159
Parametr podrzędnego polecenia | Rozmiar | Cel |
---|---|---|
NA | Pusty parametr polecenia |
W przypadku tego polecenia zostanie wygenerowane zdarzenie „Command Complete”.
Parametr zwracania | Rozmiar | Cel |
---|---|---|
Status |
1 oktet | Stan „Command Complete” |
total_tx_time_ms |
4 oktety | Łączny czas wykonywania transakcji |
total_rx_time_ms |
4 oktety | Łączny czas wykonywania Rx |
total_idle_time_ms |
4 oktety | Łączny czas w stanie bezczynności (stany niskiego poboru mocy, gdy urządzenie nie jest w stanie uśpienia) |
total_energy_used |
4 oktety | Łączne zużycie energii [iloczyn prądu (mA), napięcia (V) i czasu (ms)] |
Polecenie LE extended set scan parameters
Za pomocą tego polecenia można włączyć większe okno i interwał skanowania w kontrolerze. Zgodnie ze specyfikacją BT Core 5.2 okno skanowania i interwał mają górną granicę 10,24 sekund, co utrudnia skanowanie w aplikacji po upływie 10,24 sekund.
Podstawowe źródło: specyfikacja BT Core 5.2, strona 2493 (polecenie parametrów LE Set Scan).
OCF: 0x15A
Parametr polecenia | Rozmiar | Cel |
---|---|---|
LE_Ex_Scan_Type |
1 oktet |
0x00 – skanowanie pasywne. Nie wysyłane są żadne pakiety SCAN_REQ (domyślnie).0x01 – aktywne skanowanie. SCAN_REQ mogą być wysyłane.
|
LE_Ex_Scan_Interval |
4 oktety |
Określany jako przedział czasu od rozpoczęcia przez kontroler ostatniego skanowania LE do rozpoczęcia kolejnego skanowania LE. Zakres: 0x0004–0x00FFFFFF Domyślnie: 0x0010 (10 ms) Czas = N * 0,625 ms Zakres czasu: 2,5 ms–10442,25 sekund |
LE_Ex_Scan_Window |
4 oktety |
Czas trwania skanowania LE. Wartość LE_Scan_Window jest mniejsza lub równa wartości LE_Scan_Interval .
Zakres: 0x0004–0xFFFF Domyślnie: 0x0010 (10 ms) Czas = N * 0,625 ms Zakres czasu: 2,5–40,95 s |
Own_Address_Type |
1 oktet |
0x00 – publiczny adres urządzenia (domyślny) 0x01 – losowy adres urządzenia |
LE_Ex_Scan_Filter_Policy |
0x00 – akceptuj wszystkie pakiety reklam (domyślnie). Pakiety reklam kierowanych, które nie są kierowane do tego urządzenia, będą ignorowane. 0x01 – ignorowanie pakietów reklamy z urządzeń, które nie znajdują się na liście „Tylko biała lista”. Pakiety reklam kierowanych, które nie są kierowane do tego urządzenia, będą ignorowane. |
W przypadku tego polecenia zostanie wygenerowane zdarzenie „Command Complete”.
Parametr zwracania | Rozmiar | Cel |
---|---|---|
Status |
1 oktet | Stan „Command Complete” |
Polecenie Get controller debug info
Celem tego elementu informacji jest pozyskanie przez hosta informacji debugowania kontrolera w postaci binarnej na potrzeby dalszego przetwarzania i analizy. Ułatwia to debugowanie problemów na miejscu i daje inżynierom narzędzie do rejestrowania informacji na potrzeby analizy. Administrator może udostępnić te informacje, gdy gospodarz poprosi o to za pomocą zdarzenia (podzdarzeniowego zdarzenia Informacje o administratorze na potrzeby debugowania) lub samodzielnie, jeśli zechce to zrobić. Przykładowe zastosowania: raportowanie stanu oprogramowania układowego, informacje o pamięci podręcznej w przypadku awarii, informacje z dziennika itp.
OCF: 0x15B
Parametr polecenia | Rozmiar | Cel |
---|---|---|
Nie dotyczy | Pusta lista parametrów |
W przypadku tego polecenia zostanie wygenerowane zdarzenie „Command Complete”.
Parametr zwracania | Rozmiar | Cel |
---|---|---|
Status |
1 oktet | Stan „Command Complete” |
Obsługa sprzętowego odciążania A2DP
Funkcja przenoszenia A2DP umożliwia przeniesienie procesu kodowania dźwięku A2DP do procesora audio podłączonego do kontrolera BT. Kodowany strumień danych audio przechodzi bezpośrednio z procesora audio do kontrolera BT bez udziału hosta BT. Host BT jest nadal odpowiedzialny za konfigurowanie i sterowanie sesją A2DP. Dostępne są 2 wersje poleceń. Stare polecenia z kodem OCF 0x01–0x02 obsługują tylko kodeki open source. Wersje z wartością podrzędnego OCF 0x03–0x04 są niezależne od skonfigurowanego kodeka.
OCF: 0x15D
Rozpocznij odciążanie A2DP (starsza wersja)
Sub OCF: 0x01
Użyj tego polecenia, aby skonfigurować proces przenoszenia A2DP i rozpocząć strumień A2DP.
Parametr polecenia | Rozmiar | Cel |
---|---|---|
Codec |
4 oktety |
Określa typ kodeka 0x01 – SBC 0x02 – AAC 0x04 – APTX 0x08 – APTX HD 0x10 – LDAC |
Max_Latency |
2 oktety | Maksymalne dopuszczalne opóźnienie (w ms). Wartość 0 wyłącza funkcję flush. |
SCMS-T_Enable |
2 oktety |
Oktet 0: flaga umożliwiająca dodanie nagłówka SCMS-T.
Oktet 1: wartość nagłówka SCMS-T, jeśli jest włączony. |
Sampling_Frequency |
4 oktety |
0x01 – 44100 Hz 0x02 – 48000 Hz 0x04 – 88200 Hz 0x08 – 96000 Hz |
Bits_Per_Sample |
1 oktet |
0x01 – 16 bitów na próbkę 0x02 – 24 bity na próbkę 0x04 – 32 bity na próbkę |
Channel_Mode |
1 oktet |
0x01 – mono 0x02 – stereo |
Encoded_Audio_Bitrate |
4 oktety |
Szybkość transmisji dźwięku po zakodowaniu wyrażona w bitach na sekundę. 0x00000000 - szybkość transmisji bitów dźwięku nie jest określona / nieużywana. 0x00000001 - 0x00FFFFFF - Szybkość transmisji bitów zakodowanego dźwięku w bitach na sekundę. 0x01000000 – 0xFFFFFFFF – zarezerwowane. |
Connection_Handle |
2 oktety | Identyfikator połączenia A2DP, które jest konfigurowane |
L2CAP_Channel_ID |
2 oktety | Identyfikator kanału L2CAP, który ma być używany w tym połączeniu A2DP |
L2CAP_MTU_Size |
2 oktety | Maksymalny rozmiar MTU L2CAP zawierający zakodowane pakiety audio |
Codec_Information |
32 oktety |
Informacje dotyczące kodeka.
Kodek SBC:
Zapoznaj się z elementami informacji o kodeki SBC w A2DP w wersji 1.3. Kodek AAC:
Zapoznaj się z elementami informacji specyficznymi dla kodeka AAC w A2DP w wersji 1.3 Kodek LDAC:
Oktet 0–3: identyfikator dostawcy
Oktet 4–5: identyfikator kodeka
Oktet 6: indeks szybkości transmisji danych:
Oktet 7: tryb kanału LDAC Oktet 8–31: zarezerwowane Wszystkie inne kodeki: Oktet 0–31: zarezerwowane |
W przypadku tego polecenia zostanie wygenerowane zdarzenie „Command Complete”.
Parametr zwracania | Rozmiar | Cel |
---|---|---|
Status |
1 oktet | Stan „Command Complete” |
Sub_Opcode |
1 oktet | 0x01 – rozpoczęcie odciążenia A2DP |
Rozpocznij odciążanie A2DP
Sub OCF: 0x03
Użyj tego polecenia, aby skonfigurować proces przenoszenia A2DP i rozpocząć strumień A2DP.
Parametr polecenia | Rozmiar | Cel |
---|---|---|
Connection Handle |
2 oktety | Identyfikator aktywnego połączenia HCI |
L2CAP_Channel_ID |
2 oktety | Identyfikator kanału L2CAP otwartego na potrzeby strumieniowego przesyłania A2DP |
Data_Path_Direction |
1 oktet |
0x00 – wyjście (źródło/złączenie AVDTP) 0x01 – wejście (zbiornik/podział AVDTP) |
Peer_MTU |
2 oktety | Maksymalny rozmiar pakietów L2CAP wynegocjowany z urządzeniem peer. |
CP_Enable_SCMS_T |
1 oktet |
0x00 – wyłącz nagłówek ochrony treści SCMS-T 0x01 – włącz nagłówek ochrony treści SCMS-T |
CP_Header_SCMS_T |
1 oktet |
Gdy włączono nagłówek ochrony treści SCMS-T (CP_SCMS_T_Enable
ustawiony na 0x01), określa wartość nagłówka poprzedzającą zawartość audio (patrz A2DP, sekcje 3.2.1–2) zgodnie z definicją w specyfikacji Bluetooth Assigned Numbers (sekcja 6.3.2).Ignorowane, gdy ochrona treści SCMS-T nie jest włączona. |
Vendor_Specific_Parameters_Length |
1 oktet |
Długość parametrów dostawcy, która mieści się w zakresie od 0 do 128. Jeśli nie podasz żadnych dodatkowych parametrów, zostanie użyta wartość 0. |
Vendor_Specific_Parameters |
0–128 oktetów |
Parametry specyficzne dla dostawcy udostępniane przez interfejs HAL dźwięku Bluetooth.CodecParameters.vendorSpecificParameters[]
|
W przypadku tego polecenia zostanie wygenerowane zdarzenie „Command Complete”.
Parametr zwracania | Rozmiar | Cel |
---|---|---|
Status |
1 oktet | Stan „Command Complete” |
Sub_Opcode |
1 oktet | 0x03 – rozpoczęcie odciążenia A2DP |
Zatrzymaj odciążanie A2DP (starsza wersja)
Sub OCF: 0x02
To polecenie służy do zatrzymania strumienia A2DP.
Parametr polecenia | Rozmiar | Cel |
---|---|---|
Nie dotyczy | Pusta lista parametrów polecenia. |
Dla tego polecenia nie zdefiniowano żadnych parametrów.
W przypadku tego polecenia zostanie wygenerowane zdarzenie „Command Complete”.
Parametr zwracania | Rozmiar | Cel |
---|---|---|
Status |
1 oktet | Stan „Command Complete” |
Sub_Opcode |
1 oktet | 0x02 – Zatrzymaj odciążanie A2DP |
Zatrzymaj odciążanie A2DP
Sub OCF: 0x04
To polecenie służy do zatrzymania strumienia A2DP.
Parametr polecenia | Rozmiar | Cel |
---|---|---|
Connection Handle |
2 oktety | Identyfikator aktywnego połączenia HCI |
L2CAP_Channel_ID |
2 oktety | Identyfikator kanału L2CAP otwartego na potrzeby strumieniowego przesyłania A2DP |
Data_Path_Direction |
1 oktet |
0x00 – wyjście (źródło/złączenie AVDTP) 0x01 – wejście (zbiornik/podział AVDTP) |
W przypadku tego polecenia zostanie wygenerowane zdarzenie „Command Complete”.
Parametr zwracania | Rozmiar | Cel |
---|---|---|
Status |
1 oktet | Stan „Command Complete” |
Sub_Opcode |
1 oktet | 0x04 – Zatrzymaj odciążanie A2DP |
Polecenie raportu jakości Bluetooth
Funkcja polecenia raportu jakości BT uruchamia mechanizm w kontrolerze Bluetooth, aby zgłaszać zdarzenia dotyczące jakości Bluetooth do hosta. Możesz włączyć 4 opcje:
- Tryb monitorowania jakości: kontroler okresowo wysyła do hosta podzbiór BQR związany z jakością połączenia.
- Zbliża się LSTO: jeśli z podłączonego urządzenia BT nie jest odbierany żaden pakiet przez ponad połowę wartości limitu czasu nadzoru łącza (LSTO), kontroler zgłasza do hosta zdarzenie zbliżania się do LSTO.
- A2DP Audio Choppy: gdy kontroler wykryje czynniki powodujące zakłócenia dźwięku, przekaże gospodarzowi zdarzenie A2DP Audio Choppy.
- (e)SCO Voice Choppy: gdy kontroler wykryje czynniki powodujące zakłócenia głosu, zgłosi zdarzenie (e)SCO Voice Choppy gospodarzowi.
- Root Inflammation: to zdarzenie jest wysyłane przez kontroler do stosu, gdy HAL lub kontroler napotka krytyczny błąd i musi ponownie uruchomić Bluetooth.
- Ślad wiadomości LMP/LL: kontroler wysyła do hosta wiadomość LMP/LL z procesem nawiązywania połączenia z urządzeniem zdalnym.
- Ślad planowania Bluetooth Multi-profile/Coex: kontroler wysyła informacje o planowaniu dotyczące obsługi wielu profili Bluetooth i współistnienia bezprzewodowego w zakresie 2,4 GHz do hosta.
- Mechanizm informacji o debugowaniu kontrolera: po włączeniu kontroler może samodzielnie przesyłać informacje o logowaniu debugowania do hosta za pomocą podzdarzenia informacji o debugowaniu kontrolera.
- LE Audio Choppy: gdy kontroler wykryje czynniki powodujące zakłócenia dźwięku, zgłosi gospodarzowi zdarzenie LE Audio Choppy.
-
Zaawansowany tryb statystyk RF: kontroler przesyła informacje o statystykach RF do hosta, co umożliwia 2 użyteczne zastosowania raportów:
- Raporty okresowe
- Aktywatory zdarzeń (rozpoczęcie i zatrzymanie transmisji oraz aktywator zdarzenia dotyczącego jakości połączenia).
- BQR_Report_Action polecenia Bluetooth Quality Report: gospodarz może użyć tego polecenia HCI, aby uzyskać jednorazowe zapytanie dotyczące trybu monitorowania jakości, trybu monitorowania zużycia energii lub zaawansowanego trybu statystyk RF.
OCF: 0x15E
Parametr polecenia | Rozmiar | Cel |
---|---|---|
BQR_Report_Action |
1 oktet |
Działanie polegające na dodawaniu lub usuwaniu raportowania zdarzeń jakości ustawionych w parametrze BQR_Quality_Event_Mask lub na czyszczeniu wszystkich zdarzeń.
0x00 – dodaj
Usunięcie spowoduje usunięcie raportowania określonych zdarzeń związanych z jakością. |
BQR_Quality_Event_Mask |
4 oktety |
Bitowe maski dla wybranego raportowania zdarzeń związanych z jakością.
Bit 0: ustaw, aby włączyć tryb monitorowania jakości. |
BQR_Minimum_Report_Interval |
2 oktety |
Określ minimalny odstęp czasu między raportami zdarzeń związanych z jakością dla wybranych zdarzeń jakości. Oprogramowanie układu sterującego nie powinno zgłaszać następnego zdarzenia w określonym przedziale czasu. Ustawienie interwału musi być odpowiednie i dedykowane dla dodawanych zdarzeń jakości.
Jednostka: ms |
BQR_Vendor_Specific_Quality_Event_Mask |
4 oktety |
Bitowe maski dla wybranego raportowania zdarzeń związanych z jakością konkretnego dostawcy. Ten parametr jest prawidłowy tylko wtedy, gdy bit 15 w parametrye BQR_Quality_Event_Mask jest ustawiony.
Bity 0–31: zarezerwowane. |
BQR_Vendor_Specific_Trace_Mask |
4 oktety |
Bitowe maski dla wybranego raportowania śladów konkretnego dostawcy. Ten parametr jest prawidłowy tylko wtedy, gdy bit 31 w parametrye BQR_Quality_Event_Mask jest ustawiony.
Bity 0–31: zarezerwowane. |
Report_interval_multiple |
4 oktety |
Mnożnik dla BQR_Minimum_Report_Interval . Gdy ta wartość jest większa lub równa 1, interwał raportu BQR ma format Interwał raportu BQR = BQR_Minimum_Report_Interval x Report_interval_multiple. Sterownik nie może zgłaszać kolejnego zdarzenia w okresie zdefiniowanym w czasie. Ustawienie przedziału czasowego jest przeznaczone wyłącznie do dodanych zdarzeń jakości.
Jednostka: ms BQR_Report_Interval jest większe niż możliwości kontrolera, kontroler musi zwrócić maksymalny czas BQR_Report_Interval po wykonaniu polecenia.
|
W przypadku tego polecenia zostanie wygenerowane zdarzenie „Command Complete”.
Parametr zwracania | Rozmiar | Cel |
---|---|---|
Status |
1 oktet | Stan „Command Complete” |
Current_Quality_Event_Mask |
4 oktety |
Wskazuje bieżące ustawienie maski bitowej. Bit 0: tryb monitorowania jakości jest włączony. Bit 1: włączone jest raportowanie zbliżającego się LSTO. Bit 2: raportowanie zdarzeń A2DP Audio Choppy jest włączone. Bit 3: (e)SCO Voice Choppy event reporting is enabled. Bit 4: włączone jest zgłaszanie zdarzeń dotyczących stanu zapalnego w korzeniu. Bit 5: tryb monitorowania zużycia energii jest włączony. Bit 6: raportowanie zdarzeń ściszania dźwięku w Bluetooth LE jest włączone. Bit 7: zdarzenie nieudanego połączenia. Bit 8: ustaw, aby włączyć wyzwalacz zdarzenia w trybie Zaawansowane statystyki RF. Bit 9: ustaw, aby włączyć okresowy raport statystyk RF zaawansowanych. Bit 10–14: zarezerwowany. Bit 15: włączone jest raportowanie zdarzeń związanych z jakością, które są specyficzne dla danego dostawcy. Bit 16: włączono śledzenie wiadomości LMP/LL. Bit 17: włączona jest śledzenie harmonogramu Bluetooth Multi-link/Coex. Bit 18: mechanizm informacji debugowania kontrolera jest włączony. Bity 19–30: zarezerwowane. Bit 31: włączone jest śledzenie specyficzne dla dostawcy. |
Current_Vendor_Specific_Quality_Event_Mask |
4 oktety | Wskazuje bieżące ustawienie maski bitów. |
Current_Vendor_Specific_Trace_Mask |
4 oktety | Wskazuje bieżące ustawienie maski bitów. |
BQR_Report_interval |
4 oktety | Wskazuje bieżące ustawienie maski bitów. |
Current_Vendor_Specific_Trace_Mask |
4 oktety |
Ustawienie BQR_Report_interval . Musi to być minimalna wartość między BQR_Minimum_Report_Interval * Report_interval_multiple lub maksymalnym obsługiwanym interwałem sterownika. |
Polecenie dynamicznego buforowania dźwięku
Dynamiczny bufor audio zmniejsza zakłócenia dźwięku przez zmianę rozmiaru bufora dźwięku w sterowniku Bluetooth w zależności od różnych scenariuszy.
OCF: 0x15F
Uzyskaj możliwość buforowania dźwięku
Sub OCF: 0x01
Użyj tego polecenia, aby uzyskać informacje o czasie buforowania dźwięku z kontrolera Bluetooth.
Parametr polecenia | Rozmiar | Cel |
---|---|---|
Nie dotyczy | Pusta lista poleceń |
W przypadku tego polecenia zostanie wygenerowane zdarzenie „Command Complete”.
Parametr zwracania | Rozmiar | Cel |
---|---|---|
Status |
1 oktet | Stan „Command Complete” |
Dynamic_Audio_Buffer_opcode |
1 oktet | 0x01 – pobieranie czasu bufora audio |
Audio_Codec_Type_Supported |
4 oktety |
Maski bitowe obsługiwanych typów kodeków Bit 0 – SBC Bit 1 – AAC Bit 2 – APTX Bit 3 – APTX HD Bit 4 – LDAC Bity 5–31 są zarezerwowane |
Audio_Codec_Buffer_Default_Time_For_Bit_0 |
2 oktety |
Domyślny czas buforowania dla typu kodeka Bit 0 określonego w atrybucie Audio_Codec_Type_Supported. Ta wartość będzie 0, jeśli typ kodeka Bit 0 nie jest obsługiwany. Jednostka: ms |
Audio_Codec_Buffer_Maximum_Time_For_Bit_0 |
2 oktety |
Maksymalny czas buforowania dla typu kodeka Bit 0 określonego w Audio_Codec_Type_Supported. Ta wartość będzie 0, jeśli typ kodeka Bit 0 nie jest obsługiwany. Jednostka: ms |
Audio_Codec_Buffer_Minimum_Time_For_Bit_0 |
2 oktety |
Minimalny czas buforowania dla typu kodeka Bit 0 określonego w atrybucie Audio_Codec_Type_Supported. Ta wartość będzie 0, jeśli typ kodeka Bit 0 nie jest obsługiwany. Jednostka: ms |
Audio_Codec_Buffer_Default_Time_For_Bit_1 |
2 oktety |
Domyślny czas buforowania dla typu kodeka Bit 1 określonego w atrybucie Audio_Codec_Type_Supported. Ta wartość będzie 0, jeśli typ kodeka Bit 1 nie jest obsługiwany. Jednostka: ms |
Audio_Codec_Buffer_Maximum_Time_For_Bit_1 |
2 oktety |
Maksymalny czas buforowania dla typu kodeka Bit 1 określonego w Audio_Codec_Type_Supported. Ta wartość będzie 0, jeśli typ kodeka Bit 1 nie jest obsługiwany. Jednostka: ms |
Audio_Codec_Buffer_Minimum_Time_For_Bit_1 |
2 oktety |
Minimalny czas buforowania dla typu kodeka Bit 1 określonego w atrybucie Audio_Codec_Type_Supported. Ta wartość będzie 0, jeśli typ kodeka Bit 1 nie jest obsługiwany. Jednostka: ms |
...... | ...... | ...... |
Audio_Codec_Buffer_Default_Time_For_Bit_31 |
2 oktety |
Domyślny czas buforowania dla typu kodeka Bit 31 określony w Audio_Codec_Type_Supported. Ta wartość będzie 0, jeśli typ kodeka Bit 31 nie jest obsługiwany. Jednostka: ms |
Audio_Codec_Buffer_Maximum_Time_For_Bit_31 |
2 oktety |
Maksymalny czas buforowania dla typu kodeka Bit 31 określonego w Audio_Codec_Type_Supported. Ta wartość będzie 0, jeśli typ kodeka Bit 31 nie jest obsługiwany. Jednostka: ms |
Audio_Codec_Buffer_Minimum_Time_For_Bit_31 |
2 oktety |
Minimalny czas buforowania dla typu kodeka Bit 31 określonego w atrybucie Audio_Codec_Type_Supported. Ta wartość będzie 0, jeśli typ kodeka Bit 31 nie jest obsługiwany. Jednostka: ms |
Ustawianie czasu buforowania dźwięku
Sub OCF: 0x02
Użyj tego polecenia, aby ustawić czas buforowania dźwięku na kontrolerze Bluetooth.
Parametr polecenia | Rozmiar | Cel |
---|---|---|
Audio_Codec_Buffer_Time |
2 oktety |
Requested audio buffer time for the current used codec. Unit: ms |
W przypadku tego polecenia zostanie wygenerowane zdarzenie „Command Complete”.
Parametr zwracania | Rozmiar | Cel |
---|---|---|
Status |
1 oktet | Stan „Command Complete” |
Dynamic_Audio_Buffer_opcode |
1 oktet | 0x02 – ustawienie czasu buforowania dźwięku. |
Audio_Codec_Buffer_Time |
2 oktety |
Aktualny czas buforowania dźwięku na kontrolerze Bluetooth. Jednostka: ms |
Zdarzenie HCI (specyficzne dla dostawcy)
W niektórych przypadkach wymagane są zdarzenia HCI dotyczące konkretnego dostawcy. Informacje te znajdziesz na stronie 1897 specyfikacji BT Core 5.2 w ramach rysunku 5.4. Parametr zdarzenia 0 będzie zawsze zawierać pierwszy kod podzdarzeniowy, na podstawie którego dekodowana jest reszta zdarzenia HCI.
Parametr zdarzenia | Rozmiar | Cel |
---|---|---|
HCI_vendor_specific_event_code |
1 oktet | 0xFF |
sub_event_code |
1 oktet | Kod podzdarzenia będzie miał rozmiar 1 oktet, czyli 1 bajt, który następuje bezpośrednio po długości parametru w pakiecie zdarzenia HCI. |
Podzdarzenie przekroczenia progu miejsca na dane
To zdarzenie wskazuje, że przekroczono próg miejsca na dane.
Kod podzjawisku = 0x54
Parametr zdarzenia podrzędnego | Rozmiar | Cel |
---|---|---|
Brak |
Zdarzenie podrzędne zmiana stanu w przypadku wielu reklam LE
To zdarzenie wskazuje, że instancja reklamy zmieniła stan. Obecnie to zdarzenie służy tylko do wskazywania, która instancja reklamy została zatrzymana w wyniku połączenia.
Kod podzjawisk = 0x55
Parametr zdarzenia podrzędnego | Rozmiar | Cel |
---|---|---|
Advertising_instance |
1 oktet |
Identyfikuje konkretny przypadek reklamy. Dozwolone wartości to 0– max_advt_instances -1.
|
State_Change_Reason |
1 oktet | 0x00: połączenie zostało odebrane |
Connection_handle |
2 oktety |
Identyfikuje połączenie, które spowodowało wyłączenie instancji advt (0xFFFF, jeśli nieprawidłowe)
|
Podzbiór śledzenia reklamy LE
To zdarzenie wskazuje, kiedy reklamodawca został znaleziony lub utracony.
Kod podrzędnego zdarzenia = 0x56
Parametr zdarzenia podrzędnego | Rozmiar | Cel |
---|---|---|
APCF_Filter_Index |
1 oktet | Indeks filtra (0, max_filter -1) |
Advertiser_State |
1 oktet |
0x00: znaleziono reklamodawcę 0x01: reklamodawca utracony |
Advt_Info_Present |
1 oktet |
0x00: informacje o reklamodawcy (Advt_Info ) są obecne0x01: informacje o reklamodawcy ( Advt_Info ) są nieobecne
|
Advertiser_Address |
6 oktetów | Adres publiczny lub losowy |
Advertiser_Address_Type |
1 oktet |
0x00: adres publiczny 0x01: losowy adres |
Advt_Info |
Tx_Pwr[0] : 1 oktetRSSI[0] : 1 oktetTimestamp[0] : 2 oktetyAdv packet_len[0] : 1 oktetAdv_packet[0] : Adv_packet_len oktetówScan_data_resp_len[0] : 1 oktetScan_data_resp[0] : Scan_data_resp oktetów
|
Podzdarzenie danych debugowania kontrolera
To zdarzenie jest używane przez kontroler do przekazywania hostowi binarnych informacji debugujących.
Kod podzjawisk = 0x57
Parametr zdarzenia podrzędnego | Rozmiar | Cel |
---|---|---|
debug_block_byte_offset_start |
2 oktety | Debugowanie bloku bajtów przesuniętego od początku |
last_block |
1 oktet |
0x00: dostępne są dodatkowe dane debugowania 0x01: ostatni blok binarny; brak dodatkowych danych debugowania |
cur_pay_load_sz |
2 oktety | Rozmiar bloku binarnego w bieżącym zdarzeniu |
Debug_Data |
Zmienna | Dane debugowania dotyczące cur_payload_sz |
Podzdarzenie Bluetooth Quality Report
To zdarzenie wskazuje jedno z tych zdarzeń: wystąpiło zdarzenie dotyczące jakości Bluetooth, kontroler przesłał ślad wiadomości LMP/LL i ślad harmonogramu wielodostępowego Bluetooth/Coex lub kontroler wygenerował dane debugowania.
Kod zdarzenia podrzędnego = 0x58 [Quality_Report_Id = 0x01 ~ 0x04, zdarzenie związane z jakością linku]
Parametr zdarzenia podrzędnego | Rozmiar | Cel |
---|---|---|
Quality_Report_Id |
1 oktet |
0x01: raportowanie jakości w trybie monitorowania. 0x02: LSTO zbliża się do końca. 0x03: dźwięk A2DP przerywany. 0x04: (e)SCO Voice Choppy. 0x05 - 0x06: zarezerwowane. 0x07: LE audio choppy. 0x08: błąd połączenia. 0x09 - 0xFF: zarezerwowane. |
Packet_Types |
1 oktet |
0x01: ID 0x02: NULL 0x03: POLL 0x04: FHS 0x05: HV1 0x06: HV2 0x07: HV3 0x08: DV 0x09: EV3 0x0A: EV4 0x0B: EV5 0x0C: 2-EV3 0x0D: 2-EV5 0x0E: 3-EV3 0x0F: 3-EV5 0x11: DH1 0x12: DM3 0x13: DH3 0x14: DM5 0x15: DH5 0x16: AUX1 0x17: 2-DH1 0x18: 2-DH3 0x19: 2-DH5 0x1A: 3-DH1 0x1B: 3-DH3 0x1C: 3-DH5 0x1D ~ 0x50: Reserved 0x51: Pakiet ISO 0x52 ~ 0xFF: Reserved |
Connection_Handle |
2 oktety | Identyfikator połączenia ACL/(e)SCO/ISO. |
Connection_Role |
1 oktet |
Rola w ramach połączenia. 0x00: centralna 0x01: peryferyjna 0x02 - 0xFF: zarezerwowana. |
TX_Power_Level |
1 oktet |
Bieżący poziom mocy nadawania dla określonego obiektu Connection_Handle.
Ta wartość powinna być taka sama jak wartość zwrócona przez kontroler w odpowiedzi na polecenie HCI HCI_Read_Transmit_Power_Level. |
RSSI |
1 oktet |
[w dBm]
Wartość wskaźnika siły odbieranego sygnału (RSSI) dla określonego identyfikatora Connection_Handle. |
SNR |
1 oktet |
[w dB]
Wartość stosunku sygnału do szumu (SNR) dla określonego parametru Connection_Handle. |
Unused_AFH_Channel_Count |
1 oktet |
Wskazuje liczbę nieużywanych kanałów w tabeli AFH_channel_map. 0x4F - 0xFF: zarezerwowane. |
AFH_Select_Unideal_Channel_Count |
1 oktet |
Wskazuje liczbę kanałów, które są zakłócane i mają niską jakość, ale są nadal wybrane do automatycznego przełączania kanałów. Minimalna liczba kanałów dozwolonych przez specyfikację Bluetooth wynosi 20, więc nawet jeśli wszystkie 79 kanałów jest zakłóconych i ma niską jakość, kontroler musi wybrać co najmniej 20 kanałów do obsługi AFH. |
LSTO |
2 oktety |
Aktualne ustawienie czasu oczekiwania w nadzorze połączeń. Czas = N * 0,625 ms Zakres czasowy: od 0,625 ms do 40,9 s |
Connection_Piconet_Clock |
4 oktety |
Zegar Piconet dla określonego obiektu Connection_Handle. Ta wartość powinna być taka sama jak wartość zwrócona przez kontroler w odpowiedzi na polecenie HCI HCI_Read_Clock z parametrem „Which_Clock” o wartości 0x01 (zegar Piconet). Jednostka: N * 0,3125 ms (1 zegar Bluetooth) |
Retransmission_Count |
4 oktety |
Liczba retransmisji od ostatniego zdarzenia. Po zgłoszeniu problemu do gospodarza liczba ta zostanie zresetowana. |
No_RX_Count |
4 oktety |
Brak liczby RX od ostatniego zdarzenia. Liczba zwiększa się, gdy w zaplanowanym czasie nie zostanie odebrany żaden pakiet lub gdy odebrany pakiet jest uszkodzony. Po zgłoszeniu problemu do gospodarza liczba ta zostanie zresetowana. |
NAK_Count |
4 oktety |
Liczba NAK (Negative Acknowledge) od ostatniego zdarzenia. Po zgłoszeniu problemu do gospodarza liczba ta zostanie zresetowana. |
Last_TX_ACK_Timestamp |
4 oktety |
Sygnatura czasowa ostatniego potwierdzenia TX. Jest ona oparta na zegarze Bluetooth w centrali piconet (CLK). Jednostka: N * 0,3125 ms (1 zegar Bluetooth) |
Flow_Off_Count |
4 oktety |
Liczba razy, gdy kontroler otrzymał sygnał Flow-off (STOP) od ostatniego zdarzenia. Po zgłoszeniu problemu do gospodarza liczba ta zostanie zresetowana. |
Last_Flow_On_Timestamp |
4 oktety |
Sygnatura czasowa ostatniego Flow-on (GO). Jest ona oparta na zegarze Bluetooth centrali piconet (CLK). Jednostka: N * 0,3125 ms (1 zegar Bluetooth) |
Buffer_Overflow_Bytes |
4 oktety |
[w Byte]
Liczba przepełnień bufora od ostatniego zdarzenia. |
Buffer_Underflow_Bytes |
4 oktety |
[w Byte]
Liczba przypadków przepełnienia bufora od ostatniego zdarzenia. |
bdaddr |
6 oktetów | Adres urządzenia zdalnego |
cal_failed_item_count |
1 oktet | Liczba elementów, których kalibracja się nie udała |
TX_Total_Packets |
4 oktety | Liczba wysłanych pakietów. |
TX_UnAcked_Packets |
4 oktety |
Liczba pakietów, które nie otrzymują potwierdzenia. Liczba ta jest resetowana po zgłoszeniu do gospodarza. |
TX_Flushed_Packets |
4 oktety |
Liczba pakietów, które nie zostały wysłane w punkcie wyrównania. Liczba ta jest resetowana po zgłoszeniu do gospodarza. |
TX_Last_Subevent_Packets |
4 oktety |
Liczba pakietów, które Link Layer przesyła w ramach PDU danych CIS w ostatnim podzdarzeniu zdarzenia CIS. Liczba ta jest resetowana po zgłoszeniu do gospodarza. Jeśli link nie ma prawidłowej wartości, jego wartość wynosi 0. |
CRC_Error_Packets |
4 oktety |
Liczba otrzymanych pakietów z błędem CRC od ostatniego zdarzenia. Liczba ta jest resetowana po zgłoszeniu do gospodarza. |
RX_Duplicate_Packets |
4 oktety |
Liczba zduplikowanych (przesyłanych ponownie) pakietów otrzymanych od ostatniego zdarzenia. Liczba ta jest resetowana po zgłoszeniu do gospodarza. |
RX_Unreceived_Packets |
4 oktety |
Liczba nieotrzymanych pakietów jest taka sama jak parametr polecenia LE READ ISO Link Quality (patrz specyfikacja Bluetooth Core w wersji 5.4). Powiązane strumienie to CIS i BIS. Gdy ta wartość jest zwiększana, warstwa łącząca nie otrzymuje określonego ładunku danych w miejscu dopasowania (w przypadku CIS) ani na końcu zdarzenia, z którym jest powiązana (w przypadku BIS; patrz podstawowa specyfikacja Bluetooth w wersji 5.4 tom 6 część B, sekcja 4.4.6.6). |
Coex_Info_Mask |
2 oktety |
Bit 0 – CoexInvolvement: ustaw, aby wskazać, że podczas generowania tego raportu podejrzewasz, że są w nim uwzględnione działania związane z coex (np. A2DP Chops i Approaching LSTO). Bit 1 – WL 2G Radio Active: ustaw, aby wskazać, że radio 2G WLAN jest aktywne. Bit 2 – WL 2G Connected (Łączność z siecią 2G): ustawiony, aby wskazać, że radio 2G WLAN jest aktywne i połączone. Bit 3 – Aktywna sieć radiowa 5G/6G: ustaw, aby wskazać, że sieć radiowa 5G/6G jest aktywna. Bity 4–15 – zarezerwowane |
Parametr dostawcy | (łączna długość parametru – TBD) * oktety | dostawca kontrolera, aby uzyskać więcej parametrów specyficznych dla dostawcy; |
Kod zdarzenia podrzędnego = 0x58 [Quality_Report_Id = 0x05, zdarzenie Root Inflammation]
To zdarzenie wskazuje, że interfejs HAL Bluetooth lub kontroler napotkał błąd krytyczny i potrzebuje modułu Bluetooth, aby zarejestrować tę sytuację i ponowić uruchomienie. W każdym przypadku kontroler musi wysłać do stosu Bluetooth zdarzenie Root_Inflammation_Event, zanim wyśle pierwszy fragment zdarzeń z informacjami debugowania.
Parametr Error_Code zawiera kod błędu zgłoszony przez HAL/Controller, 0, jeśli jest to błąd specyficzny dla dostawcy chipsetu. Parametr Vendor_Specific_Error_Code zawiera kod błędu dostawcy układu pochodzący z HAL/Controller. Jeśli parametr Error_Code nie ma wartości 0, powinien mieć wartość 0. Parametry Error_Code i Vendor_Specific_Error_Code nie mogą mieć obu wartości 0.
Parametr zdarzenia podrzędnego | Rozmiar | Cel |
---|---|---|
Quality_Report_Id |
1 oktet |
0x00 - 0x04: Zarezerwowane. 0x05: stan zapalny korzenia. 0x06 - 0xFF: zarezerwowane. |
Error_Code |
1 oktet |
0x00: zawiera kod błędu specyficzny dla dostawcy zestawu scalonego. 0x01 do 0xFF: wystąpiła awaria kontrolera. Aby uzyskać listę kodów błędów i ich opisów, zapoznaj się ze specyfikacją Bluetooth [Tom 2], część D, „Kody błędów”. |
Vendor_Specific_Error_Code |
1 oktet |
0x00: nie ma kodu błędu konkretnego dla dostawcy chipsetu. 0x01 do 0xFF: kod błędu specyficzny dla dostawcy chipsetu. |
Parametr dostawcy | (łączna długość parametru – 4) * oktety | dostawca kontrolera, aby uzyskać więcej parametrów specyficznych dla dostawcy; |
Kod zdarzenia podrzędnego = 0x58 [Quality_Report_Id = 0x11 ~ 0x13, zdarzenie powiązane z zrzutem dzienników]
Parametr zdarzenia podrzędnego | Rozmiar | Cel |
---|---|---|
Quality_Report_Id |
1 oktet |
0x00 - 0x10: zastrzeżone. 0x11: ślad wiadomości LMP/LL. 0x12: śledzenie harmonogramu Bluetooth Multi-link/Coex. 0x13: zrzut danych Informacje debugowania kontrolera. 0x14 - 0xFF: zarezerwowane. |
Connection_Handle |
2 oktety | Identyfikator połączenia. |
Parametr dostawcy | (łączna długość parametru – 4) * oktety | Format specyficzny dla dostawcy śladu wiadomości LMP, śladu planowania Bluetooth Multi-link/Coex oraz zrzutu danych z informacjami debugowania kontrolera. |
Podzdarzenie Opinia na temat linku ISO
Kod zdarzenia podrzędnego = 0x5C
Gdy to zdarzenie jest aktywne, musi być generowane w każdym interwale ISO.
Aktywacja
Aktywacja odbywa się przez wybranie kodu dostawcyData_Path_ID
0x19
w poleceniu standardowym HCI_LE_Setup_ISO_Data_Path
.
Polecenie HCI_Configure_Data_Path
z wartością Data_Path_ID
0x19
i wartością Vendor_Specific_Config_Length
0
musi zostać zaakceptowane, nawet jeśli po otrzymaniu tego polecenia nie jest wymagane żadne działanie ze strony kontrolera.
Punkt wysyłki
Zdarzenie jest emitowane od początku przedziału ISO (punktu kotwicznego CIG lub BIG) do następnego przedziału ISO. Kontroler wskazuje opóźnienie w odniesieniu do efektywnego rozpoczęcia interwału ISO za pomocą wartościAnchor_Point_Delay
.
Synchronizacja kontrolera
Na początku przedziału ISO kontroler oblicza SN strumienia, zwiększając bieżącą wartość o skonfigurowaną wartośćISO_Interval ÷ SDU_Interval
; w pierwszym interwale jest ona inicjowana na 0.Następnie w przypadku każdego pakietu w kolejce ISO FIFO obowiązują następujące zasady:
-
Kontroler oblicza różnicę opakowania SNdiff między 2 numerami sekwencji:
SNdiff = (SDUSN - StreamSN + 0x10000) mod 0x10000
- Gdy
(SNdiff + (FT-1) × ISO_Interval ÷ SDU_Interval) mod 0x10000 <= (FT-1) × ISO_Interval ÷ SDU_Interval
:
pakiet znajduje się w oknie ponownej transmisji. Powinna być zaplanowana do przesyłania w poprzednich odstępach czasu i jest teraz dostępna do ponownego przesyłania. Jeśli tak nie jest (nie została zaplanowana transmisja), oznacza to, że otrzymała się ona zbyt późno. Należy to zgłosić gospodarzowi za pomocą parametruIn_Status
. Takie pakiety można odrzucić lub zaplanować do transmisji; wybór zależy od implementacji. - Albo gdy
SNdiff < ISO_Interval ÷ SDU_Interval
:
pakiet jest zaplanowany do przesłania z tego zdarzenia do momentu wystąpienia limitu czasu czyszczenia. - Lub gdy
SNdiff >= ISO_Interval ÷ SDU_Interval
iSNdiff <= Max_Forward_Buffers
:
Pakiet jest w przyszłości; zostanie przesłany w następnym zdarzeniu. Ponieważ pakiety są wysyłane w kolejności, ta reguła kończy wyszukiwanie pakietów w tym przedziale czasu.
Bufory używane przez hosta nie są przekazywane kontrolerowi, ale są ograniczone do:Max_Forward_Buffers = 16
. - Albo gdy nie jest spełniony żaden z wymienionych powyżej warunków:
pakiet jest odrzucany, osiągnięto limit czasu spłukiwania lub odebrano pakiet o nieprawidłowym formacie.
Parametr zdarzenia podrzędnego | Rozmiar | Cel |
---|---|---|
Connection_Handle |
2 oktety |
Identyfikator połączenia CIS lub BIS Zakres: 0x0000–0x0EFF |
Sequence_Number |
2 oktety |
Numer sekwencji strumienia zarządzanego przez kontroler. Wartość inicjowana na 0 podczas tworzenia CIS lub BIS, a następnie zwiększana o liczbę SDUs w interwale między ISO zdefiniowanym jako ISO_interval ÷ SDU_Interval w każdym interwale ISO.
|
Anchor_Point_Delay |
2 oktety |
Opóźnienie w mikrosekundach między wygenerowaniem zdarzenia a punktem kotwicznym BIG lub CIG albo początkiem interwału ISO.
Skuteczna sygnatura czasowa punktu kotwiczenia jest określana przez:Event generation time - Anchor_Point_Delay
Zakres: od 0 do interwału ISO w mikrosekundach |
In_Status |
2 oktety |
Stan bufora ISO kontrolera Na początku interwału ISO każdy bit bi jest ustawiony, gdy dostępny jest SDU (Sequence_Number + i) mod 0x10000 . Jeśli nie jest dostępny, SDU jest oznaczony jako Not received from the host .Wartość i może przyjmować wartości od 0 do ISO_Interval ÷ SDU_Interval - 1 .
W przypadku innych wartości parametru i bity są ustawione na 0.
|
Tx_Status |
2 oktety |
Stan transmisji w stosunku do SDUs z numerami sekwencji:(Sequence_Number - Flush_Timeout × ISO_Interval ÷ SDU_Interval + i + 0x10000)
mod 0x10000
Każdy bit bi jest ustawiony, gdy wszystkie PDUs zidentyfikowanego SDU zostały pomyślnie przesłane i potwierdzone za pomocą numeru sekwencji. Wartość i może przyjmować wartości od 0 do ISO_Interval ÷ SDU_Interval - 1 .
W przypadku innych wartości parametru i bity są ustawione na 0.W przypadku grupy transmisji zawsze musi nastąpić potwierdzenie transmisji. |
Obsługa wielu reklamodawców
Cele obsługi wielu reklamodawców:
-
Obsługa wielu reklam (
max_advt_instances
) - różne moce nadawania, aby zapewnić różny zasięg;
- różne treści reklamowe.
- Indywidualne odpowiedzi dla każdego reklamodawcy
- Prywatność (nieśledzona) dla każdego reklamodawcy
- Łączenie
Aby zachować tę specyfikację w pobliżu istniejących standardów, podajemy te polecenia: Są one oparte na specyfikacji Bluetooth Core 4.1.
LE_Multi_Advt_Command
OCF: 0x154
Parametr polecenia | Rozmiar | Cel |
---|---|---|
Multi_advt_opcode |
1 oktet |
0x01 – Set_Advt_Param_Multi_Sub_Cmd 0x02 – Set_Advt_Data_Multi_Sub_Cmd 0x03 – Set_Scan_Resp_Data_Multi_Sub_Cmd 0x04 – Set_Random_Addr_Multi_Sub_Cmd 0x05 – Set_Advt_Enable_Multi_Sub_Cmd
|
W przypadku tego polecenia zostanie wygenerowane zdarzenie „Command Complete”.
Parametr zwracania | Rozmiar | Cel |
---|---|---|
Status |
1 oktet | Stan „Command Complete” |
Multi_advt_opcode |
1 oktet |
0x01 – Set_Advt_Param_Multi_Command 0x02 – Set_Advt_Data_Multi_Command 0x03 – Set_Scan_Resp_Data_Multi_Command 0x04 – Set_Random_Addr_Multi_Command 0x05 – Set_Advt_Enable_Multi_Command
|
LE_Multi_Advt_Command: Set_Advt_Param_Multi_Sub_Cmd
Podstawowe źródło: specyfikacja Bluetooth Core 4.1, strona 964 (polecenie parametru reklamy LE Set)
Sub OCF: 0x01
Parametr podrzędnego polecenia | Rozmiar | Cel |
---|---|---|
Advertising_Interval_Min |
Specyfikacja | Specyfikacja |
Advertising_Interval_Max |
Specyfikacja | Specyfikacja |
Advertising_Type |
Specyfikacja | Specyfikacja |
Own_Address_Type |
Specyfikacja | Specyfikacja |
Own_Address |
Specyfikacja | Specyfikacja |
Direct_Address_Type |
Specyfikacja | Specyfikacja |
Direct_Address |
Specyfikacja | Specyfikacja |
Advertising_Channel_Map |
Specyfikacja | Specyfikacja |
Adverstising_Filter_Policy |
Specyfikacja | Specyfikacja |
Advertising_Instance |
1 oktet | Określa zastosowanie powyższych parametrów w przypadku instancji |
Tx_power |
1 oktet |
Transmit_Power Jednostka – dBm (sygnałowa liczba całkowita) Zakres (od –70 do +20) |
Parametr Own_Address
może być adresem skonfigurowanym przez hosta w momencie konfigurowania tej instancji z wieloma reklamami. Umożliwia to posiadanie adresu prywatnego, który można rozwiązać w momencie przesyłania pierwszego sygnału beacon. Reklamy na instancji będą nadal wyświetlane niezależnie od połączenia. Host BT może wydać polecenie rozpoczęcia reklamy w instancji po połączeniu.
W związku z tym poleceniem zostanie wygenerowane zdarzenie „Command Complete” zgodnie ze specyfikacją Bluetooth Core 4.1, jak określono w powyższym poleceniu. Jeśli instancja reklamy lub parametry Tx_Power
są nieprawidłowe, kontroler odpowie kodem niepowodzenia (nieprawidłowy parametr).
Parametr zwracania | Rozmiar | Cel |
---|---|---|
Status |
1 oktet | Stan „Command Complete” |
Multi_advt_opcode |
1 oktet | 0x01 [Set_Advt_Param_Multi_Sub_Cmd] |
LE_Multi_Advt_Command: Set_Advt_Data_Multi_Sub_Cmd
Podstawowe źródło: specyfikacja Bluetooth Core 4.1, strona 969 (polecenie danych reklamowych LE Set)
Sub OCF: 0x02
Parametr podrzędnego polecenia | Rozmiar | Cel |
---|---|---|
Advertising_Data_Length |
Specyfikacja | Specyfikacja |
Advertising_Data |
Specyfikacja | Specyfikacja |
Advertising_Instance |
1 oktet | Określa zastosowanie powyższych parametrów w przypadku instancji |
W związku z tym poleceniem zostanie wygenerowane zdarzenie „Command Complete” zgodnie ze specyfikacją Bluetooth Core 4.1, jak określono w powyższym poleceniu. Jeśli instancja reklamy lub parametry Tx_Power
są nieprawidłowe, kontroler odpowie kodem niepowodzenia.
Parametr zwracania | Rozmiar | Cel |
---|---|---|
Status |
1 oktet | Stan „Command Complete” |
Multi_advt_opcode |
1 oktet | 0x02 [Set_Advt_Data_Multi_Sub_Cmd] |
LE_Multi_Advt_Command: Set_Scan_Resp_Data_Multi_Sub_Cmd
Podstawowe źródło odniesienia: specyfikacja Bluetooth Core 4.1, strona 970 (polecenie danych odpowiedzi LE Set Scan)
Sub OCF: 0x03
Parametr podrzędnego polecenia | Rozmiar | Cel |
---|---|---|
Scan_Response_Data_Length |
Specyfikacja | Specyfikacja |
Scan_Response_Data |
Specyfikacja | Specyfikacja |
Advertising_Instance |
1 oktet | Określa zastosowanie powyższych parametrów w przypadku instancji |
W związku z tym poleceniem zostanie wygenerowane zdarzenie „Command Complete” zgodnie ze specyfikacją Bluetooth Core 4.1, jak określono w powyższym poleceniu. Jeśli instancja reklamy lub parametry Tx_Power
są nieprawidłowe, kontroler odpowie kodem niepowodzenia (nieprawidłowy parametr).
Parametr zwracania | Rozmiar | Cel |
---|---|---|
Status |
1 oktet | Stan „Command Complete” |
Multi_advt_opcode |
1 oktet | 0x03 [Set_Scan_Resp_Data_Multi_Sub_Cmd] |
LE_Multi_Advt_Command: Set_Random_Addr_Multi_Sub_Cmd
Podstawowe źródło: specyfikacja Bluetooth Core 4.1, strona 963 (polecenie LE Set Random Address).
Sub OCF: 0x04
Parametr podrzędnego polecenia | Rozmiar | Cel |
---|---|---|
Adres losowy | Specyfikacja | Specyfikacja |
Advertising_Instance |
1 oktet | Określa zastosowanie powyższych parametrów w przypadku instancji |
W przypadku tego polecenia zostanie wygenerowane zdarzenie „Command Complete”.
Parametr zwracania | Rozmiar | Cel |
---|---|---|
Status |
1 oktet | Stan „Command Complete” |
Multi_advt_opcode |
1 oktet | 0x04 [Set_Random_Addr_Multi_Sub_Cmd] |
LE_Multi_Advt_Command: Set_Advt_Enable_Multi_Sub_Cmd
Podstawowe źródło: specyfikacja Bluetooth Core 4.1, strona 971 (polecenie LE Set Advertise Enable w tej specyfikacji podstawowej)
OCF: 0x05
Parametr podrzędnego polecenia | Rozmiar | Cel |
---|---|---|
Advertising_Enable |
1 oktet | Wartość 1 oznacza włączenie. Każda inna wartość oznacza wyłączenie. |
Advertising_Instance |
1 oktet | Określa zastosowanie powyższych parametrów w przypadku instancji. Instancja 0 to standardowa instancja HCI. |
W przypadku tego polecenia zostanie wygenerowane zdarzenie „Command Complete”.
Parametr zwracania | Rozmiar | Cel |
---|---|---|
Status |
1 oktet | Stan „Command Complete” |
Multi_advt_opcode |
1 oktet | 0x05 [Set_Advt_Enable_Multi_Sub_Cmd] |
Przeniesienie przetwarzania przetwarzania adresu prywatnego
Ta funkcja rozwiązuje adres prywatny w oprogramowaniu układu sterującego lub w sprzęcie, co zapewnia następujące korzyści:
- Opóźnienie związane z rozwiązywaniem adresu prywatnego przez hosta
- oszczędzanie energii przez niebudzenie gospodarza;
LE_Set_RPA_Timeout
OCF: 0x15C
Parametr polecenia | Rozmiar | Cel |
---|---|---|
LE_local_IRK |
16 oktetów | IRK urządzenia lokalnego użyty do wygenerowania losowych adresów możliwych do rozwiązania. |
tRPA_min |
2 oktety |
Minimalny limit czasu generowania RPA w sekundach. Po upływie tego czasu kontroler musi generować nowe adresy, które można rozwiązać, w przypadku wszelkich zdarzeń związanych z reklamą, skanowaniem lub połączeniem. Dozwolony zakres: 300–1800 |
tRPA_max |
2 oktety |
Maksymalny czas oczekiwania na wygenerowanie RPA (w sekundach). Kontroler musi wygenerować nowe adresy rozwiązywalne dla wszystkich zdarzeń reklamowych/skanowania/łączenia przed upływem tego limitu czasu lub przed jego przekroczeniem. Zakres prawidłowy: tRPA_min -1800
|
Parametr zwracania | Rozmiar | Cel |
---|---|---|
Status |
1 oktet |
Stan polecenia. Sugerowane wartości stanu HCI: 0x00 Sukces 0x01 Nieznany polecenie (jeśli nie jest obsługiwane) 0x12 Nieprawidłowe parametry polecenia (jeśli którykolwiek z nich wykracza poza podany zakres) |
LE_RPA_offload_Command
OCF: 0x155
Parametr polecenia | Rozmiar | Cel |
---|---|---|
RPA_offload_opcode |
1 oktet |
0x1 – Włączanie funkcji dla konkretnego klienta 0x2 – Dodawanie IRK do listy 0x3 – Usuwanie IRK z listy 0x4 – Czyszczenie listy IRK 0x5 – Czytanie pozycji na liście IRK |
W przypadku tego polecenia zostanie wygenerowane zdarzenie „Command Complete”.
Parametr zwracania | Rozmiar | Cel |
---|---|---|
Status |
1 oktet | Stan „Command Complete” |
Event_RPA_offload_opcode |
1 oktet |
0x1 – Włączanie funkcji dla konkretnego klienta 0x2 – Dodawanie IRK do listy 0x3 – Usuwanie IRK z listy 0x4 – Czyszczenie listy IRK 0x5 – Czytanie pozycji na liście IRK |
LE_RPA_offload: Enable_cust_specific_sub_Command
Sub OCF: 0x01
Parametr podrzędnego polecenia | Rozmiar | Cel |
---|---|---|
enable_customer_specific_feature_set |
1 oktet |
0x01 – włączenie funkcji RPA z odciążeniem 0x00 – wyłączenie funkcji RPA z odciążeniem |
Host musi włączyć przenoszenie RPA na podstawie możliwości chipa. Zapoznaj się z artykułem LE_Get_Vendor_Capabilities_Command
.
Każdy układ może mieć inny max_irk_list_sz
w oprogramowaniu układowym.
W przypadku tego polecenia zostanie wygenerowane zdarzenie „Command Complete”.
Parametr zwracania | Rozmiar | Cel |
---|---|---|
Status |
1 oktet | Stan „Command Complete” |
Event_cust_specific_feature_opcode |
1 oktet | 0x01 [Enable customer-specific feature] |
LE_RPA_offload: Add_IRK_to_list_sub_Command
Sub OCF: 0x02
Parametr podrzędnego polecenia | Rozmiar | Cel |
---|---|---|
LE_IRK |
16 oktetów | LE IRK (1. bajt MSB) |
Address_Type |
1 oktet |
0: Adres publiczny 1: Losowy adres |
LE_Device_Address |
6 oktetów | Publiczny lub losowy adres powiązany z IRK (1. bajt LSB) |
W przypadku tego polecenia zostanie wygenerowane zdarzenie „Command Complete”.
Parametr zwracania | Rozmiar | Cel |
---|---|---|
Status |
1 oktet | Stan „Command Complete” |
Event_cust_specific_feature_opcode |
1 oktet | 0x02 [Add IRK to the list] |
LE_IrkList_AvailableSpaces |
1 oktet | Dostępne wpisy listy IRL po bieżącej operacji |
LE_RPA_offload: Remove_IRK_to_list_sub_Command
Sub OCF: 0x03
Parametr podrzędnego polecenia | Rozmiar | Cel |
---|---|---|
Address_Type |
1 oktet |
0: Adres publiczny 1: Losowy adres |
LE_Device_Address |
6 oktetów | Publiczny lub losowy adres, który łączy się z adresem IRK |
W przypadku tego polecenia zostanie wygenerowane zdarzenie „Command Complete”.
Parametr zwracania | Rozmiar | Cel |
---|---|---|
Status |
1 oktet | Stan „Command Complete” |
Event_cust_specific_feature_opcode |
1 oktet | 0x03 [Remove IRK from the list] |
LE_IrkList_AvailableSpaces |
1 oktet | Dostępne wpisy listy IRL po bieżącej operacji |
LE_RPA_offload: Clear_IRK_list_sub_Command
Sub OCF: 0x04
Parametr podrzędnego polecenia | Rozmiar | Cel |
---|---|---|
Brak |
W przypadku tego polecenia zostanie wygenerowane zdarzenie „Command Complete”.
Parametr zwracania | Rozmiar | Cel |
---|---|---|
Status |
1 oktet | Stan „Command Complete” |
Event_cust_specific_feature_opcode |
1 oktet | 0x04 [Wyczyść listę IRK] |
LE_IrkList_AvailableSpaces |
1 oktet |
Dostępne pozycje listy IRL po bieżącej operacji [max_irk_list_sz]
|
LE_RPA_offload: Read_IRK_list_sub_Command
Sub OCF: 0x05
Parametr podrzędnego polecenia | Rozmiar | Cel |
---|---|---|
LE_read_IRK_list_entry-index |
1 oktet | Indeks listy IRK [0, max_irk_list_sz-1] |
W przypadku tego polecenia zostanie wygenerowane zdarzenie „Command Complete”.
Parametr zwracania | Rozmiar | Cel |
---|---|---|
Status |
1 oktet | Stan „Command Complete” |
Event_cust_specific_feature_opcode |
1 oktet | 0x05 [Read IRK List Entry] |
LE_Read_IRK_List_entry |
1 oktet | Indeks IRK, który host chce odczytać (maksymalna liczba IRK na liście to 32) |
LE_IRK |
16 oktetów | Wartość IRK |
Address_Type |
1 oktet |
0: Adres publiczny 1: Losowy adres |
LE_Device_Address |
6 oktetów | Publiczny lub losowy adres powiązany z IRK |
LE_Resolved_Private_Address |
6 oktetów | Aktualny rozwiązany adres prywatny tego IRK |