CodeZoo co., ltd
/
mbed-os-example-cellular-Type1SC
Cellular example for CodeZoo Type1SC Shield
Revision 0:04fa3499a11e, committed 2021-07-27
- Comitter:
- pimco01
- Date:
- Tue Jul 27 05:42:30 2021 +0000
- Commit message:
- CodeZoo Type1SC Shield Initial commit.
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/.circleci/config.yml Tue Jul 27 05:42:30 2021 +0000 @@ -0,0 +1,63 @@ +version: 2.1 + +jobs: + prepare: + docker: + - image: mbedos/mbed-os-env:latest + steps: + - checkout + - run: | + mbed deploy + - persist_to_workspace: + root: . + paths: + - . + + build_mbed: + docker: + - image: mbedos/mbed-os-env:stable + parameters: + toolchain: + type: string + target: + type: string + steps: + - attach_workspace: + at: . + - run: mbed compile -t << parameters.toolchain >> -m << parameters.target >> || exit 1 + + build_cmake: + docker: + - image: mbedos/mbed-os-env:latest + parameters: + toolchain: + type: string + target: + type: string + steps: + - attach_workspace: + at: . + - run: python3 -m pip install mbed-tools --upgrade # remove after docker image is updated to contain new tools + - run: mbed-tools compile -t << parameters.toolchain >> -m << parameters.target >> || exit 1 + +workflows: + workflow: + jobs: + - prepare + - build_mbed: + requires: + - prepare + matrix: + parameters: + target: ["DISCO_l496AG", "WIO_3G", "NRF52840_DK"] + toolchain: ["GCC_ARM"] + name: build-mbed-<< matrix.target >>-<< matrix.toolchain >> + # disabled until cmake is fixed in mbed-os + #- build_cmake: + # requires: + # - prepare + # matrix: + # parameters: + # target: ["DISCO_l496AG", "WIO_3g", "NRF52840_DK"] + # toolchain: ["GCC_ARM", "ARMC6"] + # name: build-cmake-<< matrix.target >>-<< matrix.toolchain >> \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/.github/ISSUE_TEMPLATE/bug_report.md Tue Jul 27 05:42:30 2021 +0000 @@ -0,0 +1,58 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: 'type: bug' +assignees: '' + +--- + +<!-- + + ************************************** WARNING ************************************** + + The ciarcom bot parses this header automatically. Any deviation from the + template may cause the bot to automatically correct this header or may result in a + warning message, requesting updates. + + PLEASE ENSURE ALL SECTIONS OF THIS TEMPLATE ARE FILLED IN AND THAT THERE ARE + NO OTHER CHANGES TO THE TEMPLATE. + + Only bugs should be raised here as issues. Questions or enhancements should instead be raised on + our forums: + https://forums.mbed.com/ . + + ************************************************************************************* + +--> + +### Description of defect + +<!-- + Add detailed description of what you are reporting. + Good example: https://os.mbed.com/docs/mbed-os/latest/contributing/workflow.html +--> + + +#### Target(s) affected by this defect ? + + +#### Toolchain(s) (name and version) displaying this defect ? + + +#### What version of Mbed-os are you using (tag or sha) ? +<!-- + For a released version please provide the release tag (this can be found as per the instructions below) + + mbed-os version can be found in: + https://github.com/ARMmbed/mbed-os/blob/master/platform/include/platform/mbed_version.h + The tag can be reconstructed as follows: + mbed-os-MBED_MAJOR_VERSION.MBED_MINOR_VERSION.MBED_PATCH_VERSION + +--> + + +#### What version(s) of tools are you using. List all that apply (E.g. mbed-cli) + + +#### How is this defect reproduced ?
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/.gitignore Tue Jul 27 05:42:30 2021 +0000 @@ -0,0 +1,48 @@ +# Compiled Object files +*.slo +*.lo +*.o +*.obj + +# Precompiled Headers +*.gch +*.pch + +# Compiled Dynamic libraries +*.so +*.dylib +*.dll + +# Fortran module files +*.mod + +# Compiled Static libraries +*.lai +*.la +*.a + +# Executables +*.exe +*.out +*.app + +.yotta.json +BUILD +yotta_modules/ +yotta_targets/ +.DS_Store + +# clion +.idea/ +cmake-build-*/ + +# exporters +GettingStarted.html + +# mbed build system +mbed-os/ +mbed_settings.py +mbed_config.h +*.pyc +TARGET_CORDIO_BLUENRG/ +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/CMakeLists.txt Tue Jul 27 05:42:30 2021 +0000 @@ -0,0 +1,42 @@ +# Copyright (c) 2020 ARM Limited. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 + +cmake_minimum_required(VERSION 3.19.0 FATAL_ERROR) + +set(MBED_PATH ${CMAKE_CURRENT_SOURCE_DIR}/mbed-os CACHE INTERNAL "") +set(MBED_CONFIG_PATH ${CMAKE_CURRENT_BINARY_DIR} CACHE INTERNAL "") +set(APP_TARGET mbed-os-example-cellular) + +include(${MBED_PATH}/tools/cmake/app.cmake) + +add_subdirectory(${MBED_PATH}) + +add_executable(${APP_TARGET}) + +mbed_configure_app_target(${APP_TARGET}) + +project(${APP_TARGET}) + +target_include_directories(${APP_TARGET} + PUBLIC + ${CMAKE_CURRENT_SOURCE_DIR}/include +) + +target_sources(${APP_TARGET} + PRIVATE + source/main.cpp +) + +target_link_libraries(${APP_TARGET} + PRIVATE + mbed-os + mbed-netsocket + mbed-cellular +) + +mbed_set_post_build(${APP_TARGET}) + +option(VERBOSE_BUILD "Have a verbose build process") +if(VERBOSE_BUILD) + set(CMAKE_VERBOSE_MAKEFILE ON) +endif()
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/CONTRIBUTING.md Tue Jul 27 05:42:30 2021 +0000 @@ -0,0 +1,5 @@ +# Contributing to Mbed OS + +Mbed OS is an open-source, device software platform for the Internet of Things. Contributions are an important part of the platform, and our goal is to make it as simple as possible to become a contributor. + +To encourage productive collaboration, as well as robust, consistent and maintainable code, we have a set of guidelines for [contributing to Mbed OS](https://os.mbed.com/docs/mbed-os/latest/contributing/index.html).
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LICENSE Tue Jul 27 05:42:30 2021 +0000 @@ -0,0 +1,202 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/README.md Tue Jul 27 05:42:30 2021 +0000 @@ -0,0 +1,187 @@ +![](./resources/official_armmbed_example_badge.png) +# Cellular Example + +This is an example based on `mbed-os` cellular APIs that demonstrates a TCP or UDP echo transaction with a public echo server. + +(Note: To see this example in a rendered form you can import into the Arm Mbed Online Compiler, please see +[the documentation](https://os.mbed.com/docs/mbed-os/latest/apis/cellular-api.html#cellular-example-connection-establishment).) + +## Getting started + +This particular cellular application uses a cellular network and network-socket APIs that are part of [`mbed-os`](https://github.com/ARMmbed/mbed-os). + +The program uses a [cellular modem driver](https://github.com/ARMmbed/mbed-os/tree/master/connectivity/cellular/include/cellular/framework/API) +using an external IP stack standard 3GPP AT 27.007 AT commands to setup the cellular modem and registers to the network. + +After registration, the driver opens a point-to-point protocol (PPP) pipe with the cellular modem and connects +to internet. This driver currently supports UART data connection type only between your cellular modem and MCU. + +For more information on Arm Mbed OS cellular APIs and porting guide, please visit the +[Mbed OS cellular API](https://os.mbed.com/docs/mbed-os/latest/apis/cellular-networking.html) and +[Mbed OS cellular porting guide](https://os.mbed.com/docs/mbed-os/latest/porting/cellular-device-porting.html). + +### Board support + +Currently supported boards with onboard modem chips can be found under Mbed OS +[/targets folder](https://github.com/ARMmbed/mbed-os/tree/master/targets). +You can find all cellular specific onboard modems by searching an overridden function +`CellularDevice::get_target_default_instance()`. + +Currently supported modem drivers can be found under cellular +[/drivers folder](https://github.com/ARMmbed/mbed-os/tree/master/connectivity/drivers/cellular). + +For a cellular shield, you need to define which shield to use with `provide-default`, and also how the shield is connected +to the Mbed OS board. For example, a generic AT/PPP modem would add from the `GENERIC_AT3GPP/mbed_lib.json` file to your +`mbed_app.json`: + +``` + "target_overrides": { + "GENERIC_AT3GPP.provide-default": true, + "GENERIC_AT3GPP.tx": "<tx-pinmap>", + "GENERIC_AT3GPP.rx": "<rx-pinmap>" + } +``` + +## Building and flashing the example + +### To build the example + +Clone the repository containing example: + +``` +git clone https://github.com/ARMmbed/mbed-os-example-cellular.git +``` + +**Tip:** If you don't have git installed, you can +[download a zip file](https://github.com/ARMmbed/mbed-os-example-cellular/archive/master.zip) of the repository. + +Update the source tree: + +``` +cd mbed-os-example-cellular +mbed deploy +``` + +Run the build: + +```mbed compile -t <ARM | GCC_ARM> -m <YOUR_TARGET>``` + +### To flash the example onto your board + +Connect your mbed board to your computer over USB. It appears as removable storage. + +When you run the `mbed compile` command above, mbed cli creates a .bin or a .hex file (depending on your target) in +```BUILD/<target-name>/<toolchain>``` under the example's directory. Drag and drop the file to the removable storage. + +Alternatively you may launch compilation with `-f` flag to have mbed tools attempt to flash your board. +The tools will flash the binary to all targets that match the board specified by '-m' parameter. + +### Change the network and SIM credentials + +See the file `mbed_app.json` in the root directory of your application. This file contains all the user specific +configurations your application needs. Provide the pin code for your SIM card, as well as any other cellular settings, +or `null` if not used. For example: + +```json + "target_overrides": { + "*": { + "nsapi.default-cellular-sim-pin": "\"1234\"", +``` + +### Selecting socket type (TCP, UDP or NONIP) + +You can choose which socket type the application should use; however, please note that TCP is a more reliable +transmission protocol. For example: + +```json + + "sock-type": "TCP", + +``` + +### Turning modem AT echo trace on + +If you like details and wish to know about all the AT interactions between the modem and your driver, turn on the modem +AT echo trace: + +```json + "cellular.debug-at": true +``` + +### Turning on the tracing and trace level + +If you like to add more traces or follow the current ones you can turn traces on by changing `mbed-trace.enable` in +mbed_app.json: + +```"target_overrides": { + "*": { + "mbed-trace.enable": true, +``` + +After you have defined `mbed-trace.enable: true`, you can set trace levels by changing value in `trace-level`: + + ```"trace-level": { + "help": "Options are TRACE_LEVEL_ERROR,TRACE_LEVEL_WARN,TRACE_LEVEL_INFO,TRACE_LEVEL_DEBUG", + "macro_name": "MBED_TRACE_MAX_LEVEL", + "value": "TRACE_LEVEL_INFO" + } +``` + +## Running the example + +When example application is running information about activity is printed over the serial connection. + +**Note:** The default serial baudrate has been set to 9600. + +Please have a client open and connected to the board. You may use: + +- [Tera Term](https://ttssh2.osdn.jp/index.html.en) for windows + +- screen or minicom for Linux (example usage: `screen /dev/serial/<your board> 9600`) + +- mbed tools has a terminal command `mbed term -b 9600` + +### Expected output + +You should see an output similar to this: + +``` +mbed-os-example-cellular +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 +``` + +### Troubleshooting + +* Make sure the fields `nsapi.default-cellular-sim-pin`, `nsapi.default-cellular-plmn`, `nsapi.default-cellular-apn`, + `nsapi.default-cellular-username` and `nsapi.default-cellular-password` from the `mbed_app.json` file are filled in + correctly. The correct values should appear in the user manual of the board if using eSIM or in the details of the + SIM card if using normal SIM. +* Enable trace flag to have access to debug information `"mbed-trace.enable": true` and `"cellular.debug-at": true`. +* Error Message: Assertion failed: iface usually means that a default modem is not defined, e.g. + `"GENERIC_AT3GPP.provide-default": true` +* If the modem does not respond to (AT) queries, check that UART pins (tx, rx, rts, cts) are connected and defined, + e.g. `"GENERIC_AT3GPP.tx": "<tx-pinmap>"`, ... +* It is a common case that a modem seems to connect fine with just USB power, but actually it needs to have an external + power supply for a data connection. +* Try both `TCP` and `UDP` socket types. +* Try both `"lwip.ppp-enabled": true` and `"lwip.ppp-enabled": false`. +* The modem may support only a fixed baud-rate, such as `"platform.default-serial-baud-rate": 9600`. +* The modem and network may only support IPv6 in which case `"lwip.ipv6-enabled": true` shall be defined. +* The SIM and modem must have compatible cellular technology (3G, 4G, NB-IoT, ...) supported and cellular network available. +* Enable CIoT optimization for NONIP socket `control-plane-opt: true`. + +If you have problems to get started with debugging, you can review the +[documentation](https://os.mbed.com/docs/latest/tutorials/debugging.html) for suggestions on what could be wrong and how to fix it. + +## License and contributions + +The software is provided under Apache-2.0 license. Contributions to this project are accepted under the same license. +Please see [contributing.md](CONTRIBUTING.md) for more info. + +This project contains code from other projects. The original license text is included in those source files. +They must comply with our license guide
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/include/cellular_demo_tracing.h Tue Jul 27 05:42:30 2021 +0000 @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2017 ARM Limited. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "mbed.h" +#include "CellularLog.h" + +#ifndef CELLULAR_DEMO_TRACING_H_ +#define CELLULAR_DEMO_TRACING_H_ + +#if MBED_CONF_MBED_TRACE_ENABLE +static PlatformMutex trace_mutex; + +static void trace_wait() +{ + trace_mutex.lock(); +} + +static void trace_release() +{ + trace_mutex.unlock(); +} + +static char* trace_time(size_t ss) +{ + static char time_st[50]; + auto ms = std::chrono::time_point_cast<std::chrono::milliseconds>(Kernel::Clock::now()).time_since_epoch().count(); + snprintf(time_st, 49, "[%08llums]", ms); + return time_st; +} + +static void trace_open() +{ + mbed_trace_init(); + mbed_trace_prefix_function_set( &trace_time ); + + mbed_trace_mutex_wait_function_set(trace_wait); + mbed_trace_mutex_release_function_set(trace_release); + + mbed_cellular_trace::mutex_wait_function_set(trace_wait); + mbed_cellular_trace::mutex_release_function_set(trace_release); + +#ifdef MBED_CONF_NSAPI_DEFAULT_CELLULAR_PLMN + printf("\n\n[MAIN], plmn: %s\n", (MBED_CONF_NSAPI_DEFAULT_CELLULAR_PLMN ? MBED_CONF_NSAPI_DEFAULT_CELLULAR_PLMN : "NULL")); +#endif +} + +static void trace_close() +{ + mbed_cellular_trace::mutex_wait_function_set(NULL); + mbed_cellular_trace::mutex_release_function_set(NULL); + + mbed_trace_free(); +} +#else +static void trace_open() +{ +} + +static void trace_close() +{ +} +#endif // #if MBED_CONF_MBED_TRACE_ENABLE + +#endif // CELLULAR_DEMO_TRACING_H_
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed-os.lib Tue Jul 27 05:42:30 2021 +0000 @@ -0,0 +1,1 @@ +https://github.com/ARMmbed/mbed-os/#d147abc3e556c58e5e343d34b729bc2192e18bd3
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed_app.json Tue Jul 27 05:42:30 2021 +0000 @@ -0,0 +1,59 @@ +{ + "config": { + "sock-type": "TCP", + "echo-server-hostname": { + "help": "Echo server host name.", + "value": "\"echo.mbedcloudtesting.com\"" + }, + "echo-server-port": { + "help": "Echo server port number.", + "value": 7 + }, + "trace-level": { + "help": "Options are TRACE_LEVEL_ERROR,TRACE_LEVEL_WARN,TRACE_LEVEL_INFO,TRACE_LEVEL_DEBUG", + "macro_name": "MBED_TRACE_MAX_LEVEL", + "value": "TRACE_LEVEL_INFO" + } + }, + "target_overrides": { + "*": { + "target.network-default-interface-type": "CELLULAR", + "mbed-trace.enable": false, + "lwip.ipv4-enabled": true, + "ppp.ipv4-enabled": true, + "lwip.ipv6-enabled": true, + "ppp.ipv6-enabled": true, + "lwip.ethernet-enabled": false, + "lwip.ppp-enabled": true, + "lwip.tcp-enabled": true, + "platform.stdio-convert-newlines": true, + "platform.stdio-baud-rate": 115200, + "platform.default-serial-baud-rate": 115200, + "platform.stdio-buffered-serial": true, + "cellular.debug-at": false, + "cellular.use-apn-lookup": true, + "nsapi.default-cellular-sim-pin": "\"1234\"", + "nsapi.default-cellular-plmn": null, + "nsapi.default-cellular-apn": "\"internet.lte.cxn\"", + "nsapi.default-cellular-username": null, + "nsapi.default-cellular-password": null + }, + "DISCO_L496AG": { + "target.macros_add": [ + "CELLULAR_DEVICE=STModCellular" + ], + "target.components_add": ["STMOD_CELLULAR"], + "stmod_cellular.provide-default": "true" + }, + "DISCO_L475VG_IOT01A": { + "target.macros_add": [ + "CELLULAR_DEVICE=ALT1250_PPP" + ], + "target.components_add": ["QSPIF"], + "ALT1250_PPP.tx": "D1", + "ALT1250_PPP.rx": "D0", + "ALT1250_PPP.provide-default": true + } + } +} +
Binary file resources/official_armmbed_example_badge.png has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/source/main.cpp Tue Jul 27 05:42:30 2021 +0000 @@ -0,0 +1,252 @@ +/* + * Copyright (c) 2017 ARM Limited. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "mbed.h" +#include "CellularNonIPSocket.h" +#include "UDPSocket.h" +#include "TCPSocket.h" +#include "cellular_demo_tracing.h" + +/* configuration choices in mbed_app.json */ +#define UDP 0 +#define TCP 1 +#define NONIP 2 + +#if MBED_CONF_APP_SOCK_TYPE == TCP +static constexpr char SOCKET_TYPE[] = "TCP"; +#elif MBED_CONF_APP_SOCK_TYPE == UDP +static constexpr char SOCKET_TYPE[] = "UDP"; +#elif MBED_CONF_APP_SOCK_TYPE == NONIP +static constexpr char SOCKET_TYPE[] = "CellularNonIP"; +#endif +static const char ECHO_HOSTNAME[] = MBED_CONF_APP_ECHO_SERVER_HOSTNAME; + + +class CellularDemo { + static constexpr uint8_t RETRY_COUNT = 3; + +public: + CellularDemo(NetworkInterface &network) + : _net(network) + { } + + ~CellularDemo() { } + + /** Run the cellular demo. */ + void run() + { + /* sim pin, apn, credentials and possible plmn are taken automatically from json + * when using NetworkInterface::set_default_parameters() */ + _net.set_default_parameters(); + + nsapi_size_or_error_t ret = NSAPI_ERROR_NO_CONNECTION; + + if (connect_cellular()) { + /* ping echo server */ + if (!test_send_and_receive()) { + printf("Sending and received data failed.\n"); + } + + ret = _net.disconnect(); + + if (ret != NSAPI_ERROR_OK) { + printf("Disconnect failed (error: %d).\n", ret); + } + } + + if (ret == NSAPI_ERROR_OK) { + printf("Success. Exiting\n"); + } else { + printf("Failure. Exiting\n"); + } + } + +private: + /** + * For UDP or TCP it opens a socket with the given echo server and performs an echo transaction. + * For Cellular Non-IP it opens a socket for which the data delivery path is decided + * by network's control plane CIoT optimisation setup, for the given APN. + */ + bool test_send_and_receive() + { + nsapi_size_or_error_t ret; + + ret = _socket.open(&_net); + + if (ret != NSAPI_ERROR_OK) { + printf("%sSocket.open() fails, code: %d\n", SOCKET_TYPE, ret); + return false; + } + + _socket.set_timeout(15000); + + if (!resolve_hostname()) { + return false; + } + + if (!connect_socket()) { + return false; + } + + ret = send_test_data(); + + if (ret < 0) { + printf("%sSocket.send() fails, code: %d\n", SOCKET_TYPE, ret); + return false; + } else { + printf("%s: Sent %d Bytes to %s\n", SOCKET_TYPE, ret, ECHO_HOSTNAME); + } + + ret = receive_test_data(); + + if (ret < 0) { + printf("%sSocket.recv() fails, code: %d\n", SOCKET_TYPE, ret); + return false; + } else { + printf("Received from echo server %d Bytes\n", ret); + } + + ret = _socket.close(); + + if (ret != NSAPI_ERROR_OK) { + printf("%sSocket.close() fails, code: %d\n", SOCKET_TYPE, ret); + return false; + } + + return true; + } + + /** Connects to the Cellular Network */ + bool connect_cellular() + { + printf("Establishing connection\n"); + + /* check if we're already connected */ + if (_net.get_connection_status() == NSAPI_STATUS_GLOBAL_UP) { + return true; + } + + nsapi_error_t ret; + + for (uint8_t retry = 0; retry <= RETRY_COUNT; retry++) { + ret = _net.connect(); + + if (ret == NSAPI_ERROR_OK) { + printf("Connection Established.\n"); + return true; + } else if (ret == NSAPI_ERROR_AUTH_FAILURE) { + printf("Authentication Failure.\n"); + return false; + } else { + printf("Couldn't connect: %d, will retry\n", ret); + } + } + + printf("Fatal connection failure: %d\n", ret); + + return false; + } + + /** Connects to the Cellular Network */ + bool resolve_hostname() + { +#if MBED_CONF_APP_SOCK_TYPE != NONIP + nsapi_error_t ret = _net.gethostbyname(ECHO_HOSTNAME, &_socket_address); + + if (ret != NSAPI_ERROR_OK) { + printf("Couldn't resolve remote host: %s, code: %d\n", ECHO_HOSTNAME, ret); + return false; + } + + _socket_address.set_port(MBED_CONF_APP_ECHO_SERVER_PORT); +#endif + return true; + } + + bool connect_socket() + { +#if MBED_CONF_APP_SOCK_TYPE == TCP + nsapi_error_t ret = _socket.connect(_socket_address); + if (ret < 0) { + printf("TCPSocket.connect() fails, code: %d\n", ret); + return false; + } else { + printf("TCP: connected with %s server\n", ECHO_HOSTNAME); + } +#endif + return true; + } + + nsapi_error_t send_test_data() + { + const char *echo_string = "Hello CodeZoo!!!"; +#if MBED_CONF_APP_SOCK_TYPE == UDP + return _socket.sendto(_socket_address, (void*)echo_string, strlen(echo_string)); +#else + return _socket.send((void*)echo_string, strlen(echo_string)); +#endif + } + + nsapi_error_t receive_test_data() + { + int len=0; + char receive_buffer[18]={0}; +#if MBED_CONF_APP_SOCK_TYPE == UDP + len = _socket.recvfrom(&_socket_address, (void*)receive_buffer, sizeof(receive_buffer)); + printf("recvfrom : %s \n",receive_buffer); +#else + len = _socket.recv((void*)receive_buffer, sizeof(receive_buffer)); + printf("recv : %s \n",receive_buffer); +#endif + return len; + } + +private: + NetworkInterface &_net; + +#if MBED_CONF_APP_SOCK_TYPE == TCP + TCPSocket _socket; + SocketAddress _socket_address; +#elif MBED_CONF_APP_SOCK_TYPE == UDP + UDPSocket _socket; + SocketAddress _socket_address; +#elif MBED_CONF_APP_SOCK_TYPE == NONIP + CellularNonIPSocket _socket; +#endif +}; + +int main() { + printf("\nmbed-os-example-cellular\n"); + + trace_open(); + +#if MBED_CONF_APP_SOCK_TYPE == NONIP + NetworkInterface *net = CellularContext::get_default_nonip_instance(); +#else + NetworkInterface *net = CellularContext::get_default_instance(); +#endif + + if (net) { + CellularDemo example(*net); + example.run(); + } else { + printf("Failed to get_default_instance()\n"); + } + + trace_close(); + + return 0; +}