Example program demonstrating sending and reading SMS messages from the cellular modem using the MTSAS library.

Dependencies:   mbed-src mtsas

Committer:
leon123
Date:
Thu Jul 09 19:04:55 2015 +0000
Revision:
11:159b76eafb5c
Parent:
9:58dba06c3042
Added #defines for the possible hardware platform selections. Re-ordered the hardware selection code to the top. Added a note for the log output and fixed a misspelling.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Vanger 0:d9fd19c8ca39 1 #include "mbed.h"
Vanger 0:d9fd19c8ca39 2 #include "mtsas.h"
Vanger 0:d9fd19c8ca39 3
leon123 11:159b76eafb5c 4 /******************************** NOTE *******************************/
leon123 11:159b76eafb5c 5 /******** Uncomment the hardware platform you are working on. ********/
leon123 11:159b76eafb5c 6 #define DRAGONFLY
leon123 11:159b76eafb5c 7 //#define NUCLEO_F401RE
leon123 11:159b76eafb5c 8 //#define FREESCALE_KL46Z
leon123 11:159b76eafb5c 9 //#define FREESCALE_K64F
leon123 11:159b76eafb5c 10 /*********************************************************************/
leon123 11:159b76eafb5c 11
Vanger 0:d9fd19c8ca39 12 int main(){
leon123 11:159b76eafb5c 13
leon123 11:159b76eafb5c 14 #if defined(DRAGONFLY)
leon123 11:159b76eafb5c 15 /** Dragonfly
leon123 11:159b76eafb5c 16 * To configure the serial pins for the Dragonfly board, use:
leon123 11:159b76eafb5c 17 * RADIO_TX = pin PC_7, RADIO_RX = pin PC_6
leon123 11:159b76eafb5c 18 * RADIO_RTS = pin PB_10,RADIO_CTS = pin PB_12
leon123 11:159b76eafb5c 19 */
leon123 11:159b76eafb5c 20 MTSSerialFlowControl* io = new MTSSerialFlowControl(RADIO_TX, RADIO_RX, RADIO_RTS, RADIO_CTS);
leon123 11:159b76eafb5c 21 #elif defined(NUCLEO_F401RE)
leon123 11:159b76eafb5c 22 /** STMicro Nucleo F401RE
leon123 11:159b76eafb5c 23 * The supported jumper configurations of the MTSAS do not line up with
leon123 11:159b76eafb5c 24 * the pin mapping of the Nucleo F401RE. Therefore, the MTSAS serial TX
leon123 11:159b76eafb5c 25 * pin (JP8 Pin 2) must be manually jumped to Serial1 RX (Shield pin D2)
leon123 11:159b76eafb5c 26 * and the MTSAS serial RX pin (JP9 Pin 2) pin must be manually jumped to
leon123 11:159b76eafb5c 27 * Serial1 TX (Shield pin D8).
leon123 11:159b76eafb5c 28 */
leon123 11:159b76eafb5c 29 MTSSerialFlowControl* io = new MTSSerialFlowControl(D8, D2, D3, D6);
leon123 11:159b76eafb5c 30 #elif defined(FREESCALE_KL46Z)
leon123 11:159b76eafb5c 31 /** Freescale KL46Z
leon123 11:159b76eafb5c 32 * To configure the serial pins for the Freescale KL46Z board, use MTSAS jumper
leon123 11:159b76eafb5c 33 * configuration B.
leon123 11:159b76eafb5c 34 */
leon123 11:159b76eafb5c 35 MTSSerialFlowControl* io = new MTSSerialFlowControl(D2, D9, D3, D6);
leon123 11:159b76eafb5c 36 #elif defined(FREESCALE_K64F)
leon123 11:159b76eafb5c 37 /** Freescale K64F
leon123 11:159b76eafb5c 38 * To configure the serial pins for the Freescale K64F board, use MTSAS jumper
leon123 11:159b76eafb5c 39 * configuration A.
leon123 11:159b76eafb5c 40 */
leon123 11:159b76eafb5c 41 MTSSerialFlowControl* io = new MTSSerialFlowControl(D1, D0, D3, D6);
leon123 11:159b76eafb5c 42 #endif
Vanger 3:7fac2f012338 43
Vanger 3:7fac2f012338 44 //Sets the log level to INFO, higher log levels produce more log output.
Vanger 3:7fac2f012338 45 //Possible levels: NONE, FATAL, ERROR, WARNING, INFO, DEBUG, TRACE
Vanger 1:1f5c9497a125 46 MTSLog::setLogLevel(MTSLog::INFO_LEVEL);
Vanger 1:1f5c9497a125 47
Vanger 0:d9fd19c8ca39 48 //Modify to match your apn if you are using an HSPA radio with a SIM card
Vanger 0:d9fd19c8ca39 49 const char APN[] = "";
Vanger 0:d9fd19c8ca39 50
Vanger 1:1f5c9497a125 51 //Phone number to send to and receive from. Must be in the form "1xxxxxxxxxx"
Vanger 1:1f5c9497a125 52 string PHONE_NUMBER = "";
Vanger 1:1f5c9497a125 53
Vanger 1:1f5c9497a125 54 Cellular::Sms txtmsg;
Vanger 1:1f5c9497a125 55 txtmsg.phoneNumber = PHONE_NUMBER;
Vanger 1:1f5c9497a125 56 txtmsg.message = "Hello World! MTSAS is up and running!";
Vanger 0:d9fd19c8ca39 57
Vanger 4:ad889da9578c 58 //Sets the baud rate for communicating with the radio
Vanger 0:d9fd19c8ca39 59 io->baud(115200);
Vanger 0:d9fd19c8ca39 60
Vanger 2:d0d6e939ba70 61 //Creates a radio object
Vanger 0:d9fd19c8ca39 62 Cellular* radio = CellularFactory::create(io);
Vanger 2:d0d6e939ba70 63
Vanger 3:7fac2f012338 64 if (! radio) {
Vanger 3:7fac2f012338 65 logFatal("Failed to initialize radio");
Vanger 3:7fac2f012338 66 return 1;
Vanger 3:7fac2f012338 67 }
Vanger 3:7fac2f012338 68
Vanger 4:ad889da9578c 69 Transport::setTransport(radio);
Vanger 4:ad889da9578c 70
Vanger 2:d0d6e939ba70 71 //Set radio APN
Vanger 1:1f5c9497a125 72 for (int i = 0; i < 10; i++) {
Vanger 1:1f5c9497a125 73 if (i >= 10) {
Vanger 1:1f5c9497a125 74 logError("Failed to set APN\n");
Vanger 1:1f5c9497a125 75 }
Vanger 1:1f5c9497a125 76 if (radio->setApn(APN) == MTS_SUCCESS) {
Vanger 1:1f5c9497a125 77 logInfo("Successfully set APN\n");
Vanger 1:1f5c9497a125 78 break;
Vanger 1:1f5c9497a125 79 } else {
Vanger 1:1f5c9497a125 80 wait(1);
Vanger 1:1f5c9497a125 81 }
Vanger 1:1f5c9497a125 82 }
Vanger 0:d9fd19c8ca39 83
Vanger 1:1f5c9497a125 84 //Delete any previously received SMS messages
Vanger 1:1f5c9497a125 85 for (int i = 0; i < 10; i++) {
Vanger 1:1f5c9497a125 86 if (i >= 10) {
Vanger 1:1f5c9497a125 87 logError("Failed to delete SMS messages\n");
Vanger 1:1f5c9497a125 88 }
Vanger 1:1f5c9497a125 89 if (radio->deleteAllReceivedSms() == MTS_SUCCESS) {
Vanger 1:1f5c9497a125 90 logInfo("Deleted all SMS messages\n");
Vanger 1:1f5c9497a125 91 break;
Vanger 1:1f5c9497a125 92 } else {
Vanger 1:1f5c9497a125 93 wait(1);
Vanger 1:1f5c9497a125 94 }
Vanger 1:1f5c9497a125 95 }
Vanger 0:d9fd19c8ca39 96
Vanger 1:1f5c9497a125 97 // Send SMS message to phone
Vanger 1:1f5c9497a125 98 for (int i = 1; i < 10; i++) {
Vanger 1:1f5c9497a125 99 if(radio->sendSMS(txtmsg) == MTS_SUCCESS) {
Vanger 2:d0d6e939ba70 100 logInfo("Sent SMS successfully:<%s>\n", txtmsg.message.c_str());
Vanger 1:1f5c9497a125 101 break;
Vanger 1:1f5c9497a125 102 } else {
Vanger 2:d0d6e939ba70 103 logError("Failed to send SMS<%s>\n", txtmsg.message.c_str());
Vanger 1:1f5c9497a125 104 }
Vanger 1:1f5c9497a125 105 }
Vanger 0:d9fd19c8ca39 106
Vanger 3:7fac2f012338 107 //Checking for received SMS messages
Vanger 3:7fac2f012338 108 while (true) {
Vanger 1:1f5c9497a125 109 logInfo("Checking for received messages");
Vanger 1:1f5c9497a125 110 vector<Cellular::Sms> recv = radio->getReceivedSms();
Vanger 1:1f5c9497a125 111 if(recv.size() > 0) {
Vanger 1:1f5c9497a125 112 int size = recv.size();
Vanger 1:1f5c9497a125 113 for (int i = 0; i < size; i++) {
Vanger 1:1f5c9497a125 114 logInfo("Message %d: [%s] [%s] [%s]", i, recv[i].phoneNumber.c_str(), recv[i].timestamp.c_str(), recv[i].message.c_str());
Vanger 1:1f5c9497a125 115 }
Vanger 1:1f5c9497a125 116 }
Vanger 3:7fac2f012338 117
Vanger 3:7fac2f012338 118 if(radio->deleteOnlyReceivedReadSms() != MTS_SUCCESS) {
Vanger 3:7fac2f012338 119 logError("Failed to delete received and read SMS messages");
Vanger 3:7fac2f012338 120 }
Vanger 1:1f5c9497a125 121 wait(10);
Vanger 1:1f5c9497a125 122 }
Vanger 0:d9fd19c8ca39 123
Vanger 0:d9fd19c8ca39 124 return 0;
Vanger 0:d9fd19c8ca39 125 }