Happy New Year
I have a long list of articles I want to publish on this blog. I will start publishing again this month… Promise!
I have a long list of articles I want to publish on this blog. I will start publishing again this month… Promise!
Of course sending an SMS via an attached phone or GSM modem using AT commands in PDU mode is fun . Sometimes you just want to send a plain text message from your application and you don’t want to bother with phones, SIM cards, data plans, PDU mode and so on.
In these cases the easiest solution would be to use an SMTP to SMS gateway. SMTP is the protocol used to send email (Simple Mail Transfer Protocol). What such a gateway does:
You could send an SMS message this way using any SMTP library (they come with .NET, JDK and many open source libraries are available to do this from C or C++).
There is a really simple way to test this: just send an email from your email client.
Of course there are some limitations:
As shown in an earlier post, the Data Coding Scheme (DCS) octet in the SMS PDU can be used to turn a regular text message into a flash message.
Another feature of SMS that is enabled through use of the DCS is the Message Waiting Indication:
Using the DCS you can turn the voicemail icon on or off yourself.
This is an example PDU to set a voicemail indication:
AT+CMGS=27
0001AB0B915121551532F400C80F3190BB7C07D9DFE971B91D4EB301<Ctrl-Z>
Here is what the individual octets represent:
I have added a page with references to the official 3GPP, Open Mobile Alliance (formerly WAP Forum) and other specifications that are relevant for the topics in this blog so far.
See here.
I’ll keep that page up-to-date.
Once we have our text in the GSM-7 character set, we’re ready to write the septets. As is show before, the mapping is kind of awkward, see 3GPP TS 23.038.
Here is the algorithm I use to achieve this: Read More…
To produce the GSM-7 encoded text that is needed for SMS text messages sent with a GSM modem in PDU mode we need 2 steps.
The GSM-7 character set is described in 3GPP TS 23.038.
I’ve always been a fan of the GNU iconv library (libiconv). This library lets you convert practically any character set to any other character set. It does this by internally:
Unfortunately libiconv does not have support for the GSM-7 character set, so I have added it myself. Read More…
We have seen how you can use the User Data Header (UDH) in an SMS message to combine several SMS messages into one bigger one. Here is an other application of the UDH:
Remember that the UDH consists of Information Elements (IE) that each have the following structure
Length | Value | Description |
1 octet | IEI | Information Element Identifier. This determines what this IE is about. |
1 octet | IE length | The length of the data belonging to this IE in octets. |
n octets | IE data | Meaning of the content varies per IEI. |
The text formatting is controlled by just one IE. Here is a description:
Just a quick update.
The next article I’ll publish will be about receiving SMS messages on your computer.
There are interesting applications you can build with SMS, some require you to be able to receive SMS messages as well as send them:
Another use for SMS is configuring phones over the air (OTA). There are elaborate standard specifications written by the WAP Forum (now Open Mobile Alliance) and somewhat proprietary standards developed by Nokia and Ericsson.
Today I’ll show in detail how to send a bookmark according the Nokia / Ericsson specification. The specification is somewhat older, it dates from September 2001, but it seems almost all Nokia and many Ericsson devices still support this.
The bookmark is described in an XML file like the following:
< ?xml version="1.0"?> < !DOCTYPE CHARACTERISTIC-LIST SYSTEM "settings.dtd"> <characteristic -LIST> </characteristic><characteristic TYPE="BOOKMARK"> <parm NAME="NAME" VALUE="Mobile Tidings"/> <parm NAME="URL" VALUE="http://mobiletidings.com"/> </characteristic> |
As before we send this XML document using an unconfirmed push. Here are the layers we need to implement:
As always we start with the AT command that is used to send the bookmark and analyze in detail how this AT command was constructed:
I still needed to show how you can send an Service Indication (SI) document like:
1 2 3 4 5 6 7 8 | < ?xml version="1.0"?> < !DOCTYPE si PUBLIC "-//WAPFORUM//DTD SI 1.0//EN" "www.wapforum.org/DTD/si.dtd"> <si> <indication href="http://mobiletidings.com/" created="2009-02-26T16:25:00Z" si-expires="2009-03-04T16:25:00Z">Check out Mobile Tidings!</indication> </si> |
This document, a Service Indication, tells the WAP client to store the following:
Well here is the AT command to send this particular SI document: