Mbed Client sample for GR-LYCHEE where ZXing is incorporated.
Dependencies: DisplayApp AsciiFont
Fork of GR-PEACH_mbed-os-client-ZXingSample by
Overview
This sample program shows how to use mbed Client together with ZXing which is an open-source, multi-format 1D/2D barcode image processing library. For more info on ZXing, please refer to https://github.com/zxing/zxing.
Required hardware
- GR-LYCHEE ( https://developer.mbed.org/platforms/Renesas-GR-LYCHEE/ )
Application setup
- Select the connection type. For details, please refer to the following wiki:
https://os.mbed.com/users/1050186/code/GR-LYCHEE_mbed-os-client-ZXingSample/wiki/Connection-type. - Set the client credentials. For details, please refer to the following wiki:
https://os.mbed.com/users/1050186/code/GR-LYCHEE_mbed-os-client-ZXingSample/wiki/Client-credentials. - Change Wifi settings. For details, please refer to the following wiki:
https://os.mbed.com/users/1050186/code/GR-LYCHEE_mbed-os-client-ZXingSample/wiki/Wifi-settings.
Building the example
To build this example:
- Import this example onto mbed Compiler.
- Configure the example in accordance with Application setup.
- Compile the example on mbed Compiler and download the resultant binary file.
- Plug the micro-USB cable into the OpenSDA port which lies on the next to the RESET button.
- Copy the binary previously downloaded to your PC to GR-LYCHEE to flash this example. When the copy is successfully completed, the board is ready to work.
- Press the RESET button on the board to run the example.
- For verification, please refer to the following wiki:
https://os.mbed.com/users/1050186/code/GR-LYCHEE_mbed-os-client-ZXingSample/wiki/Monitoring-the-application.
Application resources
This example exposes four resources listed below:
- 3202/0/5700. Decode result of barcode data input from camera (GET).
- 3201/0/5850. Blink function, blinks LED when executed (POST).
- 3201/0/5853. Blink pattern, used by the blink function to determine how to blink. In the format of 1000:500:1000:500:1000:500 (PUT).
- 3201/0/5855. Blink color, used by the blink function. Any of green, yellow, orange and red is acceptable (PUT).
Revision 12:7a199eff6988, committed 2018-12-10
- Comitter:
- 1050186
- Date:
- Mon Dec 10 11:04:55 2018 +0000
- Parent:
- 11:0cc5cbffdd1f
- Child:
- 13:9e1dc33ec84b
- Commit message:
- Update the related mbed-os-client library, and Replace Renesas libs to mbed-gr-libs.
Changed in this revision
--- a/DisplayApp.lib Mon Dec 10 10:52:35 2018 +0000 +++ b/DisplayApp.lib Mon Dec 10 11:04:55 2018 +0000 @@ -1,1 +1,1 @@ -https://developer.mbed.org/users/dkato/code/DisplayApp/#3c46efbe6d21 +https://developer.mbed.org/users/dkato/code/DisplayApp/#6c04d9d15395
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/configs/cellular_c030_u201.json Mon Dec 10 11:04:55 2018 +0000
@@ -0,0 +1,23 @@
+{
+ "config": {
+ "network-interface":{
+ "help": "Options are ETHERNET, WIFI_ESP8266, WIFI_ODIN, WIFI_RTW, MESH_LOWPAN_ND, MESH_THREAD, CELLULAR_ONBOARD",
+ "value": "CELLULAR_ONBOARD"
+ },
+ },
+ "macros": ["MBEDTLS_USER_CONFIG_FILE=\"mbedtls_mbed_client_config.h\""],
+ "target_overrides": {
+ "*": {
+ "target.features_add": ["LWIP", "COMMON_PAL"],
+ "platform.stdio-baud-rate": 115200,
+ "platform.stdio-convert-newlines":true,
+ "lwip.ipv4-enabled": true,
+ "lwip.ipv6-enabled": false,
+ "mbed-trace.enable": 0
+ },
+ "UBLOX_C030_U201": {
+ "lwip.ppp-enabled": true,
+ "ppp-cell-iface.apn-lookup": true
+ }
+ }
+}
--- a/configs/eth-wifi-mbedignore Mon Dec 10 10:52:35 2018 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,3 +0,0 @@ -easy-connect/atmel-rf-driver/* -easy-connect/mcr20a-rf-driver/* -easy-connect/stm-spirit1-rf-driver/*
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/configs/eth_odin_v4.json Mon Dec 10 11:04:55 2018 +0000
@@ -0,0 +1,22 @@
+{
+ "config": {
+ "network-interface":{
+ "help": "Options are ETHERNET, WIFI_ESP8266, WIFI_ODIN, MESH_LOWPAN_ND, MESH_THREAD",
+ "value": "ETHERNET"
+ }
+ },
+ "macros": ["MBEDTLS_USER_CONFIG_FILE=\"mbedtls_mbed_client_config.h\""],
+ "target_overrides": {
+ "*": {
+ "target.features_add": ["LWIP", "COMMON_PAL"],
+ "platform.stdio-baud-rate": 115200,
+ "platform.stdio-convert-newlines": true,
+ "lwip.ipv4-enabled": true,
+ "lwip.ipv6-enabled": false,
+ "mbed-trace.enable": 0
+ },
+ "UBLOX_EVK_ODIN_W2": {
+ "target.network-default-interface-type": "ETHERNET"
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/configs/eth_odin_v6.json Mon Dec 10 11:04:55 2018 +0000
@@ -0,0 +1,22 @@
+{
+ "config": {
+ "network-interface":{
+ "help": "Options are ETHERNET, WIFI_ESP8266, WIFI_ODIN, MESH_LOWPAN_ND, MESH_THREAD",
+ "value": "ETHERNET"
+ }
+ },
+ "macros": ["MBEDTLS_USER_CONFIG_FILE=\"mbedtls_mbed_client_config.h\""],
+ "target_overrides": {
+ "*": {
+ "target.features_add": ["LWIP", "COMMON_PAL"],
+ "platform.stdio-baud-rate": 115200,
+ "platform.stdio-convert-newlines": true,
+ "lwip.ipv4-enabled": false,
+ "lwip.ipv6-enabled": true,
+ "mbed-trace.enable": 0
+ },
+ "UBLOX_EVK_ODIN_W2": {
+ "target.network-default-interface-type": "ETHERNET"
+ }
+ }
+}
--- a/configs/eth_v4.json Mon Dec 10 10:52:35 2018 +0000
+++ b/configs/eth_v4.json Mon Dec 10 11:04:55 2018 +0000
@@ -3,6 +3,10 @@
"network-interface":{
"help": "Options are ETHERNET, WIFI_ESP8266, WIFI_ODIN, MESH_LOWPAN_ND, MESH_THREAD",
"value": "ETHERNET"
+ },
+ "button1": {
+ "help": "Use BUTTON1 from PinNames.h by default",
+ "value": "BUTTON1"
}
},
"macros": ["MBEDTLS_USER_CONFIG_FILE=\"mbedtls_mbed_client_config.h\""],
@@ -15,8 +19,8 @@
"lwip.ipv6-enabled": false,
"mbed-trace.enable": 0
},
- "UBLOX_EVK_ODIN_W2": {
- "target.device_has_remove": ["EMAC"]
+ "UBLOX_EVK_ODIN_W2": {
+ "target.network-default-interface-type": "ETHERNET"
}
}
}
--- a/configs/eth_v6.json Mon Dec 10 10:52:35 2018 +0000
+++ b/configs/eth_v6.json Mon Dec 10 11:04:55 2018 +0000
@@ -3,6 +3,10 @@
"network-interface":{
"help": "Options are ETHERNET, WIFI_ESP8266, WIFI_ODIN, MESH_LOWPAN_ND, MESH_THREAD",
"value": "ETHERNET"
+ },
+ "button1": {
+ "help": "Use BUTTON1 from PinNames.h by default",
+ "value": "BUTTON1"
}
},
"macros": ["MBEDTLS_USER_CONFIG_FILE=\"mbedtls_mbed_client_config.h\""],
@@ -15,8 +19,8 @@
"lwip.ipv6-enabled": true,
"mbed-trace.enable": 0
},
- "UBLOX_EVK_ODIN_W2": {
- "target.device_has_remove": ["EMAC"]
+ "UBLOX_EVK_ODIN_W2": {
+ "target.network-default-interface-type": "ETHERNET"
}
}
}
--- a/configs/mesh-mbedignore Mon Dec 10 10:52:35 2018 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -easy-connect/esp8266-driver/*
--- a/configs/mesh_6lowpan.json Mon Dec 10 10:52:35 2018 +0000
+++ b/configs/mesh_6lowpan.json Mon Dec 10 11:04:55 2018 +0000
@@ -7,12 +7,17 @@
"mesh_radio_type": {
"help": "options are ATMEL, MCR20",
"value": "ATMEL"
+ },
+ "button1": {
+ "help": "Use BUTTON1 from PinNames.h by default",
+ "value": "BUTTON1"
}
},
"macros": ["MBEDTLS_USER_CONFIG_FILE=\"mbedtls_mbed_client_config.h\""],
"target_overrides": {
"*": {
- "target.features_add": ["NANOSTACK", "LOWPAN_ROUTER", "COMMON_PAL"],
+ "target.features_add": ["NANOSTACK", "COMMON_PAL"],
+ "nanostack.configuration": "lowpan_router",
"platform.stdio-baud-rate": 115200,
"platform.stdio-convert-newlines": true,
"mbed-mesh-api.6lowpan-nd-channel-page": 0,
--- a/configs/mesh_6lowpan_subg.json Mon Dec 10 10:52:35 2018 +0000
+++ b/configs/mesh_6lowpan_subg.json Mon Dec 10 11:04:55 2018 +0000
@@ -7,13 +7,18 @@
"mesh_radio_type": {
"help": "options are ATMEL, MCR20, SPIRIT1",
"value": "SPIRIT1"
+ },
+ "button1": {
+ "help": "Use BUTTON1 from PinNames.h by default",
+ "value": "BUTTON1"
}
},
"macros": ["MBEDTLS_USER_CONFIG_FILE=\"mbedtls_mbed_client_config.h\""],
"target_overrides": {
"*": {
"spirit1.mac-address": "{0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7}",
- "target.features_add": ["NANOSTACK", "LOWPAN_ROUTER", "COMMON_PAL"],
+ "target.features_add": ["NANOSTACK", "COMMON_PAL"],
+ "nanostack.configuration": "lowpan_router",
"platform.stdio-baud-rate": 115200,
"platform.stdio-convert-newlines": true,
"mbed-mesh-api.6lowpan-nd-security-mode": "PSK",
--- a/configs/mesh_thread.json Mon Dec 10 10:52:35 2018 +0000
+++ b/configs/mesh_thread.json Mon Dec 10 11:04:55 2018 +0000
@@ -5,14 +5,19 @@
"value": "MESH_THREAD"
},
"mesh_radio_type": {
- "help": "options are ATMEL, MCR20",
+ "help": "options are ATMEL, MCR20, EFR32",
"value": "ATMEL"
+ },
+ "button1": {
+ "help": "Use BUTTON1 from PinNames.h by default",
+ "value": "BUTTON1"
}
},
"macros": ["MBEDTLS_USER_CONFIG_FILE=\"mbedtls_mbed_client_config.h\""],
"target_overrides": {
"*": {
- "target.features_add": ["NANOSTACK", "THREAD_ROUTER", "COMMON_PAL"],
+ "target.features_add": ["NANOSTACK", "COMMON_PAL"],
+ "nanostack.configuration": "thread_router",
"platform.stdio-baud-rate": 115200,
"platform.stdio-convert-newlines": true,
"mbed-mesh-api.thread-config-channel": 22,
--- a/configs/wifi_esp8266_v4.json Mon Dec 10 10:52:35 2018 +0000
+++ b/configs/wifi_esp8266_v4.json Mon Dec 10 11:04:55 2018 +0000
@@ -19,16 +19,19 @@
"wifi-rx": {
"help": "RX pin for serial connection to external device",
"value": "D0"
+ },
+ "button1": {
+ "help": "Use BUTTON1 from PinNames.h by default",
+ "value": "BUTTON1"
}
},
"macros": ["MBEDTLS_USER_CONFIG_FILE=\"mbedtls_mbed_client_config.h\""],
"target_overrides": {
"*": {
- "target.features_add": ["LWIP", "COMMON_PAL"],
+ "drivers.uart-serial-rxbuf-size": 1024,
+ "target.features_add": ["COMMON_PAL"],
"platform.stdio-baud-rate": 115200,
"platform.stdio-convert-newlines": true,
- "lwip.ipv4-enabled": true,
- "lwip.ipv6-enabled": false,
"mbed-trace.enable": 0
},
"NUCLEO_F401RE": {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/configs/wifi_idw01m1_v4.json Mon Dec 10 11:04:55 2018 +0000
@@ -0,0 +1,36 @@
+{
+ "config": {
+ "network-interface":{
+ "help": "Options are ETHERNET, WIFI_ESP8266, WIFI_IDW0XX1, WIFI_ODIN, MESH_LOWPAN_ND, MESH_THREAD",
+ "value": "WIFI_IDW0XX1"
+ },
+ "wifi-ssid": {
+ "help": "WiFi SSID",
+ "value": "\"SSID\""
+ },
+ "wifi-password": {
+ "help": "WiFi Password",
+ "value": "\"Password\""
+ },
+ "wifi-tx": {
+ "help": "TX pin for serial connection to external device",
+ "value": "PA_9"
+ },
+ "wifi-rx": {
+ "help": "RX pin for serial connection to external device",
+ "value": "PA_10"
+ }
+ },
+ "macros": ["MBEDTLS_USER_CONFIG_FILE=\"mbedtls_mbed_client_config.h\""],
+ "target_overrides": {
+ "*": {
+ "target.features_add": ["COMMON_PAL"],
+ "platform.stdio-baud-rate": 115200,
+ "platform.stdio-convert-newlines": true,
+ "mbed-trace.enable": 0,
+ "idw0xx1.expansion-board": "IDW01M1",
+ "drivers.uart-serial-txbuf-size": 512,
+ "drivers.uart-serial-rxbuf-size": 512
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/configs/wifi_idw04a1_v4.json Mon Dec 10 11:04:55 2018 +0000
@@ -0,0 +1,36 @@
+{
+ "config": {
+ "network-interface":{
+ "help": "Options are ETHERNET, WIFI_ESP8266, WIFI_IDW0XX1, WIFI_ODIN, MESH_LOWPAN_ND, MESH_THREAD",
+ "value": "WIFI_IDW0XX1"
+ },
+ "wifi-ssid": {
+ "help": "WiFi SSID",
+ "value": "\"SSID\""
+ },
+ "wifi-password": {
+ "help": "WiFi Password",
+ "value": "\"Password\""
+ },
+ "wifi-tx": {
+ "help": "TX pin for serial connection to external device",
+ "value": "D8"
+ },
+ "wifi-rx": {
+ "help": "RX pin for serial connection to external device",
+ "value": "D2"
+ }
+ },
+ "macros": ["MBEDTLS_USER_CONFIG_FILE=\"mbedtls_mbed_client_config.h\"", "IDW04A1_WIFI_HW_BUG_WA"],
+ "target_overrides": {
+ "*": {
+ "target.features_add": ["COMMON_PAL"],
+ "platform.stdio-baud-rate": 115200,
+ "platform.stdio-convert-newlines": true,
+ "mbed-trace.enable": 0,
+ "idw0xx1.expansion-board": "IDW04A1",
+ "drivers.uart-serial-txbuf-size": 512,
+ "drivers.uart-serial-rxbuf-size": 512
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/configs/wifi_ism43362.json Mon Dec 10 11:04:55 2018 +0000
@@ -0,0 +1,24 @@
+{
+ "config": {
+ "network-interface":{
+ "value": "WIFI_ISM43362"
+ },
+ "wifi-ssid": {
+ "help": "WiFi SSID",
+ "value": "\"SSID\""
+ },
+ "wifi-password": {
+ "help": "WiFi Password",
+ "value": "\"PASSWORD\""
+ }
+ },
+ "macros": ["MBEDTLS_USER_CONFIG_FILE=\"mbedtls_mbed_client_config.h\""],
+ "target_overrides": {
+ "*": {
+ "target.features_add": ["COMMON_PAL"],
+ "platform.stdio-baud-rate": 115200,
+ "platform.stdio-convert-newlines": true,
+ "mbed-trace.enable": 0
+ }
+ }
+}
--- a/configs/wifi_odin_v4.json Mon Dec 10 10:52:35 2018 +0000
+++ b/configs/wifi_odin_v4.json Mon Dec 10 11:04:55 2018 +0000
@@ -12,16 +12,12 @@
"help": "WiFi Password",
"value": "\"Password\""
},
- "wifi-tx": {
- "help": "TX pin for serial connection to external device",
- "value": "D1"
- },
- "wifi-rx": {
- "help": "RX pin for serial connection to external device",
- "value": "D0"
+ "button1": {
+ "help": "Use BUTTON1 from PinNames.h by default",
+ "value": "BUTTON1"
}
},
- "macros": ["MBEDTLS_USER_CONFIG_FILE=\"mbedtls_mbed_client_config.h\""],
+ "macros": ["MBEDTLS_USER_CONFIG_FILE=\"mbedtls_mbed_client_config.h\"", "MBED_CONF_RSA_REQUIRED"],
"target_overrides": {
"*": {
"target.features_add": ["LWIP", "COMMON_PAL"],
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/configs/wifi_rtw_v4.json Mon Dec 10 11:04:55 2018 +0000
@@ -0,0 +1,30 @@
+{
+ "config": {
+ "network-interface":{
+ "help": "Options are ETHERNET, WIFI_ESP8266, WIFI_ODIN, WIFI_RTW, MESH_LOWPAN_ND, MESH_THREAD",
+ "value": "WIFI_RTW"
+ },
+ "wifi-ssid": {
+ "help": "WiFi SSID",
+ "value": "\"SSID\""
+ },
+ "wifi-password": {
+ "help": "WiFi Password",
+ "value": "\"Password\""
+ },
+ "button1": {
+ "help": "Use BUTTON1 from PinNames.h by default",
+ "value": "NC"
+ }
+ },
+ "macros": ["MBEDTLS_USER_CONFIG_FILE=\"mbedtls_mbed_client_config.h\""],
+ "target_overrides": {
+ "*": {
+ "drivers.uart-serial-rxbuf-size": 1024,
+ "target.features_add": ["COMMON_PAL"],
+ "platform.stdio-baud-rate": 115200,
+ "platform.stdio-convert-newlines": true,
+ "mbed-trace.enable": 0
+ }
+ }
+}
--- a/configs/wifi_v4.json Mon Dec 10 10:52:35 2018 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,43 +0,0 @@
-{
- "config": {
- "network-interface":{
- "help": "Options are ETHERNET, WIFI_ESP8266, WIFI_ODIN, MESH_LOWPAN_ND, MESH_THREAD",
- "value": "WIFI_ESP8266"
- },
- "wifi-ssid": {
- "help": "WiFi SSID",
- "value": "\"SSID\""
- },
- "wifi-password": {
- "help": "WiFi Password",
- "value": "\"Password\""
- },
- "wifi-tx": {
- "help": "TX pin for serial connection to external device",
- "value": "D1"
- },
- "wifi-rx": {
- "help": "RX pin for serial connection to external device",
- "value": "D0"
- }
- },
- "macros": ["MBEDTLS_USER_CONFIG_FILE=\"mbedtls_mbed_client_config.h\""],
- "target_overrides": {
- "*": {
- "target.features_add": ["LWIP", "COMMON_PAL"],
- "platform.stdio-baud-rate": 115200,
- "platform.stdio-convert-newlines": true,
- "lwip.ipv4-enabled": true,
- "lwip.ipv6-enabled": false,
- "mbed-trace.enable": 0
- },
- "NUCLEO_F401RE": {
- "wifi-tx": "PA_11",
- "wifi-rx": "PA_12"
- },
- "NUCLEO_F411RE": {
- "wifi-tx": "PA_11",
- "wifi-rx": "PA_12"
- }
- }
-}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/configs/wifi_wizfi310_v4.json Mon Dec 10 11:04:55 2018 +0000
@@ -0,0 +1,47 @@
+{
+ "config": {
+ "network-interface":{
+ "help": "Options are ETHERNET, WIFI_IDW0XX1, WIFI_ESP8266, WIFI_ODIN, WIFI_WIZFI310, MESH_LOWPAN_ND, MESH_THREAD, CELLULAR_ONBOARD",
+ "value": "WIFI_WIZFI310"
+ },
+ "wifi-ssid": {
+ "help": "WiFi SSID",
+ "value": "\"SSID\""
+ },
+ "wifi-password": {
+ "help": "WiFi Password",
+ "value": "\"Password\""
+ },
+ "wifi-tx": {
+ "help": "TX pin for serial connection to external device",
+ "value": "D1"
+ },
+ "wifi-rx": {
+ "help": "RX pin for serial connection to external device",
+ "value": "D0"
+ },
+ "button1": {
+ "help": "Use BUTTON1 from PinNames.h by default",
+ "value": "BUTTON1"
+ }
+ },
+ "macros": ["MBEDTLS_USER_CONFIG_FILE=\"mbedtls_mbed_client_config.h\""],
+ "target_overrides": {
+ "*": {
+ "drivers.uart-serial-rxbuf-size": 1024,
+ "target.features_add": ["COMMON_PAL"],
+ "platform.stdio-baud-rate": 115200,
+ "platform.stdio-convert-newlines": true,
+ "mbed-trace.enable": 0
+ },
+ "NUCLEO_F401RE": {
+ "wifi-tx": "PA_11",
+ "wifi-rx": "PA_12"
+ },
+ "NUCLEO_F411RE": {
+ "wifi-tx": "PA_11",
+ "wifi-rx": "PA_12"
+ }
+ }
+}
+
--- a/main.cpp Mon Dec 10 10:52:35 2018 +0000
+++ b/main.cpp Mon Dec 10 11:04:55 2018 +0000
@@ -45,17 +45,64 @@
#else // MBED_CONF_APP_NETWORK_INTERFACE != NO_CONNECT
#define __STDC_FORMAT_MACROS
+#include <inttypes.h>
#include <string>
#include <sstream>
#include <vector>
+#include "mbed-trace/mbed_trace.h"
+#include "mbedtls/entropy_poll.h"
+
#include "security.h"
-#include "simpleclient.h"
-#include "mbedtls/entropy_poll.h"
+
+#include "mbed.h"
// easy-connect compliancy, it has 2 sets of wifi pins we have only one
#define MBED_CONF_APP_ESP8266_TX MBED_CONF_APP_WIFI_TX
#define MBED_CONF_APP_ESP8266_RX MBED_CONF_APP_WIFI_RX
-#include "easy-connect.h"
+#ifdef TARGET_GR_LYCHEE
+#include "easy-connect-gr-lychee/easy-connect.h"
+#else
+#include "easy-connect/easy-connect.h"
+#endif
+
+// Should be defined after easy-connect.h
+#include "simpleclient.h"
+
+#ifdef TARGET_STM
+#define RED_LED (LED3)
+#define GREEN_LED (LED1)
+#define BLUE_LED (LED2)
+#define LED_ON (1)
+#elif TARGET_GR_LYCHEE
+#define GREEN_LED (LED1)
+#define YELLOW_LED (LED2)
+#define ORANGE_LED (LED3)
+#define RED_LED (LED4)
+#define LED_ON (1)
+#else
+#define RED_LED (LED1)
+#define GREEN_LED (LED2)
+#define BLUE_LED (LED3)
+#define LED_ON (0)
+#endif
+#define LED_OFF (!LED_ON)
+
+#define BLINK_SIGNAL 0x1
+
+// Status indication
+DigitalOut red_led(RED_LED);
+DigitalOut green_led(GREEN_LED);
+#ifdef TARGET_GR_LYCHEE
+DigitalOut yellow_led(YELLOW_LED);
+DigitalOut orange_led(ORANGE_LED);
+#else
+DigitalOut blue_led(BLUE_LED);
+#endif
+
+Ticker status_ticker;
+void blinky() {
+ green_led = !green_led;
+}
// These are example resource values for the Device Object
struct MbedClientDevice device = {
@@ -68,17 +115,79 @@
// Instantiate the class which implements LWM2M Client API (from simpleclient.h)
MbedClient mbed_client(device);
-// LED Output
-#if defined(TARGET_RZ_A1H)
-DigitalOut led1(LED1);
-DigitalOut led2(LED2);
-DigitalOut led3(LED3);
-#elif defined(TARGET_GR_LYCHEE)
-DigitalOut led1(LED1);
-DigitalOut led2(LED2);
-DigitalOut led3(LED3);
-DigitalOut led4(LED4);
+// Set up a button interrupt for user interaction
+#ifdef MBED_CONF_APP_BUTTON1
+ InterruptIn counter_btn(MBED_CONF_APP_BUTTON1);
+#endif
+
+
+/**
+ * User interaction handler / simulator. Sets up physical button handler and a ticker
+ * for regular updates for the resources.
+ *
+ * MBED_CONF_APP_BUTTON1 is mapped to actual button pin the mbed_app.json file, where you need to
+ * specify board-specific value or leave it undefined if the board does not have buttons.
+ */
+class InteractionProvider {
+
+public:
+ InteractionProvider(Semaphore& updates_sem) : updates(updates_sem) {
+
+ timer_ticked = false;
+ clicked = false;
+
+ // Set up handler function for the interaction button, if available
+
+#ifdef MBED_CONF_APP_BUTTON1
+ counter_btn.fall(this, &InteractionProvider::counter_button_handler);
#endif
+
+ // Use the counter button handler to send an update of endpoint resource values
+ // to connector every 15 seconds periodically.
+ timer.attach(this, &InteractionProvider::timer_handler, 15.0);
+ }
+
+ // flags for interaction, these are read from outside interrupt context
+ volatile bool timer_ticked;
+ volatile bool clicked;
+
+
+private:
+
+ void timer_handler() {
+ timer_ticked = true;
+ updates.release();
+ }
+
+ void counter_button_handler() {
+ clicked = true;
+ updates.release();
+ }
+
+ // time-based event source for regular resource updates
+ Ticker timer;
+
+ // Network interaction must be performed outside of interrupt context
+ Semaphore& updates;
+
+};
+
+/*
+ * Arguments for running "blink" in it's own thread.
+ */
+class BlinkArgs {
+public:
+ BlinkArgs() {
+ clear();
+ }
+ void clear() {
+ position = 0;
+ blink_pattern.clear();
+ }
+ uint16_t position;
+ std::vector<uint32_t> blink_pattern;
+};
+
/*
* The Led contains one property (pattern) and a function (blink).
* When the function blink is executed, the pattern is read, and the LED
@@ -88,6 +197,7 @@
public:
LedResource() {
// create ObjectID with metadata tag of '3201', which is 'digital output'
+// blinky_thread.start(callback(this, &LedResource::do_blink));
led_object = M2MInterfaceFactory::create_object("3201");
M2MObjectInstance* led_inst = led_object->create_object_instance();
@@ -122,8 +232,6 @@
}
void blink(void *argument) {
-
-
// read the value of 'Pattern'
M2MObjectInstance* inst = led_object->object_instance();
M2MResource* res = inst->resource("5853");
@@ -135,7 +243,7 @@
uint8_t* buffIn = NULL;
uint32_t sizeIn;
res->get_value(buffIn, sizeIn);
-
+
uint8_t* cbuffIn = NULL;
uint32_t csizeIn;
resC->get_value(cbuffIn, csizeIn);
@@ -144,12 +252,11 @@
std::string s((char*)buffIn, sizeIn);
std::vector<uint32_t>* v = new std::vector<uint32_t>;
- printf("led_execute_callback pattern=%s\r\n", s.c_str());
+ printf("led_execute_callback pattern=%s\n", s.c_str());
// our pattern is something like 500:200:500, so parse that
std::size_t found = s.find_first_of(":");
while (found!=std::string::npos) {
-
v->push_back(atoi((const char*)s.substr(0,found).c_str()));
s = s.substr(found+1);
found=s.find_first_of(":");
@@ -175,40 +282,40 @@
private:
M2MObject* led_object;
void do_blink(uint8_t* color) {
-
+
#if defined(TARGET_RZ_A1H)
if (!strcmp((char *)color, "red")) {
// blink the LED in red color
- led1 = !led1;
+ red_led = !red_led;
}
else if (!strcmp((char *)color, "green")) {
// blink in green color
- led2 = !led2;
+ green_led = !green_led;
}
else if (!strcmp((char *)color, "blue")) {
// blink in blue color
- led3 = !led3;
+ blue_led = !blue_led;
}
else if (!strcmp((char *)color, "cyan")) {
// blink in cyan color
- led2 = !led2;
- led3 = !led3;
+ green_led = !green_led;
+ blue_led = !blue_led;
}
else if (!strcmp((char *)color, "yellow")) {
// blink in yellow color
- led1 = !led1;
- led2 = !led2;
+ red_led = !red_led;
+ green_led = !green_led;
}
else if (!strcmp((char *)color, "magenta")) {
// blink in magenta color
- led1 = !led1;
- led3 = !led3;
+ red_led = !red_led;
+ blue_led = !blue_led;
}
else if (!strcmp((char *)color, "white")) {
// blink in white color
- led1 = !led1;
- led2 = !led2;
- led3 = !led3;
+ red_led = !red_led;
+ green_led = !green_led;
+ blue_led = !blue_led;
}
else {
// no operation
@@ -216,19 +323,19 @@
#elif defined(TARGET_GR_LYCHEE)
if (!strcmp((char *)color, "green")) {
// blink the LED1(green color)
- led1 = !led1;
+ green_led = !green_led;
}
else if (!strcmp((char *)color, "yellow")) {
// blink the LED2(yellow color)
- led2 = !led2;
+ yellow_led = !yellow_led;
}
else if (!strcmp((char *)color, "orange")) {
// blink the LED3(orange color)
- led3 = !led3;
+ orange_led = !orange_led;
}
else if (!strcmp((char *)color, "red")) {
// blink the LED4(red color)
- led4 = !led4;
+ red_led = !red_led;
}
else {
// no operation
@@ -238,6 +345,164 @@
};
/*
+ * The button contains one property (click count).
+ * When `handle_button_click` is executed, the counter updates.
+ */
+class ButtonResource {
+public:
+ ButtonResource(): counter(0) {
+ // create ObjectID with metadata tag of '3200', which is 'digital input'
+ btn_object = M2MInterfaceFactory::create_object("3200");
+ M2MObjectInstance* btn_inst = btn_object->create_object_instance();
+ // create resource with ID '5501', which is digital input counter
+ M2MResource* btn_res = btn_inst->create_dynamic_resource("5501", "Button",
+ M2MResourceInstance::INTEGER, true /* observable */);
+ // we can read this value
+ btn_res->set_operation(M2MBase::GET_ALLOWED);
+ // set initial value (all values in mbed Client are buffers)
+ // to be able to read this data easily in the Connector console, we'll use a string
+ btn_res->set_value((uint8_t*)"0", 1);
+ }
+
+ ~ButtonResource() {
+ }
+
+ M2MObject* get_object() {
+ return btn_object;
+ }
+
+ /*
+ * When you press the button, we read the current value of the click counter
+ * from mbed Device Connector, then up the value with one.
+ */
+ void handle_button_click() {
+ if (mbed_client.register_successful()) {
+ M2MObjectInstance* inst = btn_object->object_instance();
+ M2MResource* res = inst->resource("5501");
+
+ // up counter
+ counter++;
+ printf("handle_button_click, new value of counter is %d\n", counter);
+ // serialize the value of counter as a string, and tell connector
+ char buffer[20];
+ int size = sprintf(buffer,"%d",counter);
+ res->set_value((uint8_t*)buffer, size);
+ } else {
+ printf("simulate button_click, device not registered\n");
+ }
+ }
+
+private:
+ M2MObject* btn_object;
+ uint16_t counter;
+};
+
+/*
+ * The timer contains one property: counter.
+ * When `handle_timer_tick` is executed, the counter updates.
+ */
+class TimerResource {
+public:
+ TimerResource(): counter(0) {
+ // create ObjectID with metadata tag of '3200', which is 'digital input'
+ btn_object = M2MInterfaceFactory::create_object("3200");
+ M2MObjectInstance* btn_inst = btn_object->create_object_instance();
+ // create resource with ID '5502', which is digital input counter
+ M2MResource* btn_res = btn_inst->create_dynamic_resource("5502", "Timer",
+ M2MResourceInstance::INTEGER, true /* observable */);
+ // we can read this value
+ btn_res->set_operation(M2MBase::GET_ALLOWED);
+ // set initial value (all values in mbed Client are buffers)
+ // to be able to read this data easily in the Connector console, we'll use a string
+ btn_res->set_value((uint8_t*)"0", 1);
+ }
+
+ ~TimerResource() {
+ }
+
+ M2MObject* get_object() {
+ return btn_object;
+ }
+
+ /*
+ * When the timer ticks, we read the current value of the click counter
+ * from mbed Device Connector, then up the value with one.l
+ */
+ void handle_timer_tick() {
+ if (mbed_client.register_successful()) {
+ M2MObjectInstance* inst = btn_object->object_instance();
+ M2MResource* res = inst->resource("5502");
+
+ // up counter
+ counter++;
+ printf("handle_timer_click, new value of counter is %d\n", counter);
+ // serialize the value of counter as a string, and tell connector
+ char buffer[20];
+ int size = sprintf(buffer,"%d",counter);
+ res->set_value((uint8_t*)buffer, size);
+ } else {
+ printf("handle_timer_tick, device not registered\n");
+ }
+ }
+
+private:
+ M2MObject* btn_object;
+ uint16_t counter;
+};
+
+
+
+class BigPayloadResource {
+public:
+ BigPayloadResource() {
+ big_payload = M2MInterfaceFactory::create_object("1000");
+ M2MObjectInstance* payload_inst = big_payload->create_object_instance();
+ M2MResource* payload_res = payload_inst->create_dynamic_resource("1", "BigData",
+ M2MResourceInstance::STRING, true /* observable */);
+ payload_res->set_operation(M2MBase::GET_PUT_ALLOWED);
+ payload_res->set_value((uint8_t*)"0", 1);
+ payload_res->set_incoming_block_message_callback(
+ incoming_block_message_callback(this, &BigPayloadResource::block_message_received));
+ payload_res->set_outgoing_block_message_callback(
+ outgoing_block_message_callback(this, &BigPayloadResource::block_message_requested));
+ }
+
+ M2MObject* get_object() {
+ return big_payload;
+ }
+
+ void block_message_received(M2MBlockMessage *argument) {
+ if (argument) {
+ if (M2MBlockMessage::ErrorNone == argument->error_code()) {
+ if (argument->is_last_block()) {
+ printf("Last block received\n");
+ }
+ printf("Block number: %d\n", argument->block_number());
+ // First block received
+ if (argument->block_number() == 0) {
+ // Store block
+ // More blocks coming
+ } else {
+ // Store blocks
+ }
+ } else {
+ printf("Error when receiving block message! - EntityTooLarge\n");
+ }
+// printf("Total message size: %" PRIu32 "\n", argument->total_message_size());
+ printf("Total message size: %PRIu32\n", argument->total_message_size());
+ }
+ }
+
+ void block_message_requested(const String& resource, uint8_t *&/*data*/, uint32_t &/*len*/) {
+ printf("GET request received for resource: %s\n", resource.c_str());
+ // Copy data and length to coap response
+ }
+
+private:
+ M2MObject* big_payload;
+};
+
+/*
* The Zxing contains a function (send string).
* When `handle_string_send` is executed, the string after decoding is sent.
*/
@@ -268,13 +533,17 @@
* When you success the decode process of barcode, we send the string after decoding to mbed Device Connector.
*/
void handle_string_send(char * addr, int size) {
- M2MObjectInstance* inst = zxing_object->object_instance();
- M2MResource* res = inst->resource("5700");
+ if (mbed_client.register_successful()) {
+ M2MObjectInstance* inst = zxing_object->object_instance();
+ M2MResource* res = inst->resource("5700");
+
+ printf("%s\r\n", addr);
- printf("%s\r\n", addr);
-
- // tell the string to connector
- res->set_value((uint8_t *)addr, size);
+ // tell the string to connector
+ res->set_value((uint8_t *)addr, size);
+ } else {
+ printf("handle_string_send, device not registered\n");
+ }
}
private:
@@ -287,10 +556,10 @@
zxing_resource.handle_string_send(addr, size);
}
-static volatile bool registered;
-void unregister() {
- registered = false;
+// debug printf function
+void trace_printer(const char* str) {
+ printf("%s\r\n", str);
}
// Entry point to the program
@@ -318,17 +587,22 @@
#endif
srand(seed);
- // Keep track of the main thread
- mainThread = osThreadGetId();
- printf("\nStarting mbed Client example in ");
-
-#if defined (MESH) || (MBED_CONF_LWIP_IPV6_ENABLED==true)
- printf("IPv6 mode\n");
+ red_led = LED_OFF;
+#ifdef TARGET_GR_LYCHEE
+ orange_led = LED_OFF;
#else
- printf("IPv4 mode\n");
+ blue_led = LED_OFF;
#endif
+ status_ticker.attach_us(blinky, 250000);
+ // Keep track of the main thread
+ osThreadId mainThread = osThreadGetId();
+
+ printf("\nStarting mbed Client example\n");
+
mbed_trace_init();
+ mbed_trace_print_function_set(trace_printer);
+ mbed_trace_config_set(TRACE_MODE_COLOR | TRACE_ACTIVE_LEVEL_INFO | TRACE_CARRIAGE_RETURN);
#if defined(TARGET_RZ_A1H) && (MBED_CONF_APP_NETWORK_INTERFACE == WIFI_BP3595)
DigitalOut usb1en(P3_8);
@@ -343,7 +617,18 @@
printf("\nConnection to Network Failed - exiting application...\n");
return -1;
}
+
+ // we create our button, timer and LED resources
+ ButtonResource button_resource;
LedResource led_resource;
+ BigPayloadResource big_payload_resource;
+ TimerResource timer_resource;
+
+ // Network interaction must be performed outside of interrupt context
+ Semaphore updates(0);
+
+ InteractionProvider interaction_provider(updates);
+
// Create endpoint interface to manage register and unregister
mbed_client.create_interface(MBED_SERVER_ADDRESS, network);
@@ -357,7 +642,10 @@
// Add objects to list
object_list.push_back(device_object);
+ object_list.push_back(button_resource.get_object());
object_list.push_back(led_resource.get_object());
+ object_list.push_back(big_payload_resource.get_object());
+ object_list.push_back(timer_resource.get_object());
object_list.push_back(zxing_resource.get_object());
// Set endpoint registration object
@@ -365,18 +653,16 @@
// Register with mbed Device Connector
mbed_client.test_register(register_object, object_list);
+ volatile bool registered = true;
+#ifdef TARGET_GR_LYCHEE
zxing_init(&callback_zxing);
Timer update_timer;
update_timer.reset();
update_timer.start();
- registered = true;
- InterruptIn unreg_button(USER_BUTTON0);
- unreg_button.fall(&unregister);
-
- while (registered) {
+ while (true) {
if (zxing_loop() == 0) {
update_timer.reset();
} else if (update_timer.read() >= 25) {
@@ -387,8 +673,29 @@
}
Thread::wait(5);
}
+#else
+ while (true) {
+ updates.wait(25000);
+ if(registered) {
+ if(!interaction_provider.clicked) {
+ mbed_client.test_update_register();
+ }
+ }else {
+ break;
+ }
+ if(interaction_provider.clicked) {
+ interaction_provider.clicked = false;
+ button_resource.handle_button_click();
+ }
+ if(interaction_provider.timer_ticked) {
+ interaction_provider.timer_ticked = false;
+ timer_resource.handle_timer_tick();
+ }
+ }
+#endif
mbed_client.test_unregister();
+ status_ticker.detach();
}
#endif // MBED_CONF_APP_NETWORK_INTERFACE != NO_CONNECT
--- a/mbed-client.lib Mon Dec 10 10:52:35 2018 +0000 +++ b/mbed-client.lib Mon Dec 10 11:04:55 2018 +0000 @@ -1,1 +1,1 @@ -https://github.com/ARMmbed/mbed-client/#26ed79aa6cb88eead7ee0fe97ab5fbe8fa3a0b5e +https://github.com/ARMmbed/mbed-client/#ea04c5de78225e88f90868ddd4cf10438b0ad1b3
--- a/mbed-gr-libs.lib Mon Dec 10 10:52:35 2018 +0000 +++ b/mbed-gr-libs.lib Mon Dec 10 11:04:55 2018 +0000 @@ -1,1 +1,1 @@ -https://github.com/d-kato/mbed-gr-libs/#18632c50ffce8a6311ee3f55ec8ae250117d0ff7 +https://github.com/d-kato/mbed-gr-libs/#6313bd0f0b5bdca4ab1fa7328a5783736e1028cc
--- a/mbed_app.json Mon Dec 10 10:52:35 2018 +0000
+++ b/mbed_app.json Mon Dec 10 11:04:55 2018 +0000
@@ -1,9 +1,13 @@
{
"config": {
"network-interface":{
- "help": "Options are ETHERNET, WIFI_ESP8266, WIFI_BP3595, WIFI_ESP32, NO_CONNECT",
+ "help": "Options are ETHERNET, WIFI_IDW0XX1, WIFI_ESP8266, WIFI_BP3595, WIFI_ESP32, WIFI_ISM43362, WIFI_ODIN, WIFI_WIZFI310, MESH_LOWPAN_ND, MESH_THREAD, CELLULAR_ONBOARD, NO_CONNECT",
"value": "NO_CONNECT"
},
+ "mesh_radio_type": {
+ "help": "options are ATMEL, MCR20, SPIRIT1, EFR32",
+ "value": "ATMEL"
+ },
"wifi-ssid": {
"help": "WiFi SSID",
"value": "\"SSID\""
@@ -44,11 +48,20 @@
"macros": ["MBEDTLS_USER_CONFIG_FILE=\"mbedtls_mbed_client_config.h\""],
"target_overrides": {
"*": {
- "target.features_add": ["COMMON_PAL"],
+ "target.features_add": ["NANOSTACK", "COMMON_PAL"],
+ "nanostack.configuration": "lowpan_router",
"platform.stdio-baud-rate": 115200,
"platform.stdio-convert-newlines": true,
+ "mbed-mesh-api.6lowpan-nd-channel-page": 0,
+ "mbed-mesh-api.6lowpan-nd-channel": 12,
"mbed-trace.enable": 0
},
+ "DISCO_F413ZH": {
+ "network-interface": "WIFI_ISM43362"
+ },
+ "DISCO_L475VG_IOT01A": {
+ "network-interface": "WIFI_ISM43362"
+ },
"NUCLEO_F401RE": {
"wifi-tx": "PA_11",
"wifi-rx": "PA_12"
@@ -58,9 +71,11 @@
"wifi-rx": "PA_12"
},
"UBLOX_EVK_ODIN_W2": {
- "target.device_has_remove": ["EMAC"]
+ "target.network-default-interface-type": "ETHERNET"
+ },
+ "UBLOX_C030_U201": {
+ "lwip.ppp-enabled": true,
+ "ppp-cell-iface.apn-lookup": true
}
}
}
-
-
--- a/mbed_client_config.h Mon Dec 10 10:52:35 2018 +0000 +++ b/mbed_client_config.h Mon Dec 10 11:04:55 2018 +0000 @@ -37,7 +37,7 @@ // Defines the size of blockwise CoAP messages that client can handle. // The values that can be defined uust be 2^x and x is at least 4. // Suitable values: 0, 16, 32, 64, 128, 256, 512 and 1024 -#define SN_COAP_MAX_BLOCKWISE_PAYLOAD_SIZE 1024 +#define SN_COAP_MAX_BLOCKWISE_PAYLOAD_SIZE 512 // Many pure LWM2M servers doen't accept 'obs' text in registration message. // While using Client against such servers, this flag can be set to define to
--- a/mbedtls_mbed_client_config.h Mon Dec 10 10:52:35 2018 +0000 +++ b/mbedtls_mbed_client_config.h Mon Dec 10 11:04:55 2018 +0000 @@ -77,9 +77,17 @@ #define MBEDTLS_ECDSA_C #define MBEDTLS_X509_CRT_PARSE_C -// Remove RSA, save 20KB at total -#undef MBEDTLS_RSA_C -#undef MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED +// Remove RSA, save 20KB at total. +// However, with Mbed OS 5.9 onwards - UBLOX_EVK_ODIN_W2 must have RSA! +// A more abstract macro define added for that which you can trigger via +// macros -part in the mbed_app.json. +#if !defined(MBED_CONF_RSA_REQUIRED) + #undef MBEDTLS_RSA_C + #undef MBEDTLS_PK_RSA_ALT_SUPPORT + #undef MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED + #undef MBEDTLS_KEY_EXCHANGE_RSA_ENABLED + #undef MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED +#endif // !MBED_CONF_RSA_REQUIRED // Remove error messages, save 10KB of ROM #undef MBEDTLS_ERROR_C
--- a/pal.lib Mon Dec 10 10:52:35 2018 +0000 +++ b/pal.lib Mon Dec 10 11:04:55 2018 +0000 @@ -1,1 +1,1 @@ -https://github.com/ARMmbed/pal/#4e46c0ea870631bb5bec3e4aa9fd7eebf3db21f0 +https://github.com/ARMmbed/pal/#60ce64d5ec358b3cf8bb492b95c5da7dad9254ca
--- a/simpleclient.h Mon Dec 10 10:52:35 2018 +0000
+++ b/simpleclient.h Mon Dec 10 11:04:55 2018 +0000
@@ -29,23 +29,10 @@
#include "security.h"
#include "mbed.h"
-#define ETHERNET 1
-#define WIFI 2
-#define MESH_LOWPAN_ND 3
-#define MESH_THREAD 4
-#define ATMEL 5
-#define MCR20 6
-
#define STRINGIFY(s) #s
-// Check if using mesh networking, define helper
-#if MBED_CONF_APP_NETWORK_INTERFACE == MESH_LOWPAN_ND
- #define MESH
-#elif MBED_CONF_APP_NETWORK_INTERFACE == MESH_THREAD
- #define MESH
-#endif
-
-#if defined (MESH) || (MBED_CONF_LWIP_IPV6_ENABLED==true)
+// EASY_CONNECT_MESH coming via easy-connect
+#if defined (EASY_CONNECT_MESH) || (MBED_CONF_LWIP_IPV6_ENABLED==true)
// Mesh is always IPV6 - also WiFi and ETH can be IPV6 if IPV6 is enabled
M2MInterface::NetworkStack NETWORK_STACK = M2MInterface::LwIP_IPv6;
#else
@@ -54,7 +41,7 @@
#endif
//Select binding mode: UDP or TCP -- note - Mesh networking is IPv6 UDP ONLY
-#ifdef MESH
+#if defined (EASY_CONNECT_MESH)
M2MInterface::BindingMode SOCKET_MODE = M2MInterface::UDP;
#else
// WiFi or Ethernet supports both - TCP by default to avoid
