Simple Mbed Cloud client application using features of K64 & K66 including Ethernet and SD Card
Fork of mbed-cloud-example_K64_K66 by
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/
setup.cpp@0:e13a8a944e25, 2018-02-13 (annotated)
- Committer:
- MarceloSalazar
- Date:
- Tue Feb 13 10:07:23 2018 +0000
- Revision:
- 0:e13a8a944e25
First version
Who changed what in which revision?
| User | Revision | Line number | New 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 | } |
