New cellular update

Dependencies:  

Fork of ublox-at-cellular-interface-ext by u-blox

Committer:
RobMeades
Date:
Mon Jun 05 12:58:04 2017 +0000
Revision:
0:0b75e22c9231
Child:
1:26a67ab07275
Initial revision.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
RobMeades 0:0b75e22c9231 1 #include "mbed.h"
RobMeades 0:0b75e22c9231 2 #include "greentea-client/test_env.h"
RobMeades 0:0b75e22c9231 3 #include "unity.h"
RobMeades 0:0b75e22c9231 4 #include "utest.h"
RobMeades 0:0b75e22c9231 5 #include "UbloxATCellularInterfaceExt.h"
RobMeades 0:0b75e22c9231 6 #include "UDPSocket.h"
RobMeades 0:0b75e22c9231 7 #include "FEATURE_COMMON_PAL/nanostack-libservice/mbed-client-libservice/common_functions.h"
RobMeades 0:0b75e22c9231 8 #include "mbed_trace.h"
RobMeades 0:0b75e22c9231 9 #define TRACE_GROUP "TEST"
RobMeades 0:0b75e22c9231 10
RobMeades 0:0b75e22c9231 11 using namespace utest::v1;
RobMeades 0:0b75e22c9231 12
RobMeades 0:0b75e22c9231 13 // ----------------------------------------------------------------
RobMeades 0:0b75e22c9231 14 // COMPILE-TIME MACROS
RobMeades 0:0b75e22c9231 15 // ----------------------------------------------------------------
RobMeades 0:0b75e22c9231 16
RobMeades 0:0b75e22c9231 17 // These macros can be overridden with an mbed_app.json file and
RobMeades 0:0b75e22c9231 18 // contents of the following form:
RobMeades 0:0b75e22c9231 19 //
RobMeades 0:0b75e22c9231 20 //{
RobMeades 0:0b75e22c9231 21 // "config": {
RobMeades 0:0b75e22c9231 22 // "apn": {
RobMeades 0:0b75e22c9231 23 // "value": "\"my_apn\""
RobMeades 0:0b75e22c9231 24 // },
RobMeades 0:0b75e22c9231 25 // "run-tcp-server-test": {
RobMeades 0:0b75e22c9231 26 // "value": 1
RobMeades 0:0b75e22c9231 27 // },
RobMeades 0:0b75e22c9231 28 // "mga-token": {
RobMeades 0:0b75e22c9231 29 // "value": "\"my_token\""
RobMeades 0:0b75e22c9231 30 // }
RobMeades 0:0b75e22c9231 31 //}
RobMeades 0:0b75e22c9231 32
RobMeades 0:0b75e22c9231 33 // The credentials of the SIM in the board.
RobMeades 0:0b75e22c9231 34 #ifndef MBED_CONF_APP_DEFAULT_PIN
RobMeades 0:0b75e22c9231 35 // Note: this is the PIN for the SIM with ICCID
RobMeades 0:0b75e22c9231 36 // 8944501104169548380.
RobMeades 0:0b75e22c9231 37 # define MBED_CONF_APP_DEFAULT_PIN "5134"
RobMeades 0:0b75e22c9231 38 #endif
RobMeades 0:0b75e22c9231 39
RobMeades 0:0b75e22c9231 40 // Network credentials.
RobMeades 0:0b75e22c9231 41 #ifndef MBED_CONF_APP_APN
RobMeades 0:0b75e22c9231 42 # define MBED_CONF_APP_APN NULL
RobMeades 0:0b75e22c9231 43 #endif
RobMeades 0:0b75e22c9231 44 #ifndef MBED_CONF_APP_USERNAME
RobMeades 0:0b75e22c9231 45 # define MBED_CONF_APP_USERNAME NULL
RobMeades 0:0b75e22c9231 46 #endif
RobMeades 0:0b75e22c9231 47 #ifndef MBED_CONF_APP_PASSWORD
RobMeades 0:0b75e22c9231 48 # define MBED_CONF_APP_PASSWORD NULL
RobMeades 0:0b75e22c9231 49 #endif
RobMeades 0:0b75e22c9231 50
RobMeades 0:0b75e22c9231 51 #ifndef MBED_CONF_APP_RUN_CELL_LOCATE_TCP_SERVER_TEST
RobMeades 0:0b75e22c9231 52 # define MBED_CONF_APP_RUN_CELL_LOCATE_TCP_SERVER_TEST 0
RobMeades 0:0b75e22c9231 53 #endif
RobMeades 0:0b75e22c9231 54
RobMeades 0:0b75e22c9231 55 // The authentication token for TCP access to the MGA server.
RobMeades 0:0b75e22c9231 56 #if MBED_CONF_APP_RUN_CELL_LOCATE_TCP_SERVER_TEST
RobMeades 0:0b75e22c9231 57 # ifndef MBED_CONF_APP_CELL_LOCATE_MGA_TOKEN
RobMeades 0:0b75e22c9231 58 # error "You must have a token for MGA server access to run Cell Locate with a TCP server"
RobMeades 0:0b75e22c9231 59 # endif
RobMeades 0:0b75e22c9231 60 #endif
RobMeades 0:0b75e22c9231 61
RobMeades 0:0b75e22c9231 62 // The type of response requested
RobMeades 0:0b75e22c9231 63 #ifndef MBED_CONF_APP_RESP_TYPE
RobMeades 0:0b75e22c9231 64 # define MBED_CONF_APP_RESP_TYPE 1 // CELL_DETAILED
RobMeades 0:0b75e22c9231 65 #endif
RobMeades 0:0b75e22c9231 66
RobMeades 0:0b75e22c9231 67 // The maximum number of hypotheses requested
RobMeades 0:0b75e22c9231 68 #ifndef MBED_CONF_APP_CELL_LOCATE_MAX_NUM_HYPOTHESIS
RobMeades 0:0b75e22c9231 69 # if MBED_CONF_APP_RESP_TYPE == 2 // CELL_MULTIHYP
RobMeades 0:0b75e22c9231 70 # define MBED_CONF_APP_CELL_LOCATE_MAX_NUM_HYPOTHESIS 16
RobMeades 0:0b75e22c9231 71 # else
RobMeades 0:0b75e22c9231 72 # define MBED_CONF_APP_CELL_LOCATE_MAX_NUM_HYPOTHESIS 1
RobMeades 0:0b75e22c9231 73 # endif
RobMeades 0:0b75e22c9231 74 #endif
RobMeades 0:0b75e22c9231 75
RobMeades 0:0b75e22c9231 76 #ifndef MBED_CONF_APP_CELL_LOCATE_MGA_TOKEN
RobMeades 0:0b75e22c9231 77 # define MBED_CONF_APP_CELL_LOCATE_MGA_TOKEN "0"
RobMeades 0:0b75e22c9231 78 #endif
RobMeades 0:0b75e22c9231 79
RobMeades 0:0b75e22c9231 80 // ----------------------------------------------------------------
RobMeades 0:0b75e22c9231 81 // PRIVATE VARIABLES
RobMeades 0:0b75e22c9231 82 // ----------------------------------------------------------------
RobMeades 0:0b75e22c9231 83
RobMeades 0:0b75e22c9231 84 // Lock for debug prints
RobMeades 0:0b75e22c9231 85 static Mutex mtx;
RobMeades 0:0b75e22c9231 86
RobMeades 0:0b75e22c9231 87 // An instance of the cellular interface
RobMeades 0:0b75e22c9231 88 static UbloxATCellularInterfaceExt *pDriver =
RobMeades 0:0b75e22c9231 89 new UbloxATCellularInterfaceExt(MDMTXD, MDMRXD,
RobMeades 0:0b75e22c9231 90 MBED_CONF_UBLOX_CELL_BAUD_RATE,
RobMeades 0:0b75e22c9231 91 true);
RobMeades 0:0b75e22c9231 92
RobMeades 0:0b75e22c9231 93 // ----------------------------------------------------------------
RobMeades 0:0b75e22c9231 94 // PRIVATE FUNCTIONS
RobMeades 0:0b75e22c9231 95 // ----------------------------------------------------------------
RobMeades 0:0b75e22c9231 96
RobMeades 0:0b75e22c9231 97 // Locks for debug prints
RobMeades 0:0b75e22c9231 98 static void lock()
RobMeades 0:0b75e22c9231 99 {
RobMeades 0:0b75e22c9231 100 mtx.lock();
RobMeades 0:0b75e22c9231 101 }
RobMeades 0:0b75e22c9231 102
RobMeades 0:0b75e22c9231 103 static void unlock()
RobMeades 0:0b75e22c9231 104 {
RobMeades 0:0b75e22c9231 105 mtx.unlock();
RobMeades 0:0b75e22c9231 106 }
RobMeades 0:0b75e22c9231 107
RobMeades 0:0b75e22c9231 108 static void printCellLocateData(UbloxATCellularInterfaceExt::CellLocData *pData)
RobMeades 0:0b75e22c9231 109 {
RobMeades 0:0b75e22c9231 110 char timeString[25];
RobMeades 0:0b75e22c9231 111
RobMeades 0:0b75e22c9231 112 tr_debug("Cell Locate data:");
RobMeades 0:0b75e22c9231 113 if (strftime(timeString, sizeof(timeString), "%a %b %d %H:%M:%S %Y", (const tm *) &(pData->time)) > 0) {
RobMeades 0:0b75e22c9231 114 tr_debug(" time: %s", timeString);
RobMeades 0:0b75e22c9231 115 }
RobMeades 0:0b75e22c9231 116 tr_debug(" longitude: %.6f", pData->longitude);
RobMeades 0:0b75e22c9231 117 tr_debug(" latitude: %.6f", pData->latitude);
RobMeades 0:0b75e22c9231 118 tr_debug(" altitude: %d metres", pData->altitude);
RobMeades 0:0b75e22c9231 119 tr_debug(" uncertainty: %d metres", pData->uncertainty);
RobMeades 0:0b75e22c9231 120 tr_debug(" speed: %d metres/second", pData->speed);
RobMeades 0:0b75e22c9231 121 tr_debug(" vertical accuracy: %d metres/second", pData->speed);
RobMeades 0:0b75e22c9231 122 switch (pData->sensor) {
RobMeades 0:0b75e22c9231 123 case UbloxATCellularInterfaceExt::CELL_LAST:
RobMeades 0:0b75e22c9231 124 tr_debug(" sensor type: last");
RobMeades 0:0b75e22c9231 125 break;
RobMeades 0:0b75e22c9231 126 case UbloxATCellularInterfaceExt::CELL_GNSS:
RobMeades 0:0b75e22c9231 127 tr_debug(" sensor type: GNSS");
RobMeades 0:0b75e22c9231 128 break;
RobMeades 0:0b75e22c9231 129 case UbloxATCellularInterfaceExt::CELL_LOCATE:
RobMeades 0:0b75e22c9231 130 tr_debug(" sensor type: Cell Locate");
RobMeades 0:0b75e22c9231 131 break;
RobMeades 0:0b75e22c9231 132 case UbloxATCellularInterfaceExt::CELL_HYBRID:
RobMeades 0:0b75e22c9231 133 tr_debug(" sensor type: hybrid");
RobMeades 0:0b75e22c9231 134 break;
RobMeades 0:0b75e22c9231 135 default:
RobMeades 0:0b75e22c9231 136 tr_debug(" sensor type: unknown");
RobMeades 0:0b75e22c9231 137 break;
RobMeades 0:0b75e22c9231 138 }
RobMeades 0:0b75e22c9231 139 tr_debug(" satellites used: %d", pData->svUsed);
RobMeades 0:0b75e22c9231 140 }
RobMeades 0:0b75e22c9231 141
RobMeades 0:0b75e22c9231 142 // ----------------------------------------------------------------
RobMeades 0:0b75e22c9231 143 // TESTS
RobMeades 0:0b75e22c9231 144 // ----------------------------------------------------------------
RobMeades 0:0b75e22c9231 145
RobMeades 0:0b75e22c9231 146 // Test Cell Locate talking to a UDP server
RobMeades 0:0b75e22c9231 147 void test_udp_server() {
RobMeades 0:0b75e22c9231 148 int numRes = 0;
RobMeades 0:0b75e22c9231 149 UbloxATCellularInterfaceExt::CellLocData data;
RobMeades 0:0b75e22c9231 150
RobMeades 0:0b75e22c9231 151 memset(&data, 0, sizeof(data));
RobMeades 0:0b75e22c9231 152 TEST_ASSERT(pDriver->connect(MBED_CONF_APP_DEFAULT_PIN, MBED_CONF_APP_APN,
RobMeades 0:0b75e22c9231 153 MBED_CONF_APP_USERNAME, MBED_CONF_APP_PASSWORD) == 0);
RobMeades 0:0b75e22c9231 154
RobMeades 0:0b75e22c9231 155 TEST_ASSERT(pDriver->cellLocSrvUdp());
RobMeades 0:0b75e22c9231 156 TEST_ASSERT(pDriver->cellLocConfig(1));
RobMeades 0:0b75e22c9231 157 TEST_ASSERT(pDriver->cellLocRequest(UbloxATCellularInterfaceExt::CELL_HYBRID, 10, 100,
RobMeades 0:0b75e22c9231 158 (UbloxATCellularInterfaceExt::CellRespType) MBED_CONF_APP_RESP_TYPE,
RobMeades 0:0b75e22c9231 159 MBED_CONF_APP_CELL_LOCATE_MAX_NUM_HYPOTHESIS));
RobMeades 0:0b75e22c9231 160
RobMeades 0:0b75e22c9231 161 for (int x = 0; (numRes == 0) && (x < 10); x++) {
RobMeades 0:0b75e22c9231 162 numRes = pDriver->cellLocGetRes();
RobMeades 0:0b75e22c9231 163 }
RobMeades 0:0b75e22c9231 164
RobMeades 0:0b75e22c9231 165 TEST_ASSERT(numRes > 0);
RobMeades 0:0b75e22c9231 166 TEST_ASSERT(pDriver->cellLocGetData(&data));
RobMeades 0:0b75e22c9231 167
RobMeades 0:0b75e22c9231 168 TEST_ASSERT(data.validData);
RobMeades 0:0b75e22c9231 169
RobMeades 0:0b75e22c9231 170 printCellLocateData(&data);
RobMeades 0:0b75e22c9231 171
RobMeades 0:0b75e22c9231 172 TEST_ASSERT(pDriver->disconnect() == 0);
RobMeades 0:0b75e22c9231 173 // Wait for printfs to leave the building or the test result string gets messed up
RobMeades 0:0b75e22c9231 174 wait_ms(500);
RobMeades 0:0b75e22c9231 175 }
RobMeades 0:0b75e22c9231 176
RobMeades 0:0b75e22c9231 177 // Test Cell Locate talking to a TCP server
RobMeades 0:0b75e22c9231 178 void test_tcp_server() {
RobMeades 0:0b75e22c9231 179 int numRes = 0;
RobMeades 0:0b75e22c9231 180 UbloxATCellularInterfaceExt::CellLocData data;
RobMeades 0:0b75e22c9231 181
RobMeades 0:0b75e22c9231 182 memset(&data, 0, sizeof(data));
RobMeades 0:0b75e22c9231 183 TEST_ASSERT(pDriver->connect(MBED_CONF_APP_DEFAULT_PIN, MBED_CONF_APP_APN,
RobMeades 0:0b75e22c9231 184 MBED_CONF_APP_USERNAME, MBED_CONF_APP_PASSWORD) == 0);
RobMeades 0:0b75e22c9231 185
RobMeades 0:0b75e22c9231 186 TEST_ASSERT(pDriver->cellLocSrvTcp(MBED_CONF_APP_CELL_LOCATE_MGA_TOKEN));
RobMeades 0:0b75e22c9231 187 TEST_ASSERT(pDriver->cellLocConfig(1));
RobMeades 0:0b75e22c9231 188 TEST_ASSERT(pDriver->cellLocRequest(UbloxATCellularInterfaceExt::CELL_HYBRID, 10, 100,
RobMeades 0:0b75e22c9231 189 (UbloxATCellularInterfaceExt::CellRespType) MBED_CONF_APP_RESP_TYPE,
RobMeades 0:0b75e22c9231 190 MBED_CONF_APP_CELL_LOCATE_MAX_NUM_HYPOTHESIS));
RobMeades 0:0b75e22c9231 191
RobMeades 0:0b75e22c9231 192 for (int x = 0; (numRes == 0) && (x < 10); x++) {
RobMeades 0:0b75e22c9231 193 numRes = pDriver->cellLocGetRes();
RobMeades 0:0b75e22c9231 194 }
RobMeades 0:0b75e22c9231 195
RobMeades 0:0b75e22c9231 196 TEST_ASSERT(numRes > 0);
RobMeades 0:0b75e22c9231 197 TEST_ASSERT(pDriver->cellLocGetData(&data));
RobMeades 0:0b75e22c9231 198
RobMeades 0:0b75e22c9231 199 TEST_ASSERT(data.validData);
RobMeades 0:0b75e22c9231 200
RobMeades 0:0b75e22c9231 201 printCellLocateData(&data);
RobMeades 0:0b75e22c9231 202
RobMeades 0:0b75e22c9231 203 TEST_ASSERT(pDriver->disconnect() == 0);
RobMeades 0:0b75e22c9231 204 // Wait for printfs to leave the building or the test result string gets messed up
RobMeades 0:0b75e22c9231 205 wait_ms(500);
RobMeades 0:0b75e22c9231 206 }
RobMeades 0:0b75e22c9231 207
RobMeades 0:0b75e22c9231 208 // Tidy up after testing so as not to screw with the test output strings
RobMeades 0:0b75e22c9231 209 void test_tidy_up() {
RobMeades 0:0b75e22c9231 210 pDriver->deinit();
RobMeades 0:0b75e22c9231 211 }
RobMeades 0:0b75e22c9231 212
RobMeades 0:0b75e22c9231 213 // ----------------------------------------------------------------
RobMeades 0:0b75e22c9231 214 // TEST ENVIRONMENT
RobMeades 0:0b75e22c9231 215 // ----------------------------------------------------------------
RobMeades 0:0b75e22c9231 216
RobMeades 0:0b75e22c9231 217 // Setup the test environment
RobMeades 0:0b75e22c9231 218 utest::v1::status_t test_setup(const size_t number_of_cases) {
RobMeades 0:0b75e22c9231 219 // Setup Greentea with a timeout
RobMeades 0:0b75e22c9231 220 GREENTEA_SETUP(540, "default_auto");
RobMeades 0:0b75e22c9231 221 return verbose_test_setup_handler(number_of_cases);
RobMeades 0:0b75e22c9231 222 }
RobMeades 0:0b75e22c9231 223
RobMeades 0:0b75e22c9231 224 // Test cases
RobMeades 0:0b75e22c9231 225 Case cases[] = {
RobMeades 0:0b75e22c9231 226 Case("Cell Locate with UDP server", test_udp_server),
RobMeades 0:0b75e22c9231 227 #if MBED_CONF_APP_RUN_CELL_LOCATE_TCP_SERVER_TEST
RobMeades 0:0b75e22c9231 228 Case("Cell Locate with TCP server", test_tcp_server),
RobMeades 0:0b75e22c9231 229 #endif
RobMeades 0:0b75e22c9231 230 Case("Tidy up", test_tidy_up)
RobMeades 0:0b75e22c9231 231 };
RobMeades 0:0b75e22c9231 232
RobMeades 0:0b75e22c9231 233 Specification specification(test_setup, cases);
RobMeades 0:0b75e22c9231 234
RobMeades 0:0b75e22c9231 235 // ----------------------------------------------------------------
RobMeades 0:0b75e22c9231 236 // MAIN
RobMeades 0:0b75e22c9231 237 // ----------------------------------------------------------------
RobMeades 0:0b75e22c9231 238
RobMeades 0:0b75e22c9231 239 int main() {
RobMeades 0:0b75e22c9231 240 mbed_trace_init();
RobMeades 0:0b75e22c9231 241
RobMeades 0:0b75e22c9231 242 mbed_trace_mutex_wait_function_set(lock);
RobMeades 0:0b75e22c9231 243 mbed_trace_mutex_release_function_set(unlock);
RobMeades 0:0b75e22c9231 244
RobMeades 0:0b75e22c9231 245 // Run tests
RobMeades 0:0b75e22c9231 246 return !Harness::run(specification);
RobMeades 0:0b75e22c9231 247 }
RobMeades 0:0b75e22c9231 248
RobMeades 0:0b75e22c9231 249 // End Of File
RobMeades 0:0b75e22c9231 250