2015-02-03 14 views
5

Mam wbudowany system z serwerem GATT, z którym próbuję się połączyć za pośrednictwem systemu Android. Zadanie jest proste: połączyć się z serwerem GATT, nawigować właściwościami i weryfikować możliwości odczytu/zapisu. Problem polega na tym, że gdy próbuję połączyć się z aplikacją na Androida, próbuje się sparować z "Kluczem dostępu" zamiast z "Tylko działa" [https://developer.bluetooth.org/TechnologyOverview/Pages/LE-Security.aspx]. Jest to niedopuszczalne, ponieważ moje urządzenie wbudowane nie ma żadnej metody wyświetlania klucza do użycia przez użytkownika do parowania. Tak więc metoda połączenia musi być po prostu działa.Jak wymusić działanie Bluetooth LE "Po prostu działa" Parowanie w systemie Android

Próbowałem już wielu aplikacji ze Sklepu Play, a wszystkie próbowały jedynie sparować z kluczem. Ale to jest ten, nad którym pracuję: https://play.google.com/store/apps/details?id=com.macdom.ble.blescanner

Mam to działa przy użyciu aplikacji LightBlue (obsługiwane w systemie OS X i iOS). Tak więc wiem, że działa moje urządzenie peryferyjne (serwer GATT): reklama, możliwość podłączenia, charakterystyka dostępna itd.

Jak zmusić Androida do używania Just Works zamiast parowania z kluczem Passkey? Czy brakuje mi konfiguracji peryferyjnej?

Dzięki

+1

Twoje urządzenie osadzające powinno reklamować odpowiednią zdolność IO podczas fazy uwierzytelniania bluetooth. W szczególności powinno to być prawdopodobnie reklamowanie NoInpiutOutput. Sposób wykonania zależy od tego, co masz w systemie wbudowanym. Jeśli na przykład działasz pod Linuksem, wówczas agent, który jest dostarczany z bluezem, może być uruchomiony w następujący sposób: test-agent -c NoInputNoOutput – kaylum

+0

@kaylum Co to jest ** test-agent **, czy jest to polecenie? –

+1

@IgorGanapolsky test-agent to przykładowy kod agenta dostarczany z bluezem. Został przemianowany na "prosty-agent". Kod źródłowy [tutaj] (https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/test/simple-agent) – kaylum

Odpowiedz

3

korzeniem problemu był tryb interfejsu Linux był w. Urządzenia Bluetooth, które obsługują zarówno BR/EDR (Classic) i Le domyślnie są w dwóch trybach. Oznacza to, że mogą działać jako urządzenia klasyczne lub LE. Nie mam wglądu w interfejs API Androida i nie próbowałem opracować aplikacji na Androida, która może wykryć urządzenie z dwoma trybami i wybrać połączenie jako LE z parowaniem Just Working. Ale udało mi się wyłączyć BR/EDR na interfejsie i potwierdzić, że Android wykrył go podczas skanowania jako interfejs tylko LE (jednomodowy). Aplikacja na Androida połączyła się bezproblemowo za pomocą parowania Just Working.

Oto jak ja wyłączone BR/EDR na interfejsie:

$ sudo hciconfig hci0 down 
$ sudo ./btmgmt bredr off 
hci0 Set BR/EDR complete, settings: connectable bondable le 
$ sudo hciconfig hci0 up 
$ sudo hciconfig hci0 leadv 

można zbudować btmgmt aplikacji w systemie Linux, pobierając i budowania bluez. Aplikacja btmgmt jest budowana warunkowo na parametrze konfiguracyjnym --enable-experimental.

AKTUALIZACJA: Inne podejście zamiast modyfikować możliwości interfejsu, wystarczy zmodyfikować możliwości nadawania interfejsu. Odbywa się to za pośrednictwem flag reklamowych. Zmodyfikuj flagi, aby nadawać, że BR/EDR nie jest obsługiwane. To jest bit 2 i tworzy transmisję flag o wartości 0x04. (Patrz Bluetooth SIG doc CSS v4: Część A, Rozdział 1.3.2)

+0

Cieszę się, że to działa. Ale nie jestem pewien, czy wyjaśnienie ma sens. Ponieważ klasyczny bluetooth obsługuje również parowanie Just Works. Wygląda na to, że problem został przesunięty, a nie rozwiązany. – kaylum

+1

Nie chodzi o BR/EDR wspierający Just Works. Pracuję z aplikacjami Play Store na Androida, które domyślnie łączą się z kluczem Passkey. Jedynym sposobem, w jaki mogę je uruchomić, jest to, czy interfejs jest w trybie pojedynczym (tylko LE). Jest możliwe, że można to kontrolować za pomocą interfejsu API Androida, ponieważ nie mam takich samych problemów z aplikacjami na iOS. Ale miałem po prostu zadanie z osadzoną stroną rzeczy. A ponieważ będzie to urządzenie LE-only.Warto reklamować, że BR/EDR nie jest obsługiwany. – linsek

+0

Przez "Zmodyfikuj flagi do nadawania, że ​​BR/EDR nie jest obsługiwany", czy miałeś na myśli modyfikowanie ich na urządzeniu zdalnym lub w systemie Android? Czy to była poprawka po stronie Androida? – GPS

Powiązane problemy