This is an example based on mbed-os cellular APIs that demonstrates a TCP or UDP echo transaction with a public echo server.

This code is forked from https://os.mbed.com/teams/mbed-os-examples/code/mbed-os-example-cellular/

This is an example showing how to use Skywire board with LE910-x module.

In this example, I had used the LE910-EUG module for 4G communication. Mbed OS code wasn't changed for LE910-x, because the Telit' HE910 is included mainline code on Mbed OS already. HE910 and LE910 are most similar. Therefore you can use LE910 via HE910 driver. Please check to configure of mbed_app.json, and initialize code for Skywire board of main.cpp.

Open mbed_app.json, you need to define a UART for the MCU to communicate with the xE910 module.

            "TELIT_HE910.tx"                 : "D1",
            "TELIT_HE910.rx"                 : "D0",
            "TELIT_HE910.provide-default"    : true

If you are using Pelion CM, make the following settings:

            "nsapi.default-cellular-apn"     : "\"stream.co.uk\"",
            "nsapi.default-cellular-username": "\"streamip\"",
            "nsapi.default-cellular-password": "\"streamip\"",

For your information, please see Pelion Connectivity Quick start guide.

320

You can find Skywire sensor shield information though NimbeLink site.

Tested with

  • DISCO_L475VG_IOT01A
  • K64F

1. Import the application into your desktop:

 mbed import https://os.mbed.com/users/Daniel_Lee/code/mbed-os-example-cellular-le910/

 cd mbed-os-example-cellular-le910

2. Compile and program:

mbed compile -t GCC_ARM -m DISCO_L475VG_IOT01A

(supported toolchains : GCC_ARM / ARM / IAR)

3. Download binary to a target board

4. Result

mbed-os-example-cellular


Built: Feb  7 2020, 07:02:27
Starting Skywire board with LE910-EUG Demo...
Waiting for Skywire to Boot...
Wait 15 seconds..
Establishing connection


Connection Established.
TCP: connected with echo.mbedcloudtesting.com server
TCP: Sent 4 Bytes to echo.mbedcloudtesting.com
Received from echo server 4 Bytes


Success. Exiting 
Committer:
mbed_official
Date:
Thu May 16 09:02:09 2019 +0100
Revision:
41:1f13c9a6ee23
Parent:
39:e57f130d65bd
Child:
43:fef5b8b23c60
Merge pull request #138 from ARMmbed/1570-smoke-test

Replaced C027 with Wise 1570 in smoke
.
Commit copied from https://github.com/ARMmbed/mbed-os-example-cellular

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 0:4611f6cf2413 1 properties ([[$class: 'ParametersDefinitionProperty', parameterDefinitions: [
mbed_official 1:ccaceb0dbbaf 2 [$class: 'StringParameterDefinition', name: 'mbed_os_revision', defaultValue: '', description: 'Revision of mbed-os to build. To access mbed-os PR use format "pull/PR number/head"'],
mbed_official 0:4611f6cf2413 3 [$class: 'BooleanParameterDefinition', name: 'smoke_test', defaultValue: true, description: 'Runs HW smoke tests on Cellular devices']
mbed_official 0:4611f6cf2413 4 ]]])
mbed_official 0:4611f6cf2413 5
mbed_official 1:ccaceb0dbbaf 6 if (env.MBED_OS_REVISION == null) {
mbed_official 1:ccaceb0dbbaf 7 echo 'First run in this branch, using default parameter values'
mbed_official 1:ccaceb0dbbaf 8 env.MBED_OS_REVISION = ''
mbed_official 1:ccaceb0dbbaf 9 }
mbed_official 1:ccaceb0dbbaf 10 if (env.MBED_OS_REVISION == '') {
mbed_official 1:ccaceb0dbbaf 11 echo 'Using mbed OS revision from mbed-os.lib'
mbed_official 1:ccaceb0dbbaf 12 } else {
mbed_official 1:ccaceb0dbbaf 13 echo "Using given mbed OS revision: ${env.MBED_OS_REVISION}"
mbed_official 1:ccaceb0dbbaf 14 if (env.MBED_OS_REVISION.matches('pull/\\d+/head')) {
mbed_official 1:ccaceb0dbbaf 15 echo "Revision is a Pull Request"
mbed_official 1:ccaceb0dbbaf 16 }
mbed_official 0:4611f6cf2413 17 }
mbed_official 0:4611f6cf2413 18
mbed_official 0:4611f6cf2413 19 // Map RaaS instances to corresponding test suites
mbed_official 0:4611f6cf2413 20 def raas = [
mbed_official 41:1f13c9a6ee23 21 "cellular_smoke_mtb_adv_wise_1570.json": "auli"
mbed_official 1:ccaceb0dbbaf 22 ]
mbed_official 0:4611f6cf2413 23
mbed_official 0:4611f6cf2413 24 // Supported Modems
mbed_official 0:4611f6cf2413 25 def targets = [
mbed_official 7:ad3e80a40359 26 "MTB_MTS_DRAGONFLY",
mbed_official 41:1f13c9a6ee23 27 "UBLOX_C030_U201",
mbed_official 41:1f13c9a6ee23 28 "MTB_ADV_WISE_1570"
mbed_official 0:4611f6cf2413 29 ]
mbed_official 0:4611f6cf2413 30
mbed_official 0:4611f6cf2413 31 // Map toolchains to compilers
mbed_official 0:4611f6cf2413 32 def toolchains = [
mbed_official 0:4611f6cf2413 33 ARM: "armcc",
mbed_official 0:4611f6cf2413 34 GCC_ARM: "arm-none-eabi-gcc",
mbed_official 41:1f13c9a6ee23 35 IAR: "iar_arm"
mbed_official 0:4611f6cf2413 36 ]
mbed_official 0:4611f6cf2413 37
mbed_official 0:4611f6cf2413 38 def stepsForParallel = [:]
mbed_official 0:4611f6cf2413 39
mbed_official 0:4611f6cf2413 40 // Jenkins pipeline does not support map.each, we need to use oldschool for loop
mbed_official 7:ad3e80a40359 41 for (int i = 0; i < targets.size(); i++) {
mbed_official 0:4611f6cf2413 42 for(int j = 0; j < toolchains.size(); j++) {
mbed_official 8:abfee2b3d29b 43 def target = targets.get(i)
mbed_official 8:abfee2b3d29b 44 def toolchain = toolchains.keySet().asList().get(j)
mbed_official 8:abfee2b3d29b 45 def compilerLabel = toolchains.get(toolchain)
mbed_official 8:abfee2b3d29b 46 def stepName = "${target} ${toolchain}"
mbed_official 0:4611f6cf2413 47
mbed_official 8:abfee2b3d29b 48 stepsForParallel[stepName] = buildStep(target, compilerLabel, toolchain)
mbed_official 0:4611f6cf2413 49 }
mbed_official 0:4611f6cf2413 50 }
mbed_official 0:4611f6cf2413 51
mbed_official 0:4611f6cf2413 52 def parallelRunSmoke = [:]
mbed_official 0:4611f6cf2413 53
mbed_official 0:4611f6cf2413 54 // Need to compare boolean against string value
mbed_official 1:ccaceb0dbbaf 55 if (params.smoke_test == true) {
mbed_official 1:ccaceb0dbbaf 56 echo "Running smoke tests"
mbed_official 0:4611f6cf2413 57 // Generate smoke tests based on suite amount
mbed_official 0:4611f6cf2413 58 for(int i = 0; i < raas.size(); i++) {
mbed_official 8:abfee2b3d29b 59 def suite_to_run = raas.keySet().asList().get(i)
mbed_official 8:abfee2b3d29b 60 def raasName = raas.get(suite_to_run)
mbed_official 7:ad3e80a40359 61
mbed_official 8:abfee2b3d29b 62 // Parallel execution needs unique step names. Remove .json file ending.
mbed_official 8:abfee2b3d29b 63 def smokeStep = "${raasName} ${suite_to_run.substring(0, suite_to_run.indexOf('.'))}"
mbed_official 8:abfee2b3d29b 64 parallelRunSmoke[smokeStep] = run_smoke(raasName, suite_to_run, toolchains, targets)
mbed_official 0:4611f6cf2413 65 }
mbed_official 1:ccaceb0dbbaf 66 } else {
mbed_official 1:ccaceb0dbbaf 67 echo "Skipping smoke tests"
mbed_official 0:4611f6cf2413 68 }
mbed_official 0:4611f6cf2413 69
mbed_official 0:4611f6cf2413 70 timestamps {
mbed_official 0:4611f6cf2413 71 parallel stepsForParallel
mbed_official 0:4611f6cf2413 72 parallel parallelRunSmoke
mbed_official 0:4611f6cf2413 73 }
mbed_official 0:4611f6cf2413 74
mbed_official 8:abfee2b3d29b 75 def buildStep(target, compilerLabel, toolchain) {
mbed_official 0:4611f6cf2413 76 return {
mbed_official 7:ad3e80a40359 77 stage ("${target}_${compilerLabel}") {
mbed_official 0:4611f6cf2413 78 node ("${compilerLabel}") {
mbed_official 0:4611f6cf2413 79 deleteDir()
mbed_official 0:4611f6cf2413 80 dir("mbed-os-example-cellular") {
mbed_official 0:4611f6cf2413 81 checkout scm
mbed_official 0:4611f6cf2413 82 def config_file = "mbed_app.json"
mbed_official 0:4611f6cf2413 83
mbed_official 8:abfee2b3d29b 84 // Configurations for different targets
mbed_official 0:4611f6cf2413 85
mbed_official 8:abfee2b3d29b 86 if ("${target}" == "MTB_ADV_WISE_1570") {
mbed_official 8:abfee2b3d29b 87 execute("sed -i 's/\"lwip.ppp-enabled\": true,/\"lwip.ppp-enabled\": false,/' ${config_file}")
mbed_official 8:abfee2b3d29b 88 execute("sed -i 's/\"platform.default-serial-baud-rate\": 115200,/\"platform.default-serial-baud-rate\": 9600,/' ${config_file}")
mbed_official 8:abfee2b3d29b 89 }
mbed_official 8:abfee2b3d29b 90
mbed_official 0:4611f6cf2413 91 // Set mbed-os to revision received as parameter
mbed_official 0:4611f6cf2413 92 execute ("mbed deploy --protocol ssh")
mbed_official 1:ccaceb0dbbaf 93 if (env.MBED_OS_REVISION != '') {
mbed_official 1:ccaceb0dbbaf 94 dir("mbed-os") {
mbed_official 1:ccaceb0dbbaf 95 if (env.MBED_OS_REVISION.matches('pull/\\d+/head')) {
mbed_official 1:ccaceb0dbbaf 96 // Use mbed-os PR and switch to branch created
mbed_official 1:ccaceb0dbbaf 97 execute("git fetch origin ${env.MBED_OS_REVISION}:_PR_")
mbed_official 1:ccaceb0dbbaf 98 execute("git checkout _PR_")
mbed_official 1:ccaceb0dbbaf 99 } else {
mbed_official 1:ccaceb0dbbaf 100 execute ("git checkout ${env.MBED_OS_REVISION}")
mbed_official 1:ccaceb0dbbaf 101 }
mbed_official 1:ccaceb0dbbaf 102 }
mbed_official 1:ccaceb0dbbaf 103 }
mbed_official 0:4611f6cf2413 104
mbed_official 0:4611f6cf2413 105 execute ("mbed compile --build out/${target}_${toolchain}/ -m ${target} -t ${toolchain} -c --app-config ${config_file}")
mbed_official 0:4611f6cf2413 106 }
mbed_official 8:abfee2b3d29b 107 if ("${target}" == "MTB_ADV_WISE_1570") {
mbed_official 8:abfee2b3d29b 108 stash name: "${target}_${toolchain}", includes: '**/mbed-os-example-cellular.hex'
mbed_official 8:abfee2b3d29b 109 archive '**/mbed-os-example-cellular.hex'
mbed_official 8:abfee2b3d29b 110 }
mbed_official 8:abfee2b3d29b 111 else {
mbed_official 8:abfee2b3d29b 112 stash name: "${target}_${toolchain}", includes: '**/mbed-os-example-cellular.bin'
mbed_official 8:abfee2b3d29b 113 archive '**/mbed-os-example-cellular.bin'
mbed_official 8:abfee2b3d29b 114 }
mbed_official 0:4611f6cf2413 115 step([$class: 'WsCleanup'])
mbed_official 0:4611f6cf2413 116 }
mbed_official 0:4611f6cf2413 117 }
mbed_official 0:4611f6cf2413 118 }
mbed_official 0:4611f6cf2413 119 }
mbed_official 0:4611f6cf2413 120
mbed_official 8:abfee2b3d29b 121 def run_smoke(raasName, suite_to_run, toolchains, targets) {
mbed_official 0:4611f6cf2413 122 return {
mbed_official 41:1f13c9a6ee23 123 env.RAAS_USERNAME = "ci"
mbed_official 41:1f13c9a6ee23 124 env.RAAS_PASSWORD = "ci"
mbed_official 0:4611f6cf2413 125 // Remove .json from suite name
mbed_official 0:4611f6cf2413 126 def suiteName = suite_to_run.substring(0, suite_to_run.indexOf('.'))
mbed_official 8:abfee2b3d29b 127 stage ("smoke_${raasName}_${suiteName}") {
mbed_official 0:4611f6cf2413 128 //node is actually the type of machine, i.e., mesh-test boild down to linux
mbed_official 1:ccaceb0dbbaf 129 node ("linux") {
mbed_official 0:4611f6cf2413 130 deleteDir()
mbed_official 0:4611f6cf2413 131 dir("mbed-clitest") {
mbed_official 0:4611f6cf2413 132 git "git@github.com:ARMmbed/mbed-clitest.git"
mbed_official 1:ccaceb0dbbaf 133 execute("git checkout ${env.LATEST_CLITEST_STABLE_REL}")
mbed_official 0:4611f6cf2413 134 dir("mbed-clitest-suites") {
mbed_official 0:4611f6cf2413 135 git "git@github.com:ARMmbed/mbed-clitest-suites.git"
mbed_official 0:4611f6cf2413 136 execute("git submodule update --init --recursive")
mbed_official 0:4611f6cf2413 137 execute("git all checkout master")
mbed_official 0:4611f6cf2413 138 dir("cellular") {
mbed_official 0:4611f6cf2413 139 execute("git checkout master")
mbed_official 0:4611f6cf2413 140 }
mbed_official 0:4611f6cf2413 141 }
mbed_official 0:4611f6cf2413 142
mbed_official 7:ad3e80a40359 143 for (int i = 0; i < targets.size(); i++) {
mbed_official 0:4611f6cf2413 144 for(int j = 0; j < toolchains.size(); j++) {
mbed_official 7:ad3e80a40359 145 def target = targets.get(i)
mbed_official 7:ad3e80a40359 146 def toolchain = toolchains.keySet().asList().get(j)
mbed_official 8:abfee2b3d29b 147 unstash "${target}_${toolchain}"
mbed_official 0:4611f6cf2413 148 }
mbed_official 0:4611f6cf2413 149 }
mbed_official 8:abfee2b3d29b 150 execute("python clitest.py --suitedir mbed-clitest-suites/suites/ --suite ${suite_to_run} --type hardware --reset \
mbed_official 39:e57f130d65bd 151 --raas https://${raasName}.mbedcloudtesting.com:443 --tcdir mbed-clitest-suites/cellular --raas_queue --raas_queue_timeout 3600 \
mbed_official 41:1f13c9a6ee23 152 --raas_share_allocs --failure_return_value -v -w --log log_${raasName}_${suiteName}")
mbed_official 8:abfee2b3d29b 153 archive "log_${raasName}_${suiteName}/**/*"
mbed_official 0:4611f6cf2413 154 }
mbed_official 0:4611f6cf2413 155 }
mbed_official 0:4611f6cf2413 156 }
mbed_official 0:4611f6cf2413 157 }
mbed_official 0:4611f6cf2413 158 }