Simple Mbed Cloud Client application using features of K64 & K66

Connect to Mbed Cloud!

This example was customized a bit for FRDM-K66 and FRDM-K64F.

It depends on having an SD Card plugged in for storage of credentials. It could be changed later to use a SPI flash or other storage on a shield or wired in.

The app keeps track of how many times switch 2 (SW2) is pressed. The value can be retrieved via a GET request to Mbed Cloud.

Also, it will blink a pattern based on milisecond (ms) timing values that can be sent from Mbed Cloud. The pattern can be sent with a PUT request and the blinking sequence can be triggered by a POST request.

Files at this revision

API Documentation at this revision

Comitter:
MarceloSalazar
Date:
Wed Feb 14 13:20:30 2018 +0000
Parent:
1:1ccf36276cd3
Child:
3:bd00f3af8f03
Commit message:
Update Simple MCC lib

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed_app.json Show annotated file Show diff for this revision Revisions of this file
mbed_cloud_dev_credentials.c Show annotated file Show diff for this revision Revisions of this file
simple-mbed-cloud-client.lib Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Wed Feb 14 10:43:56 2018 +0000
+++ b/main.cpp	Wed Feb 14 13:20:30 2018 +0000
@@ -26,9 +26,6 @@
 #include "FATFileSystem.h"
 #include "EthernetInterface.h"
 
-#define LED_OFF                     1
-
-DigitalOut  led(LED_RED, LED_OFF);
 InterruptIn button(BUTTON1);
 
 // Pointers to the resources that will be created in main_application().
@@ -45,97 +42,41 @@
 
 void pattern_updated(const char *) {
     printf("PUT received, new value: %s\n", pattern_ptr->get_value());
+    // Placeholder for PUT action
 }
 
 void blink_callback(void *) {
     const char *pattern = pattern_ptr->get_value();
-    printf("LED pattern = %s\n", pattern);
+    printf("POST received. LED pattern = %s\n", pattern);
+    // Placeholder for POST action
     // The pattern is something like 500:200:500, so parse that.
-    // LED blinking is done while parsing.
-    led = !led;
-    while (*pattern != '\0') {
-        // Wait for requested time.
-        wait_ms(atoi(pattern));
-        led = !led;
-        // Search for next value.
-        pattern = strchr(pattern, ':');
-        if(!pattern) {
-            break; // while
-        }
-        pattern++;
-    }
-
-    led = LED_OFF;
 }
 
-void button_notification_status_callback(const M2MBase& object, const NoticationDeliveryStatus status)
+void button_callback(const M2MBase& object, const NoticationDeliveryStatus status)
 {
-    switch(status) {
-        case NOTIFICATION_STATUS_BUILD_ERROR:
-            printf("Notification callback: (%s) error when building CoAP message\n", object.uri_path());
-            break;
-        case NOTIFICATION_STATUS_RESEND_QUEUE_FULL:
-            printf("Notification callback: (%s) CoAP resend queue full\n", object.uri_path());
-            break;
-        case NOTIFICATION_STATUS_SENT:
-            printf("Notification callback: (%s) Notification sent to server\n", object.uri_path());
-            break;
-        case NOTIFICATION_STATUS_DELIVERED:
-            printf("Notification callback: (%s) Notification delivered\n", object.uri_path());
-            break;
-        case NOTIFICATION_STATUS_SEND_FAILED:
-            printf("Notification callback: (%s) Notification sending failed\n", object.uri_path());
-            break;
-        case NOTIFICATION_STATUS_SUBSCRIBED:
-            printf("Notification callback: (%s) subscribed\n", object.uri_path());
-            break;
-        case NOTIFICATION_STATUS_UNSUBSCRIBED:
-            printf("Notification callback: (%s) subscription removed\n", object.uri_path());
-            break;
-        default:
-            break;
-    }
+    printf("Button notification. Callback: (%s)\n", object.uri_path());
+    // Placeholder for GET
 }
 
-// This function is called when a POST request is received for resource 5000/0/1.
-void unregister_cb(void *)
-{
-    printf("Unregister resource executed\n");
-    client->close();
-}
-
-// This function is called when a POST request is received for resource 5000/0/2.
-void factory_reset_cb(void *)
-{
-    printf("Factory reset resource executed\n");
-    client->close();
-    kcm_status_e kcm_status = kcm_factory_reset();
-    if (kcm_status != KCM_STATUS_SUCCESS) {
-        printf("Failed to do factory reset - %d\n", kcm_status);
-    } else {
-        printf("Factory reset completed. Now restart the device\n");
-    }
-}
 
 int main(void)
 {
-    // IOTMORF-1712: DAPLINK starts the previous application during flashing a new binary
-    // This is workaround to prevent possible deletion of credentials or storage corruption
-    // while replacing the application binary.
+    // Requires DAPLink 245+ (https://github.com/ARMmbed/DAPLink/pull/364)
+    // Older versions: workaround to prevent possible deletion of credentials:
     wait(2);
 
     // Misc OS setup
     srand(time(NULL));
 
+    // Placeholder for network
     EthernetInterface net;
+
+    // Placeholder for storage
     SDBlockDevice sd(PTE3, PTE1, PTE2, PTE4);
     FATFileSystem fs("sd");
 
     printf("Start Simple Mbed Cloud Client\n");
 
-    // Initialize button interrupt
-    button.fall(&button_press);
-
     // Initialize SD card
     int status = sd.init();
     if (status != BD_ERROR_OK) {
@@ -148,7 +89,6 @@
     if (status) {
         printf("Failed to mount FAT file system, reformatting...\r\n");
         status = fs.reformat(&sd);
-
         if (status) {
             printf("Failed to reformat FAT file system\r\n");
             return -1;
@@ -169,6 +109,9 @@
         printf("IP address %s\n", ip_addr);
     }
 
+    // Placeholder for GET requests. Initialize button interrupt.
+    button.fall(&button_press);
+
     SimpleMbedCloudClient mbedClient(&net);
     // Save pointer to mbedClient so that other functions can access it.
     client = &mbedClient;
@@ -185,7 +128,7 @@
     button->set_value("0");
     button->methods(M2MMethod::GET);
     button->observable(true);
-    button->attach_notification(M2MMethod::GET, (void*)button_notification_status_callback);
+    button->attach_notification(M2MMethod::GET, (void*)button_callback);
 
     MbedCloudClientResource *pattern = mbedClient.create_resource("3201/0/5853", "pattern_resource");
     pattern->set_value("500:500:500:500");
@@ -197,14 +140,6 @@
     blink->methods(M2MMethod::POST);
     blink->attach(M2MMethod::POST, (void*)blink_callback);
 
-    MbedCloudClientResource *unregister = mbedClient.create_resource("5000/0/1", "unregister");
-    unregister->methods(M2MMethod::POST);
-    unregister->attach(M2MMethod::POST, (void*)unregister_cb);
-
-    MbedCloudClientResource *factoryReset = mbedClient.create_resource("5000/0/2", "factory_reset");
-    factoryReset->methods(M2MMethod::POST);
-    factoryReset->attach(M2MMethod::POST, (void*)factory_reset_cb);
-
     mbedClient.register_and_connect();
 
     // Check if client is registering or registered, if true sleep and repeat.
--- a/mbed_app.json	Wed Feb 14 10:43:56 2018 +0000
+++ b/mbed_app.json	Wed Feb 14 13:20:30 2018 +0000
@@ -12,10 +12,6 @@
             "platform.stdio-convert-newlines": true,
             "mbed-client.event-loop-size": 1024,
             "mbed-trace.enable": null
-        },
-        "K64F": {
-            "update-client.application-details": "0x00020000",
-            "update-client.bootloader-details": "0x172e4"
         }
     },
     "config": {
--- a/mbed_cloud_dev_credentials.c	Wed Feb 14 10:43:56 2018 +0000
+++ b/mbed_cloud_dev_credentials.c	Wed Feb 14 13:20:30 2018 +0000
@@ -16,24 +16,246 @@
 #ifndef __MBED_CLOUD_DEV_CREDENTIALS_H__
 #define __MBED_CLOUD_DEV_CREDENTIALS_H__
 
-#if MBED_CONF_APP_DEVELOPER_MODE == 1
-#error "Replace mbed_cloud_dev_credentials.c with your own developer cert."
-#endif
-
 #include <inttypes.h>
 
-const char MBED_CLOUD_DEV_BOOTSTRAP_ENDPOINT_NAME[] = "";
-const char MBED_CLOUD_DEV_ACCOUNT_ID[] = "";
-const char MBED_CLOUD_DEV_BOOTSTRAP_SERVER_URI[] = "";
+const char MBED_CLOUD_DEV_BOOTSTRAP_ENDPOINT_NAME[] = "015d75eb0fe302420a01640503c00000";
+const char MBED_CLOUD_DEV_ACCOUNT_ID[] = "015b5c9279be02420a01041200000000";
+const char MBED_CLOUD_DEV_BOOTSTRAP_SERVER_URI[] = "coaps://coap-systemtest.dev.mbed.com:5684?aid=015b5c9279be02420a01041200000000";
+
+const uint8_t MBED_CLOUD_DEV_BOOTSTRAP_DEVICE_CERTIFICATE[] = 
+{ 0x30, 0x82, 0x02, 0x18, 0x30, 0x82, 0x01, 0xbd,
+ 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x11, 0x00,
+ 0xa0, 0x27, 0xa6, 0xfd, 0xac, 0x10, 0x4c, 0xae,
+ 0x86, 0x93, 0x10, 0xfc, 0xe3, 0xfa, 0xfe, 0xe8,
+ 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce,
+ 0x3d, 0x04, 0x03, 0x02, 0x30, 0x77, 0x31, 0x0b,
+ 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13,
+ 0x02, 0x47, 0x42, 0x31, 0x17, 0x30, 0x15, 0x06,
+ 0x03, 0x55, 0x04, 0x08, 0x0c, 0x0e, 0x43, 0x61,
+ 0x6d, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x73,
+ 0x68, 0x69, 0x72, 0x65, 0x31, 0x12, 0x30, 0x10,
+ 0x06, 0x03, 0x55, 0x04, 0x07, 0x0c, 0x09, 0x43,
+ 0x61, 0x6d, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65,
+ 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04,
+ 0x0a, 0x0c, 0x07, 0x41, 0x52, 0x4d, 0x20, 0x4c,
+ 0x74, 0x64, 0x31, 0x29, 0x30, 0x27, 0x06, 0x03,
+ 0x55, 0x04, 0x03, 0x0c, 0x20, 0x30, 0x31, 0x35,
+ 0x64, 0x37, 0x35, 0x65, 0x62, 0x30, 0x66, 0x65,
+ 0x33, 0x30, 0x32, 0x34, 0x32, 0x30, 0x61, 0x30,
+ 0x31, 0x36, 0x34, 0x30, 0x35, 0x30, 0x33, 0x63,
+ 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x1e, 0x17,
+ 0x0d, 0x31, 0x37, 0x30, 0x37, 0x32, 0x34, 0x31,
+ 0x38, 0x34, 0x35, 0x32, 0x35, 0x5a, 0x17, 0x0d,
+ 0x32, 0x37, 0x30, 0x37, 0x32, 0x34, 0x31, 0x38,
+ 0x34, 0x35, 0x32, 0x35, 0x5a, 0x30, 0x77, 0x31,
+ 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06,
+ 0x13, 0x02, 0x47, 0x42, 0x31, 0x17, 0x30, 0x15,
+ 0x06, 0x03, 0x55, 0x04, 0x08, 0x0c, 0x0e, 0x43,
+ 0x61, 0x6d, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65,
+ 0x73, 0x68, 0x69, 0x72, 0x65, 0x31, 0x12, 0x30,
+ 0x10, 0x06, 0x03, 0x55, 0x04, 0x07, 0x0c, 0x09,
+ 0x43, 0x61, 0x6d, 0x62, 0x72, 0x69, 0x64, 0x67,
+ 0x65, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55,
+ 0x04, 0x0a, 0x0c, 0x07, 0x41, 0x52, 0x4d, 0x20,
+ 0x4c, 0x74, 0x64, 0x31, 0x29, 0x30, 0x27, 0x06,
+ 0x03, 0x55, 0x04, 0x03, 0x0c, 0x20, 0x30, 0x31,
+ 0x35, 0x64, 0x37, 0x35, 0x65, 0x62, 0x30, 0x66,
+ 0x65, 0x33, 0x30, 0x32, 0x34, 0x32, 0x30, 0x61,
+ 0x30, 0x31, 0x36, 0x34, 0x30, 0x35, 0x30, 0x33,
+ 0x63, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x59,
+ 0x30, 0x13, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce,
+ 0x3d, 0x02, 0x01, 0x06, 0x08, 0x2a, 0x86, 0x48,
+ 0xce, 0x3d, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00,
+ 0x04, 0x65, 0x4b, 0x1c, 0x37, 0xd6, 0x47, 0x10,
+ 0x8d, 0x8a, 0x3b, 0xa9, 0xd9, 0xa8, 0xba, 0x89,
+ 0xe2, 0x56, 0x2a, 0x0a, 0x07, 0xbb, 0x46, 0xb5,
+ 0xff, 0x58, 0x91, 0x81, 0xd2, 0x8f, 0xa2, 0xc4,
+ 0xe4, 0x3f, 0x3b, 0xdd, 0x66, 0x73, 0x79, 0x64,
+ 0xf5, 0x73, 0x0f, 0x41, 0x47, 0xa9, 0x6e, 0x4f,
+ 0x75, 0x49, 0xa9, 0x53, 0x6a, 0xeb, 0xa4, 0xd7,
+ 0x6b, 0x37, 0xd9, 0xec, 0x48, 0xe5, 0xce, 0xab,
+ 0x3e, 0xa3, 0x2a, 0x30, 0x28, 0x30, 0x12, 0x06,
+ 0x09, 0x2b, 0x06, 0x01, 0x04, 0x01, 0xa0, 0x20,
+ 0x81, 0x49, 0x04, 0x05, 0x02, 0x03, 0x40, 0x00,
+ 0x91, 0x30, 0x12, 0x06, 0x03, 0x55, 0x1d, 0x13,
+ 0x01, 0x01, 0xff, 0x04, 0x08, 0x30, 0x06, 0x01,
+ 0x01, 0xff, 0x02, 0x01, 0x00, 0x30, 0x0a, 0x06,
+ 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03,
+ 0x02, 0x03, 0x49, 0x00, 0x30, 0x46, 0x02, 0x21,
+ 0x00, 0xfc, 0x47, 0x35, 0x0e, 0x23, 0xaf, 0x34,
+ 0x04, 0xc9, 0x1b, 0xed, 0x43, 0x80, 0x81, 0xed,
+ 0xfb, 0x2f, 0x1d, 0x8b, 0x1b, 0x96, 0xcd, 0xdd,
+ 0xa7, 0x85, 0xb6, 0x72, 0x19, 0xc7, 0x57, 0xd5,
+ 0x18, 0x02, 0x21, 0x00, 0x98, 0x31, 0x66, 0x9c,
+ 0x49, 0x14, 0x22, 0x6c, 0xa0, 0x82, 0x8d, 0x37,
+ 0x90, 0x1b, 0x9a, 0xd3, 0x5d, 0x65, 0x07, 0xb7,
+ 0x99, 0x3d, 0xcd, 0x4a, 0x42, 0x4e, 0x20, 0xe3,
+ 0xdb, 0x3d, 0x43, 0xce };
 
-const uint8_t MBED_CLOUD_DEV_BOOTSTRAP_DEVICE_CERTIFICATE[] =
-{ 0x0 };
+const uint8_t MBED_CLOUD_DEV_BOOTSTRAP_SERVER_ROOT_CA_CERTIFICATE[] = 
+{ 0x30, 0x82, 0x02, 0x32, 0x30, 0x82, 0x01, 0xd9,
+ 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x45,
+ 0x5e, 0x28, 0x41, 0x2b, 0xca, 0xf1, 0xb1, 0x4e,
+ 0xea, 0xad, 0x06, 0x25, 0x6a, 0xd8, 0x4a, 0x30,
+ 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d,
+ 0x04, 0x03, 0x02, 0x30, 0x71, 0x31, 0x0b, 0x30,
+ 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02,
+ 0x47, 0x42, 0x31, 0x17, 0x30, 0x15, 0x06, 0x03,
+ 0x55, 0x04, 0x08, 0x13, 0x0e, 0x43, 0x61, 0x6d,
+ 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x73, 0x68,
+ 0x69, 0x72, 0x65, 0x31, 0x12, 0x30, 0x10, 0x06,
+ 0x03, 0x55, 0x04, 0x07, 0x13, 0x09, 0x43, 0x61,
+ 0x6d, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x31,
+ 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x0a,
+ 0x13, 0x07, 0x41, 0x52, 0x4d, 0x20, 0x4c, 0x74,
+ 0x64, 0x31, 0x23, 0x30, 0x21, 0x06, 0x03, 0x55,
+ 0x04, 0x03, 0x13, 0x1a, 0x41, 0x52, 0x4d, 0x20,
+ 0x4f, 0x66, 0x66, 0x69, 0x63, 0x69, 0x61, 0x6c,
+ 0x53, 0x20, 0x42, 0x6f, 0x6f, 0x74, 0x73, 0x74,
+ 0x72, 0x61, 0x70, 0x20, 0x43, 0x41, 0x30, 0x20,
+ 0x17, 0x0d, 0x31, 0x37, 0x30, 0x33, 0x32, 0x30,
+ 0x31, 0x35, 0x31, 0x31, 0x33, 0x33, 0x5a, 0x18,
+ 0x0f, 0x32, 0x30, 0x35, 0x32, 0x30, 0x33, 0x32,
+ 0x30, 0x31, 0x35, 0x32, 0x31, 0x33, 0x33, 0x5a,
+ 0x30, 0x71, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03,
+ 0x55, 0x04, 0x06, 0x13, 0x02, 0x47, 0x42, 0x31,
+ 0x17, 0x30, 0x15, 0x06, 0x03, 0x55, 0x04, 0x08,
+ 0x13, 0x0e, 0x43, 0x61, 0x6d, 0x62, 0x72, 0x69,
+ 0x64, 0x67, 0x65, 0x73, 0x68, 0x69, 0x72, 0x65,
+ 0x31, 0x12, 0x30, 0x10, 0x06, 0x03, 0x55, 0x04,
+ 0x07, 0x13, 0x09, 0x43, 0x61, 0x6d, 0x62, 0x72,
+ 0x69, 0x64, 0x67, 0x65, 0x31, 0x10, 0x30, 0x0e,
+ 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x07, 0x41,
+ 0x52, 0x4d, 0x20, 0x4c, 0x74, 0x64, 0x31, 0x23,
+ 0x30, 0x21, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13,
+ 0x1a, 0x41, 0x52, 0x4d, 0x20, 0x4f, 0x66, 0x66,
+ 0x69, 0x63, 0x69, 0x61, 0x6c, 0x53, 0x20, 0x42,
+ 0x6f, 0x6f, 0x74, 0x73, 0x74, 0x72, 0x61, 0x70,
+ 0x20, 0x43, 0x41, 0x30, 0x59, 0x30, 0x13, 0x06,
+ 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01,
+ 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x03,
+ 0x01, 0x07, 0x03, 0x42, 0x00, 0x04, 0xf7, 0xdc,
+ 0x05, 0x70, 0x4f, 0x1b, 0x9d, 0xa8, 0x66, 0x52,
+ 0xf0, 0xb4, 0x99, 0x05, 0xe3, 0x89, 0x73, 0x08,
+ 0x4e, 0x23, 0x67, 0xdb, 0x6b, 0xac, 0x5a, 0xbe,
+ 0xab, 0xb0, 0x06, 0x49, 0xff, 0xd6, 0xc5, 0xd0,
+ 0x82, 0xbd, 0x45, 0xd5, 0x1b, 0xc2, 0x2f, 0x39,
+ 0x02, 0x3c, 0xf2, 0xa5, 0x42, 0x78, 0xf7, 0x55,
+ 0x9e, 0x9f, 0xdb, 0x3b, 0x77, 0xba, 0x0e, 0xa1,
+ 0x9f, 0x93, 0xcc, 0x73, 0x97, 0x99, 0xa3, 0x51,
+ 0x30, 0x4f, 0x30, 0x0b, 0x06, 0x03, 0x55, 0x1d,
+ 0x0f, 0x04, 0x04, 0x03, 0x02, 0x01, 0x86, 0x30,
+ 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01,
+ 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff,
+ 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04,
+ 0x16, 0x04, 0x14, 0xd5, 0x67, 0x40, 0xe7, 0xe2,
+ 0x8e, 0x96, 0x60, 0xb1, 0xb7, 0xbc, 0x68, 0xe9,
+ 0x76, 0xc9, 0x0e, 0xa4, 0xe6, 0x90, 0x9a, 0x30,
+ 0x10, 0x06, 0x09, 0x2b, 0x06, 0x01, 0x04, 0x01,
+ 0x82, 0x37, 0x15, 0x01, 0x04, 0x03, 0x02, 0x01,
+ 0x00, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48,
+ 0xce, 0x3d, 0x04, 0x03, 0x02, 0x03, 0x47, 0x00,
+ 0x30, 0x44, 0x02, 0x20, 0x09, 0x7d, 0xce, 0x2f,
+ 0x1c, 0x93, 0xf9, 0x1f, 0x5f, 0x0f, 0xf5, 0x02,
+ 0x76, 0x7e, 0xa2, 0xf0, 0x5b, 0x1f, 0xc9, 0xe4,
+ 0x04, 0xae, 0x58, 0xf0, 0xd6, 0x3d, 0xea, 0x1a,
+ 0xf4, 0x81, 0x4d, 0x87, 0x02, 0x20, 0x0c, 0xd4,
+ 0xbd, 0x67, 0xa4, 0xf4, 0xd6, 0x3d, 0x52, 0xa5,
+ 0xbe, 0x6d, 0x66, 0x03, 0xc5, 0xb1, 0x29, 0x7e,
+ 0x9a, 0xb0, 0x19, 0x30, 0x69, 0x9d, 0x7d, 0x72,
+ 0xb7, 0x88, 0x3c, 0xb9, 0x94, 0x9b };
 
-const uint8_t MBED_CLOUD_DEV_BOOTSTRAP_SERVER_ROOT_CA_CERTIFICATE[] =
-{ 0x0 };
+const uint8_t MBED_CLOUD_DEV_LWM2M_SERVER_ROOT_CA_CERTIFICATE[] = 
+{ 0x30, 0x82, 0x02, 0x1d, 0x30, 0x82, 0x01, 0xc3,
+ 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x48,
+ 0x74, 0xf6, 0xaf, 0xd3, 0xce, 0x7b, 0xb7, 0x40,
+ 0xa3, 0x02, 0xc6, 0x6f, 0x4f, 0xa1, 0xed, 0x30,
+ 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d,
+ 0x04, 0x03, 0x02, 0x30, 0x66, 0x31, 0x0b, 0x30,
+ 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02,
+ 0x47, 0x42, 0x31, 0x17, 0x30, 0x15, 0x06, 0x03,
+ 0x55, 0x04, 0x08, 0x13, 0x0e, 0x43, 0x61, 0x6d,
+ 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x73, 0x68,
+ 0x69, 0x72, 0x65, 0x31, 0x12, 0x30, 0x10, 0x06,
+ 0x03, 0x55, 0x04, 0x07, 0x13, 0x09, 0x43, 0x61,
+ 0x6d, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x31,
+ 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x0a,
+ 0x13, 0x07, 0x41, 0x52, 0x4d, 0x20, 0x4c, 0x74,
+ 0x64, 0x31, 0x18, 0x30, 0x16, 0x06, 0x03, 0x55,
+ 0x04, 0x03, 0x13, 0x0f, 0x41, 0x52, 0x4d, 0x20,
+ 0x4f, 0x53, 0x20, 0x4c, 0x57, 0x4d, 0x32, 0x4d,
+ 0x20, 0x43, 0x41, 0x30, 0x20, 0x17, 0x0d, 0x31,
+ 0x37, 0x30, 0x33, 0x32, 0x30, 0x31, 0x35, 0x32,
+ 0x39, 0x32, 0x32, 0x5a, 0x18, 0x0f, 0x32, 0x30,
+ 0x35, 0x32, 0x30, 0x33, 0x32, 0x30, 0x31, 0x35,
+ 0x33, 0x39, 0x32, 0x32, 0x5a, 0x30, 0x66, 0x31,
+ 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06,
+ 0x13, 0x02, 0x47, 0x42, 0x31, 0x17, 0x30, 0x15,
+ 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x0e, 0x43,
+ 0x61, 0x6d, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65,
+ 0x73, 0x68, 0x69, 0x72, 0x65, 0x31, 0x12, 0x30,
+ 0x10, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x09,
+ 0x43, 0x61, 0x6d, 0x62, 0x72, 0x69, 0x64, 0x67,
+ 0x65, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55,
+ 0x04, 0x0a, 0x13, 0x07, 0x41, 0x52, 0x4d, 0x20,
+ 0x4c, 0x74, 0x64, 0x31, 0x18, 0x30, 0x16, 0x06,
+ 0x03, 0x55, 0x04, 0x03, 0x13, 0x0f, 0x41, 0x52,
+ 0x4d, 0x20, 0x4f, 0x53, 0x20, 0x4c, 0x57, 0x4d,
+ 0x32, 0x4d, 0x20, 0x43, 0x41, 0x30, 0x59, 0x30,
+ 0x13, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d,
+ 0x02, 0x01, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce,
+ 0x3d, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00, 0x04,
+ 0xea, 0xdc, 0xb1, 0xd7, 0xed, 0xbc, 0x98, 0x68,
+ 0xa3, 0xc6, 0xb3, 0x52, 0xf0, 0x9d, 0xb8, 0xc6,
+ 0x3f, 0xd5, 0x28, 0x0a, 0xc9, 0xdf, 0xb2, 0xee,
+ 0xbd, 0x28, 0x83, 0xa4, 0x49, 0x26, 0xb5, 0x9f,
+ 0xf7, 0x34, 0xdd, 0x2a, 0x44, 0xba, 0x01, 0xec,
+ 0x1d, 0xdf, 0x83, 0xbb, 0xd6, 0xe4, 0x80, 0x18,
+ 0x4f, 0x9a, 0x2a, 0x72, 0x37, 0x80, 0x81, 0x40,
+ 0x91, 0x4b, 0xd6, 0x85, 0x96, 0xee, 0xd4, 0xe7,
+ 0xa3, 0x51, 0x30, 0x4f, 0x30, 0x0b, 0x06, 0x03,
+ 0x55, 0x1d, 0x0f, 0x04, 0x04, 0x03, 0x02, 0x01,
+ 0x86, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13,
+ 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01,
+ 0x01, 0xff, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d,
+ 0x0e, 0x04, 0x16, 0x04, 0x14, 0x38, 0xab, 0x7f,
+ 0xef, 0x5e, 0xf6, 0x70, 0xe5, 0xab, 0x6d, 0x08,
+ 0x73, 0xba, 0x48, 0x63, 0x71, 0x59, 0x85, 0x86,
+ 0x04, 0x30, 0x10, 0x06, 0x09, 0x2b, 0x06, 0x01,
+ 0x04, 0x01, 0x82, 0x37, 0x15, 0x01, 0x04, 0x03,
+ 0x02, 0x01, 0x00, 0x30, 0x0a, 0x06, 0x08, 0x2a,
+ 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x02, 0x03,
+ 0x48, 0x00, 0x30, 0x45, 0x02, 0x21, 0x00, 0x83,
+ 0xb5, 0x3b, 0x4e, 0x00, 0x6b, 0x14, 0x28, 0x08,
+ 0xc4, 0x9b, 0x9e, 0xb2, 0x1b, 0xbf, 0x69, 0xc8,
+ 0xc5, 0x63, 0xe1, 0x06, 0xa7, 0x0d, 0xdf, 0x52,
+ 0xdb, 0xac, 0xb9, 0x73, 0x14, 0x4e, 0x40, 0x02,
+ 0x20, 0x49, 0xa5, 0x60, 0x11, 0xce, 0x05, 0x6a,
+ 0x44, 0x97, 0xf1, 0xff, 0x19, 0x04, 0x77, 0x51,
+ 0x65, 0x04, 0x5b, 0xb1, 0x35, 0xf0, 0xf3, 0xaf,
+ 0x58, 0xb2, 0x1d, 0xc2, 0x1f, 0x6c, 0x61, 0xb8,
+ 0x7b };
 
-const uint8_t MBED_CLOUD_DEV_BOOTSTRAP_DEVICE_PRIVATE_KEY[] =
-{ 0x0 };
+const uint8_t MBED_CLOUD_DEV_BOOTSTRAP_DEVICE_PRIVATE_KEY[] = 
+{ 0x30, 0x81, 0x93, 0x02, 0x01, 0x00, 0x30, 0x13,
+ 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02,
+ 0x01, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d,
+ 0x03, 0x01, 0x07, 0x04, 0x79, 0x30, 0x77, 0x02,
+ 0x01, 0x01, 0x04, 0x20, 0xa7, 0x55, 0x4b, 0xf8,
+ 0x2b, 0xb1, 0x4c, 0xec, 0x06, 0xe0, 0x38, 0xd7,
+ 0x0d, 0xd8, 0x9c, 0x3b, 0x78, 0x2c, 0xfd, 0x97,
+ 0xb6, 0xa5, 0x1f, 0xf9, 0xf4, 0xfc, 0x77, 0x12,
+ 0x0e, 0xdf, 0x5b, 0xfc, 0xa0, 0x0a, 0x06, 0x08,
+ 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x03, 0x01, 0x07,
+ 0xa1, 0x44, 0x03, 0x42, 0x00, 0x04, 0x65, 0x4b,
+ 0x1c, 0x37, 0xd6, 0x47, 0x10, 0x8d, 0x8a, 0x3b,
+ 0xa9, 0xd9, 0xa8, 0xba, 0x89, 0xe2, 0x56, 0x2a,
+ 0x0a, 0x07, 0xbb, 0x46, 0xb5, 0xff, 0x58, 0x91,
+ 0x81, 0xd2, 0x8f, 0xa2, 0xc4, 0xe4, 0x3f, 0x3b,
+ 0xdd, 0x66, 0x73, 0x79, 0x64, 0xf5, 0x73, 0x0f,
+ 0x41, 0x47, 0xa9, 0x6e, 0x4f, 0x75, 0x49, 0xa9,
+ 0x53, 0x6a, 0xeb, 0xa4, 0xd7, 0x6b, 0x37, 0xd9,
+ 0xec, 0x48, 0xe5, 0xce, 0xab, 0x3e };
 
 const char MBED_CLOUD_DEV_MANUFACTURER[] = "dev_manufacturer";
 
@@ -46,8 +268,10 @@
 const char MBED_CLOUD_DEV_HARDWARE_VERSION[] = "dev_hardware_version";
 
 const uint32_t MBED_CLOUD_DEV_MEMORY_TOTAL_KB = 0;
+
 const uint32_t MBED_CLOUD_DEV_BOOTSTRAP_DEVICE_CERTIFICATE_SIZE = sizeof(MBED_CLOUD_DEV_BOOTSTRAP_DEVICE_CERTIFICATE);
 const uint32_t MBED_CLOUD_DEV_BOOTSTRAP_SERVER_ROOT_CA_CERTIFICATE_SIZE = sizeof(MBED_CLOUD_DEV_BOOTSTRAP_SERVER_ROOT_CA_CERTIFICATE);
+const uint32_t MBED_CLOUD_DEV_LWM2M_SERVER_ROOT_CA_CERTIFICATE_SIZE = sizeof(MBED_CLOUD_DEV_LWM2M_SERVER_ROOT_CA_CERTIFICATE);
 const uint32_t MBED_CLOUD_DEV_BOOTSTRAP_DEVICE_PRIVATE_KEY_SIZE = sizeof(MBED_CLOUD_DEV_BOOTSTRAP_DEVICE_PRIVATE_KEY);
 
 #endif //__MBED_CLOUD_DEV_CREDENTIALS_H__
--- a/simple-mbed-cloud-client.lib	Wed Feb 14 10:43:56 2018 +0000
+++ b/simple-mbed-cloud-client.lib	Wed Feb 14 13:20:30 2018 +0000
@@ -1,1 +1,1 @@
-https://github.com/bridadan/simple-mbed-cloud-client/#fdb9b7f54c5379287ef6f274fd4c267fdbd6bc8e
+https://github.com/ARMmbed/simple-mbed-cloud-client/#5163a8da0281c6c1d3d84d5f693b45da485d928b