-
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
- Dalekopis T100 - problem z powrotem karetki
- Diody LED - oświetlenie na choinkę
- ale wiesz, że są gotowce?
- jak wykryć zapalenie żarówki?
- Cyna dylemat
- Mierniki poziomu glukozy (CGM, FGM)
- A Szwajcarzy kombinują tak: FinalSpark grows human neurons from stem cells and connects them to electrode arrays
- Kontrola nad prądem - sprawdź jak działa [apka - przyp. JMJ] eLicznik
- NETIA i hasło logowania
- Modulacja FM
- Najgorszy język programowania
- Kol. sukces po polsku: firma Szumisie sp. z o.o.
- Chińska Telefonia 6G - Chcą Nas Sterować Elektrycznie - Jak Kukiełki w Teatrze Lalek!!!
- RS-485 ale automatycznie dwukierunkowy
- Leżakujące SSD gubią po roku dane
Najnowsze wątki
- 2025-12-22 Unijne KOOOORWY mówią że WYCOFUJĄ się z zakazu rejestracji elektryków
- 2025-12-22 Białystok => ERP Microsoft Dynamics 365 Commerce Consultant <=
- 2025-12-22 Lublin => Project Manager <=
- 2025-12-22 Warszawa => Project Manager (AI and innovation) <=
- 2025-12-22 TVN oczekuje: Za Ziobrem BĘDZIE czerwona nota Interpolu! Czy może Interpol da drugi raz (w) dupę? ;-)
- 2025-12-21 Norweski przepis na pozbywanie się uchodźców odwiedzających kraj z którego "uciekli"
- 2025-12-21 UE bierze kredyt na 90GEUR, by przedłużyć wojnę na Ukrainie, w tym Polska 4-5%, czyli od 3,6 do 4,5GEUR
- 2025-12-21 Produkcja energii w elektrowniach atomowych
- 2025-12-20 No właśnie
- 2025-12-20 Wy tam w sądach jesteście JESZCZE BARDZIEJ POJEBANI
- 2025-12-20 eksplozja cen i kosztów w Polsce
- 2025-12-20 Dalekopis T100 - problem z powrotem karetki
- 2025-12-20 Diody LED - oświetlenie na choinkę
- 2025-12-20 Bieruń => Junior Dynamics 365 Finance Consultant <=
- 2025-12-20 Warszawa => Senior Frontend Developer (React + React Native) <=




7 pułapek i okazji - zobacz co cię czeka podczas kupna mieszkania na wynajem