Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the best design for polling a modem for incoming data?

I have a GSM modem connected to my computer, i want to receive text messages sent to it using a python program i have written, am just wondering what is the best technique to poll for data.

Should i write a program that has a infinite loop that continuously checks for incoming sms's i.e within the loop the program sends the AT commands and reads the input data. or do modems have a way of signaling an application of an incoming data(sms).

Am trying to imagine a cellphone is just a GSM modem, and when an sms is received, the phone alerts you of the event, or does the phone software have an infinite loop that polls for incoming data.

like image 813
gath Avatar asked Sep 14 '09 18:09

gath


1 Answers

I have written something similar before. There is a way using AT commands to tell the modem to signal you each time an SMS is received.

For reference, I was using a Maestro 100 GSM Modem in an embedded application.

First you have to initialize the modem properly. I was using text mode for the SMS, but you might be using something different. Pick from these what you want. AT+CNMI is the most important.

AT&F0 # Restore factory defaults
ATE0  # Disable command echo
AT+CMGF=1 # Set message format to text mode
AT+CNMI=1,1,0,1,0 # Set new message indicator
AT+CPMS="SM","SM","SM" # Set preferred message storage to SIM

You would then wait for a message notification, that will look like this. (Don't match on the index number, that might differ between notifications)

+CMTI: "SM",0 # Message notification with index

When you get that notification, retrieve the unread SMS's:

AT+CMGL="REC UNREAD"  # Retrieve unread messages

I would recommend you also add a poll, maybe every 5 minutes or so, just in case you miss a notification. With serial comms you can never be sure!

like image 52
Andre Miller Avatar answered Nov 01 '22 00:11

Andre Miller