mbed Connector Endpoint interface. This interface permits a mbed endpoint to easily setup MDS resources and emit those resources to an MDS server.

Dependents:   IoT_LED_demo ServoTest uWater_Project hackathon ... more

Revision:
2:853f9ecc12df
Parent:
0:b438482ebbfc
Child:
5:a929d65eb385
--- a/api/DynamicResource.cpp	Tue Jan 27 22:52:25 2015 +0000
+++ b/api/DynamicResource.cpp	Tue Jan 27 23:41:34 2015 +0000
@@ -3,7 +3,7 @@
  * @brief   mbed CoAP Endpoint Dynamic Resource class
  * @author  Doug Anson/Chris Paola
  * @version 1.0
- * @see     
+ * @see
  *
  * Copyright (c) 2014
  *
@@ -19,46 +19,52 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
- 
- #include "DynamicResource.h"
-  
- // InstancePointerTable Helper 
- #include "InstancePointerTableHelper.h"
-  
- // default constructor
- DynamicResource::DynamicResource(const Logger *logger,const char *name,const char *res_type,uint8_t res_mask,const bool observable) : Resource<string>(logger,string(name),string("")) {
+
+#include "DynamicResource.h"
+
+// InstancePointerTable Helper
+#include "InstancePointerTableHelper.h"
+
+// default constructor
+DynamicResource::DynamicResource(const Logger *logger,const char *name,const char *res_type,uint8_t res_mask,const bool observable) : Resource<string>(logger,string(name),string(""))
+{
     this->m_res_type = string(res_type);
     this->m_observable = observable;
-    this->m_res_mask = res_mask;           
-  }
- 
- // constructor (input initial value)
- DynamicResource::DynamicResource(const Logger *logger,const char *name,const char *res_type,const string value,uint8_t res_mask,const bool observable) : Resource<string>(logger,string(name),value) {
+    this->m_res_mask = res_mask;
+}
+
+// constructor (input initial value)
+DynamicResource::DynamicResource(const Logger *logger,const char *name,const char *res_type,const string value,uint8_t res_mask,const bool observable) : Resource<string>(logger,string(name),value)
+{
     this->m_res_type = string(res_type);
     this->m_observable = observable;
-    this->m_res_mask = res_mask;         
- }
- 
- // constructor (strings)
- DynamicResource::DynamicResource(const Logger *logger,const string name,const string res_type,const string value,uint8_t res_mask,const bool observable) : Resource<string>(logger,name,value) {
+    this->m_res_mask = res_mask;
+}
+
+// constructor (strings)
+DynamicResource::DynamicResource(const Logger *logger,const string name,const string res_type,const string value,uint8_t res_mask,const bool observable) : Resource<string>(logger,name,value)
+{
     this->m_res_type = res_type;
     this->m_observable = observable;
-    this->m_res_mask = res_mask;         
- }
- 
- // copy constructor
- DynamicResource::DynamicResource(const DynamicResource &resource) : Resource<string>((const Resource<string> &)resource) {
+    this->m_res_mask = res_mask;
+}
+
+// copy constructor
+DynamicResource::DynamicResource(const DynamicResource &resource) : Resource<string>((const Resource<string> &)resource)
+{
     this->m_res_type = resource.m_res_type;
     this->m_observable = resource.m_observable;
     this->m_res_mask = resource.m_res_mask;
- }
- 
- // destructor
- DynamicResource::~DynamicResource() {
- }
- 
- // bind resource to NSDL
- void DynamicResource::bind(void *p) {
+}
+
+// destructor
+DynamicResource::~DynamicResource()
+{
+}
+
+// bind resource to NSDL
+void DynamicResource::bind(void *p)
+{
     if (p != NULL) {
         sn_nsdl_resource_info_s *resource_ptr = (sn_nsdl_resource_info_s *)p;
         std::printf("DynamicResource: name[%s] type:[%s] mask: 0x%.2x\r\n",this->getName().c_str(),this->m_res_type.c_str(),this->m_res_mask);
@@ -66,78 +72,72 @@
         const uint8_t *res_type = (const uint8_t *)this->m_res_type.c_str();
         int name_length = this->getName().size();
         int res_type_length = this->m_res_type.size();
-        int is_observable = 0; if (this->m_observable == true) is_observable = 1;
+        int is_observable = 0;
+        if (this->m_observable == true) is_observable = 1;
         const string *key = new string(this->getName());
         ipt_helper_add_instance_pointer(key,this);
         nsdl_create_dynamic_resource(resource_ptr,name_length,(uint8_t *)name,res_type_length,(uint8_t *)res_type,is_observable,&ipt_helper_nsdl_callback_stub,this->m_res_mask);
         std::printf("DynamicResource[%s(%d)] type: %s(%d) bound mask: 0x%.2x\r\n",name,name_length,res_type,res_type_length,this->m_res_mask);
-    }
-    else {
+    } else {
         std::printf("DynamicResource: NULL parameter in bind()\r\n");
     }
- }
+}
 
- // process NSDL message
- uint8_t DynamicResource::process(sn_coap_hdr_s *received_coap_ptr, sn_nsdl_addr_s *address, sn_proto_info_s *proto) {
+// process NSDL message
+uint8_t DynamicResource::process(sn_coap_hdr_s *received_coap_ptr, sn_nsdl_addr_s *address, sn_proto_info_s *proto)
+{
     sn_coap_hdr_s *coap_res_ptr = 0;
-        
+
     // create our key for debugging output...
     string key = this->coapDataToString(received_coap_ptr->uri_path_ptr,received_coap_ptr->uri_path_len);
-    
-    if(received_coap_ptr->msg_code == COAP_MSG_CODE_REQUEST_GET)
-    {        
+
+    if(received_coap_ptr->msg_code == COAP_MSG_CODE_REQUEST_GET) {
         std::printf("GET requested for [%s]...\r\n",key.c_str());
         coap_res_ptr = sn_coap_build_response(received_coap_ptr, COAP_MSG_CODE_RESPONSE_CONTENT);
-        
-        // process the GET if we have registered a callback for it...         
+
+        // process the GET if we have registered a callback for it...
         if ((this->m_res_mask&SN_GRS_GET_ALLOWED) != 0) {
             // call the resource get() to get the resource value
             std::printf("Calling resource(GET) for [%s]...\r\n",key.c_str());
             string value = this->get();
-        
-            // convert the string from the GET to something suitable for CoAP payloads    
-            std::printf("Building payload for [%s]=[%s]...\r\n",key.c_str(),value.c_str()); 
+
+            // convert the string from the GET to something suitable for CoAP payloads
+            std::printf("Building payload for [%s]=[%s]...\r\n",key.c_str(),value.c_str());
             int length = value.size();
             char value_buffer[MAX_VALUE_BUFFER_LENGTH+1];
             if (length > MAX_VALUE_BUFFER_LENGTH) length = MAX_VALUE_BUFFER_LENGTH;
             memset(value_buffer,0,MAX_VALUE_BUFFER_LENGTH+1);
-            memcpy(value_buffer,value.c_str(),length); 
-            
-            // fill in the CoAP response payload       
+            memcpy(value_buffer,value.c_str(),length);
+
+            // fill in the CoAP response payload
             coap_res_ptr->payload_len = length;
             coap_res_ptr->payload_ptr = (uint8_t *)value_buffer;
-            
-            // build out the response and send... 
+
+            // build out the response and send...
             sn_nsdl_send_coap_message(address, coap_res_ptr);
-        }
-        else {
+        } else {
             std::printf("ERROR: resource(GET) mask is munged (mask: 0x%x)\r\n",this->m_res_mask);
         }
-    }
-    else if(received_coap_ptr->msg_code == COAP_MSG_CODE_REQUEST_PUT)
-    {
+    } else if(received_coap_ptr->msg_code == COAP_MSG_CODE_REQUEST_PUT) {
         std::printf("PUT requested for [%s]...\r\n",key.c_str());
-        if(received_coap_ptr->payload_len > 0)
-        {
+        if(received_coap_ptr->payload_len > 0) {
             // process the PUT if we have registered a callback for it...
             if ((this->m_res_mask&SN_GRS_PUT_ALLOWED) != 0) {
                 // binder interacts only with strings
                 string value = this->coapDataToString(received_coap_ptr->payload_ptr,received_coap_ptr->payload_len);
-                
+
                 // call the resource put() to set the resource value
                 std::printf("Calling resource(PUT) with [%s]=[%s]...\r\n",key.c_str(),value.c_str());
                 this->put(value);
-            
+
                 // build out the response and send...
                 std::printf("resource(PUT) completed for [%s]...\r\n",key.c_str());
                 coap_res_ptr = sn_coap_build_response(received_coap_ptr, COAP_MSG_CODE_RESPONSE_CHANGED);
                 sn_nsdl_send_coap_message(address, coap_res_ptr);
-            }
-            else {
+            } else {
                 std::printf("ERROR: resource(PUT) mask is munged (mask: 0x%x)\r\n",this->m_res_mask);
             }
-        }
-        else {
+        } else {
             std::printf("ERROR: Binder(PUT) payload is NULL...\r\n");
         }
     }
@@ -145,16 +145,18 @@
     sn_coap_parser_release_allocated_coap_msg_mem(coap_res_ptr);
 
     return 0;
- }
- 
- // default PUT (does nothing)
- void DynamicResource::put(const string value) {
-     // not used by default
-     ;
- }
- 
- // convenience method to get the URI from its buffer field...
- string DynamicResource::coapDataToString(uint8_t *coap_data_ptr,int coap_data_ptr_length) {
+}
+
+// default PUT (does nothing)
+void DynamicResource::put(const string value)
+{
+    // not used by default
+    ;
+}
+
+// convenience method to get the URI from its buffer field...
+string DynamicResource::coapDataToString(uint8_t *coap_data_ptr,int coap_data_ptr_length)
+{
     if (coap_data_ptr != NULL && coap_data_ptr_length > 0) {
         char buf[MAX_VALUE_BUFFER_LENGTH+1];
         memset(buf,0,MAX_VALUE_BUFFER_LENGTH+1);
@@ -162,4 +164,4 @@
         return string(buf);
     }
     return string("");
- }
\ No newline at end of file
+}