Episode: 264 Title: HPR0264: Interacting with GSM Modems Source: https://hub.hackerpublicradio.org/ccdn.php?filename=/eps/hpr0264/hpr0264.mp3 Transcribed: 2025-10-07 15:03:15 --- The Leo take me with you when I hit you. That's what I did. I hold you tight. Welcome to this episode of Hacker Public Radio. My name is Seal and today's episode we'll talk about GSM modems and how to use them to send SMS messages, receive them as well as initiate phone calls. So if this kind of stuff interests you and you want to do this, there's really two big options that are open to you in order to interact with your carrier. You can either buy an old school cell phone that allows you to connect it through serial to send it commands and it will act as a modem or you can buy a dedicated GSM modem. And those dedicated GSM modems will cost you about 200 bucks. One maker that comes to mind is called Cal Amp, C-A-L-A-M-P and basically it's easy to use. You just put in your SIM card into the device that will connect to your carrier, Bada Bing, Bada Boom. It's connected. Now how you connect to the modem itself is typically done through serial. So nothing too complex and in fact you can start talking to the device straight away in Windows. You can do it with Hyper Terminal or in Linux. You can do it with Minicom. Now in my case I'm doing some software development and I'm doing it in Linux and my Linux machine does not have a serial connection. So what I've got is a USB to serial adapter and in Linux they're bloody fantastic. Since kernel 2.2 you can just plug one of those things into your machine and it'll show up the device in your root slash dev list. It'll be there under TTYUSB0 assuming it's the first device. So you just connect to that with Minicom or whatever tool you use and you can start talking to the device. What's really nice about these modems though is that when you talk to it you talk to it in English. You send it AT commands and so when you send it ATI it'll stick back to you in English, not binary, not anything confusing, but pure English, the maker of the device, it's firmware version and so forth and every time you send it a command and every time it replies back it'll conclude what it sends back to you with either OK or error. Now as much as that's an advantage when you're dealing with the device over a serial connection using a tool like Minicom it's a disadvantage when you're developing software because it really doesn't give you much to parse. You're basically having to parse English sentences as opposed to something more conducive to being parsed such as having well laid out tags or some kind of structure you can latch on to. Now that's not to say it's not doable and it entirely is. When the modem spits back to you I mean it always follows the same structure so it's always going to have commas here, it's always going to follow a certain format of course it's just it's kind of you know it makes things a little more interesting. Let's put it that way. And if you're going to deal with this in software development just be aware of course that the modem cannot take multiple simultaneous inputs so you're going to have to develop a service basically to act as some kind of intermediary between your applications and the modem such that it can cue the messages to be sent out if you're wanting to send out SMSes and at the same time so it can retrieve messages from the modem because when you receive tags messages you only really have a buffer depending on the device but typically of 75 messages. And these include messages that you've decided to save when you're sending a message because there's really two ways of sending messages you can either send a message that's it it's sent it's in a temporary buffer gone or you can save your message to that message buffer which you can then tell it to send to a specific recipient. And the difference comes clear when you want to send the same message to multiple people. So if you've got a message being sent to an Bob and Joe you can basically store this exact same message saying happy holidays to that buffer and then you say send message number five which corresponds to our happy holidays one to Joe then you send another command saying send message number five to Dick and send message number five to Bob Ed because we're actually cheating on our wife. That buffer fills up that message buffer of 75 messages. If you do not erase that message your modem will not retrieve anymore from your carrier. It will wait until you clear that. It does not take care of that for you you actually have to take care of that yourself. You can do that all through commands again everything's AT commands. So to check all your received SMSes you send your modem this command you send it AT plus CMGF equals one this tells the modem that you're going to be an SMS text mode. Then to receive your messages you press AT plus CMGL equals double quotes all double quotes. Now this will actually have the modem print every message in the buffer including red messages unred messages and sent messages. When a message is read in the buffer it will and it's a new message it will go from status unred to status red this is automatic though you can reassign statuses later on if you want. To send messages it's another AT command but before I go on just to clarify what I mean by status when the modem prints out for you the list of messages it's a two line affair the first line per message will be the status so it's kind of a flag the number of the recipients so forth the time that the SMS control center received the message and then the second message will be the contents of your SMS which by the way has to be 160 bytes you can have multiple messages that concatenate I can't say that word you know what I mean though you have multiple messages together to string a very long message but typically SMS's on their own are 160 bytes as a maximum. Now to go back to what I was saying earlier which is to say how do you send messages it's a simple AT command which is AT plus CMGS and then basically so that's the command but the way you write it is AT plus CMGS equals double quotes plus the number of the international number and when I say plus I mean that's actually part of the number so plus one six one three six one three being the auto area code plus one being the international code for North America and then five five five five five five close the double quotes but the multiple then do is a little spit back to you a character indicating that you must put in the actual contents of the text message itself you type that in press control Z and it'll then send the the message for the control Z you still have to do that in a softer environment you can you send it a special escape character for that. Typically by the way in a software development environment sorry every time you send a command you have to send it a carriage return and a new line. A few other commands of interest if you're dealing with the GSM modem AT plus CSQ will give you single quality AT plus CNUM will give you your number but CNUM being CNUM will give you your number and if you want to actually make a phone call that's pretty neat too the modem won't be able to engage in a conversation with the person but it will let you know if the line on the other end is ringing or not and so the way you do that is actually quite simple the command is ATD followed by the number that you're calling no spaces and a semicolon so it's ATD 1613 5555 5555 semicolon no plus signs that'll actually engage the modem into calling someone so these are the basic tools there's actually more and if you want to learn how to interact with the modem to send messages there's an excellent website it's url is called developers home.com forward slash sms it'll bring you it'll teach you everything you need to know about interacting with an SMS or sorry a gsm modem to send SMSes another excellent site if you're interested in serial programming is easy sw.com esysw.com forward slash tilde mic forward slash serial forward slash serial.html all of that is lower casing so with that guys I hope that you found this mildly informative serial programming on this stuff is actually not as hard as I would have thought originally before I was forced to go into it but if you have any questions or any comments or any complaints feel free to message me my email address is julian at jmcardle.com that's julian at jmacartel.com have a lovely lovely day guys thank you for listening to haklik of the radio hpr is sponsored by caro.net so head on over to