Temperature only code for husky showcase
Dependencies: X_NUCLEO_COMMON ST_INTERFACES
Diff: main.cpp
- Revision:
- 1:e86b1cffc402
- Child:
- 4:cf7342047b4d
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Fri Feb 23 18:38:12 2018 +0100 @@ -0,0 +1,167 @@ +// ---------------------------------------------------------------------------- +// Copyright 2016-2017 ARM Ltd. +// +// SPDX-License-Identifier: Apache-2.0 +// +// 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 +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------- + +#include "mbed.h" +#include "mbed-trace/mbed_trace.h" +#include "mbed-trace-helper.h" +#include "simple-mbed-cloud-client.h" +#include "key-config-manager/kcm_status.h" +#include "key-config-manager/key_config_manager.h" +#include "SDBlockDevice.h" +#include "FATFileSystem.h" +#include "ISM43362Interface.h" + +// Placeholder to hardware that trigger events (timer, button, etc) +Ticker timer; + +// Placeholder for storage +SDBlockDevice sd(SPI_MOSI, SPI_MISO, SPI_SCK, SPI_CS); +FATFileSystem fs("sd"); + +// Pointers to the resources that will be created in main_application(). +static MbedCloudClientResource* pattern_ptr; + +// Pointer to mbedClient, used for calling close function. +static SimpleMbedCloudClient *client; + +static bool button_pressed = false; + +void button_press() { + button_pressed = true; +} + +void pattern_updated(const char *) { + printf("PUT received, new value: %s\n", pattern_ptr->get_value().c_str()); + // Placeholder for PUT action +} + +void blink_callback(void *) { + String pattern_str = pattern_ptr->get_value(); + const char *pattern = pattern_str.c_str(); + printf("POST received. LED pattern = %s\n", pattern); + // Placeholder for POST action + // The pattern is something like 500:200:500, so parse that. +} + +void button_callback(const M2MBase& object, const NoticationDeliveryStatus status) +{ + printf("Button notification. Callback: (%s)\n", object.uri_path()); + // Placeholder for GET +} + + +int main(void) +{ + // Requires DAPLink 245+ (https://github.com/ARMmbed/DAPLink/pull/364) + // Older versions: workaround to prevent possible deletion of credentials: + wait(2); + + // Misc OS setup + srand(time(NULL)); + + // Placeholder for network + printf("Start Simple Mbed Cloud Client\n"); + ISM43362Interface net(MBED_CONF_APP_WIFI_SPI_MOSI, MBED_CONF_APP_WIFI_SPI_MISO, MBED_CONF_APP_WIFI_SPI_SCLK, MBED_CONF_APP_WIFI_SPI_NSS, MBED_CONF_APP_WIFI_RESET, MBED_CONF_APP_WIFI_DATAREADY, MBED_CONF_APP_WIFI_WAKEUP, false); + + + // Initialize SD card + int status = sd.init(); + if (status != BD_ERROR_OK) { + printf("Failed to init SD card\r\n"); + return -1; + } + + // Mount the file system (reformatting on failure) + status = fs.mount(&sd); + if (status) { + printf("Failed to mount FAT file system, reformatting...\r\n"); + status = fs.reformat(&sd); + if (status) { + printf("Failed to reformat FAT file system\r\n"); + return -1; + } else { + printf("Reformat and mount complete\r\n"); + } + } + + printf("Connecting to the network using Wifi...\n"); + + status = net.connect(MBED_CONF_APP_WIFI_SSID, MBED_CONF_APP_WIFI_PASSWORD, (strlen(MBED_CONF_APP_WIFI_PASSWORD) > 1) ? NSAPI_SECURITY_WPA_WPA2 : NSAPI_SECURITY_NONE); + if (status) { + printf("Connection to Network Failed %d!\n", status); + return -1; + } else { + const char *ip_addr = net.get_ip_address(); + printf("Connected successfully\n"); + printf("IP address %s\n", ip_addr); + } + + SimpleMbedCloudClient mbedClient(&net); + // Save pointer to mbedClient so that other functions can access it. + client = &mbedClient; + + status = mbedClient.init(); + if (status) { + printf("FAILED\r\n"); + return -1; + } + + printf("Client initialized\r\n"); + + // Mbed Cloud Client resource setup + MbedCloudClientResource *button = mbedClient.create_resource("3200/0/5501", "button_resource"); + button->set_value("0"); + button->methods(M2MMethod::GET); + button->observable(true); + button->attach_notification_callback(button_callback); + + MbedCloudClientResource *pattern = mbedClient.create_resource("3201/0/5853", "pattern_resource"); + pattern->set_value("500:500:500:500"); + pattern->methods(M2MMethod::GET | M2MMethod::PUT); + pattern->attach_put_callback(pattern_updated); + pattern_ptr = pattern; + + MbedCloudClientResource *blink = mbedClient.create_resource("3201/0/5850", "blink_resource"); + blink->methods(M2MMethod::POST); + blink->attach_post_callback(blink_callback); + + mbedClient.register_and_connect(); + + // Wait for client to finish registering + while (!mbedClient.is_client_registered()) { + wait_ms(100); + } + + // Placeholder for callback to update local resource when GET comes. + timer.attach(&button_press, 5.0); + + // Check if client is registering or registered, if true sleep and repeat. + while (mbedClient.is_register_called()) { + static int button_count = 0; + wait_ms(100); + + if (button_pressed) { + button_pressed = false; + printf("Simulated button clicked %d times\r\n", ++button_count); + button->set_value(button_count); + } + } + + // Client unregistered, exit program. + return 0; +}