Simple Mbed Cloud client application using features of K64 & K66 including Ethernet and SD Card

Fork of mbed-cloud-example_K64_K66 by Mac Lobdell

DEPRECATED

This example application is not maintained and not recommended. It uses an old version of Mbed OS, Pelion DM, and Arm toolchain. It doesn't work with Mbed Studio.

Please use: https://os.mbed.com/teams/mbed-os-examples/code/mbed-os-example-pelion/

Files at this revision

API Documentation at this revision

Comitter:
MarceloSalazar
Date:
Wed Feb 14 10:43:56 2018 +0000
Parent:
0:e13a8a944e25
Child:
2:6ed27f413b30
Commit message:
Simplified version of application

Changed in this revision

README.md Show annotated file Show diff for this revision Revisions of this file
combine.sh Show diff for this revision Revisions of this file
combine_bootloader_with_app.py Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-bootloader-k64f.bin 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
setup.cpp Show diff for this revision Revisions of this file
setup.h 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/README.md	Tue Feb 13 10:07:23 2018 +0000
+++ b/README.md	Wed Feb 14 10:43:56 2018 +0000
@@ -59,4 +59,3 @@
 
 None.
 
-
--- a/combine.sh	Tue Feb 13 10:07:23 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-python combine_bootloader_with_app.py -b mbed-bootloader-k64f.bin -a BUILD/K64F/GCC_ARM/simple-mbed-cloud-client-example.bin --app-offset 0x20400 --header-offset 0x20000 -o combined.bin
--- a/combine_bootloader_with_app.py	Tue Feb 13 10:07:23 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,253 +0,0 @@
-#!/usr/bin/env python
-
-## ----------------------------------------------------------------------------
-## Copyright 2016-2017 ARM Ltd.
-##
-## 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.
-## ----------------------------------------------------------------------------
-
-from os import path
-import json
-import hashlib, zlib, struct
-import time
-import sys
-
-'''
-define FIRMWARE_HEADER_MAGIC   0x5a51b3d4UL
-define FIRMWARE_HEADER_VERSION 2
-define ARM_UC_SHA512_SIZE     (512/8)
-define ARM_UC_GUID_SIZE       (128/8)
-typedef struct _arm_uc_internal_header_t
-{
-    /* Metadata-header specific magic code */
-    uint32_t headerMagic;
-
-    /* Revision number for metadata header. */
-    uint32_t headerVersion;
-
-    /* Version number accompanying the firmware. Larger numbers imply more
-       recent and preferred versions. This is used for determining the
-       selection order when multiple versions are available. For downloaded
-       firmware the manifest timestamp is used as the firmware version.
-    */
-    uint64_t firmwareVersion;
-
-    /* Total space (in bytes) occupied by the firmware BLOB. */
-    uint64_t firmwareSize;
-
-    /* Firmware hash calculated over the firmware size. Should match the hash
-       generated by standard command line tools, e.g., shasum on Linux/Mac.
-    */
-    uint8_t firmwareHash[ARM_UC_SHA512_SIZE];
-
-    /* The ID for the update campaign that resulted in the firmware update.
-    */
-    uint8_t campaign[ARM_UC_GUID_SIZE];
-
-    /* Size of the firmware signature. Must be 0 if no signature is supplied. */
-    uint32_t firmwareSignatureSize;
-
-    /* Header 32 bit CRC. Calculated over the entire header, including the CRC
-       field, but with the CRC set to zero.
-    */
-    uint32_t headerCRC;
-
-    /* Optional firmware signature. Hashing algorithm should be the same as the
-       one used for the firmware hash. The firmwareSignatureSize must be set.
-    */
-    uint8_t firmwareSignature[0];
-} arm_uc_internal_header_t;
-'''
-
-# define defaults to go into the metadata header
-SIZEOF_SHA512     = int(512/8)
-SIZEOF_GUID       = int(128/8)
-FIRMWARE_HEADER_MAGIC = 0x5a51b3d4
-FIRMWARE_HEADER_VERSION = 2
-header_format = ">2I2Q{}s{}s2I".format(SIZEOF_SHA512, SIZEOF_GUID)
-
-if sys.version_info < (3,):
-    def b(x):
-        return bytearray(x)
-else:
-    def b(x):
-        return x
-
-def create_header(app_blob, firmwareVersion):
-    # calculate the hash of the application
-    firmwareHash = hashlib.sha256(app_blob).digest()
-
-    # calculate the total size which is defined as the application size + metadata header
-    firmwareSize = len(app_blob)
-
-    # set campaign GUID to 0
-    campaign = b'\00'
-
-    # signature not supported, set size to 0
-    signatureSize = 0
-
-    print ('imageSize:    {}'.format(firmwareSize))
-    print ('imageHash:    {}'.format(''.join(['{:0>2x}'.format(c) for c in b(firmwareHash)])))
-    print ('imageversion: {}'.format(firmwareVersion))
-
-    # construct struct for CRC calculation
-    headerCRC = 0
-    FirmwareHeader = struct.pack(header_format,
-                                 FIRMWARE_HEADER_MAGIC,
-                                 FIRMWARE_HEADER_VERSION,
-                                 firmwareVersion,
-                                 firmwareSize,
-                                 firmwareHash,
-                                 campaign,
-                                 signatureSize,
-                                 headerCRC)
-
-    # calculate checksum over header, including signatureSize but without headerCRC
-    headerCRC = zlib.crc32(FirmwareHeader[:-4]) & 0xffffffff
-
-    # Pack the data into a binary blob
-    FirmwareHeader = struct.pack(header_format,
-                                 FIRMWARE_HEADER_MAGIC,
-                                 FIRMWARE_HEADER_VERSION,
-                                 firmwareVersion,
-                                 firmwareSize,
-                                 firmwareHash,
-                                 campaign,
-                                 signatureSize,
-                                 headerCRC)
-
-    return FirmwareHeader
-
-
-def combine(bootloader_blob, app_blob, app_offset, hdr_offset, output, version):
-
-    # create header to go with the application binary
-    FirmwareHeader = create_header(app_blob, version)
-
-    # write the bootloader first
-    offset = 0
-    output.write(bootloader_blob)
-    offset += len(bootloader_blob)
-
-    # write the padding between bootloader and firmware header
-    output.write(b'\00' * (hdr_offset - offset))
-    offset += (hdr_offset - offset)
-
-    # write firmware header
-    output.write(FirmwareHeader)
-    offset += len(FirmwareHeader)
-
-    # write padding between header and application
-    output.write(b'\00' * (app_offset - offset))
-
-    # write the application
-    output.write(app_blob)
-
-
-if __name__ == '__main__':
-    import argparse
-
-    parser = argparse.ArgumentParser(
-        description='Combine bootloader with application adding metadata header.')
-
-    def offset_arg(s):
-        if s.startswith('0x'):
-            return int(s, 16)
-        else:
-            return int(s)
-
-    bin_map = {
-        'k64f': {
-            'mem_start': '0x0'
-        },
-        'ublox_evk_odin_w2': {
-            'mem_start': '0x08000000'
-        },
-        'nucleo_f429zi': {
-            'mem_start': '0x08000000'
-        }
-    }
-
-    curdir = path.dirname(path.abspath(__file__))
-
-    def parse_mbed_app_offset(mcu, key):
-        mem_start = bin_map[mcu]["mem_start"]
-        with open(path.join(curdir, "..", "mbed_app.json")) as fd:
-            mbed_json = json.load(fd)
-            offset = mbed_json["target_overrides"][mcu.upper()][key]
-            return offset_arg(offset) - offset_arg(mem_start)
-
-    # specify arguments
-    parser.add_argument('-m', '--mcu', type=lambda s : s.lower().replace("-","_"), required=False,
-                        help='mcu', choices=bin_map.keys())
-    parser.add_argument('-b', '--bootloader',    type=argparse.FileType('rb'), required=False,
-                        help='path to the bootloader binary')
-    parser.add_argument('-a', '--app',           type=argparse.FileType('rb'), required=True,
-                        help='path to application binary')
-    parser.add_argument('-c', '--app-offset',    type=offset_arg,              required=False,
-                        help='offset of the application')
-    parser.add_argument('-d', '--header-offset', type=offset_arg,              required=False,
-                        help='offset of the firmware metadata header')
-    parser.add_argument('-o', '--output',        type=argparse.FileType('wb'), required=True,
-                        help='output combined file path')
-    parser.add_argument('-s', '--set-version',   type=int,                     required=False,
-                        help='set version number', default=int(time.time()))
-
-    # workaround for http://bugs.python.org/issue9694
-    parser._optionals.title = "arguments"
-
-    # get and validate arguments
-    args = parser.parse_args()
-
-    if(not (args.mcu or args.bootloader)):
-        print("Please specify bootloader location or MCU")
-        exit(-1)
-
-    fname = ''
-    if args.mcu:
-        fname = path.join(curdir, 'mbed-bootloader-' + args.mcu.replace('_', '-')+'.bin')
-        if not path.exists(fname):
-            print("Specified MCU does not have a binary in this location")
-            exit(-1)
-
-    # Use specified bootloader or default if none is provided
-    bootloader = args.bootloader or open(fname, 'rb')
-
-    # read the contents of bootloader and application binaries into buffers
-    bootloader_blob = bootloader.read()
-    bootloader.close()
-    app_blob = args.app.read()
-    args.app.close()
-
-    # Use specified offsets or default if none are provided
-    if(not (args.mcu or args.app_offset)):
-        print("Please specify app offset or MCU")
-        exit(-1)
-    app_offset = args.app_offset or parse_mbed_app_offset(args.mcu, "target.mbed_app_start")
-
-    if(not (args.mcu or args.header_offset)):
-        print("Please specify header offset or MCU")
-        exit(-1)
-    header_offset = args.header_offset or parse_mbed_app_offset(args.mcu, "update-client.application-details")
-
-    # combine application and bootloader adding metadata info
-    combine(bootloader_blob, app_blob, app_offset, header_offset, args.output, args.set_version)
-
-    # close output file
-    output_fn = path.abspath(args.output.name)
-    args.output.close()
-
-    # print the output file path
-    print('Combined binary:' + output_fn)
--- a/main.cpp	Tue Feb 13 10:07:23 2018 +0000
+++ b/main.cpp	Wed Feb 14 10:43:56 2018 +0000
@@ -16,33 +16,47 @@
 // limitations under the License.
 // ----------------------------------------------------------------------------
 
+#include "mbed.h"
+#include "mbed-trace/mbed_trace.h"
+#include "mbed-trace-helper.h"
 #include "simple-mbed-cloud-client.h"
-#include "mbed.h"
+#include "key-config-manager/kcm_status.h"
+#include "key-config-manager/key_config_manager.h"
+#include "SDBlockDevice.h"
+#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().
-static M2MResource* button_res;
-static M2MResource* pattern_res;
-static M2MResource* blink_res;
+static MbedCloudClientResource* pattern_ptr;
 
 // Pointer to mbedClient, used for calling close function.
 static SimpleMbedCloudClient *client;
 
-void pattern_updated(const char *)
- {
-    printf("PUT received, new value: %s\n", pattern_res->get_value_string().c_str());
+static bool button_pressed = false;
+
+void button_press() {
+    button_pressed = true;
+}
+
+void pattern_updated(const char *) {
+    printf("PUT received, new value: %s\n", pattern_ptr->get_value());
 }
 
 void blink_callback(void *) {
-    String pattern_string = pattern_res->get_value_string();
-    const char *pattern = pattern_string.c_str();
+    const char *pattern = pattern_ptr->get_value();
     printf("LED pattern = %s\n", pattern);
     // The pattern is something like 500:200:500, so parse that.
     // LED blinking is done while parsing.
-    toggle_led();
+    led = !led;
     while (*pattern != '\0') {
         // Wait for requested time.
-        do_wait(atoi(pattern));
-        toggle_led();
+        wait_ms(atoi(pattern));
+        led = !led;
         // Search for next value.
         pattern = strchr(pattern, ':');
         if(!pattern) {
@@ -50,7 +64,8 @@
         }
         pattern++;
     }
-    led_off();
+
+    led = LED_OFF;
 }
 
 void button_notification_status_callback(const M2MBase& object, const NoticationDeliveryStatus status)
@@ -83,14 +98,14 @@
 }
 
 // This function is called when a POST request is received for resource 5000/0/1.
-void unregister(void *)
+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(void *)
+void factory_reset_cb(void *)
 {
     printf("Factory reset resource executed\n");
     client->close();
@@ -109,45 +124,98 @@
     // while replacing the application binary.
     wait(2);
 
-    // SimpleClient is used for registering and unregistering resources to a server.
-    SimpleMbedCloudClient mbedClient;
+    // Misc OS setup
+    srand(time(NULL));
+
+    EthernetInterface net;
+    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) {
+        printf("Failed to init SD card\r\n");
+        return -1;
+    }
 
+    // Mount the file system (reformatting on failure)
+    status = fs.mount(&sd);
+    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;
+        } else {
+            printf("Reformat and mount complete\r\n");
+        }
+    }
+
+    printf("Connecting to the network using Ethernet...\n");
+
+    status = net.connect();
+    if (status) {
+        printf("Connection to Network Failed %d!\n", status);
+        return -1;
+    } else {
+        const char *ip_addr  = net.get_ip_address();
+        printf("Connected successfully\n");
+        printf("IP address %s\n", ip_addr);
+    }
+
+    SimpleMbedCloudClient mbedClient(&net);
     // Save pointer to mbedClient so that other functions can access it.
     client = &mbedClient;
 
+    status = mbedClient.init();
+    if (status) {
+        return -1;
+    }
+
     printf("Client initialized\r\n");
-#ifdef MBED_HEAP_STATS_ENABLED
-    heap_stats();
-#endif
 
-    // Create resource for button count. Path of this resource will be: 3200/0/5501.
-    button_res = mbedClient.add_cloud_resource(3200, 0, 5501, "button_resource", M2MResourceInstance::INTEGER,
-                              M2MBase::GET_ALLOWED, 0, true, NULL, (void*)button_notification_status_callback);
+    // Mbed Cloud Client resource setup
+    MbedCloudClientResource *button = mbedClient.create_resource("3200/0/5501", "button_resource");
+    button->set_value("0");
+    button->methods(M2MMethod::GET);
+    button->observable(true);
+    button->attach_notification(M2MMethod::GET, (void*)button_notification_status_callback);
 
-    // Create resource for led blinking pattern. Path of this resource will be: 3201/0/5853.
-    pattern_res = mbedClient.add_cloud_resource(3201, 0, 5853, "pattern_resource", M2MResourceInstance::STRING,
-                               M2MBase::GET_PUT_ALLOWED, "500:500:500:500", false, (void*)pattern_updated, NULL);
-
-    // Create resource for starting the led blinking. Path of this resource will be: 3201/0/5850.
-    blink_res = mbedClient.add_cloud_resource(3201, 0, 5850, "blink_resource", M2MResourceInstance::STRING,
-                             M2MBase::POST_ALLOWED, "", false, (void*)blink_callback, NULL);
+    MbedCloudClientResource *pattern = mbedClient.create_resource("3201/0/5853", "pattern_resource");
+    pattern->set_value("500:500:500:500");
+    pattern->methods(M2MMethod::GET | M2MMethod::PUT);
+    pattern->attach(M2MMethod::PUT, (void*)pattern_updated);
+    pattern_ptr = pattern;
 
-    // Create resource for unregistering the device. Path of this resource will be: 5000/0/1.
-    mbedClient.add_cloud_resource(5000, 0, 1, "unregister", M2MResourceInstance::STRING,
-                 M2MBase::POST_ALLOWED, NULL, false, (void*)unregister, NULL);
+    MbedCloudClientResource *blink = mbedClient.create_resource("3201/0/5850", "blink_resource");
+    blink->methods(M2MMethod::POST);
+    blink->attach(M2MMethod::POST, (void*)blink_callback);
 
-    // Create resource for running factory reset for the device. Path of this resource will be: 5000/0/2.
-    mbedClient.add_cloud_resource(5000, 0, 2, "factory_reset", M2MResourceInstance::STRING,
-                 M2MBase::POST_ALLOWED, NULL, false, (void*)factory_reset, NULL);
+    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.
     while (mbedClient.is_register_called()) {
         static int button_count = 0;
-        do_wait(100);
-        if (button_clicked()) {
-            button_res->set_value(++button_count);
+        wait_ms(100);
+
+        if (button_pressed) {
+            button_pressed = false;
+            printf("Button clicked %d times\r\n", ++button_count);
+            button->set_value(button_count);
         }
     }
 
Binary file mbed-bootloader-k64f.bin has changed
--- a/mbed_app.json	Tue Feb 13 10:07:23 2018 +0000
+++ b/mbed_app.json	Wed Feb 14 10:43:56 2018 +0000
@@ -14,7 +14,6 @@
             "mbed-trace.enable": null
         },
         "K64F": {
-            "target.mbed_app_start": "0x00020400",
             "update-client.application-details": "0x00020000",
             "update-client.bootloader-details": "0x172e4"
         }
@@ -23,14 +22,6 @@
         "developer-mode": {
             "help": "Enable Developer mode to skip Factory enrollment",
             "value": 1
-        },
-        "button-pinname": {
-            "help": "PinName for button.",
-            "value": "BUTTON1"
-        },
-        "led-pinname": {
-            "help": "PinName for led, which is attached to led blink resource.",
-            "value": "LED_RED"
         }
     }
 }
--- a/mbed_cloud_dev_credentials.c	Tue Feb 13 10:07:23 2018 +0000
+++ b/mbed_cloud_dev_credentials.c	Wed Feb 14 10:43:56 2018 +0000
@@ -16,246 +16,24 @@
 #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[] = "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 char MBED_CLOUD_DEV_BOOTSTRAP_ENDPOINT_NAME[] = "";
+const char MBED_CLOUD_DEV_ACCOUNT_ID[] = "";
+const char MBED_CLOUD_DEV_BOOTSTRAP_SERVER_URI[] = "";
 
-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_DEVICE_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_SERVER_ROOT_CA_CERTIFICATE[] =
+{ 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 uint8_t MBED_CLOUD_DEV_BOOTSTRAP_DEVICE_PRIVATE_KEY[] =
+{ 0x0 };
 
 const char MBED_CLOUD_DEV_MANUFACTURER[] = "dev_manufacturer";
 
@@ -268,10 +46,8 @@
 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/setup.cpp	Tue Feb 13 10:07:23 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,352 +0,0 @@
-// ----------------------------------------------------------------------------
-// Copyright 2016-2017 ARM Ltd.
-//
-// 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.
-// ----------------------------------------------------------------------------
-
-
-///////////
-// INCLUDES
-///////////
-
-// Note: this macro is needed on armcc to get the the PRI*32 macros
-// from inttypes.h in a C++ code.
-#ifndef __STDC_FORMAT_MACROS
-#define __STDC_FORMAT_MACROS
-#endif
-
-#include "mbed.h"
-#include "setup.h"
-#include "memory_tests.h"
-#include "EthernetInterface.h" // Networking interface include
-#include "simple-mbed-cloud-client.h"
-#include "pal.h"
-#include "mbed-trace/mbed_trace.h"
-#include "mbed-trace-helper.h"
-#include "factory_configurator_client.h"
-
-#include "SDBlockDevice.h"
-#include "FATFileSystem.h"
-
-// Network interface
-#include "EthernetInterface.h"
-EthernetInterface eth;
-
-////////////////////////////////////////
-// PLATFORM SPECIFIC DEFINES & FUNCTIONS
-////////////////////////////////////////
-#define DEFAULT_FIRMWARE_PATH       "/sd/firmware"
-
-#include "mbed_trace.h"
-#define TRACE_GROUP "exam"
-
-
-// Define led on/off
-#ifdef TARGET_STM
-#define LED_ON (true)
-#else // #ifdef TARGET_STM
-#define LED_ON (false)
-#endif // #ifdef TARGET_STM
-
-#define LED_OFF (!LED_ON)
-
-DigitalOut  led(MBED_CONF_APP_LED_PINNAME, LED_OFF);
-InterruptIn button(MBED_CONF_APP_BUTTON_PINNAME);
-
-static bool button_pressed = false;
-static void button_press(void);
-
-// Block device and Filesystem
-SDBlockDevice sd(PTE3, PTE1, PTE2, PTE4);
-FATFileSystem fs("sd", &sd);
-
-
-Thread resource_thread;
-
-NetworkInterface* network_interface = NULL;
-
-
-void button_press(void)
-{
-    button_pressed = true;
-}
-
-/////////////////////////
-// SETUP.H IMPLEMENTATION
-/////////////////////////
-int initPlatform()
-{
-    /* Explicit declaration to catch Block Device initialization errors. */
-    int sd_ret = sd.init();
-
-    if(sd_ret != BD_ERROR_OK) {
-        tr_error("initPlatform() - sd.init() failed with %d\n", sd_ret);
-        printf("SD card initialization failed. Verify that SD-card is attached.\n");
-        return -1;
-    }
-    tr_debug("initPlatform() - BlockDevice init OK.\n");
-
-    if(MBED_CONF_APP_BUTTON_PINNAME != NC) {
-        button.fall(&button_press);
-    }
-
-    return 0;
-}
-
-bool rmFirmwareImages()
-{
-    palStatus_t status = PAL_SUCCESS;
-    status = pal_fsRmFiles(DEFAULT_FIRMWARE_PATH);
-    if(status == PAL_SUCCESS) {
-        printf("Firmware storage erased.\n");
-    } else if (status == PAL_ERR_FS_NO_PATH) {
-        printf("Firmware path not found/does not exist.\n");
-    } else {
-        printf("Firmware storage erasing failed with %" PRId32, status);
-        return false;
-    }
-    return true;
-}
-
-int reformat_storage()
-{
-    int reformat_result = -1;
-    printf("Autoformatting the storage.\n");
-    if (1/*sd*/) {
-        // TODO
-        // reformat_result = fs.reformat(sd);
-        if (reformat_result != 0) {
-            printf("Autoformatting failed with error %d\n", reformat_result);
-        }
-    }
-    return reformat_result;
-}
-
-int run_application(int(*function)(void))
-{
-    // application_init() runs the following initializations:
-    //  1. trace initialization
-    //  2. platform initialization
-    //  3. print memory statistics if MBED_HEAP_STATS_ENABLED is defined
-    //  4. FCC initialization.
-    if (!application_init()) {
-        printf("Initialization failed, exiting application!\n");
-        return 1;
-    }
-    return function();
-}
-
-// Helper function, could be moved someone sd
-void print_MAC(NetworkInterface* network_interface, bool log_messages) {
-#if MBED_CONF_APP_NETWORK_INTERFACE != CELLULAR_ONBOARD
-    const char *mac_addr = network_interface->get_mac_address();
-    if (mac_addr == NULL) {
-        if (log_messages) {
-            printf("ERROR - No MAC address\n");
-        }
-        return;
-    }
-    if (log_messages) {
-        printf("MAC address %s\n", mac_addr);
-    }
-#endif
-}
-
-bool init_connection()
-{
-    int connect_success = -1;
-    bool log_messages = 1;
-
-    srand(time(NULL));
-
-    printf("Using Ethernet\n");
-
-    network_interface = &eth;
-    connect_success = eth.connect();
-
-    if(connect_success == 0) {
-        if (log_messages) {
-            printf("Connected to Network successfully\n");
-            print_MAC(network_interface, log_messages);
-        }
-    } else {
-        if (log_messages) {
-            print_MAC(network_interface, log_messages);
-            printf("Connection to Network Failed %d!\n", connect_success);
-        }
-        return NULL;
-    }
-    const char *ip_addr  = network_interface->get_ip_address();
-    if (ip_addr == NULL) {
-        if (log_messages) {
-            printf("ERROR - No IP address\n");
-        }
-        return NULL;
-    }
-
-    if (log_messages) {
-        printf("IP address %s\n", ip_addr);
-    }
-
-    if(network_interface == NULL) {
-        return false;
-    }
-    return true;
-}
-
-void* get_network_interface()
-{
-    return network_interface;
-}
-
-
-void toggle_led(void)
-{
-    if (MBED_CONF_APP_LED_PINNAME != NC) {
-        led = !led;
-    }
-    else {
-        printf("Virtual LED toggled\n");
-    }
-}
-
-void led_off(void)
-{
-    if (MBED_CONF_APP_LED_PINNAME != NC) {
-        led = LED_OFF;
-    }
-    else {
-        printf("Virtual LED off\n");
-    }
-}
-
-uint8_t button_clicked(void)
-{
-    if (button_pressed) {
-        button_pressed = false;
-        return true;
-    }
-    return false;
-}
-
-void do_wait(int timeout_ms)
-{
-    wait_ms(timeout_ms);
-}
-
-
-static bool application_init_mbed_trace(void)
-{
-    // Create mutex for tracing to avoid broken lines in logs
-    if(!mbed_trace_helper_create_mutex()) {
-        printf("ERROR - Mutex creation for mbed_trace failed!\n");
-        return 1;
-    }
-
-    // Initialize mbed trace
-    mbed_trace_init();
-    mbed_trace_mutex_wait_function_set(mbed_trace_helper_mutex_wait);
-    mbed_trace_mutex_release_function_set(mbed_trace_helper_mutex_release);
-
-    return 0;
-}
-
-static void reset_storage(void)
-{
-    printf("Resets storage to an empty state.\n");
-    fcc_status_e delete_status = fcc_storage_delete();
-    if (delete_status != FCC_STATUS_SUCCESS) {
-        printf("Failed to delete storage - %d\n", delete_status);
-    }
-}
-
-static bool application_init_fcc(void)
-{
-    fcc_status_e status = fcc_init();
-    if(status != FCC_STATUS_SUCCESS) {
-        printf("fcc_init failed with status %d! - exit\n", status);
-        return 1;
-    }
-
-    // This is designed to simplify user-experience by auto-formatting the
-    // primary storage if no valid certificates exist.
-    // This should never be used for any kind of production devices.
-#ifndef MBED_CONF_APP_MCC_NO_AUTO_FORMAT
-    status = fcc_verify_device_configured_4mbed_cloud();
-    if (status != FCC_STATUS_SUCCESS) {
-        if (reformat_storage() != 0) {
-            return 1;
-        }
-    reset_storage();
-    }
-#endif
-
-    // Resets storage to an empty state.
-    // Use this function when you want to clear storage from all the factory-tool generated data and user data.
-    // After this operation device must be injected again by using factory tool or developer certificate.
-#ifdef RESET_STORAGE
-    reset_storage();
-#endif
-
-    // Deletes existing firmware images from storage.
-    // This deletes any existing firmware images during application startup.
-    // This compilation flag is currently implemented only for mbed OS.
-#ifdef RESET_FIRMWARE
-    bool status_erase = rmFirmwareImages();
-    if(status_erase == false) {
-        return 1;
-    }
-#endif
-
-#if MBED_CONF_APP_DEVELOPER_MODE == 1
-    printf("Start developer flow\n");
-    status = fcc_developer_flow();
-    if (status == FCC_STATUS_KCM_FILE_EXIST_ERROR) {
-        printf("Developer credentials already exists\n");
-    } else if (status != FCC_STATUS_SUCCESS) {
-        printf("Failed to load developer credentials - exit\n");
-        return 1;
-    }
-#endif
-    status = fcc_verify_device_configured_4mbed_cloud();
-    if (status != FCC_STATUS_SUCCESS) {
-        printf("Device not configured for mbed Cloud - exit\n");
-        return 1;
-    }
-
-    return 0;
-}
-
-bool application_init(void)
-{
-    if (application_init_mbed_trace() != 0) {
-        printf("Failed initializing mbed trace\n" );
-        return false;
-    }
-
-    if(initPlatform() != 0) {
-       printf("ERROR - initPlatform() failed!\n");
-       return false;
-    }
-
-    printf("Start Simple Mbed Cloud Client\n");
-
-    if (application_init_fcc() != 0) {
-        printf("Failed initializing FCC\n" );
-        return false;
-    }
-
-    return true;
-}
--- a/setup.h	Tue Feb 13 10:07:23 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,95 +0,0 @@
-// ----------------------------------------------------------------------------
-// Copyright 2016-2017 ARM Ltd.
-//
-// 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.
-// ----------------------------------------------------------------------------
-
-#ifndef SETUP_H
-#define SETUP_H
-
-#include <stdint.h>
-
-//FORWARD DECLARATION
-class M2MObject;
-namespace m2m {
-    template<class ObjectTemplate> class Vector;
-}
-
-using namespace m2m;
-
-typedef Vector<M2MObject *> M2MObjectList;
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// Interval to update resource value in ms
-#define INCREMENT_INTERVAL 25000
-
-typedef void (*main_t)(void);
-
-// Initialize platform
-// This function initializes screen and any other non-network
-// related platform specific initializations required.
-//
-// @returns
-//   0 for success, anything else for error
-extern int initPlatform();
-
-// Initialize network connection
-extern bool init_connection();
-
-// Returns network interface.
-extern void *get_network_interface();
-
-// Toggle led (if available)
-extern void toggle_led(void);
-
-// Put led off (if available)
-extern void led_off(void);
-
-// Check if button has been pressed (if available)
-extern uint8_t button_clicked(void);
-
-// Thread for updating resource value
-extern void increment_resource_thread(void* client);
-
-// Print heap allocations
-extern void print_heap_stats();
-
-// Print m2mobject sizes
-extern void print_m2mobject_stats();
-
-// Create set of objects to test size
-extern void create_m2mobject_test_set(M2MObjectList *object_list);
-
-// Wait
-extern void do_wait(int timeout_ms);
-
-int run_application(int(*function)(void));
-
-extern bool runProgram(main_t mainFunc);
-
-extern bool application_init(void);
-
-extern bool rmFirmwareImages(void);
-
-extern int reformat_storage(void);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
--- a/simple-mbed-cloud-client.lib	Tue Feb 13 10:07:23 2018 +0000
+++ b/simple-mbed-cloud-client.lib	Wed Feb 14 10:43:56 2018 +0000
@@ -1,1 +1,1 @@
-https://github.com/ARMmbed/simple-mbed-cloud-client/#919bc54a33df12591398d4602a583a61d97c53f7
+https://github.com/bridadan/simple-mbed-cloud-client/#fdb9b7f54c5379287ef6f274fd4c267fdbd6bc8e