PDU-Mode

Werbung
PDU-Mode
Die SMS werden dem Natel im PDU-Mode (Protocol Data Unit) übergeben. Dieser Mode wurde
als Ergänzung zum trensparenten Textmode definiert - man kann nicht mehr genau feststellen
was Übertragen wird und wie dies gemacht wird - ausser man kennt den Datenaufbau. Wie die
Daten nun aufgebaut sind wird auf dieser Seite beschrieben.
Gehen wir einmal davon aus, folgende SMS vom Rechner an den Landeplatz zu senden. In
dieser SMS sind 10 Positionsmeldungen mit Groundspeed und die Zeit der letzten Position
enthalten. Somit hat die zu sendende SMS folgenden Inhalt :
47D80B0AE8FA0C47D812OAE9040047D8F30AEA981447D9E90AEB571547DAFB0AEBF01C
47DC010AEDED1C4FDCDB0AEF352247DDE00AF1DF2247DEEA0AF5752A47DFB60AF8441D
0C1600
Nachdem das Modem des Natel initialisiert ist, (oder auch nicht, wenn defaultmässig der
PDU-Mode aktiv ist), kann mit dem folgenden AT-Kommando eine SMS ausgelöst werden
(GSM 07.05 version 5.5.0: January 1998) :
AT+CMGS=140<CR>
> ... Daten im PDU-Format ... <Ctrl Z>
+GMGS: 10
OK
Das Auslösen der Eingabe für die Message im PDU-Format ist die Engabe von
AT+CMGS=<Message Length> und CR. Die Länge maximale Länge kann angegeben werden.
Nachdem das Modem ">" ausgegeben hat, können die Daten im PDU-Format übergeben
werden. Der Abschluss der Eingabe wird mit einem Ctrl+Z gemacht. Wenn das Modem die SMS
via Natel ausgesendet hat wird die gesendete Message mit +CMGS: <Message-Nr> bestätigt
oder mit einem ERROR abgebrochen. Alle AT-Command sind in der Referenz GSM 07.07
version 5.0.0: July 1996 beschrieben
Wie werden nun die PDU-Daten codiert ? Dies wird nun für unser Projekt zusammengefasst
beschrieben. Wer lieber ein Dokument möchte, kann dies von dem M1-Modul von der Firma
Siemens lesen. Der Grundsätzlich Aufbau der "PDU-massigen" SMS hat den Aufbau
<Header> + <Text der SMS>
Nehmen wir an, dass wir die Nachricht über das SMS-Center der Swisscom (+41794999000) an
die Natel-Nummer +41791234567 (fiktiv) senden wollen, dann muss man den Header auf
folgende Art generieren:
07911497949900F011000B911497214365F70000AD92
Der Header besteht aus verschiedenen Parameter, die einem bestimmten Aufbau folgen.
07
1 Byte (2 Octets) Länge der SMSC-Adresse in Bytes inclusive der Art der Nummer
91
1 Byte (2 Octets) Art der Repräsentation der Nummer - hier im internationalen Format mit "41 79 499 90 0
1497949900F0
6 Byte (12 Octets) SMSC-Telefon-Nummer, wobei das LOW-Octet jeweils vorangestellt ist. Das letzte nic
"F" gefüllt werden.
11
1 Byte (2 Octets) PDU-Typ für SMS-Submit:
Bit 7 : (RP=0) Replay Path parameter is not set in this PDU
Bit 6 : (UDHI=0) The UD-Filed contains only the short message
Bit 5 : (SSR=0) A status report is not requested
Bit 4/3 : (VPF=10) Validity period field present an integer represented (relative)
Bit 2 : (RD=0) Reject duplicate
Bit 1/0 : (MTI=01) Message typ indicator; SMS-SUBMIT (Natel to SMSC)
00
1 Byte (2 Octets) Message reference - nicht benötigt - 00H
0B
1 Byte (2 Octets) Länge der Destination adress und folgende Parameter (Ende Header und inklusive Län
91
1 Byte (2 Octets) Art der Repräsentation der Nummer - hier im internationalen Format mit "41 79 123 45 6
1497214365F7
6 Byte (12 Octets) Telefon-Nummer des Empfängers, wobei das LOW-Octet jeweils vorangestellt ist. Da
mit einem "F" gefüllt werden.
00
1 Byte (2 Octets) Protocol Identifier - 00H - The PDU has to be treat as a short message
00
1 Byte (2 Octets) Data Coding Sheme - 00H - 7 bit data coding with default alphabet
AD
1 Byte (2 Octets) Validity Period - ADH - means 1 week validity (siehe auch Bit 4/3 in PDU-Typ)
92
1 Byte (2 Octets) Länge der Daten im HEX Format - hier 146 Zeichen (Länge der oben beschriebenen Da
Der nun folgende Datenblock beinhaltet die SMS, wobei die Daten der SMS in 7-Bit Darstellung
gespeichert sind und in 8-Bit übertragen werden, d.h. es haben in 7 Byte effektiv 8 Byte
Nutzdaten platz. Wie geht das ? Hier ein Beispiel :
Nehmen wir an, dass im Text der SMS "hello" steht, dann müssten in der Länge der Nutzdaten
05H stehen und als 7-Bit codierter Text
E8329BFD06
stehen. Nun wie sind die Daten in diesen 5 Byte codiert ? Schreiben wir mall alle 5 Zeichen des
Wortes "hello" als 7-bit Repräsentation mit einer Bit-Folge
1101000 1100101 1101100 1101100 1101111
Da diese Bit-Folge beginnend beim ersten Zeichen "h" und dem kleinsten Bit (MSB first)
beginnend übertragen wird müssen wir diese Bit-Folge in ihrer Reihenfolge der Aussendung
umformen (jedes einzelne Zeichen umdrehen)
0001011 1010011 0011011 0011011 1111011
Ordnen wir nun die 7-Bit als 8-Bit Folge und füllen die restlichen Bits mit 0 auf
00010111 01001100 11011001 10111111 01100000
Die Übergabe der Daten erfolgt nun wieder als 8-Bit Normaldarstellung (LSB first)
11101000 00110010 10011011 11111101 00000110
und schreiben dies als HEX-Darstellung, so erhalten wir den Zeichenstring zur Übergabe
E8 32 9B FD 06
begriffen ? Wenn nein, macht nichts, es braucht halt so seine Zeit ... Wer nun Lust hat kann die
Ausgangs erwähnte Daten-SMS mit den Positionsdaten als Übung durchspielen. Ich verzichte
hier auf die genaue Erklärung. Ich habe eine Pascal Routine geschrieben, welche mir diese
Daten umrechnet.
Herunterladen