pelion-example-common

Dependencies:   ublox-at-cellular-interface ublox-cellular-base

Revision:
7:230af466efc4
Parent:
6:2fb5057c0e42
Child:
10:4c2ed226f5a8
--- a/main.cpp	Wed Feb 20 15:33:02 2019 +0000
+++ b/main.cpp	Wed Mar 27 18:57:20 2019 +0000
@@ -30,35 +30,36 @@
 
 #if COMPONENT_SD || COMPONENT_NUSD
 // Use FATFileSystem for SD card type blockdevices
-FATFileSystem fs("fs", bd);
+FATFileSystem fs("fs");
 #else
 // Use LittleFileSystem for non-SD block devices to enable wear leveling and other functions
-LittleFileSystem fs("fs", bd);
+LittleFileSystem fs("fs");
 #endif
 
-#if USE_BUTTON == 1
+// Default User button for GET example
 InterruptIn button(BUTTON1);
-#endif /* USE_BUTTON */
-
 // Default LED to use for PUT/POST example
-DigitalOut led(LED1);
+DigitalOut led(LED1, 0);
 
 // Declaring pointers for access to Pelion Device Management Client resources outside of main()
-MbedCloudClientResource *button_res;
-MbedCloudClientResource *led_res;
-MbedCloudClientResource *post_res;
+MbedCloudClientResource *res_button;
+MbedCloudClientResource *res_led;
+MbedCloudClientResource *res_post;
 
 // An event queue is a very useful structure to debounce information between contexts (e.g. ISR and normal threads)
 // This is great because things such as network operations are illegal in ISR, so updating a resource in a button's fall() function is not allowed
 EventQueue eventQueue;
 
+// When the device is registered, this variable will be used to access various useful information, like device ID etc.
+static const ConnectorClientEndpointInfo* endpointInfo;
+
 /**
  * PUT handler - sets the value of the built-in LED
  * @param resource The resource that triggered the callback
  * @param newValue Updated value for the resource
  */
 void put_callback(MbedCloudClientResource *resource, m2m::String newValue) {
-    printf("PUT received. New value: %s\n", newValue.c_str());
+    printf("*** PUT received, new value: %s                             \n", newValue.c_str());
     led = atoi(newValue.c_str());
 }
 
@@ -70,7 +71,7 @@
  * @param size Size of the body
  */
 void post_callback(MbedCloudClientResource *resource, const uint8_t *buffer, uint16_t size) {
-    printf("POST received (length %u). Payload: ", size);
+    printf("*** POST received (length %u). Payload: ", size);
     for (size_t ix = 0; ix < size; ix++) {
         printf("%02x ", buffer[ix]);
     }
@@ -82,9 +83,9 @@
  * This function will be triggered either by a physical button press or by a ticker every 5 seconds (see below)
  */
 void button_press() {
-    int v = button_res->get_value_int() + 1;
-    button_res->set_value(v);
-    printf("Button clicked %d times\n", v);
+    int v = res_button->get_value_int() + 1;
+    res_button->set_value(v);
+    printf("*** Button clicked %d times                                 \n", v);
 }
 
 /**
@@ -93,7 +94,7 @@
  * @param status The delivery status of the notification
  */
 void button_callback(MbedCloudClientResource *resource, const NoticationDeliveryStatus status) {
-    printf("Button notification, status %s (%d)\n", MbedCloudClientResource::delivery_status_to_string(status), status);
+    printf("*** Button notification, status %s (%d)                     \n", MbedCloudClientResource::delivery_status_to_string(status), status);
 }
 
 /**
@@ -102,15 +103,24 @@
  */
 void registered(const ConnectorClientEndpointInfo *endpoint) {
     printf("Registered to Pelion Device Management. Endpoint Name: %s\n", endpoint->internal_endpoint_name.c_str());
+    endpointInfo = endpoint;
 }
 
 int main(void) {
     printf("\nStarting Simple Pelion Device Management Client example\n");
 
-#if USE_BUTTON == 1
+    int storage_status = fs.mount(bd);
+    if (storage_status != 0) {
+        printf("Storage mounting failed.\n");
+    }
     // If the User button is pressed ons start, then format storage.
-    if (button.read() == MBED_CONF_APP_BUTTON_PRESSED_STATE) {
-        printf("User button is pushed on start. Formatting the storage...\n");
+    bool btn_pressed = (button.read() == MBED_CONF_APP_BUTTON_PRESSED_STATE);
+    if (btn_pressed) {
+        printf("User button is pushed on start...\n");
+    }
+
+    if (storage_status || btn_pressed) {
+        printf("Formatting the storage...\n");
         int storage_status = StorageHelper::format(&fs, bd);
         if (storage_status != 0) {
             printf("ERROR: Failed to reformat the storage (%d).\n", storage_status);
@@ -118,7 +128,6 @@
     } else {
         printf("You can hold the user button during boot to format the storage and change the device identity.\n");
     }
-#endif /* USE_BUTTON */
 
     // Connect to the Internet (DHCP is expected to be on)
     printf("Connecting to the network using the default network interface...\n");
@@ -142,20 +151,20 @@
     }
 
     // Creating resources, which can be written or read from the cloud
-    button_res = client.create_resource("3200/0/5501", "button_count");
-    button_res->set_value(0);
-    button_res->methods(M2MMethod::GET);
-    button_res->observable(true);
-    button_res->attach_notification_callback(button_callback);
+    res_button = client.create_resource("3200/0/5501", "Button Count");
+    res_button->set_value(0);
+    res_button->methods(M2MMethod::GET);
+    res_button->observable(true);
+    res_button->attach_notification_callback(button_callback);
 
-    led_res = client.create_resource("3201/0/5853", "led_state");
-    led_res->set_value(led.read());
-    led_res->methods(M2MMethod::GET | M2MMethod::PUT);
-    led_res->attach_put_callback(put_callback);
+    res_led = client.create_resource("3201/0/5853", "LED State");
+    res_led->set_value(led.read());
+    res_led->methods(M2MMethod::GET | M2MMethod::PUT);
+    res_led->attach_put_callback(put_callback);
 
-    post_res = client.create_resource("3300/0/5605", "execute_function");
-    post_res->methods(M2MMethod::POST);
-    post_res->attach_post_callback(post_callback);
+    res_post = client.create_resource("3300/0/5605", "Execute Function");
+    res_post->methods(M2MMethod::POST);
+    res_post->attach_post_callback(post_callback);
 
     printf("Initialized Pelion Device Management Client. Registering...\n");
 
@@ -165,16 +174,9 @@
     // Register with Pelion DM
     client.register_and_connect();
 
-#if USE_BUTTON == 1
     // The button fires on an interrupt context, but debounces it to the eventqueue, so it's safe to do network operations
     button.fall(eventQueue.event(&button_press));
     printf("Press the user button to increment the LwM2M resource value...\n");
-#else
-    // The timer fires on an interrupt context, but debounces it to the eventqueue, so it's safe to do network operations
-    Ticker timer;
-    timer.attach(eventQueue.event(&button_press), 5.0);
-    printf("Simulating button press every 5 seconds...\n");
-#endif /* USE_BUTTON */
 
     // You can easily run the eventQueue in a separate thread if required
     eventQueue.dispatch_forever();