SMS a PDU formát (Protocol Description Unit)
Podklady, pro zde popisovanou skladbu SMS v PDU kódování, jsem čerpal především ze stránek Dreamfabric.com a také z vlastních pokusů v této problematice.
Skladbu SMS zprávy si ukážeme na vzorové "textovce", kterou nejdříve musíme "vyčíst" z mobilního telefonu. To můžeme provést např. AT příkazem AT+CMGL=1<CR>. Uvedený příkaz nám vypíše všechny přijaté, přečtené zprávy. Výpis vypadá například takto:
+CMGL: 1,1,,23
0791246020099990040C9124602021436500001021039060650404F4F29C0E
OK
+CMGL: 1,1,,23 ve výpisu oznamuje typ příkazu (AT+CMGL), počet zpráv (první jednička),že jde o zprávu přijatou a přečtenou (druhá jednička), a nakonec počet byte v zprávě (23). Nás však především zajímá popis vlastní zprávy, kterou tvoří následující řetězec znaků.
07
91
246020099990
04
0C
91
246020214365
00
00
10210390606504
04
F4F29C0E
Popis jednotlivých částí:
07
Toto číslo udává (v HEXa) délku SMSC informace. V tomto případě 7 oktetů (
91 +
246020099990).
91
Udává formát následujícího telefonního čísla.
91 - mezinárodní formát
81 - národní formát
246020099990
Telefonní číslo SMS centra. Uvedené číslo je 420602909909. Toto číslo je "zakódované" tak, že jednotlivé dvojce čísel jsou navzájem prohozené (swap). Pokud vyjde počet čísel v tel. čísle lichý, je doplněný znakem "F" (před swapem).
04
První oktet SMS - DELIVER PDU (stavové informace zprávy).
0C
Délka následujícího telefonního čísla (
246020214365) v HEXa (0C hex = 12 dec). Udává počet znaků, ne oktetů. Případný doplňující znak "F" v tel. čísle se do tohoto součtu nezapočítává.
91
Udává formát následujícího telefonního čísla.
91 - mezinárodní formát
81 - národní formát
246020214365
Telefonní číslo odesilatele. Uvedené číslo je 420602123456. Toto číslo je "zakódované" tak, že jednotlivé dvojce čísel jsou navzájem prohozené (swap). Pokud vyjde počet čísel v tel. čísle lichý, je doplněný znakem "F" (před swapem).
00
Byte PID - určuje v kterém protokolu či v jakém formátu je SMS zpráva doručena. Např.:
00h - obyčejná SMS zpráva (implicitní hodnota)
01h - telex
02h - fax (skupina3)
03h - fax (skupina 4)
04h - normální telefon (tj. konverze do hlasu)
...
00
DCS (Data Coding Scheme) určuje kódovací schéma dat. Např.:
00h - 7 bitová výchozí abeceda
F6h - 8 bitové datové kódování dle Class 2
10210390606504
SCTS - definuje datum doručení SMS do SMSCentra. Jednotlivé dvojce čísel, zleva doprava určují:
rok, měsíc, den, hodinu, minutu, sekundu, časovou zónu.
Čísla ve dvojicích jsou opět prohozena (swap). Pro ukázku platí: 30.12.2001, 09:06:56. Údaj v poslední dvojici čísel určuje rozdíl ve čtvrt hodinách mezi místním časem a GTM (Greenwich Main Time).
04
UDL - udává počet znaků v následující zprávě před jejím zakódováním. Tzn. že pokud je použito výchozí 7 - bitové kódování tak může být počet bytů menší než počet znaků, které udává UDL. Při 8 - bitovém kódování je počet bytů a znaků ve zprávě totožný.
F4F29C0E
Tento řetězec obsahuje vlastní data (zprávu). Dekóduje se následujícím způsobem. Uvedená data obsahují, jak si ukážeme, zprávu "test". Řetězec rozdělíme na dvojce znaků, která tímto představují čísla v šestnáctkové soustavě. Tyto jednotlivá čísla převedeme na jejich binární hodnotu. K tomu můžeme s výhodou využít kalkulačku obsaženou ve Windows.
F4 |
F2 |
9C |
0E |
11110100 |
11110010 |
10011100 |
00001110 |
Kde je to potřeba, doplníme hodnotou "0" počet znaků do osmi (na nejvyšší váze tj. vlevo). Potom provedeme následující operaci:
- u prvního byte (zleva) vyjmeme první bit a vložíme ho na konec druhého byte
- z druhého byte vyjmeme první dva bity a vložíme je na konec třetího byte
- z třetího byte vyjmeme první tři bity a vložíme na konec čtvrtého byte
- atd ...
Pro uvedený vzor bude výsledek vypadat tak jak je uvedeno v následující tabulce.
1110100 |
1100101 |
1110011 |
1110100 |
0000 |
74 |
65 |
73 |
74 |
00 |
t |
e |
s |
t |
|
V této tabulce je uveden i další postup zpracování. Uvedená čísla v binárním formátu (první řádek tabulky) převedeme do šestnáctkové soustavy (druhý řádek tabulky) a potom pomocí převodní tabulky na "obecné" znaky (třetí řádek tabulky). Převodní tabulku si můžete stáhnout z mých stránek (v PDF), nebo jinou najdete na http://www.dreamfabric.com/sms/default_alphabet.html.