A ja odpisałem z grzeczności i napisałem ze esp32 to rozsądny wybórkrycha88 wrote: Mon Jan 13, 2020 9:15 amlinka wrzuciłem jako ciekawostkaklew wrote: Mon Jan 13, 2020 8:57 amESP32 na allegro chodzi po 30 zł. Naprawdę jest sens jeszcze bardziej oszczędzać? Tym bardziej, że mowa tutaj o czymś w rodzaju bramki, więc będzie to raczej jedno takie urządzenie "to rule them all"![]()
![]()
BLE Supla Gateway - wyzwanie dla programistów
-
Beku
- Posts: 453
- Joined: Tue Nov 06, 2018 1:49 pm
-
hZkgZK
- Posts: 52
- Joined: Fri Aug 30, 2019 10:06 am
Spoko pomysł z tą bramką. Akurat ostatnio zrobiłem sobie obsługę Xiaomi Flora https://www.aliexpress.com/item/32841210035.html. Tu mój kod do obsługi urządzenia jakbyście chcieli dodać https://github.com/pikciu/Arduino-Flora. W wolnej chwili zrobie z tego libkę do PlatformIO bo na razie mi się nie chciało
działa od wczoraj na esp32 te labelki trzeba pozmieniac bo taki mix pol-eng słabo wygląda
działa od wczoraj na esp32 te labelki trzeba pozmieniac bo taki mix pol-eng słabo wygląda
You do not have the required permissions to view the files attached to this post.
-
klew
- Posts: 13911
- Joined: Thu Jun 27, 2019 12:16 pm
- Location: Wrocław
- Has thanked: 136 times
- Been thanked: 137 times
Dzięki za udostępnienie projektuhZkgZK wrote: Tue Jan 14, 2020 4:51 pm Spoko pomysł z tą bramką. Akurat ostatnio zrobiłem sobie obsługę Xiaomi Flora
W konstruktorze klasy Flora używasz mało bezpiecznego rozwiązania: https://github.com/pikciu/Arduino-Flora ... ora.cpp#L4
Przypisujesz wskaźnik do ciągu znaków. To się może dość łatwo wysypać w wielu sytuacjach. Taki ciąg znaków powinien być kopiowany
Najlepsze suple dla Twojego domu 
-
hZkgZK
- Posts: 52
- Joined: Fri Aug 30, 2019 10:06 am
Dzięki za code reviewklew wrote: Tue Jan 14, 2020 9:06 pmDzięki za udostępnienie projektuhZkgZK wrote: Tue Jan 14, 2020 4:51 pm Spoko pomysł z tą bramką. Akurat ostatnio zrobiłem sobie obsługę Xiaomi Flora
W konstruktorze klasy Flora używasz mało bezpiecznego rozwiązania: https://github.com/pikciu/Arduino-Flora ... ora.cpp#L4
Przypisujesz wskaźnik do ciągu znaków. To się może dość łatwo wysypać w wielu sytuacjach. Taki ciąg znaków powinien być kopiowany
-
klew
- Posts: 13911
- Joined: Thu Jun 27, 2019 12:16 pm
- Location: Wrocław
- Has thanked: 136 times
- Been thanked: 137 times
WhZkgZK wrote: Tue Jan 14, 2020 9:19 pm Dzięki za code reviewjak powinno być poprawnie? na codzień zajmuję się programowaniem na iOS (Swift) i do c++ mi daleko
![]()
Code: Select all
char *Najprościej jest zrobić w klasie Flora zmienną
Code: Select all
char address[MAX_SIZE_OF_ADDRES];Najlepsze suple dla Twojego domu 
-
hZkgZK
- Posts: 52
- Joined: Fri Aug 30, 2019 10:06 am
A czy const nie zabezpiecza mnie przed tym, że w tym miejscu w pamięci coś mi nadpisze dane? O ile dobrze rozumiem odpowiedz https://stackoverflow.com/questions/983 ... r/47300995 to właśnie tak jest. Mam wskaźnik na niemodyfikowany ciąg znaków. Wskaźnik mam zapamiętany w klasie Flora i dopóki go "nie przesunę" będzie on wskazywać na ten sam obszar w pamięci, a obszar ten jest "zarezerwowany" przez const i nie można go zmienić. Tak to rozumiem ale bardzo możliwe że jestem w błędzieklew wrote: Tue Jan 14, 2020 9:34 pmWhZkgZK wrote: Tue Jan 14, 2020 9:19 pm Dzięki za code reviewjak powinno być poprawnie? na codzień zajmuję się programowaniem na iOS (Swift) i do c++ mi daleko
jest trzymany wskaźnik do miejsca w pamięci zawierającego jeden bajt (char). Twój aktualny kod po prostu kopiuje ten adres w pamięci. Gdy więc stworzysz instancję klasy Flora przekazując ciąg znaków w jakimś obiekcie tymczasowym, to później ta klasa może się odwoływać do pamięci, w której mogą być już inne dane.Code: Select all
char *
Najprościej jest zrobić w klasie Flora zmiennąi kopiować dane np. funkcją strncpy (http://www.cplusplus.com/reference/cstring/strncpy/)Code: Select all
char address[MAX_SIZE_OF_ADDRES];
W każdym razie chyba nie ma co zaśmiecać tematu ale jak Ci się chce dalej mi to tłumaczyć to jest priv
-
klew
- Posts: 13911
- Joined: Thu Jun 27, 2019 12:16 pm
- Location: Wrocław
- Has thanked: 136 times
- Been thanked: 137 times
To tak tylko dla potomnych napiszę, że nie, to Cię przed niczym nie zabezpieczahZkgZK wrote: Tue Jan 14, 2020 9:49 pm A czy const nie zabezpiecza mnie przed tym, że w tym miejscu w pamięci coś mi nadpisze dane? O ile dobrze rozumiem odpowiedz https://stackoverflow.com/questions/983 ... r/47300995 to właśnie tak jest. Mam wskaźnik na niemodyfikowany ciąg znaków. Wskaźnik mam zapamiętany w klasie Flora i dopóki go "nie przesunę" będzie on wskazywać na ten sam obszar w pamięci, a obszar ten jest "zarezerwowany" przez const i nie można go zmienić. Tak to rozumiem ale bardzo możliwe że jestem w błędzie
W każdym razie chyba nie ma co zaśmiecać tematu ale jak Ci się chce dalej mi to tłumaczyć to jest priv![]()
"const" informuje kompilator, aby nie pozwalał Tobie modyfikować zawartości wskazywanej przez ten wskaźnik.
Natomiast nic nie stoi na przeszkodzie, aby inne częsci programu coś po tej pamięci pisały, gdy dostaną taki przydział (a to się może zdarzyć).
Dalej możemy ciągnąć tego offtopa na priv
Najlepsze suple dla Twojego domu 
-
pzygmunt
- Posts: 20302
- Joined: Tue Jan 19, 2016 9:26 am
- Location: Paczków
- Been thanked: 59 times
Używając strncpy zwróć uwagę na problem możliwego skopiowania ciągu znaków bez nulla na końcu. Jeśli nie użyjesz tej funkcji świadomie to możesz mieć problem z uzyskaną kopią.
Dla bezpieczeństwa użyj snprintf do skopiowaniu ciągu lub jeśli już użyjesz strncpy to po jego wystąpieniu
wykonaj
dest[sizeof(dest)-1] = 0;
Dla bezpieczeństwa użyj snprintf do skopiowaniu ciągu lub jeśli już użyjesz strncpy to po jego wystąpieniu
wykonaj
dest[sizeof(dest)-1] = 0;
SUPLA.... Nareszcie w domu.
-
Beku
- Posts: 453
- Joined: Tue Nov 06, 2018 1:49 pm
Się dowiedziałem że te nowe kwadratowe czujniki mają zakodowane komunikaty.
Są już rozkodowane ale trzeba je inaczej obsłużyć
https://github.com/custom-components/se ... ZDCgB8EEEU
Te okrągłe podobno wysyłają czystym tekstem.
Są już rozkodowane ale trzeba je inaczej obsłużyć
https://github.com/custom-components/se ... ZDCgB8EEEU
Te okrągłe podobno wysyłają czystym tekstem.
