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.