AT příkazy mohou mít 3 základní podoby:
| Test AT příkazu, zda telefon příkazu rozumí je AT+<příkaz>=? <CR> |
| Načtení nastavených hodnot z telefonu AT+<příkaz>? <CR> |
| Zápis dat nebo hodnot do telefonu AT+<příkaz>=<parametr> <CR> |
Zkratka AT je začátek příkazu, doplníme podle požadovaného povelu, = se zadává pouze v případě, požaduje-li to příkaz pro nastavení
nebo zápis dat a <CR> je potvrzení příkazu klávesou ENTER. Při komunikaci z procesoru se potvrzení <CR> nahradí znakem 0Dh.
Nejjednodušším AT příkazem je samotná dvojice znaků
AT (AT příkaz se ukončuje Enterem); odpovědí telefonu na správně zadaný a provedený AT příkaz je OK. Špatně zadané příkazy jsou ignorovány, pokud jsou v
příkazu zadány jen nesprávné parametry, telefon odpoví ERROR. Pokud mobilní telefon
takto komunikuje, je vše v pořádku a můžeme pokračovat v dalším zkoumání.
V níže uvedené tabulce naleznete soupis nejčastěji používaných příkazů a příklad odpovědí na ně. Upozorňuji,
že odpovědi jsou uvedeny bez řídících znaků, které telefon při odpovědi pošle, t.j. <CR> a <LF> např.
Povel do telefonu:
AT<CR>
41 54 0D ;hexa
Odpověd od telefonu:
<CR><LF> OK <CR><LF>
0D 0A 4F 4B 0D 0A ;hexa
AT příkaz |
Popis |
Příklad povelu do MT |
Příklad odpovědi z MT |
Poznámka |
AT |
Umožňuje otestovat komunikaci s MT. |
AT <CR> |
OK |
|
ATA |
Vyzvednutí příchozího hovoru. |
ATA <CR> |
OK |
Pokud na MT žádný hovor nepřichází tak MT odešle ERROR. Příchozí hovor
MT oznamuje znaky RING. |
ATH |
Zrušení probíhajícího hovoru (zavěšení). |
ATH <CR> |
OK |
|
ATD |
Vytočení telefonního čísla. |
ATD0602123456; <CR> |
OK |
MT vytočí tel. č. 0602123456. Pokud nemá MT signál, tak místo OK
odpoví NO CARRIER |
AT+CPBR |
Vyčte z MT seznam telefonních čísel. |
AT+CPBR=1,4 <CR> |
+CPBR: 1,"931123456",129,"PEPA" +CPBR:
2,"9501234567",129,"TONDA" +CPBR: 3,"901234567",129,"DOMU" +CPBR:
4,"981234567",129,"KAREL" OK |
Vyčte z MT tel. čísla od místa 1 do místa 4. Samozřejmě lze čísla
upravit podle potřeby. Před tímto příkazem je třeba definovat paměť z
které chceme číst viz. +CPBS. |
AT+CPBS |
Definuje pozici telefonního seznamu v MT. |
AT+CPBS="SM" <CR> |
OK |
"SM" = znak pro výběr tel. seznamu na SIM kartě "ME" = znak pro
výběr tel. seznamu v mobilním telefonu Default = "SM" |
AT+CPMS |
Definuje paměť pro práci se SMS. |
AT+CPMS="SM","SM" <CR> |
+CPMS,1,10,1,10 OK |
"SM" = paměť SIM karty "ME" = paměť telefonu. |
AT+CMGL |
Vypíše SMS zprávy. |
AT+CMGL=0 <CR> |
+CMGL:1,0,,26 079124602009999 0040C9124606021 436500002050020 243610808576D0C 37BB6963 OK |
Číslo v příkazu udává typ čtených zpráv: Pro SIEMENS: 0 - přijaté, nečtené zprávy (default) 1 -
přijaté, přečtené zprávy 2 - uložené, neodeslané zprávy 3 - uložené,
odeslané zprávy 4 - všechny zprávy |
AT+CMGD |
Smazání příslušné SMS zprávy. |
AT+CMGD=1 <CR> |
OK |
Číslo v příkazu udává pozici zprávy, která má být smazána. |
AT+CMSS |
Odešle SMS zprávu uloženou v seznamu. |
AT+CMSS=1 <CR>
AT+CMSS=1,+420603123456<CR> |
+CMSS:.12 OK |
Číslo v příkazu udává pozici zprávy v seznamu. U Ericssonu je potřeba
nejdříve definovat paměť s kterou se bude pracovat viz. +CPMS. SMS musí
být uložena i s telefonním číslem (paměť zpráv - odeslané). Druhý povel odešle uloženou SMS ze SIM na tel. číslo zadané za pozicí SMS.
Telefonní číslo je sice součástí uložené SMS, ale pokud zadáme jiné jako parametr tohoto příkazu, pak má toto nové číslo přednost. |
AT+CMGS |
Odeslání SMS ve tvaru PDU. Po zadání tohoto příkazu je možné odeslat SMS v PDU formátu z "vnějšku" telefonu přes konektor. Parametrem
příkazu je délka PDU rámce |
Příklad: AT+CMGS=21 <CR> 0100 0C 91 247077214365 000009 4424685E96DBD373
<CTRL-Z> |
+CMGS: (mr) OK mr=reference zprávy |
Podstatně více o využití tohoto příkazu naleznete na jiné stránce |
AT+CLIP |
Zapne zobrazování telefonního čísla příchozího hovoru. |
AT+CLIP=1<CR> |
OK |
Při příchozím hovoru to potom vypadá takto: RING +CLIP:
"+420602123456",145,,,,0 Při zadání čísla "0" v příkazu se zobrazování
čísla příchozího hovoru vypne. |
ATE |
Zapíná a vypíná echo z MT. Zapnuté echo znamená, že při zadání
povelu do MT se vám před potvrzením vrátí i zadaný příkaz. Defaultně je
echo zapnuto. |
Příklad vypnutí echa: ATE0<CR> |
OK |
Echo se zapne pokud do příkazu zadáte
jedničku. |
AT+CCLK |
Datum a čas z MT |
Příklad : AT+CCLK?<CR> |
+CCLK: "03/01/04,16:30:04" |
Stáhne aktuální čas zobrazovaný na displeji MT. |
Zprávy SMS mohou být v mobilních telefonech uloženy v několika různých
paměťových prostorech (SM, ME, MT). Skutečný počet a velikost jsou však dány typem telefonu.
Operace, které lze provádět se zprávami, jsou rozděleny do tří skupin: čtení zpráv a
jejich mazání, zapisování zpráv a jejich odesílání do sítě a ukládání zpráv po přijetí.
Každé ze tří vyjmenovaných skupin operací lze přiřadit paměťový prostor, se kterým pak operace
z dané skupiny přednostně pracují. Pro správu tohoto přiřazení je v sadě AT příkazů příkaz
AT+CPMS. Tento příkaz (jako mnoho dalších AT příkazů) lze použít ve třech různých
formách pro: testování, čtení a zápis. Testovací formou příkazu (AT+CPMS=?) lze zjistit,
jaké možnosti má připojený telefon v souvislosti s daným AT příkazem. Např. pro telefony C35
vypadá zadání příkazu a odpověď na něj takto:
at+cpms=?
V obou případech je v odpovědi telefonu uveden seznam tří položek oddělených čárkami, přičemž
první položkou je seznam paměťových prostorů, které lze použít pro operace z první skupiny
(čtení, mazání), druhou položkou je seznam prostorů použitelných pro operace druhé skupiny
(zapisování, odesílání) a poslední položkou je seznam prostorů, kam mohou být ukládány přijaté
zprávy SMS. Pro zjištění konkrétní konfigurace přiřazení paměťových prostorů operacím lze
použít příkaz ve formě pro čtení (AT+CPMS?). Odpověď vypadá takto:
at+cpms?
+CPMS: "SM", 5,10, "SM", 5,10, "SM", 5,10
Doplněné číselné údaje znamenají počet momentálně uložených zpráv a kapacitu paměťového prostoru,
tj. kolik zpráv maximálně může být v prostoru uloženo. Podle uvedených odpovědí telefon C35 má
všechny operace nasměrovány do prostoru SM (paměť na SIM kartě) a ani nemá jinou možnost,
počet uložených zpráv je 5 a kapacita paměťového prostoru je 10 zpráv.
Všechny zprávy SMS jsou uloženy v jednotlivých paměťových prostorech na pozicích, které
jsou opatřeny číselnými indexy 1, 2, ... N, kde N je kapacita paměťového prostoru. Je-li přijata
nová zpráva, je uložena do příslušného prostoru na co nejnižší neobsazenou pozici a tato pozice
je pak touto zprávou obsazena, dokud zpráva není smazána (nebo přesunuta). Mazat zprávy v
paměťovém prostoru, který je přiřazen k první skupině operací (příkazem AT+CPMS), lze zapisovací
formou příkazu AT+CMGD. Jediným parametrem je index pozice, která má být uvolněna.
Např. mazání zprávy SMS z pozice 5 proběhne při takovémto dialogu:
at+cmgd=5 OK
Seznam zpráv uložených v paměti lze vypsat příkazem AT+CMGL.
Zadáme-li telefonu jeho testovací formu (AT+CMGL=?), telefon odpoví seznamem možností, kterými
lze upřesnit prováděcí formu příkazu. V tomto případě je upřesněním číselná specifikace typu
zpráv, které má seznam obsahovat. Číselný kód 0 znamená zprávy přijaté, nepřečtené, kód 1
znamená přijaté, přečtené, 2 je pro uložené, neodeslané, 3 pro uložené, odeslané a kód 4 je
pro všechny zprávy. Ve výpisu zpráv je pro každou zprávu uveden index pozice, typ zprávy
(0..3), délka tzv. PDU zprávy a vlastní PDU zprávy, což je řetězec párů hexadecimálních cifer,
ve kterém je zakódováno několik dalších parametrů zprávy a také její vlastní text.
Příklad použití příkazu AT+CMGL:
at+cmgl=4
+CMGL: 1,1,,24
0791246030500200240C912460502143
650000202142905491400541F45B1D02
+CMGL: 2,0,,24
0791246030500200240C912460502143
650000202142907410400541F45BED02
OK
V tomto případě bylo požádáno o výpis všech uložených zpráv. Odpovědí je seznam, v němž
jsou dvě zprávy SMS, jedna je uložena na pozici 1, je přijatá, přečtená a má délku 24 bytů.
Druhá zpráva je uložena na pozici 2, je přijatá, nepřečtená a je také 24 bytů dlouhá.
Kdybychom stejný příkaz zopakovali ještě jednou, bude výsledný seznam shodný až na typ
druhé zprávy, i uvedení zprávy ve výpisu se považuje za přečtení zprávy. Jednu vybranou
zprávu lze vypsat příkazem AT+CMGR. Podobně jako u příkazu AT+CMGD je
nutno jen doplnit index pozice, ze které chceme zprávu přečíst. Čtení z neobsazené pozice
je formálně také možné, v odpovědi je pak oznámena nulová délka zprávy a zcela chybí řádek
s PDU.
Co je to PDU (Protocol Description Unit)
Pokud si pomocí datového kabelu a nějakého terminálu zobrazíte seznam vašich SMS zpráv, které
máte uloženy v telefonu, s největší pravděpodobností je dostanete v PDU formátu.
Jedná o jakousi kompresi dat. Nejlépe se vše pochopí na příkladu:
Podíváme se na následující PDU rámec:
07
91
246030500200
040C91
247077214365
00F1
30601102219480
07
C769B3A50D4201
07 |
Udává počet oktetů SMSC
informace. |
91 |
Určuje typ adresy. 91 = číslo
v mezinárodním tvaru. |
24 60 30 50 02 00
|
Číslo servisního centra 420 603
052 000 |
04 |
První oktet rámce - typ
PDU |
0C |
Délka čísla odesílatele (0C hex =
12 dec = 12 číslic) |
91 |
Typ čísla odesílatele (neznámé,
ISDN, Data, ...) |
24 70 77 21 43 65
|
Číslo odesílatele (420 777 123
456) |
00 |
PID - identifikace
protokolu |
F1 |
DCS - struktura kódování
dat |
30 60 11 02 21 94 80 |
Datum doručení =
rok-měsíc-den-hodina-minuta-sekunda-časová zóna (11.06.03 20:12:49 GMT+2,00) |
07 |
Počet znaků ve zprávě (délka
textu HEXa) 07 hex = 7 dec = 7 znaků NE oktetů! |
C769B3A50D4201 |
Zbývající část je již vlastní zpráva. Nyní si ukážeme jak ji dekódovat.
|
C7 69 B3 A5 0D 42 01 = text GSM-ZAP
Nejprve si text převedeme do
binárního tvaru. POZOR nepřevádíme do binárního tvaru z desítkové soustavy,
ale ze šestnáctkové. Pokud má číslo po převodu (binární číslo) méně jak
8 míst, doplníme na nejvyšších řádech (vlevo) nulami.
C7 |
69 |
B3 |
A5 |
0D |
42 |
01 |
11000111 |
01101001 |
10110011 |
10100101 |
00001101 |
01000010 |
00000001 |
Nyní
můžeme z binárního kódu získat skutečnou hodnotu jednotlivých znaků. Postup
je následující:
| od prvního čísla "odtrhneme" číslici na nejvyšší pozici |
| od druhého čísla "odtrhneme 2 číslice na nejvyšší pozici a na
nejnižší pozici čísla přidáme číslici z nejvyšší pozice prvního čísla |
| od třetího čísla "odtrhneme" 3 číslice na nejvyšší pozici a na
nejnižší pozici čísla přidáme 2 číslice z nejvyšší pozice druhého čísla. |
| atd. |
Jestli se vám zdá tento postup komplikovaný, pozorně si
prohlédněte obě tabulky a po chvíli vám to bude určitě
jasné.
01000111 |
01010011 |
01001101 |
00101101 |
01011010 |
01000001 |
01010000 |
71 |
83 |
77 |
45 |
90 |
65 |
80 |
G |
S |
M |
- |
Z |
A |
P |
Zde jsem ukázal způsob rekonstrukce dat z PDU formátu SMS zprávy. Toto byla zpráva pro zapnutí relé u konstrukce GSM alarmu.
Zpráva se v mikroprocesoru zpracovává tak, že se testuje znak dvojtečky v příchozích datech (viz příkaz CMGL). Protože
známe délku rámce PDU, který chceme zpracovat (tuto délku samozřejmě musíme vypočítat předem) tím také
můžeme přesně určit, kde začínají data textu SMS. Od tohoto místa začneme data porovnávat s daty
platných kódů. Nemusíme provádět dekódování, ale rovnou porovnáváme čísla.
Pokud chceme změnit ovládací povel, musíme nejprve vytvořit nový PDU rámec. Přestože je to možné ručně, člověk je tvor lenivý a tak
proč nevyužít výpočetní techniku. Existuje velice šikovný
software pro kódování a dekódování SMS. Pomocí něho vytvoříme novou sms - tedy
část textu a odpočítáme znaky od počátku rámce po užitečná data. Pokud se liší délka dat, je nutné samozřejmě také upravit počet testování shodnosti.
Kódování SMS do formátu PDU pomocí jednočipu (PIC) i s rutinou ke stažení je popsáno na jiné stránce.
| | Program pro konstrukci, kódování a dekódování PDU formátu SMS |
|
| | AT příkazy pro Siemens C35i (english) |
|
© DH servis 2002 - |