Jak już wspominaliśmy w czwartej części tego kursu, standard Bluetooth pozwala na jednoczesną pracę w rolach Central i Peripheral. Telefon jako Central nawiązuje połączenie z płytką deweloperską nRF5340-DK, która wystawia serwis sterowania diodą jako Peripheral. Pilot bądź klawiatura BLE również pracuje w trybie Peripheral, więc to nasza płytka będzie miała za zadanie nawiązać połączenie i subskrybować odpowiednie charakterystyki.
Ponieważ w poprzednim odcinku dość szczegółowo omówiliśmy urządzenia HID oraz cały proces komunikacji z nimi, teraz skupimy się na zastosowaniu tej wiedzy w praktycznej implementacji.
Konfiguracja płytki
Zaczniemy od rekonfiguracji projektu w pliku prj.conf.
Dodane opcje konfiguracyjne CONFIG_BT_MAX_CONN i CONFIG_BT_MAX_PAIRED zwiększą liczbę możliwych połączeń. Co prawda przewidujemy obsługę tylko jednego urządzenia HID, ale będziemy mogli sparować się z więcej niż jednym telefonem.
Następnie włączamy moduł GATT Discovery Manager, który upraszcza proces odkrywania serwisów i charakterystyk GATT oraz zwiększamy domyślną liczbę atrybutów, które powinien obsłużyć, do 128.
Dalej włączamy obsługę modułu skanowania BLE, który umożliwia detekcję urządzeń w otoczeniu wraz z możliwością zastosowania filtrów. Będziemy wykrywać urządzenia HID na podstawie rozgłaszanego przez nie identyfikatora serwisu HID.
Włączenie modułu HOGP (HID over GATT Profile) zautomatyzuje proces subskrybowania charakterystyk urządzenia HID.
Ostatnia opcja zwiększa liczbę kanałów komunikacyjnych z niższymi warstwami stosu BLE do wartości zalecanej w przypadku urządzeń HID.
Jak już wiemy, mikrokontroler nRF5340 ma dwa rdzenie Arm® Cortex®-M33: jeden aplikacyjny i jeden sieciowy (Bluetooth). Musimy jeszcze poinformować część sieciową o większej liczbie możliwych połączeń. W głównym katalogu projektu dodajemy katalog „child_image”, a w nim plik „hci_ipc.conf” zawierający tylko jedną linijkę: