Updated ref

Dependencies:   FXOS8700Q-driver MODSERIAL

Fork of AAT_LWM2M_K64F by Vinay Shrivastav

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?

UserRevisionLine numberNew 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 = &eth;
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 }