rezasurmar napisał(a):
Mirku mam nadzieje, że zależnościami czasowymi aż tak nie będę się musiał przejmować.
Tzn o tym (wydaje mi się), że będziesz musiał pomyśleć ... i już tłumaczę dlaczego
tzn wiem że parsowanie masz już obcykane i super ... ale rozmowa z modemami za pomocą komend AT wymaga czy tego chcesz czy nie chcesz timeoutów. Tzn o ile chcesz to zrobić dobrze .... Bo fakt można to pominąć ... i jakoś tam na sztywno gadać z modemem ...
to jednak pragnę zwrócić uwagę na pewien fakt, który po jakimś czasie zacznie (chyba jak każdemu kto zaczyna tą zabawę) spędzać czas z oczu, przyprawiać o siwe włosy albo ich utratę przez wyrywanie sobie z głowy ...
do rzeczy ...
1. rozważmy taki przypadek - wysyłasz polecenie AT i .... kurka wodna nie dostajesz ŻADNEJ odpowiedzi
... i na co wtedy zda się całe parsowanie ?
.... pomyśl co się w takich sytuacjach może dziać ... i nie zakładaj, że tobie się one nigdy nie pojawią. Albo że to są tylko jakieś strachy na lachy - bo to nie jest straszenie tylko zwrócenie uwagi na pierwszy podstawowy aspekt każdej ASYNCHRONICZNEJ i dobrze obsłużonej komunikacji. Zwykle osoby zaczynające zabawę w komunikację komendami AT ale w kierunku DO MODEMU na tym łamią pierwsze zęby
2. drugi przypadek to standardowy komunikat ERROR w komedach AT, który wymaga czasem niezłych rozgałęzień w programie
tu też zaczyna się często HARDCORE ... bo taki niewinny napis ERROR trzeba np czasem obsłużyć w ten sposób aby ponownie wysłać komendę (o ile pewni jesteśmy jej składni) a do tego przewidzieć po drodze to co wyżej w pkt.1 czyli TimeOUT
3. kolejny przypadek to np odpowiedzi z modemu gdy nadlatuje UWAGA! może się z tym jeszcze nie spotkałeś - PACZKA STRINGÓW hmmm może inaczej LISTA STRINGÓW ... a dopiero na samym końcu komunikat "OK" - to jest "smakowity kąsek" do kodowania
Generalnie gdy oprogramowuje się to na PC, gdzie człowiek ma pod ręką sprzętowe WĄTKI - to jest dużo łatwiej ... a tu? ... a tu trzeba się troszkę namęczyć
a pewnie (odnoście pkt nr.1) nie chciałbyś mieć takiej sytuacji, że kiedyś urządzenie zrobi totalną zwiechę bo po wysłaniu AT+COŚTAM będziesz czekał na odpowiedź ...
I to miałem na myśli pisząc o zależnościach czasowych - stąd moja sugestia aby od razu myśleć o tym - tak zawczasu, bo później przerobić program - oj będzie ciężko ...
co więcej - żeby dobrze się dogadywać z modemem to gdy zdarzy się TimeOUT zawsze warto co najmniej 3 razy powtórzyć wysłanie tego samego polecenia i dopiero po kilku powtórzeniach timeoutu ostatecznie podjąć decyzję w programie o tym, że mamy jakąś awarię ... choć nie zawsze musi to oznaczać awarii całego modemu - tylko jakiejś jego części że tak powiem ...
No generalnie dużo można by pisać o tym jakie są sposoby podejść do komunikacji za pomocą komend AT
ale na pewno te przeróżne wyrywkowe pokazywane przykłady czy to w internecie czy w niektórych publikacjach - często w ogóle nie poruszają tego bardzo ważnego zagadnienia i później mamy taki efekt, że ktoś coś zrobi ... i pojawiają się kłopoty z których nawet nie wiadomo jak wybrnąć ... dopiero długa żmudna analiza i praca z tym umożliwia dojście do takich wniosków. A jest to o tyle niewdzięczna analiza
że niestety takiego głupiego Timeouta nie uda się wywołać na zamówienie szczególnie podczas próby odbioru nagle dużej ilości danych - bo tu bywają one najgorsze.
wiem wiem ... może to co piszę to trochę takie masło maślane ... i wygląda jakbym się mądrzył czy straszył czymś .... co przecież zwykle w takich prostych testach prawie nigdy się nie zdarza. No ale ... kurczę na prawdę uważam, że jest to zagadnienie warte uwagi i przemyślenia chociaż ... I to właśnie to podejście chcę sam sobie usystematyzować - jak się uda to wtedy będę w stanie to dokładnie opisać i w kodach pokazać - a na razie tylko sygnalizuję.