Generic Pelion Device Management example for various Advantech modules.

This example is known to work great on the following platforms:

Example Functionality

This example showcases the following device functionality:

  • On timer button increment, simulate Pelion LWM2M button resource change

Use this example with Mbed CLI

1. Import the application into your desktop:

mbed import https://os.mbed.com/teams/Advantech/code/pelion-example-common
cd pelion-example-common

2. Download your developer certificate from pelion portal

3. Compile the program

mbed compile -t <toolchain> -m <TARGET_BOARD>

(supported toolchains : GCC_ARM / ARM / IAR)

4. Copy the binary file pelion-example-common.bin to your mbed device.

Committer:
chuanga
Date:
Tue Mar 12 13:48:39 2019 +0800
Revision:
0:43ff9e3bc244
copying sources from github repository

Who changed what in which revision?

UserRevisionLine numberNew contents of line
chuanga 0:43ff9e3bc244 1 /* ESP32 implementation of NetworkInterfaceAPI
chuanga 0:43ff9e3bc244 2 * Copyright (c) 2017 Renesas Electronics Corporation
chuanga 0:43ff9e3bc244 3 *
chuanga 0:43ff9e3bc244 4 * Licensed under the Apache License, Version 2.0 (the "License");
chuanga 0:43ff9e3bc244 5 * you may not use this file except in compliance with the License.
chuanga 0:43ff9e3bc244 6 * You may obtain a copy of the License at
chuanga 0:43ff9e3bc244 7 *
chuanga 0:43ff9e3bc244 8 * http://www.apache.org/licenses/LICENSE-2.0
chuanga 0:43ff9e3bc244 9 *
chuanga 0:43ff9e3bc244 10 * Unless required by applicable law or agreed to in writing, software
chuanga 0:43ff9e3bc244 11 * distributed under the License is distributed on an "AS IS" BASIS,
chuanga 0:43ff9e3bc244 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
chuanga 0:43ff9e3bc244 13 * See the License for the specific language governing permissions and
chuanga 0:43ff9e3bc244 14 * limitations under the License.
chuanga 0:43ff9e3bc244 15 */
chuanga 0:43ff9e3bc244 16
chuanga 0:43ff9e3bc244 17 #include <string.h>
chuanga 0:43ff9e3bc244 18 #include "ESP32InterfaceAP.h"
chuanga 0:43ff9e3bc244 19
chuanga 0:43ff9e3bc244 20 // ESP32InterfaceAP implementation
chuanga 0:43ff9e3bc244 21 ESP32InterfaceAP::ESP32InterfaceAP(PinName en, PinName io0, PinName tx, PinName rx, bool debug,
chuanga 0:43ff9e3bc244 22 PinName rts, PinName cts, int baudrate) :
chuanga 0:43ff9e3bc244 23 ESP32Stack(en, io0, tx, rx, debug, rts, cts, baudrate),
chuanga 0:43ff9e3bc244 24 _dhcp(true),
chuanga 0:43ff9e3bc244 25 _own_ch(1),
chuanga 0:43ff9e3bc244 26 _own_ssid(),
chuanga 0:43ff9e3bc244 27 _own_pass(),
chuanga 0:43ff9e3bc244 28 _own_sec(NSAPI_SECURITY_NONE),
chuanga 0:43ff9e3bc244 29 _ip_address(),
chuanga 0:43ff9e3bc244 30 _netmask(),
chuanga 0:43ff9e3bc244 31 _gateway(),
chuanga 0:43ff9e3bc244 32 _connection_status(NSAPI_STATUS_DISCONNECTED),
chuanga 0:43ff9e3bc244 33 _connection_status_cb(NULL)
chuanga 0:43ff9e3bc244 34 {
chuanga 0:43ff9e3bc244 35 }
chuanga 0:43ff9e3bc244 36
chuanga 0:43ff9e3bc244 37 ESP32InterfaceAP::ESP32InterfaceAP(PinName tx, PinName rx, bool debug) :
chuanga 0:43ff9e3bc244 38 ESP32Stack(NC, NC, tx, rx, debug, NC, NC, 230400),
chuanga 0:43ff9e3bc244 39 _dhcp(true),
chuanga 0:43ff9e3bc244 40 _own_ch(1),
chuanga 0:43ff9e3bc244 41 _own_ssid(),
chuanga 0:43ff9e3bc244 42 _own_pass(),
chuanga 0:43ff9e3bc244 43 _own_sec(NSAPI_SECURITY_NONE),
chuanga 0:43ff9e3bc244 44 _ip_address(),
chuanga 0:43ff9e3bc244 45 _netmask(),
chuanga 0:43ff9e3bc244 46 _gateway(),
chuanga 0:43ff9e3bc244 47 _connection_status(NSAPI_STATUS_DISCONNECTED),
chuanga 0:43ff9e3bc244 48 _connection_status_cb(NULL)
chuanga 0:43ff9e3bc244 49 {
chuanga 0:43ff9e3bc244 50 }
chuanga 0:43ff9e3bc244 51
chuanga 0:43ff9e3bc244 52 nsapi_error_t ESP32InterfaceAP::set_network(const char *ip_address, const char *netmask, const char *gateway)
chuanga 0:43ff9e3bc244 53 {
chuanga 0:43ff9e3bc244 54 _dhcp = false;
chuanga 0:43ff9e3bc244 55
chuanga 0:43ff9e3bc244 56 strncpy(_ip_address, ip_address ? ip_address : "", sizeof(_ip_address));
chuanga 0:43ff9e3bc244 57 _ip_address[sizeof(_ip_address) - 1] = '\0';
chuanga 0:43ff9e3bc244 58 strncpy(_netmask, netmask ? netmask : "", sizeof(_netmask));
chuanga 0:43ff9e3bc244 59 _netmask[sizeof(_netmask) - 1] = '\0';
chuanga 0:43ff9e3bc244 60 strncpy(_gateway, gateway ? gateway : "", sizeof(_gateway));
chuanga 0:43ff9e3bc244 61 _gateway[sizeof(_gateway) - 1] = '\0';
chuanga 0:43ff9e3bc244 62
chuanga 0:43ff9e3bc244 63 return NSAPI_ERROR_OK;
chuanga 0:43ff9e3bc244 64 }
chuanga 0:43ff9e3bc244 65
chuanga 0:43ff9e3bc244 66 nsapi_error_t ESP32InterfaceAP::set_dhcp(bool dhcp)
chuanga 0:43ff9e3bc244 67 {
chuanga 0:43ff9e3bc244 68 _dhcp = dhcp;
chuanga 0:43ff9e3bc244 69
chuanga 0:43ff9e3bc244 70 return NSAPI_ERROR_OK;
chuanga 0:43ff9e3bc244 71 }
chuanga 0:43ff9e3bc244 72
chuanga 0:43ff9e3bc244 73 int ESP32InterfaceAP::connect(const char *ssid, const char *pass, nsapi_security_t security,
chuanga 0:43ff9e3bc244 74 uint8_t channel)
chuanga 0:43ff9e3bc244 75 {
chuanga 0:43ff9e3bc244 76 int ret;
chuanga 0:43ff9e3bc244 77
chuanga 0:43ff9e3bc244 78 ret = set_credentials(ssid, pass, security);
chuanga 0:43ff9e3bc244 79 if (ret != 0) {
chuanga 0:43ff9e3bc244 80 return ret;
chuanga 0:43ff9e3bc244 81 }
chuanga 0:43ff9e3bc244 82
chuanga 0:43ff9e3bc244 83 ret = set_channel(channel);
chuanga 0:43ff9e3bc244 84 if (ret != 0) {
chuanga 0:43ff9e3bc244 85 return ret;
chuanga 0:43ff9e3bc244 86 }
chuanga 0:43ff9e3bc244 87
chuanga 0:43ff9e3bc244 88 return connect();
chuanga 0:43ff9e3bc244 89 }
chuanga 0:43ff9e3bc244 90
chuanga 0:43ff9e3bc244 91 int ESP32InterfaceAP::connect()
chuanga 0:43ff9e3bc244 92 {
chuanga 0:43ff9e3bc244 93 if (!_esp->set_mode(ESP32::WIFIMODE_STATION_SOFTAP)) {
chuanga 0:43ff9e3bc244 94 return NSAPI_ERROR_DEVICE_ERROR;
chuanga 0:43ff9e3bc244 95 }
chuanga 0:43ff9e3bc244 96
chuanga 0:43ff9e3bc244 97 if (!_esp->dhcp(_dhcp, 1)) {
chuanga 0:43ff9e3bc244 98 return NSAPI_ERROR_DHCP_FAILURE;
chuanga 0:43ff9e3bc244 99 }
chuanga 0:43ff9e3bc244 100
chuanga 0:43ff9e3bc244 101 if (!_dhcp) {
chuanga 0:43ff9e3bc244 102 if (!_esp->set_network_ap(_ip_address, _netmask, _gateway)) {
chuanga 0:43ff9e3bc244 103 return NSAPI_ERROR_DEVICE_ERROR;
chuanga 0:43ff9e3bc244 104 }
chuanga 0:43ff9e3bc244 105 }
chuanga 0:43ff9e3bc244 106
chuanga 0:43ff9e3bc244 107 if (!_esp->config_soft_ap(_own_ssid, _own_pass, _own_ch, (uint8_t)_own_sec)) {
chuanga 0:43ff9e3bc244 108 return NSAPI_ERROR_DEVICE_ERROR;
chuanga 0:43ff9e3bc244 109 }
chuanga 0:43ff9e3bc244 110
chuanga 0:43ff9e3bc244 111 _connection_status = NSAPI_STATUS_GLOBAL_UP;
chuanga 0:43ff9e3bc244 112 if (_connection_status_cb) {
chuanga 0:43ff9e3bc244 113 _connection_status_cb(NSAPI_EVENT_CONNECTION_STATUS_CHANGE, _connection_status);
chuanga 0:43ff9e3bc244 114 }
chuanga 0:43ff9e3bc244 115
chuanga 0:43ff9e3bc244 116 return NSAPI_ERROR_OK;
chuanga 0:43ff9e3bc244 117 }
chuanga 0:43ff9e3bc244 118
chuanga 0:43ff9e3bc244 119 int ESP32InterfaceAP::set_credentials(const char *ssid, const char *pass, nsapi_security_t security)
chuanga 0:43ff9e3bc244 120 {
chuanga 0:43ff9e3bc244 121 switch (security) {
chuanga 0:43ff9e3bc244 122 case NSAPI_SECURITY_NONE:
chuanga 0:43ff9e3bc244 123 case NSAPI_SECURITY_WPA:
chuanga 0:43ff9e3bc244 124 case NSAPI_SECURITY_WPA2:
chuanga 0:43ff9e3bc244 125 case NSAPI_SECURITY_WPA_WPA2:
chuanga 0:43ff9e3bc244 126 _own_sec = security;
chuanga 0:43ff9e3bc244 127 break;
chuanga 0:43ff9e3bc244 128 case NSAPI_SECURITY_UNKNOWN:
chuanga 0:43ff9e3bc244 129 case NSAPI_SECURITY_WEP:
chuanga 0:43ff9e3bc244 130 default:
chuanga 0:43ff9e3bc244 131 return NSAPI_ERROR_UNSUPPORTED;
chuanga 0:43ff9e3bc244 132 }
chuanga 0:43ff9e3bc244 133
chuanga 0:43ff9e3bc244 134 memset(_own_ssid, 0, sizeof(_own_ssid));
chuanga 0:43ff9e3bc244 135 strncpy(_own_ssid, ssid, sizeof(_own_ssid));
chuanga 0:43ff9e3bc244 136
chuanga 0:43ff9e3bc244 137 memset(_own_pass, 0, sizeof(_own_pass));
chuanga 0:43ff9e3bc244 138 strncpy(_own_pass, pass, sizeof(_own_pass));
chuanga 0:43ff9e3bc244 139
chuanga 0:43ff9e3bc244 140 return 0;
chuanga 0:43ff9e3bc244 141 }
chuanga 0:43ff9e3bc244 142
chuanga 0:43ff9e3bc244 143 int ESP32InterfaceAP::set_channel(uint8_t channel)
chuanga 0:43ff9e3bc244 144 {
chuanga 0:43ff9e3bc244 145 if (channel != 0) {
chuanga 0:43ff9e3bc244 146 _own_ch = channel;
chuanga 0:43ff9e3bc244 147 }
chuanga 0:43ff9e3bc244 148
chuanga 0:43ff9e3bc244 149 return 0;
chuanga 0:43ff9e3bc244 150 }
chuanga 0:43ff9e3bc244 151
chuanga 0:43ff9e3bc244 152 int ESP32InterfaceAP::disconnect()
chuanga 0:43ff9e3bc244 153 {
chuanga 0:43ff9e3bc244 154 if (!_esp->set_mode(ESP32::WIFIMODE_STATION)) {
chuanga 0:43ff9e3bc244 155 return NSAPI_ERROR_DEVICE_ERROR;
chuanga 0:43ff9e3bc244 156 }
chuanga 0:43ff9e3bc244 157
chuanga 0:43ff9e3bc244 158 _connection_status = NSAPI_STATUS_DISCONNECTED;
chuanga 0:43ff9e3bc244 159 if (_connection_status_cb) {
chuanga 0:43ff9e3bc244 160 _connection_status_cb(NSAPI_EVENT_CONNECTION_STATUS_CHANGE, _connection_status);
chuanga 0:43ff9e3bc244 161 }
chuanga 0:43ff9e3bc244 162
chuanga 0:43ff9e3bc244 163 return NSAPI_ERROR_OK;
chuanga 0:43ff9e3bc244 164 }
chuanga 0:43ff9e3bc244 165
chuanga 0:43ff9e3bc244 166 const char *ESP32InterfaceAP::get_ip_address()
chuanga 0:43ff9e3bc244 167 {
chuanga 0:43ff9e3bc244 168 return _esp->getIPAddress_ap();
chuanga 0:43ff9e3bc244 169 }
chuanga 0:43ff9e3bc244 170
chuanga 0:43ff9e3bc244 171 const char *ESP32InterfaceAP::get_mac_address()
chuanga 0:43ff9e3bc244 172 {
chuanga 0:43ff9e3bc244 173 return _esp->getMACAddress_ap();
chuanga 0:43ff9e3bc244 174 }
chuanga 0:43ff9e3bc244 175
chuanga 0:43ff9e3bc244 176 const char *ESP32InterfaceAP::get_gateway()
chuanga 0:43ff9e3bc244 177 {
chuanga 0:43ff9e3bc244 178 return _esp->getGateway_ap();
chuanga 0:43ff9e3bc244 179 }
chuanga 0:43ff9e3bc244 180
chuanga 0:43ff9e3bc244 181 const char *ESP32InterfaceAP::get_netmask()
chuanga 0:43ff9e3bc244 182 {
chuanga 0:43ff9e3bc244 183 return _esp->getNetmask_ap();
chuanga 0:43ff9e3bc244 184 }
chuanga 0:43ff9e3bc244 185
chuanga 0:43ff9e3bc244 186 int8_t ESP32InterfaceAP::get_rssi()
chuanga 0:43ff9e3bc244 187 {
chuanga 0:43ff9e3bc244 188 return 0;
chuanga 0:43ff9e3bc244 189 }
chuanga 0:43ff9e3bc244 190
chuanga 0:43ff9e3bc244 191 int ESP32InterfaceAP::scan(WiFiAccessPoint *res, unsigned count)
chuanga 0:43ff9e3bc244 192 {
chuanga 0:43ff9e3bc244 193 return _esp->scan(res, count);
chuanga 0:43ff9e3bc244 194 }
chuanga 0:43ff9e3bc244 195
chuanga 0:43ff9e3bc244 196 void ESP32InterfaceAP::attach(mbed::Callback<void(nsapi_event_t, intptr_t)> status_cb)
chuanga 0:43ff9e3bc244 197 {
chuanga 0:43ff9e3bc244 198 _connection_status_cb = status_cb;
chuanga 0:43ff9e3bc244 199 }
chuanga 0:43ff9e3bc244 200
chuanga 0:43ff9e3bc244 201 nsapi_connection_status_t ESP32InterfaceAP::get_connection_status() const
chuanga 0:43ff9e3bc244 202 {
chuanga 0:43ff9e3bc244 203 return _connection_status;
chuanga 0:43ff9e3bc244 204 }
chuanga 0:43ff9e3bc244 205