-
Data: 2022-08-08 22:00:34
Temat: Re: Biblioteka MQTT i dziwny kod w C
Od: jacek <j...@f...pl> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]Atlantis <m...@w...pl> wrote:
> Wróciłem ostatnio do jednego ze swoich starych projektów, zrealizowanych
> w oparciu o PIC32. Chciałem dodać do niego jedną dość ważną
> funkcjonalność - możliwość wrzucania danych za pomocą MQTT.
> Udało mi się znaleźć bibliotekę napisaną w oparciu o starzy stos
> Microchipa (biblioteki MLA), który użyłem w swoim projekcie. Zależało mi
> na tym, bo nie chciałem przenosić całego kodu na nowsze biblioteki Harmony.
>
> https://github.com/dominicusplatus/mqttx
>
> Potrzeba było trochę eksperymentów, jednak w końcu udało mi się
> uruchomić bibliotekę. Dość szybko okazało się, że daleko jej do ideału.
> Działa całkiem nieźle, jeśli serwer ma wyłączoną autoryzację, albo w
> pakiecie CONNECT wysyłamy prawidłowy login i hasło.
> Problemy zaczynają się w momencie, gdy próbujemy podać nieprawidłowe
> dane do logowania. Sprawdziłem komunikację Wiresharkiem - serwer
> odpowiada prawidłowo, jednak klient zupełnie to ignoruje, przystępując
> do wysyłania komunikatu. Po paru podejściach powoduje to wykrzaczenie
> programu i reset mikrokontrolera.
>
> Przyjrzałem się bliżej kodowi i znalazłem przyczynę. Podczas parsowania
> pakietu CONNACK wywoływana jest funkcja MQTTReadPacket(), która pobiera
> dane z socketa do bufora MQTTBuffer. Potem jednak kod sprawdza stan stan
> bajtu rxBF[1], gdzie spodziewa się znaleźć Return Code i na jego
> podstawie podjąć decyzję do co dalszego działania.
>
> Problem polega na tym, że w obecnej wersji kodu tablica rxBF nie jest
> nigdzie wykorzystywana. Nie trafiają do niej żadne dane (a więc również
> i pakiet CONNACK) i cały czas znajdują się w niej same zera. Program
> interpretuje więc odczytaną wartość jako Connection Accepted i
> przechodzi do dalszych czynności.
>
> Chciałem się bliżej przyjrzeć funkcji MQTTReadPacket() i tutaj trafiłem
> do króliczej nory. ;)
>
> Okazuje się, że została ona zdefiniowana i zdeklarowana z pustą listą
> parametrów (bez void), podobnie jak to się robi z bezparametrowymi
> funkcjami w C++. Widzę jednak, że w paru miejscach w kodzie funkcja
> przyjmuje parametr w postaci wskaźnika na BYTE, przykładowo:
>
> BYTE llen;
> WORD len= MQTTReadPacket(&llen);
>
> Potem zawartość takiej zmiennej jest wykorzystywana w kodzie jako
> element indeksu tablicy MQTTBuffer - również w tych częściach kodu,
> które działały prawidłowo. Szybkie poszukiwania w internecie ujawniły,
> że możliwość zdeklarowania pustej listy argumentów to historyczna
> zaszłość. Wszyscy przestrzegają przed robieniem tego. Natomiast nigdzie
> nie mogę znaleźć informacji o tym, w jaki sposób to działa i co
> właściwie robią te kawałki kodu. Ktoś ma jakiś pomysł?
>
Nie możesz po prostu poprawić tego kodu.
Ja, implementujące mqtt, po prostu powyginalem jakaś niedorobioną
bibliotekę i będzie git. Przynajmniej w zakresie w jakim tego
potrzebowalem.
jp
Następne wpisy z tego wątku
- 08.08.22 23:43 Atlantis
- 09.08.22 07:13 JDX
- 09.08.22 08:36 Atlantis
- 09.08.22 09:47 Grzegorz Niemirowski
- 09.08.22 10:16 JDX
- 09.08.22 10:29 Atlantis
- 09.08.22 10:53 Atlantis
- 09.08.22 19:13 J.F
- 09.08.22 20:38 Atlantis
- 10.08.22 00:06 Atlantis
- 10.08.22 00:13 JDX
- 10.08.22 09:52 J.F
- 10.08.22 09:59 Grzegorz Niemirowski
- 10.08.22 19:25 Atlantis
- 10.08.22 20:41 heby
Najnowsze wątki z tej grupy
- Czy cos fi przechodzi przez trafo separujące?
- śrubka masy
- Ciekawostka na dziś lock bity
- [OT] napisy w YT
- Było 83V
- Stare komputery
- Odbiornik ADS-B i wzmacniacze
- Thunderbird i dysk...
- opornosc falowa
- Bateria 9V 6F22, alkaliczna v cynkowa, samorozładowanie, bateria wysokiej trwałości do miernika
- Tani zakup z ali?
- w czasach LED komary mają ciężko
- walizka z kodami
- Rejestrator temperatur - termopara, siec
- Router LTE z możliwością zmian MTU
Najnowsze wątki
- 2025-08-06 Białystok => Inżynier oprogramowania .Net <=
- 2025-08-06 "[...] sejmowe wystąpienie posłanki Klaudii Jachiry, która zakończyła je słowami ,,Sława Ukrainie"."
- 2025-08-05 "Chiny przekraczają w wydobyciu 4 mld ton węgla, Indie i USA ponad 1 mld, a Rosja 500 mln ton [...]"
- 2025-08-05 Panuje się 181 159,42 zł./mies. na posła w 2026r.
- 2025-08-05 "Chiny przekraczają w wydobyciu 4 mld ton węgla, Indie i USA ponad 1 mld, a Rosja 500 mln ton [...]"
- 2025-08-05 Czy cos fi przechodzi przez trafo separujące?
- 2025-08-05 kajaki i promile
- 2025-08-05 Re: Tesla jest bezpieczna, wczoraj spaliła się doszczętnie na Ursynowie i nikomu się nic nie stało
- 2025-08-05 Gdynia => Przedstawiciel handlowy / KAM (branża TSL) <=
- 2025-08-05 Re: Atak na lekarza w Oławie. Policja zatrzymała sprawcę na lotnisku Polska Agencja Prasowa 4 sierpnia 2025, 12:16 FACEBOOK X E-MAIL KOPIUJ LINK W szpitalu w Oławie 37-letni pacjent zaatakował lekarza, po tym, jak ten odmówił mu wypisania długoterminowego
- 2025-08-05 B2B i książka przychodów i rozchodów
- 2025-08-04 Re: Atak na lekarza w Oławie. Policja zatrzymała sprawcę na lotnisku Polska Agencja Prasowa 4 sierpnia 2025, 12:16 FACEBOOK X E-MAIL KOPIUJ LINK W szpitalu w Oławie 37-letni pacjent zaatakował lekarza, po tym, jak ten odmówił mu wypisania długoterminowego
- 2025-08-04 Na grupie comp.os.linux.advocacy CrudeSausage twierdzi, że Micro$lop używa SI do szyfrowania formatu dok. XML
- 2025-08-04 Na grupie comp.os.linux.advocacy CrudeSausage twierdzi, że Micro$lop używa SI do szyfrowania formatu dok. XML
- 2025-08-04 Re: International Court of Internet Justice - Internet Project - zapraszam do współpracy i dyskusji