Mac Lobdell / Mbed OS mbed-cloud-example_K64_K66
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 }