Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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 | } |