Wysyłanie i odbiór wiadomości SMS

Wysyłanie i odbiór wiadomości SMS

Funkcja SMS (Short Message Service) umożliwia przesyłanie krótkich wiadomości tekstowych pomiędzy aparatami GSM (MS = Mobile Station) z wykorzystaniem Centrum Usług (SC = Service Center). Nadawca wiadomości (ME = Mobile Equipement) przekazuje ją do wysłania do Centrum Usług, inicjując realizację funkcji SMS-SUBMIT. Odbiorca komunikatu (MT = Mobile Terminated) odbiera go korzystając z funkcji SMS-DELIVER. Należy zwrócić uwagę na fakt, że przekazywanie wiadomości zawsze odbywa się za pośrednictwem Centrum Usług (SC) i nadawca nigdy nie ma pewności, czy wiadomość SMS dotarła do adresata, dopóki SC nie prześle zwrotnego potwierdzenia jej odbioru. Wiadomość SMS może zawierać maksymalnie 140 znaków zakodowanych w postaci oktetów, co przy użyciu specjalnej metody kodowania umożliwia przesłanie do 160 znaków ASCII. Niniejszy artykuł to zbiór moich doświadczeń, kompendium nt. działania funkcji SMS i skojarzonych z nią usług sieci.

Pomimo rozwoju Internetu zainteresowanie tak prostym tematem, jak wysyłanie wiadomości SMS bez udziału człowiek, nie słabnie. W tym artykule starałem się zebrać informacje, które już podawałem w innych artykułach i przez to trudne do znalezienia w jednym miejscu. Niniejszy tekst będzie próbą systematyzacji wiadomości oraz wyszczególnienia tych usług sieci GSM, które są związane z wysyłaniem wiadomości SMS. Należą do nich nie tylko funkcje SMS-DELIVER i SMS-SUBMIT, ale również pomiar jakości sygnału, rejestracja w sieci itd.
Komendy AT były praktycznie przetestowane przy użyciu telefonów Siemens C35i oraz ME45. W innych aparatach producenci mogą stosować nieznaczne modyfikacje komend polegające np. na wymogu umieszczenia parametrów wywołania komendy w cudzysłowach. Ponadto, niektóre komendy mogą po prostu być niezaimplementowane.

Ustawienie oraz odczyt parametrów karty SIM i sieci

Aparat GSM (czasami nazywany terminalem ruchomym), aby mógł funkcjonować, po załączeniu musi zalogować się do sieci. Warto w tym miejscu wspomnieć, że w sieciach GSM stacja bazowa uwierzytelnia aparat, natomiast aparat w żaden sposób nie uwierzytelnia stacji bazowej.
Aby zalogować się do sieci, aparat musi spełnić dwa warunki: karta SIM znajdująca się w aparacie musi być aktywna oraz aparat musi znajdować się w zasięgu oddziaływania stacji bazowej operatora właściwego dla karty SIM. Przez „zasięg oddziaływania” rozumiana jest tu moc sygnału docierającego do stopnia wejściowego odbiornika telefonu. Do pomiaru jakości sygnału służy polecenie AT+CSQ. Operacja logowania przeprowadzana jest po wprowadzeniu ważnego kodu PIN.

AT+CPIN: wprowadzanie kodu PIN

Kod PIN (Personal Identification Number) to 4-cyfrowy numer będący cechą karty SIM. Początkowo nadawany jest przez operatora GSM, później może być zmieniony przez użytkownika karty. O ile nie wyłączono żądania kodu PIN, umieszczenie karty w telefonie wiąże się z koniecznością wprowadzenia kodu PIN po załączeniu aparatu. Kod musi być zgodny z tym zapisanym na karcie SIM. Dla większości kart, trzykrotne, błędne podanie numeru PIN spowoduje żądanie wprowadzenia kodu PUK (Personal User Key). Podobnie jak PIN, PUK jest kodem - rodzajem hasła, jednak składającym się z 11 cyfr i trudniejszym do zapamiętania. W praktyce, aby poznać i wprowadzić kod PUK, przeciętny użytkownik musi sięgnąć do dokumentacji dostarczonej przez operatora.

AT+CPIN?    pytanie o status aparatu związany z żądaniem kodu PIN/PUK
+CPIN: SIM PIN       to odpowiedź, jeśli żądanie PIN jest aktywne
AT^SPIC       żądanie przesłanie pozostałej liczby prób wprowadzenia kodu PIN
^SPIC: 3        liczba 3 wskazuje na możliwość 3-krotnego wprowadzenia kodu PIN
AT+CPIN=”9443”     wprowadzenie numeru PIN; na to polecenie telefon odpowiada OK, jeśli numer PIN jest poprawny lub ERROR, gdy błędny.
OK/ERROR  odpowiedź ERROR powoduje jednocześnie zmniejszenie stanu licznika CPIC
Uwaga: liczbę 9443 użyto jedynie jako przykładu kodu PIN!
AT+CPIN?    ponowne wprowadzenie komendy AT+CPIN? testuje status aparatu
+CPIN: READY       odpowiedź telefonu, jeśli wprowadzono poprawny kod PIN i telefon loguje się lub już zalogował się do sieci

Gdy podany został poprawny kod PIN, w przeciągu około 3 do 10 sekund aparat powinien zalogować się do sieci oraz udostępnić parametry operatora, sygnału stacji bazowej i inne.

AT+CPIN: wprowadzenie kodu PUK

Do wprowadzenia kodu PUK służy identyczny zestaw komend jak dla wprowadzenia kodu PIN, jednak rezultaty działania komend AT są zupełnie różne i to dzięki nim można zidentyfikować konieczność podania kodu PUK.

AT+CPIN?    pytanie o status aparatu
+CPIN: SIM PUK     to żądanie wprowadzenia kodu PUK
AT^SPIC       to tym razem pytanie nie o ilość prób wprowadzenia PUK
^SPIC: 10      odpowiedź aparatu informująca o ilości prób; zazwyczaj jest ona większa niż liczba prób wprowadzenia kodu PIN (typowo 10)
AT+CPIN=”43816765233”,”1234”            kod PUK musi być wprowadzony razem z nowym kodem PIN
OK / ERROR            aparat odpowiada tak samo, jak po podaniu kodu PIN
AT+CPIN?    ponowne wprowadzenie komendy AT+CPIN? testuje status aparatu
+CPIN: READY       odpowiedź telefonu, jeśli wprowadzono poprawny kod PIN i telefonloguje się lub już zalogował się do sieci.

Uwaga: liczbę 9443 użyto jedynie jako przykładu kodu PIN, liczbę 43816765233 jako przykładu kodu PUK!

AT+CREG: odczyt statusu logowania do sieci

Poprawne podanie numeru PIN powoduje włączenie telefonu do sieci, o ile tylko karta SIM jest aktywna oraz telefon znajduje się w zasięgu działania stacji bazowej operatora – właściciela karty SIM. Zarówno w sytuacjach awaryjnych, jak i wtedy, gdy wszystko przebiega prawidłowo możliwe jest użycie komendy AT+CREG? do odczytania statusu włączenia do sieci.

AT+CREG?  odczyt statusu włączenia do sieci operatora GSM
+CREG: 0,1  odpowiedź telefonu zawierająca status rejestracji w sieci

Większość aparatów GSM używa uproszczonego trybu powiadamiania o statusie rejestracji. Zmianę na tryb rozszerzony można włączyć wykorzystując tę samą komendę: AT+CREG. Listę obsługiwanych przez sieć trybów można uzyskać przez AT+CREG=?. Najbogatszy w informację jest tryb 2, zwracający informację o kodzie lokalizacji oraz kodzie stacji bazowej. Na przykład:

AT+CREG=2            zmiana trybu rejestracji w sieci
OK      odpowiedź aparatu (jeśli ERROR, to tryb nie jest obsługiwany!)
AT+CREG?  pytanie o status rejestracji
+CREG: 2,1,"7925","81E3"           rozszerzony kod rejestracji

Pierwszy i drugi ze zwracanych parametrów opisują tryb i status rejestracji. Trzeci i czwarty, to łańcuchy tekstowe, zawierające 2 bajty kodu lokalizacji i 2 bajty kodu stacji bazowej.

AT+COPS: identyfikacja operatora

Po uzyskaniu informacji na temat statusu rejestracji w sieci GSM, można pobrać również identyfikator operatora, do którego sieci włączony jest aparat.

AT+COPS?   pytanie o identyfikator operatora
+COPS: 0,0,”Plus GSM”    odpowiedź telefonu włączonego do sieci PLUS GSM

AT+CSQ: pomiar jakości sygnału

Komenda zwraca informację na temat jakości sygnału docierającego do anteny. Użycie komendy jest jedną z metod stwierdzenia, czy nawiązano połączenie ze stacją bazową.

AT+CSQ?     pytanie o jakość sygnału
+CSQ: 20,99informacja na temat mocy sygnału oraz współczynnika błędu

Pierwszy ze zwracanych parametrów podaje nam siłę odbieranego sygnału stacji bazowej. Zakres zwracanych wartości mieści się w granicach od 0 do 99, a w praktyce od 0 do 27. Wartość 0 oznacza –113 dBm, każda kolejna zmiana wartości, to kolejne 2 dBm zmiany (1 = -111 dBm, 2 = -109 dBm itd.). Wartość 99 oznacza, że jakość sygnału nie jest znana.
Drugi parametr określa szybkość transmisji przy założonej stopie błędu i jest zgodny ze specyfikacją parametru RXQUAL zawartą w normie GSM 05.58. Wartość 99, podobnie jak poprzednio, oznacza, że parametr nie jest znany.

AT+CSCA: odczyt lub ustawienie numeru Centrum Usług

Centrum Usług (Service Center) to funkcja sieci GSM odpowiedzialna za dostarczenie i przechowywanie wiadomości SMS pomiędzy abonentem wysyłającym i odbierającym wiadomość. Centrum Usług nie jest częścią sieci GSM, jakkolwiek może być z tą siecią zintegrowane.

AT+CSCA?   żądanie wyświetlenia numeru Centrum Usług
+CSCA: "+48601000310",145     odpowiedź aparatu pracującego w sieci Plus GSM; pierwsze pole zawiera numer Centrum Usług, pole drugie jest opcjonalne i zawiera typ numeru Centrum Usług 

Numer Centrum Usług musi być ustawiony, aby telefon mógł odbierać i wysyłać wiadomości SMS. Można podać go wraz z wysyłanym komunikatem SMS, można również wprowadzić i zapamiętać w pamięci karty SIM. Nie zmienia to jednak faktu, że komunikat SMS w ten czy inny sposób musi zawierać tę informację.

AT+CSCA=”+48601000310”        zapamiętanie numeru Centrum Usług w numeracji międzynarodowej

Numer Centrum Usług jest częścią wiadomości SMS. Podczas tworzenia nowej wiadomości może on być dodany automatycznie przez oprogramowanie telefonu lub wprowadzony ręcznie podczas kodowania tekstu wiadomości.

AT+CMGF: odczyt lub wybór formatu wiadomości SMS

Komenda AT+CMGF umożliwia odczyt i ustawienie aparatu GSM w trybie odbioru i przesyłania wiadomości SMS w określonym formacie. Zazwyczaj  każdy aparat umożliwia przesyłanie wiadomości w trybie PDU, natomiast nieliczne obsługują łatwy do obsługi format TEXT.

AT+CMGF?  pytanie o bieżący tryb
+CMGF: 0     odpowiedź telefonu GSM – bieżącym trybem jest PDU MODE
AT+CMGF=?            żądanie przesłania listy obsługiwanych trybów
+CMGF: 0,1  obsługiwane są tryby PDU (0) i TEXT (1)
AT+CMGF=1            zmiana trybu obsługi SMS na TEXT MODE
OK      odpowiedź telefonu GSM – załączono tryb TEXT (lub ERROR, jeśli nie można go załączyć)

 

Wysłanie SMS w trybie tekstowym

Tryb obsługi SMS o nazwie TEXT jest chyba najłatwiejszym do zastosowania we własnym urządzeniu, wysyłającym i odbierającym komunikaty SMS. Niestety, większość popularnych aparatów telefonicznych go nie obsługuje.

Parametry trybu tekstowego

Poprawnie ustawiony telefon GSM nie wymaga żadnych dodatkowych nastaw. Nie mniej jednak nastawy są możliwe do przeprowadzenia z poziomu poleceń AT. Parametry funkcji doręczania wiadomości SMS mogą być zmieniane przy pomocy polecenia AT+CSMP. Format tego polecenia jest następujący:

AT+CSMP=<PO>,<OW>,<IP>,<SK>

PO - pierwszy oktet. Parametr opisuje pierwszy oktet zawierający parametry dla funkcji doręczenia SMS (SMS-SUBMIT). Standardową wartością jest cyfra 17 (11H), co oznacza:
pole OW (okres ważności komunikatu) jest obecne i zawiera liczbę wskazującą na relatywny, obliczany na podstawie czasy wysłania, okres ważności SMS,
wybrano tryb SMS-SUBMIT tzn. doręczenie wiadomości w kierunku aparat àCentrum Usług.
OW - Okres Ważności. Pole OW zawiera liczbę wskazującą na czas, w którym Centrum Usług gwarantuje przechowywanie wiadomości w pamięci w przypadku jej nie doręczenia; tabela 1 zawiera wartości parametru wraz z odpowiadającym im okresem czasu.
IP – identyfikator protokołu. Informacja na temat identyfikatora użytego protokołu; szczegóły zawarte są w tabeli 2. Dla typowo zakodowanych wiadomości używa się parametru IP = 0. Informacji na temat dopuszczalnych protokołów należy poszukiwać u konkretnego operatora sieci. Nie można bowiem zagwarantować, że Centrum Usług obsługuje wszystkie protokoły transmisji.

Tabela 1. Wykaz nastaw parametru OW

Wartość PO (dziesiętnie)

Okres ważności wiadomości SMS

0 .. 143

OW+1 x 5 minut (do 12 godzin z krokiem co 5 minut)

144 .. 167

12 godzin + (OW – 143) x 30 minut

168 .. 196

(OW – 166) x 24 godziny

197 .. 255

(OW – 192) x 168 godzin

 

Tabela 2. Wykaz identyfikatorów protokołu transmisji

Wartość PO (dziesiętnie)

Używany protokół transmisji

0

Wiadomość SMS traktowana jako wiadomość tekstowa

1

Wiadomość SMS traktowana jako przekaz teletekstowy

2

Wiadomość SMS traktowana jako transmisja faksowa – grupa3

3

Wiadomość SMS traktowana jako transmisja faksowa – grupa4

 

SK - schemat kodowania. Domyślnie znaki kodowane są w formacie 7-bitowym. Gdy używany ten schemat, 8 znaków jest kodowanych w formie 7 oktetów i komunikat może zawierać do 160 znaków (zamiast 140, gdyby były kodowane w postaci 8-bitowej). W przypadku kodowania 8-bitowego, zestaw znaków jest identyczny z ASCII.

Tabela 3. Wykaz parametrów Schematu Kodowania (klas komunikatów)

Wartość parametru SK (dziesiętnie)

Kodowanie znaków

Klasa komunikatu

0

domyślne, 7-bit

-

240

domyślne, 7-bit

klasa 0 (SMS przesyłany bezpośrednio na wyświetlacz lub w przypadku terminala – przez port szeregowy)

241

domyślne, 7-bit

klasa 1 (specyficzna dla danego typu aparatu)

242

domyślne, 7-bit

klasa 2 (komunikat zapamiętywany w karcie SIM)

243

domyślne, 7-bit

klasa 3 (komunikat zapamiętywany w karcie SIM i aparacie)

244

8-bit

klasa 0 (SMS przesyłany bezpośrednio na wyświetlacz lub w przypadku terminala – przez port szeregowy)

245

8-bit

klasa 1 (specyficzna dla danego typu aparatu)

246

8-bit

klasa 2 (komunikat zapamiętywany w karcie SIM)

247

8-bit

klasa 3 (komunikat zapamiętywany w karcie SIM i aparacie)

 

Dla parametru równego 240, komunikat kierowany jest bezpośrednio na wyświetlacz – lub w terminalu GSM – wysyłany przez port szeregowy. Wybór klasy 1 do 3 powoduje, że komunikaty są zapamiętywane w  wewnętrznej pamięci karty SIM oraz aparatu. Dodatkowo dla klasy 2 zabronione jest przesyłanie wiadomości przez port szeregowy. Tabela 3 zawiera wartości typowe dla parametry SK.

AT+CPMS: odczyt lub wybór rodzaju pamięci dla komunikatów SMS.

Sposób funkcjonowania polecenia AT+CPMS zależny jest od zasobów sprzętowych aparatu GSM. Każdy aparat posiada pamięć na karcie SIM, niektóre posiadają dodatkowe rodzaje pamięci. Polecenie umożliwia nie tylko wybór rodzaju używanej pamięci, ale również odczyt zasobów sprzętowych

AT+CPMS?  zapytanie o listę obsługiwanych lokalizacji pamięci
+CPMS: ("MT","SM","ME"),("MT","SM","ME"),("MT", "SM","ME")

Listę lokalizacji zwróconą jako wynik użycia komendy AT+CPMS należy interpretować następująco:
+CPMS: <PAMIĘĆ 1>,<PAMIĘĆ 2>,<PAMIĘĆ 3>
PAMIĘĆ 1:    komunikaty przeznaczone do odczytu i usunięcia
PAMIĘĆ 2:    komunikaty zapisywane, przeznaczone do wysłania
PAMIĘĆ 3:    komunikaty odebrane, o ile nie jest włączone ich natychmiastowe przesyłanie do urządzenia zewnętrznego.

Podobny format ma polecenie wyświetlające aktualnie wybrane tryby dla wiadomości SMS wraz z informacjami o ilości zapamiętanych wiadomości oraz całkowitej pojemności pamięci. Oto rezultat wykonania tej komendy przez ten sam model aparatu telefonicznego, co w przykładzie wyżej:

AT+CPMS?  zapytanie o status pamięci dla wiadomości SMS
+CPMS: "SM",1,20,"SM",1,20,"SM",1,20     odpowiedź aparatu

Listę parametrów zwróconych jako wynik działania komendy należy interpretować następująco:

+CPMS: <”PAMIĘĆ 1”>,<ilość przechowywanych komunikatów>, <pojemność pamięci>, <”PAMIĘĆ 2”>,<ilość przechowywanych komunikatów>, <pojemność pamięci>, <”PAMIĘĆ 3”>,<ilość przechowywanych komunikatów>, <pojemność pamięci>

Dzięki tej samej komendzie z listą parametrów po znaku równości, można wybrać rodzaj pamięci dla komunikatów SMS. Lokalizacją domyślną jest pamięć karty SIM i dla większości zastosowań jest to zupełnie wystarczające.

AT+CPMS=”SM”      wybór pamięci karty SIM jako domyślnej dla odczytu i zapamiętywania komunikatów SMS
+CPMS: 1,20,1,20,1,20      odpowiedź aparatu zawierająca status pamięci

lub:

AT+CPMS="ME"     wybór połączonych pamięci aparatu i karty SIM jako domyślnych dla odczytu i zapamiętywania komunikatów SMS
+CPMS: 8,25,1,20,1,20

lub:

AT+CPMS=”ME”,”ME”,”ME”   wybór połączonych pamięci aparatu i karty SIM jako wszystkich lokalizacji dla przechowywania komunikatów SMS
+CPMS: 8,25,8,25,8,25

AT+CMGW: zapis SMS do pamięci aparatu – tryb TEXT

Wykonanie komendy AT+CMGW powoduje zapis komunikatu do pamięci karty SIM. Niniejszy opis funkcji dotyczy trybu tekstowego. Sposób użycia polecenia dla trybu PDU omówiony będzie dalej.

AT+CMGW=”+48601010203”<CR>
            aparat przełącza się w tryb wprowadzania wiadomości tekstowej i zapisu jej do pamięci nie ze statusem „niewysłany” i adresem doręczenia +48601010203
>          aparat wysyła znak „zachęty” oczekując na wprowadzenie tekstu

HELLO! <Ctrl+Z>     teraz należy wprowadzić tekst (np. „HELLO!”); wprowadzanie kończy znak Ctrl+Z (0x06); znak ESC (0x1B) powoduje przerwanie realizacji polecenia

+CMGW: 5    odpowiedź aparatu: komunikat został zapamiętany w pamięci aparatu z indeksem 5

 

AT+CMSS: wysłanie SMS zapisanego w pamięci karty SIM

Komunikaty SMS zapisane w pamięci karty SIM można wysyłać przy pomocy komendy AT+CMSS =<INDEKS>. Dodatkowo jako parametrów tej komendy można użyć adresu (numeru) odbiorcy. Zalecane jest, aby - jeśli adres odbiorcy jest znany - był on podany jako drugi parametr wywołania +CMSS. Jeśli argument ten nie będzie podany, zostanie użyty adres (numer) odbiorcy podany wraz z komunikatem SMS (patrz: AT+CMGW).

AT+CPMS=”SM”      wysłanie wiadomości zapamiętanej w pamięci karty SIM
OK      odpowiedź aparatu
AT+CMSS=5,”+48601010203”     wysłanie komunikatu o indeksie 5 pod numer  +48601010203

lub

AT+CMSS=5            wysłanie komunikatu o indeksie 5 pod numer zapamiętany wraz z komunikatem SMS

Wykonanie komendy kończy się komunikatem informującym o statusie wysłanej wiadomości SMS, jeśli jej dostarczenie przebiegło poprawnie (na przykład +CMSS: 116) lub komunikatem o błędzie (+CMSS ERROR: <kod>). Liczba pojawiająca się po +CMSS, to wartość całkowita, zgodna z podaną w normie GSM 3.40 (TP-Message-Reference). Dodatkowo niektóre aparaty mogą zwracać znacznik czasu Centrum Usług.

AT+CMGS: wysłanie SMS w bez zapisu do SIM

Poniższa sekwencja komend wysyła wiadomość SMS bez jej wcześniejszego zapisu w pamięci:

AT+CMGF=1            wybór trybu tekstowego dla wiadomości SMS
+CMGF:1      odpowiedź aparatu
OK
AT+CMGS=”+48605010203”
            początek wiadomości SMS – numer odbiorcy
>          aparat przesyła znak zachęty (większości), po którym można wprowadzić komunikat SMS
HELLO! <CTRL+Z>            wprowadzenie komunikatu, zakończenie wprowadzania znakiem Ctrl+Z (kod 0x1B)

 

Wysłanie SMS w trybie PDU

Tryb PDU obsługiwany jest przez wszystkie telefony komórkowe mające możliwość wysyłania i odbioru komunikatów SMS. W trybie tym dostępne i używane są takie same komendy, jak dla trybu tekstowego, jednak mają inny format. Nagłówek komunikatu SMS jak i sam komunikat przekazywane są w postaci zakodowanego w ASCII łańcucha liczb szesnastkowych. Łańcuch kończy się znakiem Ctrl+Z (0x1B). Tak więc wspólną cechą SMS wysyłanych w trybie PD jest skomplikowany sposób kodowania wiadomości nie mniej jednak w erze mikrokontrolerów jego implementacja nie powinna nastręczać programiście trudności.

Omówienie protokołu (ramki danych) w trybie PDU

Komunikat zakodowany w trybie PDU zawiera:
-  Bajt zawierający długość pola SCA.Jest on opcjonalny dla niektórych telefonów. Zawiera podaną szesnastkowo liczba oktetów numeru Centrum Usług z uwzględnieniem pola „typ numeru”. Oprogramowanie większości telefonów umożliwia wprowadzenie w tym miejscu wartości 0.
-  Bajt zawierający typ numeru Centrum Usług. Wartość 91H lub 81H: podanie liczby 91H oznacza numerację międzynarodową (z prefiksem kierunkowym dla danego kraju, na przykład +48 dla Polski), 81H to numeracja lokalna obowiązująca na terenie danego kraju.
-  Numer Centrum Usługto numer dla usługi ustalony przez operatora, dzięki któremu możliwe jest przesyłanie wiadomości SMS.
-  Pierwszy oktet komunikatu SMS.Pierwszy oktet komunikatu SMS to bajt zawierający bity nastaw przekazywane do Centrum Usług umożliwiające nadawcy komunikatu nastawę jego parametrów. Typowo wartość tego oktetu wynosi:- 04H (4 dzies.) dla funkcji SMS-DELIVER to jest doręczenie komunikatu z Centrum Usług do abonenta, - 11H (17 dzies.) dla funkcji SMS-SUBMIT to jest wysłania SMS do Centrum Usług w celu jego doręczenia abonentowi sieci.
-  Jednobajtowe pole statusuokreślające numer odniesienia dla wysyłanego komunikatu. Wpisanie wartości 0 powoduje, że numer telefonu, z którego wysyłamy SMS jest równocześnie numerem odniesienia.
-  Długość numeru odbiorcy SMS, podana szesnastkowo i zawierająca ilość cyfr numeru.
-  Typ numeru odbiorcy SMS(podobnie jak przy konstrukcji numeru Centrum Usług jest to 81H dla numeracji lokalnej lub 91H dla numeracji międzynarodowej).
-  Numer odbiorcy wiadomości SMS(zakodowany w ten sam sposób, co numer Centrum Usług).
-  Identyfikator protokołu komunikacyjnego.Wartością typową, używaną przez większość sieci telefonów komórkowych jest 0.
-  Schemat kodowania danych.Wprowadzona wartość 0x00 oznacza, że znaki kodowane są w postaci 7-bitowych znaków ASCII.
-  Okres ważności wiadomości SMS.Liczba podana i interpretowana zgodnie z kodem reguły podanym przez bity TP-VPF.
-  Liczbę oktetów tekstu.
-  Tekst wiadomości.

Pierwszy oktet odebranego komunikatu SMS (SMS-DELIVER).

Nr bitu

7

6

5

4

3

2

1

0

Nazwa

RP

UDHI

SRI

-

-

MMS

MTI

MTI

 

Pierwszy oktet wysyłanego komunikatu SMS (SMS-SUBMIT).

Nr bitu

7

6

5

4

3

2

1

0

Nazwa

RP

UDHI

SRR

VPF

VPF

RD

MTI

MTI

 

Rysunek 1.Pierwszy oktet wysłanego i odebranego komunikatu SMS.

 

Ustawienie parametrów trybu PDU

Najlepiej jeśli parametry trybu PDU przekazywane są wraz z komunikatem SMS. Wówczas jest większe prawdopodobieństwo, że podczas wysyłania komunikatu nie zostanie popełniona jakaś pomyłka. Wtedy też możliwe jest nie tylko zapamiętanie komunikatu do późniejszego wysłania, ale również wysyłanie komunikatów „wprost”, bez pośrednictwa pamięci karty SIM. I chociaż kompozycja komunikatu oraz jego wysłanie jest bardzo proste, to z całą pewnością nie zaszkodzi znajomość nastaw poszczególnych parametrów.

Adres Centrum Usług.

Numer Centrum Usług jest zakodowany. Jeśli numer zawiera nieparzystą liczbę cyfr, ostatni bajt numeru przesuwany jest o cztery bity w lewo, a młodsza połówka bajtu przyjmuje wartość znaku „F”. Na przykład numer Centrum Usług sieci Plus GSM „601000310” zakodowany będzie w sposób następujący:
-  Numeracja krajowa, bez numeru kierunkowego dla Polski: wartość pola „typ numeru” = 81H.
-  Nieparzysta liczba znaków, na końcu dodawana jest litera F: „60100013F0”.
Wygląd numeru Centrum Usług po zakodowaniu: 8106010013F0.

Pierwszy Oktet komunikatu SMS.

MTI (Message Type Identifier): typ komunikatu. Typ komunikatu to parametr o długości dwóch bitów, znajdujący się na pozycjach 0 i 1 bajtu „Pierwszy Oktet” komunikatu SMS. Znaczenie bitów zawiera tabela 4. Najbardziej użyteczne dla aplikacji wysyłania i odbioru SMS są wartości nastaw „00” dla funkcji SMS-DELIVER (odbioru komunikatu SMS) oraz „01” dla funkcji SMS-SUBMIT (wysyłania SMS).

Tabela 4. Ustawienia bitów MTI parametru Pierwszy Oktet.

bit 1

bit 0

Typ komunikatu

0

0

komunikat typu SMS-DELIVER dostarczany przez Centrum Usług,

0

0

komunikat typu SMS-DELIVER REPORT wysyłany przez aparat do Centrum Usług dla uzyskania przez nadawcę komunikatu potwierdzenia odbioru SMS

1

0

SMS-STATUS-REPORT raport statusu doręczenia komunikatu SMS nadawany przez Centrum Usług

1

0

SMS-COMMAND komenda przekazywana do Centrum Usług w postaci komunikatu SMS

0

1

komunikat typu SMS-SUBMIT to tekst wysyłany przez aparat do Centrum Usług w celu jego doręczenia abonentowi.

0

1

SMS-SUBMIT-REPORT raport statusu doręczenia komunikatu przekazywany przez Centrum Usług do aparatu.

1

1

Wartość zarezerwowana.

 

MMS (More-Messages-to-Send): sygnalizacja wiadomości składającej się z wielu części. Nazwy parametru nie należy mylić z popularnymi wiadomościami multimedialnymi. MMS to pojedynczy bit znajdujący się na pozycji 2 parametru „Pierwszy Oktet”, którego ustawienie oznacza, że w Centrum Usług znajdują się jeszcze inne części tego samego komunikatu SMS czekające na odbiór. Wartość 0 bitu oznacza, że komunikat jest jednoczęściowy lub że to koniec transmisji komunikatu wieloczęściowego.

VPF (Validity Period Format): okres ważności wiadomości. Parametr VPF to dwa bity numer 3 i 4 będące częścią „Pierwszego Oktetu”. Parametr ten ma istotne znaczenie dla funkcji wysyłania SMS i praktycznie żadnego przy odbiorze komunikatów. Możliwe nastawy bitów VPF podano w tabeli 5. Typowo używana jest nastawa „10” – format relacyjny (w odniesieniu do daty bieżącej).

Tab. 5. Ustawienia bitów VPF parametru Pierwszy Oktet.

bit 4

bit 3

Opis

0

0

TP-VPP nieobecne

1

0

TP-VPP obecne, format relacyjny:

0..143 = (wartość parametru + 1) x 5 minut

144..167 = 12 godzin + (wartość parametru - 143) x 30 minut

168..196 = (wartość parametru – 166) x 1 dzień

197..255 = (wartość parametru – 192) x 7 dni)

0

1

Format rozszerzony, 7 oktetów

1

1

Format absolutny, 7 oktetów

 

SRI (Status Report Indication): status doręczenia. SRI to jednobitowy parametr na pozycji 5 bitu. Wartość 0 bitu oznacza, że status doręczenia nie będzie zwrócony do Centrum Usług, natomiast wartość 1 powoduje wysłanie potwierdzenia odbioru SMS do Centrum Usług.

SRR (Status Report Request): żądanie raportu statusu doręczenia. Odpowiednikiem SRI dla funkcji SMS-DELIVER (przesłanie SMS do Centrum Usług) jest bit SRR będący żądaniem dostarczenia przez Centrum Usług raportu doręczenia wiadomości SMS. Podobnie jak w przypadku SRI, wartość logiczna 1 oznacza żądanie statusu, natomiast wartość logiczna 0 – rezygnację z raportu doręczenia.

UDHI (User Data Header Indicator): nagłówek wiadomości. Na pozycji 6 znajduje się bit, którego wartość wskazuje na obecność bądź nieobecność nagłówka komunikatu SMS. Typowo wartość 0 oznacza, że komunikat nie zawiera nagłówka – wyłącznie treść wiadomości. Wartość logiczna 1 bitu oznacza, że wraz z wiadomością doręczany jest nagłówek komunikatu.

RP (Reply Path): numer (ścieżka) nadawcy. RP to najstarszy, 7 bit parametru Pierwszy Oktet. Wartość logiczna 0 dla tego bitu oznacza, że ścieżka odpowiedzi nie jest ustawiona. Wartość logiczna 1 określa, że podano ścieżkę odpowiedzi dla funkcji SMS-SUBMIT lub odebrano ją wraz z wiadomością dla funkcji SMS-DELIVER. Ścieżka odpowiedzi to nic innego jak numer abonenta, który wysłał SMS.

Identyfikator protokołu (PID – Protocol Identifier). Identyfikator protokołu to parametr używany przy odbiorze i wysyłaniu komunikatów SMS od/do innych urządzeń telekomunikacyjnych. Dla funkcji SMS-SUBMIT oznacza przesłanie żądania do Centrum Usług doręczenia komunikatu SMS w określonym formacie. Jest to parametr o rozmiarze pojedynczego oktetu (8 bitów). Typowo używanym do przesyłania komunikatów jest PID=0 (standardowy komunikat tekstowy). Inne mogą być przez aparat lub Centrum Usług nie obsługiwane. Nie mniej jednak, nawet jeśli dany format komunikatu nie jest obsługiwany, może być przez aparat zapamiętany i przechowany w niezmienionym formacie, o ile nie zostanie odrzucony przez pośredniczące w wysyłce i odbiorze Centrum Usług.

Schemat i sposób kodowania znaków (Data Coding Scheme). Pole DCS to pojedynczy oktet określający sposób zakodowania danych użytkownika (treści komunikatu SMS) i może również wskazywać klasę komunikatu. Wartości pola DCS właściwe dla trybu PDU odczytać można z tabeli 6.

Tab. 6. Wykaz parametrów Schematu Kodowania (klas komunikatów) dla trybu PDU

Wartość parametru SK (szesnastkowo)

Kodowanie znaków

Klasa komunikatu

00

domyślne, 7-bit

-

F0

domyślne, 7-bit

klasa 0 (SMS przesyłany bezpośrednio na wyświetlacz lub w przypadku terminala – przez port szeregowy)

F1

domyślne, 7-bit

klasa 1 (specyficzna dla danego typu aparatu)

F2

domyślne, 7-bit

klasa 2 (komunikat zapamiętywany w karcie SIM)

F3

domyślne, 7-bit

klasa 3 (komunikat zapamiętywany w karcie SIM i aparacie)

F4

8-bit

klasa 0 (SMS przesyłany bezpośrednio na wyświetlacz lub w przypadku terminala – przez port szeregowy)

F5

8-bit

klasa 1 (specyficzna dla danego typu aparatu)

F6

8-bit

klasa 2 (komunikat zapamiętywany w karcie SIM)

F7

8-bit

klasa 3 (komunikat zapamiętywany w karcie SIM i aparacie)

 

 

E

L

E

K

T

R

O

N

I

K

A

0x45

0x4C

0x45

0x4B

0x54

0x52

0x4F

0x4E

0x49

0x4B

0x41

1000101

1001100

1000101

1001011

1010100

1010010

1001111

1001110

1001001

1001011

1000001

1000101

1001100

1000101

1001011

1010100

1010010

1001111

1001110

1001001

1001011

1000001

Wyraz po zakodowaniu „45667149953E9DC96510”

Rysunek 2. Kodowanie wyrazu ELEKTRONIKA

Użycie domyślnego alfabetu wskazuje, że komunikat zakodowany jest w postaci kodów znaków 7-bitowych. Gdy używany jest ten sposób kodowania, 8 znaków komunikatu upakowane zostaje w 7 oktetów. Komunikat SMS (dane użytkownika) może mieć długość do 140 znaków, jednak po upakowaniu go w sposób opisywany wyżej, zaoszczędzone zostaje 140 bitów, co daje możliwość dopisania dodatkowych 20 znaków po 7 bitów każdy. Dlatego komunikat SMS może mieć maksymalną długość 160 znaków.
Każdy znak zakodowany jest w postaci kodu 7-bitowego (septetu). Znaki o kodach długości 8-bitów zazwyczaj nie są przez telefony wyświetlane, natomiast czasami używane są jako sterujące (przesyłanie obrazów, dzwonków i innych treści multimedialnych). Komunikaty zakodowane w postaci liczb 16-bitowych (maksymalnie 70 znaków) używane są do przesyłania wiadomości zakodowanych według standardu UNICODE (UCS2) i mogą być wyświetlane przez większość aparatów GSM. Niektóre z telefonów wyświetlają te komunikaty jako FLASH SMS. Na rys. 2 pokazano przykład kodowania słowa ELEKTRONIKA.

OA (Originator Address): numer (adres) nadawcy. Adres nadawcy ma długość od 1 do 12 oktetów i jest podzielony na 3 części. Pierwsza to pojedynczy oktet zawierający długość pola numeru nadawcy. Jest to pojedynczy liczba całkowita w zapisie szesnastkowym, reprezentująca całkowitą liczbę oktetów w numerze z uwzględnieniem typu numeru.
Druga część może mieć długość 1 oktetu, może się też nie pojawić, jeśli długość pola odbiorcy jest równa 0. Parametr ten, zwany też typem adresu, to liczba 81H w przypadku, gdy nadawca używa numeracji lokalnej lub 91H, gdy używany jest numer (adres) w formacie międzynarodowym z występującym przed nim prefiksem – numerem kierunkowym danego kraju. Trzecia część może mieć długość od 0 do 10 oktetów. Parametr ten zawiera adres nadawcy, zakodowany w identyczny sposób, jak numer Centrum Usług.

DA (Destination Address): numer (adres) odbiorcy. Numer odbiorcy SMS kodowany jest identycznie jak numer nadawcy i w sposób jak wyżej.

MR (Message Reference): numer odniesienia dla komunikatu. Pole MR zawiera numer odniesienia dla komunikatu (0..255) przesyłanego w formacie kilku wiadomości SMS. Jest on nadawany przez aparat wysyłający komunikat, to znaczy korzystający z funkcji SMS-SUBMIT. Oprogramowanie większości aparatów ma możliwość automatycznej numeracji.

UDL (User Data Length): długość komunikatu. Pole UDL to parametr całkowity o długości pojedynczego oktetu. Jest to liczba z zakresu od 0 do 255. Jeśli dane użytkownika (komunikat SMS) zakodowane są z wykorzystaniem domyślnego alfabetu (kodowanie 7-bitowe), pole UDL zawiera liczbę całkowitą będącą reprezentacją liczby znaków (septetów) w obrębie pola „Dane Użytkownika”. Jeśli obecny jest nagłówek komunikatu, wówczas pole UDL jest sumą liczby septetów w nagłówku i liczby septetów danych użytkownika. Jeśli komunikat SMS zakodowany jest w formie znaków 8 bitowych, funkcjonowanie pola UDL nie zmienia się z tym, że podawana jest całkowita liczba oktetów. Wartość UDL=0 oznacza, że brak jest danych użytkownika w komunikacie.

UD (User Data): dane użytkownika. Pole UD zawiera 140 oktetów (=160 septetów) danych użytkownika. Może ono zawierać komunikat SMS, nagłówek lub komunikat SMS wraz z nagłówkiem. O obecności nagłówka informuje wartość logiczna 1 bitu UDHI.

 

Wysłanie SMS z zapisem do pamięci

AT+CMGW: zapis SMS do pamięci

Tu podobnie jak dla trybu tekstowego komenda AT+CMGW służy do zapisu wiadomości w pamięci, jednak postać jej wywołania jest odmienna. Wywołując komendę należy podać długość wiadomości (w oktetach) począwszy od parametru Pierwszy Oktet”i ewentualnie, po przecinku, jej status.

AT+CPMS="SM"     wybór pamięci karty SIM jako miejsca do przechowywania SMS
AT+CMGW=19        polecenie zapisu wiadomości w pamięci karty SIM
>          znak zachęty wysłany przez aparat
07918406010013F011000B918405112030F00000C405D72435A804<Ctrl+Z>
            ciąg znaków ASCII (łańcuch tekstowy, nie liczby szesnastkowe!) przesłany do aparatu zakończony znakiem Ctrl+Z (0x1B).
+CMGW:1     odpowiedź aparatu informująca, że wiadomość została zapisana w pamięci pod indeksem 1

AT+CMSS: wysłanie SMS zapisanego w pamięci

Odpowiednio zakodowany i zapisany w pamięci karty SIM komunikat SMS jest wysyłany przez krótką sekwencja poleceń.

AT+CPMS="SM"     wybór pamięci karty SIM jako miejsca do przechowywania SMS
AT+CMSS=1            wysłanie wiadomości SMS zapamiętanej pod indeksem 1

SMS odebrany nie nadaje się do wysłania, ponieważ jego nagłówek jest inny. Przesłanie odebranej wiadomości SMS do innego odbiorcy wymaga zmiany nagłówka.

AT+CMGD: usunięcie komunikatu SMS z pamięci

Wiadomość SMS może być usunięta z pamięci karty SIM przez polecenie AT+CMGD=<INDEKS>. Na przykład komunikat zapamiętany w pamięci karty SIM pod indeksem 1 usuwany jest przez następującą sekwencję poleceń:

AT+CPMS="SM"     wybór karty SIM jako miejsca do przechowywania SMS
AT+CMGD=1           polecenie usunięcia wiadomości znajdującej się w pamięci karty SIM pod indeksem 1

 

Wysłanie SMS bez zapisu do pamięci

Zakodowany - według wcześniej omawianych metod - SMS można wysłać również bez pośrednictwa pamięci karty SIM. Zmniejsza się w ten sposób liczba poleceń koniecznych do wysłania wiadomość oraz (ważne zwłaszcza w aplikacjach wysyłających komunikaty bez ingerencji człowieka) metodzie tej nie grozi przepełnienie pamięci przeznaczonej na komunikaty SMS. Oczywiście ma to też swoje reperkusje: w związku z tym, że komunikat nie jest zapamiętywany, nie jest możliwe powtórne jego wysłanie w sposób inny niż ponowne zakodowanie komunikatu i przesłanie go do aparatu wraz z odpowiednimi komendami AT.
Do wysłania komunikatu służy polecenie AT+CMGS =<DŁUGOŚĆ KOMUNIKATU>. Parametr <DŁUGOŚĆ KOMUNIKATU> to liczba oktetów liczona od pierwszego oktetu (i wraz z nim) do końca wiadomości SMS.

AT+CMGS=20         polecenie wysłania komunikatu SMS
>          znak zachęty wysyłany przez aparat
07918406010013F011000B918405112030F00000C405D72435A80C01<Ctrl+Z>
            komunikat SMS zakodowany w trybie PDU (wyróżnione są oktety, których reprezentacją jest parametr <długość komunikatu>).
+CMGS: 122SMS został przekazany do Centrum Usług; Centrum zwróciło kod odniesienia o wartości 122

 

Odbiór SMS w trybach: TEXT i PDU

Opisując odbiór SMS mam na myśli nie tyle wyświetlenie komunikatu przez aparat, ile jego odbiór przez dołączone urządzenie. Będzie to więc forma usługi świadczonej przez terminal czy telefon GSM, a nie wyświetlenie przezeń SMS. To jest zapewniane przez implementację odpowiedniego oprogramowania przez producenta i kwestii tej nie będziemy poruszać.

Nagłówek wiadomości SMS w trybie tekstowym

Wiadomość odebrana w trybie tekstowym zwracana jest w formie łańcucha znaków, częściowo zdekodowanego (tzn. zdekodowane są wszystkie informacje za wyjątkiem oktetów zawierających status) i towarzyszącego odebranej wiadomości SMS. Struktura wiadomości odebranej w trybie tekstowym jest następująca:

<status>, <adres (numer) nadawcy>, <typ adresu nadawcy>, <nazwa nadawcy>, <znacznik czasu>,<pierwszy oktet>, <identyfikator protokołu>, <schemat kodowania>, <adres (numer) Centrum Usług>, <typ adresu Centrum Usług>, <długość tekstu SMS>

Parametry wyróżnione pojawiają się w nagłówku zawsze. Obecność pozostałych uzależniona jest od nastawy parametru +CSDH. Jeśli jego wartość jest równa 1, to nagłówek SMS ma postać rozszerzoną, jeśli 0, to nagłówek SMS składa się wyłącznie z tych wyróżnionych pól.
Tekst SMS umieszczany jest bezpośrednio za nagłówkiem. Tryb tekstowy cechuje wyjątkowa prostota obsługi, więc wszystkie wiadomości zostają odbierane jako już zdekodowane i nie ma potrzeby wykonywania jakichkolwiek dodatkowych czynności za wyjątkiem prostego sformatowania wyniku. W związku z tym, że sygnalizacja odebranej wiadomości SMS oraz ewentualny jej odczyt z pamięci SIM są identyczne w trybie TEXT jak i w trybie PDU, sposób odczytu oraz odbioru omówiony będzie wspólnie dla obu trybów.
Informacje zawarte w nagłówku opisywane były wcześniej, przy okazji omawiania kompozycji SMS w trybie PDU. W związku z tym, że w trybie tekstowym mają one postać już zdekodowaną, przytoczę tutaj przykład wiadomości odebranej w trybie tekstowym. Jak przykład posłuży odbiór komunikatu „WITAJ!” dla parametru +CSDH=0 oraz +CSDH=1 wysłanego z sieci Plus GSM, z numeru +48601102030.
Niżej podano przykłady odebranych komunikatów SMS w trybie TEXT w trybie podstawowym (+CSDH:0) i rozszerzonym (+CSDH:1).

AT+CSDH=0
”REC_UNRED”,”+48601102030”,”JANUSZ”,”03/07/01,13:05:20+00”<CR><LF>WITAJ!

 

<status>

„REC_UNREAD”

status komunikatu SMS

<adres nadawcy>

„+48601102030”

numer nadawcy wiadomości SMS

<typ adresu nadawcy>

145

91H dla numeracji międzynarodowej = 145 dziesiętnie

<nazwa nadawcy>

„JANUSZ”

nazwa nadawcy zaczerpnięta z książki adresowej karty SIM, jeśli numer nadawcy w niej istnieje

<znacznik czasu>

„03/07/01, 13:05:20+00”

znacznik czasu Centrum Usług: dnia 1 Lipca 2003, godzina 13:05, strefa czasowa +0 godzin

<tekst SMS>

WITAJ!

zdekodowany tekst wiadomości SMS

 

AT+CSDH=1

”REC_UNRED”,”+48601102030”,”JANUSZ”,”03/07/01,13:05:20+00”,145,17,0,0,

”+48601000310”,145,6<CR><LF>WITAJ!

<status>

„REC_UNREAD”

status komunikatu SMS

<adres nadawcy>

„+48601102030”

numer nadawcy wiadomości SMS

<typ adresu nadawcy>

145

91H dla numeracji międzynarodowej = 145 dziesiętnie

<nazwa nadawcy>

„JANUSZ”

nazwa nadawcy zaczerpnięta z książki adresowej karty SIM, jeśli numer nadawcy w niej istnieje

<znacznik czasu>

„03/07/01, 13:05:20+00”

znacznik czasu Centrum Usług: dnia 1 Lipca 2003, godzina 13:05, strefa czasowa +0 godzin

<pierwszy oktet>

17

typowa wartość pierwszego oktetu dla funkcji doręczania SMS do aparatu GSM

<identyfikator protokołu>

0

traktuj wiadomość jako zwykły tekst

<schemat kodowania>

0

domyślny schemat kodowania, znaki 7-bitowe, domyślny alfabet

<adres Centrum Usług>

„+48601000310”

adres Centrum Usług

<typ adresu Centrum Usług>

145

91H dla numeracji międzynarodowej = 145 dziesiętnie

<tekst SMS>

WITAJ!

zdekodowany tekst wiadomości SMS

 

Nagłówek wiadomości SMS odebranej w trybie PDU

Parametry nagłówka i sposoby ich kodowania są zgodne z opisanymi wcześniej, przy okazji opis trybu PDU i funkcji SMS-SUBMIT (wysyłania wiadomości SMS).  Nagłówek zawiera następujące informacje:
-  Długość pola numeru Centrum Usług z uwzględnieniem pola „Typ SCA”.
-  Typ adresu (numeru) Centrum Usług: 91H dla numeracji międzynarodowej z uwzględnieniem numeru kierunkowego kraju, 81H dla numeracji lokalnej – bez numeru kierunkowego kraju.
-  Adres (numer) Centrum Usług – zależny od operatora sieci komórkowej, dostarczyciela usługi Centrum Usług.
-  Pierwszy oktet zwrócony przez Centrum Usług.
-  Długość adresu (numeru) odbiorcy wiadomości – podobnie jak w przypadku wysyłanych wiadomości SMS jest to liczba cyfr numeru adresata wiadomości.
-  Typ adresu (numeru) odbiorcy: 91H dla numeracji międzynarodowej z uwzględnieniem numeru kierunkowego kraju, 81H dla numeracji lokalnej – bez numeru kierunkowego kraju.
-  Adres (numer) odbiorcy SMS.
-  Identyfikator protokołu użytego do transmisji SMS.
-  Schemat kodowania danych.
-  Znacznik czasu zawierający datę, dokładną godzinę oraz strefę czasową. Sposób kodowania dla trybu tekstowego i trybu PDU różnią się między sobą. W trybie PDU znacznik czasu ma postać rrmmddHHMMSSZZ z tym, że dane zakodowane są w identyczny sposób jak numer odbiorcy czy Centrum Usług to znaczy połówki bajtu zamienione są miejscami. Na przykład data 1/07/2003, godzina 13:10:20 strefa czasowa +0 godzin zakodowana będzie w następujący sposób: 03701031010200.
-  Długość tekstu podaną jako liczba oktetów.
-  Tekst wiadomości SMS podawany jest bezpośrednio po nagłówku. Liczba parametrów nagłówka jest stała i nie zależy od parametru +CSDH. Ma on znaczenie wyłącznie w trybie tekstowym. Informacje zakodowane są tak samo, jak dla potrzeb realizacji funkcji SMS-SUBMIT (wysłania SMS).

 

AT+CNMI: ustawienie sposobu powiadamiania o nowym SMS

Komunikat SMS każdorazowo dostarczany jest do abonenta GSM przez Centrum Usług bez względu na miejsce i sposób jego wysyłki. Nie istnieje funkcja przesyłania wiadomości SMS wprost od jednego abonenta do drugiego. Istnieją dwa główne sposoby odbioru wiadomości SMS przez dołączone urządzenie zewnętrzne:
-  jeśli komunikat SMS zapisywany jest w pamięci karty SIM, indeks oraz typ lokalizacji SMS może być przesłany do podłączonego urządzenia w formacie +CMTI: <PAMIĘĆ>, <INDEKS> po czym wiadomość może być odczytana przy pomocy polecenia AT+CMGR=<INDEKS>
-  wiadomości SMS mogą być przesłane wprost do dołączonego urządzenia.

Sposób funkcjonowania funkcji odbioru SMS można ustawić przy pomocy polecenia AT+CNMI. Polecenie to umożliwia również sprawdzenie zarówno listy obsługiwanych trybów jak i bieżących nastaw powiadamiania.

AT+CNMI=?  pytanie o listę obsługiwanych trybów powiadamiania
+CNMI:(0,1),(0,1),(0,2),(0,2),(1)          odpowiedź aparatu w formacie takim, jak opisano wyżej, to znaczy +CNMI: (TRYB), (MT), (BM), (DS), (BFR)
AT+CNMI?    pytanie o aktualne nastawy
+CNMI: 1,1,0,2,1      odpowiedź aparatu, informacja o aktualnych nastawach

Dla typowych potrzeb odbioru komunikatu wystarczające jest wprowadzenie nastawy AT+CNMI=1,1,0,2. Polecenie to załącza przekazywanie powiadomień o komunikatach do urządzenia zewnętrznego, jeśli tylko urządzenie to jest gotowe do odbioru.

AT+CNMI=1,1,0,2    ustawienie powiadamiania o odbiorze wiadomości SMS

Po takiej nastawie komunikat aparatu w postaci:

+CMTI: "MT",1          komunikat – powiadomienie o odebraniu SMS przesłany przez aparat do urządzenia odbierającego powiadomienie informuje, że wiadomość SMS została odebrana i zapisana w pamięci kombinowanej aparatu.

 

AT+CMGR: odczyt SMS zapisanego w pamięci w trybie TEXT

Odczyt odebranego w ten sposób komunikatu możliwy jest po wydaniu polecenia AT+CMGR=<INDEKS> (niżej przykład dla trybu tekstowego).

AT+CMGR=1           odczyt odebranego komunikatu z pozycji 1 pamięci MT
+CMGR: ”REC READ”,”+48605010203”,”Hello!”, ”03/08/01, 17:00:00+00”

Zmiana formatu komunikatu, a uściślając – jego wzbogacenie o informacje o statusie, jest możliwa dzięki poleceniu AT+CSDH=1. Wówczas to przesyłane są dodatkowe informacje o statusie funkcji doręczenia SMS zawarte w nagłówku otrzymanej wiadomości.

 

Powiadomienie o odebranej wiadomości SMS i jej odczyt w trybie PDU

Sposób powiadamiania jest identyczny z opisanym wcześniej dla trybu tekstowego.

AT+CNMI=1,1,0,2    ustawienie metody powiadomienia
+CMTI: "MT",17        powiadomienie o nowej wiadomości SMS zapisanej w pamięci „kombinowanej” pod indeksem 17
AT+CPMS="MT"      wybór pamięci do odczytu SMS
+CPMS: 17,45,0,20,0,20
AT+CMGR=17         odczyt komunikatu zapamiętanego pod indeksem 17
+CMGR: 0,,38
07918406010013F00406A1119999000030909131041208193C75785C5EB7C36A009D5D76BBE06C9F025964329F21

Na odbiorcy – użytkowniku spoczywa konieczność dekodowania komunikatu w celu jego odczytania. Korzystając z pamięci karty SIM i telefonu komórkowego należy pamiętać o tym, że pamięć karty ma skończoną pojemność. Mieści się w niej najczęściej ok. 20 wiadomości SMS. W związku z tym na aplikacji sterującej i odbierającej wiadomości spoczywać będzie również obowiązek czyszczenia pamięci karty SIM.

 

Odczyt statusu doręczenia SMS

Informacja na temat statusu doręczenia wiadomości SMS to jedna z usług, które mogą być świadczone przez Centrum Usług. Informacja na temat doręczenia wiadomości dociera w postaci krótkiej wiadomości tekstowej i jest zapamiętywana w pamięci karty SIM. Aby otrzymać potwierdzenie odbioru, oczywiście o ile Centrum Usług umożliwia raportowanie odbioru wiadomości, należy ustawić bit numer 5 parametru „Pierwszy Oktet” wysyłanej wiadomości SMS. Tak więc typowa wartość parametru dla funkcji SMS-SUBMIT to 11H bez potwierdzenia odbioru i 31H dla uzyskania raportu odbioru. Prześledźmy poniższą sekwencję rozkazów wysyłających wiadomość SMS w trybie PDU oraz odbierających potwierdzenie odbioru:

AT+CMGS=20         wysłanie SMS w trybie PDU
07918406010013F031000B918406934847F70000C406D72435A80C01<Ctrl+Z>
+CMGS: 129wiadomość wysłana pomyślnie
+CDSI: "MT",1          powiadomienie o odbiorze wiadomości SMS przez adresata
AT+CMGR=1           odczyt powiadomienia
+CMGR: 0,,167        treść powiadomienia zakodowanego tak, jak  zwykła wiadomość SMS w trybie PDU
07918406010013F006810B918406934847F7309091419164083090914191050800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

Do powiadamiania o odebranym potwierdzeniu służy +CDSI: <PAMIĘĆ>, <INDEKS>. Powiadomienie zostaje zapamiętane tak, jak zwykła wiadomość SMS i w ten sposób może być również odebrane i zdekodowane. Właściwa treść potwierdzenia zawarta jest w komunikacie SMS, który po zdekodowaniu wygląda następująco:

3090914191050800  = 19/09/2003 14:19:05+08   Status:00

Wartość 00 oznacza „Delivered”, to znaczy „doręczony”. Liczba 0xFF w komunikacie zastępuje znak pusty.

 

Jacek Bogusz
j.bogusz@easy-soft.net.pl

http://www.tomaszbogusz.blox.pl/

Odpowiedzi

odbiór sms

Tutaj masz lek na brak polskich numerów
https://www.proovl.com/numbers

bardzo pomocny artykuł

bardzo przydatne komendy. dzięki nim podłączyłem SE T230 do arduino, mogę wysyłać i odbierać smsy. Niestety nie potrafię jeszcze parsować ich treści, ale wszystko z czasem..
http://www.vsx.pl/arduino-i-sony-ericsson-t230-wysylanie-i-odbior-sms-dzwonienie-arduino-t230-sms-call-interface-rx-tx/

Błędne dane

Podajecie Państwo kilkukrotnie błędną informację, że kod Ctrl-Z (SUB) to 0x06 podczas gdy jest to 0x1A.

Wysyłanie i odbiór wiadomości SMS @ easy-soft | elektronika

If you are going for most excellent contents like myself,
only visit this website every day as it provides
quality contents, thanks

Dodaj nowy komentarz

Zawartość pola nie będzie udostępniana publicznie.