From: Joseph Morrow Date: Wed, 9 Dec 2015 18:21:32 +0000 (-0800) Subject: Update index of Zigbee Resources when a NodeId changes. X-Git-Tag: 1.2.0+RC1~771 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5ac4b701a6e8850e2623141c15d02f8c05a89dbc;p=platform%2Fupstream%2Fiotivity.git Update index of Zigbee Resources when a NodeId changes. Change-Id: Ia1ffd7ebb7bba51fdb211a33000713c7e1daab32 Signed-off-by: Joseph Morrow Reviewed-on: https://gerrit.iotivity.org/gerrit/3937 Tested-by: jenkins-iotivity Reviewed-by: Jon A. Cruz --- diff --git a/plugins/include/internal/pluginlist.h b/plugins/include/internal/pluginlist.h index 0dda827..925e24a 100644 --- a/plugins/include/internal/pluginlist.h +++ b/plugins/include/internal/pluginlist.h @@ -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); diff --git a/plugins/src/pluginlist.c b/plugins/src/pluginlist.c index 5c3b456..59d5ac2 100644 --- a/plugins/src/pluginlist.c +++ b/plugins/src/pluginlist.c @@ -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) diff --git a/plugins/zigbee_wrapper/src/zigbee_wrapper.c b/plugins/zigbee_wrapper/src/zigbee_wrapper.c index 6b1ca7e..20df3d8 100644 --- a/plugins/zigbee_wrapper/src/zigbee_wrapper.c +++ b/plugins/zigbee_wrapper/src/zigbee_wrapper.c @@ -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)