k64f targated antenna alignment tool with lwm2m client capabilities.
Dependencies: FXOS8700Q-driver MODSERIAL
Fork of mbed-os-example-client by
Revision 52:74019970a2bf, committed 2017-01-20
- Comitter:
- remembervin
- Date:
- Fri Jan 20 12:34:35 2017 +0000
- Parent:
- 51:f2c99fcbcd08
- Commit message:
- k64f targated Antenna alignment tool demo integrating GNSS compass (heading) & accelerometer (tilt & roll) - lwm2m client.
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/FXOS8700Q-driver.lib Fri Jan 20 12:34:35 2017 +0000 @@ -0,0 +1,1 @@ +https://developer.mbed.org/users/remembervin/code/FXOS8700Q-driver/#6e26fb9d0a78
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MODSERIAL.lib Fri Jan 20 12:34:35 2017 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/Sissors/code/MODSERIAL/#4737f8a5b018
--- a/main.cpp Wed Jan 04 22:15:09 2017 +0000 +++ b/main.cpp Fri Jan 20 12:34:35 2017 +0000 @@ -1,6 +1,12 @@ -/* - * Copyright (c) 2015, 2016 ARM Limited. All rights reserved. - * SPDX-License-Identifier: Apache-2.0 +/** + * @file main.cpp + * @brief Vins Netra 2 client + * @author Vinay Shrivastava + * @version 1.0 + * @see + * + * Copyright (c) 2016 + * * Licensed under the Apache License, Version 2.0 (the License); you may * not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -13,327 +19,21 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#include "simpleclient.h" + #include <string> #include <sstream> #include <vector> -#include "mbed-trace/mbed_trace.h" -#include "mbedtls/entropy_poll.h" - #include "security.h" - #include "mbed.h" #include "rtos.h" - -#if MBED_CONF_APP_NETWORK_INTERFACE == WIFI - #if TARGET_UBLOX_EVK_ODIN_W2 - #include "OdinWiFiInterface.h" - OdinWiFiInterface wifi; - #else - #include "ESP8266Interface.h" - ESP8266Interface wifi(MBED_CONF_APP_WIFI_TX, MBED_CONF_APP_WIFI_RX); - #endif -#elif MBED_CONF_APP_NETWORK_INTERFACE == ETHERNET - #include "EthernetInterface.h" - EthernetInterface eth; -#elif MBED_CONF_APP_NETWORK_INTERFACE == MESH_LOWPAN_ND - #define MESH - #include "NanostackInterface.h" - LoWPANNDInterface mesh; -#elif MBED_CONF_APP_NETWORK_INTERFACE == MESH_THREAD - #define MESH - #include "NanostackInterface.h" - ThreadInterface mesh; -#endif - -#if defined(MESH) -#if MBED_CONF_APP_MESH_RADIO_TYPE == ATMEL -#include "NanostackRfPhyAtmel.h" -NanostackRfPhyAtmel rf_phy(ATMEL_SPI_MOSI, ATMEL_SPI_MISO, ATMEL_SPI_SCLK, ATMEL_SPI_CS, - ATMEL_SPI_RST, ATMEL_SPI_SLP, ATMEL_SPI_IRQ, ATMEL_I2C_SDA, ATMEL_I2C_SCL); -#elif MBED_CONF_APP_MESH_RADIO_TYPE == MCR20 -#include "NanostackRfPhyMcr20a.h" -NanostackRfPhyMcr20a rf_phy(MCR20A_SPI_MOSI, MCR20A_SPI_MISO, MCR20A_SPI_SCLK, MCR20A_SPI_CS, MCR20A_SPI_RST, MCR20A_SPI_IRQ); -#endif //MBED_CONF_APP_RADIO_TYPE -#endif //MESH - -#ifdef MESH - // Mesh does not have DNS, so must use direct IPV6 address - #define MBED_SERVER_ADDRESS "coaps://[2607:f0d0:2601:52::20]:5684" -#else - // This is address to mbed Device Connector, name based - // assume all other stacks support DNS properly - #define MBED_SERVER_ADDRESS "coap://api.connector.mbed.com:5684" -#endif - -RawSerial output(USBTX, USBRX); - -// Status indication -DigitalOut red_led(LED1); -DigitalOut green_led(LED2); -DigitalOut blue_led(LED3); -Ticker status_ticker; -void blinky() { - green_led = !green_led; - -} - -// These are example resource values for the Device Object -struct MbedClientDevice device = { - "Manufacturer_String", // Manufacturer - "Type_String", // Type - "ModelNumber_String", // ModelNumber - "SerialNumber_String" // SerialNumber -}; - -// Instantiate the class which implements LWM2M Client API (from simpleclient.h) -MbedClient mbed_client(device); - - -// In case of K64F board , there is button resource available -// to change resource value and unregister -#ifdef TARGET_K64F -// Set up Hardware interrupt button. -InterruptIn obs_button(SW2); -InterruptIn unreg_button(SW3); -#else -//In non K64F boards , set up a timer to simulate updating resource, -// there is no functionality to unregister. -Ticker timer; -#endif - -/* - * Arguments for running "blink" in it's own thread. - */ -class BlinkArgs { -public: - BlinkArgs() { - clear(); - } - void clear() { - position = 0; - blink_pattern.clear(); - } - uint16_t position; - std::vector<uint32_t> blink_pattern; -}; - -/* - * The Led contains one property (pattern) and a function (blink). - * When the function blink is executed, the pattern is read, and the LED - * will blink based on the pattern. - */ -class LedResource { -public: - LedResource() { - // create ObjectID with metadata tag of '3201', which is 'digital output' - led_object = M2MInterfaceFactory::create_object("3201"); - M2MObjectInstance* led_inst = led_object->create_object_instance(); - - // 5853 = Multi-state output - M2MResource* pattern_res = led_inst->create_dynamic_resource("5853", "Pattern", - M2MResourceInstance::STRING, false); - // read and write - pattern_res->set_operation(M2MBase::GET_PUT_ALLOWED); - // set initial pattern (toggle every 200ms. 7 toggles in total) - pattern_res->set_value((const uint8_t*)"500:500:500:500:500:500:500", 27); - - // there's not really an execute LWM2M ID that matches... hmm... - M2MResource* led_res = led_inst->create_dynamic_resource("5850", "Blink", - M2MResourceInstance::OPAQUE, false); - // we allow executing a function here... - led_res->set_operation(M2MBase::POST_ALLOWED); - // when a POST comes in, we want to execute the led_execute_callback - led_res->set_execute_function(execute_callback(this, &LedResource::blink)); - // Completion of execute function can take a time, that's why delayed response is used - led_res->set_delayed_response(true); - blink_args = new BlinkArgs(); - } - - ~LedResource() { - delete blink_args; - } - - M2MObject* get_object() { - return led_object; - } - - void blink(void *argument) { - // read the value of 'Pattern' - status_ticker.detach(); - green_led = 1; - - M2MObjectInstance* inst = led_object->object_instance(); - M2MResource* res = inst->resource("5853"); - // Clear previous blink data - blink_args->clear(); - - // values in mbed Client are all buffers, and we need a vector of int's - uint8_t* buffIn = NULL; - uint32_t sizeIn; - res->get_value(buffIn, sizeIn); +#include "resources.h" - // turn the buffer into a string, and initialize a vector<int> on the heap - std::string s((char*)buffIn, sizeIn); - free(buffIn); - output.printf("led_execute_callback pattern=%s\r\n", s.c_str()); - - // our pattern is something like 500:200:500, so parse that - std::size_t found = s.find_first_of(":"); - while (found!=std::string::npos) { - blink_args->blink_pattern.push_back(atoi((const char*)s.substr(0,found).c_str())); - s = s.substr(found+1); - found=s.find_first_of(":"); - if(found == std::string::npos) { - blink_args->blink_pattern.push_back(atoi((const char*)s.c_str())); - } - } - // check if POST contains payload - if (argument) { - M2MResource::M2MExecuteParameter* param = (M2MResource::M2MExecuteParameter*)argument; - String object_name = param->get_argument_object_name(); - uint16_t object_instance_id = param->get_argument_object_instance_id(); - String resource_name = param->get_argument_resource_name(); - int payload_length = param->get_argument_value_length(); - uint8_t* payload = param->get_argument_value(); - output.printf("Resource: %s/%d/%s executed\r\n", object_name.c_str(), object_instance_id, resource_name.c_str()); - output.printf("Payload: %.*s\r\n", payload_length, payload); - } - // do_blink is called with the vector, and starting at -1 - blinky_thread.start(this, &LedResource::do_blink); - } - -private: - M2MObject* led_object; - Thread blinky_thread; - BlinkArgs *blink_args; - void do_blink() { - for (;;) { - // blink the LED - red_led = !red_led; - // up the position, if we reached the end of the vector - if (blink_args->position >= blink_args->blink_pattern.size()) { - // send delayed response after blink is done - M2MObjectInstance* inst = led_object->object_instance(); - M2MResource* led_res = inst->resource("5850"); - led_res->send_delayed_post_response(); - red_led = 1; - status_ticker.attach_us(blinky, 250000); - return; - } - // Wait requested time, then continue prosessing the blink pattern from next position. - Thread::wait(blink_args->blink_pattern.at(blink_args->position)); - blink_args->position++; - } - } -}; - -/* - * The button contains one property (click count). - * When `handle_button_click` is executed, the counter updates. - */ -class ButtonResource { -public: - ButtonResource(): counter(0) { - // create ObjectID with metadata tag of '3200', which is 'digital input' - btn_object = M2MInterfaceFactory::create_object("3200"); - M2MObjectInstance* btn_inst = btn_object->create_object_instance(); - // create resource with ID '5501', which is digital input counter - M2MResource* btn_res = btn_inst->create_dynamic_resource("5501", "Button", - M2MResourceInstance::INTEGER, true /* observable */); - // we can read this value - btn_res->set_operation(M2MBase::GET_ALLOWED); - // set initial value (all values in mbed Client are buffers) - // to be able to read this data easily in the Connector console, we'll use a string - btn_res->set_value((uint8_t*)"0", 1); - } - - ~ButtonResource() { - } - - M2MObject* get_object() { - return btn_object; - } - - /* - * When you press the button, we read the current value of the click counter - * from mbed Device Connector, then up the value with one. - */ - void handle_button_click() { - M2MObjectInstance* inst = btn_object->object_instance(); - M2MResource* res = inst->resource("5501"); - - // up counter - counter++; -#ifdef TARGET_K64F - printf("handle_button_click, new value of counter is %d\r\n", counter); -#else - printf("simulate button_click, new value of counter is %d\r\n", counter); -#endif - // serialize the value of counter as a string, and tell connector - char buffer[20]; - int size = sprintf(buffer,"%d",counter); - res->set_value((uint8_t*)buffer, size); - } - -private: - M2MObject* btn_object; - uint16_t counter; -}; - -class BigPayloadResource { -public: - BigPayloadResource() { - big_payload = M2MInterfaceFactory::create_object("1000"); - M2MObjectInstance* payload_inst = big_payload->create_object_instance(); - M2MResource* payload_res = payload_inst->create_dynamic_resource("1", "BigData", - M2MResourceInstance::STRING, true /* observable */); - payload_res->set_operation(M2MBase::GET_PUT_ALLOWED); - payload_res->set_value((uint8_t*)"0", 1); - payload_res->set_incoming_block_message_callback( - incoming_block_message_callback(this, &BigPayloadResource::block_message_received)); - payload_res->set_outgoing_block_message_callback( - outgoing_block_message_callback(this, &BigPayloadResource::block_message_requested)); - } - - M2MObject* get_object() { - return big_payload; - } - - void block_message_received(M2MBlockMessage *argument) { - if (argument) { - if (M2MBlockMessage::ErrorNone == argument->error_code()) { - if (argument->is_last_block()) { - output.printf("Last block received\r\n"); - } - output.printf("Block number: %d\r\n", argument->block_number()); - // First block received - if (argument->block_number() == 0) { - // Store block - // More blocks coming - } else { - // Store blocks - } - } else { - output.printf("Error when receiving block message! - EntityTooLarge\r\n"); - } - output.printf("Total message size: %d\r\n", argument->total_message_size()); - } - } - - void block_message_requested(const String& resource, uint8_t *&/*data*/, uint32_t &/*len*/) { - output.printf("GET request received for resource: %s\r\n", resource.c_str()); - // Copy data and length to coap response - } - -private: - M2MObject* big_payload; -}; // Network interaction must be performed outside of interrupt context Semaphore updates(0); volatile bool registered = false; volatile bool clicked = false; +volatile bool update_trigger = false; osThreadId mainThread; void unregister() { @@ -346,6 +46,10 @@ updates.release(); } +void trigger_update(){ + update_trigger = true; +} + // debug printf function void trace_printer(const char* str) { printf("%s\r\n", str); @@ -378,7 +82,7 @@ srand(seed); red_led = 1; blue_led = 1; - status_ticker.attach_us(blinky, 250000); + //status_ticker.attach_us(blinky, 250000); // Keep track of the main thread mainThread = osThreadGetId(); @@ -425,10 +129,23 @@ output.printf("No IP address\r\n"); } - // we create our button and LED resources + // create resources ButtonResource button_resource; LedResource led_resource; BigPayloadResource big_payload_resource; + GnssCustomResource gnss_resource; + AccelResource accel_resource; + + // enable accelerometer + accel.enable(); + output.printf("Initializied accelerometer\r\n"); + + // Set gps UART baud rate + gps.baud(115200); + + // Check GNSS UART connectivity + if(gps.readable()) output.printf("GNSS UART interface connected. \n"); + else output.printf("WARNING: GNSS UART interface not connected or powered ON. \n"); #ifdef TARGET_K64F // On press of SW3 button on K64F board, example application @@ -438,11 +155,11 @@ // Observation Button (SW2) press will send update of endpoint resource values to connector obs_button.fall(&button_clicked); -#else - // Send update of endpoint resource values to connector every 15 seconds periodically - timer.attach(&button_clicked, 15.0); #endif + // Send update of endpoint resource values to connector every # seconds periodically + timer.attach(&trigger_update, 0.5); + // Create endpoint interface to manage register and unregister mbed_client.create_interface(MBED_SERVER_ADDRESS, network_interface); @@ -455,9 +172,12 @@ // Add objects to list object_list.push_back(device_object); - object_list.push_back(button_resource.get_object()); - object_list.push_back(led_resource.get_object()); - object_list.push_back(big_payload_resource.get_object()); + object_list.push_back(accel_resource.get_object()); + object_list.push_back(gnss_resource.get_object()); + + //object_list.push_back(button_resource.get_object()); + //object_list.push_back(led_resource.get_object()); + //object_list.push_back(big_payload_resource.get_object()); // Set endpoint registration object mbed_client.set_register_object(register_object); @@ -465,11 +185,12 @@ // Register with mbed Device Connector mbed_client.test_register(register_object, object_list); registered = true; + updates.wait(5000); while (true) { - updates.wait(25000); + updates.wait(2000); if(registered) { - if(!clicked) { + if(!clicked && !update_trigger) { mbed_client.test_update_register(); } }else { @@ -479,8 +200,17 @@ clicked = false; button_resource.handle_button_click(); } + if(update_trigger) + { + update_trigger = false; + // Call resource refresh functions + // gnss_resource + accel_resource.handle_accel_update(); + if(gps.readable()) gnss_resource.handle_gnss_update(); + } } mbed_client.test_unregister(); - status_ticker.detach(); + timer.detach(); + //status_ticker.detach(); }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/resources.h Fri Jan 20 12:34:35 2017 +0000 @@ -0,0 +1,858 @@ +#include "simpleclient.h" +#include "mbed-trace/mbed_trace.h" +#include "mbedtls/entropy_poll.h" +#include "FXOS8700Q.h" +#include "MODSERIAL.h" + +#define PI 3.14159265 + +//MODSERIAL gps +MODSERIAL gps(PTD3, PTD2); // (PTC17, PTC16) UART3 not functional on etherenet enabling +I2C i2c(PTE25, PTE24); // Configured for the FRDM-K64F with onboard sensors +FXOS8700QAccelerometer accel(i2c,FXOS8700CQ_SLAVE_ADDR1); +char cDataBuffer[500]; + +struct gnss_params +{ + float latitude; //Latitude + float longitude; //Longitude + float altitude; //Altitude + float baselineLen; //BaseLine Length + float heading; // Heading + int date; + int time; + int fix_quality; // 0 INVALID, 1 GPS, 2 DIFF + int numsat; +}; + + +#if MBED_CONF_APP_NETWORK_INTERFACE == WIFI + #if TARGET_UBLOX_EVK_ODIN_W2 + #include "OdinWiFiInterface.h" + OdinWiFiInterface wifi; + #else + #include "ESP8266Interface.h" + ESP8266Interface wifi(MBED_CONF_APP_WIFI_TX, MBED_CONF_APP_WIFI_RX); + #endif +#elif MBED_CONF_APP_NETWORK_INTERFACE == ETHERNET + #include "EthernetInterface.h" + EthernetInterface eth; +#elif MBED_CONF_APP_NETWORK_INTERFACE == MESH_LOWPAN_ND + #define MESH + #include "NanostackInterface.h" + LoWPANNDInterface mesh; +#elif MBED_CONF_APP_NETWORK_INTERFACE == MESH_THREAD + #define MESH + #include "NanostackInterface.h" + ThreadInterface mesh; +#endif + +#if defined(MESH) +#if MBED_CONF_APP_MESH_RADIO_TYPE == ATMEL +#include "NanostackRfPhyAtmel.h" +NanostackRfPhyAtmel rf_phy(ATMEL_SPI_MOSI, ATMEL_SPI_MISO, ATMEL_SPI_SCLK, ATMEL_SPI_CS, + ATMEL_SPI_RST, ATMEL_SPI_SLP, ATMEL_SPI_IRQ, ATMEL_I2C_SDA, ATMEL_I2C_SCL); +#elif MBED_CONF_APP_MESH_RADIO_TYPE == MCR20 +#include "NanostackRfPhyMcr20a.h" +NanostackRfPhyMcr20a rf_phy(MCR20A_SPI_MOSI, MCR20A_SPI_MISO, MCR20A_SPI_SCLK, MCR20A_SPI_CS, MCR20A_SPI_RST, MCR20A_SPI_IRQ); +#endif //MBED_CONF_APP_RADIO_TYPE +#endif //MESH + +#ifdef MESH + // Mesh does not have DNS, so must use direct IPV6 address + #define MBED_SERVER_ADDRESS "coaps://[2607:f0d0:2601:52::20]:5684" +#else + // This is address to mbed Device Connector, name based + // assume all other stacks support DNS properly + #define MBED_SERVER_ADDRESS "coap://leshan.eclipse.org:5683" //"coap://api.connector.mbed.com:5684" +#endif + +RawSerial output(USBTX, USBRX); + +// Status indication +DigitalOut red_led(LED1); +DigitalOut green_led(LED2); +DigitalOut blue_led(LED3); +//Ticker status_ticker; +void blinky() { + red_led = !red_led; + +} + +// These are example resource values for the Device Object +struct MbedClientDevice device = { + "RJio", // Manufacturer + "Netra2.0", // Type + "0.01", // ModelNumber + "007" // SerialNumber +}; + +// Instantiate the class which implements LWM2M Client API (from simpleclient.h) +MbedClient mbed_client(device); + + +// In case of K64F board , there is button resource available +// to change resource value and unregister +#ifdef TARGET_K64F +// Set up Hardware interrupt button. +InterruptIn obs_button(SW2); +InterruptIn unreg_button(SW3); +#endif + +// set up a timer to simulate updating resource, +// there is no functionality to unregister. +Ticker timer; + +/* + * Arguments for running "blink" in it's own thread. + */ +class BlinkArgs { +public: + BlinkArgs() { + clear(); + } + void clear() { + position = 0; + blink_pattern.clear(); + } + uint16_t position; + std::vector<uint32_t> blink_pattern; +}; + +/* + * The Led contains one property (pattern) and a function (blink). + * When the function blink is executed, the pattern is read, and the LED + * will blink based on the pattern. + */ +class LedResource { +public: + LedResource() { + // create ObjectID with metadata tag of '3201', which is 'digital output' + led_object = M2MInterfaceFactory::create_object("3201"); + M2MObjectInstance* led_inst = led_object->create_object_instance(); + + // 5853 = Multi-state output + M2MResource* pattern_res = led_inst->create_dynamic_resource("5853", "Pattern", + M2MResourceInstance::STRING, false); + // read and write + pattern_res->set_operation(M2MBase::GET_PUT_ALLOWED); + // set initial pattern (toggle every 200ms. 7 toggles in total) + pattern_res->set_value((const uint8_t*)"500:500:500:500:500:500:500", 27); + + // there's not really an execute LWM2M ID that matches... hmm... + M2MResource* led_res = led_inst->create_dynamic_resource("5850", "Blink", + M2MResourceInstance::OPAQUE, false); + // we allow executing a function here... + led_res->set_operation(M2MBase::POST_ALLOWED); + // when a POST comes in, we want to execute the led_execute_callback + led_res->set_execute_function(execute_callback(this, &LedResource::blink)); + // Completion of execute function can take a time, that's why delayed response is used + led_res->set_delayed_response(true); + blink_args = new BlinkArgs(); + } + + ~LedResource() { + delete blink_args; + } + + M2MObject* get_object() { + return led_object; + } + + void blink(void *argument) { + // read the value of 'Pattern' + //status_ticker.detach(); + green_led = 1; + + M2MObjectInstance* inst = led_object->object_instance(); + M2MResource* res = inst->resource("5853"); + // Clear previous blink data + blink_args->clear(); + + // values in mbed Client are all buffers, and we need a vector of int's + uint8_t* buffIn = NULL; + uint32_t sizeIn; + res->get_value(buffIn, sizeIn); + + // turn the buffer into a string, and initialize a vector<int> on the heap + std::string s((char*)buffIn, sizeIn); + free(buffIn); + output.printf("led_execute_callback pattern=%s\r\n", s.c_str()); + + // our pattern is something like 500:200:500, so parse that + std::size_t found = s.find_first_of(":"); + while (found!=std::string::npos) { + blink_args->blink_pattern.push_back(atoi((const char*)s.substr(0,found).c_str())); + s = s.substr(found+1); + found=s.find_first_of(":"); + if(found == std::string::npos) { + blink_args->blink_pattern.push_back(atoi((const char*)s.c_str())); + } + } + // check if POST contains payload + if (argument) { + M2MResource::M2MExecuteParameter* param = (M2MResource::M2MExecuteParameter*)argument; + String object_name = param->get_argument_object_name(); + uint16_t object_instance_id = param->get_argument_object_instance_id(); + String resource_name = param->get_argument_resource_name(); + int payload_length = param->get_argument_value_length(); + uint8_t* payload = param->get_argument_value(); + output.printf("Resource: %s/%d/%s executed\r\n", object_name.c_str(), object_instance_id, resource_name.c_str()); + output.printf("Payload: %.*s\r\n", payload_length, payload); + } + // do_blink is called with the vector, and starting at -1 + blinky_thread.start(this, &LedResource::do_blink); + } + +private: + M2MObject* led_object; + Thread blinky_thread; + BlinkArgs *blink_args; + void do_blink() { + for (;;) { + // blink the LED + green_led = !green_led; + // up the position, if we reached the end of the vector + if (blink_args->position >= blink_args->blink_pattern.size()) { + // send delayed response after blink is done + M2MObjectInstance* inst = led_object->object_instance(); + M2MResource* led_res = inst->resource("5850"); + led_res->send_delayed_post_response(); + red_led = 1; + //status_ticker.attach_us(blinky, 250000); + return; + } + // Wait requested time, then continue prosessing the blink pattern from next position. + Thread::wait(blink_args->blink_pattern.at(blink_args->position)); + blink_args->position++; + } + } +}; + +/* + * The button contains one property (click count). + * When `handle_button_click` is executed, the counter updates. + */ +class ButtonResource { +public: + ButtonResource(): counter(0) { + // create ObjectID with metadata tag of '3200', which is 'digital input' + btn_object = M2MInterfaceFactory::create_object("3200"); + M2MObjectInstance* btn_inst = btn_object->create_object_instance(); + // create resource with ID '5501', which is digital input counter + M2MResource* btn_res = btn_inst->create_dynamic_resource("5501", "Button", + M2MResourceInstance::INTEGER, true /* observable */); + // we can read this value + btn_res->set_operation(M2MBase::GET_ALLOWED); + // set initial value (all values in mbed Client are buffers) + // to be able to read this data easily in the Connector console, we'll use a string + btn_res->set_value((uint8_t*)"0", 1); + } + + ~ButtonResource() { + } + + M2MObject* get_object() { + return btn_object; + } + + /* + * When you press the button, we read the current value of the click counter + * from mbed Device Connector, then up the value with one. + */ + void handle_button_click() { + M2MObjectInstance* inst = btn_object->object_instance(); + M2MResource* res = inst->resource("5501"); + + // up counter + counter++; +#ifdef TARGET_K64F + //printf("handle_button_click, new value of counter is %d\r\n", counter); +#endif + + // serialize the value of counter as a string, and tell connector + char buffer[20]; + int size = sprintf(buffer,"%d",counter); + res->set_value((uint8_t*)buffer, size); + } + +private: + M2MObject* btn_object; + uint16_t counter; +}; + +/* + * The GNSS contains 1 property (Azimuth). + * When `handle_azimuth_update` is executed, the azimuth updates. + */ +class GnssResource { +public: + GnssResource(): azimuth(0) { + // create ObjectID with metadata tag of '3336', which is 'GPS location' + gnss_object = M2MInterfaceFactory::create_object("3336"); + + M2MObjectInstance* gnss_inst = gnss_object->create_object_instance(); + // create resource with ID '5513', which is digital input Latitude + M2MResource* lat_res = gnss_inst->create_dynamic_resource("5513", "Latitude", + M2MResourceInstance::FLOAT, true /* observable */); + // we can read this value + lat_res->set_operation(M2MBase::GET_ALLOWED); + // set initial value (all values in mbed Client are buffers) + // to be able to read this data easily in the Connector console, we'll use a string + lat_res->set_value(0.0); + + M2MResource* long_res = gnss_inst->create_dynamic_resource("5514", "Longitude", + M2MResourceInstance::FLOAT, true /* observable */); + // we can read this value + long_res->set_operation(M2MBase::GET_ALLOWED); + // set initial value (all values in mbed Client are buffers) + // to be able to read this data easily in the Connector console, we'll use a string + long_res->set_value(0.0); + + M2MResource* alt_res = gnss_inst->create_dynamic_resource("5515", "Altitude", + M2MResourceInstance::FLOAT, true /* observable */); + // we can read this value + alt_res->set_operation(M2MBase::GET_ALLOWED); + // set initial value (all values in mbed Client are buffers) + // to be able to read this data easily in the Connector console, we'll use a string + alt_res->set_value(0.0); + + M2MResource* azi_res = gnss_inst->create_dynamic_resource("5705", "Heading", + M2MResourceInstance::FLOAT, true /* observable */); + // we can read this value + azi_res->set_operation(M2MBase::GET_ALLOWED); + // set initial value (all values in mbed Client are buffers) + // to be able to read this data easily in the Connector console, we'll use a string + azi_res->set_value(0.0); + + M2MResource* app_res = gnss_inst->create_dynamic_resource("5750", "AppType", + M2MResourceInstance::STRING, true /* observable */); + // we can read this value + app_res->set_operation(M2MBase::GET_ALLOWED); + // set initial value (all values in mbed Client are buffers) + // to be able to read this data easily in the Connector console, we'll use a string + size = sprintf(buffer,"%s","AntennaAlignment"); + app_res->set_value((const uint8_t*)buffer, size); + +#if 0 + M2MResource* time_res = gnss_inst->create_dynamic_resource("5707", "Time", + M2MResourceInstance::INTEGER, true /* observable */); + // we can read this value + time_res->set_operation(M2MBase::GET_ALLOWED); + // set initial value (all values in mbed Client are buffers) + // to be able to read this data easily in the Connector console, we'll use a string + time_res->set_value((uint8_t*)"0", 1); + + M2MResource* numsat_res = gnss_inst->create_dynamic_resource("5708", "NumSat", + M2MResourceInstance::INTEGER, true /* observable */); + // we can read this value + numsat_res->set_operation(M2MBase::GET_ALLOWED); + // set initial value (all values in mbed Client are buffers) + // to be able to read this data easily in the Connector console, we'll use a string + numsat_res->set_value((uint8_t*)"0", 1); + + M2MResource* blen_res = gnss_inst->create_dynamic_resource("5709", "BaseLen", + M2MResourceInstance::FLOAT, true /* observable */); + // we can read this value + blen_res->set_operation(M2MBase::GET_ALLOWED); + // set initial value (all values in mbed Client are buffers) + // to be able to read this data easily in the Connector console, we'll use a string + blen_res->set_value(0.0); + + M2MResource* fq_res = gnss_inst->create_dynamic_resource("5710", "FixQuality", + M2MResourceInstance::INTEGER, true /* observable */); + // we can read this value + fq_res->set_operation(M2MBase::GET_ALLOWED); + // set initial value (all values in mbed Client are buffers) + // to be able to read this data easily in the Connector console, we'll use a string + fq_res->set_value((uint8_t*)"0", 1); + + M2MResource* date_res = gnss_inst->create_dynamic_resource("5706", "Date", + M2MResourceInstance::INTEGER, true /* observable */); + // we can read this value + date_res->set_operation(M2MBase::GET_ALLOWED); + // set initial value (all values in mbed Client are buffers) + // to be able to read this data easily in the Connector console, we'll use a string + date_res->set_value((uint8_t*)"0", 1); +#endif + + } + + ~GnssResource() { + } + + M2MObject* get_object() { + return gnss_object; + } + + /* + * When you press the button, we read the current value of the click azimuth + * from mbed Device Connector, then up the value with one. + */ + void gps_scan(void) + { + char c; + PSTI32 = false; GPGGA = false; + Timer timeout; + timeout.start(); + + while((!PSTI32 || !GPGGA) && (timeout.read() < 10)) + { + if(gps.readable()) + { + if(gps.getc() == '$'); // wait for a $ + { + for(int i=0; i<sizeof(cDataBuffer); i++) + { + c = gps.getc(); + if( c == '\r' ) + { + //pc.printf("%s\n", cDataBuffer); + parse(cDataBuffer, i); + i = sizeof(cDataBuffer); + } + else + { + cDataBuffer[i] = c; + } + } + } + } + else break; + } + timeout.stop(); + } + + void parse(char *cmd, int n) + { + char ns, ew, tf, status, mode; + int fq, nst, fix, date, timefix, pstino; // fix quality, Number of satellites being tracked, 3D fix + float latitude, longitude, speed, altitude, eastprj, northprj, upprj, blength, bcourse; + + // Global Positioning System Fix Data + if(strncmp(cmd,"$GPGGA", 6) == 0) + { + sscanf(cmd, "$GPGGA,%d,%f,%c,%f,%c,%d,%d,%f", &timefix, &latitude, &ns, &longitude, &ew, &fq, &nst, &altitude); + //output.printf("GPGGA Fix taken at: %d, Latitude: %f %c, Longitude: %f %c, Fix quality: %d, Number of sat: %d, Altitude: %f M\n", timefix, latitude, ns, longitude, ew, fq, nst, altitude); + gnss_scan.latitude = latitude; + gnss_scan.longitude = longitude; + //gnss_scan.date = date; + gnss_scan.time = timefix; + gnss_scan.altitude = altitude; + gnss_scan.fix_quality = fq; + gnss_scan.numsat = nst; + GPGGA = true; + } + + // Baseline length, Azimuth + if(strncmp(cmd,"$PSTI", 5) == 0) + { + sscanf(cmd, "$PSTI,%d,%d,%d,%c,%c,%f,%f,%f,%f,%f", &pstino, &timefix, &date, &status, &mode, &eastprj, &northprj, &upprj, &blength, &bcourse); + if(32 == pstino) + { + //output.printf("PSTI32 Fix taken at: %d, Date: %d, Status: %c, Mode: %c, Baseline length: %f m, Azimuth: %f degrees\n", timefix, date, status, mode, blength, bcourse); + gnss_scan.heading = bcourse; gnss_scan.date = date; gnss_scan.time = timefix; + gnss_scan.baselineLen = blength; //BaseLine Length + PSTI32 = true; + } + } +#if 0 + // Satellite status + if(strncmp(cmd,"$GPGSA", 6) == 0) + { + sscanf(cmd, "$GPGSA,%c,%d,%d", &tf, &fix, &nst); + pc.printf("GPGSA Type fix: %c, 3D fix: %d, number of sat: %d\r\n", tf, fix, nst); + } + + // Geographic position, Latitude and Longitude + if(strncmp(cmd,"$GPGLL", 6) == 0) + { + sscanf(cmd, "$GPGLL,%f,%c,%f,%c,%f", &latitude, &ns, &longitude, &ew, &timefix); + pc.printf("GPGLL Latitude: %f %c, Longitude: %f %c, Fix taken at: %f\n", latitude, ns, longitude, ew, timefix); + } + + // Geographic position, Latitude and Longitude + if(strncmp(cmd,"$GPRMC", 6) == 0) + { + sscanf(cmd, "$GPRMC,%f,%c,%f,%c,%f,%c,%f,,%d", &timefix, &status, &latitude, &ns, &longitude, &ew, &speed, &date); + pc.printf("GPRMC Fix taken at: %f, Status: %c, Latitude: %f %c, Longitude: %f %c, Speed: %f, Date: %d\n", timefix, status, latitude, ns, longitude, ew, speed, date); + } +#endif + } + void handle_gnss_update() { + M2MObjectInstance* inst = gnss_object->object_instance(); + M2MResource* latituderes = inst->resource("5513"); + M2MResource* longituderes = inst->resource("5514"); + M2MResource* altres = inst->resource("5515"); + M2MResource* azimuthres = inst->resource("5705"); + M2MResource* appres = inst->resource("5750"); + + gps_scan(); + + size = sprintf(buffer,"%f",gnss_scan.latitude); + latituderes->set_value((const uint8_t*)buffer, size); + + size = sprintf(buffer,"%f",gnss_scan.longitude); + longituderes->set_value((const uint8_t*)buffer, size); + + size = sprintf(buffer,"%f",gnss_scan.altitude); + altres->set_value((const uint8_t*)buffer, size); + + size = sprintf(buffer,"%f",gnss_scan.heading); + azimuthres->set_value((const uint8_t*)buffer, size); + + size = sprintf(buffer,"%s","AntennaAlignment"); + appres->set_value((const uint8_t*)buffer, size); + +#if 0 + + M2MResource* dateres = inst->resource("5706"); + M2MResource* timeres = inst->resource("5707"); + M2MResource* numsatres = inst->resource("5708"); + M2MResource* blenres = inst->resource("5709"); + M2MResource* fqres = inst->resource("5710"); + + size = sprintf(buffer,"%d",gnss_scan.date); + dateres->set_value((const uint8_t*)buffer, size); + + size = sprintf(buffer,"%d",gnss_scan.time); + timeres->set_value((const uint8_t*)buffer, size); + + size = sprintf(buffer,"%d",gnss_scan.numsat); + numsatres->set_value((const uint8_t*)buffer, size); + + size = sprintf(buffer,"%f",gnss_scan.baselineLen); + blenres->set_value((const uint8_t*)buffer, size); + + size = sprintf(buffer,"%d",gnss_scan.fix_quality); + fqres->set_value((const uint8_t*)buffer, size); +#endif + + output.printf("GNSS data updated\n"); + } + +private: + M2MObject* gnss_object; + uint16_t azimuth; + bool PSTI32; + bool GPGGA; + gnss_params gnss_scan; + char buffer[20]; + int size; +}; + +const uint8_t STATIC_VALUE[] = "Cellular Antenna Alignment"; +/* + * The GNSS custom object + */ +/* + * The GNSS custom object + */ +class GnssCustomResource { +public: + GnssCustomResource() { + // create ObjectID with metadata custom tag + gnss_object = M2MInterfaceFactory::create_object("JioNetraGNSScompass"); + M2MObjectInstance* gnss_inst = gnss_object->create_object_instance(); + + + M2MResource* lat_res = gnss_inst->create_dynamic_resource("E", + "JioLatitude", + M2MResourceInstance::FLOAT, + true); + // we can read this value + lat_res->set_operation(M2MBase::GET_ALLOWED); + // set initial value (all values in mbed Client are buffers) + // to be able to read this data easily in the Connector console, we'll use a string + lat_res->set_value(0.0); + + M2MResource* app_res = gnss_inst->create_static_resource("N", + "JioAppType", + M2MResourceInstance::STRING, + STATIC_VALUE, + sizeof(STATIC_VALUE)-1); + // we can read this value + app_res->set_operation(M2MBase::GET_ALLOWED); + // set initial value (all values in mbed Client are buffers) + // to be able to read this data easily in the Connector console, we'll use a string + size = sprintf(buffer,"%s","AntennaAlignment"); + app_res->set_value((const uint8_t*)buffer, size); + + + } + + ~GnssCustomResource() { + } + + M2MObject* get_object() { + return gnss_object; + } + + /* + * When you press the button, we read the current value of the click azimuth + * from mbed Device Connector, then up the value with one. + */ + void gps_scan(void) + { + char c; + PSTI32 = false; GPGGA = false; + Timer timeout; + timeout.start(); + + while((!PSTI32 || !GPGGA) && (timeout.read() < 10)) + { + if(gps.readable()) + { + if(gps.getc() == '$'); // wait for a $ + { + for(int i=0; i<sizeof(cDataBuffer); i++) + { + c = gps.getc(); + if( c == '\r' ) + { + //pc.printf("%s\n", cDataBuffer); + parse(cDataBuffer, i); + i = sizeof(cDataBuffer); + } + else + { + cDataBuffer[i] = c; + } + } + } + } + else break; + } + timeout.stop(); + } + + void parse(char *cmd, int n) + { + char ns, ew, tf, status, mode; + int fq, nst, fix, date, timefix, pstino; // fix quality, Number of satellites being tracked, 3D fix + float latitude, longitude, speed, altitude, eastprj, northprj, upprj, blength, bcourse; + + // Global Positioning System Fix Data + if(strncmp(cmd,"$GPGGA", 6) == 0) + { + sscanf(cmd, "$GPGGA,%d,%f,%c,%f,%c,%d,%d,%f", &timefix, &latitude, &ns, &longitude, &ew, &fq, &nst, &altitude); + //output.printf("GPGGA Fix taken at: %d, Latitude: %f %c, Longitude: %f %c, Fix quality: %d, Number of sat: %d, Altitude: %f M\n", timefix, latitude, ns, longitude, ew, fq, nst, altitude); + gnss_scan.latitude = latitude; + gnss_scan.longitude = longitude; + //gnss_scan.date = date; + gnss_scan.time = timefix; + gnss_scan.altitude = altitude; + gnss_scan.fix_quality = fq; + gnss_scan.numsat = nst; + GPGGA = true; + } + + // Baseline length, Azimuth + if(strncmp(cmd,"$PSTI", 5) == 0) + { + sscanf(cmd, "$PSTI,%d,%d,%d,%c,%c,%f,%f,%f,%f,%f", &pstino, &timefix, &date, &status, &mode, &eastprj, &northprj, &upprj, &blength, &bcourse); + if(32 == pstino) + { + //output.printf("PSTI32 Fix taken at: %d, Date: %d, Status: %c, Mode: %c, Baseline length: %f m, Azimuth: %f degrees\n", timefix, date, status, mode, blength, bcourse); + gnss_scan.heading = bcourse; gnss_scan.date = date; gnss_scan.time = timefix; + gnss_scan.baselineLen = blength; //BaseLine Length + PSTI32 = true; + } + } +#if 0 + // Satellite status + if(strncmp(cmd,"$GPGSA", 6) == 0) + { + sscanf(cmd, "$GPGSA,%c,%d,%d", &tf, &fix, &nst); + pc.printf("GPGSA Type fix: %c, 3D fix: %d, number of sat: %d\r\n", tf, fix, nst); + } + + // Geographic position, Latitude and Longitude + if(strncmp(cmd,"$GPGLL", 6) == 0) + { + sscanf(cmd, "$GPGLL,%f,%c,%f,%c,%f", &latitude, &ns, &longitude, &ew, &timefix); + pc.printf("GPGLL Latitude: %f %c, Longitude: %f %c, Fix taken at: %f\n", latitude, ns, longitude, ew, timefix); + } + + // Geographic position, Latitude and Longitude + if(strncmp(cmd,"$GPRMC", 6) == 0) + { + sscanf(cmd, "$GPRMC,%f,%c,%f,%c,%f,%c,%f,,%d", &timefix, &status, &latitude, &ns, &longitude, &ew, &speed, &date); + pc.printf("GPRMC Fix taken at: %f, Status: %c, Latitude: %f %c, Longitude: %f %c, Speed: %f, Date: %d\n", timefix, status, latitude, ns, longitude, ew, speed, date); + } +#endif + } + void handle_gnss_update() { + M2MObjectInstance* inst = gnss_object->object_instance(); + M2MResource* latituderes = inst->resource("E"); + M2MResource* appres = inst->resource("N"); + + gps_scan(); + + size = sprintf(buffer,"%f",gnss_scan.latitude); + latituderes->set_value((const uint8_t*)buffer, size); + + + output.printf("GNSS data updated\n"); + } + +private: + M2MObject* gnss_object; + uint16_t azimuth; + bool PSTI32; + bool GPGGA; + gnss_params gnss_scan; + char buffer[20]; + int size; +}; + +class AccelResource { +public: + AccelResource(){ + + // create ObjectID with metadata tag of '3313', which is 'IPSO Accelerometer' + accel_object = M2MInterfaceFactory::create_object("3313"); + M2MObjectInstance* accel_inst = accel_object->create_object_instance(); + + // create resource with ID '5701', which is accelerometer units + M2MResource* units_res = accel_inst->create_dynamic_resource("5701", "Units", + M2MResourceInstance::STRING, false /* non-observable */); + // we can read this value + units_res->set_operation(M2MBase::GET_ALLOWED); + // set initial value (all values in mbed Client are buffers) + // to be able to read this data easily in the Connector console, we'll use a string + size = sprintf(buffer,"%s","degrees"); + units_res->set_value((const uint8_t*)buffer, size); + + + // create resource with ID '5702', which is accelerometer X value + M2MResource* x_res = accel_inst->create_dynamic_resource("5702", "Tilt", + M2MResourceInstance::FLOAT, true /* observable */); + // we can read this value + x_res->set_operation(M2MBase::GET_ALLOWED); + // set initial value (all values in mbed Client are buffers) + // to be able to read this data easily in the Connector console, we'll use a string + size = sprintf(buffer,"%f",0.0); + x_res->set_value((const uint8_t*)buffer, size); + + // create resource with ID '5703', which is accelerometer Y value + M2MResource* y_res = accel_inst->create_dynamic_resource("5703", "Roll", + M2MResourceInstance::FLOAT, true /* observable */); + // we can read this value + y_res->set_operation(M2MBase::GET_ALLOWED); + // set initial value (all values in mbed Client are buffers) + // to be able to read this data easily in the Connector console, we'll use a string + size = sprintf(buffer,"%f",0.0); + y_res->set_value((const uint8_t*)buffer, size); + + } + + ~AccelResource() { + } + + M2MObject* get_object() { + return accel_object; + } + + /* + * Timer based update triggers planned + */ + + void handle_accel_update() + { + double angleX, denomX_T, denomX_A, denomX_B, denomX_C; //intializing variable to hold the angle calculation + double angleY, denomY_T, denomY_A, denomY_B, denomY_C; + float faX, faY, faZ; + + M2MObjectInstance* inst = accel_object->object_instance(); + M2MResource* xres = inst->resource("5702"); + M2MResource* yres = inst->resource("5703"); + + // Read accelerometer data + //accel.getAxis(acc_data); + accel.getX(faX); + accel.getY(faY); + accel.getZ(faZ); + + // Canculate angles in degrees + //X-AXIS + denomX_A = pow(faY, 2); + denomX_B = pow(faZ, 2); + denomX_C = denomX_A + denomX_B; + denomX_T = pow(denomX_C, .5); //pow returns base raised to the power exponent + + angleX = atan(faX/denomX_T) * 180/PI; //should calculate the angle on the X axis in degrees based on raw data + + //Y-AXIS + denomY_A = pow(faX, 2); + denomY_B = pow(faZ, 2); + denomY_C = denomY_A + denomY_B; + denomY_T = pow(denomY_C, .5); //pow returns base raised to the power exponent + + angleY = atan(faY/denomY_T) * 180/PI; //should calculate the angle on the Y axis in degrees based on raw data + + // serialize the value of x & y accel ops as a string, and tell connector + size = sprintf(buffer,"%f",angleX); + xres->set_value((const uint8_t*)buffer, size); + + size = sprintf(buffer,"%f",angleY); + yres->set_value((const uint8_t*)buffer, size); + printf("Accelerometer update, x:%f degrees, y:%f degrees\r\n", angleX, angleY ); + + } + +private: + M2MObject* accel_object; + //motion_data_units_t acc_data; + char buffer[20]; + int size; +}; + +class BigPayloadResource { +public: + BigPayloadResource() { + big_payload = M2MInterfaceFactory::create_object("1000"); + M2MObjectInstance* payload_inst = big_payload->create_object_instance(); + M2MResource* payload_res = payload_inst->create_dynamic_resource("1", "BigData", + M2MResourceInstance::STRING, true /* observable */); + payload_res->set_operation(M2MBase::GET_PUT_ALLOWED); + payload_res->set_value((uint8_t*)"0", 1); + payload_res->set_incoming_block_message_callback( + incoming_block_message_callback(this, &BigPayloadResource::block_message_received)); + payload_res->set_outgoing_block_message_callback( + outgoing_block_message_callback(this, &BigPayloadResource::block_message_requested)); + } + + M2MObject* get_object() { + return big_payload; + } + + void block_message_received(M2MBlockMessage *argument) { + if (argument) { + if (M2MBlockMessage::ErrorNone == argument->error_code()) { + if (argument->is_last_block()) { + output.printf("Last block received\r\n"); + } + output.printf("Block number: %d\r\n", argument->block_number()); + // First block received + if (argument->block_number() == 0) { + // Store block + // More blocks coming + } else { + // Store blocks + } + } else { + output.printf("Error when receiving block message! - EntityTooLarge\r\n"); + } + output.printf("Total message size: %d\r\n", argument->total_message_size()); + } + } + + void block_message_requested(const String& resource, uint8_t *&/*data*/, uint32_t &/*len*/) { + output.printf("GET request received for resource: %s\r\n", resource.c_str()); + // Copy data and length to coap response + } + +private: + M2MObject* big_payload; +}; \ No newline at end of file
--- a/security.h Wed Jan 04 22:15:09 2017 +0000 +++ b/security.h Fri Jan 20 12:34:35 2017 +0000 @@ -18,18 +18,40 @@ #include <inttypes.h> -#define MBED_DOMAIN "DOMAIN" -#define MBED_ENDPOINT_NAME "ENDPOINT_NAME" - +#define MBED_DOMAIN "MBED_DOMAIN" +#define MBED_ENDPOINT_NAME "RJio_AAT" +//#define MBED_DOMAIN "0fdef33a-45fd-4557-8a5a-59573147a9d8" +//#define MBED_ENDPOINT_NAME "97a4baf6-1b2f-4448-90a2-895c734d61bd" + const uint8_t SERVER_CERT[] = "-----BEGIN CERTIFICATE-----\r\n" +"MIIBmDCCAT6gAwIBAgIEVUCA0jAKBggqhkjOPQQDAjBLMQswCQYDVQQGEwJGSTEN\r\n" +"MAsGA1UEBwwET3VsdTEMMAoGA1UECgwDQVJNMQwwCgYDVQQLDANJb1QxETAPBgNV\r\n" +"BAMMCEFSTSBtYmVkMB4XDTE1MDQyOTA2NTc0OFoXDTE4MDQyOTA2NTc0OFowSzEL\r\n" +"MAkGA1UEBhMCRkkxDTALBgNVBAcMBE91bHUxDDAKBgNVBAoMA0FSTTEMMAoGA1UE\r\n" +"CwwDSW9UMREwDwYDVQQDDAhBUk0gbWJlZDBZMBMGByqGSM49AgEGCCqGSM49AwEH\r\n" +"A0IABLuAyLSk0mA3awgFR5mw2RHth47tRUO44q/RdzFZnLsAsd18Esxd5LCpcT9w\r\n" +"0tvNfBv4xJxGw0wcYrPDDb8/rjujEDAOMAwGA1UdEwQFMAMBAf8wCgYIKoZIzj0E\r\n" +"AwIDSAAwRQIhAPAonEAkwixlJiyYRQQWpXtkMZax+VlEiS201BG0PpAzAiBh2RsD\r\n" +"NxLKWwf4O7D6JasGBYf9+ZLwl0iaRjTjytO+Kw==\r\n" "-----END CERTIFICATE-----\r\n"; const uint8_t CERT[] = "-----BEGIN CERTIFICATE-----\r\n" +"MIIBzzCCAXOgAwIBAgIEd+zhADAMBggqhkjOPQQDAgUAMDkxCzAJBgNVBAYTAkZ\r\n" +"JMQwwCgYDVQQKDANBUk0xHDAaBgNVBAMME21iZWQtY29ubmVjdG9yLTIwMTgwHh\r\n" +"cNMTcwMTExMDcwODE1WhcNMTgxMjMxMDYwMDAwWjCBoTFSMFAGA1UEAxNJMGZkZ\r\n" +"WYzM2EtNDVmZC00NTU3LThhNWEtNTk1NzMxNDdhOWQ4Lzk3YTRiYWY2LTFiMmYt\r\n" +"NDQ0OC05MGEyLTg5NWM3MzRkNjFiZDEMMAoGA1UECxMDQVJNMRIwEAYDVQQKEwl\r\n" +"tYmVkIHVzZXIxDTALBgNVBAcTBE91bHUxDTALBgNVBAgTBE91bHUxCzAJBgNVBA\r\n" +"YTAkZJMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEqLo0YebHUqyCZ9yKboFSv\r\n" +"rjGTiuWFEo44pFpM0ZxBytW1FB2jCUEIPH8+5BKhbj3jA0nafHt/dO1DuPy7S2r\r\n" +"gjAMBggqhkjOPQQDAgUAA0gAMEUCIQDf7OwpWVLRRhTFSmFNk89Hc8htgDvaXgH\r\n" +"7mceQWXfP2wIgYxwfIOpZNNG7MRnC6q6CWoIngqz8hwQYvXZM/TutTzs=\r\n" "-----END CERTIFICATE-----\r\n"; const uint8_t KEY[] = "-----BEGIN PRIVATE KEY-----\r\n" +"MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgsnWvPZGzDTqT34Ak\r\n" +"cfTuZJFuWEEpYbHKuJcLqNPRW46hRANCAASoujRh5sdSrIJn3IpugVK+uMZOK5YU\r\n" +"SjjikWkzRnEHK1bUUHaMJQQg8fz7kEqFuPeMDSdp8e3907UO4/LtLauC\r\n" "-----END PRIVATE KEY-----\r\n"; -#endif //__SECURITY_H__ - -#error "You need to get security.h credentials from connector.mbed.com and replace the content of this security.h file" +#endif //__SECURITY_H__ \ No newline at end of file
--- a/simpleclient.h Wed Jan 04 22:15:09 2017 +0000 +++ b/simpleclient.h Fri Jan 20 12:34:35 2017 +0000 @@ -60,7 +60,7 @@ // WiFi or Ethernet supports both - TCP by default to avoid // NAT problems, but UDP will also work - IF you configure // your network right. - M2MInterface::BindingMode SOCKET_MODE = M2MInterface::TCP; + M2MInterface::BindingMode SOCKET_MODE = M2MInterface::UDP; //TCP; #endif @@ -173,7 +173,7 @@ if(security) { // Add ResourceID's and values to the security ObjectID/ObjectInstance security->set_resource_value(M2MSecurity::M2MServerUri, _server_address); - security->set_resource_value(M2MSecurity::SecurityMode, M2MSecurity::Certificate); + security->set_resource_value(M2MSecurity::SecurityMode, M2MSecurity::NoSecurity); //Certificate); security->set_resource_value(M2MSecurity::ServerPublicKey, SERVER_CERT, sizeof(SERVER_CERT)); security->set_resource_value(M2MSecurity::PublicKey, CERT, sizeof(CERT)); security->set_resource_value(M2MSecurity::Secretkey, KEY, sizeof(KEY));