Ve starších variantách firmwaru Wavecom/Sierra na modemech Maestro bylo třeba si vybrat, zda chcete VAF stack (SmartPack) vs. WIPsoft a podle toho flashnout odpovídající OpenAT aplikaci. V novějším SmartPacku je možnost vybrat ten či onen stack až po naběhnutí OpenAT aplikace, příkazem AT+SPMODE: AT+SPMODE=0 SmartPack (default) AT+SPMODE=1 WIPSoft Funguje to někde cca od firmwaru 7.51 / 7.52 . --------------------- Tento příklad se týká autonomního TCP/IP stacku Maestro "Value Added Feature", který je nově součástí balíků SmartPack (pro Maestro 100) nebo Heritage Software Tools. Tento TCP/IP stack se snadno konfiguruje. K ukončení spojení lze použít znak ETX (klasická sekvence +++ zde nefunguje). Je určen především pro "hloupá" zařízení, která neumí pracovat s modemem (posílat AT příkazy) - a to ze dvou důvodů: 1) umí AUTOTCP/AUTOUDP 2) příkazy AT+IPTCP a AT+IPUDP se automaticky ukládají do Flashky (do oblasti pro OpenAT aplikace). Lze se obávat, že případné časté změny těchto parametrů (tj. kam se bude navazovat klientské spojení) povedou k předčasnému zničení Flash paměti opakovanými zápisy. Příkazy v závorce není třeba zadávat, alespoň ne pokaždé. Příkazy odsazené o mezeru doprava není třeba zadávat, pokud je konfigurace uložena ve flashce. Příkazy neodsazené a neozávorkované je potřeba zadat vždy po startu/resetu modemu. (AT+CPIN=1234) (toto si VAF nastaví sám: AT+CGDCONT=1,"IP","internet.t-mobile.cz") (AT+WIND=255 = zapni podrobnější "nevyžádané" stavové hlášky +WIND...) (AT+CREG=2 = zapni "nevyžádané" hlášky o registraci k síti a poloze) (AT+CMEE=1 = zapni podrobnější hlášení chyb - vrací kromě ERROR taky chybový kód) AT+WOPEN=1 = spusť OpenAT aplikaci (zde VAF) - toto jede po prvním zavolání furt AT+IPGPRS=1,"internet.t-mobile.cz","","" = APN, login, heslo (veřejné APN login/heslo nevyžadují) --- Následující příkazy začnou vracet OK teprve poté, co se modem kompletně --- --- inicializuje, včetně SIM a připojení na síť - cca za 20 sekund od startu. --- --- Pokud to potřebujete zjistit přesně, sledujte korelaci s hláškami +WIND. --- AT+IPCONNECT=1,1 = nahoď GPRS bearer - chvíli to trvá AT+IPTCP=25,"C","77.104.235.122",0 = předkonfiguruj parametry TCP spojení (ještě nenahodí relaci) (AT+IPOPT=... = TCP keepalive, MTU, TTL a další vlastnosti) (AT+DLEMODE=0 = vypnout escapování ETX/DLE, pokud Vám to vadí - neplatí pro AutoTCP, tam to vůbec nejde zapnout) AT+OTCP = nahoď TCP relaci (dostanete "CONNECT") - po ukončení relace dostanete "NO CARRIER". Shodit spojení nelze pomocí +++, ale znakem = 0x03 hexa = CTRL+C. AT+OTCP lze donekonečna opakovat (pokud neupadne GPRS bearer). (AT+AUTOTCP=1 = nahoď TCP relaci a drž se zuby nehty, nahoď ji taky hned po restartu) (AT+WOPEN=0 = vypni OpenAT aplikaci (zde VAF)) Další příkazy: UDP: AT+IPUDP AT+OUDP AT+AUTOUDP Modifikace chování stacku: AT+IPBUFF = kolik bufferovat směrem z TCP do UARTu AT+DLEMODE = zda funguje escape znak ETX = 0x03 hexa = CTRL+C v OTCP/OUDP pro ukončení spojení. Dá se buď vypnout (DLEMODE=0), nebo escapovat znakem DLE = 0x10 hexa = CTRL+P. Poznámky: Všechny konfigurační příkazy VAF (tj. AT+IPGPRS, AT+IPTCP, AT+DLEMODE, AT+IPBUFF) se automaticky ukládají do flashky. AT+OTCP/OUDP se pochopitelně neukládá. Zato se ukládá AT+AUTOTCP/AUTOUDP. Takže modem lze nakonfigurovat tak, aby se po zapnutí sám chytil do GPRS sítě a připojil někam na TCP port (nebo aby začal poslouchat na socketu), aniž by bylo třeba zadat jediný AT příkaz z konzoly. Toto je vynikající funkce pro hloupá zařízení, která neumí pracovat s modemem buď vůbec, nebo jenom v omezené míře. Plyne z toho jedna otázka: jak vypnout AUTOTCP/AUTOUDP? Odpověď zní: máte na to po startu asi 20 sekund, než se stačí inicializovat SIMka a než se modem zaregistruje do GSM+GPRS. Zvláštním případem je příkaz AT+IPCONNECT. Pokud zapnete AT+AUTOTCP/AUTOUDP, tak se po startu AT+IPCONNECT nahodí automaticky. Pokud je AT+AUTOTCP/AUTOUDP vypnuté, tak AT+IPCONNECT zůstane po startu vypnutý (neukládá se do flashky) a musíte ho po každém restartu/resetu firmwaru zavolat explicitně znova. Pokud Vám AT+IPCONNECT=1,1 vrací error (start GPRS služby), možná máte slabý signál / špatně umístěnou anténu (zkontrolujte přes AT+CSQ) Novější verze VAF/SmartPack (zcela jistě SmartPack 0095 v modemech Maestro 100 EVO) umí hlídat konektivitu PINGem a umí posílat TCP keepalives. Klasický ruční AT+IPPING lze provést pouze v příkazovém režimu, tj. pokud na sériový port není připojena TCP relace => pro nějaké trvalé hlídání na pozadí je manuální ping k ničemu. Klíčem k monitorovacím funkcím na pozadí je příkaz AT+IPOPT, který má několik podvariant (lze konfigurovat několik věcí). Nás v tomto bodě zajímají především AT+IPOPT=4,perioda,akce # ping a AT+IPOPT=1,akce # TCP keepalive při otevřeném spojení V případě pingu (IPOPT=4) pozor na jednu věc: konfigurace se děje ve dvou krocích: 1) nejprve je třeba příkazem AT+IPPING zadat parametry pingání (platí pro jednu dávku): AT+IPPING=2,"123.234.123.234",3,1,15 2 = "pingej" (prakticky konstanta, jiná hodnota není možná) druhým argumentem je IP adresa cíle 3 = počet pingů v dávce 1 = perioda pingů v dávce 15 = timeout, jak dlouho se čeká na odpověď (ICMP echo reply) 2) následně je potřeba říct autonomnímu TCP stacku, že má hlídat pingem konektivitu: AT+IPOPT=4,perioda,akce perioda = jak často vyslat testovací dávku (ve vteřinách) akce při výpadku: 0=nedělat nic, 1=reset GPRS (AT+IPCONNECT=1,0), 2=reset modemu TCP keepalives fungují tak, že se v rámci stávající otevřené TCP relace pošle paket s prázdným TCP payloadem (o nulové délce). Na druhé straně nevypadnou z otevřeného socketu žádná data, ale TCP stack protistrany musí poslat ACK. To je potenciálně užitečné ke dvěma věcem: 1) udrží se při životě otevřená relace, jak na koncových bodech, tak na stavových (connection tracking) firewallech po cestě 2) teoreticky by tím šlo hlídat konektivitu, a to velmi cíleně/specificky konektivitu naší užitečné TCP relace. Pokud se nevrátí ACK, prohlásí "strana která poslala keepalive" socket za uzavřený a to by mělo vyvolat jakousi nápravnou akci (resp. třeba i celý řetízek akcí). Prakticky ovšem bod 2 není moc použitelný, a to ze dvou důvodů: A) v případě AT+IPOPT=1,akce je možné keepalives pouze povolit/zakázat, ale není možné nastavit jejich *periodicitu* - ta je pevná, 7200 s = 2 hodiny. B) zdá se, že GPRS konektivita není zcela transparentní. Konkrétně se zdá, že oba konce GPRS "tunelu" (z jedné strany MT, z druhé strany GGSN) vstupují do TCP flow control jakožto prostředníci, konkrétně posílají spontánní ACKy! Dokonce po omezenou dobu bufferují odesílaná data. Tuto vlastnost objevil jeden náš zaměstnanec vcelku náhodou (experimentálně). Jedná se patrně o záměr "vykrýt" krátké výpadky konektivity u mobilních stanic (MT), kteréžto výpadky jsou v GPRS síti spíš denním chlebem než výjimkou. "Vedlejším" efektem je, že TCP keepalives nelze použít pro hlídání konektivity - protože otevřená TCP relace spokojeně vrací ACKy, přestože spojení prokazatelně nefunguje (neprochází payload).