BTW mam jeszcze jedno pytanie o obsługę bufora odbiorczego.
Mianowicie jak uniknąć sytuacji, kiedy jakiś błąd transmisji (np. przeinaczony znak) uniemożliwi jego normalne wyczyszczenie? Normalnie w tym przypadku mamy do czynienia z dwiema sytuacjami:
- Wysyłanie polecenia do modułu i oczekiwanie na odpowiedź. Tutaj mogę wyczyścić bufor przed rozpoczęciem tej procedury i przed jej zakończeniem (bez względu na to, czy wynik będzie pozytywny czy nie).
- Bardziej kłopotliwa jest jednak druga sytuacja, mianowicie oczekiwanie na konkretną wiadomość, wysłaną przez moduł w przypadku konkretnego zdarzenia (np. "RING\r\n\r\n" przy połączeniu przychodzącym) tutaj bufor mogę wyczyścić dopiero w przypadku rozpoznania właściwej komendy. A co, jeśli do bufora przyjdzie coś innego? Wtedy po prostu kolejny komunikat zostanie do niego doklejony...
Poprzednio, gdy analizowałem komunikaty linijka po linijce, przepisując je do innej tablicy ten problem nie występował - przyjście kolejnej linijki czyściło bufor z jego poprzedniej zawartości.
Czy istnieje jakiś sposób na nauczenie programu rozróżniania poszczególnych komunikatów jako odrębnych całości, nawet jeśli składają się z kilku linii? Jedyne rozwiązanie jakie w tej chwili przychodzi mi do głowy, to zastosowanie timera, który cyklicznie czyściłby bufor, zapobiegając "sklejeniu" dwóch komunikatów.