Wysyłamy do modemu nasz przekodowany tekst, po nim znak 1A szesnastkowo (CTRL Z), czekamy na odpowiedź modemu co z tym naszym smsem zrobił, zamykamy otwarty na początku port szeregowy (lock zostanie zdjęty), zamykamy plik logu i kończymy działanie:
write (fd2, buf , strlen(buf)); write (fd2, "\x1a", 1); checkresp(); close(fd2); } //od open fd fclose(fp); } //od main
Funkcje checkok() i checkprompt() chyba nie wymagają specjalnego opisu, checkresp() jednak o parę słów komentarza się prosi. Odbiera ona odpowiedź modemu, co stało się z naszym sms-em i zapisuje tę informację w logu.
Po wysłaniu sms modem odpowie czymś takim:
+CMGS: 200 OK
Trzy linie, w pierwszej numer kolejny wysłanego smsa, druga pusta, w trzeciej rezultat. Niestety komunikaty te mogą się różnić nieznacznie w zależności od modelu modemu, jeśli nie udało się wysłać smsa drugiego i trzeciego wiersza nie będzie...
Tak ogólnie, odbieramy trzy wiersze, kończąc timeoutem jak się nie udało i zapisujemy to do pliku z logiem wysłanych smsów:
W logu znajdzie się coś w tym rodzaju:
2018-07-09 16:49: +48605223344 test | Status: +CMGS: 202 OK
Nie zamieścimy tu zródeł funkcji checkok(), checkprompt(), ani checkresp(), są w zródłowym programie wskazywanym linkiem na stronie 3.
Niczego ciekawego w nich nie ma.
Noże kiedyś jeszcze opiszę trochę bardziej skomplikowany program do wysyłania smsów, taki serwer sms, numer telefonu i treść sms odbiera przez sieć, trochę na wzór opisanego już serwera kamer.