Interfejs kontrolera hosta (HCI) służy do interakcji z kontrolerem Bluetooth.
Ten dokument zawiera listę wymagań dotyczących interfejsu HCI Bluetooth (BT) i Bluetooth Low Energy (BLE). Chodzi o to, aby dostawcy stosu hosta Bluetooth i kontrolera Bluetooth spełniali te wymagania platformy, aby móc 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.
Ogólne omówienie projektu
Możliwości i konfiguracja chipa
Android to otwarta platforma, która obejmuje wiele wersji oprogramowania, producentów OEM, dostawców oraz funkcji platformy i chipów.
Aby zarządzać różnorodnością urządzeń i migracjami, w tym dokumencie opisano filozofię projektowania, która pozwala kontrolerom Bluetooth udostępniać swoje możliwości (wykraczające poza standardową specyfikację Bluetooth Core 5.2). Stos BT hosta może następnie wykorzystać te możliwości do określenia, które funkcje należy włączyć.
obsługiwać otwarte standardy,
Jednym z celów Androida jest obsługa otwartych standardów po ratyfikacji w specyfikacji Bluetooth. Jeśli opisana poniżej funkcja stanie się dostępna w standardowych metodach HCI w przyszłej specyfikacji Bluetooth, będziemy dążyć do tego, aby to podejście stało się domyślne.
Funkcje specyficzne dla dostawcy
Polecenie specyficzne dla dostawcy: LE_Get_Vendor_Capabilities_Command
Pole polecenia kodu operacji (OCF): 0x153
| Parametr polecenia | Rozmiar | Cel |
|---|---|---|
| Nie dotyczy | Pusta lista parametrów polecenia |
W przypadku tego polecenia zostanie wygenerowane zdarzenie Command Complete (Polecenie ukończone).
| Parametr zwracany | Rozmiar | Cel |
|---|---|---|
Status |
1 oktet | Stan polecenia zakończonego |
max_advt_instances(Wycofano) |
1 oktet |
Liczba obsługiwanych instancji reklam. Zarezerwowane po wersji 0.98. Ten parametr jest wycofywany w specyfikacji funkcji Google w wersji 0.98 i nowszych na rzecz rozgłaszania rozszerzonego LE dostępnego w specyfikacji BT w wersji 5.0 i nowszych. |
offloaded_resolution_of_private-address(Wycofano) |
1 oktet |
Możliwości układu BT w RPA. Jeśli jest obsługiwany przez chip, musi zostać włączony przez hosta. 0 = Nieobsługiwane 1 = Obsługiwane Zarezerwowane po wersji 0.98. Ten parametr został wycofany w specyfikacji funkcji Google w wersji 0.98 i nowszych na rzecz funkcji ochrony prywatności dostępnej w specyfikacji BT w wersji 4.2 i nowszych. |
total_scan_results_storage |
2 oktety | Miejsce na dane na wyniki skanowania w bajtach |
max_irk_list_sz |
1 oktet | Liczba wpisów IRK obsługiwanych przez oprogramowanie sprzętowe |
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 = nie obsługuje 1 = obsługuje |
version_supported |
2 oktety |
Określa wersję specyfikacji funkcji Google, która jest obsługiwana. byte[0] = numer główny byte[1] = numer dodatkowy v1.06 byte[0] = 0x01 byte[1] = 0x06 Funkcje dodane w tych wersjach: v1.06:
|
total_num_of_advt_tracked |
2 oktety |
Łączna liczba reklamodawców, których śledzimy na potrzeby OnLost/OnFound
|
extended_scan_support |
1 oktet | Obsługa rozszerzonego okna i interwału skanowania |
debug_logging_supported |
1 oktet | Obsługa rejestrowania binarnych informacji debugowania z kontrolera |
LE_address_generation_offloading_support(Wycofano) |
1 oktet |
0 = Nieobsługiwane 1 = Obsługiwane Zarezerwowane po wersji 0.98. Ten parametr został wycofany w specyfikacji funkcji Google w wersji 0.98 i nowszych na rzecz funkcji ochrony prywatności dostępnej w specyfikacji BT w wersji 4.2 i nowszych. |
A2DP_source_offload_capability_mask |
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 Bit 5 – Opus Bity 6–31 są zarezerwowane |
bluetooth_quality_report_support |
1 oktet |
Obsługuje raportowanie zdarzeń związanych z jakością Bluetooth 0 = nie obsługuje 1 = obsługuje |
dynamic_audio_buffer_support |
4 oktety |
Obsługuje dynamiczny bufor audio w kontrolerze Bluetooth Maski bitowe obsługiwanych typów kodeków Bit 0 – SBC Bit 1 – AAC Bit 2 – APTX Bit 3 – APTX HD Bit 4 – LDAC Bit 5 – Opus Bity 6–31 są zarezerwowane |
a2dp_offload_v2_support |
1 oktet |
Obsługuje polecenia odciążania A2DP w wersji 2 w kontrolerze Bluetooth (patrz Start A2DP offload, Stop A2DP offload). 0 = nieobsługiwane 1 = obsługiwane |
iso_link_feedback_support |
1 oktet |
Obsługuje zdarzenie ISO Link Feedback. 0 = Nieobsługiwane 1 = Obsługiwane |
sniff_offload_support |
1 oktet |
Obsługuje polecenia Sniff Offload w kontrolerze Bluetooth 0 = Nieobsługiwane 1 = Obsługiwane |
big_set_channel_map_classification_support |
2 oktety |
Obsługuje kod podrzędny funkcji klasyfikacji mapy kanałów transmisji LE. Bit 0 – obsługuje kod podrzędny 0x01 (ustawianie mapy kanałów BIG za pomocą uchwytów połączeń LE ACL). Bity 1–15 – zarezerwowane. Wartość bitu: 0 0 = nieobsługiwane 1 = obsługiwane |
vendor_connection_handle_min |
2 oktety | Raportowanie minimalnej wartości uchwytów połączenia dostawcy w przypadku zdarzeń dostawcy HCI otrzymanych w pakietach ACL. Uchwyt 0 oznacza brak obsługi raportowania zdarzeń dostawcy za pomocą pakietów danych ACL. |
vendor_connection_handle_max |
2 oktety | Zgłaszaj maksymalną wartość uchwytów połączeń dostawców w przypadku zdarzeń dostawców HCI otrzymywanych w pakietach ACL. Uchwyt 0 oznacza brak obsługi raportowania zdarzeń dostawcy za pomocą pakietów danych ACL. |
connection_proximity_threshold_support |
1 oktet |
Określa, czy układ obsługuje próg bliskości połączenia. 0 = Nieobsługiwane 1 = Obsługiwane |
Wyniki skanowania wsadowego
Celem jest ulepszenie sposobu dostarczania do hosta powiadomień o zdarzeniu odpowiedzi skanowania Bluetooth LE, aby oszczędzać energię na hoście.
Dzięki zmniejszeniu częstotliwości powiadamiania przez kontroler procesora aplikacji hosta o wynikach skanowania procesor aplikacji hosta może dłużej pozostawać w stanie bezczynności lub uśpienia. Zmniejsza to zużycie energii na hoście. Parametr return total_scan_results_storage w LE_Get_Vendor_Capabilities_Command wskazuje możliwość przechowywania wyników skanowania przez chip.
Ta funkcja koncentruje się na zarządzaniu i konfigurowaniu miejsca na wyniki skanowania LE w kontrolerze Bluetooth. Pamięć służy do tymczasowego grupowania danych reklamowych oraz skanowania danych i metadanych otrzymywanych przez kontroler w celu późniejszego przekazania ich do hosta.
Oprogramowanie sprzętowe musi obsługiwać 2 rodzaje przetwarzania wsadowego, które mogą być używane 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 specyficznej dla klienta 0x2 – ustawianie parametrów przechowywania skanowania wsadowego 0x3 – ustawianie parametrów skanowania wsadowego 0x4 – odczytywanie parametrów wyników skanowania wsadowego |
W przypadku tego polecenia zostanie wygenerowane zdarzenie Command Complete (Polecenie ukończone). Włączenie funkcji dla konkretnego klienta nie rozpoczyna skanowania.
| Parametr zwracany | Rozmiar | Cel |
|---|---|---|
Status |
1 oktet | Stan polecenia zakończonego |
Batch_Scan_opcode |
1 oktet |
0x1 – włączanie funkcji specyficznej dla klienta 0x2 – ustawianie parametrów przechowywania skanowania wsadowego 0x3 – ustawianie parametrów skanowania wsadowego 0x4 – odczytywanie parametrów wyników skanowania wsadowego |
LE_Batch_Scan_Command: Enable customer-specific feature
Sub OCF: 0x01
| Parametr podpolecenia | Rozmiar | Cel |
|---|---|---|
enable_customer_specific_feature_set |
1 oktet |
0x01 – włącz funkcję skanowania wsadowego 0x00 – wyłącz funkcję skanowania wsadowego |
W przypadku tego polecenia zostanie wygenerowane zdarzenie Command Complete (Polecenie ukończone).
| Parametr zwracany | Rozmiar | Cel |
|---|---|---|
Status |
1 oktet | Stan polecenia zakończonego |
Batch_Scan_opcode |
1 oktet |
0x1 – włączanie funkcji specyficznej dla klienta 0x2 – ustawianie parametrów przechowywania skanowania wsadowego 0x3 – ustawianie parametrów skanowania wsadowego 0x4 – odczytywanie parametrów wyników skanowania wsadowego |
LE_Batch_Scan_Command: Set batch scan storage parameter subcommand
Sub OCF: 0x02
| Parametr podpolecenia | Rozmiar | Cel |
|---|---|---|
Batch_Scan_Full_Max |
1 oktet |
Maksymalna ilość miejsca na dane (w %) przypisana do pełnego stylu [Zakres: 0–100] |
Batch_Scan_Truncated_Max |
1 oktet |
Maksymalna ilość miejsca na dane (w %) przydzielona do stylu skróconego [Zakres: 0–100] |
Batch_Scan_Notify_Threshold |
1 oktet |
Ustaw poziom powiadomień (w %) dla poszczególnych pul pamięci. [Zakres: 0–100] Ustawienie 0 wyłączy powiadomienia. Generowane jest zdarzenie HCI specyficzne dla dostawcy (podzdarzenie przekroczenia progu pamięci masowej) |
W przypadku tego polecenia zostanie wygenerowane zdarzenie Command Complete (Polecenie ukończone).
| Parametr zwracany | Rozmiar | Cel |
|---|---|---|
Status |
1 oktet | Stan polecenia zakończonego |
Batch_scan_opcode |
1 oktet | 0x02 [Ustaw parametry skanowania wsadowego] |
LE_Batch_Scan_Command: Set batch scan parameter subcommand
Sub OCF: 0x03
| Parametr podpolecenia | Rozmiar | Cel |
|---|---|---|
Batch_Scan_Mode |
1 oktet |
0x00 – skanowanie wsadowe jest wyłączone 0x01 – włączony jest tryb skrócony 0x02 – włączony jest tryb pełny 0x03 – włączone są tryby skrócony i pełny |
Duty_cycle_scan_window |
4 oktety | Czas skanowania w skanowaniu wsadowym (numer gniazda) |
Duty_cyle_scan_interval |
4 oktety | Okres interwału skanowania zbiorczego (liczba przedziałów czasu) |
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ę o najsłabszym wskaźniku RSSI |
To polecenie podrzędne rozpocznie skanowanie wsadowe, jeśli jest włączone. W przypadku skanowania obciętego wyniki są przechowywane w formie obciętej, w której unikalny klucz dla stylu obciętego = {BD_ADDR, scan_interval}. Oznacza to, że w każdym interwale skanowania można zarejestrować tylko BD_ADDR will. Rekord, który należy zachować w trybie obciętym, to: {BD_ADDR,
Moc nadawania, RSSI, Sygnatura czasowa}
Gdy włączony jest tryb pełny, używane jest aktywne skanowanie i rejestrowane są odpowiedzi na skanowanie. Unikalny klucz stylu Pełny = {MAC, pakiet reklamowy},
niezależnie od interwału skanowania. Rekord, który należy zachować w trybie pełnym, to:
{BD_ADDR, Moc nadajnika, RSSI, Sygnatura czasowa, Pakiet reklamy, Skanowanie
odpowiedzi}. W przypadku stylu Pełny ten sam pakiet AD, który jest widoczny wielokrotnie w różnych odstępach czasu skanowania, jest rejestrowany tylko raz. W trybie obciętym interesuje nas jednak widoczność BA_ADDR w różnych odstępach czasu między skanowaniami (raz na odstęp czasu między skanowaniami). Wartość RSSI to średnia wszystkich duplikatów unikalnej reklamy w interwale skanowania.
W przypadku tego polecenia zostanie wygenerowane zdarzenie Command Complete (Polecenie ukończone).
| Parametr zwracany | Rozmiar | Cel |
|---|---|---|
Status |
1 oktet | Stan polecenia zakończonego |
Batch_scan_opcode |
1 oktet | 0x03 [Set Batch Scan Parameters] |
LE_Batch_Scan_Command: Read batch scan results subcommand
Sub OCF: 0x04
| Parametr podpolecenia | 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 (Polecenie ukończone). Gdy host wyda to polecenie, wszystkie wyniki w kontrolerze mogą nie zmieścić się w jednym zdarzeniu Command Complete (Zakończenie polecenia). Host będzie powtarzać to polecenie, dopóki odpowiednie wyniki w zdarzeniu Command Complete nie wskażą 0 w liczbie rekordów, co oznacza, że kontroler nie ma już rekordów do przekazania hostowi. Każde zdarzenie Command Complete może zawierać wiele rekordów tylko jednego typu danych (pełnych lub skróconych).
Odwołania do czasu kontrolera i hosta nie są zsynchronizowane. Jednostką sygnatury czasowej jest 50 ms. Wartość sygnatury czasowej jest określana na podstawie momentu, w którym gospodarz podaje Read_Batch_Scan_Results_Sub_cmd. Jeśli czas dotarcia polecenia T_c w oprogramowaniu sprzętowym, rzeczywisty czas, w którym sygnatura czasowa została zarejestrowana w oprogramowaniu sprzętowym, to T_fw. Czas raportowania będzie wynosić: (T_c – T_fw). T_c i T_fw są w zakresie czasu oprogramowania. Dzięki temu host może obliczyć, jak dawno miało miejsce zdarzenie.
| Parametr zwracany | Rozmiar | Cel |
|---|---|---|
Status |
1 oktet | Stan polecenia zakończonego |
Batch_scan_opcode |
1 oktet | 0x03 [Set Batch Scan parameters] |
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 powyższym 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 oktetów Scan_data_resp_len[0]: 1 oktet Scan_data_resp[0]: Scan_data_resp oktetów[wiele rekordów w powyższym formacie ( num_of_records)]
|
Filtr treści pakietu reklamowego
Użyj tej opcji, aby włączyć/wyłączyć/skonfigurować filtr zawartości pakietu reklamowego (APCF) w kontrolerze. Filtry APCF filtrują raporty o reklamach w kontrolerze, ale nie filtrują reklam okresowych.
LE_APCF_Command
OCF: 0x157
| Parametr polecenia | Rozmiar | Cel |
|---|---|---|
APCF_opcode |
1 oktet |
0x00 – APCF Enable 0x01 – APCF Set Filtering parameters 0x02 – APCF Broadcaster Address 0x03 – APCF Service UUID 0x04 – APCF Service Solicitation UUID 0x05 – APCF Local Name 0x06 – APCF Manufacturer Data 0x07 – APCF Service Data 0x08 – APCF Transport Discovery Service 0x09 – APCF AD Type Filter 0x10–0xAF – zarezerwowane do przyszłego użytku 0xB0–0xDF – zarezerwowane dla dostawcy 0xE0–0xFE – zarezerwowane do przyszłego użytku 0xFF – APCF Read extended Features |
W przypadku tego polecenia zostanie wygenerowane zdarzenie Command Complete (Polecenie ukończone).
| Parametr zwracany | Rozmiar | Cel |
|---|---|---|
Status |
1 oktet | Stan zwrotu |
APCF_opcode |
1 oktet |
0x00 – APCF Enable 0x01 – APCF Set Filtering parameters 0x02 – APCF Broadcaster Address 0x03 – APCF Service UUID 0x04 – APCF Service Solicitation UUID 0x05 – APCF Local Name 0x06 – APCF Manufacturer Data 0x07 – APCF Service Data 0x08 – APCF Transport Discovery Service 0x09 – APCF AD Type Filter 0x10–0xAF – zarezerwowane do przyszłego użytku 0xB0–0xDF – zarezerwowane dla dostawcy 0xE0–0xFE – zarezerwowane do przyszłego użytku 0xFF – APCF Read extended Features |
LE_APCF_Command: Enable_sub_cmd
Sub OCF: 0x00
| Parametr podpolecenia | Rozmiar | Cel |
|---|---|---|
APCF_enable |
1 oktet |
0x01 – włącz funkcję APCF 0x00 – wyłącz funkcję APCF |
W przypadku tego polecenia zostanie wygenerowane zdarzenie Command Complete (Polecenie ukończone).
| Parametr zwracany | Rozmiar | Cel |
|---|---|---|
Status |
1 oktet | Stan polecenia zakończonego |
APCF_opcode |
1 oktet | 0x0 – APCF Enable |
APCF_Enable |
1 oktet | Włączanie i wyłączanie jest ustawiane za pomocą APCF_enable |
LE_APCF_Command: set_filtering_parameters_sub_cmd
To polecenie podrzędne służy do dodawania lub usuwania specyfikacji filtra albo czyszczenia listy filtrów na potrzeby filtrowania na chipie.
Sub OCF: 0x01
| Parametr podpolecenia | Rozmiar | Cel |
|---|---|---|
APCF_Action |
1 oktet |
0x00 – Dodaj 0x01 – Usuń 0x02 – Wyczyść Usunięcie spowoduje wyczyszczenie konkretnego filtra wraz z powiązanymi wpisami funkcji w innych tabelach. Wyczyść 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: ustawiony na włączenie filtra adresu rozgłoszeniowego Bit 1: ustawiony na włączenie filtra zmiany danych usługi Bit 2: ustawiony na włączenie sprawdzania identyfikatora UUID usługi Bit 3: ustawiony na włączenie sprawdzania identyfikatora UUID usługi Bit 4: ustawiony na włączenie sprawdzania nazwy lokalnej Bit 5: ustawiony na włączenie sprawdzania danych producenta Bit 6: ustawiony na włączenie sprawdzania danych usługi Bit 7: ustawiony na włączenie sprawdzania usługi wykrywania transportu Bit 8: ustawiony na włączenie sprawdzania typu reklamy |
APCF_List_Logic_Type |
2 oktety |
Operacja logiczna dla każdego wyboru funkcji (na pozycję bitową) określona w APCF_Feature_Selection.
Prawidłowe tylko wtedy, gdy funkcja jest włączona. Wartość pozycji bitu: 0: LUB 1: I Jeśli wybrano logikę „I”, pakiet ADV przejdzie filtr tylko wtedy, gdy zawiera WSZYSTKIE wpisy na liście. Jeśli wybrano operator „LUB”, pakiet ADV przejdzie filtr, jeśli zawiera dowolny z wpisów na liście. |
APCF_Filter_Logic_Type |
1 oktet |
0x00: OR 0x01: AND Uwaga: w przypadku 3 pierwszych pól APCF_Feature_Selection typ logiki to N/A, ponieważ zawsze jest to logika „AND”. Mają one zastosowanie tylko do 4 pól (bity 3–6) w APCF_Feature_Selection.
|
rssi_high_thresh |
1 oktet |
[w dBm] Reklamodawca jest uznawany za widocznego tylko wtedy, gdy sygnał jest wyższy niż wysoki próg RSSI. W przeciwnym razie oprogramowanie sprzętowe musi zachowywać się tak, jakby nigdy nie widziało tego urządzenia. |
delivery_mode |
1 oktet |
0x00 - immediate0x01 - on_found0x02 - batched
|
onfound_timeout |
2 oktety |
Obowiązuje tylko wtedy, gdy delivery_mode jest on_found.[w milisekundach] Czas, przez jaki oprogramowanie sprzętowe pozostaje aktywne i zbiera dodatkowe reklamy przed przesłaniem raportu. |
onfound_timeout_cnt |
1 oktet |
Obowiązuje tylko wtedy, gdy delivery_mode jest on_found.[count] Jeśli reklama w onFound pozostaje w oprogramowaniu przez onfound_timeout, zbierze kilka reklam i sprawdzona zostanie ich liczba. Jeśli liczba przekroczy onfound_timeout_cnt, zostanie zgłoszona OnFound natychmiast po tym zdarzeniu.
|
rssi_low_thresh |
1 oktet |
Obowiązuje tylko wtedy, gdy delivery_mode jest on_found.[w dBm] Pakiet reklamodawcy jest uznawany za niewidoczny, jeśli poziom RSSI odebranego pakietu nie przekracza dolnego progu RSSI. |
onlost_timeout |
2 oktety |
Obowiązuje tylko wtedy, gdy delivery_mode jest on_found.[w milisekundach] Jeśli po znalezieniu reklama nie jest wyświetlana w sposób ciągły przez okres lost_timeout, zostanie natychmiast zgłoszona jako utracona.
|
num_of_tracking_entries |
2 oktety |
Obowiązuje tylko wtedy, gdy delivery_mode jest on_found.[count] Łączna liczba reklamodawców do śledzenia według filtra. |
Wartości RSSI muszą używać kodu uzupełnień do dwóch do reprezentowania wartości ujemnych.
Host powinien mieć możliwość skonfigurowania wielu filtrów z parametrem APCF_Application_Address_type ustawionym na 0x02 (dla wszystkich adresów nadawców), aby zarządzać różnymi kombinacjami filtrów.
Filtrowanie, przetwarzanie wsadowe i raportowanie to powiązane ze sobą pojęcia. Każda reklama i powiązana z nią odpowiedź na skanowanie będą musiały przejść przez wszystkie filtry po kolei. Dlatego wynikowe działania (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 utracie OnFound nastąpi OnLost.
Ten przepływ przetwarzania przedstawia model koncepcyjny:
Gdy otrzymana zostanie ramka reklamy (lub odpowiedź na skanowanie), jest ona stosowana do wszystkich filtrów w kolejności seryjnej. Może się zdarzyć, że reklama spowoduje natychmiastowe raportowanie na podstawie jednego filtra i grupowanie tych samych danych z powodu działania innego filtra.
Progi poziomu RSSI (wysoki i niski) umożliwiają kontrolowanie, kiedy ramka jest widoczna do przetwarzania przez filtr, nawet jeśli kontroler odbierze prawidłowy pakiet. Jeśli tryb dostawy jest ustawiony na natychmiastowy lub pakietowy, RSSI ramki jest uwzględniany w dalszym przetwarzaniu przez kontroler. Różne aplikacje wymagają różnych zachowań związanych z raportowaniem i grupowaniem. Umożliwia to wielu aplikacjom jednoczesne bezpośrednie raportowanie lub grupowanie wyników w oprogramowaniu sprzętowym. Przykładem może być sytuacja, w której skanowanie wsadowe jest aktywne w jednej aplikacji, a później inna aplikacja wydaje zwykłe skanowanie LE. Przed wydaniem skanowania wsadowego platforma lub aplikacja ustawia odpowiednie filtry. Później, gdy druga aplikacja wyda zwykłe skanowanie, poprzednie grupowanie będzie kontynuowane. Jednak ze względu na regularne skanowanie jest to podobne do koncepcyjnego dodania filtra zerowego (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 wraca do poprzedniego skanowania wsadowego, jeśli takie istniało.
Tryb wyświetlania OnFound jest oparty na skonfigurowanych filtrach. Kombinacja, która powoduje, że działanie filtra kończy się powodzeniem, jest uznawana za encję do śledzenia w przypadku onLost. Odpowiednim zdarzeniem jest podzdarzenie śledzenia LE
Advt.
Przejście OnFound/OnLost w przypadku filtra (jeśli jest włączony) będzie wyglądać tak:
W przypadku tego polecenia zostanie wygenerowane zdarzenie Command Complete (Polecenie ukończone).
| Parametr zwracany | Rozmiar | Cel |
|---|---|---|
Status |
1 oktet | Stan polecenia zakończonego |
APCF_opcode |
1 oktet | 0x01 - APCF Set Filtering Parameters |
APCF_Action |
1 oktet | Polecenie APCF_Action |
APCF_AvailableSpaces |
1 oktet | Liczba dostępnych pozycji w tabeli filtrów |
LE_APCF_Command: broadcast_address_sub_cmd
To polecenie podrzędne służy do dodawania lub usuwania adresu reklamodawcy albo do czyszczenia listy adresów reklamodawców na potrzeby filtrowania na chipie.
Sub OCF: 0x02
| Parametr podpolecenia | Rozmiar | Cel |
|---|---|---|
APCF_Action |
1 oktet |
0x00 – Dodaj 0x01 – Usuń 0x02 – Wyczyść Usuń usunie określony adres nadawcy w określonym filtrze. Wyczyść spowoduje usunięcie wszystkich adresów nadawców w określonym 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 usunięcia z niej. |
APCF_Application_Address_type |
1 oktet |
0x00: Public 0x01: Random 0x02: NA (ignore the address type) 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 wartość 0x02: NA (zignoruj typ adresu). |
W przypadku tego polecenia zostanie wygenerowane zdarzenie Command Complete (Polecenie ukończone).
| Parametr zwracany | Rozmiar | Cel |
|---|---|---|
Status |
1 oktet | Stan polecenia zakończonego |
APCF_opcode |
1 oktet | 0x02 – adres nadawcy APCF |
APCF_Action |
1 oktet | Polecenie APCF_Action |
APCF_AvailableSpaces |
1 oktet | Liczba bezpłatnych wpisów nadal dostępnych w tabeli adresów rozgłoszeniowych |
LE_APCF_Command: service_uuid_sub_cmd
To polecenie podrzędne służy do dodawania lub usuwania identyfikatora UUID usługi albo do czyszczenia listy identyfikatorów UUID usługi na potrzeby filtrowania na chipie.
Sub OCF: 0x03
| Parametr podpolecenia | Rozmiar | Cel |
|---|---|---|
APCF_Action |
1 oktet |
0x00 – Dodaj 0x01 – Usuń 0x02 – Wyczyść Usuwanie spowoduje usunięcie adresu UUID określonej usługi w określonym filtrze. Wyczyść spowoduje usunięcie wszystkich identyfikatorów UUID usług w określonym filtrze. |
APCF_Filter_Index |
1 oktet | Indeks filtra (0, max_filter-1) |
APCF_UUID |
2,4,16 octet | Identyfikator UUID usługi (16-bitowy, 32-bitowy lub 128-bitowy) do dodania lub usunięcia z listy. |
APCF_UUID_MASK |
2,4,16 octet |
Maska identyfikatora UUID usługi (16-bitowa, 32-bitowa lub 128-bitowa), którą chcesz dodać do listy.
Powinna mieć taką samą długość jak APCF_UUID..
|
W przypadku tego polecenia zostanie wygenerowane zdarzenie Command Complete (Polecenie ukończone).
| Parametr zwracany | Rozmiar | Cel |
|---|---|---|
Status |
1 oktet | Stan polecenia zakończonego |
APCF_opcode |
1 oktet | 0x03 – identyfikator UUID usługi APCF |
APCF_Action |
1 oktet | Polecenie APCF_Action |
APCF_AvailableSpaces |
1 oktet | Liczba bezpłatnych wpisów dostępnych jeszcze w tabeli identyfikatorów UUID usługi |
LE_APCF_Command: solicitation_uuid_sub_cmd
To polecenie podrzędne służy do dodawania lub usuwania identyfikatora UUID prośby o wyświetlenie reklamy albo do czyszczenia listy identyfikatorów UUID prośby o wyświetlenie reklamy na potrzeby filtrowania na chipie.
Sub OCF: 0x04
| Parametr podpolecenia | Rozmiar | Cel |
|---|---|---|
APCF_Action |
1 oktet |
0x00 – Dodaj 0x01 – Usuń 0x02 – Wyczyść Usuń usunie adres UUID prośby w określonym filtrze. Wyczyść spowoduje usunięcie wszystkich identyfikatorów UUID próśb o odpowiedź w określonym filtrze. |
APCF_Filter_Index |
1 oktet | Indeks filtra (0, max_filter-1) |
APCF_UUID |
2,4,16 octet | Identyfikator UUID prośby (16-bitowy, 32-bitowy lub 128-bitowy) do dodania lub usunięcia z listy. |
APCF_UUID_MASK |
2,4,16 octet |
Maska UUID Solicitation (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 (Polecenie ukończone).
| Parametr zwracany | Rozmiar | Cel |
|---|---|---|
Status |
1 oktet | Stan polecenia zakończonego |
APCF_opcode |
1 oktet | 0x04 – Identyfikator UUID żądania APCF |
APCF_Action |
1 oktet | Polecenie APCF_Action |
APCF_AvailableSpaces |
1 oktet | Liczba bezpłatnych wpisów nadal dostępnych w tabeli UUID zapytania ofertowego |
LE_APCF_Command: local_name_sub_cmd
To polecenie podrzędne służy do dodawania lub usuwania lokalnego ciągu znaków nazwy albo do czyszczenia listy lokalnych ciągów znaków nazwy na potrzeby filtrowania w układzie.
Sub OCF: 0x05
| Parametr podpolecenia | Rozmiar | Cel |
|---|---|---|
APCF_Action |
1 oktet |
0x00 – Dodaj 0x01 – Usuń 0x02 – Wyczyść Usuń usunie określony ciąg nazwy lokalnej w określonym filtrze. Wyczyść spowoduje usunięcie wszystkich lokalnych ciągów nazw 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 dla nazwy lokalnej. Uwagi:
|
W przypadku tego polecenia zostanie wygenerowane zdarzenie Command Complete (Polecenie ukończone).
| Parametr zwracany | Rozmiar | Cel |
|---|---|---|
Status |
1 oktet | Stan polecenia zakończonego |
APCF_opcode |
1 oktet | 0x05 - APCF Local Name |
APCF_Action |
1 oktet | Polecenie APCF_Action |
APCF_AvailableSpaces |
1 oktet | Liczba bezpłatnych wpisów dostępnych jeszcze w tabeli Nazwa lokalna |
LE_APCF_Command: manf_data_sub_cmd
To polecenie podrzędne służy do dodawania lub usuwania ciągu danych producenta albo do czyszczenia listy ciągów danych producenta na potrzeby filtrowania na chipie.
Sub OCF: 0x06
| Parametr podpolecenia | Rozmiar | Cel |
|---|---|---|
APCF_Action |
1 oktet |
0x00 – Dodaj 0x01 – Usuń 0x02 – Wyczyść Polecenie Usuń usunie określony ciąg danych producenta w określonym filtrze. Opcja Wyczyść usunie wszystkie ciągi 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 dla danych 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 (Polecenie ukończone).
| Parametr zwracany | Rozmiar | Cel |
|---|---|---|
Status |
1 oktet | Stan polecenia zakończonego |
APCF_opcode |
1 oktet | 0x06 – dane producenta APCF |
APCF_Action |
1 oktet | Polecenie APCF_Action |
APCF_AvailableSpaces |
1 oktet | Liczba bezpłatnych wpisów, które są jeszcze dostępne w tabeli danych producenta |
LE_APCF_Command: service_data_sub_cmd
To polecenie podrzędne służy do dodawania lub usuwania ciągu danych usługi albo do czyszczenia listy ciągów danych usługi na potrzeby filtrowania na chipie.
Sub OCF: 0x07
| Parametr podpolecenia | Rozmiar | Cel |
|---|---|---|
APCF_Action |
1 oktet |
0x00 – Dodaj 0x01 – Usuń 0x02 – Wyczyść Polecenie Usuń spowoduje usunięcie określonego ciągu danych usługi w określonym filtrze. Wyczyść spowoduje usunięcie wszystkich ciągów danych usługi 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 z danymi usługi. Uwagi:
|
APCF_LocName_Mandata_or_SerData_Mask |
Rozmiar zmienny |
Maska danych usługi do dodania do listy. Powinna mieć taką samą długość jak APCF_LocName_or_ManData_or_SerData..
|
W przypadku tego polecenia zostanie wygenerowane zdarzenie Command Complete (Polecenie ukończone).
| Parametr zwracany | Rozmiar | Cel |
|---|---|---|
Status |
1 oktet | Stan polecenia zakończonego |
APCF_opcode |
1 oktet | 0x07 – dane usługi APCF |
APCF_Action |
1 oktet | Polecenie APCF_Action |
APCF_AvailableSpaces |
1 oktet | Liczba bezpłatnych wpisów nadal dostępnych w tabeli danych o usługach |
LE_APCF_Command: transport_discovery_service_sub_cmd
To polecenie podrzędne służy do dodawania lub usuwania filtra usługi Transport Discovery Service (TDS) albo do czyszczenia listy filtrów TDS na potrzeby filtrowania na chipie. Użyj read_extended_features_sub_cmd, aby sprawdzić, czy to polecenie jest obsługiwane.
Sub OCF: 0x08
| Parametr podpolecenia | Rozmiar | Cel |
|---|---|---|
APCF_Action |
1 oktet |
0x00 – Dodaj 0x01 – Usuń 0x02 – Wyczyść Usuń spowoduje usunięcie określonego filtra TDS w określonym filtrze. Wyczyść spowoduje wyczyszczenie wszystkich filtrów TDS w określonym filtrze. |
APCF_Filter_Index |
1 oktet | Indeks filtra (0, max_filter-1) |
Org_ID |
1 oktet | Identyfikator organizacji zdefiniowany przez Bluetooth SIG. Ignoruj, gdy wartość parametru APCF_Action to 0x02 (Clear). |
TDS_Flags |
1 oktet | Flagi TDS do dopasowania. Ignoruj, gdy wartość parametru APCF_Action to 0x02 (Clear). |
TDS_Flags_Mask |
1 oktet | Maska dla flag TDS. Ignoruj, gdy wartość parametru APCF_Action to 0x02 (Clear). |
Transport_Data_Length |
1 oktet | Długość Transport_Data. Ignoruj, gdy wartość parametru APCF_Action to 0x02 (Clear). |
Transport_Data |
Rozmiar zmienny | O zmiennej wielkości, w zależności od Transport_Data_Length. Przenieś dane bloku, aby pasowały. Ignoruj, gdy wartość parametru APCF_Action to 0x02 (Clear). |
Transport_Data_Mask_Length |
1 oktet | Długość Transport_Data_Mask. Ta wartość musi być równa Transport_Data_Length. Ignoruj, gdy wartość parametru APCF_Action to 0x02 (Clear). |
Transport_Data_Mask |
Rozmiar zmienny | O zmiennej wielkości, w zależności od Transport_Data_Mask_Length. Maska danych bloku Transport. Powinien mieć taką samą długość jak Transport_Data. Ignoruj, gdy wartość parametru APCF_Action to 0x02 (Clear). |
Meta_Data_Type |
1 oktet |
0x00 – nieprawidłowy 0x01 – skrót Wi-Fi NAN Ignoruj, gdy APCF_Action ma wartość 0x02 (wyczyszczony).
|
Meta_Data_Length |
1 oktet | Długość Meta_Data. Ignoruj, gdy wartość parametru APCF_Action to 0x02 (Clear). |
Meta_Data |
Rozmiar zmienny | O zmiennej wielkości, w zależności od Meta_Data_Length. Metadane do dopasowania. Ignoruj, gdy wartość parametru APCF_Action to 0x02 (Clear). |
W przypadku tego polecenia zostanie wygenerowane zdarzenie Command Complete (Polecenie ukończone).
| Parametr zwracany | Rozmiar | Cel |
|---|---|---|
Status |
1 oktet | Stan polecenia zakończonego |
APCF_opcode |
1 oktet | 0x08 – APCF Transport Discovery Service |
APCF_Action |
1 oktet | Polecenie APCF_Action |
APCF_AvailableSpaces |
1 oktet | Liczba bezpłatnych wpisów nadal dostępnych w tabeli filtrów TDS |
LE_APCF_Command: ad_type_sub_cmd
To polecenie podrzędne służy do dodawania lub usuwania typu AD albo do czyszczenia listy typów AD na potrzeby filtrowania na chipie. Użyj polecenia read_extended_features_sub_cmd, aby sprawdzić, czy to polecenie jest obsługiwane.
Gdy wartość APCF_AD_DATA_Length wynosi 0, filtr APCF_AD_TYPE nie porównuje danych AD Data i AD Data Mask.
Jeśli długość danych otrzymanego pakietu ADV przekracza AD_DATA_LENGTH, porównaj tylko pierwsze AD_DATA_LENGTH bajtów danych reklamy i zignoruj pozostałe dane.
Sub OCF: 0x09
| Parametr podpolecenia | Rozmiar | Cel |
|---|---|---|
APCF_Action |
1 oktet |
0x00 – Dodaj 0x01 – Usuń 0x02 – Wyczyść Usunięcie spowoduje usunięcie określonego typu reklamy w określonym filtrze. Wyczyść spowoduje usunięcie wszystkich typów reklam w określonym filtrze. |
APCF_Filter_Index |
1 oktet | Indeks filtra (0, max_filter-1) |
APCF_AD_TYPE |
1 oktet | Typ reklamy, którą chcesz dodać do listy lub z niej usunąć. Zignoruj, gdy APCF_Action ma wartość 0x02 (Clear) |
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 |
Zmienna wielkość, na podstawie APCF_AD_DATA_LengthIgnoruj, gdy APCF_Action to 0x02 (Wyczyść) |
APCF_AD_DATA_MASK |
Rozmiar zmienny |
Rozmiar zmienny, na podstawie APCF_AD_DATA_LengthIgnoruj, gdy APCF_Action to 0x02 (Wyczyść)Powinien mieć taką samą długość jak APCF_AD_DATA.
|
W przypadku tego polecenia zostanie wygenerowane zdarzenie Command Complete (Polecenie ukończone).
| Parametr zwracany | Rozmiar | Cel |
|---|---|---|
Status |
1 oktet | Stan polecenia zakończonego |
APCF_opcode |
1 oktet | 0x09 – typ reklamy APCF |
APCF_Action |
1 oktet | Polecenie 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
To polecenie podrzędne służy do odczytywania rozszerzonych funkcji APCF.
Sub OCF: 0xFF
| Parametr podpolecenia | Rozmiar | Cel |
|---|---|---|
| Nie dotyczy | Pusty parametr polecenia. |
W przypadku tego polecenia zostanie wygenerowane zdarzenie Command Complete (Polecenie ukończone).
| Parametr zwracany | Rozmiar | Cel |
|---|---|---|
Status |
1 oktet | Stan polecenia zakończonego |
APCF_opcode |
1 oktet | 0xFF - APCF_Read_Extended_Features |
APCF_extended_features |
2 oktet |
Obsługiwane maski bitowe dla funkcji rozszerzonych:
Wartość bitu
|
Polecenie dotyczące aktywności kontrolera i informacji o energii
Celem tych informacji jest umożliwienie funkcjom systemu hosta wyższego poziomu analizowania łącznej aktywności wszystkich komponentów, w tym kontrolera Bluetooth i jego stanu makro, w połączeniu z tym, co dzieje się w aplikacjach i frameworku. Aby to zrobić, musisz podać te informacje ze stosu BT i kontrolera:
- Stos BT: raportowanie bieżącego stanu makrooperacyjnego kontrolera
- Oprogramowanie sprzętowe: raportowanie zbiorczych informacji o aktywności i energii
Stany makr stosu hosta BT określone na poziomie użytkownika:
- Bezczynność: [skanowanie strony, reklama LE, skanowanie zapytań, skanowanie LE]
- Skanowanie: [paging/inquiry/trying to connect]
- Aktywny: [połączenie ACL włączone, połączenie SCO w trakcie, tryb nasłuchiwania]
Działania, które kontroler śledzi w trakcie swojego działania, to czas transmisji, czas odbioru, czas bezczynności i całkowite zużycie energii. Są one usuwane, gdy zostaną odczytane przez hosta.
LE_Get_Controller_Activity_Energy_Info
Jest to polecenie specyficzne dla dostawcy.
OCF: 0x159
| Parametr podpolecenia | Rozmiar | Cel |
|---|---|---|
| Nie dotyczy | Puste parametry polecenia |
W przypadku tego polecenia zostanie wygenerowane zdarzenie Command Complete (Polecenie ukończone).
| Parametr zwracany | Rozmiar | Cel |
|---|---|---|
Status |
1 oktet | Stan polecenia zakończonego |
total_tx_time_ms |
4 oktety | Łączny czas wykonywania Tx |
total_rx_time_ms |
4 oktety | Łączny czas wykonywania Rx |
total_idle_time_ms |
4 oktety | Łączny czas w stanie bezczynności (stany niskiego zużycia energii inne niż sen) |
total_energy_used |
4 oktety | Łączne zużycie energii [iloczyn natężenia 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 skanowania i interwał w kontrolerze. Zgodnie ze specyfikacją BT Core 5.2 okno skanowania i interwał mają górny limit 10,24 sekundy, co utrudnia aplikacjom skanowanie w interwałach dłuższych niż 10,24 sekundy.
Podstawowe odniesienie: specyfikacja BT Core 5.2, strona 2493 (polecenie LE Set Scan Parameters)
OCF: 0x15A
| Parametr polecenia | Rozmiar | Cel |
|---|---|---|
LE_Ex_Scan_Type |
1 oktet |
0x00 – skanowanie pasywne. Nie należy wysyłać żadnych pakietów SCAN_REQ (domyślnie).0x01 – aktywne skanowanie. Możesz wysyłać SCAN_REQ pakiety.
|
LE_Ex_Scan_Interval |
4 oktety |
Zdefiniowany jako przedział czasu od rozpoczęcia ostatniego skanowania LE przez kontroler do rozpoczęcia kolejnego skanowania LE. Zakres: 0x0004–0x00FFFFFF Wartość domyślna: 0x0010 (10 ms) Czas = N * 0,625 ms Zakres czasu: 2,5 ms–10442,25 s |
LE_Ex_Scan_Window |
4 oktety |
Czas trwania skanowania LE. Wartość LE_Scan_Window musi być mniejsza lub równa LE_Scan_Interval.
Zakres: 0x0004–0xFFFF Wartość domyślna: 0x0010 (10 ms) Czas = N * 0,625 ms Zakres czasu: 2,5 ms–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 reklamowe (domyślnie). Pakiety reklamowe kierowane, które nie są adresowane do tego urządzenia, są ignorowane. 0x01 – Ignoruj pakiety reklamowe z urządzeń, których nie ma na białej liście. Tylko lista. Pakiety reklamowe kierowane, które nie są adresowane do tego urządzenia, będą ignorowane. |
W przypadku tego polecenia zostanie wygenerowane zdarzenie Command Complete (Polecenie ukończone).
| Parametr zwracany | Rozmiar | Cel |
|---|---|---|
Status |
1 oktet | Stan polecenia zakończonego |
Polecenie Get controller debug info
Celem tego elementu informacji jest uzyskanie przez hosta informacji o debugowaniu kontrolera w formie binarnej do dalszego przetwarzania i analizy. Ułatwia to rozwiązywanie problemów w terenie i zapewnia inżynierom zestaw narzędzi do rejestrowania informacji na potrzeby analizy. Administrator może przekazać informacje na żądanie hosta za pomocą zdarzenia (podzdarzenie Informacje o debugowaniu kontrolera) lub samodzielnie, gdy uzna to za stosowne. Może to być na przykład raportowanie informacji o stanie oprogramowania układowego, informacji o zrzucie awaryjnym, informacji o logowaniu itp.
OCF: 0x15B
| Parametr polecenia | Rozmiar | Cel |
|---|---|---|
| Nie dotyczy | Pusta lista parametrów polecenia |
W przypadku tego polecenia zostanie wygenerowane zdarzenie Command Complete (Polecenie ukończone).
| Parametr zwracany | Rozmiar | Cel |
|---|---|---|
Status |
1 oktet | Stan polecenia zakończonego |
Obsługa sprzętowego odciążania A2DP
Funkcja A2DP offload obsługuje przenoszenie procesu kodowania dźwięku A2DP do procesora audio podłączonego do kontrolera BT. Zakodowany strumień danych audio jest przesyłany bezpośrednio z procesora audio do kontrolera BT bez udziału hosta BT. Urządzenie BT Host nadal odpowiada za konfigurację i sterowanie sesją A2DP. Dostępne są 2 wersje poleceń. Starsze polecenia z podrzędnym OCF 0x01–0x02 obsługują tylko kodeki open source. Wersje z podkodem OCF 0x03–0x04 nie zależą od skonfigurowanego kodeka.
OCF: 0x15D
Uruchom odciążanie A2DP (starsza wersja)
Sub OCF: 0x01
Użyj tego polecenia, aby skonfigurować proces odciążania A2DP i uruchomić strumień A2DP.
| Parametr polecenia | Rozmiar | Cel |
|---|---|---|
Codec |
4 oktety |
Określa typ kodeka 0x01 – SBC 0x02 – AAC 0x04 – APTX 0x08 – APTX HD 0x10 – LDAC 0x20 – Opus |
Max_Latency |
2 oktety | Maksymalny dozwolony czas oczekiwania (w milisekundach). Wartość 0 wyłącza opróżnianie. |
SCMS-T_Enable |
2 oktety |
Bajt 0: flaga, która umożliwia dodanie nagłówka SCMS-T.
Bajt 1: wartość nagłówka SCMS-T, gdy 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 zakodowanego dźwięku w bitach na sekundę. 0x00000000 – szybkość transmisji bitów audio nie jest określona lub nie jest używana. 0x00000001 – 0x00FFFFFF – szybkość transmisji zakodowanego dźwięku w bitach na sekundę. 0x01000000–0xFFFFFFFF – zarezerwowane. |
Connection_Handle |
2 oktety | Uchwyt 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ącego zakodowane pakiety audio |
Codec_Information |
32 oktety |
Informacje dotyczące kodeka.
Kodek SBC:
Zapoznaj się z elementami informacji dotyczącymi kodeka SBC w profilu A2DP w wersji 1.3. Kodek AAC:
Informacje o kodeku AAC znajdziesz w specyfikacji A2DP v1.3 Kodek LDAC:
Bajty 0–3: identyfikator dostawcy
Oktecie 4–5: identyfikator kodeka
Bajt 6: indeks szybkości transmisji:
Bajt 7: tryb kanału LDAC Oktety 8–31: zarezerwowane Kodek Opus:
Oktawy 0–3: identyfikator dostawcy
Oktawy 4–5: identyfikator kodeka Oktawy 6–31: zarezerwowane Wszystkie pozostałe kodeki: Oktyty 0–31: zarezerwowane |
W przypadku tego polecenia zostanie wygenerowane zdarzenie Command Complete (Polecenie ukończone).
| Parametr zwracany | Rozmiar | Cel |
|---|---|---|
Status |
1 oktet | Stan polecenia zakończonego |
Sub_Opcode |
1 oktet | 0x01 – uruchom odciążanie A2DP |
Rozpocznij odciążanie A2DP
Sub OCF: 0x03
Użyj tego polecenia, aby skonfigurować proces odciążania A2DP i uruchomić strumień A2DP.
| Parametr polecenia | Rozmiar | Cel |
|---|---|---|
Connection Handle |
2 oktety | Uchwyt aktywnego połączenia HCI |
L2CAP_Channel_ID |
2 oktety | Identyfikator kanału L2CAP otwartego na potrzeby przesyłania strumieniowego A2DP |
Data_Path_Direction |
1 oktet |
0x00 – wyjście (źródło/scalanie AVDTP) 0x01 – wejście (odbiornik/dzielenie AVDTP) |
Peer_MTU |
2 oktety | Maksymalny rozmiar pakietów L2CAP, uzgodniony z urządzeniem równorzędnym. |
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 nagłówek ochrony treści SCMS-T jest włączony (CP_SCMS_T_Enable
ustawiony na 0x01), określa wartość nagłówka poprzedzającego treść audio (patrz
A2DP, sekcja 3.2.1–2) zgodnie z sekcją 6.3.2 dokumentu Bluetooth Assigned Numbers.Ignorowane, gdy ochrona treści SCMS-T nie jest włączona. |
Vendor_Specific_Parameters_Length |
1 oktet |
Długość parametrów specyficznych dla dostawcy w zakresie od 0 do 128. Wartość 0 jest używana, gdy nie podano żadnych dodatkowych parametrów. |
Vendor_Specific_Parameters |
0–128 oktetów |
Parametry specyficzne dla dostawcy podane przez Bluetooth Audio HAL,
CodecParameters.vendorSpecificParameters[].
|
W przypadku tego polecenia zostanie wygenerowane zdarzenie Command Complete (Polecenie ukończone).
| Parametr zwracany | Rozmiar | Cel |
|---|---|---|
Status |
1 oktet | Stan polecenia zakończonego |
Sub_Opcode |
1 oktet | 0x03 – Start A2DP offload |
Zatrzymaj odciążanie A2DP (starsza wersja)
Sub OCF: 0x02
To polecenie służy do zatrzymywania strumienia wyodrębniania 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 (Polecenie ukończone).
| Parametr zwracany | Rozmiar | Cel |
|---|---|---|
Status |
1 oktet | Stan polecenia zakończonego |
Sub_Opcode |
1 oktet | 0x02 – zatrzymanie odciążania A2DP |
Zatrzymaj odciążanie A2DP
Sub OCF: 0x04
To polecenie służy do zatrzymywania strumienia wyodrębniania A2DP.
| Parametr polecenia | Rozmiar | Cel |
|---|---|---|
Connection Handle |
2 oktety | Uchwyt aktywnego połączenia HCI |
L2CAP_Channel_ID |
2 oktety | Identyfikator kanału L2CAP otwartego na potrzeby przesyłania strumieniowego A2DP |
Data_Path_Direction |
1 oktet |
0x00 – wyjście (źródło/scalanie AVDTP) 0x01 – wejście (odbiornik/dzielenie AVDTP) |
W przypadku tego polecenia zostanie wygenerowane zdarzenie Command Complete (Polecenie ukończone).
| Parametr zwracany | Rozmiar | Cel |
|---|---|---|
Status |
1 oktet | Stan polecenia zakończonego |
Sub_Opcode |
1 oktet | 0x04 – zatrzymanie odciążania A2DP |
Polecenie raportu jakości Bluetooth
Funkcja polecenia BT Quality Report uruchamia w kontrolerze Bluetooth mechanizm zgłaszania zdarzeń związanych z jakością Bluetooth do hosta. Możesz włączyć 4 opcje:
- Tryb monitorowania jakości: kontroler okresowo wysyła do hosta zdarzenie podrzędne BQR związane z jakością połączenia.
- Zbliżanie się do LSTO: jeśli przez ponad połowę wartości Link Supervision TimeOut (LSTO) nie są odbierane żadne pakiety z połączonego urządzenia BT, kontroler zgłasza hostowi zdarzenie zbliżania się do LSTO.
- Przerywany dźwięk A2DP: gdy kontroler wykryje czynniki powodujące przerywany dźwięk, zgłasza do hosta zdarzenie Przerywany dźwięk A2DP.
- (e)SCO Voice Choppy: gdy kontroler wykryje czynniki powodujące przerywanie głosu, zgłasza do hosta zdarzenie (e)SCO Voice Choppy.
- Root Inflammation: to zdarzenie jest wysyłane przez kontroler do stosu, gdy HAL lub kontroler napotka krytyczny błąd i musi ponownie uruchomić Bluetootha.
- Śledzenie wiadomości LMP/LL: kontroler wysyła do hosta wiadomość LMP/LL uzgadniającą połączenie z urządzeniem zdalnym.
- Ślad harmonogramu wielu profili Bluetooth/współistnienia: kontroler wysyła do hosta informacje o harmonogramie obsługi wielu profili Bluetooth i współistnienia bezprzewodowego w paśmie 2,4 GHz.
- Mechanizm informacji debugowania kontrolera: gdy jest włączony, kontroler może autonomicznie raportować informacje o debugowaniu za pomocą podzdarzenia informacji debugowania kontrolera do hosta.
- LE Audio Choppy: gdy kontroler wykryje czynniki powodujące przerywany dźwięk, zgłasza do hosta zdarzenie LE Audio Choppy.
-
Tryb zaawansowanych statystyk RF: kontroler przesyła do hosta informacje o statystykach RF, obsługując 2 przypadki użycia raportów:
- Raporty okresowe
- aktywatory zdarzeń (rozpoczęcie/zakończenie strumienia i aktywator zdarzeń jakości połączenia);
- Mechanizm monitorowania stanu kontrolera przekazuje hostowi informacje o stanie za pomocą 2 rodzajów zdarzeń: raportów okresowych i raportów wywoływanych przez zdarzenia.
- BQR_Report_Action polecenia raportu jakości Bluetooth: host może użyć tego polecenia HCI, aby jednorazowo uzyskać zapytanie dotyczące trybu monitorowania jakości, trybu monitorowania energii lub trybu zaawansowanych statystyk RF.
OCF: 0x15E
| Parametr polecenia | Rozmiar | Cel |
|---|---|---|
BQR_Report_Action |
1 oktet |
Działanie polegające na dodaniu lub usunięciu raportowania zdarzeń związanych z jakością określonych w parametrze BQR_Quality_Event_Mask lub wyczyszczeniu wszystkich.
0x00 – Dodaj
Usunięcie spowoduje wyczyszczenie raportowania konkretnych zdarzeń związanych z jakością. |
BQR_Quality_Event_Mask |
4 oktety |
Maski bitowe dla wybranego raportowania zdarzeń jakościowych.
Bit 0: ustawiony na włączenie trybu monitorowania jakości. |
BQR_Minimum_Report_Interval |
2 oktety |
Określ minimalny przedział czasu raportowania zdarzeń związanych z jakością w przypadku wybranych zdarzeń związanych z jakością. Oprogramowanie sprzętowe kontrolera nie powinno zgłaszać następnego zdarzenia w określonym przedziale czasu. Ustawienie interwału
musi być odpowiednie i dedykowane dla dodawanych zdarzeń związanych z jakością.
Jednostka: ms |
BQR_Vendor_Specific_Quality_Event_Mask |
4 oktety |
Maski bitowe dla wybranego raportowania zdarzeń jakościowych specyficznych dla dostawcy. Ten parametr jest prawidłowy tylko wtedy, gdy ustawiony jest bit 15 parametru BQR_Quality_Event_Mask.
Bity 0–31: zarezerwowane. |
BQR_Vendor_Specific_Trace_Mask |
4 oktety |
Maski bitowe dla wybranego raportowania śledzenia specyficznego dla dostawcy. Ten parametr jest prawidłowy tylko wtedy, gdy ustawiony jest bit 31 parametru BQR_Quality_Event_Mask.
Bity 0–31: zarezerwowane. |
Report_interval_multiple |
4 oktety |
Mnożnik dla BQR_Minimum_Report_Interval. Gdy ta wartość >= 1, interwał raportu BQR ma format Interwał raportu BQR = BQR_Minimum_Report_Interval x Report_interval_multiple. Oprogramowanie sprzętowe kontrolera nie może zgłaszać następnego zdarzenia w określonym przedziale czasu. Ustawienie interwału jest przeznaczone specjalnie dla dodanych zdarzeń związanych z jakością.
Jednostka: ms BQR_Report_Interval jest większe niż możliwości kontrolera, po zakończeniu polecenia kontroler musi zwrócić maksymalny czas BQR_Report_Interval.
|
W przypadku tego polecenia zostanie wygenerowane zdarzenie Command Complete (Polecenie ukończone).
| Parametr zwracany | Rozmiar | Cel |
|---|---|---|
Status |
1 oktet | Stan polecenia zakończonego |
Current_Quality_Event_Mask |
4 oktety |
Wskazuje bieżące ustawienie maski bitowej. Bit 0: włączony jest tryb monitorowania jakości. Bit 1: włączone jest raportowanie zdarzeń związanych ze zbliżaniem się do limitu czasu sesji. Bit 2: włączono raportowanie zdarzeń związanych z przerywanym dźwiękiem A2DP. Bit 3: (e)SCO Voice Choppy event reporting is enabled. Bit 4: Włączone jest raportowanie zdarzeń dotyczących stanu zapalnego korzenia. Bit 5: Włączony jest tryb monitorowania energii. Bit 6: włączone jest raportowanie zdarzeń przerywanego dźwięku LE Audio. Bit 7: Zdarzenie nieudanego połączenia. Bit 8: ustawiony na włączenie wyzwalania zdarzenia trybu zaawansowanych statystyk RF. Bit 9: ustawienie umożliwiające okresowe raportowanie zaawansowanych statystyk RF. Bit 10: Set to enabled controller health monitoring mechanism event trigger. Bit 11: Set to enabled controller health monitoring mechanism periodically report. Bity 12–14: zarezerwowane. Bit 15: włączone jest raportowanie zdarzeń dotyczących jakości specyficznych dla dostawcy. Bit 16: LMP/LL message trace is enabled. Bit 17: śledzenie planowania wielu połączeń Bluetooth lub współistnienia jest włączone. Bit 18: mechanizm informacji debugowania kontrolera jest włączony. Bit 19: Reserved for offload debug information Bit 20: UART History Dump Event trigger Bit 21 ~ 30: Reserved. Bit 31: Vendor-specific trace is enabled. |
Current_Vendor_Specific_Quality_Event_Mask |
4 oktety | Wskazuje bieżące ustawienie maski bitowej. |
Current_Vendor_Specific_Trace_Mask |
4 oktety | Wskazuje bieżące ustawienie maski bitowej. |
BQR_Report_interval |
4 oktety | Wskazuje bieżące ustawienie maski bitowej. |
Current_Vendor_Specific_Trace_Mask |
4 oktety |
Ustawienie BQR_Report_interval. Musi to być minimalna wartość z zakresu BQR_Minimum_Report_Interval * Report_interval_multiple lub maksymalny obsługiwany interwał kontrolera. |
Polecenie dynamicznego bufora audio
Dynamiczny bufor audio zmniejsza zakłócenia dźwięku, zmieniając rozmiar bufora audio w kontrolerze Bluetooth w zależności od różnych scenariuszy.
OCF: 0x15F
Uzyskiwanie możliwości buforowania dźwięku
Sub OCF: 0x01
Użyj tego polecenia, aby uzyskać możliwość buforowania dźwięku z kontrolera Bluetooth.
| Parametr polecenia | Rozmiar | Cel |
|---|---|---|
| Nie dotyczy | Pusta lista parametrów polecenia |
W przypadku tego polecenia zostanie wygenerowane zdarzenie Command Complete (Polecenie ukończone).
| Parametr zwracany | Rozmiar | Cel |
|---|---|---|
Status |
1 oktet | Stan polecenia zakończonego |
Dynamic_Audio_Buffer_opcode |
1 oktet | 0x01. Pobieranie czasu buforowania dźwięku |
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 typu kodeka Bit 0 określony w parametrze Audio_Codec_Type_Supported. Jeśli typ kodeka Bit 0 nie jest obsługiwany, ta wartość powinna wynosić 0. Jednostka: ms |
Audio_Codec_Buffer_Maximum_Time_For_Bit_0 |
2 oktety |
Maksymalny czas buforowania typu kodeka Bit 0 określony w polu Audio_Codec_Type_Supported. Jeśli typ kodeka Bit 0 nie jest obsługiwany, ta wartość powinna wynosić 0. Jednostka: ms |
Audio_Codec_Buffer_Minimum_Time_For_Bit_0 |
2 oktety |
Minimalny czas buforowania typu kodeka Bit 0 określony w atrybucie Audio_Codec_Type_Supported. Jeśli typ kodeka Bit 0 nie jest obsługiwany, ta wartość powinna wynosić 0. Jednostka: ms |
Audio_Codec_Buffer_Default_Time_For_Bit_1 |
2 oktety |
Domyślny czas buforowania typu kodeka Bit 1 określony w parametrze Audio_Codec_Type_Supported. Jeśli kodek typu Bit 1 nie jest obsługiwany, ta wartość powinna wynosić 0. Jednostka: ms |
Audio_Codec_Buffer_Maximum_Time_For_Bit_1 |
2 oktety |
Maksymalny czas buforowania typu kodeka Bit 1 określony w polu Audio_Codec_Type_Supported. Jeśli kodek typu Bit 1 nie jest obsługiwany, ta wartość powinna wynosić 0. Jednostka: ms |
Audio_Codec_Buffer_Minimum_Time_For_Bit_1 |
2 oktety |
Minimalny czas buforowania typu kodeka Bit 1 określony w Audio_Codec_Type_Supported. Jeśli kodek typu Bit 1 nie jest obsługiwany, ta wartość powinna wynosić 0. Jednostka: ms |
| ...... | ...... | ...... |
Audio_Codec_Buffer_Default_Time_For_Bit_31 |
2 oktety |
Domyślny czas buforowania kodeka Bit 31 określony w parametrze Audio_Codec_Type_Supported. Jeśli typ kodeka Bit 31 nie jest obsługiwany, ta wartość powinna wynosić 0. Jednostka: ms |
Audio_Codec_Buffer_Maximum_Time_For_Bit_31 |
2 oktety |
Maksymalny czas buforowania typu kodeka Bit 31 określony w polu Audio_Codec_Type_Supported. Jeśli typ kodeka Bit 31 nie jest obsługiwany, ta wartość powinna wynosić 0. Jednostka: ms |
Audio_Codec_Buffer_Minimum_Time_For_Bit_31 |
2 oktety |
Minimalny czas buforowania typu kodeka Bit 31 określony w parametrze Audio_Codec_Type_Supported. Jeśli typ kodeka Bit 31 nie jest obsługiwany, ta wartość powinna wynosić 0. 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 |
Żądany czas buforowania dźwięku dla aktualnie używanego kodeka. Jednostka: ms |
W przypadku tego polecenia zostanie wygenerowane zdarzenie Command Complete (Polecenie ukończone).
| Parametr zwracany | Rozmiar | Cel |
|---|---|---|
Status |
1 oktet | Stan polecenia zakończonego |
Dynamic_Audio_Buffer_opcode |
1 oktet | 0x02. Ustawianie czasu buforowania dźwięku |
Audio_Codec_Buffer_Time |
2 oktety |
Aktualny czas buforowania dźwięku na kontrolerze Bluetooth. Jednostka: ms |
Próg bliskości połączenia (wersja 1.06)
LE_Add_Device_To_Filter_Accept_List_With_Proximity_Threshold_Command
To polecenie może służyć do podawania progu bliskości połączenia (tłumienia ścieżki i RSSI) podczas dodawania urządzenia do listy dozwolonych filtrów.
Połączenie musi być nawiązywane tylko wtedy, gdy wartość tłumienia sygnału jest niższa niż próg tłumienia.
Jeśli moc TxPower jest niedostępna lub używana jest wartość No Path Loss filtering, połączenie musi być nawiązywane tylko wtedy, gdy sygnał ma wartość RSSI wyższą niż określony próg RSSI.
To polecenie może zastąpić standardowe polecenie Bluetootha LE Add Device To Filter Accept List command.
Jeśli to polecenie zostanie wywołane z różnymi wartościami progowymi, gdy urządzenie jest już na liście akceptowanych filtrów, wartości progowe muszą zostać zaktualizowane.
Podstawa: specyfikacja BT Core 6.2, 7.8.16 (polecenie LE Add Device To Filter Accept List)
Tego polecenia nie należy używać, gdy:
- każda zasada filtrowania reklam korzysta z listy dozwolonych filtrów, a reklamy są włączone;
- zasady filtrowania skanowania korzystają z listy dozwolonych filtrów, a skanowanie jest włączone;
- zasady filtrowania inicjatora korzystają z listy dozwolonych filtrów, a polecenie
HCI_LE_Create_ConnectionlubHCI_LE_Extended_Create_Connectionjest w stanie oczekiwania.
LE Remove Device From Filter Accept List musi usunąć urządzenie z listy akceptowanych filtrów dodanej przez to polecenie.
Kod operacji: 0xFD66 (OCF: 0x166)
| Parametr polecenia | Rozmiar | Cel |
|---|---|---|
Address_Type |
1 oktet |
0x00 – publiczny adres urządzenia 0x01 – losowy adres urządzenia 0xFF – urządzenia wysyłające anonimowe reklamy Wszystkie inne wartości – zarezerwowane do wykorzystania w przyszłości |
LE_Device_Address |
6 oktetów |
Adres publiczny lub losowy Adres zostanie zignorowany, jeśli parametr Address_Type ma wartość 0xFF. |
Connection_Path_Loss_Threshold |
1 oktet |
Zakres: 0 – +100, +127 [w dB] Określa próg utraty ścieżki połączenia, który inicjuje połączenie z urządzeniem po jego wykryciu (0 – +100). Aby zainicjować połączenie, wartość utraty ścieżki powinna być niższa. Wartość +127 oznacza No Path Loss filtering. Jeśli moc transmisji jest niedostępna lub jej wartość wynosi +127, to polecenie musi wrócić do filtrowania RSSI opisanego poniżej.
|
Connection_RSSI_Threshold |
1 oktet |
Zakres: od -127 do +20, +127 [w dBm] Określa próg RSSI połączenia, który umożliwia nawiązanie połączenia z urządzeniem po jego wykryciu. (-127 do +20). Aby zainicjować połączenie, wartość RSSI musi być wyższa. Filtrowanie RSSI jest stosowane, gdy moc transmisji jest niedostępna lub gdy próg utraty ścieżki jest ustawiony na +127. Wartość +127 oznacza No RSSI filtering.
|
Gdy zarówno próg utraty ścieżki, jak i próg RSSI wynoszą +127, to polecenie musi działać tak samo jak standard Bluetooth LE Add Device To Filter Accept List command.
W przypadku tego polecenia zostanie wygenerowane zdarzenie Command Complete (Polecenie ukończone).
| Parametr zwracany | Rozmiar | Cel |
|---|---|---|
Status |
1 oktet | Stan polecenia zakończonego |
Zdarzenie HCI (specyficzne dla dostawcy)
W niektórych przypadkach wymagane są zdarzenia HCI specyficzne dla dostawcy. Patrz rysunek 5.4 na stronie 1897 specyfikacji BT Core 5.2. Parametr zdarzenia 0 zawsze będzie zawierać pierwszy kod zdarzenia podrzędnego, 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 zdarzenia podrzędnego będzie miał rozmiar 1 oktetu, czyli bajtu bezpośrednio następującego po długości parametru w pakiecie zdarzenia HCI. |
Podzdarzenie przekroczenia progu miejsca na dane
To zdarzenie oznacza, że próg miejsca na dane został przekroczony.
Kod podzdarzenia = 0x54
| Parametr zdarzenia podrzędnego | Rozmiar | Cel |
|---|---|---|
| Brak |
Podzdarzenie zmiany stanu reklamowania w wielu usługach LE
To zdarzenie oznacza, że instancja reklamowa zmieniła stan. Obecnie to zdarzenie służy tylko do wskazywania, która instancja reklamy została zatrzymana w wyniku połączenia.
Kod podzdarzenia = 0x55
| Parametr podrzędnego zdarzenia | Rozmiar | Cel |
|---|---|---|
Advertising_instance |
1 oktet |
Określa konkretną instancję reklamy. Prawidłowe wartości to od 0 do max_advt_instances–1.
|
State_Change_Reason |
1 oktet | 0x00: Odebrano połączenie |
Connection_handle |
2 oktety |
Identyfikuje połączenie, które spowodowało wyłączenie instancji advt (0xFFFF, jeśli jest nieprawidłowe).
|
Podzdarzenie śledzenia reklam LE
To zdarzenie wskazuje, kiedy reklamodawca jest wykrywany lub tracony.
Kod podzdarzenia = 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: utracono reklamodawcę |
Advt_Info_Present |
1 oktet |
0x00: informacje o reklamodawcy (Advt_Info) są obecne0x01: informacje o reklamodawcy ( Advt_Info) nie są obecne
|
Advertiser_Address |
6 oktetów | Adres publiczny lub losowy |
Advertiser_Address_Type |
1 oktet |
0x00: adres publiczny 0x01: adres losowy |
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 informacji o debugowaniu kontrolera
To zdarzenie jest używane przez kontroler do przekazywania do hosta binarnych informacji debugowania.
Kod podzdarzenia = 0x57
| Parametr zdarzenia podrzędnego | Rozmiar | Cel |
|---|---|---|
debug_block_byte_offset_start |
2 oktety | Debugowanie przesunięcia bajtowego bloku od początku |
last_block |
1 oktet |
0x00: Więcej danych debugowania 0x01: Ostatni blok binarny; brak więcej danych debugowania |
cur_pay_load_sz |
2 oktety | Rozmiar bloku binarnego w bieżącym zdarzeniu |
Debug_Data |
Zmienna | Dane debugowania cur_payload_sz |
LE Broadcast Channel Map Classification (v1.06)
Poziom szumu radiowego na kanałach Bluetooth jest kluczowym czynnikiem decydującym o skuteczności odbioru pakietów. Aby zoptymalizować niezawodność transmisji, niezbędny jest mechanizm klasyfikacji mapy kanałów, który pozwala określić jakość kanału. W standardowym scenariuszu źródła transmisji LE Audio źródło zwykle nie wie, które urządzenia aktywnie słuchają jego transmisji. W związku z tym źródło transmisji musi opierać się wyłącznie na własnej ocenie jakości kanału, aby określić mapę kanałów BIG. Jednak mapa kanałów BIG określana wyłącznie na podstawie źródła może nie być optymalna dla każdego odbiornika ze względu na różne warunki środowiskowe lub obecność lokalnych źródeł zakłóceń w pobliżu poszczególnych odbiorników. Jeśli odbiornik transmisji mógłby przekazywać informacje o klasyfikacji kanału do źródła transmisji, źródło mogłoby odpowiednio dostosować mapę kanałów BIG. Znacznie zwiększyłoby to odporność transmisji i odbioru strumienia rozgłoszeniowego na zakłócenia.
Na przykład w przypadku aplikacji Personal Audio Sharing (PAS) między słuchawkami dousznymi a źródłem transmisji nawiązywane jest połączenie LE ACL (działające jako asystent transmisji do synchronizacji z lokalnym źródłem transmisji). To istniejące połączenie LE ACL może być wykorzystywane do przekazywania informacji o klasyfikacji kanałów ze słuchawek dousznych (za pomocą pakietów LL_CHANNEL_STATUS_IND) do źródła transmisji. Źródło transmisji może następnie wykorzystać te informacje do ulepszenia mapy kanałów BIG.
Dlatego definiujemy LE_BIG_Set_Channel_Map_Classification_Command. To polecenie umożliwia zarządzanie mapą kanałów w źródle BIG, które uwzględnia informacje o klasyfikacji kanałów otrzymane z urządzeń peryferyjnych. To polecenie umożliwia ustawienie w kontrolerze konkretnego uchwytu połączenia LE ACL. Po otrzymaniu tych informacji kontroler określi mapę kanałów BIG na podstawie danych klasyfikacji kanałów powiązanych z podanymi połączeniami LE ACL.
Wdrożenie tego standardu wymaga, aby źródło transmisji uwzględniało wiele źródeł klasyfikacji kanałów podczas tworzenia mapy kanałów BIG. Na przykład kontroler może identyfikować przecięcie klasyfikacji kanałów „dobry” zgłaszanych przez połączone urządzenia zdalne i stosować je do mapy kanałów BIG. Konkretny algorytm łączenia tych klasyfikacji kanałów zależy od uznania każdego dostawcy kontrolerów, co pozwala na innowacje i optymalizację.
LE_BIG_Set_Channel_Map_Classification_Command
Kod operacji: 0xFD65 (OCF: 0x165)
| Parametr polecenia | Rozmiar | Cel |
|---|---|---|
Sub_opcode |
1 oktet |
0x01 – Ustaw mapę kanałów BIG za pomocą uchwytów połączenia ACL LE 0x02–0x0E – Zarezerwowane do wykorzystania w przyszłości |
Set_BIG_Channel_Action |
1 oktet |
Działanie polegające na dodaniu lub usunięciu adresów BD_ADDR lub uchwytów połączeń LE ACL albo wyczyszczeniu wszystkich. 0x00 – Dodaj 0x01 – Usuń 0x02 – Wyczyść 0x03–0xFF – Zarezerwowane |
BIG_Handle |
1 oktet |
Określa uchwyt BIG, który ma zostać zaktualizowany o klasyfikację kanału urządzenia peryferyjnego. Zakres: 0x00–0xEF |
cmd_para[] |
Zmienna | Parametry zmienne zależą od Set_BIG_Channel_opcode |
LE_BIG_Set_Channel_Map_Classification_Command_by_Conn_Handle
Sub OCF: 0x01
| Parametr polecenia | Rozmiar | Cel |
|---|---|---|
Sub_opcode |
1 oktet |
0x01 – Ustaw mapę kanałów BIG za pomocą uchwytów połączenia ACL LE 0x02–0x0E – Zarezerwowane do wykorzystania w przyszłości |
Set_BIG_Channel_Action |
1 oktet |
Działanie polegające na dodaniu lub usunięciu uchwytów połączeń LE ACL albo wyczyszczeniu wszystkich. 0x00 – Dodaj 0x01 – Usuń 0x02 – Wyczyść 0x03–0xFF – Zarezerwowane |
BIG_Handle |
1 oktet |
Określa uchwyt BIG, który ma zostać zaktualizowany o klasyfikację kanału urządzenia peryferyjnego. Zakres: 0x00–0xEF |
Number_of_LE_ACL_Connections |
1 oktet |
Określa liczbę połączeń LE ACL, które mają być używane do aktualizowania mapy kanałów BIG. Ignoruj, gdy Set_BIG_Channel_Action ma wartość Clear (0x02) Zakres: 0x01–0xFF |
LE_ACL_Connection_Handles |
Zmienna (Number_of_LE_ACL_Connections * 2 oktety) |
Rozmiar zmienny, zależny od parametru Number_of_LE_ACL_Connections Ignoruj, gdy parametr Set_BIG_Channel_Action ma wartość Clear (0x02) Zakres uchwytów połączeń: od 0x0000 do 0x0EFF |
W przypadku tego polecenia zostanie wygenerowane zdarzenie Command Complete (Polecenie ukończone).
| Parametr zwracany | Rozmiar | Cel |
|---|---|---|
Status |
1 oktet | Stan ukończenia polecenia. Zwróć SUCCESS, gdy zostaną dodane wszystkie uchwyty połączeń LE ACL. |
Set_BIG_Channel_opcode |
1 oktet | Polecenie Echo back Set_BIG_Channel_opcode |
Set_BIG_Channel_Action |
1 oktet | Polecenie Echo back Set_BIG_Channel_Action |
BIG_Handle |
1 oktet | BIG_Handle polecenia Echo back |
Podzdarzenie raportu jakości Bluetootha
To zdarzenie oznacza jedno z tych zdarzeń: wystąpiło zdarzenie związane z jakością Bluetooth, kontroler przesłał ślad wiadomości LMP/LL i ślad planowania Bluetooth Multi-link/Coex lub kontroler zrzucił dane debugowania.
Kod podzdarzenia = 0x58 [Quality_Report_Id = 0x01 ~ 0x04, zdarzenie związane z jakością połączenia]
| Parametr zdarzenia podrzędnego | Rozmiar | Cel |
|---|---|---|
Quality_Report_Id |
1 oktet |
0x01: raportowanie jakości w trybie monitorowania. 0x02: zbliża się LSTO. 0x03: A2DP Audio Choppy. 0x04: (e)SCO Voice Choppy. 0x05–0x06: zarezerwowane. 0x07: LE audio choppy. 0x08: nie udało się nawiązać 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 0x10: DM1 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: ISO packet 0x52: 1M PHY 0x53: 2M PHY 0x54: Codec PHY S=2 0x55: Codec PHY S=8 0x56 ~ 0xFF: Reserved |
Connection_Handle |
2 oktety | Uchwyt połączenia ACL/(e)SCO/ISO. |
Connection_Role |
1 oktet |
Rola wykonywana na potrzeby połączenia. 0x00: Central 0x01: Peripheral 0x02 ~ 0xFF: Reserved. |
TX_Power_Level |
1 oktet |
Bieżący poziom mocy transmisji dla określonego Connection_Handle.
Ta wartość musi być taka sama jak wartość zwracana przez kontroler w odpowiedzi na polecenie HCI_Read_Transmit_Power_Level HCI. |
RSSI |
1 oktet |
[w dBm]
Wartość wskaźnika siły odbieranego sygnału (RSSI) dla określonego parametru 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ą złą jakość, ale nadal są wybrane do AFH. Minimalna liczba kanałów dopuszczalna przez specyfikację Bluetooth wynosi 20, więc nawet jeśli wszystkie 79 kanałów są zakłócane i mają złą jakość, kontroler musi wybrać co najmniej 20 kanałów do AFH. |
LSTO |
2 oktety |
Obecne ustawienie limitu czasu nadzoru nad połączeniem. Czas = N * 0,625 ms Zakres czasu: od 0,625 ms do 40,9 s |
Connection_Piconet_Clock |
4 oktety |
Zegar sieci piconet dla określonego Connection_Handle. Ta wartość musi być taka sama jak odpowiedź kontrolera na polecenie HCI_Read_Clock HCI z parametrem „Which_Clock” o wartości 0x01 (zegar piconetu). Jednostka: N * 0,3125 ms (1 zegar Bluetooth) |
Retransmission_Count |
4 oktety |
Liczba ponownych transmisji od ostatniego zdarzenia. Ta liczba zostanie zresetowana po zgłoszeniu jej hostowi. |
No_RX_Count |
4 oktety |
Od ostatniego zdarzenia nie odnotowano żadnych recept. Liczba ta zwiększa się, gdy pakiet nie zostanie odebrany w zaplanowanym przedziale czasu lub gdy odebrany pakiet jest uszkodzony. Ta liczba zostanie zresetowana po zgłoszeniu jej hostowi. |
NAK_Count |
4 oktety |
Liczba NAK (Negative Acknowledge) od ostatniego zdarzenia. Ta liczba zostanie zresetowana po zgłoszeniu jej hostowi. |
Last_TX_ACK_Timestamp |
4 oktety |
Sygnatura czasowa ostatniego potwierdzenia TX. Jest on oparty na zegarze Bluetooth sieci piconet central (CLK). Jednostka: N * 0,3125 ms (1 zegar Bluetooth) |
Flow_Off_Count |
4 oktety |
Liczba przypadków otrzymania przez kontroler sygnału Flow-off (STOP) od ostatniego zdarzenia. Ta liczba zostanie zresetowana po zgłoszeniu jej hostowi. |
Last_Flow_On_Timestamp |
4 oktety |
Sygnatura czasowa ostatniego przepływu (GO). Jest on oparty na zegarze Bluetooth sieci piconet (CLK). Jednostka: N * 0,3125 ms (1 zegar Bluetooth) |
Buffer_Overflow_Bytes |
4 oktety |
[w bajtach]
Liczba przepełnień bufora od ostatniego zdarzenia. |
Buffer_Underflow_Bytes |
4 oktety |
[w bajtach]
Liczba niedoborów 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 powiodła |
TX_Total_Packets |
4 oktety | Liczba wysłanych pakietów. |
TX_UnAcked_Packets |
4 oktety |
Liczba pakietów, które nie otrzymały potwierdzenia. Ta liczba jest resetowana po zgłoszeniu do hosta. |
TX_Flushed_Packets |
4 oktety |
Liczba pakietów, które nie są wysyłane przez punkt opróżniania. Ta liczba jest resetowana po przesłaniu raportu do hosta. |
TX_Last_Subevent_Packets |
4 oktety |
Liczba pakietów, w których warstwa łącza przesyła jednostkę PDU danych CIS w ostatnim podzdarzeniu zdarzenia CIS. Ta liczba jest resetowana po przesłaniu raportu do hosta. Wartość wynosi zero, jeśli link nie ma prawidłowej wartości. |
CRC_Error_Packets |
4 oktety |
Liczba odebranych pakietów z błędem CRC od ostatniego zdarzenia. Ta liczba jest resetowana po przesłaniu raportu do hosta. |
RX_Duplicate_Packets |
4 oktety |
Liczba zduplikowanych (ponownie przesłanych) pakietów odebranych od ostatniego zdarzenia. Ta liczba jest resetowana po przesłaniu raportu do hosta. |
RX_Unreceived_Packets |
4 oktety |
Liczba nieodebranych pakietów jest taka sama jak parametr polecenia LE READ ISO Link Quality (patrz specyfikacja Bluetooth w wersji 5.4). Powiązane strumienie to CIS i BIS. Gdy ta wartość jest zwiększana, warstwa łącza nie otrzymuje określonego ładunku w punkcie opróżniania (w przypadku CIS) ani na końcu zdarzenia, z którym jest powiązana (w przypadku BIS; patrz Bluetooth Core Specification Version 5.4 Vol 6 Part B, Section 4.4.6.6). |
Coex_Info_Mask |
2 oktety |
Bit 0 – CoexInvolvement: ustawiony, aby wskazywać, że podejrzewa się, że działania związane z współistnieniem są zaangażowane w generowanie tego raportu (np. A2DP Chops i Approaching LSTO). Bit 1 - WL 2G Radio Active: ustawiony, aby wskazywać, że radio WLAN 2G jest aktywne. Bit 2 - WL 2G Connected: ustawiony, aby wskazywać, że radio WLAN 2G jest aktywne i połączone. Bit 3 – WL 5G/6G Radio Active: ustawiony, aby wskazywać, że radio WLAN 5G/6G jest aktywne. Bity 4–15 – zarezerwowane |
| Parametr specyficzny dla dostawcy | (całkowita długość parametru – TBD) * oktety | Aby dostawca kontrolera mógł uzyskać więcej parametrów specyficznych dla dostawcy. |
Kod podzdarzenia = 0x58 [Quality_Report_Id = 0x05, zdarzenie Root Inflammation]
To zdarzenie oznacza, że HAL Bluetooth lub kontroler napotkał krytyczny błąd i wymaga, aby stos Bluetooth zarejestrował tę sytuację i ponownie się uruchomił. Przed wysłaniem pierwszego fragmentu zdarzeń informacji o debugowaniu w każdym przypadku kontroler musi wysłać do stosu Bluetooth zdarzenie Root_Inflammation_Event.
Parametr Error_Code zawiera kod błędu zgłoszony przez HAL/kontroler. Jeśli jest to błąd specyficzny dla dostawcy chipsetu, ma wartość 0. Pole Vendor_Specific_Error_Code zawiera kod błędu specyficzny dla dostawcy chipsetu z HAL/kontrolera. Jeśli parametr Error_Code nie ma wartości 0, powinien mieć wartość 0. Parametry Error_Code i Vendor_Specific_Error_Code nie powinny mieć 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 chipsetu. 0x01–0xFF: wystąpił błąd kontrolera. Listę kodów błędów i ich opisów znajdziesz w specyfikacji Bluetooth [Vol 2] Part D, Error Codes. |
Vendor_Specific_Error_Code |
1 oktet |
0x00: nie zawiera kodu błędu specyficznego dla dostawcy chipsetu. 0x01 – 0xFF: kod błędu specyficzny dla dostawcy chipsetu. |
| Parametr specyficzny dla dostawcy | (Długość całkowita parametru – 4) * oktety | Aby dostawca kontrolera mógł uzyskać więcej parametrów specyficznych dla dostawcy. |
Kod podzdarzenia = 0x58 [Quality_Report_Id = 0x06, zdarzenie monitora energii]
To zdarzenie zawiera migawkę zużycia energii i stanów operacyjnych kontrolera Bluetooth w określonym przedziale czasu. To zdarzenie pomaga deweloperom i inżynierom analizować sposób zarządzania energią przez kontroler, określać, które działania zużywają najwięcej energii, i rozwiązywać problemy związane z zasilaniem.
Parametry w raporcie śledzą kluczowe dane, w tym:
- Średnie bieżące zużycie: całkowity prąd zużywany przez kontroler.
- Czas spędzony w różnych stanach: łączny czas (w milisekundach), przez jaki kontroler pozostaje w stanie bezczynności (uśpienia lub niskiego zużycia energii) w porównaniu ze stanem aktywności (łączenie się, przesyłanie lub odbieranie danych).
- Liczba przejść między stanami: liczba przejść kontrolera między stanami bezczynności i aktywności.
- Czas spędzony w określonych stanach radia: osobne dane dotyczące czasu spędzonego na transmisji (Tx) i odbiorze (Rx) w przypadku połączeń BR/EDR (klasyczny Bluetooth) i LE (Bluetooth Low Energy).
- Średnie poziomy mocy transmisji: średnia moc (w dBm) używana do transmisji w przypadku połączeń BR/EDR i LE.
- Szczegółowa aktywność łańcucha: raporty dotyczące czasu spędzonego na aktywnych łańcuchach transmisji lub odbioru, z rozróżnieniem między operacjami z jednym i dwoma łańcuchami oraz między wewnętrznymi (iPA) i zewnętrznymi (ePA) wzmacniaczami mocy.
- Czas skanowania aktywności: czas, w którym kontroler aktywnie skanuje urządzenia BR/EDR i LE.
Analizując te parametry, inżynierowie mogą uzyskać wgląd w efektywność energetyczną kontrolera i zoptymalizować jego działanie.
| Parametr zdarzenia podrzędnego | Rozmiar | Cel |
|---|---|---|
Quality_Report_Id |
1 oktet | 0x06: Monitorowanie energii |
Average_Current_Consumption |
2 oktety | [w mA] Średni pobór prądu wszystkich działań wykonywanych przez kontroler |
Idle_Total_Time (sen) |
4 oktety | [w ms] Łączny czas w stanie bezczynności (stany niskiego zużycia energii, uśpienie). |
Idle_Sate_Enter_Count |
4 oktety | Wskazuje, ile razy kontroler przechodzi w stan bezczynności. |
Active_Total_Time |
4 oktety | [w ms] Całkowity czas w stanie aktywnym (wysyłanie zapytań, przywoływanie, ruch ACL/SCO/eSCO/BIS/CIS, przetwarzanie dowolnego zadania). |
Active_State_Enter_Count |
4 oktety | Wskazuje, ile razy kontroler przechodzi w stan aktywny. |
BR_RDR_Tx_Total_Time |
4 oktety | [w ms] Całkowity czas w stanie Tx(transmisja dla ruchu ACL/SCO/eSCO) specyficznym dla BR/EDR. |
BR_RDR_Tx_State_Enter_Count |
4 oktety | Wskazuje, ile razy kontroler przechodzi w stan transmisji BR/EDR. |
BR_RDR_Tx_Average_Power_Level |
1 oktet | [w dBm] Średni poziom mocy transmisji wszystkich połączeń BR/EDR |
BR_RDR_Rx_Total_Time |
4 oktety | [w ms] Łączny czas w stanie odbioru (Rx) w przypadku BR/EDR (odbieranie ruchu z ACL/SCO/eSCO). |
BR_RDR_Rx_State_Enter_Count |
4 oktety | [w ms] Wskazuje, ile razy kontroler przechodzi w stan odbioru BR/EDR. |
LE_Tx_Total_Time |
4 oktety | [w ms] Łączny czas w stanie Tx (nadawanie w przypadku ruchu ACL/BIS/CIS lub ruchu reklamowego LE) w przypadku LE. |
LE_Tx_State_Enter_Count |
4 oktety | Wskazuje, ile razy kontroler przechodzi w stan odbioru BR/EDR. |
LE_Tx_Average_Power_Level |
1 oktet | [w dBm] Średni poziom mocy transmisji wszystkich połączeń LE. |
LE_Rx_Total_Time |
4 oktety | [w ms] Całkowity czas w stanie Rx (odbieranie z ACL/BIS/CIS lub ruchu skanowania LE). |
LE_Rx_State_Enter_Count |
4 oktety | [w ms] Wskazuje, ile razy kontroler przechodzi w stan odbioru LE. |
Report_Time_Duration (całkowity czas) |
4 oktety | [w ms] Łączny czas zbierania informacji związanych z zasilaniem. |
RX_Active_One_Chain_Time |
4 oktety | [w ms] Czas trwania aktywnego odbioru w jednym łańcuchu. |
RX_Active_Two_Chain_Time |
4 oktety | [w ms] Czas trwania aktywnego odbioru w 2 łańcuchach |
TX_iPA_Active_One_Chain_Time |
4 oktety | [w ms] Czas trwania aktywnej wewnętrznej transmisji w jednym łańcuchu |
TX_iPA_Active_Two_Chain_Time |
4 oktety | [w ms] Czas trwania aktywnej wewnętrznej transakcji w 2 łańcuchach |
TX_ePA_Active_One_Chain_Time |
4 oktety | [w ms] Czas trwania aktywnego zewnętrznego TX w jednym łańcuchu |
TX_ePA_Active_Two_Chain_Time |
4 oktety | [w ms] Czas trwania aktywnego nadawania zewnętrznego w 2 łańcuchach |
BREDR_RX_Active_Scan_total_Time |
4 oktety | [w ms] Okres (ms) aktywności odbiornika podczas skanowania BR/EDR |
LE_RX_Active_Scan_total_Time |
4 oktety | [w ms] Okres (ms) czasu aktywnego odbioru skanowania LE |
Kod podzdarzenia = 0x58 [Quality_Report_Id = 0x09~0x0A, zdarzenie zaawansowanych statystyk RF]
Zdarzenie Bluetooth Advanced RF (Radio Frequency) Stats zawiera szczegółowe dane o działaniu kontrolera Bluetootha. Zdarzenie można wywołać na 2 sposoby:
- Według wyzwalacza (0x09): jednorazowy raport jest wysyłany w odpowiedzi na konkretne polecenie.
- Według monitora: kontroler okresowo wysyła raporty w określonych odstępach czasu.
Parametry zdarzenia to w zasadzie liczniki pakietów, które śledzą różne zachowania radia w określonym przedziale czasu.
Kluczowe dane i ich przeznaczenie
- Statystyki mocy transmisji: te liczniki śledzą pakiety wysyłane przy użyciu różnych konfiguracji zasilania, rozróżniając wewnętrzne (iPA) i zewnętrzne (ePA) wzmacniacze mocy oraz różne tryby dywersyfikacji anteny (Div) lub kształtowania wiązki (BF). Pomaga to określić, które ustawienia zasilania i anteny są używane najczęściej.
- Przedziały wskaźnika siły odbieranego sygnału (RSSI): te parametry dzielą odebrane pakiety na kategorie na podstawie siły sygnału. Podając liczbę pakietów w określonych zakresach RSSI (np. poniżej -90 dBm, od -70 do -75 dBm), raport daje jasny obraz jakości połączenia. Wysoka liczba w przedziałach sygnału „słaby” (np. < -90 dBm) wskazuje na słabe połączenie.
- Różnica RSSI: ta wartość mierzy różnicę siły sygnału między 2 antenami odbiorczymi (w stosownych przypadkach). Liczniki śledzą, ile pakietów ma różnicę RSSI w różnych zakresach. Duża różnica (np. >11 dBm) może wskazywać na zakłócenia lub przeszkodę fizyczną, ponieważ jedna antena odbiera sygnał o znacznie większej mocy niż druga.
- Przełączanie anten i ponowne transmisje: raport zlicza, jak często kontroler przełącza się między antenami, i śledzi pakiety ponownie transmitowane (ReTX). Duża liczba ponownych transmisji często wskazuje na słabe lub zawodne połączenie, które wymaga ponownego wysyłania pakietów.
- Jakość kanału: te parametry zawierają ogólne podsumowanie stanu różnych kanałów komunikacji, klasyfikując je jako „Dobre”, „OK”, „Złe” lub „Bardzo złe” na podstawie wskaźnika RSSI. Daje to natychmiastowy przegląd środowiska RF.
- Kolejka bufora TX: ta sekcja monitoruje liczbę pakietów oczekujących w buforze transmisji kontrolera dla różnych typów połączeń, takich jak ACL (Asynchronous Connection-oriented Logical link), LECONN (LE Connection) i LEISOC (LE Isochronous). Wysoka liczba buforów może wskazywać wąskie gardło lub problem z przepływem danych z hosta do kontrolera.
| Parametr podrzędnego zdarzenia | Rozmiar | Cel |
|---|---|---|
Quality_Report_Id |
1 oktet | 0x09: Advance RF Stats By Trigger 0x0A: Advance RF Stats By Monitor |
Extension_info |
1 oktet | Informacje o wersji BQR. 0x01 dla BQRv6 0x02 dla BQRv7 |
Report_Time_Period |
4 oktety | Okres zbierania informacji o skuteczności. Jednostka: ms |
TX_Power_iPA_BF |
4 oktety | Licznik pakietów iPA BF |
TX_Power_ePA_BF |
4 oktety | Licznik pakietów ePA BF |
TX_Power_iPA_Div |
4 oktety | Licznik pakietów ePA Div |
TX_Power_ePA_Div |
4 oktety | Licznik pakietów ePA Div |
RSSI_chain_50 |
4 oktety | Licznik pakietów w łańcuchu RSSI > -50 dBm |
RSSI_chain_50_55 |
4 oktety | Licznik pakietów w łańcuchu RSSI w zakresie od -50 dBm do >-55 dBm |
RSSI_chain_55_60 |
4 oktety | Licznik pakietów w łańcuchu RSSI w zakresie od -55 dBm do >-60 dBm |
RSSI_chain_60_65 |
4 oktety | Licznik pakietów w łańcuchu RSSI między -60 dBm a >-65 dBm |
RSSI_chain_65_70 |
4 oktety | Licznik pakietów w łańcuchu RSSI w zakresie od -65 dBm do >-70 dBm |
RSSI_chain_70_75 |
4 oktety | Licznik pakietów w łańcuchu RSSI w zakresie od -70 dBm do >-75 dBm |
RSSI_chain_75_80 |
4 oktety | Licznik pakietów w łańcuchu RSSI w zakresie od -75 dBm do >-80 dBm |
RSSI_chain_80_85 |
4 oktety | Licznik pakietów w łańcuchu RSSI w zakresie od -80 dBm do >-85 dBm |
RSSI_chain_85_90 |
4 oktety | Licznik pakietów w łańcuchu RSSI w zakresie od -85 dBm do >-90 dBm |
RSSI_chain_90 |
4 oktety | Licznik pakietów w łańcuchu RSSI < -90 dBm |
RSSI_delta_2 |
4 oktety | Licznik pakietów o wartości delta RSSI < 2 dBm |
RSSI_delta_2_5 |
4 oktety | Licznik pakietów o różnicy RSSI między 2 dBm a 5 dBm |
RSSI_delta_5_8 |
4 oktety | Licznik pakietów o różnicy RSSI między 5 dBm a 8 dBm |
RSSI_delta_8_11 |
4 oktety | Licznik pakietów różnicy RSSI między 8 dBm a 11 dBm |
RSSI_delta_11 |
4 oktety | Licznik pakietów różnicy RSSI > 11 dBm |
Antenna_Switch_Count |
4 oktety | Licznik pakietów zdarzenia przełączania anteny |
ReTX_iPA_BF |
4 oktety | Licznik pakietów ReTX_iPA_BF w ostatnim okresie |
ReTX_ePA_BF |
4 oktety | Licznik pakietów ReTX_ePA_BF w ostatnim okresie |
ReTX_iPA_Div |
4 oktety | Licznik pakietów ReTX_iPA_Div w ostatnim okresie |
ReTX_ePA_Div |
4 oktety | Licznik pakietów ReTX_ePA_Div w ostatnim okresie |
Channel_count_Good |
1 oktet | Liczba kanałów, których RSSI mieści się w przedziale Bin-1 (<-90) |
Channel_count_OK |
1 oktet | Liczba kanałów, których RSSI mieści się w przedziale Bin-2 (-90~-76) |
Channel_count_Bad |
1 oktet | Liczba kanałów, których RSSI mieści się w przedziale Bin-3 (-76~-50) |
Channel_count_VeryBad |
1 oktet | Liczba kanałów, których wskaźnik RSSI mieści się w przedziale Bin-4 (>-50) |
TX_buffer_Queue_Count |
4 oktety | Licznik stanu kolejki bufora – bufor TX kontrolera w ostatnim okresie [0:3] ACL_1 [4:7] ACL_2 [8:11] LECONN_1 [12:15] LECONN_2 [16:19] LEISOC_1 [20:23] LEISOC_2 [24:27] LEBroadcast [28:31] rsvd |
Kod podzdarzenia = 0x58 [Quality_Report_Id = 0x0B~0x0C, zdarzenie monitorowania stanu kontrolera]
Zdarzenie monitorowania stanu kontrolera Bluetooth zawiera podsumowanie stanu działania kontrolera. Zdarzenie można wywołać na 2 sposoby:
- Według wyzwalacza (0x09): jednorazowy raport jest wysyłany w odpowiedzi na konkretne polecenie.
- Według monitora: kontroler okresowo wysyła raporty w określonych odstępach czasu.
Zdarzenie monitorowania stanu kontrolera Bluetooth to narzędzie diagnostyczne, które zawiera podsumowanie stanu działania kontrolera. To zdarzenie jest częścią struktury raportu o jakości Bluetooth (BQR) i służy do debugowania problemów z łącznością, zarządzaniem energią i czasem. Możesz wysłać go jednorazowo lub okresowo, aby zapewnić ciągłe monitorowanie.
Kluczowe dane i ich przeznaczenie
- Liczniki pakietów HCI: zdarzenie śledzi łączną liczbę pakietów wysłanych z hosta do kontrolera i odwrotnie. Te liczniki są niezbędne do debugowania problemów z transportem interfejsu kontrolera hosta (HCI), który jest kanałem komunikacji między stosem oprogramowania a chipem kontrolera Bluetooth.
- Długości pakietów: zdarzenie raportuje długość ostatniego wysłanego i odebranego pakietu HCI. Pomaga to sprawdzić, czy dane są przesyłane prawidłowo i czy nie występują nieoczekiwane problemy z rozmiarem.
- Liczba sygnałów wybudzania: raport zawiera łączną liczbę asercji pinów BT_Wake i HOST_Wake. Te sygnały fizyczne mają kluczowe znaczenie dla zarządzania energią, ponieważ służą do wybudzania odpowiednich podmiotów ze stanów niskiego zużycia energii. Monitorowanie tych wartości pomaga w rozwiązywaniu problemów związanych z zasilaniem, takich jak nieoczekiwane wybudzanie się urządzenia lub brak możliwości przejścia w tryb uśpienia.
- Sygnatury czasowe: zdarzenie zawiera kilka sygnatur czasowych, w tym czas ostatniego sygnału wybudzenia i ostatniego resetu HCI. Te sygnatury czasowe pomagają rozwiązywać problemy związane z czasem i stanowią punkt odniesienia, który pozwala określić, kiedy wystąpiły określone zdarzenia.
- Watchdog Timer:określona flaga wskazuje, czy zdarzenie zostało wygenerowane jako wczesne ostrzeżenie o tym, że zegar nadzorujący kontrolera wkrótce wygaśnie. Jest to alert o znaczeniu krytycznym dotyczący potencjalnych zawieszeń lub nieprawidłowości w działaniu kontrolera.
- Stan połączenia: raport podsumowuje bieżący stan aktywnych połączeń, w tym łączną liczbę połączeń BR/EDR, LE i CIS (Connected Isochronous Stream). Wskazuje też, czy aktywne są jakieś połączenia SCO (Synchronous Connection-Oriented). Te informacje zawierają podsumowanie bieżącego obciążenia połączenia kontrolera.
| Parametr podrzędnego zdarzenia | Rozmiar | Cel |
|---|---|---|
Quality_Report_Id |
1 oktet | 0xB~0xC 0x0B: raporty jednorazowe lub wywoływane przez zdarzenia 0x0C: raporty okresowe. |
Packet_Count_Host_to_Controller |
4 oktety | Łączna liczba pakietów wysłanych z hosta do kontrolera za pomocą transportu HCI. To pole służy do debugowania problemów z HCI (np. UART). Zachowanie: liczniki są resetowane, gdy kontroler otrzyma polecenie resetowania HCI. |
Packet_Count_Controller_to_Host |
4 oktety | Łączna liczba pakietów zdarzeń HCI wysłanych do hosta. To pole służy do debugowania problemów z HCI (np. UART). Zachowanie: liczniki są resetowane, gdy kontroler otrzyma polecenie resetowania HCI. |
Last_Packet_Length_Host_to_Controller |
2 oktety | Długość ostatniego pakietu HCI wysłanego do interfejsu UART hosta. Uwaga: maksymalna długość pakietu HCI to 2 oktety (obejmuje HCI, ACL, SCO, ISO). |
Last_Packet_Length_Controller_To_host |
2 oktety | Długość ostatniego pakietu HCI odebranego z interfejsu UART hosta. Uwaga: maksymalna długość pakietu HCI to 255 oktetów (obejmuje HCI, ACL, SCO, ISO). |
Total_BT_Wake_Count |
4 oktety | Łączna liczba potwierdzeń sygnału BT_Wake przez hosta. To pole służy jako narzędzie diagnostyczne do debugowania problemów związanych z zasilaniem. Zachowanie: liczniki są resetowane, gdy kontroler otrzyma resetowanie HCI. |
Total_HOST_Wake_Count |
4 oktety | Agregowane obliczanie potwierdzeń pinu Host_Wake zainicjowanych przez kontroler. To pole służy jako narzędzie diagnostyczne do debugowania problemów związanych z zasilaniem. Zachowanie: liczniki są resetowane, gdy kontroler otrzyma polecenie resetowania HCI. |
Last_BT_Wake_TimeStamp |
4 oktety | Ostatnia sygnatura czasowa, kiedy host potwierdził pin BT_Wake.To pole jest używane do debugowania problemów z zasilaniem. |
Last_HOST_Wake_TimeStamp |
4 oktety | Najnowsza sygnatura czasowa, kiedy kontroler potwierdził pin Host_Wake. To pole służy do debugowania problemów z zasilaniem. |
Reset_Timestamp |
4 oktety | Sygnatura czasowa wskazująca zakończenie ostatniego resetowania HCI. To pole służy wyłącznie do rozwiązywania problemów związanych z czasem. Powinien on stanowić punkt wyjściowy, do którego odniesiesz wszystkie inne elementy. |
Current_Timestamp |
4 oktety | Aktualny czas wygenerowania tego zdarzenia. To pole służy do rozwiązywania problemów z różnicami w czasie. Powinien on służyć jako punkt rejestracji wywołania, do którego odwołują się wszystkie inne elementy. |
Is_WatchDog_Timer_About_To_Expire |
4 oktety | Flaga wskazująca, że to zdarzenie stanu zostało wygenerowane przez kontroler jako wczesne ostrzeżenie o wygaśnięciu zegarka. Bieżąca sygnatura czasowa wskazuje czas wystąpienia. |
Coex_Status_Mask |
2 oktety | Bit 0 – Zarezerwowany |
Total_Links_BR_EDR_LE_Active |
1 oktet | Łączna liczba połączeń BR/EDR/LE w stanie aktywnym. |
Total_Links_BR_EDR_Sniff |
1 oktet | Łączna liczba połączeń BR/EDR w stanie Sniff/Idle. |
Total_Links_CIS |
1 oktet | Łączna liczba linków do ISO. |
Is_SCO_Active |
1 oktet | Wskaźnik, który pozwala sprawdzić, czy link SCO jest obecnie aktywny. |
Kod podzdarzenia = 0x58 [Quality_Report_Id = 0x11 ~ 0x13, zdarzenie związane z zrzutem dziennika]
| Parametr zdarzenia podrzędnego | Rozmiar | Cel |
|---|---|---|
Quality_Report_Id |
1 oktet |
0x00–0x10: zarezerwowane. 0x11: śledzenie wiadomości LMP/LL. 0x12: ślad planowania wielu połączeń Bluetooth lub współistnienia. 0x13: zrzut danych debugowania kontrolera. 0x14–0xFF: zarezerwowane. |
Connection_Handle |
2 oktety | Uchwyt połączenia. |
| Parametr specyficzny dla dostawcy | (Długość całkowita parametru – 4) * oktety | Format specyficzny dla dostawcy śladu wiadomości LMP, śladu planowania Bluetooth Multi-link/Coex i zrzutu danych informacji debugowania kontrolera. |
Kod podzdarzenia = 0x58 [Quality_Report_Id = 0x16, zdarzenie źródła transmisji LEA]
Parametry BIG Handle–Timestamp umożliwiają kontrolerowi proaktywne raportowanie informacji o źródle transmisji, w tym adresu BD_ADDR przesyłanego drogą radiową i aktualnie używanej mapy kanałów BIG. Parametry od Broadcast ID of Broadcast Receiver Subscribed do RSSI są przeznaczone dla odbiornika transmisji do raportowania informacji o subskrybowanym źródle BIG. Te informacje muszą być przesyłane z odbiornika transmisji do źródła BIG za pomocą PAwR, połączenia LE ACL lub innych odpowiednich metod.
| Parametr zdarzenia podrzędnego | Rozmiar | Cel |
|---|---|---|
Quality_Report_Id |
1 oktet | 0x16: zdarzenie źródłowe transmisji LEA. |
BIG_Handle |
1 oktet | Uchwyt BIG przydzielony przez hosta. |
Broadcast_Source_BD_ADDR_Type |
1 oktet | Typ BD_ADDR źródła transmisji (uchwyt BIG) wysłany drogą radiową. |
Broadcast_Source_BD_ADDR |
6 oktetów | Adres BD_ADDR źródła transmisji (uchwyt BIG) wysłany drogą radiową. |
BIG_Source_Prefer_Channel_Map |
5 oktetów | Mapa kanałów BIG, która jest preferowana przez kontroler i wykrywana przez klasyfikację kanałów. |
BIG_Source_Used_Channel_Map |
5 oktetów | Kanał BIG używany przez kontroler. |
BIG_TX_Power |
1 oktet | Bieżąca moc TX używana w identyfikatorze transmisji. |
Timestamp |
4 oktety |
Sygnatura czasowa (zegar sieci piconet) dla określonego uchwytu BIG. Ta wartość musi być taka sama jak odpowiedź kontrolera na polecenie HCI HCI_Read_Clock z parametrem Which_Clock o wartości 0x01 (zegar sieci piconet).Jednostka: N * 0,3125 ms (1 zegar Bluetooth) |
Broadcast_ID_of_Broadcast_Receiver_Subscribed |
3 oktety |
Wskazuje identyfikator subskrybowanej transmisji urządzenia klienta. Nieprawidłowa wartość: 0xFFFFFF |
Broadcast_Receiver_BD_ADDR_Type |
1 oktet |
Typ BD_ADDR odbiornika transmisji. Nieprawidłowa wartość: 0xFF |
Broadcast_Receiver_BD_ADDR |
6 oktetów |
Adres BD_ADDR odbiornika. Nieprawidłowa wartość: 0x000000000000 |
Time_Duration |
4 oktety |
Okres zbierania informacji o skuteczności. Jednostka: ms. Nieprawidłowa wartość: 0xFFFFFFFF |
BIS_Choppy_count |
4 oktety |
BIS Choppy count: liczba niestabilnych połączeń z wartością Time_Duration. Nieprawidłowa wartość: 0xFFFFFFFF |
PER |
4 oktety |
Odsetek błędnych pakietów (PER) w okresie Time_Duration. Nieprawidłowa wartość: 0xFFFFFFFF |
No_Sync |
4 oktety |
Liczba przypadków, w których RX jest niesynchronizowany. Nieprawidłowa wartość: 0xFFFFFFFF |
Receiver_Prefer_Channel_Map |
5 oktetów |
Wskazuje mapę kanałów odbiornika transmisji. Nieprawidłowa wartość: 0x0000000000 |
Receiver_Tx_Power |
1 oktet |
Wskazuje poziom mocy, z jakim pakiet zawierający dane jest przesyłany z odbiornika transmisji. Nieprawidłowa wartość: 0xFF |
RSSI |
1 oktet |
Wartość RSSI odebranych pakietów z odbiornika transmisji. Nieprawidłowa wartość: 0x7F |
Reserved |
4 oktety | Zarezerwowane |
Podrzędne zdarzenie ISO Link Feedback
Kod podzdarzenia = 0x5C
Po aktywowaniu to zdarzenie musi być generowane w każdym przedziale czasu ISO.
Aktywacja
Aktywacja odbywa się przez wybranie kodu dostawcyData_Path_ID0x19 w HCI_LE_Setup_ISO_Data_Path standardowym poleceniu.
Polecenie HCI_Configure_Data_Path z parametrem Data_Path_ID ustawionym na 0x19 i parametrem Vendor_Specific_Config_Length ustawionym na 0 musi zostać zaakceptowane, nawet jeśli po jego otrzymaniu kontroler nie musi podejmować żadnych działań.
Moment wysyłki
Zdarzenie jest emitowane od początku interwału ISO (punkt zakotwiczenia CIG lub BIG) do następnego interwału ISO. Kontroler wskazuje opóźnienie względem efektywnego początku interwału ISO za pomocąAnchor_Point_Delay.
Synchronizacja kontrolera
Na początku interwału ISO kontroler oblicza StreamSN, zwiększając bieżącą wartość o skonfigurowaną wartośćISO_Interval ÷ SDU_Interval. W pierwszym interwale jest ona inicjowana jako 0.W przypadku każdego pakietu w ramach ISO FIFO obowiązują te zasady:
-
Kontroler oblicza różnicę SNdiff między dwoma numerami sekwencyjnymi:
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. Powinno być zaplanowane do transmisji w poprzednich interwałach, a teraz jest dostępne do ponownej transmisji. Jeśli tak nie jest (nie zaplanowano transmisji), oznacza to, że otrzymano go z opóźnieniem. Należy to zasygnalizować hostowi za pomocą parametruIn_Status. Takie pakiety mogą zostać odrzucone lub zaplanowane do transmisji. Wybór zależy od implementacji. - lub gdy
SNdiff < ISO_Interval ÷ SDU_Interval:
Pakiet jest zaplanowany do transmisji od tego zdarzenia do momentu upłynięcia limitu czasu opróżniania. - lub gdy
SNdiff >= ISO_Interval ÷ SDU_IntervaliSNdiff <= Max_Forward_Buffers:
pakiet jest w przyszłości; zostanie przesłany z kolejnym zdarzeniem. Ponieważ pakiety są wysyłane w odpowiedniej kolejności, ten warunek kończy wyszukiwanie pakietów w tym przedziale.
Bufory używane przez hosta nie są przekazywane do kontrolera, ale są ograniczone doMax_Forward_Buffers = 16. - lub gdy nie jest spełniony żaden z powyższych warunków:
pakiet jest odrzucany, osiągnięto limit czasu opróżniania lub otrzymano nieprawidłowo sformułowany pakiet.
| Parametr podrzędnego zdarzenia | Rozmiar | Cel |
|---|---|---|
Connection_Handle |
2 oktety |
Uchwyt połączenia CIS lub BIS Zakres: 0x0000–0x0EFF |
Sequence_Number |
2 oktety |
Numer sekwencyjny strumienia zarządzany przez kontroler. Inicjowany wartością 0 w momencie utworzenia CIS lub BIS i zwiększany o liczbę jednostek SDU w interwale izochronicznym 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 efektywnym punktem zakotwiczenia BIG lub CIG albo początkiem interwału ISO.
Efektywna sygnatura czasowa punktu zakotwiczenia jest określana przez:Event generation time - Anchor_Point_Delay
Zakres: od 0 do odstępu ISO w mikrosekundach |
In_Status |
2 oktety |
Stan bufora ISO kontrolera Na początku interwału ISO każdy bit bi jest ustawiany, gdy dostępna jest jednostka SDU. (Sequence_Number + i) mod 0x10000 Jeśli nie jest dostępna, jednostka SDU jest oznaczana jako Not received from the host.Wartość i mieści się w zakresie od 0 do ISO_Interval ÷ SDU_Interval - 1.
W przypadku innych wartości i bity są ustawione na 0.
|
Tx_Status |
2 oktety |
Stan transmisji w odniesieniu do jednostek SDU z numerami sekwencyjnymi:(Sequence_Number - Flush_Timeout × ISO_Interval ÷ SDU_Interval + i + 0x10000)
mod 0x10000
Każdy bit bi jest ustawiany, gdy wszystkie jednostki PDU zidentyfikowanej jednostki SDU (według numeru sekwencyjnego) zostaną pomyślnie przesłane i potwierdzone. Wartość i mieści się w zakresie od 0 do ISO_Interval ÷ SDU_Interval - 1.
W przypadku innych wartości i bity są ustawione na 0.W przypadku grupy do transmisji rozgłoszeniowej zawsze powinno być wysyłane potwierdzenie. |
Obsługa wielu reklamodawców
Cele obsługi wielu reklamodawców są następujące:
-
Możliwość obsługi wielu reklam (
max_advt_instances) - Różne moce transmisji, które pozwalają na zróżnicowany zasięg.
- Różne treści reklamowe
- Indywidualna odpowiedź dla każdego reklamodawcy
- Prywatność (bez możliwości śledzenia) w przypadku każdego reklamodawcy
- Możliwość połączenia
Aby zachować zgodność tej specyfikacji z dotychczasowymi standardami, udostępniamy te polecenia specyficzne dla dostawcy. Pochodzą one ze 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_Cmd0x02 - Set_Advt_Data_Multi_Sub_Cmd0x03 - Set_Scan_Resp_Data_Multi_Sub_Cmd0x04 - Set_Random_Addr_Multi_Sub_Cmd0x05 - Set_Advt_Enable_Multi_Sub_Cmd
|
W przypadku tego polecenia zostanie wygenerowane zdarzenie Command Complete (Polecenie ukończone).
| Parametr zwracany | Rozmiar | Cel |
|---|---|---|
Status |
1 oktet | Stan polecenia zakończonego |
Multi_advt_opcode |
1 oktet |
0x01 - Set_Advt_Param_Multi_Command0x02 - Set_Advt_Data_Multi_Command0x03 - Set_Scan_Resp_Data_Multi_Command0x04 - Set_Random_Addr_Multi_Command0x05 - Set_Advt_Enable_Multi_Command
|
LE_Multi_Advt_Command: Set_Advt_Param_Multi_Sub_Cmd
Podstawa: specyfikacja Bluetooth Core 4.1, strona 964 (LE Set Advertising Parameter Command)
Sub OCF: 0x01
| Parametr podpolecenia | Rozmiar | Cel |
|---|---|---|
Advertising_Interval_Min |
Zgodnie ze specyfikacją | Zgodnie ze specyfikacją |
Advertising_Interval_Max |
Zgodnie ze specyfikacją | Zgodnie ze specyfikacją |
Advertising_Type |
Zgodnie ze specyfikacją | Zgodnie ze specyfikacją |
Own_Address_Type |
Zgodnie ze specyfikacją | Zgodnie ze specyfikacją |
Own_Address |
Zgodnie ze specyfikacją | Zgodnie ze specyfikacją |
Direct_Address_Type |
Zgodnie ze specyfikacją | Zgodnie ze specyfikacją |
Direct_Address |
Zgodnie ze specyfikacją | Zgodnie ze specyfikacją |
Advertising_Channel_Map |
Zgodnie ze specyfikacją | Zgodnie ze specyfikacją |
Adverstising_Filter_Policy |
Zgodnie ze specyfikacją | Zgodnie ze specyfikacją |
Advertising_Instance |
1 oktet | Określa, czy powyższe parametry mają zastosowanie do instancji. |
Tx_power |
1 oktet |
Transmit_Power Jednostka – dBm (liczba całkowita ze znakiem) Zakres (-70 do +20) |
Parametr Own_Address może być adresem skonfigurowanym przez hosta w momencie konfigurowania tej instancji wielu reklam. Dzięki temu w momencie wysyłania pierwszego sygnału można mieć rozpoznawalny adres prywatny. Reklamy w instancji będą się nadal wyświetlać niezależnie od połączenia. Stos BT hosta może wydać polecenie rozpoczęcia reklamy w instancji po nawiązaniu połączenia.
W przypadku tego polecenia zostanie wygenerowane zdarzenie Command Complete (Zakończenie polecenia) zgodnie ze specyfikacją Bluetooth Core 4.1, jak podano powyżej. Jeśli instancja reklamowa lub parametry Tx_Power są nieprawidłowe, kontroler odpowie kodem wskazującym niepowodzenie (nieprawidłowy parametr).
| Parametr zwracany | Rozmiar | Cel |
|---|---|---|
Status |
1 oktet | Stan polecenia zakończonego |
Multi_advt_opcode |
1 oktet | 0x01 [Set_Advt_Param_Multi_Sub_Cmd] |
LE_Multi_Advt_Command: Set_Advt_Data_Multi_Sub_Cmd
Podstawa: specyfikacja Bluetooth Core 4.1, strona 969 (polecenie LE Set Advertising Data)
Sub OCF: 0x02
| Parametr podpolecenia | Rozmiar | Cel |
|---|---|---|
Advertising_Data_Length |
Zgodnie ze specyfikacją | Zgodnie ze specyfikacją |
Advertising_Data |
Zgodnie ze specyfikacją | Zgodnie ze specyfikacją |
Advertising_Instance |
1 oktet | Określa, czy powyższe parametry mają zastosowanie do instancji. |
W przypadku tego polecenia zostanie wygenerowane zdarzenie Command Complete (Zakończenie polecenia) zgodnie ze specyfikacją Bluetooth Core 4.1, jak podano powyżej. Kontroler odpowie kodem innym niż kod powodzenia, jeśli instancja reklamowa lub parametry Tx_Power są nieprawidłowe.
| Parametr zwracany | Rozmiar | Cel |
|---|---|---|
Status |
1 oktet | Stan polecenia zakończonego |
Multi_advt_opcode |
1 oktet | 0x02 [Set_Advt_Data_Multi_Sub_Cmd] |
LE_Multi_Advt_Command: Set_Scan_Resp_Data_Multi_Sub_Cmd
Podstawa: Bluetooth Core 4.1 Specification, strona 970 (LE Set Scan Response Data Command)
Sub OCF: 0x03
| Parametr podpolecenia | Rozmiar | Cel |
|---|---|---|
Scan_Response_Data_Length |
Zgodnie ze specyfikacją | Zgodnie ze specyfikacją |
Scan_Response_Data |
Zgodnie ze specyfikacją | Zgodnie ze specyfikacją |
Advertising_Instance |
1 oktet | Określa, czy powyższe parametry mają zastosowanie do instancji. |
W przypadku tego polecenia zostanie wygenerowane zdarzenie Command Complete (Zakończenie polecenia) zgodnie ze specyfikacją Bluetooth Core 4.1, jak podano powyżej. Jeśli instancja reklamowa lub parametry Tx_Power są nieprawidłowe, kontroler odpowie kodem błędu (nieprawidłowy parametr).
| Parametr zwracany | Rozmiar | Cel |
|---|---|---|
Status |
1 oktet | Stan polecenia zakończonego |
Multi_advt_opcode |
1 oktet | 0x03 [Set_Scan_Resp_Data_Multi_Sub_Cmd] |
LE_Multi_Advt_Command: Set_Random_Addr_Multi_Sub_Cmd
Podstawa: specyfikacja Bluetooth Core 4.1, strona 963 (polecenie LE Set Random Address)
Sub OCF: 0x04
| Parametr podpolecenia | Rozmiar | Cel |
|---|---|---|
| Losowy adres | Zgodnie ze specyfikacją | Zgodnie ze specyfikacją |
Advertising_Instance |
1 oktet | Określa, czy powyższe parametry mają zastosowanie do instancji. |
W przypadku tego polecenia zostanie wygenerowane zdarzenie Command Complete (Polecenie ukończone).
| Parametr zwracany | Rozmiar | Cel |
|---|---|---|
Status |
1 oktet | Stan polecenia zakończonego |
Multi_advt_opcode |
1 oktet | 0x04 [Set_Random_Addr_Multi_Sub_Cmd] |
LE_Multi_Advt_Command: Set_Advt_Enable_Multi_Sub_Cmd
Podstawa: specyfikacja Bluetooth Core 4.1, strona 971 (polecenie LE Set Advertise Enable w tej specyfikacji)
OCF: 0x05
| Parametr podpolecenia | Rozmiar | Cel |
|---|---|---|
Advertising_Enable |
1 oktet | Wartość 1 oznacza włączenie. Każda inna wartość oznacza wyłączenie. |
Advertising_Instance |
1 oktet | Określa, czy powyższe parametry mają zastosowanie do instancji. Instancja 0 oznacza standardową instancję HCI. |
W przypadku tego polecenia zostanie wygenerowane zdarzenie Command Complete (Polecenie ukończone).
| Parametr zwracany | Rozmiar | Cel |
|---|---|---|
Status |
1 oktet | Stan polecenia zakończonego |
Multi_advt_opcode |
1 oktet | 0x05 [Set_Advt_Enable_Multi_Sub_Cmd] |
Przeniesione rozwiązywanie prywatnego adresu
Ta funkcja rozwiązuje problem z prywatnym adresem w oprogramowaniu lub sprzęcie kontrolera, co zapewnia następujące korzyści:
- Opóźnienie związane z rozwiązywaniem adresu prywatnego przez hosta
- oszczędzanie energii przez unikanie wybudzania hosta;
LE_Set_RPA_Timeout
OCF: 0x15C
| Parametr polecenia | Rozmiar | Cel |
|---|---|---|
LE_local_IRK |
16 oktetów | Lokalny klucz IRK urządzenia użyty do wygenerowania losowych adresów możliwych do rozpoznania. |
tRPA_min |
2 oktety |
Minimalny limit czasu generowania RPA w sekundach. Kontroler musi generować nowe adresy możliwe do rozpoznania dla wszystkich zdarzeń rozgłaszania/skanowania/połączeń, które wystąpią po tym czasie oczekiwania. Prawidłowy zakres: 300–1800 |
tRPA_max |
2 oktety |
Maksymalny limit czasu generowania RPA w sekundach. Kontroler musi wygenerować nowe adresy, które można rozpoznać, dla wszystkich zdarzeń związanych z rozgłaszaniem, skanowaniem lub połączeniem przed upływem tego limitu czasu. Prawidłowy zakres: tRPA_min–1800
|
| Parametr zwracany | Rozmiar | Cel |
|---|---|---|
Status |
1 oktet |
Stan polecenia. Sugerowane wartości stanu HCI: 0x00 – powodzenie 0x01 – nieznane polecenie (jeśli nie jest obsługiwane) 0x12 – nieprawidłowe parametry polecenia (jeśli którykolwiek z parametrów wykracza poza podany zakres) |
LE_RPA_offload_Command
OCF: 0x155
| Parametr polecenia | Rozmiar | Cel |
|---|---|---|
RPA_offload_opcode |
1 oktet |
0x1 – włączanie funkcji specyficznej dla klienta 0x2 – dodawanie IRK do listy 0x3 – usuwanie IRK z listy 0x4 – czyszczenie listy IRK 0x5 – odczytywanie pozycji na liście IRK |
W przypadku tego polecenia zostanie wygenerowane zdarzenie Command Complete (Polecenie ukończone).
| Parametr zwracany | Rozmiar | Cel |
|---|---|---|
Status |
1 oktet | Stan polecenia zakończonego |
Event_RPA_offload_opcode |
1 oktet |
0x1 – włączanie funkcji specyficznej dla klienta 0x2 – dodawanie IRK do listy 0x3 – usuwanie IRK z listy 0x4 – czyszczenie listy IRK 0x5 – odczytywanie pozycji na liście IRK |
LE_RPA_offload: Enable_cust_specific_sub_Command
Sub OCF: 0x01
| Parametr podpolecenia | Rozmiar | Cel |
|---|---|---|
enable_customer_specific_feature_set |
1 oktet |
0x01 – włącz funkcję odciążonego RPA 0x00 – wyłącz funkcję odciążonego RPA |
Odciążanie RPA musi być włączone przez hosta na podstawie możliwości układu. Więcej informacji znajdziesz w LE_Get_Vendor_Capabilities_Command.
Każdy chip może mieć w oprogramowaniu różne wartości max_irk_list_sz.
W przypadku tego polecenia zostanie wygenerowane zdarzenie Command Complete (Polecenie ukończone).
| Parametr zwracany | Rozmiar | Cel |
|---|---|---|
Status |
1 oktet | Stan polecenia zakończonego |
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 podpolecenia | Rozmiar | Cel |
|---|---|---|
LE_IRK |
16 oktetów | LE IRK (1 bajt LSB) |
Address_Type |
1 oktet |
0: Adres publiczny 1: Adres losowy |
LE_Device_Address |
6 oktetów | Publiczny lub losowy adres powiązany z IRK (najmniej znaczący bit pierwszego bajtu) |
W przypadku tego polecenia zostanie wygenerowane zdarzenie Command Complete (Polecenie ukończone).
| Parametr zwracany | Rozmiar | Cel |
|---|---|---|
Status |
1 oktet | Stan polecenia zakończonego |
Event_cust_specific_feature_opcode |
1 oktet | 0x02 [Add IRK to the list] |
LE_IrkList_AvailableSpaces |
1 oktet | Wpisy na liście IRL dostępne po bieżącej operacji |
LE_RPA_offload: Remove_IRK_to_list_sub_Command
Sub OCF: 0x03
| Parametr podpolecenia | Rozmiar | Cel |
|---|---|---|
Address_Type |
1 oktet |
0: Adres publiczny 1: Adres losowy |
LE_Device_Address |
6 oktetów | Publiczny lub losowy adres powiązany z IRK |
W przypadku tego polecenia zostanie wygenerowane zdarzenie Command Complete (Polecenie ukończone).
| Parametr zwracany | Rozmiar | Cel |
|---|---|---|
Status |
1 oktet | Stan polecenia zakończonego |
Event_cust_specific_feature_opcode |
1 oktet | 0x03 [Usuń IRK z listy] |
LE_IrkList_AvailableSpaces |
1 oktet | Wpisy na liście IRL dostępne po bieżącej operacji |
LE_RPA_offload: Clear_IRK_list_sub_Command
Sub OCF: 0x04
| Parametr podpolecenia | Rozmiar | Cel |
|---|---|---|
| Brak |
W przypadku tego polecenia zostanie wygenerowane zdarzenie Command Complete (Polecenie ukończone).
| Parametr zwracany | Rozmiar | Cel |
|---|---|---|
Status |
1 oktet | Stan polecenia zakończonego |
Event_cust_specific_feature_opcode |
1 oktet | 0x04 [Clear IRK List] |
LE_IrkList_AvailableSpaces |
1 oktet |
Dostępne wpisy na liście IRL po bieżącej operacji [max_irk_list_sz]
|
LE_RPA_offload: Read_IRK_list_sub_Command
Sub OCF: 0x05
| Parametr podpolecenia | 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 (Polecenie ukończone).
| Parametr zwracany | Rozmiar | Cel |
|---|---|---|
Status |
1 oktet | Stan polecenia zakończonego |
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ć (maksymalny rozmiar listy IRK to 32) |
LE_IRK |
16 oktetów | Wartość IRK |
Address_Type |
1 oktet |
0: Adres publiczny 1: Adres losowy |
LE_Device_Address |
6 oktetów | Publiczny lub losowy adres powiązany z IRK |
LE_Resolved_Private_Address |
6 oktetów | Obecny rozwiązany adres prywatny tego identyfikatora IRK |
Sniff Offload
Funkcja Sniff Offload przenosi zarządzanie trybem Sniff z hosta Bluetooth na kontroler Bluetooth. Dzięki temu kontroler może zarządzać czasem włączania i wyłączania trybu Sniff oraz stosować konfigurowalne parametry Sniff i Sniff sub-rating, a host zachowuje kontrolę nad wyborem parametrów na podstawie zmian aktywności profilu Bluetooth.
Stany odciążania Sniff
W tej sekcji opisujemy stany kontrolera Bluetooth w kontekście funkcji Sniff Offload. Zdefiniowano 2 stany globalne, które określają stan kontrolera Bluetooth w odniesieniu do włączenia funkcji Sniff Offload. Zdefiniowano 2 stany specyficzne połączenia, aby określać stan połączenia BR/EDR, gdy kontroler Bluetooth jest w stanie Sniff Offload Enabled.
Stany globalne
Zdefiniowano 2 stany globalne, które określają stan kontrolera Bluetooth w odniesieniu do włączenia funkcji Sniff Offload.
Stan wyłączenia funkcji Sniff Offload
Kontroler Bluetooth jest domyślnie w stanie „Sniff Offload Disabled”. Oczekuje się, że kontroler Bluetooth będzie obsługiwać polecenia HCI_Sniff_Mode, HCI_Exit_Sniff_Mode i HCI_Sniff_Subrating wydawane przez hosta Bluetooth. Kontroler Bluetooth musi też przekazywać zdarzenia HCI_Mode_Change i HCI_Sniff_Subrating do hosta Bluetooth zgodnie z maską zdarzeń ustawioną przez hosta Bluetooth.
Stan włączenia funkcji Sniff Offload
Kontroler Bluetooth jest uznawany za znajdujący się w stanie „Sniff Offload Enabled” (Wykrywanie wyłączone), gdy pomyślnie obsłuży żądanie „WriteSniffOffloadEnable” (ZapiszSniffOffloadEnable) w celu włączenia wykrywania. W tym stanie kontroler Bluetooth powinien przekazywać zdarzenia HCI_Mode_Change i HCI_Sniff_Subrating do hosta Bluetooth zgodnie z funkcją logiczną AND maski zdarzeń ustawionej przez hosta Bluetooth i flagami pomijania zdarzeń.
Stany specyficzne połączenia
Gdy kontroler Bluetooth jest w stanie „Sniff Offload Enabled”, każdy aktywny kanał ACL może być w jednym z 2 stanów opisanych poniżej.
Stan parametru oczekującego
Lista ACL jest uznawana za „oczekującą na parametry”, gdy kontroler Bluetooth jest w stanie „Sniff Offload Enabled”, ale host Bluetooth nie wydał co najmniej raz polecenia „WriteSniffOffloadParameters” specyficznego dla dostawcy dla bieżącej listy ACL.
Stan rozpoczęcia kontroli
Lista ACL jest uznawana za stan „Control-Started”, gdy kontroler Bluetooth jest w stanie „Sniff Offload Enabled”, a polecenie „WriteSniffOffloadParameters” specyficzne dla dostawcy zostało wydane co najmniej raz przez hosta Bluetooth dla bieżącej listy ACL.
WriteSniffOffloadEnable
OCF: 0x310
| Parametr polecenia | Rozmiar | Cel |
|---|---|---|
Enable_Sniff_Offload |
1 oktet | 0x00 : Wyłącz 0x01 : Włącz |
Subrating_Max_Latency |
2 oktety | Parametr Maksymalne opóźnienie służy do obliczania maksymalnej podprędkości nasłuchiwania, jakiej może używać urządzenie zdalne. Domyślnie: T*sniff* Latency = N × 0,625 ms (1 gniazdo pasma podstawowego) Zakres: 0x0002–0xFFFE Zakres czasu: 1,25 ms–40,9 s |
Subrating_Min_Remote_Timeout |
2 oktety | Minimalny czas oczekiwania w trybie nasłuchiwania (T*sniff_mode_timeout*), którego może używać urządzenie zdalne. Wartość domyślna: 0x0000 Czas oczekiwania = N × 0,625 ms (1 gniazdo pasma podstawowego) Zakres: 0x0000–0xFFFE Czas Zakres: 0–40,9 s |
Subrating_Min_Local_Timeout |
2 oktety | Minimalny limit czasu trybu nasłuchiwania (T*sniff_mode_timeout*), którego może używać urządzenie lokalne. Wartość domyślna: 0x0000 Timeout = N × 0,625 ms (1 gniazdo pasma podstawowego) Zakres: 0x0000–0xFFFE Czas Zakres: 0–40,9 s |
Suppress_Mode_Change_Event |
1 oktet | 0x00 : kontroler Bluetooth powinien zgłaszać zdarzenie HCI Mode_Change do hosta
zgodnie z konfiguracją ustawioną w poleceniu HCI_Set_Event_Mask. 0x01 : kontroler Bluetooth nie powinien zgłaszać zdarzenia HCI Mode_Change do hosta. |
Suppress_Sniff_Subrating_Event |
1 oktet | 0x00 : kontroler Bluetootha powinien zgłaszać hostowi zdarzenie HCI Sniff_Subrating, z zastrzeżeniem konfiguracji ustawionej w poleceniu HCI_Set_Event_Mask. 0x01 : kontroler Bluetootha nie powinien zgłaszać hostowi zdarzenia HCI Sniff_Subrating. |
WriteSniffOffloadParameters
OCF: 0x311
| Parametr polecenia | Rozmiar | Cel |
|---|---|---|
Connection_Handle |
2 oktety | 16-bitowy uchwyt połączenia ACL BR/EDR. Zakres: 0x0000–0x0EFF |
Sniff_Max_Interval |
2 oktety | – Zakres zdefiniowany przez Bluetooth SIG, zwykle używany do przejścia w tryb nasłuchu. Zakres: 0x0002–0xFFFE; tylko wartości parzyste są prawidłowe. Zakres obowiązkowy: 0x0006–0x0540. Czas = N × 0,625 ms. Zakres czasu: 1,25 ms–40,9 s. Przypadki specjalne : 0x0000 – służy do wybierania trybu „Push-Active” Sniff-Offload. 0x0001 : służy do wyboru trybu „Prefer-Active” Sniff-Offload. |
Sniff_Min_Interval |
2 oktety | Zakres: 0x0002–0xFFFE; tylko wartości parzyste są prawidłowe. Zakres obowiązkowy: 0x0006–0x0540 Czas = N × 0,625 ms Zakres czasu: 1,25 ms–40,9 s |
Sniff_Attempts |
2 oktety | Liczba przedziałów czasu odbioru pasma podstawowego dla próby wykrywania. Długość = N × 1,25 ms Zakres: 0x0001–0x7FFF Zakres czasu: 1,25 ms–40,9 s Zakres obowiązkowy dla kontrolera: 1 – T*sniff* ÷ 2 |
Sniff_Timeout |
2 oktety | Liczba przedziałów odbioru pasma podstawowego dla limitu czasu wyrywania. Długość = N × 1,25 ms Zakres: 0x0000–0x7FFF Zakres czasu: 0 ms–40,9 s Obowiązkowy zakres dla kontrolera: 0–0x0028 |
Link_Inactivity_Timeout |
2 oktety | Wartość limitu czasu w milisekundach. Licznik Link_Inactivity jest uruchamiany lub resetowany przy każdej transakcji HCI-ACL. Po upływie tego czasu kontroler rozpoczyna przejście do trybu Sniff. |
Subrating_Max_Latency |
2 oktety | Parametr Maksymalne opóźnienie służy do obliczania maksymalnej podprędkości nasłuchiwania, jakiej może używać urządzenie zdalne. Domyślnie: T*sniff* Latency = N × 0,625 ms (1 gniazdo pasma podstawowego) Zakres: 0x0002–0xFFFE Zakres czasu: 1,25 ms–40,9 s |
Subrating_Min_Remote_Timeout |
2 oktety | Minimalny czas oczekiwania w trybie nasłuchiwania (T*sniff_mode_timeout*), którego może używać urządzenie zdalne. Wartość domyślna: 0x0000 Czas oczekiwania = N × 0,625 ms (1 gniazdo pasma podstawowego) Zakres: 0x0000–0xFFFE Czas Zakres: 0–40,9 s |
Subrating_Min_Local_Timeout |
2 oktety | Minimalny limit czasu trybu nasłuchiwania (T*sniff_mode_timeout*), którego może używać urządzenie lokalne. Wartość domyślna: 0x0000 Timeout = N × 0,625 ms (1 gniazdo pasma podstawowego) Zakres: 0x0000–0xFFFE Czas Zakres: 0–40,9 s |
Allow_Exit_Sniff_On_Rx |
1 oktet | Flaga kontrolująca wyjście z trybu nasłuchiwania w przypadku transakcji HCI-ACL w kierunku odbioru. 0x00 : nie zamykaj funkcji sniff po odebraniu pakietu. 0x01 : Exit Sniff on Rx Receive-direction HCI-ACL jest zdefiniowany jako przesyłanie pakietów ACL z kontrolera do hosta przez HCI. |
Allow_Exit_Sniff_On_Tx |
1 oktet | Flaga kontrolująca wyjście z trybu nasłuchiwania w przypadku transakcji HCI-ACL w kierunku transmisji. 0x00 : nie zamykaj funkcji sniff podczas transmisji. 0x01 : Exit Sniff on Tx Transmit-direction HCI-ACL is defined as ACL packet transmission from host to controller over HCI. |