- 
Data: 2022-09-24 17:58:49
Temat: lwIP - odbieranie danych przez TCP
Od: Atlantis <m...@w...pl> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]Chciałem ostatnio popchnąć trochę do przodu jeden ze swoich poprzednich
projektów - sprzętowe radio internetowe o którym pisałem już wcześniej,
tylko tym razem w wersji ze zaktualizowaną częścią hardware'ową.
Poprzednia wersja była tworzona na PIC32, teraz powoli chciałem
przenieść go na STM32.
Większość softu właściwie już przeniosłem, teraz zostało najważniejsze -
przeportowanie samej aplikacji odpowiedzialnej za odtwarzanie streamu z
Internetu. W przypadku biblioteki MLA na PIC32 było to relatywnie
proste. Socket sieciowy dysponuje buforem FIFO o zdefiniowanej
pojemności - do niego trafiają dane przychodzące z serwera. Dane te
pobieram i ładuję do bufora audio. Robię to jednak dopiero wtedy, gdy
sterownik układu VS1003 stwierdzi, że dane są potrzebne.
W przypadku PIC32 było to relatywnie proste. Miałem kilka funkcji:
- TCPIsGetReady() - zwracała liczbę bajtów w buforze
- TCPGetArray() - funkcja zapisywała pod podany adres w pamięci
określoną maksymalną liczbę bajtów z bufora. Zwracała liczbę bajtów,
które w rzeczywistości udało się pobrać.
Sprawa była prosta - wystarczyło albo pobrać wszystkie dostępne dane,
ale (jeśli było ich za dużo) tylko tyle, żeby wypełnić dostępne miejsce.
W tym drugim przypadku nadwyżka pozostawała w buforze gniazda sieciowego
i była sukcesywnie uzupełniania o kolejne przychodzące dane, które
mogłem pobrać wtedy, gdy znów były potrzebne.
Widzę, że w przypadku lwIP (RAW API) sprawa nie jest już tak prosta.
Zamiast tego muszę zarejestrować callback, który jest wołany za każdym
razem, gdy przyjdą nowe dane. Callback otrzymuje w jednym z parametrów
wskaźnik do struct ptr, w której mam m.in.
- void* paylod
- int len
- int tot_len
- struct pbuf* next
Istnieje więc możliwość, że wszystko co będę musiał zrobić to pobranie
skopiowanie len bajtów spod adresu na który wskazuje payload. Istnieje
jednak szansa, że danych jest więcej - wtedy tot_len > len i kolejnej
porcji danych trzeba szukać w kolejnej strukturze, na którą wskazuje
wskaźnik next.
Jeśli już zakończymy odczytywać dane, trzeba zawołać tcp_recved
informując stos, że czekamy na kolejną paczkę. Tu jeszcze jest wszystko
jasne.
Co jednak w sytuacji, gdy powiedzmy do zakończenia wypełniania bufora
pozostało mi 100 bajtów, a w otrzymanej struct pbuf mam ich 500? Na
PIC32 po prostu pobierałem 100, a reszta czekała na swoją kolej. W jaki
sposób uzyskuje się podobny efekt na lwIP?
 
Następne wpisy z tego wątku
- 24.09.22 18:06 Grzegorz Niemirowski
 - 24.09.22 19:28 Atlantis
 - 25.09.22 13:34 JDX
 - 25.09.22 20:08 Atlantis
 - 25.09.22 20:11 Grzegorz Niemirowski
 - 26.09.22 05:11 a...@m...uni.wroc.pl
 - 26.09.22 09:09 Atlantis
 - 26.09.22 17:33 Atlantis
 - 27.09.22 15:35 J.F
 - 27.09.22 17:12 Mateusz Viste
 - 27.09.22 17:22 Cezar
 - 28.09.22 09:30 Atlantis
 - 28.09.22 09:35 Atlantis
 - 28.09.22 10:52 Mateusz Viste
 - 28.09.22 13:06 Atlantis
 
Najnowsze wątki z tej grupy
- William Shockley, co-inventor of the transistor
 - Gazowy kocioł CO regulacja cyklingu i regulacja pogodowa
 - Zamek elektroniczny
 - szablon do pasty DIY
 - Głośnik potrzebny
 - Silikonowy przewód ekranowany
 - Wtyk bananowy ekranowany
 - Co może być gorsze od pożaru elektryka?
 - daltonizm
 - Mały Linux
 - Superkondensator. Czy to się uda?
 - Stare filmy o technice
 - Zasilanie własnych konstrukcji przez PoE
 - Jak działa domofon?
 - Co oni mierzą miernikiem
 
Najnowsze wątki
- 2025-11-03 Gwarancja na używane AUTO. Czy dziś WARTO?
 - 2025-11-03 Znowu jakiś goooownoprawnik uważający się za KONSTYTUCJONALISTĘ
 - 2025-11-03 ABW już nie blokuje RT.com?
 - 2025-11-03 Czy ROZDANIE KPO śród swoich i nie swoich spowodowało KORZYŚĆ POLITYCZNĄ?
 - 2025-11-03 Warszawa => Starszy Konsultant SAP - obszar PP <=
 - 2025-11-03 Warszawa => International Freight Forwarder <=
 - 2025-11-03 Białystok => Programista React ze znajomością C++ <=
 - 2025-11-03 Warszawa => Generative AI Engineer <=
 - 2025-11-03 Warszawa => Gen AI Engineer <=
 - 2025-11-03 Białystok => Programista Delphi <=
 - 2025-11-03 Warszawa => Spedytor Międzynarodowy <=
 - 2025-11-02 totalna kontrola podatników?
 - 2025-11-02 Trzymacie pieniądze w bankach?
 - 2025-11-02 Bo sędzia prokuratorowi nie odmawia "niezawiśle" [rzepa: wnioski o areszt]
 - 2025-11-02 Michał Wawrykiewicz: "Prokuratura barszczyka bierze pod uwagę również INTENCJE uchwalaczy prawa
 




Elektromobilność dojrzewa. Auta elektryczne kupujemy z rozsądku, nie dla idei