Dokumentace projektu

Transkript

Dokumentace projektu
Staněk M.
Siemens S45i Manager
14.04.2003
Úvod
Siemens S45 Manager je software, který je určen pro správu mobilního telefonu
prostřednictvím PC.
Jako požadované parametry jsem zvolil :
- práci s textovými zprávami;
- práci s telefonním seznamem;
- monitorování GSM sítě a stavu hardrware telefonu;
Jako ročníkový projekt jsem jej zvolil, pro naprostou absenci podobného, volně
dostupného software, který by využíval plně možnosti telefonu hlavně v oblasti práce
s adresářem a textovými zprávami. Monitorování sítě a stavu hardware telefonu je již
méně podstatnou záležitostí.
1
Staněk M.
Siemens S45i Manager
14.04.2003
Koncept projektu
Každý GSM mobilní telefon, jehož součástí je i hardwarový modem, by měl být podle
norem Institutu Evropských Telekomunikačních Standardů (ETSI), schopen komunikace
s externími zařízeními formou AT příkazů, jenž jsou těmito normami přesně definovány,
prostřednictvím sériového kanálu.
Na základě tohoto předpokladu vzniknul koncept projektu.Úkolem bylo tedy vytvořit
software, který naváže komunikaci prostřednictvím sériového kanálu s telefonem a
poskytne uživateli možnost pohodlné práce s adresářem a textovými zprávami.
Hardwarové řešení
Vlastní komunikace probíhá naprosto totožně jako u jakýchkoli externích modemů
koncipovaných na sériový kanál, tzn. že napěťové úrovně RS232 jsou upraveny
převodníkem (např. MAX232, MAX323) na úroveň TTL, zatímco veškeré časování a řízení
toku dat odpovídá normě RS232.
Telefon Siemens S45 pro který je software přizpůsoben, vyžaduje komunikaci na rozmezí
přenosových rychlostí 9600kb/s až 19200kb/s, v datové šířce 8 bitů s 1 stopbitem,
parita a řízení toku dat ať už softwarové, nebo hardwarové je potencionálně volitelné,
nicméně jsem toto ponechal nevyužitým a tok dat není ničím řízen.
Softwarové řešení
Softwarové řešení vychází z uspořádání Jádra a Uživatelského prostředí.
Jádro musí plnit následující funkce :
- Plně zabezpečovat vlastní komunikaci s telefonem prostřednictvím sériového
kanálu;
- Poskytovat veškerá výstupní data nezávisle;
- Předpokládat maximální množství možných nestandardních situací a chyb, efektivně
na ně reagovat a poskytovat o těchto chybách informace;
- Být v každém okamžiku plně pod kontrolou;
- Veškerý konstantní textový výstup musí umožňovat snadnou cizojazyčnou
lokalizaci;
- Plně využít možností objektově orientovaného programování – koncipovat jej jako
samostatný dílčí celek (třídu, komponentu);
Uživatelské prostředí musí :
- Využívat možností jádra, tak aby se minimalizovalo riziko možné chyby;
- Být uživatelsky příjemné a elegantní;
- Být kompromisem mezi rychlostí a spolehlivostí;
2
Staněk M.
Siemens S45i Manager
14.04.2003
Výsledný software jako celek musí :
- Být nezávislý na verzi platformy MS Windows;
- Být schopen patřičně reagovat na ztrátu svých konfiguračních souborů;
- Minimalizovat zásahy do konfigurace operačního systému;
Grafické znázornění konceptu :
3
Staněk M.
Siemens S45i Manager
14.04.2003
Realizace projektu
AT příkazy
Jsou to jednoduché textové řetězce začínající prefixem AT odesílané sériovým kanálem
na port telefonu.Jsou-li akceptovány telefonem, tento provede nějakou činnost, nebo
pošle zpět data a následně potvrdí výsledek této činnosti.Tento AT protokol definuje
norma ETSI :
ETS 300 642, GSM 07.07 ver. 4.4.1 Phase 2, přiložená jako příloha.
Příkladně,chceme-li zjistit výrobce telefonu :
Příkaz :
AT+CGMI <CR>
Odpověď : <výrobce> <CRLF> <OK>
Případně
<ERROR> není-li příkaz akceptován, nebo dojde-li k jiné chybě.
Přistup na porty pod platformou Windows
Tento problém lze řešit, pokud je třeba zachovat nezávislost na platformě, pouze a
jedině využitím funkcí, které nabízí jádro operačních systémů Windows WIN
API.Alternativní jsou pouze postupy jakými lze k API přistupovat. První z těchto
alternativ může být dynamicky linkovaná knihovna Ports.dll, která je volně dostupná a
zahrnuje operace i pro sériové porty. Jinou možností je použití, některé z komponent
určených pro Delphi.Rozhodl jsem se však, že se pokusím podobnou komponentu napsat
sám, protože jsem musel dodržet uvedené body v návrhu jádra, a to konkrétně jeho
nezávislost, stabilitu a stoprocentní kontrolu jeho činnosti a řízení chyb.
Pokusil jsem se pochopit systém přístupů k portům přes API, prostřednictvím Delphi.
Přeložil jsem kapitoly elektronické nápovědy k Delphi (soubor poskytnut jako příloha),
které se tohoto problému týkají.
Systém práce s porty se výrazně liší ve verzi 3.11 a 95+, tím, že platforma 3.11 používá
pro práci s porty systém zpráv a nikoli kooperaci několika podporcesů na pozadí, jako
32bitové, nové systémy MS Windows.(z toho vyplývá nepřenositelnost kódu projektu do
Delphi 1).
Komponentu jsem se pokoušel napsat s využitím dvou podprocesů (potomků třídy
TThread) které kontrolovaly signalizovaný stav událostních objektů (TEvent),
přidružených k Overapped strukturám, které využívá WIN API, k řízení podprocesů
kontrolujících zápis, čtení a události vznikajících na portech. Kód však nebyl stabilní a
v oblasti čtení z portu a řízení událostí nepracoval správně.
Byl jsem tedy nucen použít volně šiřitelnou komponentu VaComm od Petra Voneše,
4
Staněk M.
Siemens S45i Manager
14.04.2003
která je implementována v jádru projektu a pracuje bez jakýchkoli chyb pod všemi
platformami počínaje Win 95.
Jádro projektu
Tvoří třída TSiemensS45i, jako potomek třídy TComponent a je tedy uzpůsobena pro
pozdější případnou transformaci v nevizuální komponentu.Zabezpečení komunikace
s telefonem je jak bylo již zmíněno chráněným a neoddělitelným objektem VaComm
přímo obsaženým ve vlastnické třídě TSiemensS45i, což zajišťuje její nezávislost. Přístup
k metodám objektu VaComm je realizován výhradně a jen přes kontrolované a
zabezpečené metody vlastnické třídy TSiemensS45i tím je zajištěna bezkoliznost.
Třída TSiemensS45i je definována takto :
Pozdější potencionální jazyková lokalizace je zajištěna definicí všech konstantních
textových řetězců jako resourcestring, například :
resourcestring
errNotConnectOrOperationPending =
'Telefon není připojen, nebo probíhá nějaká operace.';
errPhoneNotSupportThisCommand =
'Telefon tento příkaz pravděpodobně nepodporuje.';
… atd.
5
Staněk M.
Siemens S45i Manager
14.04.2003
Hlavička třídy se všemi metodami :
TSiemensS45i = class(TComponent)
protected
Answer
: AnsiString;
Readed
: boolean;
WaitTime : cardinal;
SMSPDU
: TSMSPDU;
Comm
: TVAComm;
procedure RxChar(Sender : TObject; Count : integer);
function EnableEcho : boolean;
function DisableEcho : boolean;
private
OperationPending : boolean;
public
Connected : boolean;
WireOpened : boolean;
PortNumber : byte;
BaudRate
: TVABaudRate;
function
function
function
function
function
Connect
DisConnect
OpenWire
CloseWire
IsPhoneConnect
:
:
:
:
:
boolean;
boolean;
boolean;
boolean;
boolean;
//f-ce poporovane telefony dle normy ETSI
function GetIMEI
: string;
function GetType
: string;
function GetManufacturer
: string;
function GetSIMID
: string;
function GetTime
: string;
function GetDataState
: string;
function GetGSMPhoneVersion
: string;
function GetIMSI
: string;
function GetBateryCharge
: string;
function GetSignalQuality
: string;
function GetPhoneStatus
: string;
function GetSIMPhnBookInterval
: string;
function GetSIMPhnBookTelLen
: string;
function GetSIMPhnBookNameLen
: string;
function ReadPhoneBkName(Num : byte)
: string;
function WritePhoneBkName(Name,Num,NmTp: string; Ind : word) : boolean;
function GetPhoneBkTelNumType
: string;
function GetSelectedPhoneBook
: TPhoneBook;
6
Staněk M.
Siemens S45i Manager
function
function
function
function
function
function
function
function
function
function
function
function
function
function
function
function
function
function
function
function
function
function
function
function
SetPhoneBook(PhBk : TPhoneBook)
GetSelPhBookMax
GetSelPhBookUsed
GetSMSServiceCenterAdress
GetSelectedReadSMSMem
GetSelectedWriteSMSMem
SetSMSMemory(RM,WM,SM : TSMSmemory)
GetSelectedStoreSMSMem
GetSMSReadMemUsed
GetSMSWriteMemUsed
GetSMSStoreMemUsed
GetSMSReadMemMax
GetSMSWriteMemMax
GetSMSStoreMemMax
GetSMSList
GetRecUnReadSMSPositions
GetRecReadSMSPositions
GetStoUnsentSMSPositions
GetStoSentSMSPositions
ReadSMS(Num : byte)
DeleteSMS(Num : byte)
GetSMSFormat
SendSMSMessage
EnterPIN(PIN : word)
//funkce
function
function
function
ktere podporuji pouze telefony Siemens
PlaySignalTone(Tone, Volume : byte)
SwitchDeviceOff
GetAdress(Num : word)
//funkce
function
function
function
function
function
function
function
function
potrebne pro praci s tridou
PhBookToDefStr(PhBk : TPhoneBook)
PhBookToStr(PhBk : TPhoneBook)
StrToPhBook(Str : string)
SMSMemToDefStr(SMSMem : TSMSMemory)
SMSMemToStr(SMSMem : TSMSMemory)
StrToSMSMem(SMSStr : string)
DecodeHex(Hex : AnsiString)
StrToAdr(Str : ansistring)
14.04.2003
:
:
:
:
:
: boolean;
: string;
: string;
: string;
: TSMSMemory;
: TSMSMemory;
: boolean;
: TSMSMemory;
: string;
: string;
: string;
: string;
: string;
: string;
TSMSPositionsArray;
TSMSPositionsArray;
TSMSPositionsArray;
TSMSPositionsArray;
TSMSPositionsArray;
: TSMS;
: boolean;
: string;
: string;
: boolean;
: boolean;
: boolean;
: TAdress;
: string;
: string;
: TPhoneBook;
: string;
: string;
: TSMSMemory;
: AnsiString;
: TAdress;
constructor Create(AOwner : TComponent); override;
destructor Destroy; override;
end;
7
Staněk M.
Siemens S45i Manager
14.04.2003
Následující výpis jednoduché metody, která vrací stav baterie, nastíní jak je zajištěna
kontrola nad třídou :
-
-
operace se provede jen pokud je telefon připojen a pokud neprobíhá žádná další
operace
pak si funkce nastavením proměnné OperationPending uzamkne přístup na port, a
nastaví hodnotu proměnné WaitTime ve které odhaduje kolik času jí zabere
vyhodnotit odpověď (zde se předpokládá konstantních 200ms), a nastaví
booleovskou proměnnou Readed na FALSE, čímž dá najevo že na odpověď teprve
čeká
pošle příkaz a vyhodnotí odpověď , pokud došlo k chybě pokusí se odhadnout jak
mohla nastat a tento odhad umístí do proměnné LastError
function TSiemensS45i.GetBateryCharge: string;
begin
Result := 'ERROR';
if Connected and not OperationPending
then begin
OperationPending := TRUE;
Answer := '';
Readed := FALSE;
Comm.WriteText('AT+CBC'+#13);
while not Readed do begin Application.ProcessMessages; end;
if Pos('OK', Answer) = 0
then if Pos('ERROR', Answer) <> 0
then begin
LastError := errPhoneNotSupportThisCommand;
Result := 'ERROR';
end
else begin
LastError := errCommunicationError;
Result := 'ERROR';
end
else begin
Delete(Answer, Pos('AT+CBC'+#13,Answer),17);
Delete(Answer, Pos(#13#10, Answer), 4);
Delete(Answer, Pos('OK', Answer), 4);
Answer := Answer + ' %';
Result := Answer;
end;
OperationPending := FALSE;
end
else LastError := errNotConnectOrOperationPending;
end;
8
Staněk M.
Siemens S45i Manager
14.04.2003
Tímto způsobem je zajištěno, že jsou veškerá data získávána prostřednictvím
návratových hodnot funkcí a naprosto nezávisle na sobě, aniž by se mohlo stát, že dojde
ke kolizi způsobené překrýváním požadavků na čtení dat z telefonu.
Další chráněnou třídou obsaženou v TSiemensS45i je třída TSMSPDU, jde o její nedílnou
součást.Třída TSMSPDU má za úkol dekódovat a kódovat krátké textové zprávy z a do
PDU formátu.
PDU formát
Je 7-mi bitové kódovací schéma opět definované normou ETSI :
TS 100 900, GSM 03.38 ver. 7.2.0 Phase 2+, přiloženou v příloze.
V mobilních telefonech jsou SMS zprávy uloženy v následující podobě :
079124603050020031000C912470326477900000FF10D33239DD06D941E2B0BC0ED2B
D53
Po dekódování tohoto řetězce získáme mimo jíné tato data :
Příjemce : +42072346770(?)
Text zprávy : Sedim v baru :o)
9
Staněk M.
Siemens S45i Manager
14.04.2003
Hlavička třídy TSMSPDU je definována takto :
TSMSPDU = class(TObject)
public
SMS : TSMS;
SMSMessageInPDU : AnsiString;
function HexToDec(hex : string) : integer;
function HexToBin(hex : Char)
: string;
function BinToDec(bin : string) : integer;
function DecToBin(dec : byte)
: string;
function MinToTime(min : word)
: string;
function DecToHex(dec : integer) : string;
function BinToHex(bin : string) : string;
constructor Create;
destructor Destroy; override;
function DecodeData : boolean;
function EncondeData : boolean;
function DisArrayString(str : string) : string;
function HexToStr(Hex : ansistring; Chars : word) : ansistring;
function StrToHex(Txt : ansistring; var Chars : word) : ansistring;
end;
10
Staněk M.
Siemens S45i Manager
14.04.2003
Funkce DecodeData dekóduje PDU řetězec a naplní záznam SMS typu TSMS, který je
definován takto :
TSMS = record
ServiceCenterAdress : record
Length : byte;
NumberFormat : TNumberFormat;
Number : string[24];
end;
ProtocolDataUnitType : record
ReplyPath : boolean;
UserDataHeaderIndicator : boolean;
StatusReportRequest : boolean;
ValidityPeriodFormat : TPDUVPF;
RejectDuplicateOrMMS : boolean;
MessageTypeIndicator : TPDUMTI;
end;
MessageReference : byte;
OriginatorDestinationAdress : record
Length : byte;
NumberFormat : TNumberFormat;
Number : string[24];
end;
ProtocolIdentifier : byte;
DataCodingScheme : TSMSDCS;
ValidityPeriod : string[20];
ValidityPeriodTimeZone : string[2];
ServiceCenterTimeStamp : string[25];
ServiceCenterTimeZone : string[2];
Chars : byte;
Text : string[255];
end;
Adresář v telefonu je kódován podobně jako textové zprávy, algoritmus, který toto
dekódováni zajišťuje je však podstatně jednodušší.
11
Staněk M.
Siemens S45i Manager
14.04.2003
Určování geografické polohy prostřednictvím dat GSM sítě
Je realizováno poměrně jednoduše. Z telefonu jsou získána data operátora – jeho
identifikační kód, kód státu a kód buňky sítě na kterou je telefon zrovna připojen.
Operátoři poskytují a pravidelně aktualizují soubory se seznamy těchto buněk. Stačí tedy
prohledat datový soubor příslušný k danému operátorovi, najít odpovídající číslo buňky a
zobrazit její popis.
Uživatelské prostředí
Následuje několik informativních obrázků, z běhu programu.
Jedná se jen o několik nejduležitějších oken demonstrujících styl uživatelského prostředí.
Není-li nalezen telefon na požadovaném portu :
Není-li telefon požadovaného typu :
12
Staněk M.
Siemens S45i Manager
14.04.2003
Byl-li telefon úspěšně připojen :
Je-li baterie telefonu příliš vybitá
Hlavní okno programu, naplněno daty SMS :
13
Staněk M.
Siemens S45i Manager
14.04.2003
Hlavní okno programu, naplněno daty SMS načtené z dataváze, aplikace je v tomto
případě přeskinovaná operačním systémem :
Informace o průběhu načítání dat (zde telefonní seznam) :
14
Staněk M.
Siemens S45i Manager
14.04.2003
Okno telefonního seznamu, naplněného daty :
15
Staněk M.
Siemens S45i Manager
14.04.2003
Okno sledování stavu sítě :
16
Staněk M.
Siemens S45i Manager
14.04.2003
Ukázka stylu menu v aplikaci :
Okno „About“, skin OS :
17
Staněk M.
Siemens S45i Manager
14.04.2003
Závěr
Projekt měl být původně realizován pro telefon Nokia 7110. Vycházel jsem
z předpokladu, že pokud existuje software komunikující s telefonem a pokud Nokia 7110
obsahuje hardwarový modem měla by být schopná komunikace dle norem ETSI.
Nicméně po připojení k PC nereagovala na žádné ze zadávaných AT příkazů.Předpokládal
jsem, že je to proto, že je nutné nastavit parametry komunikace přímo v telefonu, nebo,
že jde o podobný problém.Kontaktoval jsem tedy oficiální zastoupení společnosti Nokia
pro ČR, písemně, telefonicky a nakonec i osobně, ale nedostal jsem žádnou odpověď,
která by problém ozřejmila. Proto jsem kontaktoval programátory společnosti
OxygenSoftware, jako největší společnost na poli vývoje software pro telefony Nokia, ani
zde jsem nedostal uspokojivou odpověď . Až po prozkoumání zapojení datových kabelů,
jsem zjistil, že pro správnou funkci hardwarového modemu je třeba kabel typového
označení DLR-3, který kromě dvou napěťových převodníků MAX323 obsahuje
mikrokontroler, který plní funkci konvertoru proprietálního, privátního komunikačního
protokolu společnosti Nokia na standardní AT protokol ETSI a po připojení k modemu
poskytuje telefonu hardwarový klíč.Vlastní výroba tohoto kabelu byla téměř nemyslitelná
a jeho cena jako originálu krajně neekonomická, proto jsem se rozhodl dokončit projekt
s jiným telefonem, který se již od počátku chová standardně.
Tímto je Siemens S45i.Po připojení k hyperterminálu okamžitě reaguje na AT
příkazy,odkryla se tedy cesta k řešení dalších problémů, které již byly pouze
softwarového rázu.
Závěrem bych chtěl poděkovat všem pegagogům za jejích spoluprácí, či rady.
18
Staněk M.
Siemens S45i Manager
14.04.2003
Použitá literatura a ostatní zdroje :
Delphi : Mistrovství v Delphi 6; Xavier Pacheco, Steve Texiera; Computer Press 2002
(tvorba komponent, podprocesy a vlákna, systém zpráv MS Windows)
www.builder.cz - fórum Delphi
(řešení přístupu na porty, seriál : Sériové rozhrani pod Delphi)
www.zive.cz
(seriál : Umíme to s Delphi, Václav Kadlec, vizualní stránka aplikace)
Normy : www.etsi.org – European Telecommunication Standards Institute
AT Protokol : ETS 300 642, March 1999, GSM 07.07 ver. 4.4.1 Phase 2
SMS PDU : TS 100 900, GSM 03.38 ver. 7.2.0 Release 1998, Phase 2+
Siemens : www.my-siemens.cz – technická specifikace a dokumentace telefonu
Siemens S45(i)
Kompletní sada AT příkazů pro daný typ telefonu :
AT Command set for S45 Siemens mobile phones and modems
Release/Version 1.7; 26 July, 2001
Specifikace SMS PDU formátu společností Siemens :
Developer’s Guide; SMS with the SMS PDU – mode
Release/Version 1.2; 30.07, 1997
Nokia : www.nokia.com – řešení problému proprietálního protokolu.
Technická specifikace programu :
Jazyk : Object Pascal 32, IDE – Borland Delphi 5-Enterprise
Object Pascal 32, IDE – Borland Delphi 6-Enterprise, licence na produkci
freeware
Platforma : IBM PC; MS Windows 95+
Verze : v době práce na dokumentaci - 0.8.7.203
V době prezentace projektu ke dni 29.04.2003 – 1.0.0.build
Soubory nutné pro chod programu :
Siemens Phone Manager.exe
.\BTS\23001.dat
.\BTS\23002.dat
.\BTS\23003.dat
Velikost programu : 890,5 kB
Programový kód : 7335 řádků; 596 kB
Jazyková lokalizace : Čeština
Licence : freeware, opensource
Uživatelská podpora : http://orpheus.wz.cz
[email protected]
19
Staněk M.
Siemens S45i Manager
14.04.2003
Specifikace platformy na které byl software odlazen :
Athlon XP 2200+ 1,9 GHz
MSI K7400
512 MB RAM
MS Windows XP Professional
Seznam příloh k dokumentaci :
20

Podobné dokumenty

Diplomová práce

Diplomová práce jen na jeden model, případně jednoho výrobce telefonů a není možné je snadno rozšířit pro podporu dalších modelů. To je často způsobeno tím, že vývojář píše jen pro svůj vlastní telefon, mimo jiné ...

Více

ASTRA CLASSIC - již od 279.900 Kč

ASTRA CLASSIC - již od 279.900 Kč * Spotřeba podle 1999/100/EU Informace jsou aktuální k 1.1.2012. Váš Opel dealer vám poskytne přesné informace o změnách, které mohly nastat. Údaje mají jen informativní charakter a Opel SE za ně n...

Více

Akční ceník OPEL ASTRA CLASSIC

Akční ceník OPEL ASTRA CLASSIC * Spotřeba podle 1999/100/EU Informace jsou aktuální k 1.7.2011. Váš Opel dealer vám poskytne přesné informace o změnách, které mohly nastat. Údaje mají jen informativní charakter a Opel SE za ně n...

Více

H.323 Revisited

H.323 Revisited IP adresa (IPv4) má 32 bitů (RFC-796) a obsahuje adresu sítě a adresu počítače ve čtyřech oketech, adresy jsou rozděleny do pěti tříd, třída D je pro multicast (využívá např. protokol RIP, OSPF neb...

Více

návod na úpravu skriptů, naleznete zde

návod na úpravu skriptů, naleznete zde Nástroj pro zjištění změn definic skriptování mezi verzemi (DefsComp) Pro lepší orientaci ve změnách skriptování bude generován vždy s novou verzí soubor s definicemi skriptování dané verze s přípo...

Více

1. Seznámení s C++ Builderem

1. Seznámení s C++ Builderem formuláře uložíme do souboru, pak Builder vyžaduje použití přípony CPP. Každý formulář má mimo své programové jednotky další soubor, obsahující popis vzhledu formuláře (vlastnosti formuláře a obje...

Více

C++ Builder 4.0 - Tvorba software

C++ Builder 4.0 - Tvorba software Následuje deklarace ukazatele na instanci třídy TForm1, která v programu reprezentuje hlavní okno aplikace. Zbytek není nic jiného než deklarace konstruktoru třídy TForm1. Jediná věc, kterou tento ...

Více

Test pravého SiemensManiaka

Test pravého SiemensManiaka Test pravého SiemensManiaka2 Zakroužkujte vždy jednu správnou odpověď. 1. Který z uvedených telefonů má nejmenší rozměry displaye (pixelů)? a) A75 b) AX75 c) AX72 d) AP75 2. Jaký je dosud nejnovějš...

Více

Klient pro správu databáz´ı MySQL Zbynek Munzar

Klient pro správu databáz´ı MySQL Zbynek Munzar MySQL je databázový systém vyvı́jený švédskou firmou MySQL AB. Začal vznikat v osmdesátých letech minulého stoletı́ a na jeho počátku stáli tři tvůrci David Axmark, Allan Larsson a M...

Více

JAKÝ SOFTWARE POUŽÍT PRO TELEFONY SIEMENS

JAKÝ SOFTWARE POUŽÍT PRO TELEFONY SIEMENS Originální software Siemens Data Suite a Siemens Mobile Phone Manager Software je určen pro všechny typy telefonů Siemens (včetně řady X65). Tyto originální programy umožňují kompletní správu telef...

Více