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 May 18 08:00:15 2018 +0100
Revision:
7:ad3e80a40359
Parent:
1:ccaceb0dbbaf
Child:
8:abfee2b3d29b
Add Ublox c030 (#66)

* Added Ublox C030 to CI

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