Update index of Zigbee Resources when a NodeId changes.
authorJoseph Morrow <joseph.l.morrow@intel.com>
Wed, 9 Dec 2015 18:21:32 +0000 (10:21 -0800)
committerJon A. Cruz <jonc@osg.samsung.com>
Tue, 15 Dec 2015 00:32:01 +0000 (00:32 +0000)
Change-Id: Ia1ffd7ebb7bba51fdb211a33000713c7e1daab32
Signed-off-by: Joseph Morrow <joseph.l.morrow@intel.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/3937
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
Reviewed-by: Jon A. Cruz <jonc@osg.samsung.com>
plugins/include/internal/pluginlist.h
plugins/src/pluginlist.c
plugins/zigbee_wrapper/src/zigbee_wrapper.c

index 0dda827..925e24a 100644 (file)
@@ -50,6 +50,10 @@ OCStackResult GetResourceFromZigBeeNodeId(PIPluginBase * plugin,
 
 OCStackResult AddResourceToPlugin(PIPluginBase * plugin, PIResourceBase * resource);
 
+OCStackResult UpdateZigbeeResourceNodeId(PIPluginBase * plugin,
+                                         const char * eui,
+                                         const char * nodeId);
+
 OCStackResult DeleteResource(PIPluginBase * plugin, PIResourceBase * resource);
 
 OCStackResult DeleteResourceList(PIPluginBase * plugin);
index 5c3b456..59d5ac2 100644 (file)
@@ -26,6 +26,7 @@
 #include "zigbee_wrapper.h"
 #include "utlist.h"
 #include "oic_malloc.h"
+#include "oic_string.h"
 #include "ocstack.h"
 #include "logger.h"
 
@@ -184,6 +185,33 @@ OCStackResult AddResourceToPlugin (PIPluginBase * plugin, PIResourceBase * resou
     return OC_STACK_NO_MEMORY;
 }
 
+OCStackResult UpdateZigbeeResourceNodeId(PIPluginBase * plugin,
+                                         const char * eui,
+                                         const char * nodeId)
+{
+    if (!plugin || !eui || !nodeId)
+    {
+        return OC_STACK_INVALID_PARAM;
+    }
+    if(plugin->type != PLUGIN_ZIGBEE)
+    {
+        return OC_STACK_INVALID_PARAM;
+    }
+    PIResourceBase * out = NULL;
+    PIResourceBase * tmp = NULL;
+    size_t checkLength = strlen(eui);
+    LL_FOREACH_SAFE(plugin->resourceList, out, tmp)
+    {
+        size_t indexLength = strlen(((PIResource_Zigbee *)out)->eui);
+        if(ZigbeeStrEquals(eui, ((PIResource_Zigbee *)out)->eui, checkLength, indexLength) != true)
+        {
+            continue;
+        }
+        OICStrcpy(((PIResource_Zigbee *)out)->nodeId, (strlen(nodeId)+1)*sizeof(char), nodeId);
+    }
+    return OC_STACK_OK;
+}
+
 OCStackResult DeleteResource(PIPluginBase * plugin, PIResourceBase * resource)
 {
     if (!plugin || !resource)
index 6b1ca7e..20df3d8 100644 (file)
@@ -416,6 +416,21 @@ void zigbeeZoneStatusUpdate(TWUpdate * update, PIPlugin_Zigbee* plugin)
                                                  piResource->header.piResource.resourceHandle);
 }
 
+void deviceNodeIdChanged(const char * eui, const char * nodeId, PIPlugin_Zigbee* plugin)
+{
+    if(!eui || !nodeId)
+    {
+        return;
+    }
+    OCStackResult result = UpdateZigbeeResourceNodeId((PIPluginBase *)plugin,
+                                                  eui,
+                                                  nodeId);
+    if(result != OC_STACK_OK)
+    {
+        OC_LOG_V(ERROR, TAG, "Failed to update Zigbee Resource NodeId due to result: %s", result);
+    }
+}
+
 OCStackResult ZigbeeInit(const char * comPort, PIPlugin_Zigbee ** plugin,
                          PINewResourceFound newResourceCB,
                          PIObserveNotificationUpdate observeNotificationUpdate)
@@ -442,8 +457,12 @@ OCStackResult ZigbeeInit(const char * comPort, PIPlugin_Zigbee ** plugin,
     {
         return result;
     }
-
-    return TWSetStatusUpdateCallback(zigbeeZoneStatusUpdate, *plugin);
+    result = TWSetStatusUpdateCallback(zigbeeZoneStatusUpdate, *plugin);
+    if(result != OC_STACK_OK)
+    {
+        return result;
+    }
+    return TWSetEndDeviceNodeIdChangedCallback(deviceNodeIdChanged, *plugin);
 }
 
 OCStackResult ZigbeeDiscover(PIPlugin_Zigbee * plugin)