Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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 @@
+
+# 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;
+}