
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.
Revision 1:1ccf36276cd3, committed 2018-02-14
- 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
--- 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 = ð - 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