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:
Fri Mar 09 09:30:19 2018 +0000
Revision:
1:ccaceb0dbbaf
Parent:
0:4611f6cf2413
Child:
7:ad3e80a40359
Merge pull request #57 from ARMmbed/mbed-os-pr-support

Support for running against mbed-os PRs
.
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 0:4611f6cf2413 21 "cellular_smoke_ublox_c027.json": "8072"
mbed_official 1:ccaceb0dbbaf 22 //"cellular_smoke_mtb_mts_dragonfly.json": "8119"
mbed_official 1:ccaceb0dbbaf 23 ]
mbed_official 0:4611f6cf2413 24
mbed_official 0:4611f6cf2413 25 // List of targets with supported modem families
mbed_official 0:4611f6cf2413 26 def target_families = [
mbed_official 1:ccaceb0dbbaf 27 "UBLOX": ["UBLOX_C027"],
mbed_official 1:ccaceb0dbbaf 28 "DRAGONFLY": ["MTB_MTS_DRAGONFLY"]
mbed_official 1:ccaceb0dbbaf 29 ]
mbed_official 0:4611f6cf2413 30
mbed_official 0:4611f6cf2413 31 // Supported Modems
mbed_official 0:4611f6cf2413 32 def targets = [
mbed_official 1:ccaceb0dbbaf 33 "UBLOX_C027",
mbed_official 1:ccaceb0dbbaf 34 "MTB_MTS_DRAGONFLY"
mbed_official 0:4611f6cf2413 35 ]
mbed_official 0:4611f6cf2413 36
mbed_official 0:4611f6cf2413 37 // Map toolchains to compilers
mbed_official 0:4611f6cf2413 38 def toolchains = [
mbed_official 0:4611f6cf2413 39 ARM: "armcc",
mbed_official 0:4611f6cf2413 40 GCC_ARM: "arm-none-eabi-gcc",
mbed_official 1:ccaceb0dbbaf 41 IAR: "iar_arm",
mbed_official 1:ccaceb0dbbaf 42 ARMC6: "arm6"
mbed_official 0:4611f6cf2413 43 ]
mbed_official 0:4611f6cf2413 44
mbed_official 0:4611f6cf2413 45 // supported socket tests
mbed_official 0:4611f6cf2413 46 def sockets = [
mbed_official 0:4611f6cf2413 47 "udp",
mbed_official 0:4611f6cf2413 48 "tcp"
mbed_official 0:4611f6cf2413 49 ]
mbed_official 0:4611f6cf2413 50
mbed_official 0:4611f6cf2413 51 def stepsForParallel = [:]
mbed_official 0:4611f6cf2413 52
mbed_official 0:4611f6cf2413 53 // Jenkins pipeline does not support map.each, we need to use oldschool for loop
mbed_official 0:4611f6cf2413 54 for (int i = 0; i < target_families.size(); i++) {
mbed_official 0:4611f6cf2413 55 for(int j = 0; j < toolchains.size(); j++) {
mbed_official 0:4611f6cf2413 56 for(int k = 0; k < targets.size(); k++) {
mbed_official 0:4611f6cf2413 57 for(int l = 0; l < sockets.size(); l++) {
mbed_official 0:4611f6cf2413 58 def target_family = target_families.keySet().asList().get(i)
mbed_official 0:4611f6cf2413 59 def allowed_target_type = target_families.get(target_family)
mbed_official 0:4611f6cf2413 60 def target = targets.get(k)
mbed_official 0:4611f6cf2413 61 def toolchain = toolchains.keySet().asList().get(j)
mbed_official 0:4611f6cf2413 62 def compilerLabel = toolchains.get(toolchain)
mbed_official 0:4611f6cf2413 63 def stepName = "${target} ${toolchain}"
mbed_official 0:4611f6cf2413 64 def socket = sockets.get(l)
mbed_official 0:4611f6cf2413 65
mbed_official 0:4611f6cf2413 66 if(allowed_target_type.contains(target)) {
mbed_official 0:4611f6cf2413 67 stepsForParallel[stepName] = buildStep(target_family, target, compilerLabel, toolchain, socket)
mbed_official 0:4611f6cf2413 68 }
mbed_official 0:4611f6cf2413 69 }
mbed_official 0:4611f6cf2413 70 }
mbed_official 0:4611f6cf2413 71 }
mbed_official 0:4611f6cf2413 72 }
mbed_official 0:4611f6cf2413 73
mbed_official 0:4611f6cf2413 74 def parallelRunSmoke = [:]
mbed_official 0:4611f6cf2413 75
mbed_official 0:4611f6cf2413 76 // Need to compare boolean against string value
mbed_official 1:ccaceb0dbbaf 77 if (params.smoke_test == true) {
mbed_official 1:ccaceb0dbbaf 78 echo "Running smoke tests"
mbed_official 0:4611f6cf2413 79 // Generate smoke tests based on suite amount
mbed_official 0:4611f6cf2413 80 for(int i = 0; i < raas.size(); i++) {
mbed_official 0:4611f6cf2413 81 for(int j = 0; j < sockets.size(); j++) {
mbed_official 0:4611f6cf2413 82 def suite_to_run = raas.keySet().asList().get(i)
mbed_official 0:4611f6cf2413 83 def raasPort = raas.get(suite_to_run)
mbed_official 0:4611f6cf2413 84 def socket = sockets.get(j)
mbed_official 0:4611f6cf2413 85
mbed_official 0:4611f6cf2413 86 // Parallel execution needs unique step names. Remove .json file ending.
mbed_official 0:4611f6cf2413 87 def smokeStep = "${raasPort} ${suite_to_run.substring(0, suite_to_run.indexOf('.'))}"
mbed_official 0:4611f6cf2413 88 parallelRunSmoke[smokeStep] = run_smoke(target_families, raasPort, suite_to_run, toolchains, targets, socket)
mbed_official 0:4611f6cf2413 89 }
mbed_official 0:4611f6cf2413 90 }
mbed_official 1:ccaceb0dbbaf 91 } else {
mbed_official 1:ccaceb0dbbaf 92 echo "Skipping smoke tests"
mbed_official 0:4611f6cf2413 93 }
mbed_official 0:4611f6cf2413 94
mbed_official 0:4611f6cf2413 95 timestamps {
mbed_official 0:4611f6cf2413 96 parallel stepsForParallel
mbed_official 0:4611f6cf2413 97 parallel parallelRunSmoke
mbed_official 0:4611f6cf2413 98 }
mbed_official 0:4611f6cf2413 99
mbed_official 0:4611f6cf2413 100 def buildStep(target_family, target, compilerLabel, toolchain, socket) {
mbed_official 0:4611f6cf2413 101 return {
mbed_official 0:4611f6cf2413 102 stage ("${target_family}_${target}_${compilerLabel}") {
mbed_official 0:4611f6cf2413 103 node ("${compilerLabel}") {
mbed_official 0:4611f6cf2413 104 deleteDir()
mbed_official 0:4611f6cf2413 105 dir("mbed-os-example-cellular") {
mbed_official 0:4611f6cf2413 106 checkout scm
mbed_official 0:4611f6cf2413 107 def config_file = "mbed_app.json"
mbed_official 0:4611f6cf2413 108
mbed_official 0:4611f6cf2413 109 // Activate traces
mbed_official 0:4611f6cf2413 110 //execute("sed -i 's/\"mbed-trace.enable\": false/\"mbed-trace.enable\": true/' ${config_file}")
mbed_official 0:4611f6cf2413 111
mbed_official 0:4611f6cf2413 112 //change socket typembed_app.json
mbed_official 0:4611f6cf2413 113
mbed_official 0:4611f6cf2413 114
mbed_official 0:4611f6cf2413 115 execute("sed -i 's/\"sock-type\": .*/\"sock-type\": \"${socket}\",/' ${config_file}")
mbed_official 0:4611f6cf2413 116
mbed_official 0:4611f6cf2413 117 // Set mbed-os to revision received as parameter
mbed_official 0:4611f6cf2413 118 execute ("mbed deploy --protocol ssh")
mbed_official 1:ccaceb0dbbaf 119 if (env.MBED_OS_REVISION != '') {
mbed_official 1:ccaceb0dbbaf 120 dir("mbed-os") {
mbed_official 1:ccaceb0dbbaf 121 if (env.MBED_OS_REVISION.matches('pull/\\d+/head')) {
mbed_official 1:ccaceb0dbbaf 122 // Use mbed-os PR and switch to branch created
mbed_official 1:ccaceb0dbbaf 123 execute("git fetch origin ${env.MBED_OS_REVISION}:_PR_")
mbed_official 1:ccaceb0dbbaf 124 execute("git checkout _PR_")
mbed_official 1:ccaceb0dbbaf 125 } else {
mbed_official 1:ccaceb0dbbaf 126 execute ("git checkout ${env.MBED_OS_REVISION}")
mbed_official 1:ccaceb0dbbaf 127 }
mbed_official 1:ccaceb0dbbaf 128 }
mbed_official 1:ccaceb0dbbaf 129 }
mbed_official 0:4611f6cf2413 130
mbed_official 0:4611f6cf2413 131 execute ("mbed compile --build out/${target}_${toolchain}/ -m ${target} -t ${toolchain} -c --app-config ${config_file}")
mbed_official 0:4611f6cf2413 132 }
mbed_official 0:4611f6cf2413 133 stash name: "${target}_${toolchain}_${socket}", includes: '**/mbed-os-example-cellular.bin'
mbed_official 0:4611f6cf2413 134 archive '**/mbed-os-example-cellular.bin'
mbed_official 0:4611f6cf2413 135 step([$class: 'WsCleanup'])
mbed_official 0:4611f6cf2413 136 }
mbed_official 0:4611f6cf2413 137 }
mbed_official 0:4611f6cf2413 138 }
mbed_official 0:4611f6cf2413 139 }
mbed_official 0:4611f6cf2413 140
mbed_official 0:4611f6cf2413 141 def run_smoke(target_families, raasPort, suite_to_run, toolchains, targets, socket) {
mbed_official 0:4611f6cf2413 142 return {
mbed_official 0:4611f6cf2413 143 env.RAAS_USERNAME = "user"
mbed_official 0:4611f6cf2413 144 env.RAAS_PASSWORD = "user"
mbed_official 0:4611f6cf2413 145 // Remove .json from suite name
mbed_official 0:4611f6cf2413 146 def suiteName = suite_to_run.substring(0, suite_to_run.indexOf('.'))
mbed_official 0:4611f6cf2413 147 stage ("smoke_${raasPort}_${suiteName}") {
mbed_official 0:4611f6cf2413 148 //node is actually the type of machine, i.e., mesh-test boild down to linux
mbed_official 1:ccaceb0dbbaf 149 node ("linux") {
mbed_official 0:4611f6cf2413 150 deleteDir()
mbed_official 0:4611f6cf2413 151 dir("mbed-clitest") {
mbed_official 0:4611f6cf2413 152 git "git@github.com:ARMmbed/mbed-clitest.git"
mbed_official 1:ccaceb0dbbaf 153 execute("git checkout ${env.LATEST_CLITEST_STABLE_REL}")
mbed_official 0:4611f6cf2413 154 dir("mbed-clitest-suites") {
mbed_official 0:4611f6cf2413 155 git "git@github.com:ARMmbed/mbed-clitest-suites.git"
mbed_official 0:4611f6cf2413 156 execute("git submodule update --init --recursive")
mbed_official 0:4611f6cf2413 157 execute("git all checkout master")
mbed_official 0:4611f6cf2413 158 dir("cellular") {
mbed_official 0:4611f6cf2413 159 execute("git checkout master")
mbed_official 0:4611f6cf2413 160 }
mbed_official 0:4611f6cf2413 161 }
mbed_official 0:4611f6cf2413 162
mbed_official 0:4611f6cf2413 163 for (int i = 0; i < target_families.size(); i++) {
mbed_official 0:4611f6cf2413 164 for(int j = 0; j < toolchains.size(); j++) {
mbed_official 0:4611f6cf2413 165 for(int k = 0; k < targets.size(); k++) {
mbed_official 1:ccaceb0dbbaf 166 def target_family = target_families.keySet().asList().get(i)
mbed_official 1:ccaceb0dbbaf 167 def allowed_target_type = target_families.get(target_family)
mbed_official 1:ccaceb0dbbaf 168 def target = targets.get(k)
mbed_official 1:ccaceb0dbbaf 169 def toolchain = toolchains.keySet().asList().get(j)
mbed_official 0:4611f6cf2413 170
mbed_official 1:ccaceb0dbbaf 171 if(allowed_target_type.contains(target)) {
mbed_official 1:ccaceb0dbbaf 172 unstash "${target}_${toolchain}_${socket}"
mbed_official 1:ccaceb0dbbaf 173 }
mbed_official 1:ccaceb0dbbaf 174 }
mbed_official 0:4611f6cf2413 175 }
mbed_official 0:4611f6cf2413 176 }
mbed_official 1:ccaceb0dbbaf 177 execute("python clitest.py --suitedir mbed-clitest-suites/suites/ --suite ${suite_to_run} --type hardware --reset --raas 62.44.193.186:${raasPort} --tcdir mbed-clitest-suites/cellular --failure_return_value -vvv -w --log log_${raasPort}_${suiteName}")
mbed_official 1:ccaceb0dbbaf 178 archive "log_${raasPort}_${suiteName}/**/*"
mbed_official 0:4611f6cf2413 179 }
mbed_official 0:4611f6cf2413 180 }
mbed_official 0:4611f6cf2413 181 }
mbed_official 0:4611f6cf2413 182 }
mbed_official 0:4611f6cf2413 183 }