Download demo project - 12 Kb
Introduction Wish to develop SMS or EMS application? What you read from your mobile? PDU code.
PDU is a format which you send to phone to send a SMS or an EMS. You can find more in GSM 03.40.
What is a PDU code and how can I decode it? Let us take a simple look at PDU code. Here I created a SMS "Hello,my pretty world!" in my Siemens M55 mobile and send it to 1861. I use HyperTerminal to communicate with my phone using AT Command set.
First I set my character set to Unicode:
AT+CSCS="UCS2"
Then I set my preferred message storage to MT
AT+CPMS="MT"
At last I read all my SMS out.
AT+CMGL=4
I find the SMS I just created in PDU format:
0891683108200805F01151048181160000FF16C8329BFD66B5F320B8BC4CA7E741F7B79C4D0E01
Now we decode it manually.
08: Length of Service Center Number
91: Indicate there is a plus at the beginning of Service Center number
683108200805F: Service Center number: 8613800280500 Note when the length of number is an odd number, add F.
11: Indicate this SMS will be sent.
51: TP-MR Message Reference, not common used.
04: Length of destination number. Here 1861.
81: No plus here.
8161: Destination number 1861.
00: TP-PID. See GSM 03.40
00: TP-DCS. TP-UD is coded by 7bit charactor method. See GSM 03.38
FF: TP-VP. Valid Period. Here is infinity.
16: Hex value equals to 22. This indicates there are 22 charactors in TP-UD
C8329BFD66B5F320B8BC4CA7E741F7B79C4D0E01: TP-UD, decode it using 7bit charactor method.
Ha-ha, now you may know more about PDU code. Let start our program.
What is the structure of my PDU Decoder? I created a must inherit class SMS, it provides basic structure a SMS must have. For example: Something relate to service center, first octet, TP_PID and so on.
In this class I provide a must override sub GetOrignalData, this help me to do further work on the orignal data from PDU code.
Here are also a few of shared functions:
GetByte(),GetString(),GetDate(),Swap(),GetAddress(),GetSMSType(),DecodeUnicode90,Decode7Bit()
There shared functions will be used frequently.
After SMS class, I create SMS_RECEIVED,SMS_SUBMIT,EMS_RECEIVED,EMS_SUBMIT,SMS_STATUS_REPORT class that inherits from SMS class.
How it works? I want once you created an instance of one class with a PDU code, it decode it immediately. So I write some code in every Sub New.
Take SMS_RECEIVED for example:
In EMS, I write a function to get Information Element from PDU code and a structure to store it.
How can I use this class? If you know what the type of PDU code, you simply create an instance of a certain type in SMS or EMS.
But when you don't know the type, you use shared function GetSMSType to get the type.
Then according to the type, create certain instance of SMS class, it decoded automatically.
Still don't know? Sorry for my poor English, run my program and see my code, you will know it better.
Are there some bugs? Sorry I don't find bugs when I decode PDU code from Siemens M55 mobile and Nokia 8xxx mobile, I think there will be no bugs. If you find some, please contact me. Thanks!
Some useful documents and sites. GSM 03.40:http://webapp.etsi.org/exchangefolder/gsmts_0340v050300p.pdf
ETSI:http://www.etsi.org (This site provides GSM documents.)
Contact me and make friends with me. My email:hesicong@mail.sc.cninfo.net; hesicong@126.com
My QQ(Only In China):38288890
My MSN:hesicong@mail.sc.cninfo.net
My homepage:http://hesicong2004.vip.myrice.com
My CSDN blog:http://blog.csdn.net/hesicong
In the end, thanks for using these classes!