MBED NanoService Lighting Endpoint for NXP Ublox (cellular enabled)

Dependencies:   C027_Support C12832 StatusReporter LM75B c027_radios endpoint_core endpoint_nsp nsp_resources mbed mbed-rtos

Files at this revision

API Documentation at this revision

Comitter:
ansond
Date:
Sat Mar 15 05:29:29 2014 +0000
Parent:
104:cb01a05da40f
Child:
106:4f7323a01fb8
Commit message:
updates

Changed in this revision

Definitions.h Show annotated file Show diff for this revision Revisions of this file
NSPResource.cpp Show annotated file Show diff for this revision Revisions of this file
NSPResource.h Show annotated file Show diff for this revision Revisions of this file
NSPResourceFactory.cpp Show annotated file Show diff for this revision Revisions of this file
NSPResourceFactory.h Show annotated file Show diff for this revision Revisions of this file
endpoint_core.lib Show annotated file Show diff for this revision Revisions of this file
nsp_resources/nsdl_support.cpp Show annotated file Show diff for this revision Revisions of this file
nsp_resources/nsdl_support.h Show annotated file Show diff for this revision Revisions of this file
nsp_resources/nsp_get.cpp Show annotated file Show diff for this revision Revisions of this file
nsp_resources/nsp_getput.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/Definitions.h	Fri Mar 14 21:50:40 2014 +0000
+++ b/Definitions.h	Sat Mar 15 05:29:29 2014 +0000
@@ -26,8 +26,8 @@
 #include "CommonDefinitions.h"
 
 // NSP Configuration
-#define NSP_ADDRESS         "192.168.1.150"        // Target NSP Service - work
-//#define NSP_ADDRESS         "192.168.1.220"        // Target NSP Service - home vm
+//#define NSP_ADDRESS         "192.168.1.150"        // Target NSP Service - work
+#define NSP_ADDRESS         "192.168.1.220"        // Target NSP Service - home vm
 //#define NSP_ADDRESS         "10.1.0.81"            // Target NSP Service - home
 #define NSP_PORT            5683                   // Target NSP Service Port Number
 
--- a/NSPResource.cpp	Fri Mar 14 21:50:40 2014 +0000
+++ b/NSPResource.cpp	Sat Mar 15 05:29:29 2014 +0000
@@ -22,9 +22,15 @@
  #include "nsdl_support.h"
  
  // default constructor
- NSPResource::NSPResource(ErrorHandler *error_handler,char *ep_name,char *name,char *value,void *cb,void *resource_ptr,sn_grs_resource_acl_e acl) : Resource(error_handler,ep_name,name,value,cb)  {
+ NSPResource::NSPResource(ErrorHandler *error_handler,char *ep_name,char *name,char *value,void *cb,void *resource_ptr,sn_grs_resource_acl_e acl,char *interface, char *resource) : Resource(error_handler,ep_name,name,value,cb)  {
      this->m_resource_ptr = resource_ptr;
      this->m_acl = acl;
+     this->m_interface = interface;
+     this->m_interface_len = 0;
+     if (interface != NULL) this->m_interface_len = strlen(interface); 
+     this->m_resource = resource;
+     this->m_resource_len = 0;
+     if (resource != NULL) this->m_resource_len = strlen(resource);
      memset(this->m_nsp_name,0,RESOURCE_NAME_LEN+1);
      strcpy(this->m_nsp_name,(char *)(name+1));            // omit the leading "/"
      this->plumb(ep_name,this->m_nsp_name);
@@ -43,11 +49,11 @@
      if (this->m_resource_ptr != NULL) {
          if (this->getCallbackPointer() == NULL) {
              // create a static resource
-             nsdl_create_static_resource((sn_nsdl_resource_info_s *)this->m_resource_ptr,strlen(name),(uint8_t*)name,0,0,(uint8_t*)this->getValuePointer(),strlen(this->getValuePointer()));
+             nsdl_create_static_resource((sn_nsdl_resource_info_s *)this->m_resource_ptr,strlen(name),(uint8_t*)name, this->m_resource_len,(uint8_t *)this->m_resource,this->m_interface_len,(uint8_t *)this->m_interface,1,(uint8_t*)this->getValuePointer(),strlen(this->getValuePointer()));
          }
          else {
              // create a dynamic resource
-             nsdl_create_dynamic_resource((sn_nsdl_resource_info_s *)this->m_resource_ptr,strlen(name),(uint8_t*)name,0,0,1,(sn_grs_dyn_res_callback_t)this->getCallbackPointer(),this->m_acl); 
+             nsdl_create_dynamic_resource((sn_nsdl_resource_info_s *)this->m_resource_ptr,strlen(name),(uint8_t*)name,this->m_resource_len,(uint8_t *)this->m_resource,this->m_interface_len,(uint8_t *)this->m_interface,1,(sn_grs_dyn_res_callback_t)this->getCallbackPointer(),this->m_acl); 
          }
      }
      else {
--- a/NSPResource.h	Fri Mar 14 21:50:40 2014 +0000
+++ b/NSPResource.h	Sat Mar 15 05:29:29 2014 +0000
@@ -29,10 +29,14 @@
     private:
         void                  *m_resource_ptr;
         char                   m_nsp_name[RESOURCE_NAME_LEN+1];
+        char                  *m_interface;
+        int                    m_interface_len;
+        char                  *m_resource;
+        int                    m_resource_len;
         sn_grs_resource_acl_e  m_acl;
         
     public:
-        NSPResource(ErrorHandler *error_handler,char *ep_name,char *name,char *value,void *cb,void *cb_ptr,sn_grs_resource_acl_e acl);
+        NSPResource(ErrorHandler *error_handler,char *ep_name,char *name,char *value,void *cb,void *cb_ptr,sn_grs_resource_acl_e acl,char *interface, char *resource);
         virtual ~NSPResource();
                         
         virtual void plumb(char *endpoint_name,char *name);
--- a/NSPResourceFactory.cpp	Fri Mar 14 21:50:40 2014 +0000
+++ b/NSPResourceFactory.cpp	Sat Mar 15 05:29:29 2014 +0000
@@ -84,28 +84,29 @@
     this->initResourceStructures();
            
     // create all of the resources we expect for this endpoint
-    this->createResource(ep_name,"/dev/addldata","id:0",(void *)&addldata_cb,(sn_grs_resource_acl_e)(SN_GRS_GET_ALLOWED|SN_GRS_PUT_ALLOWED),(void *)&init_addldata);
-    this->createResource("/dev/location",ENDPOINT_LOCATION);
-    this->createResource("/fw/devtype",NSP_NODE_TYPE);
-    this->createResource(ep_name,"/dev/bat","5.0V",(void *)&battery_cb,(sn_grs_resource_acl_e)SN_GRS_GET_ALLOWED,(void *)&init_battery);
-    this->createResource(ep_name,"/sen/I","0.1A",(void *)&current_cb,(sn_grs_resource_acl_e)SN_GRS_GET_ALLOWED,(void *)&init_current);
-    this->createResource(ep_name,"/dev/I","0.1A",(void *)&current_cb,(sn_grs_resource_acl_e)SN_GRS_GET_ALLOWED,(void *)&init_current);
-    this->createResource("/nw/ipaddr",ethernet.getIPAddress());
-    this->createResource(ep_name,"/lt/0/dim","25",(void *)&dimmer_cb,(sn_grs_resource_acl_e)(SN_GRS_GET_ALLOWED|SN_GRS_PUT_ALLOWED),(void *)&init_dimmer);    // Action: dim/brighten light
-    this->createResource("/nw/eripaddr","N/A");
-    this->createResource(ep_name,"/lt/0/on","1",(void *)&switch_cb,(sn_grs_resource_acl_e)(SN_GRS_GET_ALLOWED|SN_GRS_PUT_ALLOWED),(void *)&init_switch);       // Action: light on/off
-    this->createResource(ep_name,"/lt/0/ctr","1",(void *)&switch_cb,(sn_grs_resource_acl_e)(SN_GRS_GET_ALLOWED|SN_GRS_PUT_ALLOWED),(void *)&init_switch);       // Action: light on/off
-    this->createResource("/dev/mdl","Sensinode MBED Light");
-    this->createResource("/gps/int","0");
-    this->createResource("/gps/fix","1");
-    this->createResource("/nw/pipaddr","N/A");
-    this->createResource("/nw/prssi","-75");
-    this->createResource("/dev/W","0.1W");
-    this->createResource(ep_name,"/sen/temp","10.0C",(void *)&temp_cb,(sn_grs_resource_acl_e)SN_GRS_GET_ALLOWED,(void *)&init_temp);
-    this->createResource(ep_name,"/dev/t","10.0C",(void *)&temp_cb,(sn_grs_resource_acl_e)SN_GRS_GET_ALLOWED,(void *)&init_temp);
-    this->createResource(ep_name,"/sen/V","5.0V",(void *)&voltage_cb,(sn_grs_resource_acl_e)SN_GRS_GET_ALLOWED,(void *)&init_voltage);
-    this->createResource(ep_name,"/dev/V","5.0V",(void *)&voltage_cb,(sn_grs_resource_acl_e)SN_GRS_GET_ALLOWED,(void *)&init_voltage);
-    this->createResource(ep_name,"/gps/loc",ENDPOINT_GPS_COORDS,(void *)&gps_location_cb,(sn_grs_resource_acl_e)SN_GRS_GET_ALLOWED,(void *)&init_gps);
+    this->createResource(ep_name,"/dev/addldata","id:0",(void *)&addldata_cb,(sn_grs_resource_acl_e)(SN_GRS_GET_ALLOWED|SN_GRS_PUT_ALLOWED),(void *)&init_addldata,"core#s",(char *)NULL);
+    this->createResource("/dev/location",ENDPOINT_LOCATION,"core#s","ns:location");
+    this->createResource("/fw/devtype",NSP_NODE_TYPE,"core#s","ns:devtype");
+    this->createResource(ep_name,"/dev/bat","5.0V",(void *)&battery_cb,(sn_grs_resource_acl_e)SN_GRS_GET_ALLOWED,(void *)&init_battery,(char *)NULL,"ipso:dev-bat");
+    this->createResource(ep_name,"/sen/I","0.1A",(void *)&current_cb,(sn_grs_resource_acl_e)SN_GRS_GET_ALLOWED,(void *)&init_current,(char *)NULL,"ucum:A");
+    this->createResource(ep_name,"/dev/I","0.1A",(void *)&current_cb,(sn_grs_resource_acl_e)SN_GRS_GET_ALLOWED,(void *)&init_current,(char *)NULL,"ucum:A");
+    this->createResource("/nw/ipaddr",ethernet.getIPAddress(),"core#s","ns:v4addr");
+    this->createResource(ep_name,"/lt/0/dim","25",(void *)&dimmer_cb,(sn_grs_resource_acl_e)(SN_GRS_GET_ALLOWED|SN_GRS_PUT_ALLOWED),(void *)&init_dimmer,(char *)NULL,"ipso:lt-dim");    // Action: dim/brighten light
+    this->createResource("/nw/eripaddr","N/A","core#s","ns:v4addr");
+    this->createResource(ep_name,"/lt/0/on","1",(void *)&switch_cb,(sn_grs_resource_acl_e)(SN_GRS_GET_ALLOWED|SN_GRS_PUT_ALLOWED),(void *)&init_switch,(char *)NULL,"ipso:lt-on");       // Action: light on/off
+    this->createResource(ep_name,"/lt/0/ctr","1",(void *)&switch_cb,(sn_grs_resource_acl_e)(SN_GRS_GET_ALLOWED|SN_GRS_PUT_ALLOWED),(void *)&init_switch,(char *)NULL,"ns:boolean");       // Action: light on/off
+    this->createResource("/dev/mdl","Sensinode MBED Light",(char *)NULL,"ipso:dev-mdl");
+    this->createResource("/dev/mfg","NXP MBED",(char *)NULL,"ipso:dev-mdl");
+    this->createResource("/gps/int","0","core#s","ns:counter");
+    this->createResource("/gps/fix","1","core#s","ns:boolean");
+    this->createResource("/nw/pipaddr","N/A","core#s","ns:v4addr");
+    this->createResource("/nw/prssi","-75","core#s","ns:rssi");
+    this->createResource("/dev/W","0.1W",(char *)NULL,"ucum:W");
+    this->createResource(ep_name,"/sen/temp","10.0C",(void *)&temp_cb,(sn_grs_resource_acl_e)SN_GRS_GET_ALLOWED,(void *)&init_temp,(char *)NULL,"ucum:Cel");
+    this->createResource(ep_name,"/dev/t","10.0C",(void *)&temp_cb,(sn_grs_resource_acl_e)SN_GRS_GET_ALLOWED,(void *)&init_temp,(char *)NULL,"ucum:Cel");
+    this->createResource(ep_name,"/sen/V","5.0V",(void *)&voltage_cb,(sn_grs_resource_acl_e)SN_GRS_GET_ALLOWED,(void *)&init_voltage,(char *)NULL,"ucum:V");
+    this->createResource(ep_name,"/dev/V","5.0V",(void *)&voltage_cb,(sn_grs_resource_acl_e)SN_GRS_GET_ALLOWED,(void *)&init_voltage,(char *)NULL,"ucum:V");
+    this->createResource(ep_name,"/gps/loc",ENDPOINT_GPS_COORDS,(void *)&gps_location_cb,(sn_grs_resource_acl_e)SN_GRS_GET_ALLOWED,(void *)&init_gps,"core#s","ns:gpsloc");
     
     //this->createResource("/res/int","1");
     //this->createResource("/res/systime","1010101");
@@ -113,20 +114,20 @@
     //this->createResource("/fw/new/NanoLightingApplication/ver","1.0");
     //this->createResource("/fw/upload","false");
     //this->createResource("/fw/download","none");
-    this->createResource("/ns/nspaddr",NSP_ADDRESS);
+    this->createResource("/ns/nspaddr",NSP_ADDRESS,"core#s","ns:v4addr");
     //this->createResource("/lt/0/ontime","0");
     //this->createResource("/lt/0/pfact","1.0");
     //this->createResource("/lt/0/sched","none");
     //this->createResource("/lt/0/sched_elem","0");
     //this->createResource("/lt/0/totKwh","6.23");
     //this->createResource("/nw/utlz","0.01");
-    this->createResource("/dev/panic","0");
+    this->createResource("/dev/panic","0","core#s","ns:panic");
 
 #ifdef MAC_ADDRESS
     extern char fmt_mac[RESOURCE_VALUE_LEN+1];
-    this->createResource("/nw/macaddr",fmt_mac);
+    this->createResource("/nw/macaddr",fmt_mac,"core#s","ns:euid64");
 #else
-    this->createResource("/nw/macaddr","00:00:00:00:00");
+    this->createResource("/nw/macaddr","00:00:00:00:00","core#s","ns:euid64");
 #endif
         
     // finalize the registration
@@ -134,18 +135,26 @@
  }
  
  // create an NSP resource
- void NSPResourceFactory::createResource(char *name,char *value) { 
-    this->createResource(this->getEndpointName(),name,value,NULL,SN_GRS_GET_ALLOWED,NULL);
+ void NSPResourceFactory::createResource(char *name,char *value) { this->createResource(name,value,(char *)NULL,(char *)NULL); }
+ void NSPResourceFactory::createResource(char *name,char *value,char *interface,char *resource) { 
+    this->createResource(this->getEndpointName(),name,value,NULL,SN_GRS_GET_ALLOWED,NULL,interface,resource);
  }
- void NSPResourceFactory::createResource(char *ep_name,char *name,char *value,void *cb) { 
-    this->createResource(ep_name,name,value,cb,SN_GRS_GET_ALLOWED,NULL); 
+ void NSPResourceFactory::createResource(char *ep_name,char *name,char *value,void *cb) { this->createResource(ep_name,name,value,cb,(char *)NULL,(char *)NULL); }
+ void NSPResourceFactory::createResource(char *ep_name,char *name,char *value,void *cb,char *interface, char *resource) { 
+    this->createResource(ep_name,name,value,cb,SN_GRS_GET_ALLOWED,NULL,interface,resource); 
  }
  void NSPResourceFactory::createResource(char *ep_name,char *name,char *value,void *cb,sn_grs_resource_acl_e acl) {
-     this->createResource(ep_name,name,value,cb,acl,NULL);
+     this->createResource(ep_name,name,value,cb,acl,(char *)NULL,(char *)NULL); 
+ }
+ void NSPResourceFactory::createResource(char *ep_name,char *name,char *value,void *cb,sn_grs_resource_acl_e acl,char *interface, char *resource) {
+     this->createResource(ep_name,name,value,cb,acl,NULL,interface,resource);
  }
- void NSPResourceFactory::createResource(char *ep_name,char *name,char *value,void *cb,sn_grs_resource_acl_e acl,void *io) {     
+ void NSPResourceFactory::createResource(char *ep_name,char *name,char *value,void *cb,sn_grs_resource_acl_e acl,void *io) {
+     this->createResource(ep_name,name,value,cb,acl,io,(char *)NULL,(char *)NULL);
+ }
+ void NSPResourceFactory::createResource(char *ep_name,char *name,char *value,void *cb,sn_grs_resource_acl_e acl,void *io,char *interface, char *resource) {     
      // initialize the resource
-     this->m_list[this->m_count] = new NSPResource(this->logger(),ep_name,name,value,cb,this->m_resource_ptr,acl); 
+     this->m_list[this->m_count] = new NSPResource(this->logger(),ep_name,name,value,cb,this->m_resource_ptr,acl,interface,resource); 
      
      // call the resource initializer if needed
      if (io != NULL && this->m_list[this->m_count] != NULL) {
--- a/NSPResourceFactory.h	Fri Mar 14 21:50:40 2014 +0000
+++ b/NSPResourceFactory.h	Sat Mar 15 05:29:29 2014 +0000
@@ -44,9 +44,13 @@
     
     protected:
         virtual void createResource(char *name,char *value);
+        virtual void createResource(char *name,char *value, char *interface, char *resource);
         virtual void createResource(char *endpoint_name,char *name,char *value,void *cb);
+        virtual void createResource(char *endpoint_name,char *name,char *value,void *cb, char *interface, char *resource);
         void createResource(char *endpoint_name,char *name,char *value,void *cb,sn_grs_resource_acl_e acl);
+        void createResource(char *endpoint_name,char *name,char *value,void *cb,sn_grs_resource_acl_e acl, char *interface, char *resource);
         void createResource(char *endpoint_name,char *name,char *value,void *cb,sn_grs_resource_acl_e acl,void *io);
+        void createResource(char *endpoint_name,char *name,char *value,void *cb,sn_grs_resource_acl_e acl,void *io, char *interface, char *resource);
     
     private:
         void setEndpointName(char *endpoint_name);
--- a/endpoint_core.lib	Fri Mar 14 21:50:40 2014 +0000
+++ b/endpoint_core.lib	Sat Mar 15 05:29:29 2014 +0000
@@ -1,1 +1,1 @@
-http://mbed.org/users/ansond/code/endpoint_core/#8747b6612e32
+http://mbed.org/users/ansond/code/endpoint_core/#432e7450a8fc
--- a/nsp_resources/nsdl_support.cpp	Fri Mar 14 21:50:40 2014 +0000
+++ b/nsp_resources/nsdl_support.cpp	Sat Mar 15 05:29:29 2014 +0000
@@ -1,16 +1,18 @@
 // NSDL library support functions
 
 #include "mbed.h"
-#include "nsdl_support.h"
-#include "mbed.h"
 #include "rtos.h"
 #include "EthernetInterface.h"
 
+#include "nsdl_support.h"
+
 #include "Definitions.h"
 #include "ErrorHandler.h"
 
 extern ErrorHandler *error_handler;
 
+Mutex *nsp_mutex = NULL;
+
 Endpoint nsp;
 UDPSocket server;
 char _endpoint_name[LIGHT_NAME_LEN+1];
@@ -26,7 +28,7 @@
     if (ptr_to_free != NULL) free(ptr_to_free);
 }
 
-void nsdl_create_static_resource(sn_nsdl_resource_info_s *resource_structure, uint16_t pt_len, uint8_t *pt, uint16_t rpp_len, uint8_t *rpp_ptr, uint8_t *rsc, uint16_t rsc_len) {
+void nsdl_create_static_resource(sn_nsdl_resource_info_s *resource_structure, uint16_t pt_len, uint8_t *pt, uint16_t rpp_len, uint8_t *rpp_ptr, uint16_t if_len, uint8_t *if_ptr, uint8_t is_observable, uint8_t *rsc, uint16_t rsc_len) {
     if (resource_structure != NULL) {
         resource_structure->access = SN_GRS_GET_ALLOWED;
         resource_structure->mode = SN_GRS_STATIC;
@@ -34,13 +36,16 @@
         resource_structure->path = pt;
         resource_structure->resource_parameters_ptr->resource_type_len = rpp_len;
         resource_structure->resource_parameters_ptr->resource_type_ptr = rpp_ptr;
+        resource_structure->resource_parameters_ptr->interface_description_ptr = if_ptr;
+        resource_structure->resource_parameters_ptr->interface_description_len = if_len;
+        resource_structure->resource_parameters_ptr->observable = is_observable;
         resource_structure->resource = rsc;
         resource_structure->resourcelen = rsc_len;
         sn_nsdl_create_resource(resource_structure);
     }
 }
 
-void nsdl_create_dynamic_resource(sn_nsdl_resource_info_s *resource_structure, uint16_t pt_len, uint8_t *pt, uint16_t rpp_len, uint8_t *rpp_ptr, uint8_t is_observable, sn_grs_dyn_res_callback_t callback_ptr, int access_right) {
+void nsdl_create_dynamic_resource(sn_nsdl_resource_info_s *resource_structure, uint16_t pt_len, uint8_t *pt, uint16_t rpp_len, uint8_t *rpp_ptr, uint16_t if_len, uint8_t *if_ptr, uint8_t is_observable, sn_grs_dyn_res_callback_t callback_ptr, int access_right) {
     if (resource_structure != NULL) {
         resource_structure->access = (sn_grs_resource_acl_e)access_right;
         resource_structure->resource = 0;
@@ -51,6 +56,8 @@
         resource_structure->path = pt;
         resource_structure->resource_parameters_ptr->resource_type_len = rpp_len;
         resource_structure->resource_parameters_ptr->resource_type_ptr = rpp_ptr;
+        resource_structure->resource_parameters_ptr->interface_description_ptr = if_ptr;
+        resource_structure->resource_parameters_ptr->interface_description_len = if_len;
         resource_structure->resource_parameters_ptr->observable = is_observable;
         sn_nsdl_create_resource(resource_structure);
     }
@@ -111,9 +118,11 @@
         ++count;
         if (count%val == 0) {
             count = 0;
+            //nsp_mutex->lock();
             endpoint_ptr = nsdl_init_register_endpoint(endpoint_ptr, (uint8_t*)_endpoint_name, _ep_type, _lifetime_ptr);
             sn_nsdl_register_endpoint(endpoint_ptr);
             nsdl_clean_register_endpoint(&endpoint_ptr);
+            //nsp_mutex->unlock();
             endpoint_ptr = NULL;
             if (error_handler != NULL) error_handler->blinkTransportTxLED();
         }
@@ -143,6 +152,9 @@
 
     
 void nsdl_event_loop() {
+    if (nsp_mutex == NULL) nsp_mutex = new Mutex();
+    nsp_mutex->unlock();
+    
     // start the registration update thread
     Thread registration_thread(registration_update_thread);
     
@@ -158,8 +170,10 @@
     
     while(true) {
         //if (error_handler != NULL) error_handler->log("Reading from socket...");
+        //nsp_mutex->lock();
         int n = server.receiveFrom(from,nsp_buffer,sizeof(nsp_buffer));
         if (n > 0) sn_nsdl_process_coap((uint8_t*)nsp_buffer, n, &received_packet_address);
+        //nsp_mutex->unlock();
         if (error_handler != NULL) error_handler->blinkTransportRxLED();
         //if (error_handler != NULL) error_handler->log("DONE Reading from socket...");
     }
--- a/nsp_resources/nsdl_support.h	Fri Mar 14 21:50:40 2014 +0000
+++ b/nsp_resources/nsdl_support.h	Sat Mar 15 05:29:29 2014 +0000
@@ -17,8 +17,8 @@
 
 extern "C" void *nsdl_alloc(uint16_t size);
 extern "C" void nsdl_free(void* ptr_to_free);
-void nsdl_create_static_resource(sn_nsdl_resource_info_s *resource_structure, uint16_t pt_len, uint8_t *pt, uint16_t rpp_len, uint8_t *rpp_ptr, uint8_t *rsc, uint16_t rsc_len);
-void nsdl_create_dynamic_resource(sn_nsdl_resource_info_s *resource_structure, uint16_t pt_len, uint8_t *pt, uint16_t rpp_len, uint8_t *rpp_ptr, uint8_t is_observable, sn_grs_dyn_res_callback_t callback_ptr, int access_right);
+void nsdl_create_static_resource(sn_nsdl_resource_info_s *resource_structure, uint16_t pt_len, uint8_t *pt, uint16_t rpp_len, uint8_t *rpp_ptr, uint16_t if_len, uint8_t *if_ptr, uint8_t is_observable, uint8_t *rsc, uint16_t rsc_len);
+void nsdl_create_dynamic_resource(sn_nsdl_resource_info_s *resource_structure, uint16_t pt_len, uint8_t *pt, uint16_t rpp_len, uint8_t *rpp_ptr, uint16_t if_len, uint8_t *if_ptr, uint8_t is_observable, sn_grs_dyn_res_callback_t callback_ptr, int access_right);
 sn_nsdl_ep_parameters_s* nsdl_init_register_endpoint(sn_nsdl_ep_parameters_s *endpoint_structure, uint8_t* name, uint8_t* ypename_ptr, uint8_t *lifetime_ptr);
 void nsdl_clean_register_endpoint(sn_nsdl_ep_parameters_s **endpoint_structure);
 void nsdl_init();
--- a/nsp_resources/nsp_get.cpp	Fri Mar 14 21:50:40 2014 +0000
+++ b/nsp_resources/nsp_get.cpp	Sat Mar 15 05:29:29 2014 +0000
@@ -10,6 +10,7 @@
     sn_coap_hdr_s *coap_res_ptr = NULL;
     coap_res_ptr = sn_coap_build_response(received_coap_ptr,COAP_MSG_CODE_RESPONSE_CONTENT);
     if (coap_res_ptr != NULL && io != NULL && io->stringValue() != NULL) {
+        coap_res_ptr->msg_type = COAP_MSG_TYPE_CONFIRMABLE;
         coap_res_ptr->payload_len = strlen(io->stringValue());
         coap_res_ptr->payload_ptr = (uint8_t*)io->stringValue();
         sn_nsdl_send_coap_message(address, coap_res_ptr);
--- a/nsp_resources/nsp_getput.cpp	Fri Mar 14 21:50:40 2014 +0000
+++ b/nsp_resources/nsp_getput.cpp	Sat Mar 15 05:29:29 2014 +0000
@@ -14,6 +14,7 @@
     {
         coap_res_ptr = sn_coap_build_response(received_coap_ptr, COAP_MSG_CODE_RESPONSE_CONTENT);
         if (coap_res_ptr != NULL && io != NULL && io->stringValue() != NULL) {
+            coap_res_ptr->msg_type = COAP_MSG_TYPE_CONFIRMABLE;
             coap_res_ptr->payload_len = strlen(io->stringValue());
             coap_res_ptr->payload_ptr = (uint8_t*)io->stringValue();
             sn_nsdl_send_coap_message(address, coap_res_ptr);