This class provides SMS, USSD and modem file system support for u-blox modules on the C027 and C030 boards (excepting the C030 N2xx flavour) from mbed 5.5 onwards.

Dependents:   example-ublox-at-cellular-interface-ext example-ublox-cellular-driver-gen HelloMQTT ublox_new_driver_test ... more

Committer:
fahim.alavi@u-blox.com
Date:
Fri Aug 31 16:21:57 2018 +0500
Revision:
9:a5389248c8d0
Parent:
5:b935404dcf7c
Sara-R410m read block has start delay, adding it in library

Who changed what in which revision?

UserRevisionLine numberNew contents of line
RobMeades 0:bb5fabac67ab 1 #include "mbed.h"
RobMeades 0:bb5fabac67ab 2 #include "greentea-client/test_env.h"
RobMeades 0:bb5fabac67ab 3 #include "unity.h"
RobMeades 0:bb5fabac67ab 4 #include "utest.h"
RobMeades 0:bb5fabac67ab 5 #include "UbloxCellularDriverGen.h"
RobMeades 0:bb5fabac67ab 6 #include "UDPSocket.h"
rob.meades@u-blox.com 3:027c9eaec52c 7 #ifdef FEATURE_COMMON_PAL
RobMeades 0:bb5fabac67ab 8 #include "mbed_trace.h"
RobMeades 0:bb5fabac67ab 9 #define TRACE_GROUP "TEST"
rob.meades@u-blox.com 3:027c9eaec52c 10 #else
rob.meades@u-blox.com 3:027c9eaec52c 11 #define tr_debug(format, ...) debug(format "\n", ## __VA_ARGS__)
rob.meades@u-blox.com 3:027c9eaec52c 12 #define tr_info(format, ...) debug(format "\n", ## __VA_ARGS__)
rob.meades@u-blox.com 3:027c9eaec52c 13 #define tr_warn(format, ...) debug(format "\n", ## __VA_ARGS__)
rob.meades@u-blox.com 3:027c9eaec52c 14 #define tr_error(format, ...) debug(format "\n", ## __VA_ARGS__)
rob.meades@u-blox.com 3:027c9eaec52c 15 #endif
RobMeades 0:bb5fabac67ab 16
RobMeades 0:bb5fabac67ab 17 using namespace utest::v1;
RobMeades 0:bb5fabac67ab 18
RobMeades 0:bb5fabac67ab 19 // ----------------------------------------------------------------
RobMeades 0:bb5fabac67ab 20 // COMPILE-TIME MACROS
RobMeades 0:bb5fabac67ab 21 // ----------------------------------------------------------------
RobMeades 0:bb5fabac67ab 22
RobMeades 0:bb5fabac67ab 23 // These macros can be overridden with an mbed_app.json file and
RobMeades 0:bb5fabac67ab 24 // contents of the following form:
RobMeades 0:bb5fabac67ab 25 //
RobMeades 0:bb5fabac67ab 26 //{
RobMeades 0:bb5fabac67ab 27 // "config": {
RobMeades 0:bb5fabac67ab 28 // "default-pin": {
RobMeades 0:bb5fabac67ab 29 // "value": "\"my_pin\""
RobMeades 0:bb5fabac67ab 30 // }
RobMeades 0:bb5fabac67ab 31 //}
RobMeades 0:bb5fabac67ab 32
rob.meades@u-blox.com 5:b935404dcf7c 33 // Whether debug trace is on
rob.meades@u-blox.com 5:b935404dcf7c 34 #ifndef MBED_CONF_APP_DEBUG_ON
rob.meades@u-blox.com 5:b935404dcf7c 35 # define MBED_CONF_APP_DEBUG_ON false
rob.meades@u-blox.com 5:b935404dcf7c 36 #endif
rob.meades@u-blox.com 5:b935404dcf7c 37
RobMeades 0:bb5fabac67ab 38 // The credentials of the SIM in the board.
RobMeades 0:bb5fabac67ab 39 #ifndef MBED_CONF_APP_DEFAULT_PIN
RobMeades 0:bb5fabac67ab 40 // Note: this is the PIN for the SIM with ICCID
RobMeades 0:bb5fabac67ab 41 // 8944501104169548380.
RobMeades 0:bb5fabac67ab 42 # define MBED_CONF_APP_DEFAULT_PIN "5134"
RobMeades 0:bb5fabac67ab 43 #endif
RobMeades 0:bb5fabac67ab 44
RobMeades 0:bb5fabac67ab 45 // A number to send SMS messages to which will respond
RobMeades 0:bb5fabac67ab 46 // to the instruction given in the messages.
RobMeades 0:bb5fabac67ab 47 // IMPORTANT: spaces in the string are NOT allowed
RobMeades 0:bb5fabac67ab 48 #ifndef MBED_CONF_APP_SMS_DESTINATION
RobMeades 0:bb5fabac67ab 49 # error "Must define a destination number to use for SMS testing (and someone must be there to reply); the number must contain no spaces and should be in international format"
RobMeades 0:bb5fabac67ab 50 #endif
RobMeades 0:bb5fabac67ab 51
RobMeades 0:bb5fabac67ab 52 // The message to send.
RobMeades 0:bb5fabac67ab 53 #ifndef MBED_CONF_APP_SMS_SEND_CONTENTS
RobMeades 0:bb5fabac67ab 54 # define MBED_CONF_APP_SMS_SEND_CONTENTS "Please reply to this message within 60 seconds with the single word ACK (in upper case)."
RobMeades 0:bb5fabac67ab 55 #endif
RobMeades 0:bb5fabac67ab 56
RobMeades 0:bb5fabac67ab 57 // The number of milliseconds to wait for a reply to the sent SMS.
RobMeades 0:bb5fabac67ab 58 #ifndef MBED_CONF_APP_SMS_RECEIVE_TIMEOUT
RobMeades 0:bb5fabac67ab 59 # define MBED_CONF_APP_SMS_RECEIVE_TIMEOUT 60000
RobMeades 0:bb5fabac67ab 60 #endif
RobMeades 0:bb5fabac67ab 61
RobMeades 0:bb5fabac67ab 62 // The string that the reply must contain.
RobMeades 0:bb5fabac67ab 63 #ifndef MBED_CONF_APP_SMS_RECEIVE_CONTENTS
RobMeades 0:bb5fabac67ab 64 # define MBED_CONF_APP_SMS_RECEIVE_CONTENTS "ACK"
RobMeades 0:bb5fabac67ab 65 #endif
RobMeades 0:bb5fabac67ab 66
RobMeades 0:bb5fabac67ab 67 // ----------------------------------------------------------------
RobMeades 0:bb5fabac67ab 68 // PRIVATE VARIABLES
RobMeades 0:bb5fabac67ab 69 // ----------------------------------------------------------------
RobMeades 0:bb5fabac67ab 70
rob.meades@u-blox.com 3:027c9eaec52c 71 #ifdef FEATURE_COMMON_PAL
RobMeades 0:bb5fabac67ab 72 // Lock for debug prints
RobMeades 0:bb5fabac67ab 73 static Mutex mtx;
rob.meades@u-blox.com 3:027c9eaec52c 74 #endif
RobMeades 0:bb5fabac67ab 75
RobMeades 0:bb5fabac67ab 76 // An instance of the generic cellular class
RobMeades 0:bb5fabac67ab 77 static UbloxCellularDriverGen *pDriver =
RobMeades 0:bb5fabac67ab 78 new UbloxCellularDriverGen(MDMTXD, MDMRXD,
RobMeades 0:bb5fabac67ab 79 MBED_CONF_UBLOX_CELL_BAUD_RATE,
rob.meades@u-blox.com 5:b935404dcf7c 80 MBED_CONF_APP_DEBUG_ON);
RobMeades 0:bb5fabac67ab 81
RobMeades 0:bb5fabac67ab 82 // ----------------------------------------------------------------
RobMeades 0:bb5fabac67ab 83 // PRIVATE FUNCTIONS
RobMeades 0:bb5fabac67ab 84 // ----------------------------------------------------------------
RobMeades 0:bb5fabac67ab 85
rob.meades@u-blox.com 3:027c9eaec52c 86 #ifdef FEATURE_COMMON_PAL
RobMeades 0:bb5fabac67ab 87 // Locks for debug prints
RobMeades 0:bb5fabac67ab 88 static void lock()
RobMeades 0:bb5fabac67ab 89 {
RobMeades 0:bb5fabac67ab 90 mtx.lock();
RobMeades 0:bb5fabac67ab 91 }
RobMeades 0:bb5fabac67ab 92
RobMeades 0:bb5fabac67ab 93 static void unlock()
RobMeades 0:bb5fabac67ab 94 {
RobMeades 0:bb5fabac67ab 95 mtx.unlock();
RobMeades 0:bb5fabac67ab 96 }
rob.meades@u-blox.com 3:027c9eaec52c 97 #endif
RobMeades 0:bb5fabac67ab 98
RobMeades 0:bb5fabac67ab 99 // ----------------------------------------------------------------
RobMeades 0:bb5fabac67ab 100 // TESTS
RobMeades 0:bb5fabac67ab 101 // ----------------------------------------------------------------
RobMeades 0:bb5fabac67ab 102
RobMeades 0:bb5fabac67ab 103 // Register with the network
RobMeades 0:bb5fabac67ab 104 void test_start() {
RobMeades 0:bb5fabac67ab 105 TEST_ASSERT(pDriver->init(MBED_CONF_APP_DEFAULT_PIN));
RobMeades 0:bb5fabac67ab 106 TEST_ASSERT(pDriver->nwk_registration());
RobMeades 0:bb5fabac67ab 107 }
RobMeades 0:bb5fabac67ab 108
RobMeades 0:bb5fabac67ab 109 // Send an SMS message
RobMeades 0:bb5fabac67ab 110 void test_send() {
RobMeades 0:bb5fabac67ab 111 TEST_ASSERT(pDriver->smsSend(MBED_CONF_APP_SMS_DESTINATION,
RobMeades 0:bb5fabac67ab 112 MBED_CONF_APP_SMS_SEND_CONTENTS));
RobMeades 0:bb5fabac67ab 113 }
RobMeades 0:bb5fabac67ab 114
RobMeades 0:bb5fabac67ab 115 // Receive an SMS message, check it and delete it
RobMeades 0:bb5fabac67ab 116 void test_receive() {
RobMeades 0:bb5fabac67ab 117 int numSms = 0;
RobMeades 0:bb5fabac67ab 118 int index;
RobMeades 0:bb5fabac67ab 119 char num[17];
RobMeades 0:bb5fabac67ab 120 char buf[SMS_BUFFER_SIZE];
RobMeades 0:bb5fabac67ab 121 Timer timer;
RobMeades 0:bb5fabac67ab 122
rob.meades@u-blox.com 5:b935404dcf7c 123 tr_warn("!!! YOU HAVE %d SECONDS to reply to the text message !!!",
rob.meades@u-blox.com 5:b935404dcf7c 124 MBED_CONF_APP_SMS_RECEIVE_TIMEOUT / 1000);
RobMeades 0:bb5fabac67ab 125 timer.start();
RobMeades 0:bb5fabac67ab 126 while ((numSms == 0) &&
RobMeades 0:bb5fabac67ab 127 (timer.read_ms() < MBED_CONF_APP_SMS_RECEIVE_TIMEOUT)) {
RobMeades 0:bb5fabac67ab 128 numSms = pDriver->smsList("REC UNREAD", &index, 1);
RobMeades 0:bb5fabac67ab 129 if (numSms == 0) {
RobMeades 0:bb5fabac67ab 130 wait_ms(1000);
RobMeades 0:bb5fabac67ab 131 }
RobMeades 0:bb5fabac67ab 132 }
RobMeades 0:bb5fabac67ab 133 timer.stop();
RobMeades 0:bb5fabac67ab 134
RobMeades 0:bb5fabac67ab 135 TEST_ASSERT (numSms > 0);
RobMeades 0:bb5fabac67ab 136
RobMeades 0:bb5fabac67ab 137 TEST_ASSERT(pDriver->smsRead(index, num, buf, sizeof (buf)));
RobMeades 0:bb5fabac67ab 138 tr_debug("Received: \"%.*s\"", sizeof (buf), buf);
RobMeades 0:bb5fabac67ab 139 TEST_ASSERT (strstr(buf, MBED_CONF_APP_SMS_RECEIVE_CONTENTS) != NULL);
RobMeades 0:bb5fabac67ab 140
RobMeades 0:bb5fabac67ab 141 // Delete the message and check that it's gone
RobMeades 0:bb5fabac67ab 142 numSms = pDriver->smsList();
RobMeades 0:bb5fabac67ab 143 TEST_ASSERT(numSms > 0);
RobMeades 0:bb5fabac67ab 144 TEST_ASSERT(pDriver->smsDelete(index));
RobMeades 0:bb5fabac67ab 145 TEST_ASSERT(pDriver->smsList() == numSms - 1);
RobMeades 0:bb5fabac67ab 146 }
RobMeades 0:bb5fabac67ab 147
RobMeades 0:bb5fabac67ab 148 // De-register from the network
RobMeades 0:bb5fabac67ab 149 void test_end() {
RobMeades 0:bb5fabac67ab 150 TEST_ASSERT(pDriver->nwk_deregistration());
RobMeades 0:bb5fabac67ab 151 }
RobMeades 0:bb5fabac67ab 152
RobMeades 0:bb5fabac67ab 153 // ----------------------------------------------------------------
RobMeades 0:bb5fabac67ab 154 // TEST ENVIRONMENT
RobMeades 0:bb5fabac67ab 155 // ----------------------------------------------------------------
RobMeades 0:bb5fabac67ab 156
RobMeades 0:bb5fabac67ab 157 // Setup the test environment
RobMeades 0:bb5fabac67ab 158 utest::v1::status_t test_setup(const size_t number_of_cases) {
RobMeades 0:bb5fabac67ab 159 // Setup Greentea with a timeout
RobMeades 0:bb5fabac67ab 160 GREENTEA_SETUP(180, "default_auto");
RobMeades 0:bb5fabac67ab 161 return verbose_test_setup_handler(number_of_cases);
RobMeades 0:bb5fabac67ab 162 }
RobMeades 0:bb5fabac67ab 163
RobMeades 0:bb5fabac67ab 164 // Test cases
RobMeades 0:bb5fabac67ab 165 Case cases[] = {
RobMeades 0:bb5fabac67ab 166 Case("Register", test_start),
RobMeades 0:bb5fabac67ab 167 Case("SMS send", test_send),
RobMeades 0:bb5fabac67ab 168 Case("SMS receive and delete", test_receive),
RobMeades 0:bb5fabac67ab 169 Case("Deregister", test_end)
RobMeades 0:bb5fabac67ab 170 };
RobMeades 0:bb5fabac67ab 171
RobMeades 0:bb5fabac67ab 172 Specification specification(test_setup, cases);
RobMeades 0:bb5fabac67ab 173
RobMeades 0:bb5fabac67ab 174 // ----------------------------------------------------------------
RobMeades 0:bb5fabac67ab 175 // MAIN
RobMeades 0:bb5fabac67ab 176 // ----------------------------------------------------------------
RobMeades 0:bb5fabac67ab 177
RobMeades 0:bb5fabac67ab 178 int main() {
rob.meades@u-blox.com 3:027c9eaec52c 179
rob.meades@u-blox.com 3:027c9eaec52c 180 #ifdef FEATURE_COMMON_PAL
RobMeades 0:bb5fabac67ab 181 mbed_trace_init();
RobMeades 0:bb5fabac67ab 182
RobMeades 0:bb5fabac67ab 183 mbed_trace_mutex_wait_function_set(lock);
RobMeades 0:bb5fabac67ab 184 mbed_trace_mutex_release_function_set(unlock);
rob.meades@u-blox.com 3:027c9eaec52c 185 #endif
RobMeades 0:bb5fabac67ab 186
RobMeades 0:bb5fabac67ab 187 // Run tests
RobMeades 0:bb5fabac67ab 188 return !Harness::run(specification);
RobMeades 0:bb5fabac67ab 189 }
RobMeades 0:bb5fabac67ab 190
RobMeades 0:bb5fabac67ab 191 // End Of File
RobMeades 0:bb5fabac67ab 192