initial fork from ublox

Dependencies:   ublox-at-cellular-interface

Committer:
rlanders73
Date:
Fri Dec 14 18:20:56 2018 +0000
Revision:
17:6278a086733a
Parent:
11:3631f62bb359
updating for Geneva platform

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