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

Committer:
fahim.alavi@u-blox.com
Date:
2018-08-31
Revision:
9:a5389248c8d0
Parent:
5:b935404dcf7c

File content as of revision 9:a5389248c8d0:

#include "mbed.h"
#include "greentea-client/test_env.h"
#include "unity.h"
#include "utest.h"
#include "UbloxCellularDriverGen.h"
#include "UDPSocket.h"
#ifdef FEATURE_COMMON_PAL
#include "mbed_trace.h"
#define TRACE_GROUP "TEST"
#else
#define tr_debug(format, ...) debug(format "\n", ## __VA_ARGS__)
#define tr_info(format, ...)  debug(format "\n", ## __VA_ARGS__)
#define tr_warn(format, ...)  debug(format "\n", ## __VA_ARGS__)
#define tr_error(format, ...) debug(format "\n", ## __VA_ARGS__)
#endif

using namespace utest::v1;

// ----------------------------------------------------------------
// COMPILE-TIME MACROS
// ----------------------------------------------------------------

// These macros can be overridden with an mbed_app.json file and
// contents of the following form:
//
//{
//    "config": {
//        "default-pin": {
//            "value": "\"my_pin\""
//        }
//}

// Whether debug trace is on
#ifndef MBED_CONF_APP_DEBUG_ON
# define MBED_CONF_APP_DEBUG_ON false
#endif

// The credentials of the SIM in the board.
#ifndef MBED_CONF_APP_DEFAULT_PIN
// Note: this is the PIN for the SIM with ICCID
// 8944501104169548380.
# define MBED_CONF_APP_DEFAULT_PIN "5134"
#endif

// http://www.geckobeach.com/cellular/secrets/gsmcodes.php
// https://en.wikipedia.org/wiki/Unstructured_Supplementary_Service_Data

// A few USSD commands to try, set to "" to skip
#ifndef MBED_CONF_APP_USSD_COMMAND_1
#  define MBED_CONF_APP_USSD_COMMAND_1 "*100#"
#endif

#ifndef MBED_CONF_APP_USSD_COMMAND_2
#  define MBED_CONF_APP_USSD_COMMAND_2 "*#21#"
#endif

#ifndef MBED_CONF_APP_USSD_COMMAND_3
#  define MBED_CONF_APP_USSD_COMMAND_3 "*#30#"
#endif

#ifndef MBED_CONF_APP_USSD_COMMAND_4
#  define MBED_CONF_APP_USSD_COMMAND_4 "*#31#"
#endif

#ifndef MBED_CONF_APP_USSD_COMMAND_5
#  define MBED_CONF_APP_USSD_COMMAND_5 "*#43#"
#endif

#ifndef MBED_CONF_APP_USSD_COMMAND_6
#  define MBED_CONF_APP_USSD_COMMAND_6 "*#61#"
#endif

#ifndef MBED_CONF_APP_USSD_COMMAND_7
#  define MBED_CONF_APP_USSD_COMMAND_7 ""
#endif

#ifndef MBED_CONF_APP_USSD_COMMAND_8
#  define MBED_CONF_APP_USSD_COMMAND_8 ""
#endif

#ifndef MBED_CONF_APP_USSD_COMMAND_9
#  define MBED_CONF_APP_USSD_COMMAND_9 ""
#endif

#ifndef MBED_CONF_APP_USSD_COMMAND_10
#  define MBED_CONF_APP_USSD_COMMAND_10 ""
#endif

// ----------------------------------------------------------------
// PRIVATE VARIABLES
// ----------------------------------------------------------------

#ifdef FEATURE_COMMON_PAL
// Lock for debug prints
static Mutex mtx;
#endif

// An instance of the generic cellular class
static UbloxCellularDriverGen *pDriver =
       new UbloxCellularDriverGen(MDMTXD, MDMRXD,
                                  MBED_CONF_UBLOX_CELL_BAUD_RATE,
                                  MBED_CONF_APP_DEBUG_ON);
// A general purpose buffer
static char buf[USSD_STRING_LENGTH + 1];

// ----------------------------------------------------------------
// PRIVATE FUNCTIONS
// ----------------------------------------------------------------

#ifdef FEATURE_COMMON_PAL
// Locks for debug prints
static void lock()
{
    mtx.lock();
}

static void unlock()
{
    mtx.unlock();
}
#endif

// ----------------------------------------------------------------
// TESTS
// ----------------------------------------------------------------

// Test USSD
void test_ussd() {
    TEST_ASSERT(pDriver->init(MBED_CONF_APP_DEFAULT_PIN));
    TEST_ASSERT(pDriver->nwk_registration());

    if (strlen(MBED_CONF_APP_USSD_COMMAND_1) > 0) {
        tr_debug("Sending : \"%s\".", MBED_CONF_APP_USSD_COMMAND_1);
        TEST_ASSERT(pDriver->ussdCommand(MBED_CONF_APP_USSD_COMMAND_1, buf, sizeof (buf)));
        tr_debug("USSD answer: \"%s\".", buf);
    }

    if (strlen(MBED_CONF_APP_USSD_COMMAND_2) > 0) {
        tr_debug("Sending : \"%s\".", MBED_CONF_APP_USSD_COMMAND_2);
        TEST_ASSERT(pDriver->ussdCommand(MBED_CONF_APP_USSD_COMMAND_2, buf, sizeof (buf)));
        tr_debug("USSD answer: \"%s\".", buf);
    }

    if (strlen(MBED_CONF_APP_USSD_COMMAND_3) > 0) {
        tr_debug("Sending : \"%s\".", MBED_CONF_APP_USSD_COMMAND_3);
        TEST_ASSERT(pDriver->ussdCommand(MBED_CONF_APP_USSD_COMMAND_3, buf, sizeof (buf)));
        tr_debug("USSD answer: \"%s\".", buf);
    }

    if (strlen(MBED_CONF_APP_USSD_COMMAND_4) > 0) {
        tr_debug("Sending : \"%s\".", MBED_CONF_APP_USSD_COMMAND_4);
        TEST_ASSERT(pDriver->ussdCommand(MBED_CONF_APP_USSD_COMMAND_4, buf, sizeof (buf)));
        tr_debug("USSD answer: \"%s\".", buf);
    }

    if (strlen(MBED_CONF_APP_USSD_COMMAND_5) > 0) {
        tr_debug("Sending : \"%s\".", MBED_CONF_APP_USSD_COMMAND_5);
        TEST_ASSERT(pDriver->ussdCommand(MBED_CONF_APP_USSD_COMMAND_5, buf, sizeof (buf)));
        tr_debug("USSD answer: \"%s\".", buf);
    }

    if (strlen(MBED_CONF_APP_USSD_COMMAND_6) > 0) {
        tr_debug("Sending : \"%s\".", MBED_CONF_APP_USSD_COMMAND_6);
        TEST_ASSERT(pDriver->ussdCommand(MBED_CONF_APP_USSD_COMMAND_6, buf, sizeof (buf)));
        tr_debug("USSD answer: \"%s\".", buf);
    }

    if (strlen(MBED_CONF_APP_USSD_COMMAND_7) > 0) {
        tr_debug("Sending : \"%s\".", MBED_CONF_APP_USSD_COMMAND_7);
        TEST_ASSERT(pDriver->ussdCommand(MBED_CONF_APP_USSD_COMMAND_7, buf, sizeof (buf)));
        tr_debug("USSD answer: \"%s\".", buf);
    }

    if (strlen(MBED_CONF_APP_USSD_COMMAND_8) > 0) {
        tr_debug("Sending : \"%s\".", MBED_CONF_APP_USSD_COMMAND_8);
        TEST_ASSERT(pDriver->ussdCommand(MBED_CONF_APP_USSD_COMMAND_8, buf, sizeof (buf)));
        tr_debug("USSD answer: \"%s\".", buf);
    }

    if (strlen(MBED_CONF_APP_USSD_COMMAND_9) > 0) {
        tr_debug("Sending : \"%s\".", MBED_CONF_APP_USSD_COMMAND_9);
        TEST_ASSERT(pDriver->ussdCommand(MBED_CONF_APP_USSD_COMMAND_9, buf, sizeof (buf)));
        tr_debug("USSD answer: \"%s\".", buf);
    }

    if (strlen(MBED_CONF_APP_USSD_COMMAND_10) > 0) {
        tr_debug("Sending : \"%s\".", MBED_CONF_APP_USSD_COMMAND_10);
        TEST_ASSERT(pDriver->ussdCommand(MBED_CONF_APP_USSD_COMMAND_10, buf, sizeof (buf)));
        tr_debug("USSD answer: \"%s\".", buf);
    }

    TEST_ASSERT(pDriver->nwk_deregistration());
}

// ----------------------------------------------------------------
// TEST ENVIRONMENT
// ----------------------------------------------------------------

// Setup the test environment
utest::v1::status_t test_setup(const size_t number_of_cases) {
    // Setup Greentea with a timeout
    GREENTEA_SETUP(180, "default_auto");
    return verbose_test_setup_handler(number_of_cases);
}

// Test cases
Case cases[] = {
    Case("USSD test", test_ussd)

};

Specification specification(test_setup, cases);

// ----------------------------------------------------------------
// MAIN
// ----------------------------------------------------------------

int main() {

#ifdef FEATURE_COMMON_PAL
    mbed_trace_init();

    mbed_trace_mutex_wait_function_set(lock);
    mbed_trace_mutex_release_function_set(unlock);
#endif
    
    // Run tests
    return !Harness::run(specification);
}

// End Of File