sandbox / mbed-client

Fork of mbed-client by Christopher Haster

Revision:
4:ae5178938864
Parent:
1:79b6cc67d8b4
--- a/source/m2mfirmware.cpp	Fri Feb 19 17:44:50 2016 +0000
+++ b/source/m2mfirmware.cpp	Sat Apr 02 00:31:13 2016 +0300
@@ -20,6 +20,9 @@
 #include "mbed-client/m2mobjectinstance.h"
 #include "mbed-client/m2mresource.h"
 
+#define BUFFER_SIZE 21
+#define TRACE_GROUP "mClt"
+
 M2MFirmware* M2MFirmware::_instance = NULL;
 
 M2MFirmware* M2MFirmware::get_instance()
@@ -41,8 +44,11 @@
 M2MFirmware::M2MFirmware()
 : M2MObject(M2M_FIRMWARE_ID)
 {
+    M2MBase::set_register_uri(false);
+    M2MBase::set_operation(M2MBase::GET_PUT_ALLOWED);
     _firmware_instance = M2MObject::create_object_instance();
     if(_firmware_instance) {
+        _firmware_instance->set_operation(M2MBase::GET_PUT_ALLOWED);
         create_mandatory_resources();
     }
 }
@@ -60,6 +66,7 @@
                                                                  false);
     if(res) {
         res->set_operation(M2MBase::PUT_ALLOWED);
+        res->set_register_uri(false);
     }
 
     res = _firmware_instance->create_dynamic_resource(FIRMWARE_PACKAGE_URI,
@@ -68,6 +75,7 @@
                                                     false);
     if(res) {
         res->set_operation(M2MBase::PUT_ALLOWED);
+        res->set_register_uri(false);
     }
 
     res = _firmware_instance->create_dynamic_resource(FIRMWARE_UPDATE,
@@ -76,22 +84,26 @@
                                                     false);
     if(res) {
         res->set_operation(M2MBase::NOT_ALLOWED);
+        res->set_register_uri(false);
     }
 
     res = _firmware_instance->create_dynamic_resource(FIRMWARE_STATE,
                                                     OMA_RESOURCE_TYPE,
                                                     M2MResourceInstance::INTEGER,
-                                                    false);
-    if(res) {
+                                                    true);
+    set_zero_value(res);
+    if(res) {        
         res->set_operation(M2MBase::GET_ALLOWED);
+        res->set_register_uri(false);
     }
-
     res = _firmware_instance->create_dynamic_resource(FIRMWARE_UPDATE_RESULT,
                                                     OMA_RESOURCE_TYPE,
                                                     M2MResourceInstance::INTEGER,
-                                                    false);
+                                                    true);
+    set_zero_value(res);
     if(res) {
         res->set_operation(M2MBase::GET_ALLOWED);
+        res->set_register_uri(false);
     }
 }
 
@@ -120,6 +132,7 @@
                                                             false);
 
             if(res) {
+                res->set_register_uri(false);
                 res->set_operation(operation);
                 if(value.empty()) {
                     res->clear_value();
@@ -158,14 +171,15 @@
                                                             false);
 
             if(res) {
-                char *buffer = (char*)memory_alloc(20);
+                res->set_register_uri(false);
+                char *buffer = (char*)malloc(BUFFER_SIZE);
                 if(buffer) {
-                    int size = snprintf(buffer, 20,"%lld",(long long int)value);
-
-                    res->set_operation(operation);
-                    res->set_value((const uint8_t*)buffer,
-                                   (uint32_t)size);
-                    memory_free(buffer);
+                    uint32_t size = m2m::itoa_c(value, buffer);
+                    if (size <= BUFFER_SIZE) {
+                        res->set_operation(operation);
+                        res->set_value((const uint8_t*)buffer, size);
+                    }
+                    free(buffer);
                 }
             }
         }
@@ -207,12 +221,13 @@
             // If it is any of the above resource
             // set the value of the resource.
             if (check_value_range(resource, value)) {
-                char *buffer = (char*)memory_alloc(20);
+                char *buffer = (char*)malloc(BUFFER_SIZE);
                 if(buffer) {
-                    int size = snprintf(buffer, 20,"%lld",(long long int)value);
-                    success = res->set_value((const uint8_t*)buffer,
-                                             (uint32_t)size);
-                    memory_free(buffer);
+                    uint32_t size = m2m::itoa_c(value, buffer);
+                    if (size <= BUFFER_SIZE) {
+                        success = res->set_value((const uint8_t*)buffer, size);
+                    }
+                    free(buffer);
                 }
             }
         }
@@ -418,7 +433,7 @@
             }
             break;
         case State:
-            if (value >= 0 && value <= 2) {
+            if (value >= 0 && value <= 3) {
                 success = true;
                 M2MResource* updateRes = get_resource(M2MFirmware::Update);
                 if (updateRes){
@@ -442,3 +457,15 @@
     return success;
 }
 
+void M2MFirmware::set_zero_value(M2MResource *resource)
+{
+    char *buffer = (char*)malloc(BUFFER_SIZE);
+    int64_t value = 0;
+    if(buffer) {
+        uint32_t size = m2m::itoa_c(value, buffer);
+        if (size <= BUFFER_SIZE) {
+            resource->set_value((const uint8_t*)buffer, size);
+        }
+        free(buffer);
+    }
+}