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/

Committer:
MarceloSalazar
Date:
Tue Feb 13 10:07:23 2018 +0000
Revision:
0:e13a8a944e25
First version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MarceloSalazar 0:e13a8a944e25 1 // ----------------------------------------------------------------------------
MarceloSalazar 0:e13a8a944e25 2 // Copyright 2016-2017 ARM Ltd.
MarceloSalazar 0:e13a8a944e25 3 //
MarceloSalazar 0:e13a8a944e25 4 // SPDX-License-Identifier: Apache-2.0
MarceloSalazar 0:e13a8a944e25 5 //
MarceloSalazar 0:e13a8a944e25 6 // Licensed under the Apache License, Version 2.0 (the "License");
MarceloSalazar 0:e13a8a944e25 7 // you may not use this file except in compliance with the License.
MarceloSalazar 0:e13a8a944e25 8 // You may obtain a copy of the License at
MarceloSalazar 0:e13a8a944e25 9 //
MarceloSalazar 0:e13a8a944e25 10 // http://www.apache.org/licenses/LICENSE-2.0
MarceloSalazar 0:e13a8a944e25 11 //
MarceloSalazar 0:e13a8a944e25 12 // Unless required by applicable law or agreed to in writing, software
MarceloSalazar 0:e13a8a944e25 13 // distributed under the License is distributed on an "AS IS" BASIS,
MarceloSalazar 0:e13a8a944e25 14 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
MarceloSalazar 0:e13a8a944e25 15 // See the License for the specific language governing permissions and
MarceloSalazar 0:e13a8a944e25 16 // limitations under the License.
MarceloSalazar 0:e13a8a944e25 17 // ----------------------------------------------------------------------------
MarceloSalazar 0:e13a8a944e25 18
MarceloSalazar 0:e13a8a944e25 19
MarceloSalazar 0:e13a8a944e25 20 ///////////
MarceloSalazar 0:e13a8a944e25 21 // INCLUDES
MarceloSalazar 0:e13a8a944e25 22 ///////////
MarceloSalazar 0:e13a8a944e25 23
MarceloSalazar 0:e13a8a944e25 24 // Note: this macro is needed on armcc to get the the PRI*32 macros
MarceloSalazar 0:e13a8a944e25 25 // from inttypes.h in a C++ code.
MarceloSalazar 0:e13a8a944e25 26 #ifndef __STDC_FORMAT_MACROS
MarceloSalazar 0:e13a8a944e25 27 #define __STDC_FORMAT_MACROS
MarceloSalazar 0:e13a8a944e25 28 #endif
MarceloSalazar 0:e13a8a944e25 29
MarceloSalazar 0:e13a8a944e25 30 #include "mbed.h"
MarceloSalazar 0:e13a8a944e25 31 #include "setup.h"
MarceloSalazar 0:e13a8a944e25 32 #include "memory_tests.h"
MarceloSalazar 0:e13a8a944e25 33 #include "EthernetInterface.h" // Networking interface include
MarceloSalazar 0:e13a8a944e25 34 #include "simple-mbed-cloud-client.h"
MarceloSalazar 0:e13a8a944e25 35 #include "pal.h"
MarceloSalazar 0:e13a8a944e25 36 #include "mbed-trace/mbed_trace.h"
MarceloSalazar 0:e13a8a944e25 37 #include "mbed-trace-helper.h"
MarceloSalazar 0:e13a8a944e25 38 #include "factory_configurator_client.h"
MarceloSalazar 0:e13a8a944e25 39
MarceloSalazar 0:e13a8a944e25 40 #include "SDBlockDevice.h"
MarceloSalazar 0:e13a8a944e25 41 #include "FATFileSystem.h"
MarceloSalazar 0:e13a8a944e25 42
MarceloSalazar 0:e13a8a944e25 43 // Network interface
MarceloSalazar 0:e13a8a944e25 44 #include "EthernetInterface.h"
MarceloSalazar 0:e13a8a944e25 45 EthernetInterface eth;
MarceloSalazar 0:e13a8a944e25 46
MarceloSalazar 0:e13a8a944e25 47 ////////////////////////////////////////
MarceloSalazar 0:e13a8a944e25 48 // PLATFORM SPECIFIC DEFINES & FUNCTIONS
MarceloSalazar 0:e13a8a944e25 49 ////////////////////////////////////////
MarceloSalazar 0:e13a8a944e25 50 #define DEFAULT_FIRMWARE_PATH "/sd/firmware"
MarceloSalazar 0:e13a8a944e25 51
MarceloSalazar 0:e13a8a944e25 52 #include "mbed_trace.h"
MarceloSalazar 0:e13a8a944e25 53 #define TRACE_GROUP "exam"
MarceloSalazar 0:e13a8a944e25 54
MarceloSalazar 0:e13a8a944e25 55
MarceloSalazar 0:e13a8a944e25 56 // Define led on/off
MarceloSalazar 0:e13a8a944e25 57 #ifdef TARGET_STM
MarceloSalazar 0:e13a8a944e25 58 #define LED_ON (true)
MarceloSalazar 0:e13a8a944e25 59 #else // #ifdef TARGET_STM
MarceloSalazar 0:e13a8a944e25 60 #define LED_ON (false)
MarceloSalazar 0:e13a8a944e25 61 #endif // #ifdef TARGET_STM
MarceloSalazar 0:e13a8a944e25 62
MarceloSalazar 0:e13a8a944e25 63 #define LED_OFF (!LED_ON)
MarceloSalazar 0:e13a8a944e25 64
MarceloSalazar 0:e13a8a944e25 65 DigitalOut led(MBED_CONF_APP_LED_PINNAME, LED_OFF);
MarceloSalazar 0:e13a8a944e25 66 InterruptIn button(MBED_CONF_APP_BUTTON_PINNAME);
MarceloSalazar 0:e13a8a944e25 67
MarceloSalazar 0:e13a8a944e25 68 static bool button_pressed = false;
MarceloSalazar 0:e13a8a944e25 69 static void button_press(void);
MarceloSalazar 0:e13a8a944e25 70
MarceloSalazar 0:e13a8a944e25 71 // Block device and Filesystem
MarceloSalazar 0:e13a8a944e25 72 SDBlockDevice sd(PTE3, PTE1, PTE2, PTE4);
MarceloSalazar 0:e13a8a944e25 73 FATFileSystem fs("sd", &sd);
MarceloSalazar 0:e13a8a944e25 74
MarceloSalazar 0:e13a8a944e25 75
MarceloSalazar 0:e13a8a944e25 76 Thread resource_thread;
MarceloSalazar 0:e13a8a944e25 77
MarceloSalazar 0:e13a8a944e25 78 NetworkInterface* network_interface = NULL;
MarceloSalazar 0:e13a8a944e25 79
MarceloSalazar 0:e13a8a944e25 80
MarceloSalazar 0:e13a8a944e25 81 void button_press(void)
MarceloSalazar 0:e13a8a944e25 82 {
MarceloSalazar 0:e13a8a944e25 83 button_pressed = true;
MarceloSalazar 0:e13a8a944e25 84 }
MarceloSalazar 0:e13a8a944e25 85
MarceloSalazar 0:e13a8a944e25 86 /////////////////////////
MarceloSalazar 0:e13a8a944e25 87 // SETUP.H IMPLEMENTATION
MarceloSalazar 0:e13a8a944e25 88 /////////////////////////
MarceloSalazar 0:e13a8a944e25 89 int initPlatform()
MarceloSalazar 0:e13a8a944e25 90 {
MarceloSalazar 0:e13a8a944e25 91 /* Explicit declaration to catch Block Device initialization errors. */
MarceloSalazar 0:e13a8a944e25 92 int sd_ret = sd.init();
MarceloSalazar 0:e13a8a944e25 93
MarceloSalazar 0:e13a8a944e25 94 if(sd_ret != BD_ERROR_OK) {
MarceloSalazar 0:e13a8a944e25 95 tr_error("initPlatform() - sd.init() failed with %d\n", sd_ret);
MarceloSalazar 0:e13a8a944e25 96 printf("SD card initialization failed. Verify that SD-card is attached.\n");
MarceloSalazar 0:e13a8a944e25 97 return -1;
MarceloSalazar 0:e13a8a944e25 98 }
MarceloSalazar 0:e13a8a944e25 99 tr_debug("initPlatform() - BlockDevice init OK.\n");
MarceloSalazar 0:e13a8a944e25 100
MarceloSalazar 0:e13a8a944e25 101 if(MBED_CONF_APP_BUTTON_PINNAME != NC) {
MarceloSalazar 0:e13a8a944e25 102 button.fall(&button_press);
MarceloSalazar 0:e13a8a944e25 103 }
MarceloSalazar 0:e13a8a944e25 104
MarceloSalazar 0:e13a8a944e25 105 return 0;
MarceloSalazar 0:e13a8a944e25 106 }
MarceloSalazar 0:e13a8a944e25 107
MarceloSalazar 0:e13a8a944e25 108 bool rmFirmwareImages()
MarceloSalazar 0:e13a8a944e25 109 {
MarceloSalazar 0:e13a8a944e25 110 palStatus_t status = PAL_SUCCESS;
MarceloSalazar 0:e13a8a944e25 111 status = pal_fsRmFiles(DEFAULT_FIRMWARE_PATH);
MarceloSalazar 0:e13a8a944e25 112 if(status == PAL_SUCCESS) {
MarceloSalazar 0:e13a8a944e25 113 printf("Firmware storage erased.\n");
MarceloSalazar 0:e13a8a944e25 114 } else if (status == PAL_ERR_FS_NO_PATH) {
MarceloSalazar 0:e13a8a944e25 115 printf("Firmware path not found/does not exist.\n");
MarceloSalazar 0:e13a8a944e25 116 } else {
MarceloSalazar 0:e13a8a944e25 117 printf("Firmware storage erasing failed with %" PRId32, status);
MarceloSalazar 0:e13a8a944e25 118 return false;
MarceloSalazar 0:e13a8a944e25 119 }
MarceloSalazar 0:e13a8a944e25 120 return true;
MarceloSalazar 0:e13a8a944e25 121 }
MarceloSalazar 0:e13a8a944e25 122
MarceloSalazar 0:e13a8a944e25 123 int reformat_storage()
MarceloSalazar 0:e13a8a944e25 124 {
MarceloSalazar 0:e13a8a944e25 125 int reformat_result = -1;
MarceloSalazar 0:e13a8a944e25 126 printf("Autoformatting the storage.\n");
MarceloSalazar 0:e13a8a944e25 127 if (1/*sd*/) {
MarceloSalazar 0:e13a8a944e25 128 // TODO
MarceloSalazar 0:e13a8a944e25 129 // reformat_result = fs.reformat(sd);
MarceloSalazar 0:e13a8a944e25 130 if (reformat_result != 0) {
MarceloSalazar 0:e13a8a944e25 131 printf("Autoformatting failed with error %d\n", reformat_result);
MarceloSalazar 0:e13a8a944e25 132 }
MarceloSalazar 0:e13a8a944e25 133 }
MarceloSalazar 0:e13a8a944e25 134 return reformat_result;
MarceloSalazar 0:e13a8a944e25 135 }
MarceloSalazar 0:e13a8a944e25 136
MarceloSalazar 0:e13a8a944e25 137 int run_application(int(*function)(void))
MarceloSalazar 0:e13a8a944e25 138 {
MarceloSalazar 0:e13a8a944e25 139 // application_init() runs the following initializations:
MarceloSalazar 0:e13a8a944e25 140 // 1. trace initialization
MarceloSalazar 0:e13a8a944e25 141 // 2. platform initialization
MarceloSalazar 0:e13a8a944e25 142 // 3. print memory statistics if MBED_HEAP_STATS_ENABLED is defined
MarceloSalazar 0:e13a8a944e25 143 // 4. FCC initialization.
MarceloSalazar 0:e13a8a944e25 144 if (!application_init()) {
MarceloSalazar 0:e13a8a944e25 145 printf("Initialization failed, exiting application!\n");
MarceloSalazar 0:e13a8a944e25 146 return 1;
MarceloSalazar 0:e13a8a944e25 147 }
MarceloSalazar 0:e13a8a944e25 148 return function();
MarceloSalazar 0:e13a8a944e25 149 }
MarceloSalazar 0:e13a8a944e25 150
MarceloSalazar 0:e13a8a944e25 151 // Helper function, could be moved someone sd
MarceloSalazar 0:e13a8a944e25 152 void print_MAC(NetworkInterface* network_interface, bool log_messages) {
MarceloSalazar 0:e13a8a944e25 153 #if MBED_CONF_APP_NETWORK_INTERFACE != CELLULAR_ONBOARD
MarceloSalazar 0:e13a8a944e25 154 const char *mac_addr = network_interface->get_mac_address();
MarceloSalazar 0:e13a8a944e25 155 if (mac_addr == NULL) {
MarceloSalazar 0:e13a8a944e25 156 if (log_messages) {
MarceloSalazar 0:e13a8a944e25 157 printf("ERROR - No MAC address\n");
MarceloSalazar 0:e13a8a944e25 158 }
MarceloSalazar 0:e13a8a944e25 159 return;
MarceloSalazar 0:e13a8a944e25 160 }
MarceloSalazar 0:e13a8a944e25 161 if (log_messages) {
MarceloSalazar 0:e13a8a944e25 162 printf("MAC address %s\n", mac_addr);
MarceloSalazar 0:e13a8a944e25 163 }
MarceloSalazar 0:e13a8a944e25 164 #endif
MarceloSalazar 0:e13a8a944e25 165 }
MarceloSalazar 0:e13a8a944e25 166
MarceloSalazar 0:e13a8a944e25 167 bool init_connection()
MarceloSalazar 0:e13a8a944e25 168 {
MarceloSalazar 0:e13a8a944e25 169 int connect_success = -1;
MarceloSalazar 0:e13a8a944e25 170 bool log_messages = 1;
MarceloSalazar 0:e13a8a944e25 171
MarceloSalazar 0:e13a8a944e25 172 srand(time(NULL));
MarceloSalazar 0:e13a8a944e25 173
MarceloSalazar 0:e13a8a944e25 174 printf("Using Ethernet\n");
MarceloSalazar 0:e13a8a944e25 175
MarceloSalazar 0:e13a8a944e25 176 network_interface = ð
MarceloSalazar 0:e13a8a944e25 177 connect_success = eth.connect();
MarceloSalazar 0:e13a8a944e25 178
MarceloSalazar 0:e13a8a944e25 179 if(connect_success == 0) {
MarceloSalazar 0:e13a8a944e25 180 if (log_messages) {
MarceloSalazar 0:e13a8a944e25 181 printf("Connected to Network successfully\n");
MarceloSalazar 0:e13a8a944e25 182 print_MAC(network_interface, log_messages);
MarceloSalazar 0:e13a8a944e25 183 }
MarceloSalazar 0:e13a8a944e25 184 } else {
MarceloSalazar 0:e13a8a944e25 185 if (log_messages) {
MarceloSalazar 0:e13a8a944e25 186 print_MAC(network_interface, log_messages);
MarceloSalazar 0:e13a8a944e25 187 printf("Connection to Network Failed %d!\n", connect_success);
MarceloSalazar 0:e13a8a944e25 188 }
MarceloSalazar 0:e13a8a944e25 189 return NULL;
MarceloSalazar 0:e13a8a944e25 190 }
MarceloSalazar 0:e13a8a944e25 191 const char *ip_addr = network_interface->get_ip_address();
MarceloSalazar 0:e13a8a944e25 192 if (ip_addr == NULL) {
MarceloSalazar 0:e13a8a944e25 193 if (log_messages) {
MarceloSalazar 0:e13a8a944e25 194 printf("ERROR - No IP address\n");
MarceloSalazar 0:e13a8a944e25 195 }
MarceloSalazar 0:e13a8a944e25 196 return NULL;
MarceloSalazar 0:e13a8a944e25 197 }
MarceloSalazar 0:e13a8a944e25 198
MarceloSalazar 0:e13a8a944e25 199 if (log_messages) {
MarceloSalazar 0:e13a8a944e25 200 printf("IP address %s\n", ip_addr);
MarceloSalazar 0:e13a8a944e25 201 }
MarceloSalazar 0:e13a8a944e25 202
MarceloSalazar 0:e13a8a944e25 203 if(network_interface == NULL) {
MarceloSalazar 0:e13a8a944e25 204 return false;
MarceloSalazar 0:e13a8a944e25 205 }
MarceloSalazar 0:e13a8a944e25 206 return true;
MarceloSalazar 0:e13a8a944e25 207 }
MarceloSalazar 0:e13a8a944e25 208
MarceloSalazar 0:e13a8a944e25 209 void* get_network_interface()
MarceloSalazar 0:e13a8a944e25 210 {
MarceloSalazar 0:e13a8a944e25 211 return network_interface;
MarceloSalazar 0:e13a8a944e25 212 }
MarceloSalazar 0:e13a8a944e25 213
MarceloSalazar 0:e13a8a944e25 214
MarceloSalazar 0:e13a8a944e25 215 void toggle_led(void)
MarceloSalazar 0:e13a8a944e25 216 {
MarceloSalazar 0:e13a8a944e25 217 if (MBED_CONF_APP_LED_PINNAME != NC) {
MarceloSalazar 0:e13a8a944e25 218 led = !led;
MarceloSalazar 0:e13a8a944e25 219 }
MarceloSalazar 0:e13a8a944e25 220 else {
MarceloSalazar 0:e13a8a944e25 221 printf("Virtual LED toggled\n");
MarceloSalazar 0:e13a8a944e25 222 }
MarceloSalazar 0:e13a8a944e25 223 }
MarceloSalazar 0:e13a8a944e25 224
MarceloSalazar 0:e13a8a944e25 225 void led_off(void)
MarceloSalazar 0:e13a8a944e25 226 {
MarceloSalazar 0:e13a8a944e25 227 if (MBED_CONF_APP_LED_PINNAME != NC) {
MarceloSalazar 0:e13a8a944e25 228 led = LED_OFF;
MarceloSalazar 0:e13a8a944e25 229 }
MarceloSalazar 0:e13a8a944e25 230 else {
MarceloSalazar 0:e13a8a944e25 231 printf("Virtual LED off\n");
MarceloSalazar 0:e13a8a944e25 232 }
MarceloSalazar 0:e13a8a944e25 233 }
MarceloSalazar 0:e13a8a944e25 234
MarceloSalazar 0:e13a8a944e25 235 uint8_t button_clicked(void)
MarceloSalazar 0:e13a8a944e25 236 {
MarceloSalazar 0:e13a8a944e25 237 if (button_pressed) {
MarceloSalazar 0:e13a8a944e25 238 button_pressed = false;
MarceloSalazar 0:e13a8a944e25 239 return true;
MarceloSalazar 0:e13a8a944e25 240 }
MarceloSalazar 0:e13a8a944e25 241 return false;
MarceloSalazar 0:e13a8a944e25 242 }
MarceloSalazar 0:e13a8a944e25 243
MarceloSalazar 0:e13a8a944e25 244 void do_wait(int timeout_ms)
MarceloSalazar 0:e13a8a944e25 245 {
MarceloSalazar 0:e13a8a944e25 246 wait_ms(timeout_ms);
MarceloSalazar 0:e13a8a944e25 247 }
MarceloSalazar 0:e13a8a944e25 248
MarceloSalazar 0:e13a8a944e25 249
MarceloSalazar 0:e13a8a944e25 250 static bool application_init_mbed_trace(void)
MarceloSalazar 0:e13a8a944e25 251 {
MarceloSalazar 0:e13a8a944e25 252 // Create mutex for tracing to avoid broken lines in logs
MarceloSalazar 0:e13a8a944e25 253 if(!mbed_trace_helper_create_mutex()) {
MarceloSalazar 0:e13a8a944e25 254 printf("ERROR - Mutex creation for mbed_trace failed!\n");
MarceloSalazar 0:e13a8a944e25 255 return 1;
MarceloSalazar 0:e13a8a944e25 256 }
MarceloSalazar 0:e13a8a944e25 257
MarceloSalazar 0:e13a8a944e25 258 // Initialize mbed trace
MarceloSalazar 0:e13a8a944e25 259 mbed_trace_init();
MarceloSalazar 0:e13a8a944e25 260 mbed_trace_mutex_wait_function_set(mbed_trace_helper_mutex_wait);
MarceloSalazar 0:e13a8a944e25 261 mbed_trace_mutex_release_function_set(mbed_trace_helper_mutex_release);
MarceloSalazar 0:e13a8a944e25 262
MarceloSalazar 0:e13a8a944e25 263 return 0;
MarceloSalazar 0:e13a8a944e25 264 }
MarceloSalazar 0:e13a8a944e25 265
MarceloSalazar 0:e13a8a944e25 266 static void reset_storage(void)
MarceloSalazar 0:e13a8a944e25 267 {
MarceloSalazar 0:e13a8a944e25 268 printf("Resets storage to an empty state.\n");
MarceloSalazar 0:e13a8a944e25 269 fcc_status_e delete_status = fcc_storage_delete();
MarceloSalazar 0:e13a8a944e25 270 if (delete_status != FCC_STATUS_SUCCESS) {
MarceloSalazar 0:e13a8a944e25 271 printf("Failed to delete storage - %d\n", delete_status);
MarceloSalazar 0:e13a8a944e25 272 }
MarceloSalazar 0:e13a8a944e25 273 }
MarceloSalazar 0:e13a8a944e25 274
MarceloSalazar 0:e13a8a944e25 275 static bool application_init_fcc(void)
MarceloSalazar 0:e13a8a944e25 276 {
MarceloSalazar 0:e13a8a944e25 277 fcc_status_e status = fcc_init();
MarceloSalazar 0:e13a8a944e25 278 if(status != FCC_STATUS_SUCCESS) {
MarceloSalazar 0:e13a8a944e25 279 printf("fcc_init failed with status %d! - exit\n", status);
MarceloSalazar 0:e13a8a944e25 280 return 1;
MarceloSalazar 0:e13a8a944e25 281 }
MarceloSalazar 0:e13a8a944e25 282
MarceloSalazar 0:e13a8a944e25 283 // This is designed to simplify user-experience by auto-formatting the
MarceloSalazar 0:e13a8a944e25 284 // primary storage if no valid certificates exist.
MarceloSalazar 0:e13a8a944e25 285 // This should never be used for any kind of production devices.
MarceloSalazar 0:e13a8a944e25 286 #ifndef MBED_CONF_APP_MCC_NO_AUTO_FORMAT
MarceloSalazar 0:e13a8a944e25 287 status = fcc_verify_device_configured_4mbed_cloud();
MarceloSalazar 0:e13a8a944e25 288 if (status != FCC_STATUS_SUCCESS) {
MarceloSalazar 0:e13a8a944e25 289 if (reformat_storage() != 0) {
MarceloSalazar 0:e13a8a944e25 290 return 1;
MarceloSalazar 0:e13a8a944e25 291 }
MarceloSalazar 0:e13a8a944e25 292 reset_storage();
MarceloSalazar 0:e13a8a944e25 293 }
MarceloSalazar 0:e13a8a944e25 294 #endif
MarceloSalazar 0:e13a8a944e25 295
MarceloSalazar 0:e13a8a944e25 296 // Resets storage to an empty state.
MarceloSalazar 0:e13a8a944e25 297 // Use this function when you want to clear storage from all the factory-tool generated data and user data.
MarceloSalazar 0:e13a8a944e25 298 // After this operation device must be injected again by using factory tool or developer certificate.
MarceloSalazar 0:e13a8a944e25 299 #ifdef RESET_STORAGE
MarceloSalazar 0:e13a8a944e25 300 reset_storage();
MarceloSalazar 0:e13a8a944e25 301 #endif
MarceloSalazar 0:e13a8a944e25 302
MarceloSalazar 0:e13a8a944e25 303 // Deletes existing firmware images from storage.
MarceloSalazar 0:e13a8a944e25 304 // This deletes any existing firmware images during application startup.
MarceloSalazar 0:e13a8a944e25 305 // This compilation flag is currently implemented only for mbed OS.
MarceloSalazar 0:e13a8a944e25 306 #ifdef RESET_FIRMWARE
MarceloSalazar 0:e13a8a944e25 307 bool status_erase = rmFirmwareImages();
MarceloSalazar 0:e13a8a944e25 308 if(status_erase == false) {
MarceloSalazar 0:e13a8a944e25 309 return 1;
MarceloSalazar 0:e13a8a944e25 310 }
MarceloSalazar 0:e13a8a944e25 311 #endif
MarceloSalazar 0:e13a8a944e25 312
MarceloSalazar 0:e13a8a944e25 313 #if MBED_CONF_APP_DEVELOPER_MODE == 1
MarceloSalazar 0:e13a8a944e25 314 printf("Start developer flow\n");
MarceloSalazar 0:e13a8a944e25 315 status = fcc_developer_flow();
MarceloSalazar 0:e13a8a944e25 316 if (status == FCC_STATUS_KCM_FILE_EXIST_ERROR) {
MarceloSalazar 0:e13a8a944e25 317 printf("Developer credentials already exists\n");
MarceloSalazar 0:e13a8a944e25 318 } else if (status != FCC_STATUS_SUCCESS) {
MarceloSalazar 0:e13a8a944e25 319 printf("Failed to load developer credentials - exit\n");
MarceloSalazar 0:e13a8a944e25 320 return 1;
MarceloSalazar 0:e13a8a944e25 321 }
MarceloSalazar 0:e13a8a944e25 322 #endif
MarceloSalazar 0:e13a8a944e25 323 status = fcc_verify_device_configured_4mbed_cloud();
MarceloSalazar 0:e13a8a944e25 324 if (status != FCC_STATUS_SUCCESS) {
MarceloSalazar 0:e13a8a944e25 325 printf("Device not configured for mbed Cloud - exit\n");
MarceloSalazar 0:e13a8a944e25 326 return 1;
MarceloSalazar 0:e13a8a944e25 327 }
MarceloSalazar 0:e13a8a944e25 328
MarceloSalazar 0:e13a8a944e25 329 return 0;
MarceloSalazar 0:e13a8a944e25 330 }
MarceloSalazar 0:e13a8a944e25 331
MarceloSalazar 0:e13a8a944e25 332 bool application_init(void)
MarceloSalazar 0:e13a8a944e25 333 {
MarceloSalazar 0:e13a8a944e25 334 if (application_init_mbed_trace() != 0) {
MarceloSalazar 0:e13a8a944e25 335 printf("Failed initializing mbed trace\n" );
MarceloSalazar 0:e13a8a944e25 336 return false;
MarceloSalazar 0:e13a8a944e25 337 }
MarceloSalazar 0:e13a8a944e25 338
MarceloSalazar 0:e13a8a944e25 339 if(initPlatform() != 0) {
MarceloSalazar 0:e13a8a944e25 340 printf("ERROR - initPlatform() failed!\n");
MarceloSalazar 0:e13a8a944e25 341 return false;
MarceloSalazar 0:e13a8a944e25 342 }
MarceloSalazar 0:e13a8a944e25 343
MarceloSalazar 0:e13a8a944e25 344 printf("Start Simple Mbed Cloud Client\n");
MarceloSalazar 0:e13a8a944e25 345
MarceloSalazar 0:e13a8a944e25 346 if (application_init_fcc() != 0) {
MarceloSalazar 0:e13a8a944e25 347 printf("Failed initializing FCC\n" );
MarceloSalazar 0:e13a8a944e25 348 return false;
MarceloSalazar 0:e13a8a944e25 349 }
MarceloSalazar 0:e13a8a944e25 350
MarceloSalazar 0:e13a8a944e25 351 return true;
MarceloSalazar 0:e13a8a944e25 352 }