This repository contains the example code to: 1) Connect RTL8195AM board to Pelion 2) Enable and run firmware update on RTL8195AM

RTL8195AM SMCC application demonstrates how to create a Simple Mbed Cloud Client application that can connect to Pelion, register resources and get FW updates.

Committer:
prashantrar
Date:
Mon Mar 12 19:11:01 2018 +0800
Revision:
0:07e701513236
Child:
1:fe5f4acd0b5e
initial push

Who changed what in which revision?

UserRevisionLine numberNew contents of line
prashantrar 0:07e701513236 1 // ----------------------------------------------------------------------------
prashantrar 0:07e701513236 2 // Copyright 2016-2017 ARM Ltd.
prashantrar 0:07e701513236 3 //
prashantrar 0:07e701513236 4 // SPDX-License-Identifier: Apache-2.0
prashantrar 0:07e701513236 5 //
prashantrar 0:07e701513236 6 // Licensed under the Apache License, Version 2.0 (the "License");
prashantrar 0:07e701513236 7 // you may not use this file except in compliance with the License.
prashantrar 0:07e701513236 8 // You may obtain a copy of the License at
prashantrar 0:07e701513236 9 //
prashantrar 0:07e701513236 10 // http://www.apache.org/licenses/LICENSE-2.0
prashantrar 0:07e701513236 11 //
prashantrar 0:07e701513236 12 // Unless required by applicable law or agreed to in writing, software
prashantrar 0:07e701513236 13 // distributed under the License is distributed on an "AS IS" BASIS,
prashantrar 0:07e701513236 14 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
prashantrar 0:07e701513236 15 // See the License for the specific language governing permissions and
prashantrar 0:07e701513236 16 // limitations under the License.
prashantrar 0:07e701513236 17 // ----------------------------------------------------------------------------
prashantrar 0:07e701513236 18
prashantrar 0:07e701513236 19 #include "mbed.h"
prashantrar 0:07e701513236 20 #include "mbed-trace/mbed_trace.h"
prashantrar 0:07e701513236 21 #include "mbed-trace-helper.h"
prashantrar 0:07e701513236 22 #include "simple-mbed-cloud-client.h"
prashantrar 0:07e701513236 23 #include "key-config-manager/kcm_status.h"
prashantrar 0:07e701513236 24 #include "key-config-manager/key_config_manager.h"
prashantrar 0:07e701513236 25 #include "SDBlockDevice.h"
prashantrar 0:07e701513236 26 #include "FATFileSystem.h"
prashantrar 0:07e701513236 27 #include "RTWInterface.h"
prashantrar 0:07e701513236 28
prashantrar 0:07e701513236 29 // Placeholder to hardware that trigger events (timer, button, etc)
prashantrar 0:07e701513236 30 Ticker timer;
prashantrar 0:07e701513236 31
prashantrar 0:07e701513236 32 // Placeholder for storage
prashantrar 0:07e701513236 33 SDBlockDevice sd(D11, D12, D13, D9); // MOSI, MISO, CLK, CS
prashantrar 0:07e701513236 34 FATFileSystem fs("sd");
prashantrar 0:07e701513236 35
prashantrar 0:07e701513236 36 // Pointers to the resources that will be created in main_application().
prashantrar 0:07e701513236 37 static MbedCloudClientResource* pattern_ptr;
prashantrar 0:07e701513236 38
prashantrar 0:07e701513236 39 // Pointer to mbedClient, used for calling close function.
prashantrar 0:07e701513236 40 static SimpleMbedCloudClient *client;
prashantrar 0:07e701513236 41
prashantrar 0:07e701513236 42 static bool button_pressed = false;
prashantrar 0:07e701513236 43
prashantrar 0:07e701513236 44 void button_press() {
prashantrar 0:07e701513236 45 button_pressed = true;
prashantrar 0:07e701513236 46 }
prashantrar 0:07e701513236 47
prashantrar 0:07e701513236 48 void pattern_updated(const char *) {
prashantrar 0:07e701513236 49 printf("PUT received, new value: %s\n", pattern_ptr->get_value().c_str());
prashantrar 0:07e701513236 50 // Placeholder for PUT action
prashantrar 0:07e701513236 51 }
prashantrar 0:07e701513236 52
prashantrar 0:07e701513236 53 void blink_callback(void *) {
prashantrar 0:07e701513236 54 String pattern_str = pattern_ptr->get_value();
prashantrar 0:07e701513236 55 const char *pattern = pattern_str.c_str();
prashantrar 0:07e701513236 56 printf("POST received. LED pattern = %s\n", pattern);
prashantrar 0:07e701513236 57 // Placeholder for POST action
prashantrar 0:07e701513236 58 // The pattern is something like 500:200:500, so parse that.
prashantrar 0:07e701513236 59 }
prashantrar 0:07e701513236 60
prashantrar 0:07e701513236 61 void button_callback(const M2MBase& object, const NoticationDeliveryStatus status)
prashantrar 0:07e701513236 62 {
prashantrar 0:07e701513236 63 printf("Button notification. Callback: (%s)\n", object.uri_path());
prashantrar 0:07e701513236 64 // Placeholder for GET
prashantrar 0:07e701513236 65 }
prashantrar 0:07e701513236 66
prashantrar 0:07e701513236 67
prashantrar 0:07e701513236 68 int main(void)
prashantrar 0:07e701513236 69 {
prashantrar 0:07e701513236 70 // Requires DAPLink 245+ (https://github.com/ARMmbed/DAPLink/pull/364)
prashantrar 0:07e701513236 71 // Older versions: workaround to prevent possible deletion of credentials:
prashantrar 0:07e701513236 72 wait(2);
prashantrar 0:07e701513236 73
prashantrar 0:07e701513236 74 // Misc OS setup
prashantrar 0:07e701513236 75 srand(time(NULL));
prashantrar 0:07e701513236 76
prashantrar 0:07e701513236 77 // Placeholder for network
prashantrar 0:07e701513236 78 RTWInterface net;
prashantrar 0:07e701513236 79
prashantrar 0:07e701513236 80 printf("Start Simple Mbed Cloud Client\n");
prashantrar 0:07e701513236 81
prashantrar 0:07e701513236 82 // Initialize SD card
prashantrar 0:07e701513236 83 int status = sd.init();
prashantrar 0:07e701513236 84 if (status != BD_ERROR_OK) {
prashantrar 0:07e701513236 85 printf("Failed to init SD card\r\n");
prashantrar 0:07e701513236 86 return -1;
prashantrar 0:07e701513236 87 }
prashantrar 0:07e701513236 88
prashantrar 0:07e701513236 89 // Mount the file system (reformatting on failure)
prashantrar 0:07e701513236 90 status = fs.mount(&sd);
prashantrar 0:07e701513236 91 if (status) {
prashantrar 0:07e701513236 92 printf("Failed to mount FAT file system, reformatting...\r\n");
prashantrar 0:07e701513236 93 status = fs.reformat(&sd);
prashantrar 0:07e701513236 94 if (status) {
prashantrar 0:07e701513236 95 printf("Failed to reformat FAT file system\r\n");
prashantrar 0:07e701513236 96 return -1;
prashantrar 0:07e701513236 97 } else {
prashantrar 0:07e701513236 98 printf("Reformat and mount complete\r\n");
prashantrar 0:07e701513236 99 }
prashantrar 0:07e701513236 100 }
prashantrar 0:07e701513236 101
prashantrar 0:07e701513236 102 printf("Connecting to the network using WiFi...\n");
prashantrar 0:07e701513236 103
prashantrar 0:07e701513236 104 status = net.connect(MBED_CONF_APP_WIFI_SSID, MBED_CONF_APP_WIFI_PASSWORD, NSAPI_SECURITY_WPA_WPA2);
prashantrar 0:07e701513236 105 if (status) {
prashantrar 0:07e701513236 106 printf("Connection to Network Failed %d!\n", status);
prashantrar 0:07e701513236 107 return -1;
prashantrar 0:07e701513236 108 } else {
prashantrar 0:07e701513236 109 const char *ip_addr = net.get_ip_address();
prashantrar 0:07e701513236 110 printf("Connected successfully\n");
prashantrar 0:07e701513236 111 printf("IP address %s\n", ip_addr);
prashantrar 0:07e701513236 112 }
prashantrar 0:07e701513236 113
prashantrar 0:07e701513236 114 SimpleMbedCloudClient mbedClient(&net);
prashantrar 0:07e701513236 115 // Save pointer to mbedClient so that other functions can access it.
prashantrar 0:07e701513236 116 client = &mbedClient;
prashantrar 0:07e701513236 117
prashantrar 0:07e701513236 118 status = mbedClient.init();
prashantrar 0:07e701513236 119 if (status) {
prashantrar 0:07e701513236 120 return -1;
prashantrar 0:07e701513236 121 }
prashantrar 0:07e701513236 122
prashantrar 0:07e701513236 123 printf("Client initialized\r\n");
prashantrar 0:07e701513236 124
prashantrar 0:07e701513236 125 // Mbed Cloud Client resource setup
prashantrar 0:07e701513236 126 MbedCloudClientResource *button = mbedClient.create_resource("3200/0/5501", "button_resource");
prashantrar 0:07e701513236 127 button->set_value("0");
prashantrar 0:07e701513236 128 button->methods(M2MMethod::GET);
prashantrar 0:07e701513236 129 button->observable(true);
prashantrar 0:07e701513236 130 button->attach_notification_callback(button_callback);
prashantrar 0:07e701513236 131
prashantrar 0:07e701513236 132 MbedCloudClientResource *pattern = mbedClient.create_resource("3201/0/5853", "pattern_resource");
prashantrar 0:07e701513236 133 pattern->set_value("500:500:500:500");
prashantrar 0:07e701513236 134 pattern->methods(M2MMethod::GET | M2MMethod::PUT);
prashantrar 0:07e701513236 135 pattern->attach_put_callback(pattern_updated);
prashantrar 0:07e701513236 136 pattern_ptr = pattern;
prashantrar 0:07e701513236 137
prashantrar 0:07e701513236 138 MbedCloudClientResource *blink = mbedClient.create_resource("3201/0/5850", "blink_resource");
prashantrar 0:07e701513236 139 blink->methods(M2MMethod::POST);
prashantrar 0:07e701513236 140 blink->attach_post_callback(blink_callback);
prashantrar 0:07e701513236 141
prashantrar 0:07e701513236 142 mbedClient.register_and_connect();
prashantrar 0:07e701513236 143
prashantrar 0:07e701513236 144 // Wait for client to finish registering
prashantrar 0:07e701513236 145 while (!mbedClient.is_client_registered()) {
prashantrar 0:07e701513236 146 wait_ms(100);
prashantrar 0:07e701513236 147 }
prashantrar 0:07e701513236 148
prashantrar 0:07e701513236 149 // Placeholder for callback to update local resource when GET comes.
prashantrar 0:07e701513236 150 timer.attach(&button_press, 5.0);
prashantrar 0:07e701513236 151
prashantrar 0:07e701513236 152 // Check if client is registering or registered, if true sleep and repeat.
prashantrar 0:07e701513236 153 while (mbedClient.is_register_called()) {
prashantrar 0:07e701513236 154 static int button_count = 0;
prashantrar 0:07e701513236 155 wait_ms(100);
prashantrar 0:07e701513236 156
prashantrar 0:07e701513236 157 if (button_pressed) {
prashantrar 0:07e701513236 158 button_pressed = false;
prashantrar 0:07e701513236 159 printf("Simulated button clicked %d times\r\n", ++button_count);
prashantrar 0:07e701513236 160 button->set_value(button_count);
prashantrar 0:07e701513236 161 }
prashantrar 0:07e701513236 162 }
prashantrar 0:07e701513236 163
prashantrar 0:07e701513236 164 // Client unregistered, exit program.
prashantrar 0:07e701513236 165 return 0;
prashantrar 0:07e701513236 166 }