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:
rob.meades@u-blox.com
Date:
Thu Jun 15 01:14:18 2017 +0100
Revision:
5:b935404dcf7c
Parent:
3:027c9eaec52c
Tests now pass on C027: cope with filenames being returned without quotation marks, reduce file size to write since some modules can't keep up when there's no HW flow control, increase USSD timeout, simplify JSON template and run test without debug.

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