-
Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!2.eu.feeder.erj
e.net!3.us.feeder.erje.net!feeder.erje.net!usenet.blueworldhosting.com!feed1.us
enet.blueworldhosting.com!peer02.iad!feed-me.highwinds-media.com!peer02.ams1!pe
er.ams1.xlned.com!news.xlned.com!peer01.ams4!peer.am4.highwinds-media.com!news.
highwinds-media.com!newsfeed.neostrada.pl!unt-exc-02.news.neostrada.pl!unt-spo-
a-02.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail
User-Agent: NewsTap/5.5 (iPhone/iPod Touch)
Cancel-Lock: sha1:6g++UMGL1KLId+MNMHUX7h5reKk=
Newsgroups: pl.misc.elektronika
Message-ID: <62f16b62$0$472$65785112@news.neostrada.pl>
Subject: Re: Biblioteka MQTT i dziwny kod w C
Content-Type: text/plain; charset=UTF-8
Mime-Version: 1.0
Content-Transfer-Encoding: 8bit
From: jacek <j...@f...pl>
References: <62f14473$0$544$65785112@news.neostrada.pl>
Date: 08 Aug 2022 20:00:34 GMT
Lines: 59
Organization: Telekomunikacja Polska
NNTP-Posting-Host: 31.0.58.192
X-Trace: 1659988834 unt-rea-a-02.news.neostrada.pl 472 31.0.58.192:23126
X-Complaints-To: a...@n...neostrada.pl
X-Received-Bytes: 4023
Xref: news-archive.icm.edu.pl pl.misc.elektronika:773699
[ ukryj 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
- Akumulatorki Ni-MH AA i AAA Green Cell
- Dławik CM
- JDG i utylizacja sprzetu
- Identyfikacja układ SO8 w sterowniku migających światełek choinkowych
- DS1813-10 się psuje
- Taki tam szkolny problem...
- LIR2032 a ML2032
- SmartWatch Multimetr bezprzewodowy
- olej psuje?
- Internet w lesie - Starlink
- Opis produktu z Aliexpress
- No proszę, a śmialiście się z hindusów.
- Zewnętrzne napięcie referencyjne LM385 1,2V -> 100mV dla ICL7106, Metex M-3800
- karta parkingowa
- Wl/Wyl (On/Off) bialy/niebieski
Najnowsze wątki
- 2024-12-04 Warszawa => Architekt rozwiązań (doświadczenie w obszarze Java, AWS
- 2024-12-04 Czy policjantów należy ROZBROIĆ?
- 2024-12-03 Tymoteusz Sz.
- 2024-12-03 Re: Prezydent ułaskawia: Prezydent USA Biden (D) ułaskawia syna własnego
- 2024-12-03 Re: Tani dodatkowy sim do smartwacha
- 2024-12-03 Wróblewo => Analityk finansowy <=
- 2024-12-03 Praktyczny test GPS...
- 2024-12-02 Tak się sprzedają elektryczne woldzwageny ;-)
- 2024-12-02 Akumulator do Hyundai
- 2024-12-02 Olsztyn => Sales Specialist <=
- 2024-12-02 Poznań => Technical Artist <=
- 2024-12-02 Bieruń => Regionalny Kierownik Sprzedaży (OZE) <=
- 2024-12-02 Kraków => Business Development Manager - Dział Sieci i Bezpieczeńst
- 2024-12-02 Chrzanów => Team Lead / Tribe Lead FrontEnd <=
- 2024-12-02 Białystok => Delphi Programmer <=