NXP / Mbed OS mbed-cloud-connect-example-ethernet

Fork of mbed-cloud-example_K64_K66 by Mac Lobdell

DEPRECATED

This example application is not maintained and not recommended. It uses an old version of Mbed OS, Pelion DM, and Arm toolchain. It doesn't work with Mbed Studio.

Please use: https://os.mbed.com/teams/mbed-os-examples/code/mbed-os-example-pelion/

Committer:
bridadan
Date:
Wed Feb 14 17:26:42 2018 -0600
Revision:
5:c18fab181ede
Parent:
4:a107dae867fb
Child:
6:254a7e7fbef1
Enabling callbacks

Who changed what in which revision?

UserRevisionLine numberNew 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 1:1ccf36276cd3 19 #include "mbed.h"
MarceloSalazar 1:1ccf36276cd3 20 #include "mbed-trace/mbed_trace.h"
MarceloSalazar 1:1ccf36276cd3 21 #include "mbed-trace-helper.h"
MarceloSalazar 0:e13a8a944e25 22 #include "simple-mbed-cloud-client.h"
MarceloSalazar 1:1ccf36276cd3 23 #include "key-config-manager/kcm_status.h"
MarceloSalazar 1:1ccf36276cd3 24 #include "key-config-manager/key_config_manager.h"
MarceloSalazar 1:1ccf36276cd3 25 #include "SDBlockDevice.h"
MarceloSalazar 1:1ccf36276cd3 26 #include "FATFileSystem.h"
MarceloSalazar 1:1ccf36276cd3 27 #include "EthernetInterface.h"
MarceloSalazar 1:1ccf36276cd3 28
MarceloSalazar 4:a107dae867fb 29 // Placeholder to hardware that trigger events (timer, button, etc)
MarceloSalazar 4:a107dae867fb 30 Ticker timer;
MarceloSalazar 0:e13a8a944e25 31
bridadan 5:c18fab181ede 32 // Placeholder for storage
bridadan 5:c18fab181ede 33 SDBlockDevice sd(PTE3, PTE1, PTE2, PTE4);
bridadan 5:c18fab181ede 34 FATFileSystem fs("sd");
bridadan 5:c18fab181ede 35
MarceloSalazar 0:e13a8a944e25 36 // Pointers to the resources that will be created in main_application().
MarceloSalazar 1:1ccf36276cd3 37 static MbedCloudClientResource* pattern_ptr;
MarceloSalazar 0:e13a8a944e25 38
MarceloSalazar 0:e13a8a944e25 39 // Pointer to mbedClient, used for calling close function.
MarceloSalazar 0:e13a8a944e25 40 static SimpleMbedCloudClient *client;
MarceloSalazar 0:e13a8a944e25 41
MarceloSalazar 1:1ccf36276cd3 42 static bool button_pressed = false;
MarceloSalazar 1:1ccf36276cd3 43
MarceloSalazar 1:1ccf36276cd3 44 void button_press() {
MarceloSalazar 1:1ccf36276cd3 45 button_pressed = true;
MarceloSalazar 1:1ccf36276cd3 46 }
MarceloSalazar 1:1ccf36276cd3 47
MarceloSalazar 1:1ccf36276cd3 48 void pattern_updated(const char *) {
bridadan 5:c18fab181ede 49 printf("PUT received, new value: %s\n", pattern_ptr->get_value().c_str());
MarceloSalazar 2:6ed27f413b30 50 // Placeholder for PUT action
MarceloSalazar 0:e13a8a944e25 51 }
MarceloSalazar 0:e13a8a944e25 52
MarceloSalazar 0:e13a8a944e25 53 void blink_callback(void *) {
bridadan 5:c18fab181ede 54 String pattern_str = pattern_ptr->get_value();
bridadan 5:c18fab181ede 55 const char *pattern = pattern_str.c_str();
MarceloSalazar 2:6ed27f413b30 56 printf("POST received. LED pattern = %s\n", pattern);
MarceloSalazar 2:6ed27f413b30 57 // Placeholder for POST action
MarceloSalazar 0:e13a8a944e25 58 // The pattern is something like 500:200:500, so parse that.
MarceloSalazar 0:e13a8a944e25 59 }
MarceloSalazar 0:e13a8a944e25 60
MarceloSalazar 2:6ed27f413b30 61 void button_callback(const M2MBase& object, const NoticationDeliveryStatus status)
MarceloSalazar 0:e13a8a944e25 62 {
MarceloSalazar 2:6ed27f413b30 63 printf("Button notification. Callback: (%s)\n", object.uri_path());
MarceloSalazar 2:6ed27f413b30 64 // Placeholder for GET
MarceloSalazar 0:e13a8a944e25 65 }
MarceloSalazar 0:e13a8a944e25 66
MarceloSalazar 0:e13a8a944e25 67
MarceloSalazar 0:e13a8a944e25 68 int main(void)
MarceloSalazar 0:e13a8a944e25 69 {
MarceloSalazar 2:6ed27f413b30 70 // Requires DAPLink 245+ (https://github.com/ARMmbed/DAPLink/pull/364)
MarceloSalazar 2:6ed27f413b30 71 // Older versions: workaround to prevent possible deletion of credentials:
MarceloSalazar 0:e13a8a944e25 72 wait(2);
MarceloSalazar 0:e13a8a944e25 73
MarceloSalazar 1:1ccf36276cd3 74 // Misc OS setup
MarceloSalazar 1:1ccf36276cd3 75 srand(time(NULL));
MarceloSalazar 1:1ccf36276cd3 76
MarceloSalazar 2:6ed27f413b30 77 // Placeholder for network
MarceloSalazar 1:1ccf36276cd3 78 EthernetInterface net;
MarceloSalazar 2:6ed27f413b30 79
MarceloSalazar 1:1ccf36276cd3 80 printf("Start Simple Mbed Cloud Client\n");
MarceloSalazar 1:1ccf36276cd3 81
MarceloSalazar 1:1ccf36276cd3 82 // Initialize SD card
MarceloSalazar 1:1ccf36276cd3 83 int status = sd.init();
MarceloSalazar 1:1ccf36276cd3 84 if (status != BD_ERROR_OK) {
MarceloSalazar 1:1ccf36276cd3 85 printf("Failed to init SD card\r\n");
MarceloSalazar 1:1ccf36276cd3 86 return -1;
MarceloSalazar 1:1ccf36276cd3 87 }
MarceloSalazar 0:e13a8a944e25 88
MarceloSalazar 1:1ccf36276cd3 89 // Mount the file system (reformatting on failure)
MarceloSalazar 1:1ccf36276cd3 90 status = fs.mount(&sd);
MarceloSalazar 1:1ccf36276cd3 91 if (status) {
MarceloSalazar 1:1ccf36276cd3 92 printf("Failed to mount FAT file system, reformatting...\r\n");
MarceloSalazar 1:1ccf36276cd3 93 status = fs.reformat(&sd);
MarceloSalazar 1:1ccf36276cd3 94 if (status) {
MarceloSalazar 1:1ccf36276cd3 95 printf("Failed to reformat FAT file system\r\n");
MarceloSalazar 1:1ccf36276cd3 96 return -1;
MarceloSalazar 1:1ccf36276cd3 97 } else {
MarceloSalazar 1:1ccf36276cd3 98 printf("Reformat and mount complete\r\n");
MarceloSalazar 1:1ccf36276cd3 99 }
MarceloSalazar 1:1ccf36276cd3 100 }
MarceloSalazar 1:1ccf36276cd3 101
MarceloSalazar 1:1ccf36276cd3 102 printf("Connecting to the network using Ethernet...\n");
MarceloSalazar 1:1ccf36276cd3 103
MarceloSalazar 1:1ccf36276cd3 104 status = net.connect();
MarceloSalazar 1:1ccf36276cd3 105 if (status) {
MarceloSalazar 1:1ccf36276cd3 106 printf("Connection to Network Failed %d!\n", status);
MarceloSalazar 1:1ccf36276cd3 107 return -1;
MarceloSalazar 1:1ccf36276cd3 108 } else {
MarceloSalazar 1:1ccf36276cd3 109 const char *ip_addr = net.get_ip_address();
MarceloSalazar 1:1ccf36276cd3 110 printf("Connected successfully\n");
MarceloSalazar 1:1ccf36276cd3 111 printf("IP address %s\n", ip_addr);
MarceloSalazar 1:1ccf36276cd3 112 }
MarceloSalazar 1:1ccf36276cd3 113
MarceloSalazar 4:a107dae867fb 114 // Placeholder for callback to update local resource when GET comes.
MarceloSalazar 4:a107dae867fb 115 timer.attach(&button_press, 5.0);
MarceloSalazar 2:6ed27f413b30 116
MarceloSalazar 1:1ccf36276cd3 117 SimpleMbedCloudClient mbedClient(&net);
MarceloSalazar 0:e13a8a944e25 118 // Save pointer to mbedClient so that other functions can access it.
MarceloSalazar 0:e13a8a944e25 119 client = &mbedClient;
MarceloSalazar 0:e13a8a944e25 120
MarceloSalazar 1:1ccf36276cd3 121 status = mbedClient.init();
MarceloSalazar 1:1ccf36276cd3 122 if (status) {
MarceloSalazar 1:1ccf36276cd3 123 return -1;
MarceloSalazar 1:1ccf36276cd3 124 }
MarceloSalazar 1:1ccf36276cd3 125
MarceloSalazar 0:e13a8a944e25 126 printf("Client initialized\r\n");
MarceloSalazar 0:e13a8a944e25 127
MarceloSalazar 1:1ccf36276cd3 128 // Mbed Cloud Client resource setup
MarceloSalazar 1:1ccf36276cd3 129 MbedCloudClientResource *button = mbedClient.create_resource("3200/0/5501", "button_resource");
MarceloSalazar 1:1ccf36276cd3 130 button->set_value("0");
MarceloSalazar 1:1ccf36276cd3 131 button->methods(M2MMethod::GET);
MarceloSalazar 1:1ccf36276cd3 132 button->observable(true);
bridadan 5:c18fab181ede 133 button->attach_notification_callback(button_callback);
MarceloSalazar 0:e13a8a944e25 134
MarceloSalazar 1:1ccf36276cd3 135 MbedCloudClientResource *pattern = mbedClient.create_resource("3201/0/5853", "pattern_resource");
MarceloSalazar 1:1ccf36276cd3 136 pattern->set_value("500:500:500:500");
MarceloSalazar 1:1ccf36276cd3 137 pattern->methods(M2MMethod::GET | M2MMethod::PUT);
bridadan 5:c18fab181ede 138 pattern->attach_put_callback(pattern_updated);
MarceloSalazar 1:1ccf36276cd3 139 pattern_ptr = pattern;
MarceloSalazar 0:e13a8a944e25 140
MarceloSalazar 1:1ccf36276cd3 141 MbedCloudClientResource *blink = mbedClient.create_resource("3201/0/5850", "blink_resource");
MarceloSalazar 1:1ccf36276cd3 142 blink->methods(M2MMethod::POST);
bridadan 5:c18fab181ede 143 blink->attach_post_callback(blink_callback);
MarceloSalazar 0:e13a8a944e25 144
MarceloSalazar 0:e13a8a944e25 145 mbedClient.register_and_connect();
MarceloSalazar 0:e13a8a944e25 146
MarceloSalazar 0:e13a8a944e25 147 // Check if client is registering or registered, if true sleep and repeat.
MarceloSalazar 0:e13a8a944e25 148 while (mbedClient.is_register_called()) {
MarceloSalazar 0:e13a8a944e25 149 static int button_count = 0;
MarceloSalazar 1:1ccf36276cd3 150 wait_ms(100);
MarceloSalazar 1:1ccf36276cd3 151
MarceloSalazar 1:1ccf36276cd3 152 if (button_pressed) {
MarceloSalazar 1:1ccf36276cd3 153 button_pressed = false;
MarceloSalazar 4:a107dae867fb 154 printf("Simulated button clicked %d times\r\n", ++button_count);
MarceloSalazar 1:1ccf36276cd3 155 button->set_value(button_count);
MarceloSalazar 0:e13a8a944e25 156 }
MarceloSalazar 0:e13a8a944e25 157 }
MarceloSalazar 0:e13a8a944e25 158
MarceloSalazar 0:e13a8a944e25 159 // Client unregistered, exit program.
MarceloSalazar 0:e13a8a944e25 160 return 0;
MarceloSalazar 0:e13a8a944e25 161 }