![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Updated ref
Dependencies: FXOS8700Q-driver MODSERIAL
Fork of AAT_LWM2M_K64F by
main.cpp@62:8dc6ee02d19b, 2017-03-24 (annotated)
- Committer:
- navigators
- Date:
- Fri Mar 24 10:34:55 2017 +0000
- Revision:
- 62:8dc6ee02d19b
- Parent:
- 61:cbc1630d6ac1
Lwm2m reference
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
remembervin | 52:74019970a2bf | 1 | /** |
remembervin | 52:74019970a2bf | 2 | * @file main.cpp |
navigators | 53:ff25489c63af | 3 | * @brief AAT lwm2m client |
remembervin | 52:74019970a2bf | 4 | * @author Vinay Shrivastava |
remembervin | 52:74019970a2bf | 5 | * @version 1.0 |
remembervin | 52:74019970a2bf | 6 | * @see |
remembervin | 52:74019970a2bf | 7 | * |
remembervin | 52:74019970a2bf | 8 | * Copyright (c) 2016 |
remembervin | 52:74019970a2bf | 9 | * |
mbed_official | 21:b88cdeb5b302 | 10 | * Licensed under the Apache License, Version 2.0 (the License); you may |
mbed_official | 21:b88cdeb5b302 | 11 | * not use this file except in compliance with the License. |
mbed_official | 21:b88cdeb5b302 | 12 | * You may obtain a copy of the License at |
mbed_official | 21:b88cdeb5b302 | 13 | * |
mbed_official | 21:b88cdeb5b302 | 14 | * http://www.apache.org/licenses/LICENSE-2.0 |
mbed_official | 21:b88cdeb5b302 | 15 | * |
mbed_official | 21:b88cdeb5b302 | 16 | * Unless required by applicable law or agreed to in writing, software |
mbed_official | 21:b88cdeb5b302 | 17 | * distributed under the License is distributed on an AS IS BASIS, WITHOUT |
mbed_official | 21:b88cdeb5b302 | 18 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
mbed_official | 21:b88cdeb5b302 | 19 | * See the License for the specific language governing permissions and |
mbed_official | 21:b88cdeb5b302 | 20 | * limitations under the License. |
mbed_official | 21:b88cdeb5b302 | 21 | */ |
remembervin | 52:74019970a2bf | 22 | |
mbed_official | 21:b88cdeb5b302 | 23 | #include <string> |
mbed_official | 21:b88cdeb5b302 | 24 | #include <sstream> |
mbed_official | 21:b88cdeb5b302 | 25 | #include <vector> |
mbed_official | 21:b88cdeb5b302 | 26 | #include "security.h" |
mbed_official | 21:b88cdeb5b302 | 27 | #include "mbed.h" |
mbed_official | 21:b88cdeb5b302 | 28 | #include "rtos.h" |
remembervin | 52:74019970a2bf | 29 | #include "resources.h" |
mbed_official | 21:b88cdeb5b302 | 30 | |
mbed_official | 21:b88cdeb5b302 | 31 | |
mbed_official | 21:b88cdeb5b302 | 32 | // Network interaction must be performed outside of interrupt context |
mbed_official | 21:b88cdeb5b302 | 33 | Semaphore updates(0); |
mbed_official | 21:b88cdeb5b302 | 34 | volatile bool registered = false; |
mbed_official | 21:b88cdeb5b302 | 35 | volatile bool clicked = false; |
remembervin | 52:74019970a2bf | 36 | volatile bool update_trigger = false; |
mbed_official | 21:b88cdeb5b302 | 37 | osThreadId mainThread; |
mbed_official | 21:b88cdeb5b302 | 38 | |
mbed_official | 21:b88cdeb5b302 | 39 | void unregister() { |
mbed_official | 21:b88cdeb5b302 | 40 | registered = false; |
mbed_official | 21:b88cdeb5b302 | 41 | updates.release(); |
mbed_official | 21:b88cdeb5b302 | 42 | } |
mbed_official | 21:b88cdeb5b302 | 43 | |
mbed_official | 21:b88cdeb5b302 | 44 | void button_clicked() { |
mbed_official | 21:b88cdeb5b302 | 45 | clicked = true; |
mbed_official | 21:b88cdeb5b302 | 46 | updates.release(); |
mbed_official | 21:b88cdeb5b302 | 47 | } |
mbed_official | 21:b88cdeb5b302 | 48 | |
remembervin | 52:74019970a2bf | 49 | void trigger_update(){ |
remembervin | 52:74019970a2bf | 50 | update_trigger = true; |
remembervin | 52:74019970a2bf | 51 | } |
remembervin | 52:74019970a2bf | 52 | |
mbed_official | 21:b88cdeb5b302 | 53 | // debug printf function |
mbed_official | 21:b88cdeb5b302 | 54 | void trace_printer(const char* str) { |
mbed_official | 21:b88cdeb5b302 | 55 | printf("%s\r\n", str); |
mbed_official | 21:b88cdeb5b302 | 56 | } |
mbed_official | 21:b88cdeb5b302 | 57 | |
mbed_official | 21:b88cdeb5b302 | 58 | // Entry point to the program |
mbed_official | 21:b88cdeb5b302 | 59 | int main() { |
mbed_official | 21:b88cdeb5b302 | 60 | |
mbed_official | 21:b88cdeb5b302 | 61 | unsigned int seed; |
mbed_official | 21:b88cdeb5b302 | 62 | size_t len; |
mbed_official | 21:b88cdeb5b302 | 63 | |
mbed_official | 21:b88cdeb5b302 | 64 | #ifdef MBEDTLS_ENTROPY_HARDWARE_ALT |
mbed_official | 21:b88cdeb5b302 | 65 | // Used to randomize source port |
mbed_official | 21:b88cdeb5b302 | 66 | mbedtls_hardware_poll(NULL, (unsigned char *) &seed, sizeof seed, &len); |
mbed_official | 21:b88cdeb5b302 | 67 | |
mbed_official | 21:b88cdeb5b302 | 68 | #elif defined MBEDTLS_TEST_NULL_ENTROPY |
mbed_official | 21:b88cdeb5b302 | 69 | |
mbed_official | 21:b88cdeb5b302 | 70 | #warning "mbedTLS security feature is disabled. Connection will not be secure !! Implement proper hardware entropy for your selected hardware." |
mbed_official | 21:b88cdeb5b302 | 71 | // Used to randomize source port |
mbed_official | 21:b88cdeb5b302 | 72 | mbedtls_null_entropy_poll( NULL,(unsigned char *) &seed, sizeof seed, &len); |
mbed_official | 21:b88cdeb5b302 | 73 | |
mbed_official | 21:b88cdeb5b302 | 74 | #else |
mbed_official | 21:b88cdeb5b302 | 75 | |
mbed_official | 21:b88cdeb5b302 | 76 | #error "This hardware does not have entropy, endpoint will not register to Connector.\ |
mbed_official | 21:b88cdeb5b302 | 77 | You need to enable NULL ENTROPY for your application, but if this configuration change is made then no security is offered by mbed TLS.\ |
mbed_official | 21:b88cdeb5b302 | 78 | Add MBEDTLS_NO_DEFAULT_ENTROPY_SOURCES and MBEDTLS_TEST_NULL_ENTROPY in mbed_app.json macros to register your endpoint." |
mbed_official | 21:b88cdeb5b302 | 79 | |
mbed_official | 21:b88cdeb5b302 | 80 | #endif |
mbed_official | 21:b88cdeb5b302 | 81 | |
mbed_official | 21:b88cdeb5b302 | 82 | srand(seed); |
mbed_official | 21:b88cdeb5b302 | 83 | red_led = 1; |
mbed_official | 21:b88cdeb5b302 | 84 | blue_led = 1; |
remembervin | 52:74019970a2bf | 85 | //status_ticker.attach_us(blinky, 250000); |
mbed_official | 21:b88cdeb5b302 | 86 | // Keep track of the main thread |
mbed_official | 21:b88cdeb5b302 | 87 | mainThread = osThreadGetId(); |
mbed_official | 21:b88cdeb5b302 | 88 | |
mbed_official | 21:b88cdeb5b302 | 89 | // Sets the console baud-rate |
mbed_official | 21:b88cdeb5b302 | 90 | output.baud(115200); |
mbed_official | 21:b88cdeb5b302 | 91 | |
mbed_official | 44:2b472e66a942 | 92 | output.printf("\r\nStarting mbed Client example in "); |
mbed_official | 44:2b472e66a942 | 93 | #if defined (MESH) || (MBED_CONF_LWIP_IPV6_ENABLED==true) |
mbed_official | 44:2b472e66a942 | 94 | output.printf("IPv6 mode\r\n"); |
mbed_official | 44:2b472e66a942 | 95 | #else |
mbed_official | 44:2b472e66a942 | 96 | output.printf("IPv4 mode\r\n"); |
mbed_official | 44:2b472e66a942 | 97 | #endif |
mbed_official | 21:b88cdeb5b302 | 98 | |
mbed_official | 21:b88cdeb5b302 | 99 | mbed_trace_init(); |
mbed_official | 21:b88cdeb5b302 | 100 | mbed_trace_print_function_set(trace_printer); |
mbed_official | 44:2b472e66a942 | 101 | |
mbed_official | 21:b88cdeb5b302 | 102 | NetworkInterface *network_interface = 0; |
mbed_official | 21:b88cdeb5b302 | 103 | int connect_success = -1; |
mbed_official | 21:b88cdeb5b302 | 104 | #if MBED_CONF_APP_NETWORK_INTERFACE == WIFI |
mbed_official | 44:2b472e66a942 | 105 | output.printf("\n\rConnecting to WiFi...\r\n"); |
mbed_official | 44:2b472e66a942 | 106 | connect_success = wifi.connect(MBED_CONF_APP_WIFI_SSID, MBED_CONF_APP_WIFI_PASSWORD, NSAPI_SECURITY_WPA_WPA2); |
mbed_official | 41:496e5ec1f1bd | 107 | network_interface = &wifi; |
mbed_official | 21:b88cdeb5b302 | 108 | #elif MBED_CONF_APP_NETWORK_INTERFACE == ETHERNET |
mbed_official | 44:2b472e66a942 | 109 | output.printf("\n\rConnecting to ethernet...\r\n"); |
mbed_official | 21:b88cdeb5b302 | 110 | connect_success = eth.connect(); |
mbed_official | 21:b88cdeb5b302 | 111 | network_interface = ð |
mbed_official | 21:b88cdeb5b302 | 112 | #endif |
mbed_official | 21:b88cdeb5b302 | 113 | #ifdef MESH |
mbed_official | 44:2b472e66a942 | 114 | output.printf("\n\rConnecting to Mesh...\r\n"); |
mbed_official | 21:b88cdeb5b302 | 115 | mesh.initialize(&rf_phy); |
mbed_official | 21:b88cdeb5b302 | 116 | connect_success = mesh.connect(); |
mbed_official | 21:b88cdeb5b302 | 117 | network_interface = &mesh; |
mbed_official | 21:b88cdeb5b302 | 118 | #endif |
mbed_official | 21:b88cdeb5b302 | 119 | if(connect_success == 0) { |
mbed_official | 21:b88cdeb5b302 | 120 | output.printf("\n\rConnected to Network successfully\r\n"); |
mbed_official | 21:b88cdeb5b302 | 121 | } else { |
mbed_official | 21:b88cdeb5b302 | 122 | output.printf("\n\rConnection to Network Failed %d! Exiting application....\r\n", connect_success); |
mbed_official | 21:b88cdeb5b302 | 123 | return 0; |
mbed_official | 21:b88cdeb5b302 | 124 | } |
mbed_official | 21:b88cdeb5b302 | 125 | const char *ip_addr = network_interface->get_ip_address(); |
mbed_official | 21:b88cdeb5b302 | 126 | if (ip_addr) { |
mbed_official | 21:b88cdeb5b302 | 127 | output.printf("IP address %s\r\n", ip_addr); |
mbed_official | 21:b88cdeb5b302 | 128 | } else { |
mbed_official | 21:b88cdeb5b302 | 129 | output.printf("No IP address\r\n"); |
mbed_official | 21:b88cdeb5b302 | 130 | } |
mbed_official | 21:b88cdeb5b302 | 131 | |
remembervin | 52:74019970a2bf | 132 | // create resources |
mbed_official | 21:b88cdeb5b302 | 133 | ButtonResource button_resource; |
mbed_official | 21:b88cdeb5b302 | 134 | LedResource led_resource; |
mbed_official | 21:b88cdeb5b302 | 135 | BigPayloadResource big_payload_resource; |
navigators | 53:ff25489c63af | 136 | //GnssCustomResource gnss_resource; |
navigators | 53:ff25489c63af | 137 | GnssResource gnss_resource; |
remembervin | 52:74019970a2bf | 138 | AccelResource accel_resource; |
remembervin | 52:74019970a2bf | 139 | |
remembervin | 52:74019970a2bf | 140 | // enable accelerometer |
remembervin | 52:74019970a2bf | 141 | accel.enable(); |
remembervin | 52:74019970a2bf | 142 | output.printf("Initializied accelerometer\r\n"); |
remembervin | 52:74019970a2bf | 143 | |
remembervin | 52:74019970a2bf | 144 | // Set gps UART baud rate |
remembervin | 52:74019970a2bf | 145 | gps.baud(115200); |
remembervin | 52:74019970a2bf | 146 | |
remembervin | 52:74019970a2bf | 147 | // Check GNSS UART connectivity |
remembervin | 52:74019970a2bf | 148 | if(gps.readable()) output.printf("GNSS UART interface connected. \n"); |
remembervin | 52:74019970a2bf | 149 | else output.printf("WARNING: GNSS UART interface not connected or powered ON. \n"); |
mbed_official | 21:b88cdeb5b302 | 150 | |
mbed_official | 21:b88cdeb5b302 | 151 | #ifdef TARGET_K64F |
mbed_official | 21:b88cdeb5b302 | 152 | // On press of SW3 button on K64F board, example application |
mbed_official | 21:b88cdeb5b302 | 153 | // will call unregister API towards mbed Device Connector |
mbed_official | 21:b88cdeb5b302 | 154 | //unreg_button.fall(&mbed_client,&MbedClient::test_unregister); |
mbed_official | 21:b88cdeb5b302 | 155 | unreg_button.fall(&unregister); |
mbed_official | 21:b88cdeb5b302 | 156 | |
mbed_official | 21:b88cdeb5b302 | 157 | // Observation Button (SW2) press will send update of endpoint resource values to connector |
mbed_official | 21:b88cdeb5b302 | 158 | obs_button.fall(&button_clicked); |
mbed_official | 21:b88cdeb5b302 | 159 | #endif |
mbed_official | 21:b88cdeb5b302 | 160 | |
remembervin | 52:74019970a2bf | 161 | // Send update of endpoint resource values to connector every # seconds periodically |
navigators | 61:cbc1630d6ac1 | 162 | timer.attach(&trigger_update, 2.5); |
remembervin | 52:74019970a2bf | 163 | |
mbed_official | 21:b88cdeb5b302 | 164 | // Create endpoint interface to manage register and unregister |
mbed_official | 21:b88cdeb5b302 | 165 | mbed_client.create_interface(MBED_SERVER_ADDRESS, network_interface); |
mbed_official | 21:b88cdeb5b302 | 166 | |
mbed_official | 21:b88cdeb5b302 | 167 | // Create Objects of varying types, see simpleclient.h for more details on implementation. |
mbed_official | 21:b88cdeb5b302 | 168 | M2MSecurity* register_object = mbed_client.create_register_object(); // server object specifying connector info |
mbed_official | 21:b88cdeb5b302 | 169 | M2MDevice* device_object = mbed_client.create_device_object(); // device resources object |
navigators | 62:8dc6ee02d19b | 170 | M2MFirmware* firmware_object = mbed_client.create_firmware_object(); |
mbed_official | 21:b88cdeb5b302 | 171 | |
mbed_official | 21:b88cdeb5b302 | 172 | // Create list of Objects to register |
mbed_official | 21:b88cdeb5b302 | 173 | M2MObjectList object_list; |
mbed_official | 21:b88cdeb5b302 | 174 | |
mbed_official | 21:b88cdeb5b302 | 175 | // Add objects to list |
mbed_official | 21:b88cdeb5b302 | 176 | object_list.push_back(device_object); |
navigators | 62:8dc6ee02d19b | 177 | object_list.push_back(firmware_object); |
remembervin | 52:74019970a2bf | 178 | object_list.push_back(accel_resource.get_object()); |
remembervin | 52:74019970a2bf | 179 | object_list.push_back(gnss_resource.get_object()); |
remembervin | 52:74019970a2bf | 180 | |
remembervin | 52:74019970a2bf | 181 | //object_list.push_back(button_resource.get_object()); |
remembervin | 52:74019970a2bf | 182 | //object_list.push_back(led_resource.get_object()); |
remembervin | 52:74019970a2bf | 183 | //object_list.push_back(big_payload_resource.get_object()); |
mbed_official | 21:b88cdeb5b302 | 184 | |
mbed_official | 21:b88cdeb5b302 | 185 | // Set endpoint registration object |
mbed_official | 21:b88cdeb5b302 | 186 | mbed_client.set_register_object(register_object); |
mbed_official | 21:b88cdeb5b302 | 187 | |
mbed_official | 21:b88cdeb5b302 | 188 | // Register with mbed Device Connector |
mbed_official | 21:b88cdeb5b302 | 189 | mbed_client.test_register(register_object, object_list); |
mbed_official | 21:b88cdeb5b302 | 190 | registered = true; |
remembervin | 52:74019970a2bf | 191 | updates.wait(5000); |
mbed_official | 21:b88cdeb5b302 | 192 | |
mbed_official | 21:b88cdeb5b302 | 193 | while (true) { |
navigators | 61:cbc1630d6ac1 | 194 | updates.wait(500); |
mbed_official | 21:b88cdeb5b302 | 195 | if(registered) { |
remembervin | 52:74019970a2bf | 196 | if(!clicked && !update_trigger) { |
mbed_official | 21:b88cdeb5b302 | 197 | mbed_client.test_update_register(); |
mbed_official | 21:b88cdeb5b302 | 198 | } |
mbed_official | 21:b88cdeb5b302 | 199 | }else { |
mbed_official | 21:b88cdeb5b302 | 200 | break; |
mbed_official | 21:b88cdeb5b302 | 201 | } |
mbed_official | 21:b88cdeb5b302 | 202 | if(clicked) { |
mbed_official | 21:b88cdeb5b302 | 203 | clicked = false; |
mbed_official | 21:b88cdeb5b302 | 204 | button_resource.handle_button_click(); |
mbed_official | 21:b88cdeb5b302 | 205 | } |
remembervin | 52:74019970a2bf | 206 | if(update_trigger) |
remembervin | 52:74019970a2bf | 207 | { |
remembervin | 52:74019970a2bf | 208 | update_trigger = false; |
remembervin | 52:74019970a2bf | 209 | // Call resource refresh functions |
remembervin | 52:74019970a2bf | 210 | // gnss_resource |
remembervin | 52:74019970a2bf | 211 | accel_resource.handle_accel_update(); |
remembervin | 52:74019970a2bf | 212 | if(gps.readable()) gnss_resource.handle_gnss_update(); |
remembervin | 52:74019970a2bf | 213 | } |
mbed_official | 21:b88cdeb5b302 | 214 | } |
mbed_official | 21:b88cdeb5b302 | 215 | |
mbed_official | 21:b88cdeb5b302 | 216 | mbed_client.test_unregister(); |
remembervin | 52:74019970a2bf | 217 | timer.detach(); |
remembervin | 52:74019970a2bf | 218 | //status_ticker.detach(); |
mbed_official | 21:b88cdeb5b302 | 219 | } |