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 // http://www.geckobeach.com/cellular/secrets/gsmcodes.php
RobMeades 0:bb5fabac67ab 46 // https://en.wikipedia.org/wiki/Unstructured_Supplementary_Service_Data
RobMeades 0:bb5fabac67ab 47
RobMeades 0:bb5fabac67ab 48 // A few USSD commands to try, set to "" to skip
RobMeades 0:bb5fabac67ab 49 #ifndef MBED_CONF_APP_USSD_COMMAND_1
RobMeades 0:bb5fabac67ab 50 # define MBED_CONF_APP_USSD_COMMAND_1 "*100#"
RobMeades 0:bb5fabac67ab 51 #endif
RobMeades 0:bb5fabac67ab 52
RobMeades 0:bb5fabac67ab 53 #ifndef MBED_CONF_APP_USSD_COMMAND_2
RobMeades 0:bb5fabac67ab 54 # define MBED_CONF_APP_USSD_COMMAND_2 "*#21#"
RobMeades 0:bb5fabac67ab 55 #endif
RobMeades 0:bb5fabac67ab 56
RobMeades 0:bb5fabac67ab 57 #ifndef MBED_CONF_APP_USSD_COMMAND_3
RobMeades 0:bb5fabac67ab 58 # define MBED_CONF_APP_USSD_COMMAND_3 "*#30#"
RobMeades 0:bb5fabac67ab 59 #endif
RobMeades 0:bb5fabac67ab 60
RobMeades 0:bb5fabac67ab 61 #ifndef MBED_CONF_APP_USSD_COMMAND_4
RobMeades 0:bb5fabac67ab 62 # define MBED_CONF_APP_USSD_COMMAND_4 "*#31#"
RobMeades 0:bb5fabac67ab 63 #endif
RobMeades 0:bb5fabac67ab 64
RobMeades 0:bb5fabac67ab 65 #ifndef MBED_CONF_APP_USSD_COMMAND_5
RobMeades 0:bb5fabac67ab 66 # define MBED_CONF_APP_USSD_COMMAND_5 "*#43#"
RobMeades 0:bb5fabac67ab 67 #endif
RobMeades 0:bb5fabac67ab 68
RobMeades 0:bb5fabac67ab 69 #ifndef MBED_CONF_APP_USSD_COMMAND_6
RobMeades 0:bb5fabac67ab 70 # define MBED_CONF_APP_USSD_COMMAND_6 "*#61#"
RobMeades 0:bb5fabac67ab 71 #endif
RobMeades 0:bb5fabac67ab 72
RobMeades 0:bb5fabac67ab 73 #ifndef MBED_CONF_APP_USSD_COMMAND_7
RobMeades 0:bb5fabac67ab 74 # define MBED_CONF_APP_USSD_COMMAND_7 ""
RobMeades 0:bb5fabac67ab 75 #endif
RobMeades 0:bb5fabac67ab 76
RobMeades 0:bb5fabac67ab 77 #ifndef MBED_CONF_APP_USSD_COMMAND_8
RobMeades 0:bb5fabac67ab 78 # define MBED_CONF_APP_USSD_COMMAND_8 ""
RobMeades 0:bb5fabac67ab 79 #endif
RobMeades 0:bb5fabac67ab 80
RobMeades 0:bb5fabac67ab 81 #ifndef MBED_CONF_APP_USSD_COMMAND_9
RobMeades 0:bb5fabac67ab 82 # define MBED_CONF_APP_USSD_COMMAND_9 ""
RobMeades 0:bb5fabac67ab 83 #endif
RobMeades 0:bb5fabac67ab 84
RobMeades 0:bb5fabac67ab 85 #ifndef MBED_CONF_APP_USSD_COMMAND_10
RobMeades 0:bb5fabac67ab 86 # define MBED_CONF_APP_USSD_COMMAND_10 ""
RobMeades 0:bb5fabac67ab 87 #endif
RobMeades 0:bb5fabac67ab 88
RobMeades 0:bb5fabac67ab 89 // ----------------------------------------------------------------
RobMeades 0:bb5fabac67ab 90 // PRIVATE VARIABLES
RobMeades 0:bb5fabac67ab 91 // ----------------------------------------------------------------
RobMeades 0:bb5fabac67ab 92
rob.meades@u-blox.com 3:027c9eaec52c 93 #ifdef FEATURE_COMMON_PAL
RobMeades 0:bb5fabac67ab 94 // Lock for debug prints
RobMeades 0:bb5fabac67ab 95 static Mutex mtx;
rob.meades@u-blox.com 3:027c9eaec52c 96 #endif
RobMeades 0:bb5fabac67ab 97
RobMeades 0:bb5fabac67ab 98 // An instance of the generic cellular class
RobMeades 0:bb5fabac67ab 99 static UbloxCellularDriverGen *pDriver =
RobMeades 0:bb5fabac67ab 100 new UbloxCellularDriverGen(MDMTXD, MDMRXD,
RobMeades 0:bb5fabac67ab 101 MBED_CONF_UBLOX_CELL_BAUD_RATE,
rob.meades@u-blox.com 5:b935404dcf7c 102 MBED_CONF_APP_DEBUG_ON);
RobMeades 0:bb5fabac67ab 103 // A general purpose buffer
RobMeades 0:bb5fabac67ab 104 static char buf[USSD_STRING_LENGTH + 1];
RobMeades 0:bb5fabac67ab 105
RobMeades 0:bb5fabac67ab 106 // ----------------------------------------------------------------
RobMeades 0:bb5fabac67ab 107 // PRIVATE FUNCTIONS
RobMeades 0:bb5fabac67ab 108 // ----------------------------------------------------------------
RobMeades 0:bb5fabac67ab 109
rob.meades@u-blox.com 3:027c9eaec52c 110 #ifdef FEATURE_COMMON_PAL
RobMeades 0:bb5fabac67ab 111 // Locks for debug prints
RobMeades 0:bb5fabac67ab 112 static void lock()
RobMeades 0:bb5fabac67ab 113 {
RobMeades 0:bb5fabac67ab 114 mtx.lock();
RobMeades 0:bb5fabac67ab 115 }
RobMeades 0:bb5fabac67ab 116
RobMeades 0:bb5fabac67ab 117 static void unlock()
RobMeades 0:bb5fabac67ab 118 {
RobMeades 0:bb5fabac67ab 119 mtx.unlock();
RobMeades 0:bb5fabac67ab 120 }
rob.meades@u-blox.com 3:027c9eaec52c 121 #endif
RobMeades 0:bb5fabac67ab 122
RobMeades 0:bb5fabac67ab 123 // ----------------------------------------------------------------
RobMeades 0:bb5fabac67ab 124 // TESTS
RobMeades 0:bb5fabac67ab 125 // ----------------------------------------------------------------
RobMeades 0:bb5fabac67ab 126
RobMeades 0:bb5fabac67ab 127 // Test USSD
RobMeades 0:bb5fabac67ab 128 void test_ussd() {
RobMeades 0:bb5fabac67ab 129 TEST_ASSERT(pDriver->init(MBED_CONF_APP_DEFAULT_PIN));
RobMeades 0:bb5fabac67ab 130 TEST_ASSERT(pDriver->nwk_registration());
RobMeades 0:bb5fabac67ab 131
RobMeades 0:bb5fabac67ab 132 if (strlen(MBED_CONF_APP_USSD_COMMAND_1) > 0) {
RobMeades 0:bb5fabac67ab 133 tr_debug("Sending : \"%s\".", MBED_CONF_APP_USSD_COMMAND_1);
RobMeades 0:bb5fabac67ab 134 TEST_ASSERT(pDriver->ussdCommand(MBED_CONF_APP_USSD_COMMAND_1, buf, sizeof (buf)));
RobMeades 0:bb5fabac67ab 135 tr_debug("USSD answer: \"%s\".", buf);
RobMeades 0:bb5fabac67ab 136 }
RobMeades 0:bb5fabac67ab 137
RobMeades 0:bb5fabac67ab 138 if (strlen(MBED_CONF_APP_USSD_COMMAND_2) > 0) {
RobMeades 0:bb5fabac67ab 139 tr_debug("Sending : \"%s\".", MBED_CONF_APP_USSD_COMMAND_2);
RobMeades 0:bb5fabac67ab 140 TEST_ASSERT(pDriver->ussdCommand(MBED_CONF_APP_USSD_COMMAND_2, buf, sizeof (buf)));
RobMeades 0:bb5fabac67ab 141 tr_debug("USSD answer: \"%s\".", buf);
RobMeades 0:bb5fabac67ab 142 }
RobMeades 0:bb5fabac67ab 143
RobMeades 0:bb5fabac67ab 144 if (strlen(MBED_CONF_APP_USSD_COMMAND_3) > 0) {
RobMeades 0:bb5fabac67ab 145 tr_debug("Sending : \"%s\".", MBED_CONF_APP_USSD_COMMAND_3);
RobMeades 0:bb5fabac67ab 146 TEST_ASSERT(pDriver->ussdCommand(MBED_CONF_APP_USSD_COMMAND_3, buf, sizeof (buf)));
RobMeades 0:bb5fabac67ab 147 tr_debug("USSD answer: \"%s\".", buf);
RobMeades 0:bb5fabac67ab 148 }
RobMeades 0:bb5fabac67ab 149
RobMeades 0:bb5fabac67ab 150 if (strlen(MBED_CONF_APP_USSD_COMMAND_4) > 0) {
RobMeades 0:bb5fabac67ab 151 tr_debug("Sending : \"%s\".", MBED_CONF_APP_USSD_COMMAND_4);
RobMeades 0:bb5fabac67ab 152 TEST_ASSERT(pDriver->ussdCommand(MBED_CONF_APP_USSD_COMMAND_4, buf, sizeof (buf)));
RobMeades 0:bb5fabac67ab 153 tr_debug("USSD answer: \"%s\".", buf);
RobMeades 0:bb5fabac67ab 154 }
RobMeades 0:bb5fabac67ab 155
RobMeades 0:bb5fabac67ab 156 if (strlen(MBED_CONF_APP_USSD_COMMAND_5) > 0) {
RobMeades 0:bb5fabac67ab 157 tr_debug("Sending : \"%s\".", MBED_CONF_APP_USSD_COMMAND_5);
RobMeades 0:bb5fabac67ab 158 TEST_ASSERT(pDriver->ussdCommand(MBED_CONF_APP_USSD_COMMAND_5, buf, sizeof (buf)));
RobMeades 0:bb5fabac67ab 159 tr_debug("USSD answer: \"%s\".", buf);
RobMeades 0:bb5fabac67ab 160 }
RobMeades 0:bb5fabac67ab 161
RobMeades 0:bb5fabac67ab 162 if (strlen(MBED_CONF_APP_USSD_COMMAND_6) > 0) {
RobMeades 0:bb5fabac67ab 163 tr_debug("Sending : \"%s\".", MBED_CONF_APP_USSD_COMMAND_6);
RobMeades 0:bb5fabac67ab 164 TEST_ASSERT(pDriver->ussdCommand(MBED_CONF_APP_USSD_COMMAND_6, buf, sizeof (buf)));
RobMeades 0:bb5fabac67ab 165 tr_debug("USSD answer: \"%s\".", buf);
RobMeades 0:bb5fabac67ab 166 }
RobMeades 0:bb5fabac67ab 167
RobMeades 0:bb5fabac67ab 168 if (strlen(MBED_CONF_APP_USSD_COMMAND_7) > 0) {
RobMeades 0:bb5fabac67ab 169 tr_debug("Sending : \"%s\".", MBED_CONF_APP_USSD_COMMAND_7);
RobMeades 0:bb5fabac67ab 170 TEST_ASSERT(pDriver->ussdCommand(MBED_CONF_APP_USSD_COMMAND_7, buf, sizeof (buf)));
RobMeades 0:bb5fabac67ab 171 tr_debug("USSD answer: \"%s\".", buf);
RobMeades 0:bb5fabac67ab 172 }
RobMeades 0:bb5fabac67ab 173
RobMeades 0:bb5fabac67ab 174 if (strlen(MBED_CONF_APP_USSD_COMMAND_8) > 0) {
RobMeades 0:bb5fabac67ab 175 tr_debug("Sending : \"%s\".", MBED_CONF_APP_USSD_COMMAND_8);
RobMeades 0:bb5fabac67ab 176 TEST_ASSERT(pDriver->ussdCommand(MBED_CONF_APP_USSD_COMMAND_8, buf, sizeof (buf)));
RobMeades 0:bb5fabac67ab 177 tr_debug("USSD answer: \"%s\".", buf);
RobMeades 0:bb5fabac67ab 178 }
RobMeades 0:bb5fabac67ab 179
RobMeades 0:bb5fabac67ab 180 if (strlen(MBED_CONF_APP_USSD_COMMAND_9) > 0) {
RobMeades 0:bb5fabac67ab 181 tr_debug("Sending : \"%s\".", MBED_CONF_APP_USSD_COMMAND_9);
RobMeades 0:bb5fabac67ab 182 TEST_ASSERT(pDriver->ussdCommand(MBED_CONF_APP_USSD_COMMAND_9, buf, sizeof (buf)));
RobMeades 0:bb5fabac67ab 183 tr_debug("USSD answer: \"%s\".", buf);
RobMeades 0:bb5fabac67ab 184 }
RobMeades 0:bb5fabac67ab 185
RobMeades 0:bb5fabac67ab 186 if (strlen(MBED_CONF_APP_USSD_COMMAND_10) > 0) {
RobMeades 0:bb5fabac67ab 187 tr_debug("Sending : \"%s\".", MBED_CONF_APP_USSD_COMMAND_10);
RobMeades 0:bb5fabac67ab 188 TEST_ASSERT(pDriver->ussdCommand(MBED_CONF_APP_USSD_COMMAND_10, buf, sizeof (buf)));
RobMeades 0:bb5fabac67ab 189 tr_debug("USSD answer: \"%s\".", buf);
RobMeades 0:bb5fabac67ab 190 }
RobMeades 0:bb5fabac67ab 191
RobMeades 0:bb5fabac67ab 192 TEST_ASSERT(pDriver->nwk_deregistration());
RobMeades 0:bb5fabac67ab 193 }
RobMeades 0:bb5fabac67ab 194
RobMeades 0:bb5fabac67ab 195 // ----------------------------------------------------------------
RobMeades 0:bb5fabac67ab 196 // TEST ENVIRONMENT
RobMeades 0:bb5fabac67ab 197 // ----------------------------------------------------------------
RobMeades 0:bb5fabac67ab 198
RobMeades 0:bb5fabac67ab 199 // Setup the test environment
RobMeades 0:bb5fabac67ab 200 utest::v1::status_t test_setup(const size_t number_of_cases) {
RobMeades 0:bb5fabac67ab 201 // Setup Greentea with a timeout
RobMeades 0:bb5fabac67ab 202 GREENTEA_SETUP(180, "default_auto");
RobMeades 0:bb5fabac67ab 203 return verbose_test_setup_handler(number_of_cases);
RobMeades 0:bb5fabac67ab 204 }
RobMeades 0:bb5fabac67ab 205
RobMeades 0:bb5fabac67ab 206 // Test cases
RobMeades 0:bb5fabac67ab 207 Case cases[] = {
RobMeades 0:bb5fabac67ab 208 Case("USSD test", test_ussd)
RobMeades 0:bb5fabac67ab 209
RobMeades 0:bb5fabac67ab 210 };
RobMeades 0:bb5fabac67ab 211
RobMeades 0:bb5fabac67ab 212 Specification specification(test_setup, cases);
RobMeades 0:bb5fabac67ab 213
RobMeades 0:bb5fabac67ab 214 // ----------------------------------------------------------------
RobMeades 0:bb5fabac67ab 215 // MAIN
RobMeades 0:bb5fabac67ab 216 // ----------------------------------------------------------------
RobMeades 0:bb5fabac67ab 217
RobMeades 0:bb5fabac67ab 218 int main() {
RobMeades 0:bb5fabac67ab 219
rob.meades@u-blox.com 3:027c9eaec52c 220 #ifdef FEATURE_COMMON_PAL
RobMeades 0:bb5fabac67ab 221 mbed_trace_init();
RobMeades 0:bb5fabac67ab 222
RobMeades 0:bb5fabac67ab 223 mbed_trace_mutex_wait_function_set(lock);
RobMeades 0:bb5fabac67ab 224 mbed_trace_mutex_release_function_set(unlock);
rob.meades@u-blox.com 3:027c9eaec52c 225 #endif
RobMeades 0:bb5fabac67ab 226
RobMeades 0:bb5fabac67ab 227 // Run tests
RobMeades 0:bb5fabac67ab 228 return !Harness::run(specification);
RobMeades 0:bb5fabac67ab 229 }
RobMeades 0:bb5fabac67ab 230
RobMeades 0:bb5fabac67ab 231 // End Of File
RobMeades 0:bb5fabac67ab 232