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
TESTS/unit_tests/ussd/main.cpp@9:a5389248c8d0, 2018-08-31 (annotated)
- 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?
User | Revision | Line number | New 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 |