logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Czy komuś udało się sprawić, by bezprzewodowa koegzystencja działała na dowolnym module Tuya w OpenB

jitsirakowsk 24 Lut 2026 22:05 690 14
REKLAMA
Treść została przetłumaczona angielski » polski Zobacz oryginalną wersję tematu
  • #1 21847888
    jitsirakowsk
    Poziom 7  
    Posty: 17
    Pomógł: 2
    Ocena: 10
    Większość modułów Tuya ma jedną antenę, więc istnieją sztuczki niezbędne do jednoczesnego działania Bluetooth i WiFi. Zarówno chipy N, jak i T Beken (7231) mają sprzęt, który ma sprawić, że będzie to działać (arbiter bezprzewodowy itp.), ale nie mogłem znaleźć żadnych wskazówek dotyczących minimalnej konfiguracji. Nasza mała grupa planuje w tym roku uczyć laboratorium na temat BLE i inżynierii wstecznej i staraliśmy się, aby niektóre podstawy działały, zanim rzucimy je naszym niczego niepodejrzewającym studentom :) . Każda pomoc, wskazówki są mile widziane!

    Andy
  • REKLAMA
  • #2 21848253
    jitsirakowsk
    Poziom 7  
    Posty: 17
    Pomógł: 2
    Ocena: 10
    >>21847988 Dzięki! Patrzyliśmy na układy z serii BK7231 (N i T). Ten SDK ma również funkcje do tego celu, ale nie jest jasne, jak je wywołać ani jakie parametry ustawić, jeśli w ogóle. Z pewnością wiąże się to z pewnymi kosztami (zakładam, że zarówno BLE, jak i WiFi musiałyby zwolnić, a liczba porzuconych pakietów wzrosłaby, ale w przypadku urządzeń IoT powinno to być w porządku). W każdym razie, jeszcze raz dzięki; jeśli ktoś wie więcej, będziemy wdzięczni!

    Andy
  • REKLAMA
  • #4 21853734
    jitsirakowsk
    Poziom 7  
    Posty: 17
    Pomógł: 2
    Ocena: 10
    >>21850071 Wygląda to naprawdę obiecująco, ale nie jestem pewien, na co patrzę. Czy mam rację zakładając, że mogę to zbudować z widelca https://github.com/NonPIayerCharacter/OpenBK7231T_App? Czy muszę określić cel BK7231N_ALT? Z jakiegoś powodu nikt z nas tutaj nie może sprawić, by system kompilacji działał (domyślam się, że jest on mocno zależny od systemu Windows, do którego nikt z nas nie ma dostępu), więc musimy najpierw usunąć większość skryptów, aby dostać się do pliku Makefile, dlatego pytam. Ponadto, czy jest szansa, że będzie to działać na wersji BK7231T, ponieważ to jest to, co mamy dla studentów do zabawy? W każdym razie, dzięki, wygląda świetnie!
  • #5 21853742
    DeDaMrAz
    Poziom 22  
    Posty: 602
    Pomógł: 34
    Ocena: 129
    @jitsirakowsk

    śledź ten wątek, o którym wspomniałem wcześniej, mam gotowy lokalny system kompilacji za pośrednictwem dockera, który musi zostać przetestowany na Linuksie, abyś mógł go szybko zbudować. BT współistnieje, a niektóre ciężkie prace rozwojowe i testy są w drodze, ale na razie początkowy cel został osiągnięty - BT działa na N ( i myślę, że T również + inne platformy, ponieważ taki jest cel tego projektu) działa, współistnieje i z dalszymi ulepszeniami. Zachęcamy do wyrażania opinii i zadawania pytań, ponieważ jest to ogromny kamień milowy dla naszego projektu, ale możemy go wykorzystać w inny sposób niż zamierzałeś, więc nie krępuj się zaangażować, a my to zrobimy.
  • #6 21853774
    insmod
    Poziom 31  
    Posty: 1388
    Pomógł: 164
    Ocena: 432
    Jaki dokładnie jest problem z budowaniem?
    To tylko Linux, jedyne co jest potrzebne do zbudowania ALT to make i gcc (najlepiej systemowy arm-none-eabi gcc z ubuntu 22.04 (10.3))
    cd do sklonowanego repo aplikacji i po prostu wpisz "make OpenBK7231N_ALT VARIANT=btproxy"

    Wdrażane jest tylko skanowanie, bez aktywnych połączeń.
    Wyłapane reklamy są następnie przekazywane do Home Assistant za pośrednictwem ESPHome API.
    Rozszerzone reklamy nie są obsługiwane, podobnie jak LE Coded.

    BK7231T nie jest obsługiwany (nie obsługuje biblioteki ble 5.x), tylko N i 7238. Przynajmniej na razie.

    @DeDaMrAz myślisz, że lepiej byłoby użyć biblioteki nanopb, zamiast tego jak jest teraz?
  • #7 21853775
    DeDaMrAz
    Poziom 22  
    Posty: 602
    Pomógł: 34
    Ocena: 129
    insmod napisał:
    Czy uważasz, że lepiej byłoby użyć biblioteki nanopb, zamiast tego, jak jest teraz?


    Wciąż się nad tym zastanawiam, nie mam jasnego pomysłu jak i do czego wykorzystać BT na OBK - brakuje mi kierunku w głowie. Muszę się nad tym jeszcze trochę zastanowić.
  • #8 21854100
    jitsirakowsk
    Poziom 7  
    Posty: 17
    Pomógł: 2
    Ocena: 10
    >>21853774 Dzięki za wskazówkę, spróbujemy tego. Używaliśmy poleceń powłoki z katalogu głównego repozytorium i nie wydają się one działać dobrze (domyślam się, że w grę wchodzi składnia bash vs zsh vs sh), więc za każdym razem, gdy budujemy, po prostu usuwamy resztę i zostawiamy SDK oraz główny plik Makefile i budujemy go w ten sposób. Nie jestem pewien, dlaczego tak prosty projekt ma tak zawiły system kompilacji (z drugiej strony doceniam trudność obsługi tuzina różnych platform). Dla wyjaśnienia: czy przez repozytorium aplikacji masz na myśli katalog platforms/OpenBK7231N? Jest tak wiele plików Makefile unoszących się między katalogiem głównym a tym, że nie jestem pewien, gdzie jest cel. Chyba zawsze mogę go wyszukać grepem...

    Jeśli chodzi o Bluetooth, mamy BLE działające na T (właściwie również na N, ale jeszcze go nie opublikowałem), przykładowy projekt został opublikowany na tym forum. Choć jest prymitywny, obsługuje reklamy, a także szyfrowane połączenia (wszystko, czego potrzebujesz do tego ostatniego, to aktywacja SM); to, czego nam brakowało, to koegzystencja z WiFi. Nadal nie jestem pewien, patrząc na twój kod, jak to zostało zrobione. Musi być kilka parametrów ustawionych, aby działało płynnie (jak opóźnienie resetu radia). Czy wszystko to jest obsługiwane przez SDK? Gdzieś jest struktura rf_coex_..., ale wszystko, co robi, to ustawianie zasad, bez czasów relaksacji ani niczego innego. Musi to jakoś współdziałać z ustawieniami okna skanowania/interwału (podręczniki CEVA dla ich stosu wspominają o pewnych formułach), ale gdzie to się robi?

    Udało ci się również skonfigurować aktywne skanowanie. Czy sprawdziłeś, czy faktycznie wysyła żądania skanowania i odbiera dane? Musi istnieć wywołanie zwrotne, które robi to po otrzymaniu reklamy. Czy jest to również wykonywane przez kod SDK? Nie znalazłem tego w twoim kodzie, ale mogłem coś przeoczyć. Zawsze pisaliśmy wywołanie zwrotne ręcznie (to wszystko, czym jest aktywne skanowanie, naprawdę, po prostu pytasz, kiedy masz na to ochotę :) ). Mamy jednak grupę chętnych studentów do pisania kodu... :) Ktoś obecnie pracuje nad profilem HID (na razie przez GATT), powiem jej, że masz działający coex, zobaczę, czy uda jej się w ten sposób stworzyć "klawiaturę wifi".

    Świetna robota!

    Andy
  • REKLAMA
  • #9 21854686
    insmod
    Poziom 31  
    Posty: 1388
    Pomógł: 164
    Ocena: 432
    Nie, miałem na myśli główny katalog aplikacji (OpenBK7231T_App)
    Domyślne SDK N i T pochodzą od Tuya i używają ich pliku makefile. Też mam z tym problemy na WSL1.
    OpenBK723xx_ALT buduje się dobrze, ale jak wspomniałem wymaga specyficznego gcc.
    Wywołanie zwrotne jest rejestrowane przez ble_set_notice_cb
    Aktywne skanowanie działa dobrze, otrzymuję nazwę czujnika BTHome, jeśli jest włączony. Nie wiem, czy LE Coded działa, jest wyłączone w SDK i nie mam żadnego urządzenia, które go używa. Nie wiem też, czy rozszerzone reklamy działają.
    Coex uzyskuje się poprzez ustawienia okna / interwału, ale w ten sposób może przegapić niektóre reklamy.

    RTL8720C/RTL8720D nie pomijają reklam, mogą działać, gdy okno skanowania = interwał

    Pls być świadomy, że prawie nic nie wiem o bluetooth. To pierwszy raz, kiedy coś z tym robię.
  • #10 21854690
    DeDaMrAz
    Poziom 22  
    Posty: 602
    Pomógł: 34
    Ocena: 129
    insmod napisał:
    Proszę mieć świadomość, że prawie nic nie wiem o bluetooth. To pierwszy raz, kiedy coś z tym robię.


    Chcę to również powtórzyć, wszystko to jest wysoce eksperymentalne i mocno WIP!
  • REKLAMA
  • #11 21855295
    jitsirakowsk
    Poziom 7  
    Posty: 17
    Pomógł: 2
    Ocena: 10
    >>21854686 Dziękuję za informację. Przepraszam za głupie pytanie, ale patrzę na kod w hal_bt_proxy_bk7231.c (czy to właściwe miejsce?) Powiedziałeś, że zarejestrowałeś wywołanie zwrotne za pomocą ble_set_notice_cb, więc widzę wywołanie ble_set_notice_cb(hal_bt_gap_callback), ale patrząc na to, co robi hal_bt_gap_callback, widzę tylko przetwarzanie odebranych danych reklamowych. Nie uruchamia żadnych żądań skanowania. Nazwa urządzenia, MAC itp. byłyby wysyłane w każdym pakiecie reklamowym; nie powinno być potrzeby aktywnego skanowania. Zastanawiam się więc, co robi aktywne skanowanie i jak wysyłane są żądania skanowania. Czy jest ono wykonywane automatycznie przez stos? Nie mam pod ręką urządzenia N, aby to sprawdzić, ale czy otrzymujesz jakiekolwiek informacje reklamowe, dla których info->evt_type&0x7==3 (co oznacza, że jest to odpowiedź na żądanie skanowania, a nie tylko standardowe PDU reklamowe)?

    insmod napisał:
    Proszę mieć świadomość, że prawie nic nie wiem o bluetooth. To pierwszy raz, kiedy coś z tym robię.


    To prawdopodobnie działa na twoją korzyść bardziej, niż ci się wydaje :) Mamy grupę ludzi całkiem obeznanych z BLE i wszyscy mają minę jelenia, gdy czytają kod Bekena (lub, nie daj Boże, Tuya) BLE. Dzięki za wszelką pomoc.

    Andy

    Dodano po 1 [godzinie]:

    >>21854686
    insmod napisał:
    Nie wiem czy LE Coded działa, jest wyłączone w SDK

    Co masz na myśli mówiąc wyłączona w SDK? Funkcja rf_init ustawia parametry PHY (w rejestrze RADIOCNTL2) i nawet stwierdza w komentarzu, że PHY jest ustawiony na obsługę kodowanego PHY. Czy patrzę w niewłaściwe miejsce? Wersja T rzeczywiście w ogóle nie obsługuje kodowanego PHY.
  • #12 21855646
    insmod
    Poziom 31  
    Posty: 1388
    Pomógł: 164
    Ocena: 432
    >>21855295
    Tak, hal_bt_proxy_bk7231.c jest poprawnym plikiem.
    hal_bt_gap_callback przetwarza tylko reklamy, skanowanie musi być uruchomione ręcznie poleceniem BTStartScan w OBK, które wywołuje HAL_BTProxy_StartScan. Następnie skanowanie będzie kontynuowane aż do zatrzymania.

    Nie sądzę, że jest to na moją korzyść, gdy chcę zrobić coś więcej niż tylko odbierać reklamy.
    Próbowałem zaimplementować aktywne połączenia na RTL8720D, ale tam jest piekło wywołań zwrotnych. Ledwo rozumiem, co robi większość funkcji.

    Aby włączyć skanowanie na kanałach kodowanych LE, należy dodać tutaj GAPM_SCAN_PROP_PHY_CODED_BIT:
    https://github.com/NonPIayerCharacter/beken_f...er/ble/ble_5_1/ble_pub/app/src/app_ble.c#L696
    I GAPM_SCAN_PROP_ACTIVE_CODED_BIT dla aktywnego skanowania.

    T nie obsługuje kodowania, ponieważ nie obsługuje 5.0.
  • #13 21855763
    jitsirakowsk
    Poziom 7  
    Posty: 17
    Pomógł: 2
    Ocena: 10
    >>21855646
    insmod napisał:
    hal_bt_gap_callback przetwarza tylko reklamy, skanowanie musi być uruchomione ręcznie komendą BTStartScan w OBK, która wywołuje HAL_BTProxy_StartScan. Następnie skanowanie będzie kontynuowane aż do zatrzymania.

    Rozumiem. Chodziło mi o to, że jeśli wykonujesz aktywne skanowanie, powinieneś otrzymywać dwie odpowiedzi dla każdej zeskanowanej reklamy: jedną dla oryginalnego AD PDU i jedną w odpowiedzi na żądanie skanowania (zostało to pierwotnie wprowadzone w celu obejścia 31-bajtowego limitu AD PDU). Jeśli ty (lub raczej ktokolwiek, kogo skanujesz) używasz rozszerzonych reklam, nie ma potrzeby aktywnego skanowania. Musi więc istnieć oddzielne wywołanie zwrotne do uruchamiania żądań skanowania. Domyślam się, że wspomniane bity są ustawione tak, aby komórka BLE czekała na przeskoczenie do następnego kanału reklamowego w celu wysłania żądania skanowania. Jestem tylko ciekawy, czy GAPM w jakiś sposób sam wysyła żądanie, ale nie widzę gdzie.

    insmod napisał:
    Aby włączyć skanowanie na kanałach kodowanych LE, należy dodać GAPM_SCAN_PROP_PHY_CODED_BIT


    Nie widzę nigdzie w bibliotece, że ustawienie tego bitu cokolwiek robi. Jest to enum, więc informacje debugowania dla biblioteki powinny mieć zapis (chyba że twórcy Beken są naprawdę źli), ale nie widzę go nigdzie w zdemontowanych źródłach. Istnieje również kilka innych ustawień _CODED; Zastanawiam się, czy one również powinny być ustawione.[

    quote="insmod,post=21855646"]tam jest piekło oddzwaniania.

    Bez żartów! Doceniam całą twoją ciężką pracę nad tym. Jestem również ciekawy, dlaczego zdecydowałeś się zacząć od skanowania (innego niż do celów wykrywania). Konfigurowanie połączeń dla urządzeń peryferyjnych powinno być nieco łatwiejsze (mamy przynajmniej kod dla T, a jak tylko zdobędziemy coś do przetestowania kodu N, powinniśmy to mieć). Ciężka praca polega na konfigurowaniu profili i obsłudze zdarzeń itp. W przypadku centrów (tych skanujących) trzeba by zaimplementować wykrywanie, parowanie itp. Samo myślenie o tym przyprawia mnie o dreszcze...

    Andy
REKLAMA