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);
#include "zigbee_wrapper.h"
#include "utlist.h"
#include "oic_malloc.h"
+#include "oic_string.h"
#include "ocstack.h"
#include "logger.h"
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)
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)
{
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)