[UTC][capi-network-zigbee][ACR-884][Add UTC for Zigbee APIs]
authorsaerome.kim <saerome.kim@samsung.com>
Thu, 23 Aug 2018 07:42:09 +0000 (16:42 +0900)
committersaerome.kim <saerome.kim@samsung.com>
Thu, 6 Sep 2018 08:51:46 +0000 (17:51 +0900)
Change-Id: I2d609dadaee4a629746f201f459c35b6aad5dd3e
Signed-off-by: saerome.kim <saerome.kim@samsung.com>
19 files changed:
packaging/utc/core-zigbee-tests.spec [new file with mode: 0644]
packaging/utc/core-zigbee-tests.xml [new file with mode: 0644]
scripts_tpk/tizeniot_service_modules.txt
src/utc/zigbee/CMakeLists.txt [new file with mode: 0644]
src/utc/zigbee/tct-zigbee-core.c [new file with mode: 0644]
src/utc/zigbee/tct-zigbee-core_mobile.h [new file with mode: 0644]
src/utc/zigbee/tct-zigbee-core_tizeniot.h [new file with mode: 0644]
src/utc/zigbee/tct-zigbee-core_tv.h [new file with mode: 0644]
src/utc/zigbee/tct-zigbee-core_wearable.h [new file with mode: 0644]
src/utc/zigbee/utc-zigbee-common.h [new file with mode: 0644]
src/utc/zigbee/utc-zigbee-zcl-global-commands.c [new file with mode: 0644]
src/utc/zigbee/utc-zigbee-zcl-ias-zone.c [new file with mode: 0644]
src/utc/zigbee/utc-zigbee-zcl-on-off.c [new file with mode: 0644]
src/utc/zigbee/utc-zigbee-zcl.c [new file with mode: 0644]
src/utc/zigbee/utc-zigbee-zdo-dev-disc.c [new file with mode: 0644]
src/utc/zigbee/utc-zigbee-zdo.c [new file with mode: 0644]
src/utc/zigbee/utc-zigbee.c [new file with mode: 0644]
src/utc/zigbee/utc-zigbee.h [new file with mode: 0644]
tct_unsupported.txt

diff --git a/packaging/utc/core-zigbee-tests.spec b/packaging/utc/core-zigbee-tests.spec
new file mode 100644 (file)
index 0000000..f4922f6
--- /dev/null
@@ -0,0 +1,77 @@
+%define MODULE_NAME zigbee
+%define MODULE_LIBNAME capi-network-zigbee
+Name:       core-%{MODULE_NAME}-tests
+Summary:    Core API unit TC (%{name})
+Version:    0.1
+Release:    0
+Group:      Development/Tools
+License:    Apache License, Version 2.0
+Source0:    %{name}-%{version}.tar.gz
+BuildRequires: pkgconfig(%{MODULE_LIBNAME})
+BuildRequires: pkgconfig(glib-2.0)
+BuildRequires: cmake
+BuildRequires: pkgconfig(capi-appfw-application)
+BuildRequires: pkgconfig(elementary)
+BuildRequires: pkgconfig(dlog)
+BuildRequires: pkgconfig(capi-system-info)
+
+
+%description
+Core API unit TC (%{name})
+
+%prep
+%setup -q
+
+%build
+
+%define PREFIX "%{_libdir}/%{name}"
+
+export LDFLAGS+="-Wl,--rpath=%{PREFIX} -Wl,--as-needed"
+
+%if %{?ASAN_BUILD:1}0
+       %if %{?DEVICE_BUILD_TYPE_MOBILE:1}0
+       cmake . -DMODULE="%{MODULE_NAME}" -DBUILDTCTYPE="utc" -DDEVICE_BUILD_TYPE="mobile" -DASANBUILD="true" -DCMAKE_INSTALL_PREFIX=%{_prefix}
+       %endif
+       %if %{?DEVICE_BUILD_TYPE_WEARABLE:1}0
+       cmake . -DMODULE="%{MODULE_NAME}" -DBUILDTCTYPE="utc" -DDEVICE_BUILD_TYPE="wearable" -DASANBUILD="true" -DCMAKE_INSTALL_PREFIX=%{_prefix}
+       %endif
+       %if %{?DEVICE_BUILD_TYPE_TV:1}0
+       cmake . -DMODULE="%{MODULE_NAME}" -DBUILDTCTYPE="utc" -DDEVICE_BUILD_TYPE="tv" -DASANBUILD="true" -DCMAKE_INSTALL_PREFIX=%{_prefix}
+       %endif
+       %if %{?DEVICE_BUILD_TYPE_COMMON_IOT:1}0
+       cmake . -DMODULE="%{MODULE_NAME}" -DBUILDTCTYPE="utc" -DDEVICE_BUILD_TYPE="common_iot" -DASANBUILD="true" -DCMAKE_INSTALL_PREFIX=%{_prefix}
+       %endif
+%else
+       %if %{?DEVICE_BUILD_TYPE_MOBILE:1}0
+       cmake . -DMODULE="%{MODULE_NAME}" -DBUILDTCTYPE="utc" -DDEVICE_BUILD_TYPE="mobile" -DASANBUILD="false" -DCMAKE_INSTALL_PREFIX=%{_prefix}
+       %endif
+       %if %{?DEVICE_BUILD_TYPE_WEARABLE:1}0
+       cmake . -DMODULE="%{MODULE_NAME}" -DBUILDTCTYPE="utc" -DDEVICE_BUILD_TYPE="wearable" -DASANBUILD="false" -DCMAKE_INSTALL_PREFIX=%{_prefix}
+       %endif
+       %if %{?DEVICE_BUILD_TYPE_TV:1}0
+       cmake . -DMODULE="%{MODULE_NAME}" -DBUILDTCTYPE="utc" -DDEVICE_BUILD_TYPE="tv" -DASANBUILD="false" -DCMAKE_INSTALL_PREFIX=%{_prefix}
+       %endif
+       %if %{?DEVICE_BUILD_TYPE_COMMON_IOT:1}0
+       cmake . -DMODULE="%{MODULE_NAME}" -DBUILDTCTYPE="utc" -DDEVICE_BUILD_TYPE="common_iot" -DASANBUILD="false" -DCMAKE_INSTALL_PREFIX=%{_prefix}
+       %endif
+%endif
+
+make %{?jobs:-j%jobs}
+
+%install
+rm -rf %{buildroot}
+%make_install
+mkdir -p %{buildroot}/usr/share/license
+cp LICENSE %{buildroot}/usr/share/license/%{name}
+mkdir -p %{buildroot}/usr/share/packages/
+cp packaging/utc/%{name}.xml %{buildroot}/usr/share/packages/
+mkdir -p %{buildroot}/usr/apps/%{name}/bin
+%post
+
+%postun
+
+
+%files
+/usr/apps/%{name}/*
+/usr/share/packages/%{name}.xml
+/usr/share/license/%{name}
diff --git a/packaging/utc/core-zigbee-tests.xml b/packaging/utc/core-zigbee-tests.xml
new file mode 100644 (file)
index 0000000..ce01f97
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns="http://tizen.org/ns/packages" package="core-zigbee-tests" version="0.1.0" api-version="3.0">
+    <label>CoreZigbeeTest</label>
+    <author email="test@tizen.org" href="www.tizen.org">test</author>
+    <description>Core API test Application</description>
+    <ui-application appid="core.zigbee-tests" exec="/usr/apps/core-zigbee-tests/bin/tct-zigbee-core" nodisplay="false" multiple="false" type="capp" taskmanage="true">
+    <background-category value="background-network"/>
+       <background-category value="download"/>
+       <background-category value="iot-communication"/>
+       <background-category value="location"/>
+       <background-category value="media"/>
+       <background-category value="sensor"/>
+       </ui-application>
+       <privileges>
+               <privilege>http://tizen.org/privilege/zigbee</privilege>
+       </privileges>
+</manifest>
index 81c79e80ff662abd7eb7252b03b64dac9420dba3..1919e2184934cf76ec1c56e078aac91bb91d752a 100755 (executable)
@@ -76,7 +76,7 @@ wifi-direct
 wifi-manager
 yaca
 peripheral-io
-stc 
+stc
 intelligent-network-monitoring
 asp
 camera
@@ -85,3 +85,4 @@ rpc-port
 privacy-privilege-manager
 sound-pool
 softap
+zigbee
diff --git a/src/utc/zigbee/CMakeLists.txt b/src/utc/zigbee/CMakeLists.txt
new file mode 100644 (file)
index 0000000..5dbfb0d
--- /dev/null
@@ -0,0 +1,47 @@
+SET(PKG_NAME "zigbee")
+
+SET(EXEC_NAME "tct-${PKG_NAME}-core")
+SET(RPM_NAME "core-${PKG_NAME}-tests")
+
+SET(CAPI_LIB "capi-network-zigbee")
+SET(TC_SOURCES
+       utc-zigbee.c
+       utc-zigbee-zdo.c
+       utc-zigbee-zdo-dev-disc.c
+       utc-zigbee-zcl.c
+       utc-zigbee-zcl-global-commands.c
+       utc-zigbee-zcl-ias-zone.c
+       utc-zigbee-zcl-on-off.c
+)
+
+PKG_CHECK_MODULES(${CAPI_LIB} REQUIRED
+       ${CAPI_LIB}
+       capi-appfw-application
+       capi-system-info
+       glib-2.0
+       bundle
+       dlog
+       elementary
+)
+
+INCLUDE_DIRECTORIES(
+       ${${CAPI_LIB}_INCLUDE_DIRS}
+)
+
+ADD_EXECUTABLE(${EXEC_NAME} ${EXEC_NAME}.c ${TC_SOURCES} ${COMMON_FILE})
+TARGET_LINK_LIBRARIES(${EXEC_NAME}
+       ${${CAPI_LIB}_LIBRARIES}
+       bundle
+)
+
+INSTALL(PROGRAMS ${EXEC_NAME}
+    DESTINATION ${BIN_DIR}/${RPM_NAME}/bin
+)
+
+IF( DEFINED ASAN )
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC -Wall -pie -g -fsanitize=address -fsanitize-recover=address -U_FORTIFY_SOURCE -fno-omit-frame-pointer")
+SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed -Wl,--rpath=/usr/lib -Wl,-fsanitize=address")
+ELSE()
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0 -g -fPIE -Wall")
+SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed -Wl,--rpath=/usr/lib -pie")
+ENDIF()
diff --git a/src/utc/zigbee/tct-zigbee-core.c b/src/utc/zigbee/tct-zigbee-core.c
new file mode 100644 (file)
index 0000000..86e069e
--- /dev/null
@@ -0,0 +1,140 @@
+//
+// Copyright (c) 2014 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+#include "tct_common.h"
+
+#ifdef MOBILE  //Starts MOBILE
+#include "tct-zigbee-core_mobile.h"
+#endif  //MOBILE       //End MOBILE
+
+#ifdef WEARABLE        //Starts WEARABLE
+#include "tct-zigbee-core_wearable.h"
+#endif  //WEARABLE     //End WEARABLE
+
+#ifdef TV      //Starts TV
+#include "tct-zigbee-core_tv.h"
+#endif  //TV   //End TV
+
+//#ifdef TIZENIOT      //Starts TIZENIOT
+#include "tct-zigbee-core_tizeniot.h"
+//#endif  //TIZENIOT   //End TIZENIOT
+
+#include <stdio.h>
+#include <string.h>
+#include <malloc.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/wait.h>
+#include <glib.h>
+#include <stdbool.h>
+#include <app.h>
+#include <dlog.h>
+
+#include <Elementary.h>
+
+typedef struct appdata {
+       Evas_Object *win;
+       Evas_Object *conform;
+       Evas_Object *label;
+} appdata_s;
+
+static bool app_create(void *data)
+{
+       return true;
+}
+
+static void app_control(app_control_h app_control, void *data)
+{
+       char* pszGetTCName = NULL;
+       int i=0, result=0, nRet=0;
+       nRet = app_control_get_extra_data(app_control, "testcase_name", &pszGetTCName);
+       if(nRet != APP_CONTROL_ERROR_NONE)
+       {
+               dlog_print(DLOG_ERROR, "NativeTCT", "[%s:%d] app_control_get_extra_data returns error = %d", __FUNCTION__, __LINE__, nRet);
+               PRINT_UTC_LOG("\\n[%s][Line : %d]Unable to fetch test case name: app_control_get_extra_data API call fails\\n", __FILE__, __LINE__);
+               PRINT_TC_RESULT("%d",1);
+               FREE_MEMORY_TC(pszGetTCName);
+               return;
+       }
+
+       dlog_print(DLOG_INFO, "NativeTCT", "[%s:%d] Executing TC Name = %s", __FUNCTION__, __LINE__, pszGetTCName);
+       for ( i = 0; tc_array[i].name; i++ )
+       {
+               if ( 0 == strncmp(pszGetTCName, tc_array[i].name, strlen(pszGetTCName)) )
+               {
+                       DUMP_UTC_ERRLOG();
+                       if ( tc_array[i].startup )
+                       {
+                               dlog_print(DLOG_INFO, "NativeTCT", "%s : Start up", pszGetTCName);
+                               tc_array[i].startup();
+                       }
+
+                       dlog_print(DLOG_INFO, "NativeTCT", "%s : Body", pszGetTCName);
+                       result = tc_array[i].function();
+                       dlog_print(DLOG_INFO, "NativeTCT", "%s returns value = %d", pszGetTCName, result);
+
+                       if ( tc_array[i].cleanup )
+                       {
+                               dlog_print(DLOG_INFO, "NativeTCT", "%s : Clean up", pszGetTCName);
+                               tc_array[i].cleanup();
+                       }
+
+                       CLOSE_UTC_ERRLOG();
+                       PRINT_TC_RESULT("%d",result);
+                       FREE_MEMORY_TC(pszGetTCName);
+                       return;
+               }
+       }
+
+       dlog_print(DLOG_ERROR, "NativeTCT", "[%s:%d] Unable to execute %s : Unknown Test Case Name", __FUNCTION__, __LINE__, pszGetTCName);
+       PRINT_UTC_LOG("\\n[%s][Line : %d]Unable to execute %s : Unknown Test Case Name\\n", __FILE__, __LINE__, pszGetTCName);
+       PRINT_TC_RESULT("%d",1);
+       FREE_MEMORY_TC(pszGetTCName);
+       return;
+}
+
+static void app_terminate(void *data)
+{
+       dlog_print(DLOG_INFO, "NativeTCT", "[%s:%d] Application Package is now Terminating", __FUNCTION__, __LINE__);
+}
+
+int main(int argc, char *argv[])
+{
+       int ret = 0;
+       appdata_s ad = {0,};
+
+       ui_app_lifecycle_callback_s event_callback = {0,};
+       event_callback.create = app_create;
+       event_callback.terminate = app_terminate;
+       event_callback.app_control = app_control;
+
+       //setting gcda file location for coverage
+       setenv("GCOV_PREFIX","/tmp",1);
+       dlog_print(DLOG_INFO, "NativeTCT", "[%s:%d] Coverage *.gcda File location set to /tmp/home/abuild/rpmbuild/BUILD/ ", __FUNCTION__, __LINE__);
+
+       dlog_print(DLOG_INFO, "NativeTCT", "[%s:%d] Application Main Function is Invoked", __FUNCTION__, __LINE__);
+       ret = ui_app_main(argc, argv, &event_callback, &ad);
+       if (ret != APP_ERROR_NONE)
+       {
+               dlog_print(DLOG_ERROR, "NativeTCT", "Application ui_app_main call gets failed. err = %d", ret);
+               PRINT_UTC_LOG("\\n[%s][Line : %d]Application ui_app_main call gets failed. err = %d\\n", __FILE__, __LINE__, ret);
+               PRINT_TC_RESULT("%d",1);
+               return ret;
+       }
+
+       dlog_print(DLOG_INFO, "NativeTCT", "[%s:%d] Application Package is Terminated", __FUNCTION__, __LINE__);
+       return ret;
+}
diff --git a/src/utc/zigbee/tct-zigbee-core_mobile.h b/src/utc/zigbee/tct-zigbee-core_mobile.h
new file mode 100644 (file)
index 0000000..0ddfb5b
--- /dev/null
@@ -0,0 +1,539 @@
+//
+// Copyright (c) 2014 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+#ifndef __TCT_ZIGBEE_NATIVE_H__
+#define __TCT_ZIGBEE_NATIVE_H__
+
+#include "testcase.h"
+#include "tct_common.h"
+#include "utc-zigbee.h"
+
+extern void utc_startup(void);
+extern void utc_cleanup(void);
+extern void utc_zdo_simple_desc_startup(void);
+extern void utc_zdo_simple_desc_cleanup(void);
+extern void utc_zdo_power_desc_startup(void);
+extern void utc_zdo_power_desc_cleanup(void);
+extern void utc_zdo_node_desc_startup(void);
+extern void utc_zdo_node_desc_cleanup(void);
+extern void utc_zdo_getter_startup(void);
+extern void utc_zdo_getter_cleanup(void);
+
+/* Zigbee APIs */
+extern int utc_zb_create_p(void);
+extern int utc_zb_create_n(void);
+extern int utc_zb_destroy_p(void);
+extern int utc_zb_destroy_n(void);
+extern int utc_zb_ev_get_enable_status_n(void);
+extern int utc_zb_ev_get_form_network_panid_n(void);
+extern int utc_zb_ev_get_join_count_n(void);
+extern int utc_zb_ev_get_join_ep_n(void);
+extern int utc_zb_ev_get_child_left_status_n(void);
+extern int utc_zb_ev_get_global_default_rsp_ep_n(void);
+extern int utc_zb_ev_get_global_default_rsp_cluster_id_n(void);
+extern int utc_zb_ev_get_global_default_rsp_command_id_n(void);
+extern int utc_zb_ev_get_global_default_rsp_status_n(void);
+extern int utc_zb_ev_get_enroll_request_src_ep_n(void);
+extern int utc_zb_ev_get_enroll_request_zone_type_n(void);
+extern int utc_zb_ev_get_enroll_request_mfg_code_n(void);
+extern int utc_zb_ev_get_ias_noti_src_ep_n(void);
+extern int utc_zb_ev_get_ias_noti_zone_status_n(void);
+extern int utc_zb_ev_get_ias_ext_noti_src_ep_n(void);
+extern int utc_zb_ev_get_ias_ext_noti_status_n(void);
+extern int utc_zb_ev_get_ias_ext_noti_zone_status_n(void);
+extern int utc_zb_ev_get_ias_ext_noti_delay_n(void);
+extern int utc_zb_ev_get_ias_ext_noti_zone_id_n(void);
+extern int utc_zb_set_event_cb_p(void);
+extern int utc_zb_set_event_cb_n(void);
+extern int utc_zb_form_network_p(void);
+extern int utc_zb_form_network_n(void);
+extern int utc_zb_disable_network_p(void);
+extern int utc_zb_disable_network_n(void);
+extern int utc_zb_leave_device_p(void);
+extern int utc_zb_leave_device_n(void);
+extern int utc_zb_permit_join_p(void);
+extern int utc_zb_permit_join_n(void);
+extern int utc_zb_get_controller_mac_address_p(void);
+extern int utc_zb_get_controller_mac_address_n(void);
+extern int utc_zb_get_network_info_p(void);
+extern int utc_zb_get_network_info_n(void);
+
+extern int utc_zb_end_dev_get_ep_list_p(void);
+extern int utc_zb_end_dev_get_ep_list_n(void);
+extern int utc_zb_end_dev_get_cluster_list_p(void);
+extern int utc_zb_end_dev_get_cluster_list_n(void);
+extern int utc_zb_end_dev_get_end_dev_info_list_p(void);
+extern int utc_zb_end_dev_get_end_dev_info_list_n1(void);
+extern int utc_zb_end_dev_get_end_dev_info_list_n2(void);
+extern int utc_zb_end_dev_info_create_p(void);
+extern int utc_zb_end_dev_info_create_n(void);
+extern int utc_zb_end_dev_info_clone_p(void);
+extern int utc_zb_end_dev_info_clone_n(void);
+extern int utc_zb_end_dev_info_destroy_p(void);
+extern int utc_zb_end_dev_info_destroy_n(void);
+extern int utc_zb_end_dev_info_list_free_p(void);
+extern int utc_zb_end_dev_info_list_free_n(void);
+extern int utc_zb_end_dev_info_get_network_address_n(void);
+extern int utc_zb_end_dev_info_get_ieee_address_n(void);
+extern int utc_zb_end_dev_info_get_num_of_ep_n(void);
+extern int utc_zb_end_dev_info_get_ep_list_n(void);
+extern int utc_zb_end_dev_info_get_mac_capability_n(void);
+extern int utc_zb_end_dev_info_get_alternative_pan_coordinator_n(void);
+extern int utc_zb_end_dev_info_get_device_id_n(void);
+extern int utc_zb_end_dev_info_get_profile_id_n(void);
+extern int utc_zb_end_dev_info_get_power_source_n(void);
+extern int utc_zb_end_dev_info_get_security_capabilty_n(void);
+
+/* Zigbee ZDO */
+
+#ifdef SUPPORT_SIMPLE_DESCRIPTION
+extern int utc_zb_simple_desc_create_p(void);
+extern int utc_zb_simple_desc_create_n(void);
+extern int utc_zb_simple_desc_destroy_p(void);
+extern int utc_zb_simple_desc_destroy_n(void);
+extern int utc_zb_simple_desc_clone_p(void);
+extern int utc_zb_simple_desc_clone_n(void);
+extern int utc_zb_simple_desc_get_ep_p(void);
+extern int utc_zb_simple_desc_get_ep_n(void);
+extern int utc_zb_simple_desc_set_ep_p(void);
+extern int utc_zb_simple_desc_set_ep_n(void);
+extern int utc_zb_simple_desc_get_profile_id_p(void);
+extern int utc_zb_simple_desc_get_profile_id_n(void);
+extern int utc_zb_simple_desc_set_profile_id_p(void);
+extern int utc_zb_simple_desc_set_profile_id_n(void);
+extern int utc_zb_simple_desc_get_device_id_p(void);
+extern int utc_zb_simple_desc_get_device_id_n(void);
+extern int utc_zb_simple_desc_set_device_id_p(void);
+extern int utc_zb_simple_desc_set_device_id_n(void);
+extern int utc_zb_simple_desc_get_device_ver_p(void);
+extern int utc_zb_simple_desc_get_device_ver_n(void);
+extern int utc_zb_simple_desc_set_device_ver_p(void);
+extern int utc_zb_simple_desc_set_device_ver_n(void);
+extern int utc_zb_simple_desc_get_num_of_in_clusters_p(void);
+extern int utc_zb_simple_desc_get_num_of_in_clusters_n(void);
+extern int utc_zb_simple_desc_set_num_of_in_clusters_p(void);
+extern int utc_zb_simple_desc_set_num_of_in_clusters_n(void);
+extern int utc_zb_simple_desc_get_num_of_out_clusters_p(void);
+extern int utc_zb_simple_desc_get_num_of_out_clusters_n(void);
+extern int utc_zb_simple_desc_set_num_of_out_clusters_p(void);
+extern int utc_zb_simple_desc_set_num_of_out_clusters_n(void);
+extern int utc_zb_simple_desc_get_in_clusters_p(void);
+extern int utc_zb_simple_desc_get_in_clusters_n(void);
+extern int utc_zb_simple_desc_set_in_clusters_p(void);
+extern int utc_zb_simple_desc_set_in_clusters_n(void);
+extern int utc_zb_simple_desc_get_out_clusters_p(void);
+extern int utc_zb_simple_desc_get_out_clusters_n(void);
+extern int utc_zb_simple_desc_set_out_clusters_p(void);
+extern int utc_zb_simple_desc_set_out_clusters_n(void);
+#endif /* SUPPORT_SIMPLE_DESCRIPTION */
+
+#ifdef SUPPORT_ZDO_DEVICE_DISCOVERY_MANAGER
+/* Zigbee ZDO Device Discovery */
+extern int utc_zb_zdo_nwk_addr_req_p(void);
+extern int utc_zb_zdo_nwk_addr_req_n(void);
+extern int utc_zb_zdo_ieee_addr_req_p(void);
+extern int utc_zb_zdo_ieee_addr_req_n(void);
+extern int utc_zb_zdo_active_ep_p(void);
+extern int utc_zb_zdo_active_ep_n(void);
+extern int utc_zb_zdo_simple_desc_req_p(void);
+extern int utc_zb_zdo_simple_desc_req_n(void);
+#endif /* SUPPORT_ZDO_DEVICE_DISCOVERY_MANAGER */
+
+#ifdef SUPPORT_ZCL_GLOBAL_COMMNAD_CLUSTER
+/* Global Command */
+extern int utc_zb_zcl_global_attr_read_p(void);
+extern int utc_zb_zcl_global_attr_read_n(void);
+extern int utc_zb_zcl_global_attr_write_p(void);
+extern int utc_zb_zcl_global_attr_write_n(void);
+extern int utc_zb_zcl_global_attr_write_undivided_p(void);
+extern int utc_zb_zcl_global_attr_write_undivided_n(void);
+extern int utc_zb_zcl_global_attr_write_no_rsp_p(void);
+extern int utc_zb_zcl_global_attr_write_no_rsp_n(void);
+extern int utc_zb_zcl_global_config_report_write_p(void);
+extern int utc_zb_zcl_global_config_report_write_n(void);
+extern int utc_zb_zcl_global_config_report_read_p(void);
+extern int utc_zb_zcl_global_config_report_read_n(void);
+extern int utc_zb_zcl_global_config_report_read_n(void);
+#endif /* SUPPORT_ZCL_GLOBAL_COMMNAD_CLUSTER */
+
+#ifdef SUPPORT_ZCL_READ_ATTRIBUTE_STATUS_RECORD
+extern int utc_zb_read_attr_status_record_create_p(void);
+extern int utc_zb_read_attr_status_record_create_n(void);
+extern int utc_zb_read_attr_status_record_clone_p(void);
+extern int utc_zb_read_attr_status_record_clone_n(void);
+extern int utc_zb_read_attr_status_record_destroy_p(void);
+extern int utc_zb_read_attr_status_record_destroy_n(void);
+extern int utc_zb_read_attr_status_record_set_id_p(void);
+extern int utc_zb_read_attr_status_record_set_id_n(void);
+extern int utc_zb_read_attr_status_record_get_id_p(void);
+extern int utc_zb_read_attr_status_record_get_id_n(void);
+extern int utc_zb_read_attr_status_record_set_status_p(void);
+extern int utc_zb_read_attr_status_record_set_status_n(void);
+extern int utc_zb_read_attr_status_record_get_status_p(void);
+extern int utc_zb_read_attr_status_record_get_status_n(void);
+extern int utc_zb_read_attr_status_record_set_type_p(void);
+extern int utc_zb_read_attr_status_record_set_type_n(void);
+extern int utc_zb_read_attr_status_record_get_type_p(void);
+extern int utc_zb_read_attr_status_record_get_type_n(void);
+extern int utc_zb_read_attr_status_record_set_value_p(void);
+extern int utc_zb_read_attr_status_record_set_value_n(void);
+extern int utc_zb_read_attr_status_record_get_value_p(void);
+extern int utc_zb_read_attr_status_record_get_value_n(void);
+#endif /* SUPPORT_ZCL_READ_ATTRIBUTE_STATUS_RECORD */
+
+#ifdef SUPPORT_ZCL_WRITE_ATTRIBUTE_STATUS
+extern int utc_zb_write_attr_record_create_p(void);
+extern int utc_zb_write_attr_record_create_n(void);
+extern int utc_zb_write_attr_record_destroy_p(void);
+extern int utc_zb_write_attr_record_destroy_n(void);
+extern int utc_zb_write_attr_record_set_id_p(void);
+extern int utc_zb_write_attr_record_set_id_n(void);
+extern int utc_zb_write_attr_record_set_value_p(void);
+extern int utc_zb_write_attr_record_set_value_n(void);
+extern int utc_zb_write_attr_status_create_p(void);
+extern int utc_zb_write_attr_status_create_n(void);
+extern int utc_zb_write_attr_status_destroy_p(void);
+extern int utc_zb_write_attr_status_destroy_n(void);
+extern int utc_zb_write_attr_status_set_status_p(void);
+extern int utc_zb_write_attr_status_set_status_n(void);
+extern int utc_zb_write_attr_status_get_status_p(void);
+extern int utc_zb_write_attr_status_get_status_n(void);
+extern int utc_zb_write_attr_status_set_id_p(void);
+extern int utc_zb_write_attr_status_set_id_n(void);
+extern int utc_zb_write_attr_status_get_id_p(void);
+extern int utc_zb_write_attr_status_get_id_n(void);
+#endif /* SUPPORT_ZCL_WRITE_ATTRIBUTE_STATUS */
+
+#ifdef SUPPORT_ZCL_REPORT_CONFIG_REPORT
+extern int utc_zb_report_config_record_create_p(void);
+extern int utc_zb_report_config_record_create_n(void);
+extern int utc_zb_report_config_record_clone_p(void);
+extern int utc_zb_report_config_record_clone_n(void);
+extern int utc_zb_report_config_record_destroy_p(void);
+extern int utc_zb_report_config_record_destroy_n(void);
+extern int utc_zb_report_config_record_set_dir_p(void);
+extern int utc_zb_report_config_record_set_dir_n(void);
+extern int utc_zb_report_config_record_get_dir_p(void);
+extern int utc_zb_report_config_record_get_dir_n(void);
+extern int utc_zb_report_config_record_set_id_p(void);
+extern int utc_zb_report_config_record_set_id_n(void);
+extern int utc_zb_report_config_record_get_id_p(void);
+extern int utc_zb_report_config_record_get_id_n(void);
+extern int utc_zb_report_config_record_set_min_interval_p(void);
+extern int utc_zb_report_config_record_set_min_interval_n(void);
+extern int utc_zb_report_config_record_get_min_interval_p(void);
+extern int utc_zb_report_config_record_get_min_interval_n(void);
+extern int utc_zb_report_config_record_set_max_interval_p(void);
+extern int utc_zb_report_config_record_set_max_interval_n(void);
+extern int utc_zb_report_config_record_get_max_interval_p(void);
+extern int utc_zb_report_config_record_get_max_interval_n(void);
+extern int utc_zb_report_config_record_set_timeout_p(void);
+extern int utc_zb_report_config_record_set_timeout_n(void);
+extern int utc_zb_report_config_record_get_timeout_p(void);
+extern int utc_zb_report_config_record_get_timeout_n(void);
+extern int utc_zb_report_config_record_set_change_p(void);
+extern int utc_zb_report_config_record_set_change_n(void);
+extern int utc_zb_report_config_record_get_change_p(void);
+extern int utc_zb_report_config_record_get_change_n(void);
+#endif /* SUPPORT_ZCL_REPORT_CONFIG_REPORT */
+
+#ifdef SUPPORT_ZCL_READ_REPORT_CONFIG_RECORD
+extern int utc_zb_read_report_config_record_create_p(void);
+extern int utc_zb_read_report_config_record_create_n(void);
+extern int utc_zb_read_report_config_record_destroy_p(void);
+extern int utc_zb_read_report_config_record_destroy_n(void);
+extern int utc_zb_read_report_config_record_set_dir_p(void);
+extern int utc_zb_read_report_config_record_set_dir_n(void);
+extern int utc_zb_read_report_config_record_set_id_p(void);
+extern int utc_zb_read_report_config_record_set_id_n(void);
+#endif /* SUPPORT_ZCL_READ_REPORT_CONFIG_RECORD */
+
+#ifdef SUPPORT_ZCL_REPORT_CONFIG_RESPONSE_RECORD
+extern int utc_zb_report_config_response_record_clone_n(void);
+extern int utc_zb_report_config_response_record_destroy_n(void);
+extern int utc_zb_report_config_response_record_get_status_n(void);
+extern int utc_zb_report_config_response_record_get_dir_n(void);
+extern int utc_zb_report_config_response_record_get_id_n(void);
+#endif /* SUPPORT_ZCL_REPORT_CONFIG_RESPONSE_RECORD */
+
+#ifdef SUPPORT_ZCL_IAS_ZONE_CLUSTER
+/* IAS Zone Cluster */
+extern int utc_zb_zcl_zone_enroll_response_p(void);
+extern int utc_zb_zcl_zone_enroll_response_n(void);
+#endif /* SUPPORT_ZCL_IAS_ZONE_CLUSTER */
+
+#ifdef SUPPORT_ZCL_ON_OFF_CLUSTER
+/* On/Off Cluster */
+extern int utc_zb_zcl_on_off_control_p(void);
+extern int utc_zb_zcl_on_off_control_n(void);
+#endif /* SUPPORT_ZCL_ON_OFF_CLUSTER */
+
+testcase tc_array[] = {
+       /* Zigbee APIs */
+       {"utc_zb_create_p", utc_zb_create_p, utc_startup, utc_cleanup},
+       {"utc_zb_create_n", utc_zb_create_n, utc_startup, utc_cleanup},
+       {"utc_zb_destroy_p", utc_zb_destroy_p, utc_startup, utc_cleanup},
+       {"utc_zb_destroy_n", utc_zb_destroy_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_enable_status_n",  utc_zb_ev_get_enable_status_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_form_network_panid_n", utc_zb_ev_get_form_network_panid_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_join_count_n", utc_zb_ev_get_join_count_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_join_ep_n", utc_zb_ev_get_join_ep_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_child_left_status_n", utc_zb_ev_get_child_left_status_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_global_default_rsp_ep_n", utc_zb_ev_get_global_default_rsp_ep_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_global_default_rsp_cluster_id_n", utc_zb_ev_get_global_default_rsp_cluster_id_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_global_default_rsp_command_id_n", utc_zb_ev_get_global_default_rsp_command_id_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_global_default_rsp_status_n", utc_zb_ev_get_global_default_rsp_status_n, utc_startup, utc_cleanup},
+
+       {"utc_zb_ev_get_enroll_request_src_ep_n", utc_zb_ev_get_enroll_request_src_ep_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_enroll_request_zone_type_n", utc_zb_ev_get_enroll_request_zone_type_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_enroll_request_mfg_code_n", utc_zb_ev_get_enroll_request_mfg_code_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_ias_noti_src_ep_n", utc_zb_ev_get_ias_noti_src_ep_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_ias_noti_zone_status_n", utc_zb_ev_get_ias_noti_zone_status_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_ias_ext_noti_src_ep_n", utc_zb_ev_get_ias_ext_noti_src_ep_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_ias_ext_noti_status_n", utc_zb_ev_get_ias_ext_noti_status_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_ias_ext_noti_zone_status_n", utc_zb_ev_get_ias_ext_noti_zone_status_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_ias_ext_noti_delay_n", utc_zb_ev_get_ias_ext_noti_delay_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_ias_ext_noti_zone_id_n", utc_zb_ev_get_ias_ext_noti_zone_id_n, utc_startup, utc_cleanup},
+       {"utc_zb_set_event_cb_p", utc_zb_set_event_cb_p, utc_startup, utc_cleanup},
+       {"utc_zb_set_event_cb_n", utc_zb_set_event_cb_n, utc_startup, utc_cleanup},
+       {"utc_zb_form_network_p", utc_zb_form_network_p, utc_startup, utc_cleanup},
+       {"utc_zb_form_network_n", utc_zb_form_network_n, utc_startup, utc_cleanup},
+       {"utc_zb_disable_network_p", utc_zb_disable_network_p, utc_startup, utc_cleanup},
+       {"utc_zb_disable_network_n", utc_zb_disable_network_n, utc_startup, utc_cleanup},
+       {"utc_zb_leave_device_p", utc_zb_leave_device_p, utc_startup, utc_cleanup},
+       {"utc_zb_leave_device_n", utc_zb_leave_device_n, utc_startup, utc_cleanup},
+       {"utc_zb_permit_join_p", utc_zb_permit_join_p, utc_startup, utc_cleanup},
+       {"utc_zb_permit_join_n", utc_zb_permit_join_n, utc_startup, utc_cleanup},
+       {"utc_zb_get_controller_mac_address_p", utc_zb_get_controller_mac_address_p, utc_startup, utc_cleanup},
+       {"utc_zb_get_controller_mac_address_n", utc_zb_get_controller_mac_address_n, utc_startup, utc_cleanup},
+       {"utc_zb_get_network_info_p", utc_zb_get_network_info_p, utc_startup, utc_cleanup},
+       {"utc_zb_get_network_info_n", utc_zb_get_network_info_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_get_ep_list_p", utc_zb_end_dev_get_ep_list_p, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_get_ep_list_n", utc_zb_end_dev_get_ep_list_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_get_cluster_list_p", utc_zb_end_dev_get_cluster_list_p, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_get_cluster_list_n", utc_zb_end_dev_get_cluster_list_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_get_end_dev_info_list_p", utc_zb_end_dev_get_end_dev_info_list_p, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_get_end_dev_info_list_n1", utc_zb_end_dev_get_end_dev_info_list_n1, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_get_end_dev_info_list_n2", utc_zb_end_dev_get_end_dev_info_list_n2, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_list_free_p", utc_zb_end_dev_info_list_free_p, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_list_free_n", utc_zb_end_dev_info_list_free_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_create_p", utc_zb_end_dev_info_create_p, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_create_n", utc_zb_end_dev_info_create_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_clone_p", utc_zb_end_dev_info_clone_p, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_clone_n", utc_zb_end_dev_info_clone_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_destroy_p", utc_zb_end_dev_info_destroy_p, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_destroy_n", utc_zb_end_dev_info_destroy_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_get_network_address_n", utc_zb_end_dev_info_get_network_address_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_get_ieee_address_n", utc_zb_end_dev_info_get_ieee_address_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_get_num_of_ep_n", utc_zb_end_dev_info_get_num_of_ep_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_get_ep_list_n", utc_zb_end_dev_info_get_ep_list_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_get_mac_capability_n", utc_zb_end_dev_info_get_mac_capability_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_get_alternative_pan_coordinator_n", utc_zb_end_dev_info_get_alternative_pan_coordinator_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_get_device_id_n", utc_zb_end_dev_info_get_device_id_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_get_profile_id_n", utc_zb_end_dev_info_get_profile_id_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_get_power_source_n", utc_zb_end_dev_info_get_power_source_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_get_security_capabilty_n", utc_zb_end_dev_info_get_security_capabilty_n, utc_startup, utc_cleanup},
+
+#ifdef SUPPORT_SIMPLE_DESCRIPTION
+       /* Zigbee ZDO - Simple Descripter Getter/Setter */
+       {"utc_zb_simple_desc_create_p", utc_zb_simple_desc_create_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_create_n", utc_zb_simple_desc_create_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_destroy_p", utc_zb_simple_desc_destroy_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_destroy_n", utc_zb_simple_desc_destroy_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_clone_p", utc_zb_simple_desc_clone_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_clone_n", utc_zb_simple_desc_clone_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_ep_p", utc_zb_simple_desc_get_ep_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_ep_n", utc_zb_simple_desc_get_ep_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_ep_p", utc_zb_simple_desc_set_ep_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_ep_n", utc_zb_simple_desc_set_ep_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_profile_id_p", utc_zb_simple_desc_get_profile_id_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_profile_id_n", utc_zb_simple_desc_get_profile_id_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_profile_id_p", utc_zb_simple_desc_set_profile_id_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_profile_id_n", utc_zb_simple_desc_set_profile_id_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_device_id_p", utc_zb_simple_desc_get_device_id_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_device_id_n", utc_zb_simple_desc_get_device_id_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_device_id_p", utc_zb_simple_desc_set_device_id_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_device_id_n", utc_zb_simple_desc_set_device_id_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_device_ver_p", utc_zb_simple_desc_get_device_ver_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_device_ver_n", utc_zb_simple_desc_get_device_ver_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_device_ver_p", utc_zb_simple_desc_set_device_ver_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_device_ver_n", utc_zb_simple_desc_set_device_ver_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_num_of_in_clusters_p", utc_zb_simple_desc_get_num_of_in_clusters_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_num_of_in_clusters_n", utc_zb_simple_desc_get_num_of_in_clusters_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_num_of_in_clusters_p", utc_zb_simple_desc_set_num_of_in_clusters_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_num_of_in_clusters_n", utc_zb_simple_desc_set_num_of_in_clusters_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_num_of_out_clusters_p", utc_zb_simple_desc_get_num_of_out_clusters_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_num_of_out_clusters_n", utc_zb_simple_desc_get_num_of_out_clusters_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_num_of_out_clusters_p", utc_zb_simple_desc_set_num_of_out_clusters_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_num_of_out_clusters_n", utc_zb_simple_desc_set_num_of_out_clusters_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_in_clusters_p", utc_zb_simple_desc_get_in_clusters_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_in_clusters_n", utc_zb_simple_desc_get_in_clusters_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_in_clusters_p", utc_zb_simple_desc_set_in_clusters_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_in_clusters_n", utc_zb_simple_desc_set_in_clusters_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_out_clusters_p", utc_zb_simple_desc_get_out_clusters_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_out_clusters_n", utc_zb_simple_desc_get_out_clusters_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_out_clusters_p", utc_zb_simple_desc_set_out_clusters_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_out_clusters_n", utc_zb_simple_desc_set_out_clusters_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+#endif /* SUPPORT_SIMPLE_DESCRIPTION*/
+
+#ifdef SUPPORT_ZDO_DEVICE_DISCOVERY_MANAGER
+       /* Zigbee ZDO - Device Discovery */
+       {"utc_zb_zdo_nwk_addr_req_p", utc_zb_zdo_nwk_addr_req_p, utc_startup, utc_startup},
+       {"utc_zb_zdo_nwk_addr_req_n", utc_zb_zdo_nwk_addr_req_n, utc_startup, utc_startup},
+       {"utc_zb_zdo_ieee_addr_req_p", utc_zb_zdo_ieee_addr_req_p, utc_startup, utc_startup},
+       {"utc_zb_zdo_ieee_addr_req_n", utc_zb_zdo_ieee_addr_req_n, utc_startup, utc_startup},
+       {"utc_zb_zdo_active_ep_p", utc_zb_zdo_active_ep_p, utc_startup, utc_startup},
+       {"utc_zb_zdo_active_ep_n", utc_zb_zdo_active_ep_n, utc_startup, utc_startup},
+       {"utc_zb_zdo_simple_desc_req_p", utc_zb_zdo_simple_desc_req_p, utc_startup, utc_startup},
+       {"utc_zb_zdo_simple_desc_req_n", utc_zb_zdo_simple_desc_req_n, utc_startup, utc_startup},
+#endif /* SUPPORT_ZDO_DEVICE_DISCOVERY_MANAGER */
+
+#if defined(SUPPORT_ZCL_GLOBAL_COMMNAD_CLUSTER)
+       /* Zigbee ZCL - Global Cluster */
+       {"utc_zb_zcl_global_attr_read_p", utc_zb_zcl_global_attr_read_p, utc_startup, utc_startup},
+       {"utc_zb_zcl_global_attr_read_n", utc_zb_zcl_global_attr_read_n, utc_startup, utc_startup},
+       {"utc_zb_zcl_global_attr_write_p", utc_zb_zcl_global_attr_write_p, utc_startup, utc_startup},
+       {"utc_zb_zcl_global_attr_write_n", utc_zb_zcl_global_attr_write_n, utc_startup, utc_startup},
+       {"utc_zb_zcl_global_attr_write_undivided_p", utc_zb_zcl_global_attr_write_undivided_p, utc_startup, utc_startup},
+       {"utc_zb_zcl_global_attr_write_undivided_n", utc_zb_zcl_global_attr_write_undivided_n, utc_startup, utc_startup},
+       {"utc_zb_zcl_global_attr_write_no_rsp_p", utc_zb_zcl_global_attr_write_no_rsp_p, utc_startup, utc_startup},
+       {"utc_zb_zcl_global_attr_write_no_rsp_n", utc_zb_zcl_global_attr_write_no_rsp_n, utc_startup, utc_startup},
+       {"utc_zb_zcl_global_config_report_write_p", utc_zb_zcl_global_config_report_write_p, utc_startup, utc_startup},
+       {"utc_zb_zcl_global_config_report_write_n", utc_zb_zcl_global_config_report_write_n, utc_startup, utc_startup},
+       {"utc_zb_zcl_global_config_report_read_p", utc_zb_zcl_global_config_report_write_n, utc_startup, utc_startup},
+       {"utc_zb_zcl_global_config_report_read_n", utc_zb_zcl_global_config_report_read_n, utc_startup, utc_startup},
+#endif /* SUPPORT_ZCL_GLOBAL_COMMAND_CLUSTER */
+
+#ifdef SUPPORT_ZCL_IAS_ZONE_CLUSTER
+       /* Zigbee ZCL - IAS Zone Cluster */
+       {"utc_zb_zcl_zone_enroll_response_p", utc_zb_zcl_zone_enroll_response_p, utc_startup, utc_startup},
+       {"utc_zb_zcl_zone_enroll_response_n", utc_zb_zcl_zone_enroll_response_p, utc_startup, utc_startup},
+#endif /* SUPPORT_ZCL_IAS_ZONE_CLUSTER */
+
+#ifdef SUPPORT_ZCL_ON_OFF_CLUSTER
+       /* Zigbee ZCL - On/Off Cluster */
+       {"utc_zb_zcl_on_off_control_p", utc_zb_zcl_on_off_control_p, utc_startup, utc_startup},
+       {"utc_zb_zcl_on_off_control_n", utc_zb_zcl_on_off_control_n, utc_startup, utc_startup},
+#endif /* SUPPORT_ZCL_ON_OFF_CLUSTER */
+
+#ifdef SUPPORT_ZCL_READ_ATTRIBUTE_STATUS_RECORD
+       /* Zigbee ZCL - Read Attribute Status Record Getter/Setter */
+       {"utc_zb_read_attr_status_record_create_p", utc_zb_read_attr_status_record_create_p, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_create_n", utc_zb_read_attr_status_record_create_n, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_clone_p", utc_zb_read_attr_status_record_clone_p, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_clone_n", utc_zb_read_attr_status_record_clone_n, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_destroy_p", utc_zb_read_attr_status_record_destroy_p, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_destroy_n", utc_zb_read_attr_status_record_destroy_n, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_set_id_p", utc_zb_read_attr_status_record_set_id_p, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_set_id_n", utc_zb_read_attr_status_record_set_id_n, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_get_id_p", utc_zb_read_attr_status_record_get_id_p, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_get_id_n", utc_zb_read_attr_status_record_get_id_n, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_set_status_p", utc_zb_read_attr_status_record_set_status_p, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_set_status_n", utc_zb_read_attr_status_record_set_status_n, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_get_status_p", utc_zb_read_attr_status_record_get_status_p, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_get_status_n", utc_zb_read_attr_status_record_get_status_n, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_set_type_p", utc_zb_read_attr_status_record_get_status_p, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_set_type_n", utc_zb_read_attr_status_record_set_type_n, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_get_type_p", utc_zb_read_attr_status_record_get_type_p, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_get_type_n", utc_zb_read_attr_status_record_get_type_n, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_set_value_p", utc_zb_read_attr_status_record_set_value_p, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_set_value_n", utc_zb_read_attr_status_record_set_value_n, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_get_value_p", utc_zb_read_attr_status_record_get_value_p, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_get_value_n", utc_zb_read_attr_status_record_get_value_n, utc_startup, utc_startup},
+#endif /* SUPPORT_ZCL_READ_ATTRIBUTE_STATUS_RECORD */
+
+#ifdef SUPPORT_ZCL_WRITE_ATTRIBUTE_STATUS
+       /* Zigbee ZCL - Write Attribute Status Record Getter/Setter */
+       {"utc_zb_write_attr_record_create_p", utc_zb_write_attr_record_create_p, utc_startup, utc_startup},
+       {"utc_zb_write_attr_record_create_n", utc_zb_write_attr_record_create_n, utc_startup, utc_startup},
+       {"utc_zb_write_attr_record_destroy_p", utc_zb_write_attr_record_destroy_p, utc_startup, utc_startup},
+       {"utc_zb_write_attr_record_destroy_n", utc_zb_write_attr_record_destroy_n, utc_startup, utc_startup},
+       {"utc_zb_write_attr_record_set_id_p", utc_zb_write_attr_record_set_id_p, utc_startup, utc_startup},
+       {"utc_zb_write_attr_record_set_id_n", utc_zb_write_attr_record_set_id_n, utc_startup, utc_startup},
+       {"utc_zb_write_attr_record_set_value_p", utc_zb_write_attr_record_set_value_p, utc_startup, utc_startup},
+       {"utc_zb_write_attr_record_set_value_n", utc_zb_write_attr_record_set_value_n, utc_startup, utc_startup},
+       {"utc_zb_write_attr_status_create_p", utc_zb_write_attr_status_create_p, utc_startup, utc_startup},
+       {"utc_zb_write_attr_status_create_n", utc_zb_write_attr_status_create_n, utc_startup, utc_startup},
+       {"utc_zb_write_attr_status_destroy_p", utc_zb_write_attr_status_destroy_p, utc_startup, utc_startup},
+       {"utc_zb_write_attr_status_destroy_n", utc_zb_write_attr_status_destroy_n, utc_startup, utc_startup},
+       {"utc_zb_write_attr_status_set_status_p", utc_zb_write_attr_status_set_status_p, utc_startup, utc_startup},
+       {"utc_zb_write_attr_status_set_status_n", utc_zb_write_attr_status_set_status_n, utc_startup, utc_startup},
+       {"utc_zb_write_attr_status_get_status_p", utc_zb_write_attr_status_get_status_p, utc_startup, utc_startup},
+       {"utc_zb_write_attr_status_get_status_n", utc_zb_write_attr_status_get_status_n, utc_startup, utc_startup},
+       {"utc_zb_write_attr_status_set_id_p", utc_zb_write_attr_status_set_id_p, utc_startup, utc_startup},
+       {"utc_zb_write_attr_status_set_id_n", utc_zb_write_attr_status_set_id_n, utc_startup, utc_startup},
+       {"utc_zb_write_attr_status_get_id_p", utc_zb_write_attr_status_get_id_p, utc_startup, utc_startup},
+       {"utc_zb_write_attr_status_get_id_n", utc_zb_write_attr_status_get_id_n, utc_startup, utc_startup},
+#endif /* SUPPORT_ZCL_WRITE_ATTRIBUTE_STATUS */
+
+#ifdef SUPPORT_ZCL_REPORT_CONFIG_REPORT
+       /* Zigbee ZCL - Report Configuration Record Getter/Setter */
+       {"utc_zb_report_config_record_create_p", utc_zb_report_config_record_create_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_create_n", utc_zb_report_config_record_create_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_clone_p", utc_zb_report_config_record_clone_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_clone_n", utc_zb_report_config_record_clone_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_destroy_p", utc_zb_report_config_record_destroy_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_destroy_n", utc_zb_report_config_record_destroy_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_set_dir_p", utc_zb_report_config_record_set_dir_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_set_dir_n", utc_zb_report_config_record_set_dir_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_get_dir_p", utc_zb_report_config_record_get_dir_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_get_dir_n", utc_zb_report_config_record_get_dir_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_set_id_p", utc_zb_report_config_record_set_id_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_set_id_n", utc_zb_report_config_record_set_id_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_get_id_p", utc_zb_report_config_record_get_id_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_get_id_n", utc_zb_report_config_record_get_id_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_set_min_interval_p", utc_zb_report_config_record_set_min_interval_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_set_min_interval_n", utc_zb_report_config_record_set_min_interval_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_get_min_interval_p", utc_zb_report_config_record_get_min_interval_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_get_min_interval_n", utc_zb_report_config_record_get_min_interval_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_set_max_interval_p", utc_zb_report_config_record_set_max_interval_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_set_max_interval_n", utc_zb_report_config_record_set_max_interval_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_get_max_interval_p", utc_zb_report_config_record_get_max_interval_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_get_max_interval_n", utc_zb_report_config_record_get_max_interval_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_set_timeout_p", utc_zb_report_config_record_set_timeout_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_set_timeout_n", utc_zb_report_config_record_set_timeout_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_get_timeout_p", utc_zb_report_config_record_get_timeout_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_get_timeout_n", utc_zb_report_config_record_get_timeout_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_set_change_p", utc_zb_report_config_record_set_change_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_set_change_n", utc_zb_report_config_record_set_change_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_get_change_p", utc_zb_report_config_record_get_change_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_get_change_n", utc_zb_report_config_record_get_change_n, utc_startup, utc_startup},
+#endif /* SUPPORT_ZCL_REPORT_CONFIG_REPORT */
+
+#ifdef SUPPORT_ZCL_READ_REPORT_CONFIG_RECORD
+       /* Zigbee ZCL - Read Report Configuration Record Getter/Setter */
+       {"utc_zb_read_report_config_record_create_p", utc_zb_read_report_config_record_create_p, utc_startup, utc_startup},
+       {"utc_zb_read_report_config_record_create_n", utc_zb_read_report_config_record_create_n, utc_startup, utc_startup},
+       {"utc_zb_read_report_config_record_destroy_p", utc_zb_read_report_config_record_destroy_p, utc_startup, utc_startup},
+       {"utc_zb_read_report_config_record_destroy_n", utc_zb_read_report_config_record_destroy_n, utc_startup, utc_startup},
+       {"utc_zb_read_report_config_record_set_dir_p", utc_zb_read_report_config_record_set_dir_p, utc_startup, utc_startup},
+       {"utc_zb_read_report_config_record_set_dir_n", utc_zb_read_report_config_record_set_dir_n, utc_startup, utc_startup},
+       {"utc_zb_read_report_config_record_set_id_p", utc_zb_read_report_config_record_set_id_p, utc_startup, utc_startup},
+       {"utc_zb_read_report_config_record_set_id_n", utc_zb_read_report_config_record_set_id_n, utc_startup, utc_startup},
+#endif /* SUPPORT_ZCL_READ_REPORT_CONFIG_RECORD */
+
+#ifdef SUPPORT_ZCL_REPORT_CONFIG_RESPONSE_RECORD
+       /* Zigbee ZCL - Report Configuration Response Getter/Setter */
+       {"utc_zb_report_config_response_record_clone_n", utc_zb_report_config_response_record_clone_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_response_record_destroy_n", utc_zb_report_config_response_record_destroy_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_response_record_get_status_n", utc_zb_report_config_response_record_get_status_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_response_record_get_dir_n", utc_zb_report_config_response_record_get_dir_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_response_record_get_id_n", utc_zb_report_config_response_record_get_id_n, utc_startup, utc_startup},
+#endif /* SUPPORT_ZCL_REPORT_CONFIG_RESPONSE_RECORD */
+
+       {NULL, NULL}
+};
+
+#endif // __TCT_ZIGBEE_NATIVE_H__
diff --git a/src/utc/zigbee/tct-zigbee-core_tizeniot.h b/src/utc/zigbee/tct-zigbee-core_tizeniot.h
new file mode 100644 (file)
index 0000000..0ddfb5b
--- /dev/null
@@ -0,0 +1,539 @@
+//
+// Copyright (c) 2014 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+#ifndef __TCT_ZIGBEE_NATIVE_H__
+#define __TCT_ZIGBEE_NATIVE_H__
+
+#include "testcase.h"
+#include "tct_common.h"
+#include "utc-zigbee.h"
+
+extern void utc_startup(void);
+extern void utc_cleanup(void);
+extern void utc_zdo_simple_desc_startup(void);
+extern void utc_zdo_simple_desc_cleanup(void);
+extern void utc_zdo_power_desc_startup(void);
+extern void utc_zdo_power_desc_cleanup(void);
+extern void utc_zdo_node_desc_startup(void);
+extern void utc_zdo_node_desc_cleanup(void);
+extern void utc_zdo_getter_startup(void);
+extern void utc_zdo_getter_cleanup(void);
+
+/* Zigbee APIs */
+extern int utc_zb_create_p(void);
+extern int utc_zb_create_n(void);
+extern int utc_zb_destroy_p(void);
+extern int utc_zb_destroy_n(void);
+extern int utc_zb_ev_get_enable_status_n(void);
+extern int utc_zb_ev_get_form_network_panid_n(void);
+extern int utc_zb_ev_get_join_count_n(void);
+extern int utc_zb_ev_get_join_ep_n(void);
+extern int utc_zb_ev_get_child_left_status_n(void);
+extern int utc_zb_ev_get_global_default_rsp_ep_n(void);
+extern int utc_zb_ev_get_global_default_rsp_cluster_id_n(void);
+extern int utc_zb_ev_get_global_default_rsp_command_id_n(void);
+extern int utc_zb_ev_get_global_default_rsp_status_n(void);
+extern int utc_zb_ev_get_enroll_request_src_ep_n(void);
+extern int utc_zb_ev_get_enroll_request_zone_type_n(void);
+extern int utc_zb_ev_get_enroll_request_mfg_code_n(void);
+extern int utc_zb_ev_get_ias_noti_src_ep_n(void);
+extern int utc_zb_ev_get_ias_noti_zone_status_n(void);
+extern int utc_zb_ev_get_ias_ext_noti_src_ep_n(void);
+extern int utc_zb_ev_get_ias_ext_noti_status_n(void);
+extern int utc_zb_ev_get_ias_ext_noti_zone_status_n(void);
+extern int utc_zb_ev_get_ias_ext_noti_delay_n(void);
+extern int utc_zb_ev_get_ias_ext_noti_zone_id_n(void);
+extern int utc_zb_set_event_cb_p(void);
+extern int utc_zb_set_event_cb_n(void);
+extern int utc_zb_form_network_p(void);
+extern int utc_zb_form_network_n(void);
+extern int utc_zb_disable_network_p(void);
+extern int utc_zb_disable_network_n(void);
+extern int utc_zb_leave_device_p(void);
+extern int utc_zb_leave_device_n(void);
+extern int utc_zb_permit_join_p(void);
+extern int utc_zb_permit_join_n(void);
+extern int utc_zb_get_controller_mac_address_p(void);
+extern int utc_zb_get_controller_mac_address_n(void);
+extern int utc_zb_get_network_info_p(void);
+extern int utc_zb_get_network_info_n(void);
+
+extern int utc_zb_end_dev_get_ep_list_p(void);
+extern int utc_zb_end_dev_get_ep_list_n(void);
+extern int utc_zb_end_dev_get_cluster_list_p(void);
+extern int utc_zb_end_dev_get_cluster_list_n(void);
+extern int utc_zb_end_dev_get_end_dev_info_list_p(void);
+extern int utc_zb_end_dev_get_end_dev_info_list_n1(void);
+extern int utc_zb_end_dev_get_end_dev_info_list_n2(void);
+extern int utc_zb_end_dev_info_create_p(void);
+extern int utc_zb_end_dev_info_create_n(void);
+extern int utc_zb_end_dev_info_clone_p(void);
+extern int utc_zb_end_dev_info_clone_n(void);
+extern int utc_zb_end_dev_info_destroy_p(void);
+extern int utc_zb_end_dev_info_destroy_n(void);
+extern int utc_zb_end_dev_info_list_free_p(void);
+extern int utc_zb_end_dev_info_list_free_n(void);
+extern int utc_zb_end_dev_info_get_network_address_n(void);
+extern int utc_zb_end_dev_info_get_ieee_address_n(void);
+extern int utc_zb_end_dev_info_get_num_of_ep_n(void);
+extern int utc_zb_end_dev_info_get_ep_list_n(void);
+extern int utc_zb_end_dev_info_get_mac_capability_n(void);
+extern int utc_zb_end_dev_info_get_alternative_pan_coordinator_n(void);
+extern int utc_zb_end_dev_info_get_device_id_n(void);
+extern int utc_zb_end_dev_info_get_profile_id_n(void);
+extern int utc_zb_end_dev_info_get_power_source_n(void);
+extern int utc_zb_end_dev_info_get_security_capabilty_n(void);
+
+/* Zigbee ZDO */
+
+#ifdef SUPPORT_SIMPLE_DESCRIPTION
+extern int utc_zb_simple_desc_create_p(void);
+extern int utc_zb_simple_desc_create_n(void);
+extern int utc_zb_simple_desc_destroy_p(void);
+extern int utc_zb_simple_desc_destroy_n(void);
+extern int utc_zb_simple_desc_clone_p(void);
+extern int utc_zb_simple_desc_clone_n(void);
+extern int utc_zb_simple_desc_get_ep_p(void);
+extern int utc_zb_simple_desc_get_ep_n(void);
+extern int utc_zb_simple_desc_set_ep_p(void);
+extern int utc_zb_simple_desc_set_ep_n(void);
+extern int utc_zb_simple_desc_get_profile_id_p(void);
+extern int utc_zb_simple_desc_get_profile_id_n(void);
+extern int utc_zb_simple_desc_set_profile_id_p(void);
+extern int utc_zb_simple_desc_set_profile_id_n(void);
+extern int utc_zb_simple_desc_get_device_id_p(void);
+extern int utc_zb_simple_desc_get_device_id_n(void);
+extern int utc_zb_simple_desc_set_device_id_p(void);
+extern int utc_zb_simple_desc_set_device_id_n(void);
+extern int utc_zb_simple_desc_get_device_ver_p(void);
+extern int utc_zb_simple_desc_get_device_ver_n(void);
+extern int utc_zb_simple_desc_set_device_ver_p(void);
+extern int utc_zb_simple_desc_set_device_ver_n(void);
+extern int utc_zb_simple_desc_get_num_of_in_clusters_p(void);
+extern int utc_zb_simple_desc_get_num_of_in_clusters_n(void);
+extern int utc_zb_simple_desc_set_num_of_in_clusters_p(void);
+extern int utc_zb_simple_desc_set_num_of_in_clusters_n(void);
+extern int utc_zb_simple_desc_get_num_of_out_clusters_p(void);
+extern int utc_zb_simple_desc_get_num_of_out_clusters_n(void);
+extern int utc_zb_simple_desc_set_num_of_out_clusters_p(void);
+extern int utc_zb_simple_desc_set_num_of_out_clusters_n(void);
+extern int utc_zb_simple_desc_get_in_clusters_p(void);
+extern int utc_zb_simple_desc_get_in_clusters_n(void);
+extern int utc_zb_simple_desc_set_in_clusters_p(void);
+extern int utc_zb_simple_desc_set_in_clusters_n(void);
+extern int utc_zb_simple_desc_get_out_clusters_p(void);
+extern int utc_zb_simple_desc_get_out_clusters_n(void);
+extern int utc_zb_simple_desc_set_out_clusters_p(void);
+extern int utc_zb_simple_desc_set_out_clusters_n(void);
+#endif /* SUPPORT_SIMPLE_DESCRIPTION */
+
+#ifdef SUPPORT_ZDO_DEVICE_DISCOVERY_MANAGER
+/* Zigbee ZDO Device Discovery */
+extern int utc_zb_zdo_nwk_addr_req_p(void);
+extern int utc_zb_zdo_nwk_addr_req_n(void);
+extern int utc_zb_zdo_ieee_addr_req_p(void);
+extern int utc_zb_zdo_ieee_addr_req_n(void);
+extern int utc_zb_zdo_active_ep_p(void);
+extern int utc_zb_zdo_active_ep_n(void);
+extern int utc_zb_zdo_simple_desc_req_p(void);
+extern int utc_zb_zdo_simple_desc_req_n(void);
+#endif /* SUPPORT_ZDO_DEVICE_DISCOVERY_MANAGER */
+
+#ifdef SUPPORT_ZCL_GLOBAL_COMMNAD_CLUSTER
+/* Global Command */
+extern int utc_zb_zcl_global_attr_read_p(void);
+extern int utc_zb_zcl_global_attr_read_n(void);
+extern int utc_zb_zcl_global_attr_write_p(void);
+extern int utc_zb_zcl_global_attr_write_n(void);
+extern int utc_zb_zcl_global_attr_write_undivided_p(void);
+extern int utc_zb_zcl_global_attr_write_undivided_n(void);
+extern int utc_zb_zcl_global_attr_write_no_rsp_p(void);
+extern int utc_zb_zcl_global_attr_write_no_rsp_n(void);
+extern int utc_zb_zcl_global_config_report_write_p(void);
+extern int utc_zb_zcl_global_config_report_write_n(void);
+extern int utc_zb_zcl_global_config_report_read_p(void);
+extern int utc_zb_zcl_global_config_report_read_n(void);
+extern int utc_zb_zcl_global_config_report_read_n(void);
+#endif /* SUPPORT_ZCL_GLOBAL_COMMNAD_CLUSTER */
+
+#ifdef SUPPORT_ZCL_READ_ATTRIBUTE_STATUS_RECORD
+extern int utc_zb_read_attr_status_record_create_p(void);
+extern int utc_zb_read_attr_status_record_create_n(void);
+extern int utc_zb_read_attr_status_record_clone_p(void);
+extern int utc_zb_read_attr_status_record_clone_n(void);
+extern int utc_zb_read_attr_status_record_destroy_p(void);
+extern int utc_zb_read_attr_status_record_destroy_n(void);
+extern int utc_zb_read_attr_status_record_set_id_p(void);
+extern int utc_zb_read_attr_status_record_set_id_n(void);
+extern int utc_zb_read_attr_status_record_get_id_p(void);
+extern int utc_zb_read_attr_status_record_get_id_n(void);
+extern int utc_zb_read_attr_status_record_set_status_p(void);
+extern int utc_zb_read_attr_status_record_set_status_n(void);
+extern int utc_zb_read_attr_status_record_get_status_p(void);
+extern int utc_zb_read_attr_status_record_get_status_n(void);
+extern int utc_zb_read_attr_status_record_set_type_p(void);
+extern int utc_zb_read_attr_status_record_set_type_n(void);
+extern int utc_zb_read_attr_status_record_get_type_p(void);
+extern int utc_zb_read_attr_status_record_get_type_n(void);
+extern int utc_zb_read_attr_status_record_set_value_p(void);
+extern int utc_zb_read_attr_status_record_set_value_n(void);
+extern int utc_zb_read_attr_status_record_get_value_p(void);
+extern int utc_zb_read_attr_status_record_get_value_n(void);
+#endif /* SUPPORT_ZCL_READ_ATTRIBUTE_STATUS_RECORD */
+
+#ifdef SUPPORT_ZCL_WRITE_ATTRIBUTE_STATUS
+extern int utc_zb_write_attr_record_create_p(void);
+extern int utc_zb_write_attr_record_create_n(void);
+extern int utc_zb_write_attr_record_destroy_p(void);
+extern int utc_zb_write_attr_record_destroy_n(void);
+extern int utc_zb_write_attr_record_set_id_p(void);
+extern int utc_zb_write_attr_record_set_id_n(void);
+extern int utc_zb_write_attr_record_set_value_p(void);
+extern int utc_zb_write_attr_record_set_value_n(void);
+extern int utc_zb_write_attr_status_create_p(void);
+extern int utc_zb_write_attr_status_create_n(void);
+extern int utc_zb_write_attr_status_destroy_p(void);
+extern int utc_zb_write_attr_status_destroy_n(void);
+extern int utc_zb_write_attr_status_set_status_p(void);
+extern int utc_zb_write_attr_status_set_status_n(void);
+extern int utc_zb_write_attr_status_get_status_p(void);
+extern int utc_zb_write_attr_status_get_status_n(void);
+extern int utc_zb_write_attr_status_set_id_p(void);
+extern int utc_zb_write_attr_status_set_id_n(void);
+extern int utc_zb_write_attr_status_get_id_p(void);
+extern int utc_zb_write_attr_status_get_id_n(void);
+#endif /* SUPPORT_ZCL_WRITE_ATTRIBUTE_STATUS */
+
+#ifdef SUPPORT_ZCL_REPORT_CONFIG_REPORT
+extern int utc_zb_report_config_record_create_p(void);
+extern int utc_zb_report_config_record_create_n(void);
+extern int utc_zb_report_config_record_clone_p(void);
+extern int utc_zb_report_config_record_clone_n(void);
+extern int utc_zb_report_config_record_destroy_p(void);
+extern int utc_zb_report_config_record_destroy_n(void);
+extern int utc_zb_report_config_record_set_dir_p(void);
+extern int utc_zb_report_config_record_set_dir_n(void);
+extern int utc_zb_report_config_record_get_dir_p(void);
+extern int utc_zb_report_config_record_get_dir_n(void);
+extern int utc_zb_report_config_record_set_id_p(void);
+extern int utc_zb_report_config_record_set_id_n(void);
+extern int utc_zb_report_config_record_get_id_p(void);
+extern int utc_zb_report_config_record_get_id_n(void);
+extern int utc_zb_report_config_record_set_min_interval_p(void);
+extern int utc_zb_report_config_record_set_min_interval_n(void);
+extern int utc_zb_report_config_record_get_min_interval_p(void);
+extern int utc_zb_report_config_record_get_min_interval_n(void);
+extern int utc_zb_report_config_record_set_max_interval_p(void);
+extern int utc_zb_report_config_record_set_max_interval_n(void);
+extern int utc_zb_report_config_record_get_max_interval_p(void);
+extern int utc_zb_report_config_record_get_max_interval_n(void);
+extern int utc_zb_report_config_record_set_timeout_p(void);
+extern int utc_zb_report_config_record_set_timeout_n(void);
+extern int utc_zb_report_config_record_get_timeout_p(void);
+extern int utc_zb_report_config_record_get_timeout_n(void);
+extern int utc_zb_report_config_record_set_change_p(void);
+extern int utc_zb_report_config_record_set_change_n(void);
+extern int utc_zb_report_config_record_get_change_p(void);
+extern int utc_zb_report_config_record_get_change_n(void);
+#endif /* SUPPORT_ZCL_REPORT_CONFIG_REPORT */
+
+#ifdef SUPPORT_ZCL_READ_REPORT_CONFIG_RECORD
+extern int utc_zb_read_report_config_record_create_p(void);
+extern int utc_zb_read_report_config_record_create_n(void);
+extern int utc_zb_read_report_config_record_destroy_p(void);
+extern int utc_zb_read_report_config_record_destroy_n(void);
+extern int utc_zb_read_report_config_record_set_dir_p(void);
+extern int utc_zb_read_report_config_record_set_dir_n(void);
+extern int utc_zb_read_report_config_record_set_id_p(void);
+extern int utc_zb_read_report_config_record_set_id_n(void);
+#endif /* SUPPORT_ZCL_READ_REPORT_CONFIG_RECORD */
+
+#ifdef SUPPORT_ZCL_REPORT_CONFIG_RESPONSE_RECORD
+extern int utc_zb_report_config_response_record_clone_n(void);
+extern int utc_zb_report_config_response_record_destroy_n(void);
+extern int utc_zb_report_config_response_record_get_status_n(void);
+extern int utc_zb_report_config_response_record_get_dir_n(void);
+extern int utc_zb_report_config_response_record_get_id_n(void);
+#endif /* SUPPORT_ZCL_REPORT_CONFIG_RESPONSE_RECORD */
+
+#ifdef SUPPORT_ZCL_IAS_ZONE_CLUSTER
+/* IAS Zone Cluster */
+extern int utc_zb_zcl_zone_enroll_response_p(void);
+extern int utc_zb_zcl_zone_enroll_response_n(void);
+#endif /* SUPPORT_ZCL_IAS_ZONE_CLUSTER */
+
+#ifdef SUPPORT_ZCL_ON_OFF_CLUSTER
+/* On/Off Cluster */
+extern int utc_zb_zcl_on_off_control_p(void);
+extern int utc_zb_zcl_on_off_control_n(void);
+#endif /* SUPPORT_ZCL_ON_OFF_CLUSTER */
+
+testcase tc_array[] = {
+       /* Zigbee APIs */
+       {"utc_zb_create_p", utc_zb_create_p, utc_startup, utc_cleanup},
+       {"utc_zb_create_n", utc_zb_create_n, utc_startup, utc_cleanup},
+       {"utc_zb_destroy_p", utc_zb_destroy_p, utc_startup, utc_cleanup},
+       {"utc_zb_destroy_n", utc_zb_destroy_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_enable_status_n",  utc_zb_ev_get_enable_status_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_form_network_panid_n", utc_zb_ev_get_form_network_panid_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_join_count_n", utc_zb_ev_get_join_count_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_join_ep_n", utc_zb_ev_get_join_ep_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_child_left_status_n", utc_zb_ev_get_child_left_status_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_global_default_rsp_ep_n", utc_zb_ev_get_global_default_rsp_ep_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_global_default_rsp_cluster_id_n", utc_zb_ev_get_global_default_rsp_cluster_id_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_global_default_rsp_command_id_n", utc_zb_ev_get_global_default_rsp_command_id_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_global_default_rsp_status_n", utc_zb_ev_get_global_default_rsp_status_n, utc_startup, utc_cleanup},
+
+       {"utc_zb_ev_get_enroll_request_src_ep_n", utc_zb_ev_get_enroll_request_src_ep_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_enroll_request_zone_type_n", utc_zb_ev_get_enroll_request_zone_type_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_enroll_request_mfg_code_n", utc_zb_ev_get_enroll_request_mfg_code_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_ias_noti_src_ep_n", utc_zb_ev_get_ias_noti_src_ep_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_ias_noti_zone_status_n", utc_zb_ev_get_ias_noti_zone_status_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_ias_ext_noti_src_ep_n", utc_zb_ev_get_ias_ext_noti_src_ep_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_ias_ext_noti_status_n", utc_zb_ev_get_ias_ext_noti_status_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_ias_ext_noti_zone_status_n", utc_zb_ev_get_ias_ext_noti_zone_status_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_ias_ext_noti_delay_n", utc_zb_ev_get_ias_ext_noti_delay_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_ias_ext_noti_zone_id_n", utc_zb_ev_get_ias_ext_noti_zone_id_n, utc_startup, utc_cleanup},
+       {"utc_zb_set_event_cb_p", utc_zb_set_event_cb_p, utc_startup, utc_cleanup},
+       {"utc_zb_set_event_cb_n", utc_zb_set_event_cb_n, utc_startup, utc_cleanup},
+       {"utc_zb_form_network_p", utc_zb_form_network_p, utc_startup, utc_cleanup},
+       {"utc_zb_form_network_n", utc_zb_form_network_n, utc_startup, utc_cleanup},
+       {"utc_zb_disable_network_p", utc_zb_disable_network_p, utc_startup, utc_cleanup},
+       {"utc_zb_disable_network_n", utc_zb_disable_network_n, utc_startup, utc_cleanup},
+       {"utc_zb_leave_device_p", utc_zb_leave_device_p, utc_startup, utc_cleanup},
+       {"utc_zb_leave_device_n", utc_zb_leave_device_n, utc_startup, utc_cleanup},
+       {"utc_zb_permit_join_p", utc_zb_permit_join_p, utc_startup, utc_cleanup},
+       {"utc_zb_permit_join_n", utc_zb_permit_join_n, utc_startup, utc_cleanup},
+       {"utc_zb_get_controller_mac_address_p", utc_zb_get_controller_mac_address_p, utc_startup, utc_cleanup},
+       {"utc_zb_get_controller_mac_address_n", utc_zb_get_controller_mac_address_n, utc_startup, utc_cleanup},
+       {"utc_zb_get_network_info_p", utc_zb_get_network_info_p, utc_startup, utc_cleanup},
+       {"utc_zb_get_network_info_n", utc_zb_get_network_info_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_get_ep_list_p", utc_zb_end_dev_get_ep_list_p, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_get_ep_list_n", utc_zb_end_dev_get_ep_list_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_get_cluster_list_p", utc_zb_end_dev_get_cluster_list_p, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_get_cluster_list_n", utc_zb_end_dev_get_cluster_list_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_get_end_dev_info_list_p", utc_zb_end_dev_get_end_dev_info_list_p, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_get_end_dev_info_list_n1", utc_zb_end_dev_get_end_dev_info_list_n1, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_get_end_dev_info_list_n2", utc_zb_end_dev_get_end_dev_info_list_n2, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_list_free_p", utc_zb_end_dev_info_list_free_p, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_list_free_n", utc_zb_end_dev_info_list_free_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_create_p", utc_zb_end_dev_info_create_p, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_create_n", utc_zb_end_dev_info_create_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_clone_p", utc_zb_end_dev_info_clone_p, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_clone_n", utc_zb_end_dev_info_clone_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_destroy_p", utc_zb_end_dev_info_destroy_p, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_destroy_n", utc_zb_end_dev_info_destroy_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_get_network_address_n", utc_zb_end_dev_info_get_network_address_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_get_ieee_address_n", utc_zb_end_dev_info_get_ieee_address_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_get_num_of_ep_n", utc_zb_end_dev_info_get_num_of_ep_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_get_ep_list_n", utc_zb_end_dev_info_get_ep_list_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_get_mac_capability_n", utc_zb_end_dev_info_get_mac_capability_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_get_alternative_pan_coordinator_n", utc_zb_end_dev_info_get_alternative_pan_coordinator_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_get_device_id_n", utc_zb_end_dev_info_get_device_id_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_get_profile_id_n", utc_zb_end_dev_info_get_profile_id_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_get_power_source_n", utc_zb_end_dev_info_get_power_source_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_get_security_capabilty_n", utc_zb_end_dev_info_get_security_capabilty_n, utc_startup, utc_cleanup},
+
+#ifdef SUPPORT_SIMPLE_DESCRIPTION
+       /* Zigbee ZDO - Simple Descripter Getter/Setter */
+       {"utc_zb_simple_desc_create_p", utc_zb_simple_desc_create_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_create_n", utc_zb_simple_desc_create_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_destroy_p", utc_zb_simple_desc_destroy_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_destroy_n", utc_zb_simple_desc_destroy_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_clone_p", utc_zb_simple_desc_clone_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_clone_n", utc_zb_simple_desc_clone_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_ep_p", utc_zb_simple_desc_get_ep_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_ep_n", utc_zb_simple_desc_get_ep_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_ep_p", utc_zb_simple_desc_set_ep_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_ep_n", utc_zb_simple_desc_set_ep_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_profile_id_p", utc_zb_simple_desc_get_profile_id_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_profile_id_n", utc_zb_simple_desc_get_profile_id_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_profile_id_p", utc_zb_simple_desc_set_profile_id_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_profile_id_n", utc_zb_simple_desc_set_profile_id_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_device_id_p", utc_zb_simple_desc_get_device_id_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_device_id_n", utc_zb_simple_desc_get_device_id_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_device_id_p", utc_zb_simple_desc_set_device_id_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_device_id_n", utc_zb_simple_desc_set_device_id_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_device_ver_p", utc_zb_simple_desc_get_device_ver_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_device_ver_n", utc_zb_simple_desc_get_device_ver_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_device_ver_p", utc_zb_simple_desc_set_device_ver_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_device_ver_n", utc_zb_simple_desc_set_device_ver_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_num_of_in_clusters_p", utc_zb_simple_desc_get_num_of_in_clusters_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_num_of_in_clusters_n", utc_zb_simple_desc_get_num_of_in_clusters_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_num_of_in_clusters_p", utc_zb_simple_desc_set_num_of_in_clusters_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_num_of_in_clusters_n", utc_zb_simple_desc_set_num_of_in_clusters_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_num_of_out_clusters_p", utc_zb_simple_desc_get_num_of_out_clusters_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_num_of_out_clusters_n", utc_zb_simple_desc_get_num_of_out_clusters_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_num_of_out_clusters_p", utc_zb_simple_desc_set_num_of_out_clusters_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_num_of_out_clusters_n", utc_zb_simple_desc_set_num_of_out_clusters_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_in_clusters_p", utc_zb_simple_desc_get_in_clusters_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_in_clusters_n", utc_zb_simple_desc_get_in_clusters_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_in_clusters_p", utc_zb_simple_desc_set_in_clusters_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_in_clusters_n", utc_zb_simple_desc_set_in_clusters_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_out_clusters_p", utc_zb_simple_desc_get_out_clusters_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_out_clusters_n", utc_zb_simple_desc_get_out_clusters_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_out_clusters_p", utc_zb_simple_desc_set_out_clusters_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_out_clusters_n", utc_zb_simple_desc_set_out_clusters_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+#endif /* SUPPORT_SIMPLE_DESCRIPTION*/
+
+#ifdef SUPPORT_ZDO_DEVICE_DISCOVERY_MANAGER
+       /* Zigbee ZDO - Device Discovery */
+       {"utc_zb_zdo_nwk_addr_req_p", utc_zb_zdo_nwk_addr_req_p, utc_startup, utc_startup},
+       {"utc_zb_zdo_nwk_addr_req_n", utc_zb_zdo_nwk_addr_req_n, utc_startup, utc_startup},
+       {"utc_zb_zdo_ieee_addr_req_p", utc_zb_zdo_ieee_addr_req_p, utc_startup, utc_startup},
+       {"utc_zb_zdo_ieee_addr_req_n", utc_zb_zdo_ieee_addr_req_n, utc_startup, utc_startup},
+       {"utc_zb_zdo_active_ep_p", utc_zb_zdo_active_ep_p, utc_startup, utc_startup},
+       {"utc_zb_zdo_active_ep_n", utc_zb_zdo_active_ep_n, utc_startup, utc_startup},
+       {"utc_zb_zdo_simple_desc_req_p", utc_zb_zdo_simple_desc_req_p, utc_startup, utc_startup},
+       {"utc_zb_zdo_simple_desc_req_n", utc_zb_zdo_simple_desc_req_n, utc_startup, utc_startup},
+#endif /* SUPPORT_ZDO_DEVICE_DISCOVERY_MANAGER */
+
+#if defined(SUPPORT_ZCL_GLOBAL_COMMNAD_CLUSTER)
+       /* Zigbee ZCL - Global Cluster */
+       {"utc_zb_zcl_global_attr_read_p", utc_zb_zcl_global_attr_read_p, utc_startup, utc_startup},
+       {"utc_zb_zcl_global_attr_read_n", utc_zb_zcl_global_attr_read_n, utc_startup, utc_startup},
+       {"utc_zb_zcl_global_attr_write_p", utc_zb_zcl_global_attr_write_p, utc_startup, utc_startup},
+       {"utc_zb_zcl_global_attr_write_n", utc_zb_zcl_global_attr_write_n, utc_startup, utc_startup},
+       {"utc_zb_zcl_global_attr_write_undivided_p", utc_zb_zcl_global_attr_write_undivided_p, utc_startup, utc_startup},
+       {"utc_zb_zcl_global_attr_write_undivided_n", utc_zb_zcl_global_attr_write_undivided_n, utc_startup, utc_startup},
+       {"utc_zb_zcl_global_attr_write_no_rsp_p", utc_zb_zcl_global_attr_write_no_rsp_p, utc_startup, utc_startup},
+       {"utc_zb_zcl_global_attr_write_no_rsp_n", utc_zb_zcl_global_attr_write_no_rsp_n, utc_startup, utc_startup},
+       {"utc_zb_zcl_global_config_report_write_p", utc_zb_zcl_global_config_report_write_p, utc_startup, utc_startup},
+       {"utc_zb_zcl_global_config_report_write_n", utc_zb_zcl_global_config_report_write_n, utc_startup, utc_startup},
+       {"utc_zb_zcl_global_config_report_read_p", utc_zb_zcl_global_config_report_write_n, utc_startup, utc_startup},
+       {"utc_zb_zcl_global_config_report_read_n", utc_zb_zcl_global_config_report_read_n, utc_startup, utc_startup},
+#endif /* SUPPORT_ZCL_GLOBAL_COMMAND_CLUSTER */
+
+#ifdef SUPPORT_ZCL_IAS_ZONE_CLUSTER
+       /* Zigbee ZCL - IAS Zone Cluster */
+       {"utc_zb_zcl_zone_enroll_response_p", utc_zb_zcl_zone_enroll_response_p, utc_startup, utc_startup},
+       {"utc_zb_zcl_zone_enroll_response_n", utc_zb_zcl_zone_enroll_response_p, utc_startup, utc_startup},
+#endif /* SUPPORT_ZCL_IAS_ZONE_CLUSTER */
+
+#ifdef SUPPORT_ZCL_ON_OFF_CLUSTER
+       /* Zigbee ZCL - On/Off Cluster */
+       {"utc_zb_zcl_on_off_control_p", utc_zb_zcl_on_off_control_p, utc_startup, utc_startup},
+       {"utc_zb_zcl_on_off_control_n", utc_zb_zcl_on_off_control_n, utc_startup, utc_startup},
+#endif /* SUPPORT_ZCL_ON_OFF_CLUSTER */
+
+#ifdef SUPPORT_ZCL_READ_ATTRIBUTE_STATUS_RECORD
+       /* Zigbee ZCL - Read Attribute Status Record Getter/Setter */
+       {"utc_zb_read_attr_status_record_create_p", utc_zb_read_attr_status_record_create_p, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_create_n", utc_zb_read_attr_status_record_create_n, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_clone_p", utc_zb_read_attr_status_record_clone_p, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_clone_n", utc_zb_read_attr_status_record_clone_n, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_destroy_p", utc_zb_read_attr_status_record_destroy_p, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_destroy_n", utc_zb_read_attr_status_record_destroy_n, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_set_id_p", utc_zb_read_attr_status_record_set_id_p, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_set_id_n", utc_zb_read_attr_status_record_set_id_n, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_get_id_p", utc_zb_read_attr_status_record_get_id_p, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_get_id_n", utc_zb_read_attr_status_record_get_id_n, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_set_status_p", utc_zb_read_attr_status_record_set_status_p, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_set_status_n", utc_zb_read_attr_status_record_set_status_n, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_get_status_p", utc_zb_read_attr_status_record_get_status_p, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_get_status_n", utc_zb_read_attr_status_record_get_status_n, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_set_type_p", utc_zb_read_attr_status_record_get_status_p, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_set_type_n", utc_zb_read_attr_status_record_set_type_n, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_get_type_p", utc_zb_read_attr_status_record_get_type_p, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_get_type_n", utc_zb_read_attr_status_record_get_type_n, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_set_value_p", utc_zb_read_attr_status_record_set_value_p, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_set_value_n", utc_zb_read_attr_status_record_set_value_n, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_get_value_p", utc_zb_read_attr_status_record_get_value_p, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_get_value_n", utc_zb_read_attr_status_record_get_value_n, utc_startup, utc_startup},
+#endif /* SUPPORT_ZCL_READ_ATTRIBUTE_STATUS_RECORD */
+
+#ifdef SUPPORT_ZCL_WRITE_ATTRIBUTE_STATUS
+       /* Zigbee ZCL - Write Attribute Status Record Getter/Setter */
+       {"utc_zb_write_attr_record_create_p", utc_zb_write_attr_record_create_p, utc_startup, utc_startup},
+       {"utc_zb_write_attr_record_create_n", utc_zb_write_attr_record_create_n, utc_startup, utc_startup},
+       {"utc_zb_write_attr_record_destroy_p", utc_zb_write_attr_record_destroy_p, utc_startup, utc_startup},
+       {"utc_zb_write_attr_record_destroy_n", utc_zb_write_attr_record_destroy_n, utc_startup, utc_startup},
+       {"utc_zb_write_attr_record_set_id_p", utc_zb_write_attr_record_set_id_p, utc_startup, utc_startup},
+       {"utc_zb_write_attr_record_set_id_n", utc_zb_write_attr_record_set_id_n, utc_startup, utc_startup},
+       {"utc_zb_write_attr_record_set_value_p", utc_zb_write_attr_record_set_value_p, utc_startup, utc_startup},
+       {"utc_zb_write_attr_record_set_value_n", utc_zb_write_attr_record_set_value_n, utc_startup, utc_startup},
+       {"utc_zb_write_attr_status_create_p", utc_zb_write_attr_status_create_p, utc_startup, utc_startup},
+       {"utc_zb_write_attr_status_create_n", utc_zb_write_attr_status_create_n, utc_startup, utc_startup},
+       {"utc_zb_write_attr_status_destroy_p", utc_zb_write_attr_status_destroy_p, utc_startup, utc_startup},
+       {"utc_zb_write_attr_status_destroy_n", utc_zb_write_attr_status_destroy_n, utc_startup, utc_startup},
+       {"utc_zb_write_attr_status_set_status_p", utc_zb_write_attr_status_set_status_p, utc_startup, utc_startup},
+       {"utc_zb_write_attr_status_set_status_n", utc_zb_write_attr_status_set_status_n, utc_startup, utc_startup},
+       {"utc_zb_write_attr_status_get_status_p", utc_zb_write_attr_status_get_status_p, utc_startup, utc_startup},
+       {"utc_zb_write_attr_status_get_status_n", utc_zb_write_attr_status_get_status_n, utc_startup, utc_startup},
+       {"utc_zb_write_attr_status_set_id_p", utc_zb_write_attr_status_set_id_p, utc_startup, utc_startup},
+       {"utc_zb_write_attr_status_set_id_n", utc_zb_write_attr_status_set_id_n, utc_startup, utc_startup},
+       {"utc_zb_write_attr_status_get_id_p", utc_zb_write_attr_status_get_id_p, utc_startup, utc_startup},
+       {"utc_zb_write_attr_status_get_id_n", utc_zb_write_attr_status_get_id_n, utc_startup, utc_startup},
+#endif /* SUPPORT_ZCL_WRITE_ATTRIBUTE_STATUS */
+
+#ifdef SUPPORT_ZCL_REPORT_CONFIG_REPORT
+       /* Zigbee ZCL - Report Configuration Record Getter/Setter */
+       {"utc_zb_report_config_record_create_p", utc_zb_report_config_record_create_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_create_n", utc_zb_report_config_record_create_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_clone_p", utc_zb_report_config_record_clone_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_clone_n", utc_zb_report_config_record_clone_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_destroy_p", utc_zb_report_config_record_destroy_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_destroy_n", utc_zb_report_config_record_destroy_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_set_dir_p", utc_zb_report_config_record_set_dir_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_set_dir_n", utc_zb_report_config_record_set_dir_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_get_dir_p", utc_zb_report_config_record_get_dir_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_get_dir_n", utc_zb_report_config_record_get_dir_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_set_id_p", utc_zb_report_config_record_set_id_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_set_id_n", utc_zb_report_config_record_set_id_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_get_id_p", utc_zb_report_config_record_get_id_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_get_id_n", utc_zb_report_config_record_get_id_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_set_min_interval_p", utc_zb_report_config_record_set_min_interval_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_set_min_interval_n", utc_zb_report_config_record_set_min_interval_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_get_min_interval_p", utc_zb_report_config_record_get_min_interval_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_get_min_interval_n", utc_zb_report_config_record_get_min_interval_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_set_max_interval_p", utc_zb_report_config_record_set_max_interval_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_set_max_interval_n", utc_zb_report_config_record_set_max_interval_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_get_max_interval_p", utc_zb_report_config_record_get_max_interval_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_get_max_interval_n", utc_zb_report_config_record_get_max_interval_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_set_timeout_p", utc_zb_report_config_record_set_timeout_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_set_timeout_n", utc_zb_report_config_record_set_timeout_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_get_timeout_p", utc_zb_report_config_record_get_timeout_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_get_timeout_n", utc_zb_report_config_record_get_timeout_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_set_change_p", utc_zb_report_config_record_set_change_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_set_change_n", utc_zb_report_config_record_set_change_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_get_change_p", utc_zb_report_config_record_get_change_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_get_change_n", utc_zb_report_config_record_get_change_n, utc_startup, utc_startup},
+#endif /* SUPPORT_ZCL_REPORT_CONFIG_REPORT */
+
+#ifdef SUPPORT_ZCL_READ_REPORT_CONFIG_RECORD
+       /* Zigbee ZCL - Read Report Configuration Record Getter/Setter */
+       {"utc_zb_read_report_config_record_create_p", utc_zb_read_report_config_record_create_p, utc_startup, utc_startup},
+       {"utc_zb_read_report_config_record_create_n", utc_zb_read_report_config_record_create_n, utc_startup, utc_startup},
+       {"utc_zb_read_report_config_record_destroy_p", utc_zb_read_report_config_record_destroy_p, utc_startup, utc_startup},
+       {"utc_zb_read_report_config_record_destroy_n", utc_zb_read_report_config_record_destroy_n, utc_startup, utc_startup},
+       {"utc_zb_read_report_config_record_set_dir_p", utc_zb_read_report_config_record_set_dir_p, utc_startup, utc_startup},
+       {"utc_zb_read_report_config_record_set_dir_n", utc_zb_read_report_config_record_set_dir_n, utc_startup, utc_startup},
+       {"utc_zb_read_report_config_record_set_id_p", utc_zb_read_report_config_record_set_id_p, utc_startup, utc_startup},
+       {"utc_zb_read_report_config_record_set_id_n", utc_zb_read_report_config_record_set_id_n, utc_startup, utc_startup},
+#endif /* SUPPORT_ZCL_READ_REPORT_CONFIG_RECORD */
+
+#ifdef SUPPORT_ZCL_REPORT_CONFIG_RESPONSE_RECORD
+       /* Zigbee ZCL - Report Configuration Response Getter/Setter */
+       {"utc_zb_report_config_response_record_clone_n", utc_zb_report_config_response_record_clone_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_response_record_destroy_n", utc_zb_report_config_response_record_destroy_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_response_record_get_status_n", utc_zb_report_config_response_record_get_status_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_response_record_get_dir_n", utc_zb_report_config_response_record_get_dir_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_response_record_get_id_n", utc_zb_report_config_response_record_get_id_n, utc_startup, utc_startup},
+#endif /* SUPPORT_ZCL_REPORT_CONFIG_RESPONSE_RECORD */
+
+       {NULL, NULL}
+};
+
+#endif // __TCT_ZIGBEE_NATIVE_H__
diff --git a/src/utc/zigbee/tct-zigbee-core_tv.h b/src/utc/zigbee/tct-zigbee-core_tv.h
new file mode 100644 (file)
index 0000000..0ddfb5b
--- /dev/null
@@ -0,0 +1,539 @@
+//
+// Copyright (c) 2014 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+#ifndef __TCT_ZIGBEE_NATIVE_H__
+#define __TCT_ZIGBEE_NATIVE_H__
+
+#include "testcase.h"
+#include "tct_common.h"
+#include "utc-zigbee.h"
+
+extern void utc_startup(void);
+extern void utc_cleanup(void);
+extern void utc_zdo_simple_desc_startup(void);
+extern void utc_zdo_simple_desc_cleanup(void);
+extern void utc_zdo_power_desc_startup(void);
+extern void utc_zdo_power_desc_cleanup(void);
+extern void utc_zdo_node_desc_startup(void);
+extern void utc_zdo_node_desc_cleanup(void);
+extern void utc_zdo_getter_startup(void);
+extern void utc_zdo_getter_cleanup(void);
+
+/* Zigbee APIs */
+extern int utc_zb_create_p(void);
+extern int utc_zb_create_n(void);
+extern int utc_zb_destroy_p(void);
+extern int utc_zb_destroy_n(void);
+extern int utc_zb_ev_get_enable_status_n(void);
+extern int utc_zb_ev_get_form_network_panid_n(void);
+extern int utc_zb_ev_get_join_count_n(void);
+extern int utc_zb_ev_get_join_ep_n(void);
+extern int utc_zb_ev_get_child_left_status_n(void);
+extern int utc_zb_ev_get_global_default_rsp_ep_n(void);
+extern int utc_zb_ev_get_global_default_rsp_cluster_id_n(void);
+extern int utc_zb_ev_get_global_default_rsp_command_id_n(void);
+extern int utc_zb_ev_get_global_default_rsp_status_n(void);
+extern int utc_zb_ev_get_enroll_request_src_ep_n(void);
+extern int utc_zb_ev_get_enroll_request_zone_type_n(void);
+extern int utc_zb_ev_get_enroll_request_mfg_code_n(void);
+extern int utc_zb_ev_get_ias_noti_src_ep_n(void);
+extern int utc_zb_ev_get_ias_noti_zone_status_n(void);
+extern int utc_zb_ev_get_ias_ext_noti_src_ep_n(void);
+extern int utc_zb_ev_get_ias_ext_noti_status_n(void);
+extern int utc_zb_ev_get_ias_ext_noti_zone_status_n(void);
+extern int utc_zb_ev_get_ias_ext_noti_delay_n(void);
+extern int utc_zb_ev_get_ias_ext_noti_zone_id_n(void);
+extern int utc_zb_set_event_cb_p(void);
+extern int utc_zb_set_event_cb_n(void);
+extern int utc_zb_form_network_p(void);
+extern int utc_zb_form_network_n(void);
+extern int utc_zb_disable_network_p(void);
+extern int utc_zb_disable_network_n(void);
+extern int utc_zb_leave_device_p(void);
+extern int utc_zb_leave_device_n(void);
+extern int utc_zb_permit_join_p(void);
+extern int utc_zb_permit_join_n(void);
+extern int utc_zb_get_controller_mac_address_p(void);
+extern int utc_zb_get_controller_mac_address_n(void);
+extern int utc_zb_get_network_info_p(void);
+extern int utc_zb_get_network_info_n(void);
+
+extern int utc_zb_end_dev_get_ep_list_p(void);
+extern int utc_zb_end_dev_get_ep_list_n(void);
+extern int utc_zb_end_dev_get_cluster_list_p(void);
+extern int utc_zb_end_dev_get_cluster_list_n(void);
+extern int utc_zb_end_dev_get_end_dev_info_list_p(void);
+extern int utc_zb_end_dev_get_end_dev_info_list_n1(void);
+extern int utc_zb_end_dev_get_end_dev_info_list_n2(void);
+extern int utc_zb_end_dev_info_create_p(void);
+extern int utc_zb_end_dev_info_create_n(void);
+extern int utc_zb_end_dev_info_clone_p(void);
+extern int utc_zb_end_dev_info_clone_n(void);
+extern int utc_zb_end_dev_info_destroy_p(void);
+extern int utc_zb_end_dev_info_destroy_n(void);
+extern int utc_zb_end_dev_info_list_free_p(void);
+extern int utc_zb_end_dev_info_list_free_n(void);
+extern int utc_zb_end_dev_info_get_network_address_n(void);
+extern int utc_zb_end_dev_info_get_ieee_address_n(void);
+extern int utc_zb_end_dev_info_get_num_of_ep_n(void);
+extern int utc_zb_end_dev_info_get_ep_list_n(void);
+extern int utc_zb_end_dev_info_get_mac_capability_n(void);
+extern int utc_zb_end_dev_info_get_alternative_pan_coordinator_n(void);
+extern int utc_zb_end_dev_info_get_device_id_n(void);
+extern int utc_zb_end_dev_info_get_profile_id_n(void);
+extern int utc_zb_end_dev_info_get_power_source_n(void);
+extern int utc_zb_end_dev_info_get_security_capabilty_n(void);
+
+/* Zigbee ZDO */
+
+#ifdef SUPPORT_SIMPLE_DESCRIPTION
+extern int utc_zb_simple_desc_create_p(void);
+extern int utc_zb_simple_desc_create_n(void);
+extern int utc_zb_simple_desc_destroy_p(void);
+extern int utc_zb_simple_desc_destroy_n(void);
+extern int utc_zb_simple_desc_clone_p(void);
+extern int utc_zb_simple_desc_clone_n(void);
+extern int utc_zb_simple_desc_get_ep_p(void);
+extern int utc_zb_simple_desc_get_ep_n(void);
+extern int utc_zb_simple_desc_set_ep_p(void);
+extern int utc_zb_simple_desc_set_ep_n(void);
+extern int utc_zb_simple_desc_get_profile_id_p(void);
+extern int utc_zb_simple_desc_get_profile_id_n(void);
+extern int utc_zb_simple_desc_set_profile_id_p(void);
+extern int utc_zb_simple_desc_set_profile_id_n(void);
+extern int utc_zb_simple_desc_get_device_id_p(void);
+extern int utc_zb_simple_desc_get_device_id_n(void);
+extern int utc_zb_simple_desc_set_device_id_p(void);
+extern int utc_zb_simple_desc_set_device_id_n(void);
+extern int utc_zb_simple_desc_get_device_ver_p(void);
+extern int utc_zb_simple_desc_get_device_ver_n(void);
+extern int utc_zb_simple_desc_set_device_ver_p(void);
+extern int utc_zb_simple_desc_set_device_ver_n(void);
+extern int utc_zb_simple_desc_get_num_of_in_clusters_p(void);
+extern int utc_zb_simple_desc_get_num_of_in_clusters_n(void);
+extern int utc_zb_simple_desc_set_num_of_in_clusters_p(void);
+extern int utc_zb_simple_desc_set_num_of_in_clusters_n(void);
+extern int utc_zb_simple_desc_get_num_of_out_clusters_p(void);
+extern int utc_zb_simple_desc_get_num_of_out_clusters_n(void);
+extern int utc_zb_simple_desc_set_num_of_out_clusters_p(void);
+extern int utc_zb_simple_desc_set_num_of_out_clusters_n(void);
+extern int utc_zb_simple_desc_get_in_clusters_p(void);
+extern int utc_zb_simple_desc_get_in_clusters_n(void);
+extern int utc_zb_simple_desc_set_in_clusters_p(void);
+extern int utc_zb_simple_desc_set_in_clusters_n(void);
+extern int utc_zb_simple_desc_get_out_clusters_p(void);
+extern int utc_zb_simple_desc_get_out_clusters_n(void);
+extern int utc_zb_simple_desc_set_out_clusters_p(void);
+extern int utc_zb_simple_desc_set_out_clusters_n(void);
+#endif /* SUPPORT_SIMPLE_DESCRIPTION */
+
+#ifdef SUPPORT_ZDO_DEVICE_DISCOVERY_MANAGER
+/* Zigbee ZDO Device Discovery */
+extern int utc_zb_zdo_nwk_addr_req_p(void);
+extern int utc_zb_zdo_nwk_addr_req_n(void);
+extern int utc_zb_zdo_ieee_addr_req_p(void);
+extern int utc_zb_zdo_ieee_addr_req_n(void);
+extern int utc_zb_zdo_active_ep_p(void);
+extern int utc_zb_zdo_active_ep_n(void);
+extern int utc_zb_zdo_simple_desc_req_p(void);
+extern int utc_zb_zdo_simple_desc_req_n(void);
+#endif /* SUPPORT_ZDO_DEVICE_DISCOVERY_MANAGER */
+
+#ifdef SUPPORT_ZCL_GLOBAL_COMMNAD_CLUSTER
+/* Global Command */
+extern int utc_zb_zcl_global_attr_read_p(void);
+extern int utc_zb_zcl_global_attr_read_n(void);
+extern int utc_zb_zcl_global_attr_write_p(void);
+extern int utc_zb_zcl_global_attr_write_n(void);
+extern int utc_zb_zcl_global_attr_write_undivided_p(void);
+extern int utc_zb_zcl_global_attr_write_undivided_n(void);
+extern int utc_zb_zcl_global_attr_write_no_rsp_p(void);
+extern int utc_zb_zcl_global_attr_write_no_rsp_n(void);
+extern int utc_zb_zcl_global_config_report_write_p(void);
+extern int utc_zb_zcl_global_config_report_write_n(void);
+extern int utc_zb_zcl_global_config_report_read_p(void);
+extern int utc_zb_zcl_global_config_report_read_n(void);
+extern int utc_zb_zcl_global_config_report_read_n(void);
+#endif /* SUPPORT_ZCL_GLOBAL_COMMNAD_CLUSTER */
+
+#ifdef SUPPORT_ZCL_READ_ATTRIBUTE_STATUS_RECORD
+extern int utc_zb_read_attr_status_record_create_p(void);
+extern int utc_zb_read_attr_status_record_create_n(void);
+extern int utc_zb_read_attr_status_record_clone_p(void);
+extern int utc_zb_read_attr_status_record_clone_n(void);
+extern int utc_zb_read_attr_status_record_destroy_p(void);
+extern int utc_zb_read_attr_status_record_destroy_n(void);
+extern int utc_zb_read_attr_status_record_set_id_p(void);
+extern int utc_zb_read_attr_status_record_set_id_n(void);
+extern int utc_zb_read_attr_status_record_get_id_p(void);
+extern int utc_zb_read_attr_status_record_get_id_n(void);
+extern int utc_zb_read_attr_status_record_set_status_p(void);
+extern int utc_zb_read_attr_status_record_set_status_n(void);
+extern int utc_zb_read_attr_status_record_get_status_p(void);
+extern int utc_zb_read_attr_status_record_get_status_n(void);
+extern int utc_zb_read_attr_status_record_set_type_p(void);
+extern int utc_zb_read_attr_status_record_set_type_n(void);
+extern int utc_zb_read_attr_status_record_get_type_p(void);
+extern int utc_zb_read_attr_status_record_get_type_n(void);
+extern int utc_zb_read_attr_status_record_set_value_p(void);
+extern int utc_zb_read_attr_status_record_set_value_n(void);
+extern int utc_zb_read_attr_status_record_get_value_p(void);
+extern int utc_zb_read_attr_status_record_get_value_n(void);
+#endif /* SUPPORT_ZCL_READ_ATTRIBUTE_STATUS_RECORD */
+
+#ifdef SUPPORT_ZCL_WRITE_ATTRIBUTE_STATUS
+extern int utc_zb_write_attr_record_create_p(void);
+extern int utc_zb_write_attr_record_create_n(void);
+extern int utc_zb_write_attr_record_destroy_p(void);
+extern int utc_zb_write_attr_record_destroy_n(void);
+extern int utc_zb_write_attr_record_set_id_p(void);
+extern int utc_zb_write_attr_record_set_id_n(void);
+extern int utc_zb_write_attr_record_set_value_p(void);
+extern int utc_zb_write_attr_record_set_value_n(void);
+extern int utc_zb_write_attr_status_create_p(void);
+extern int utc_zb_write_attr_status_create_n(void);
+extern int utc_zb_write_attr_status_destroy_p(void);
+extern int utc_zb_write_attr_status_destroy_n(void);
+extern int utc_zb_write_attr_status_set_status_p(void);
+extern int utc_zb_write_attr_status_set_status_n(void);
+extern int utc_zb_write_attr_status_get_status_p(void);
+extern int utc_zb_write_attr_status_get_status_n(void);
+extern int utc_zb_write_attr_status_set_id_p(void);
+extern int utc_zb_write_attr_status_set_id_n(void);
+extern int utc_zb_write_attr_status_get_id_p(void);
+extern int utc_zb_write_attr_status_get_id_n(void);
+#endif /* SUPPORT_ZCL_WRITE_ATTRIBUTE_STATUS */
+
+#ifdef SUPPORT_ZCL_REPORT_CONFIG_REPORT
+extern int utc_zb_report_config_record_create_p(void);
+extern int utc_zb_report_config_record_create_n(void);
+extern int utc_zb_report_config_record_clone_p(void);
+extern int utc_zb_report_config_record_clone_n(void);
+extern int utc_zb_report_config_record_destroy_p(void);
+extern int utc_zb_report_config_record_destroy_n(void);
+extern int utc_zb_report_config_record_set_dir_p(void);
+extern int utc_zb_report_config_record_set_dir_n(void);
+extern int utc_zb_report_config_record_get_dir_p(void);
+extern int utc_zb_report_config_record_get_dir_n(void);
+extern int utc_zb_report_config_record_set_id_p(void);
+extern int utc_zb_report_config_record_set_id_n(void);
+extern int utc_zb_report_config_record_get_id_p(void);
+extern int utc_zb_report_config_record_get_id_n(void);
+extern int utc_zb_report_config_record_set_min_interval_p(void);
+extern int utc_zb_report_config_record_set_min_interval_n(void);
+extern int utc_zb_report_config_record_get_min_interval_p(void);
+extern int utc_zb_report_config_record_get_min_interval_n(void);
+extern int utc_zb_report_config_record_set_max_interval_p(void);
+extern int utc_zb_report_config_record_set_max_interval_n(void);
+extern int utc_zb_report_config_record_get_max_interval_p(void);
+extern int utc_zb_report_config_record_get_max_interval_n(void);
+extern int utc_zb_report_config_record_set_timeout_p(void);
+extern int utc_zb_report_config_record_set_timeout_n(void);
+extern int utc_zb_report_config_record_get_timeout_p(void);
+extern int utc_zb_report_config_record_get_timeout_n(void);
+extern int utc_zb_report_config_record_set_change_p(void);
+extern int utc_zb_report_config_record_set_change_n(void);
+extern int utc_zb_report_config_record_get_change_p(void);
+extern int utc_zb_report_config_record_get_change_n(void);
+#endif /* SUPPORT_ZCL_REPORT_CONFIG_REPORT */
+
+#ifdef SUPPORT_ZCL_READ_REPORT_CONFIG_RECORD
+extern int utc_zb_read_report_config_record_create_p(void);
+extern int utc_zb_read_report_config_record_create_n(void);
+extern int utc_zb_read_report_config_record_destroy_p(void);
+extern int utc_zb_read_report_config_record_destroy_n(void);
+extern int utc_zb_read_report_config_record_set_dir_p(void);
+extern int utc_zb_read_report_config_record_set_dir_n(void);
+extern int utc_zb_read_report_config_record_set_id_p(void);
+extern int utc_zb_read_report_config_record_set_id_n(void);
+#endif /* SUPPORT_ZCL_READ_REPORT_CONFIG_RECORD */
+
+#ifdef SUPPORT_ZCL_REPORT_CONFIG_RESPONSE_RECORD
+extern int utc_zb_report_config_response_record_clone_n(void);
+extern int utc_zb_report_config_response_record_destroy_n(void);
+extern int utc_zb_report_config_response_record_get_status_n(void);
+extern int utc_zb_report_config_response_record_get_dir_n(void);
+extern int utc_zb_report_config_response_record_get_id_n(void);
+#endif /* SUPPORT_ZCL_REPORT_CONFIG_RESPONSE_RECORD */
+
+#ifdef SUPPORT_ZCL_IAS_ZONE_CLUSTER
+/* IAS Zone Cluster */
+extern int utc_zb_zcl_zone_enroll_response_p(void);
+extern int utc_zb_zcl_zone_enroll_response_n(void);
+#endif /* SUPPORT_ZCL_IAS_ZONE_CLUSTER */
+
+#ifdef SUPPORT_ZCL_ON_OFF_CLUSTER
+/* On/Off Cluster */
+extern int utc_zb_zcl_on_off_control_p(void);
+extern int utc_zb_zcl_on_off_control_n(void);
+#endif /* SUPPORT_ZCL_ON_OFF_CLUSTER */
+
+testcase tc_array[] = {
+       /* Zigbee APIs */
+       {"utc_zb_create_p", utc_zb_create_p, utc_startup, utc_cleanup},
+       {"utc_zb_create_n", utc_zb_create_n, utc_startup, utc_cleanup},
+       {"utc_zb_destroy_p", utc_zb_destroy_p, utc_startup, utc_cleanup},
+       {"utc_zb_destroy_n", utc_zb_destroy_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_enable_status_n",  utc_zb_ev_get_enable_status_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_form_network_panid_n", utc_zb_ev_get_form_network_panid_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_join_count_n", utc_zb_ev_get_join_count_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_join_ep_n", utc_zb_ev_get_join_ep_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_child_left_status_n", utc_zb_ev_get_child_left_status_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_global_default_rsp_ep_n", utc_zb_ev_get_global_default_rsp_ep_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_global_default_rsp_cluster_id_n", utc_zb_ev_get_global_default_rsp_cluster_id_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_global_default_rsp_command_id_n", utc_zb_ev_get_global_default_rsp_command_id_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_global_default_rsp_status_n", utc_zb_ev_get_global_default_rsp_status_n, utc_startup, utc_cleanup},
+
+       {"utc_zb_ev_get_enroll_request_src_ep_n", utc_zb_ev_get_enroll_request_src_ep_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_enroll_request_zone_type_n", utc_zb_ev_get_enroll_request_zone_type_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_enroll_request_mfg_code_n", utc_zb_ev_get_enroll_request_mfg_code_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_ias_noti_src_ep_n", utc_zb_ev_get_ias_noti_src_ep_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_ias_noti_zone_status_n", utc_zb_ev_get_ias_noti_zone_status_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_ias_ext_noti_src_ep_n", utc_zb_ev_get_ias_ext_noti_src_ep_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_ias_ext_noti_status_n", utc_zb_ev_get_ias_ext_noti_status_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_ias_ext_noti_zone_status_n", utc_zb_ev_get_ias_ext_noti_zone_status_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_ias_ext_noti_delay_n", utc_zb_ev_get_ias_ext_noti_delay_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_ias_ext_noti_zone_id_n", utc_zb_ev_get_ias_ext_noti_zone_id_n, utc_startup, utc_cleanup},
+       {"utc_zb_set_event_cb_p", utc_zb_set_event_cb_p, utc_startup, utc_cleanup},
+       {"utc_zb_set_event_cb_n", utc_zb_set_event_cb_n, utc_startup, utc_cleanup},
+       {"utc_zb_form_network_p", utc_zb_form_network_p, utc_startup, utc_cleanup},
+       {"utc_zb_form_network_n", utc_zb_form_network_n, utc_startup, utc_cleanup},
+       {"utc_zb_disable_network_p", utc_zb_disable_network_p, utc_startup, utc_cleanup},
+       {"utc_zb_disable_network_n", utc_zb_disable_network_n, utc_startup, utc_cleanup},
+       {"utc_zb_leave_device_p", utc_zb_leave_device_p, utc_startup, utc_cleanup},
+       {"utc_zb_leave_device_n", utc_zb_leave_device_n, utc_startup, utc_cleanup},
+       {"utc_zb_permit_join_p", utc_zb_permit_join_p, utc_startup, utc_cleanup},
+       {"utc_zb_permit_join_n", utc_zb_permit_join_n, utc_startup, utc_cleanup},
+       {"utc_zb_get_controller_mac_address_p", utc_zb_get_controller_mac_address_p, utc_startup, utc_cleanup},
+       {"utc_zb_get_controller_mac_address_n", utc_zb_get_controller_mac_address_n, utc_startup, utc_cleanup},
+       {"utc_zb_get_network_info_p", utc_zb_get_network_info_p, utc_startup, utc_cleanup},
+       {"utc_zb_get_network_info_n", utc_zb_get_network_info_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_get_ep_list_p", utc_zb_end_dev_get_ep_list_p, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_get_ep_list_n", utc_zb_end_dev_get_ep_list_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_get_cluster_list_p", utc_zb_end_dev_get_cluster_list_p, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_get_cluster_list_n", utc_zb_end_dev_get_cluster_list_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_get_end_dev_info_list_p", utc_zb_end_dev_get_end_dev_info_list_p, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_get_end_dev_info_list_n1", utc_zb_end_dev_get_end_dev_info_list_n1, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_get_end_dev_info_list_n2", utc_zb_end_dev_get_end_dev_info_list_n2, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_list_free_p", utc_zb_end_dev_info_list_free_p, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_list_free_n", utc_zb_end_dev_info_list_free_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_create_p", utc_zb_end_dev_info_create_p, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_create_n", utc_zb_end_dev_info_create_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_clone_p", utc_zb_end_dev_info_clone_p, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_clone_n", utc_zb_end_dev_info_clone_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_destroy_p", utc_zb_end_dev_info_destroy_p, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_destroy_n", utc_zb_end_dev_info_destroy_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_get_network_address_n", utc_zb_end_dev_info_get_network_address_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_get_ieee_address_n", utc_zb_end_dev_info_get_ieee_address_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_get_num_of_ep_n", utc_zb_end_dev_info_get_num_of_ep_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_get_ep_list_n", utc_zb_end_dev_info_get_ep_list_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_get_mac_capability_n", utc_zb_end_dev_info_get_mac_capability_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_get_alternative_pan_coordinator_n", utc_zb_end_dev_info_get_alternative_pan_coordinator_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_get_device_id_n", utc_zb_end_dev_info_get_device_id_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_get_profile_id_n", utc_zb_end_dev_info_get_profile_id_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_get_power_source_n", utc_zb_end_dev_info_get_power_source_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_get_security_capabilty_n", utc_zb_end_dev_info_get_security_capabilty_n, utc_startup, utc_cleanup},
+
+#ifdef SUPPORT_SIMPLE_DESCRIPTION
+       /* Zigbee ZDO - Simple Descripter Getter/Setter */
+       {"utc_zb_simple_desc_create_p", utc_zb_simple_desc_create_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_create_n", utc_zb_simple_desc_create_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_destroy_p", utc_zb_simple_desc_destroy_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_destroy_n", utc_zb_simple_desc_destroy_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_clone_p", utc_zb_simple_desc_clone_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_clone_n", utc_zb_simple_desc_clone_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_ep_p", utc_zb_simple_desc_get_ep_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_ep_n", utc_zb_simple_desc_get_ep_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_ep_p", utc_zb_simple_desc_set_ep_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_ep_n", utc_zb_simple_desc_set_ep_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_profile_id_p", utc_zb_simple_desc_get_profile_id_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_profile_id_n", utc_zb_simple_desc_get_profile_id_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_profile_id_p", utc_zb_simple_desc_set_profile_id_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_profile_id_n", utc_zb_simple_desc_set_profile_id_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_device_id_p", utc_zb_simple_desc_get_device_id_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_device_id_n", utc_zb_simple_desc_get_device_id_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_device_id_p", utc_zb_simple_desc_set_device_id_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_device_id_n", utc_zb_simple_desc_set_device_id_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_device_ver_p", utc_zb_simple_desc_get_device_ver_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_device_ver_n", utc_zb_simple_desc_get_device_ver_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_device_ver_p", utc_zb_simple_desc_set_device_ver_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_device_ver_n", utc_zb_simple_desc_set_device_ver_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_num_of_in_clusters_p", utc_zb_simple_desc_get_num_of_in_clusters_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_num_of_in_clusters_n", utc_zb_simple_desc_get_num_of_in_clusters_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_num_of_in_clusters_p", utc_zb_simple_desc_set_num_of_in_clusters_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_num_of_in_clusters_n", utc_zb_simple_desc_set_num_of_in_clusters_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_num_of_out_clusters_p", utc_zb_simple_desc_get_num_of_out_clusters_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_num_of_out_clusters_n", utc_zb_simple_desc_get_num_of_out_clusters_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_num_of_out_clusters_p", utc_zb_simple_desc_set_num_of_out_clusters_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_num_of_out_clusters_n", utc_zb_simple_desc_set_num_of_out_clusters_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_in_clusters_p", utc_zb_simple_desc_get_in_clusters_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_in_clusters_n", utc_zb_simple_desc_get_in_clusters_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_in_clusters_p", utc_zb_simple_desc_set_in_clusters_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_in_clusters_n", utc_zb_simple_desc_set_in_clusters_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_out_clusters_p", utc_zb_simple_desc_get_out_clusters_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_out_clusters_n", utc_zb_simple_desc_get_out_clusters_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_out_clusters_p", utc_zb_simple_desc_set_out_clusters_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_out_clusters_n", utc_zb_simple_desc_set_out_clusters_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+#endif /* SUPPORT_SIMPLE_DESCRIPTION*/
+
+#ifdef SUPPORT_ZDO_DEVICE_DISCOVERY_MANAGER
+       /* Zigbee ZDO - Device Discovery */
+       {"utc_zb_zdo_nwk_addr_req_p", utc_zb_zdo_nwk_addr_req_p, utc_startup, utc_startup},
+       {"utc_zb_zdo_nwk_addr_req_n", utc_zb_zdo_nwk_addr_req_n, utc_startup, utc_startup},
+       {"utc_zb_zdo_ieee_addr_req_p", utc_zb_zdo_ieee_addr_req_p, utc_startup, utc_startup},
+       {"utc_zb_zdo_ieee_addr_req_n", utc_zb_zdo_ieee_addr_req_n, utc_startup, utc_startup},
+       {"utc_zb_zdo_active_ep_p", utc_zb_zdo_active_ep_p, utc_startup, utc_startup},
+       {"utc_zb_zdo_active_ep_n", utc_zb_zdo_active_ep_n, utc_startup, utc_startup},
+       {"utc_zb_zdo_simple_desc_req_p", utc_zb_zdo_simple_desc_req_p, utc_startup, utc_startup},
+       {"utc_zb_zdo_simple_desc_req_n", utc_zb_zdo_simple_desc_req_n, utc_startup, utc_startup},
+#endif /* SUPPORT_ZDO_DEVICE_DISCOVERY_MANAGER */
+
+#if defined(SUPPORT_ZCL_GLOBAL_COMMNAD_CLUSTER)
+       /* Zigbee ZCL - Global Cluster */
+       {"utc_zb_zcl_global_attr_read_p", utc_zb_zcl_global_attr_read_p, utc_startup, utc_startup},
+       {"utc_zb_zcl_global_attr_read_n", utc_zb_zcl_global_attr_read_n, utc_startup, utc_startup},
+       {"utc_zb_zcl_global_attr_write_p", utc_zb_zcl_global_attr_write_p, utc_startup, utc_startup},
+       {"utc_zb_zcl_global_attr_write_n", utc_zb_zcl_global_attr_write_n, utc_startup, utc_startup},
+       {"utc_zb_zcl_global_attr_write_undivided_p", utc_zb_zcl_global_attr_write_undivided_p, utc_startup, utc_startup},
+       {"utc_zb_zcl_global_attr_write_undivided_n", utc_zb_zcl_global_attr_write_undivided_n, utc_startup, utc_startup},
+       {"utc_zb_zcl_global_attr_write_no_rsp_p", utc_zb_zcl_global_attr_write_no_rsp_p, utc_startup, utc_startup},
+       {"utc_zb_zcl_global_attr_write_no_rsp_n", utc_zb_zcl_global_attr_write_no_rsp_n, utc_startup, utc_startup},
+       {"utc_zb_zcl_global_config_report_write_p", utc_zb_zcl_global_config_report_write_p, utc_startup, utc_startup},
+       {"utc_zb_zcl_global_config_report_write_n", utc_zb_zcl_global_config_report_write_n, utc_startup, utc_startup},
+       {"utc_zb_zcl_global_config_report_read_p", utc_zb_zcl_global_config_report_write_n, utc_startup, utc_startup},
+       {"utc_zb_zcl_global_config_report_read_n", utc_zb_zcl_global_config_report_read_n, utc_startup, utc_startup},
+#endif /* SUPPORT_ZCL_GLOBAL_COMMAND_CLUSTER */
+
+#ifdef SUPPORT_ZCL_IAS_ZONE_CLUSTER
+       /* Zigbee ZCL - IAS Zone Cluster */
+       {"utc_zb_zcl_zone_enroll_response_p", utc_zb_zcl_zone_enroll_response_p, utc_startup, utc_startup},
+       {"utc_zb_zcl_zone_enroll_response_n", utc_zb_zcl_zone_enroll_response_p, utc_startup, utc_startup},
+#endif /* SUPPORT_ZCL_IAS_ZONE_CLUSTER */
+
+#ifdef SUPPORT_ZCL_ON_OFF_CLUSTER
+       /* Zigbee ZCL - On/Off Cluster */
+       {"utc_zb_zcl_on_off_control_p", utc_zb_zcl_on_off_control_p, utc_startup, utc_startup},
+       {"utc_zb_zcl_on_off_control_n", utc_zb_zcl_on_off_control_n, utc_startup, utc_startup},
+#endif /* SUPPORT_ZCL_ON_OFF_CLUSTER */
+
+#ifdef SUPPORT_ZCL_READ_ATTRIBUTE_STATUS_RECORD
+       /* Zigbee ZCL - Read Attribute Status Record Getter/Setter */
+       {"utc_zb_read_attr_status_record_create_p", utc_zb_read_attr_status_record_create_p, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_create_n", utc_zb_read_attr_status_record_create_n, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_clone_p", utc_zb_read_attr_status_record_clone_p, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_clone_n", utc_zb_read_attr_status_record_clone_n, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_destroy_p", utc_zb_read_attr_status_record_destroy_p, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_destroy_n", utc_zb_read_attr_status_record_destroy_n, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_set_id_p", utc_zb_read_attr_status_record_set_id_p, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_set_id_n", utc_zb_read_attr_status_record_set_id_n, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_get_id_p", utc_zb_read_attr_status_record_get_id_p, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_get_id_n", utc_zb_read_attr_status_record_get_id_n, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_set_status_p", utc_zb_read_attr_status_record_set_status_p, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_set_status_n", utc_zb_read_attr_status_record_set_status_n, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_get_status_p", utc_zb_read_attr_status_record_get_status_p, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_get_status_n", utc_zb_read_attr_status_record_get_status_n, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_set_type_p", utc_zb_read_attr_status_record_get_status_p, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_set_type_n", utc_zb_read_attr_status_record_set_type_n, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_get_type_p", utc_zb_read_attr_status_record_get_type_p, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_get_type_n", utc_zb_read_attr_status_record_get_type_n, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_set_value_p", utc_zb_read_attr_status_record_set_value_p, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_set_value_n", utc_zb_read_attr_status_record_set_value_n, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_get_value_p", utc_zb_read_attr_status_record_get_value_p, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_get_value_n", utc_zb_read_attr_status_record_get_value_n, utc_startup, utc_startup},
+#endif /* SUPPORT_ZCL_READ_ATTRIBUTE_STATUS_RECORD */
+
+#ifdef SUPPORT_ZCL_WRITE_ATTRIBUTE_STATUS
+       /* Zigbee ZCL - Write Attribute Status Record Getter/Setter */
+       {"utc_zb_write_attr_record_create_p", utc_zb_write_attr_record_create_p, utc_startup, utc_startup},
+       {"utc_zb_write_attr_record_create_n", utc_zb_write_attr_record_create_n, utc_startup, utc_startup},
+       {"utc_zb_write_attr_record_destroy_p", utc_zb_write_attr_record_destroy_p, utc_startup, utc_startup},
+       {"utc_zb_write_attr_record_destroy_n", utc_zb_write_attr_record_destroy_n, utc_startup, utc_startup},
+       {"utc_zb_write_attr_record_set_id_p", utc_zb_write_attr_record_set_id_p, utc_startup, utc_startup},
+       {"utc_zb_write_attr_record_set_id_n", utc_zb_write_attr_record_set_id_n, utc_startup, utc_startup},
+       {"utc_zb_write_attr_record_set_value_p", utc_zb_write_attr_record_set_value_p, utc_startup, utc_startup},
+       {"utc_zb_write_attr_record_set_value_n", utc_zb_write_attr_record_set_value_n, utc_startup, utc_startup},
+       {"utc_zb_write_attr_status_create_p", utc_zb_write_attr_status_create_p, utc_startup, utc_startup},
+       {"utc_zb_write_attr_status_create_n", utc_zb_write_attr_status_create_n, utc_startup, utc_startup},
+       {"utc_zb_write_attr_status_destroy_p", utc_zb_write_attr_status_destroy_p, utc_startup, utc_startup},
+       {"utc_zb_write_attr_status_destroy_n", utc_zb_write_attr_status_destroy_n, utc_startup, utc_startup},
+       {"utc_zb_write_attr_status_set_status_p", utc_zb_write_attr_status_set_status_p, utc_startup, utc_startup},
+       {"utc_zb_write_attr_status_set_status_n", utc_zb_write_attr_status_set_status_n, utc_startup, utc_startup},
+       {"utc_zb_write_attr_status_get_status_p", utc_zb_write_attr_status_get_status_p, utc_startup, utc_startup},
+       {"utc_zb_write_attr_status_get_status_n", utc_zb_write_attr_status_get_status_n, utc_startup, utc_startup},
+       {"utc_zb_write_attr_status_set_id_p", utc_zb_write_attr_status_set_id_p, utc_startup, utc_startup},
+       {"utc_zb_write_attr_status_set_id_n", utc_zb_write_attr_status_set_id_n, utc_startup, utc_startup},
+       {"utc_zb_write_attr_status_get_id_p", utc_zb_write_attr_status_get_id_p, utc_startup, utc_startup},
+       {"utc_zb_write_attr_status_get_id_n", utc_zb_write_attr_status_get_id_n, utc_startup, utc_startup},
+#endif /* SUPPORT_ZCL_WRITE_ATTRIBUTE_STATUS */
+
+#ifdef SUPPORT_ZCL_REPORT_CONFIG_REPORT
+       /* Zigbee ZCL - Report Configuration Record Getter/Setter */
+       {"utc_zb_report_config_record_create_p", utc_zb_report_config_record_create_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_create_n", utc_zb_report_config_record_create_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_clone_p", utc_zb_report_config_record_clone_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_clone_n", utc_zb_report_config_record_clone_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_destroy_p", utc_zb_report_config_record_destroy_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_destroy_n", utc_zb_report_config_record_destroy_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_set_dir_p", utc_zb_report_config_record_set_dir_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_set_dir_n", utc_zb_report_config_record_set_dir_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_get_dir_p", utc_zb_report_config_record_get_dir_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_get_dir_n", utc_zb_report_config_record_get_dir_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_set_id_p", utc_zb_report_config_record_set_id_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_set_id_n", utc_zb_report_config_record_set_id_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_get_id_p", utc_zb_report_config_record_get_id_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_get_id_n", utc_zb_report_config_record_get_id_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_set_min_interval_p", utc_zb_report_config_record_set_min_interval_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_set_min_interval_n", utc_zb_report_config_record_set_min_interval_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_get_min_interval_p", utc_zb_report_config_record_get_min_interval_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_get_min_interval_n", utc_zb_report_config_record_get_min_interval_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_set_max_interval_p", utc_zb_report_config_record_set_max_interval_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_set_max_interval_n", utc_zb_report_config_record_set_max_interval_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_get_max_interval_p", utc_zb_report_config_record_get_max_interval_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_get_max_interval_n", utc_zb_report_config_record_get_max_interval_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_set_timeout_p", utc_zb_report_config_record_set_timeout_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_set_timeout_n", utc_zb_report_config_record_set_timeout_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_get_timeout_p", utc_zb_report_config_record_get_timeout_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_get_timeout_n", utc_zb_report_config_record_get_timeout_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_set_change_p", utc_zb_report_config_record_set_change_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_set_change_n", utc_zb_report_config_record_set_change_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_get_change_p", utc_zb_report_config_record_get_change_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_get_change_n", utc_zb_report_config_record_get_change_n, utc_startup, utc_startup},
+#endif /* SUPPORT_ZCL_REPORT_CONFIG_REPORT */
+
+#ifdef SUPPORT_ZCL_READ_REPORT_CONFIG_RECORD
+       /* Zigbee ZCL - Read Report Configuration Record Getter/Setter */
+       {"utc_zb_read_report_config_record_create_p", utc_zb_read_report_config_record_create_p, utc_startup, utc_startup},
+       {"utc_zb_read_report_config_record_create_n", utc_zb_read_report_config_record_create_n, utc_startup, utc_startup},
+       {"utc_zb_read_report_config_record_destroy_p", utc_zb_read_report_config_record_destroy_p, utc_startup, utc_startup},
+       {"utc_zb_read_report_config_record_destroy_n", utc_zb_read_report_config_record_destroy_n, utc_startup, utc_startup},
+       {"utc_zb_read_report_config_record_set_dir_p", utc_zb_read_report_config_record_set_dir_p, utc_startup, utc_startup},
+       {"utc_zb_read_report_config_record_set_dir_n", utc_zb_read_report_config_record_set_dir_n, utc_startup, utc_startup},
+       {"utc_zb_read_report_config_record_set_id_p", utc_zb_read_report_config_record_set_id_p, utc_startup, utc_startup},
+       {"utc_zb_read_report_config_record_set_id_n", utc_zb_read_report_config_record_set_id_n, utc_startup, utc_startup},
+#endif /* SUPPORT_ZCL_READ_REPORT_CONFIG_RECORD */
+
+#ifdef SUPPORT_ZCL_REPORT_CONFIG_RESPONSE_RECORD
+       /* Zigbee ZCL - Report Configuration Response Getter/Setter */
+       {"utc_zb_report_config_response_record_clone_n", utc_zb_report_config_response_record_clone_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_response_record_destroy_n", utc_zb_report_config_response_record_destroy_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_response_record_get_status_n", utc_zb_report_config_response_record_get_status_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_response_record_get_dir_n", utc_zb_report_config_response_record_get_dir_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_response_record_get_id_n", utc_zb_report_config_response_record_get_id_n, utc_startup, utc_startup},
+#endif /* SUPPORT_ZCL_REPORT_CONFIG_RESPONSE_RECORD */
+
+       {NULL, NULL}
+};
+
+#endif // __TCT_ZIGBEE_NATIVE_H__
diff --git a/src/utc/zigbee/tct-zigbee-core_wearable.h b/src/utc/zigbee/tct-zigbee-core_wearable.h
new file mode 100644 (file)
index 0000000..0ddfb5b
--- /dev/null
@@ -0,0 +1,539 @@
+//
+// Copyright (c) 2014 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+#ifndef __TCT_ZIGBEE_NATIVE_H__
+#define __TCT_ZIGBEE_NATIVE_H__
+
+#include "testcase.h"
+#include "tct_common.h"
+#include "utc-zigbee.h"
+
+extern void utc_startup(void);
+extern void utc_cleanup(void);
+extern void utc_zdo_simple_desc_startup(void);
+extern void utc_zdo_simple_desc_cleanup(void);
+extern void utc_zdo_power_desc_startup(void);
+extern void utc_zdo_power_desc_cleanup(void);
+extern void utc_zdo_node_desc_startup(void);
+extern void utc_zdo_node_desc_cleanup(void);
+extern void utc_zdo_getter_startup(void);
+extern void utc_zdo_getter_cleanup(void);
+
+/* Zigbee APIs */
+extern int utc_zb_create_p(void);
+extern int utc_zb_create_n(void);
+extern int utc_zb_destroy_p(void);
+extern int utc_zb_destroy_n(void);
+extern int utc_zb_ev_get_enable_status_n(void);
+extern int utc_zb_ev_get_form_network_panid_n(void);
+extern int utc_zb_ev_get_join_count_n(void);
+extern int utc_zb_ev_get_join_ep_n(void);
+extern int utc_zb_ev_get_child_left_status_n(void);
+extern int utc_zb_ev_get_global_default_rsp_ep_n(void);
+extern int utc_zb_ev_get_global_default_rsp_cluster_id_n(void);
+extern int utc_zb_ev_get_global_default_rsp_command_id_n(void);
+extern int utc_zb_ev_get_global_default_rsp_status_n(void);
+extern int utc_zb_ev_get_enroll_request_src_ep_n(void);
+extern int utc_zb_ev_get_enroll_request_zone_type_n(void);
+extern int utc_zb_ev_get_enroll_request_mfg_code_n(void);
+extern int utc_zb_ev_get_ias_noti_src_ep_n(void);
+extern int utc_zb_ev_get_ias_noti_zone_status_n(void);
+extern int utc_zb_ev_get_ias_ext_noti_src_ep_n(void);
+extern int utc_zb_ev_get_ias_ext_noti_status_n(void);
+extern int utc_zb_ev_get_ias_ext_noti_zone_status_n(void);
+extern int utc_zb_ev_get_ias_ext_noti_delay_n(void);
+extern int utc_zb_ev_get_ias_ext_noti_zone_id_n(void);
+extern int utc_zb_set_event_cb_p(void);
+extern int utc_zb_set_event_cb_n(void);
+extern int utc_zb_form_network_p(void);
+extern int utc_zb_form_network_n(void);
+extern int utc_zb_disable_network_p(void);
+extern int utc_zb_disable_network_n(void);
+extern int utc_zb_leave_device_p(void);
+extern int utc_zb_leave_device_n(void);
+extern int utc_zb_permit_join_p(void);
+extern int utc_zb_permit_join_n(void);
+extern int utc_zb_get_controller_mac_address_p(void);
+extern int utc_zb_get_controller_mac_address_n(void);
+extern int utc_zb_get_network_info_p(void);
+extern int utc_zb_get_network_info_n(void);
+
+extern int utc_zb_end_dev_get_ep_list_p(void);
+extern int utc_zb_end_dev_get_ep_list_n(void);
+extern int utc_zb_end_dev_get_cluster_list_p(void);
+extern int utc_zb_end_dev_get_cluster_list_n(void);
+extern int utc_zb_end_dev_get_end_dev_info_list_p(void);
+extern int utc_zb_end_dev_get_end_dev_info_list_n1(void);
+extern int utc_zb_end_dev_get_end_dev_info_list_n2(void);
+extern int utc_zb_end_dev_info_create_p(void);
+extern int utc_zb_end_dev_info_create_n(void);
+extern int utc_zb_end_dev_info_clone_p(void);
+extern int utc_zb_end_dev_info_clone_n(void);
+extern int utc_zb_end_dev_info_destroy_p(void);
+extern int utc_zb_end_dev_info_destroy_n(void);
+extern int utc_zb_end_dev_info_list_free_p(void);
+extern int utc_zb_end_dev_info_list_free_n(void);
+extern int utc_zb_end_dev_info_get_network_address_n(void);
+extern int utc_zb_end_dev_info_get_ieee_address_n(void);
+extern int utc_zb_end_dev_info_get_num_of_ep_n(void);
+extern int utc_zb_end_dev_info_get_ep_list_n(void);
+extern int utc_zb_end_dev_info_get_mac_capability_n(void);
+extern int utc_zb_end_dev_info_get_alternative_pan_coordinator_n(void);
+extern int utc_zb_end_dev_info_get_device_id_n(void);
+extern int utc_zb_end_dev_info_get_profile_id_n(void);
+extern int utc_zb_end_dev_info_get_power_source_n(void);
+extern int utc_zb_end_dev_info_get_security_capabilty_n(void);
+
+/* Zigbee ZDO */
+
+#ifdef SUPPORT_SIMPLE_DESCRIPTION
+extern int utc_zb_simple_desc_create_p(void);
+extern int utc_zb_simple_desc_create_n(void);
+extern int utc_zb_simple_desc_destroy_p(void);
+extern int utc_zb_simple_desc_destroy_n(void);
+extern int utc_zb_simple_desc_clone_p(void);
+extern int utc_zb_simple_desc_clone_n(void);
+extern int utc_zb_simple_desc_get_ep_p(void);
+extern int utc_zb_simple_desc_get_ep_n(void);
+extern int utc_zb_simple_desc_set_ep_p(void);
+extern int utc_zb_simple_desc_set_ep_n(void);
+extern int utc_zb_simple_desc_get_profile_id_p(void);
+extern int utc_zb_simple_desc_get_profile_id_n(void);
+extern int utc_zb_simple_desc_set_profile_id_p(void);
+extern int utc_zb_simple_desc_set_profile_id_n(void);
+extern int utc_zb_simple_desc_get_device_id_p(void);
+extern int utc_zb_simple_desc_get_device_id_n(void);
+extern int utc_zb_simple_desc_set_device_id_p(void);
+extern int utc_zb_simple_desc_set_device_id_n(void);
+extern int utc_zb_simple_desc_get_device_ver_p(void);
+extern int utc_zb_simple_desc_get_device_ver_n(void);
+extern int utc_zb_simple_desc_set_device_ver_p(void);
+extern int utc_zb_simple_desc_set_device_ver_n(void);
+extern int utc_zb_simple_desc_get_num_of_in_clusters_p(void);
+extern int utc_zb_simple_desc_get_num_of_in_clusters_n(void);
+extern int utc_zb_simple_desc_set_num_of_in_clusters_p(void);
+extern int utc_zb_simple_desc_set_num_of_in_clusters_n(void);
+extern int utc_zb_simple_desc_get_num_of_out_clusters_p(void);
+extern int utc_zb_simple_desc_get_num_of_out_clusters_n(void);
+extern int utc_zb_simple_desc_set_num_of_out_clusters_p(void);
+extern int utc_zb_simple_desc_set_num_of_out_clusters_n(void);
+extern int utc_zb_simple_desc_get_in_clusters_p(void);
+extern int utc_zb_simple_desc_get_in_clusters_n(void);
+extern int utc_zb_simple_desc_set_in_clusters_p(void);
+extern int utc_zb_simple_desc_set_in_clusters_n(void);
+extern int utc_zb_simple_desc_get_out_clusters_p(void);
+extern int utc_zb_simple_desc_get_out_clusters_n(void);
+extern int utc_zb_simple_desc_set_out_clusters_p(void);
+extern int utc_zb_simple_desc_set_out_clusters_n(void);
+#endif /* SUPPORT_SIMPLE_DESCRIPTION */
+
+#ifdef SUPPORT_ZDO_DEVICE_DISCOVERY_MANAGER
+/* Zigbee ZDO Device Discovery */
+extern int utc_zb_zdo_nwk_addr_req_p(void);
+extern int utc_zb_zdo_nwk_addr_req_n(void);
+extern int utc_zb_zdo_ieee_addr_req_p(void);
+extern int utc_zb_zdo_ieee_addr_req_n(void);
+extern int utc_zb_zdo_active_ep_p(void);
+extern int utc_zb_zdo_active_ep_n(void);
+extern int utc_zb_zdo_simple_desc_req_p(void);
+extern int utc_zb_zdo_simple_desc_req_n(void);
+#endif /* SUPPORT_ZDO_DEVICE_DISCOVERY_MANAGER */
+
+#ifdef SUPPORT_ZCL_GLOBAL_COMMNAD_CLUSTER
+/* Global Command */
+extern int utc_zb_zcl_global_attr_read_p(void);
+extern int utc_zb_zcl_global_attr_read_n(void);
+extern int utc_zb_zcl_global_attr_write_p(void);
+extern int utc_zb_zcl_global_attr_write_n(void);
+extern int utc_zb_zcl_global_attr_write_undivided_p(void);
+extern int utc_zb_zcl_global_attr_write_undivided_n(void);
+extern int utc_zb_zcl_global_attr_write_no_rsp_p(void);
+extern int utc_zb_zcl_global_attr_write_no_rsp_n(void);
+extern int utc_zb_zcl_global_config_report_write_p(void);
+extern int utc_zb_zcl_global_config_report_write_n(void);
+extern int utc_zb_zcl_global_config_report_read_p(void);
+extern int utc_zb_zcl_global_config_report_read_n(void);
+extern int utc_zb_zcl_global_config_report_read_n(void);
+#endif /* SUPPORT_ZCL_GLOBAL_COMMNAD_CLUSTER */
+
+#ifdef SUPPORT_ZCL_READ_ATTRIBUTE_STATUS_RECORD
+extern int utc_zb_read_attr_status_record_create_p(void);
+extern int utc_zb_read_attr_status_record_create_n(void);
+extern int utc_zb_read_attr_status_record_clone_p(void);
+extern int utc_zb_read_attr_status_record_clone_n(void);
+extern int utc_zb_read_attr_status_record_destroy_p(void);
+extern int utc_zb_read_attr_status_record_destroy_n(void);
+extern int utc_zb_read_attr_status_record_set_id_p(void);
+extern int utc_zb_read_attr_status_record_set_id_n(void);
+extern int utc_zb_read_attr_status_record_get_id_p(void);
+extern int utc_zb_read_attr_status_record_get_id_n(void);
+extern int utc_zb_read_attr_status_record_set_status_p(void);
+extern int utc_zb_read_attr_status_record_set_status_n(void);
+extern int utc_zb_read_attr_status_record_get_status_p(void);
+extern int utc_zb_read_attr_status_record_get_status_n(void);
+extern int utc_zb_read_attr_status_record_set_type_p(void);
+extern int utc_zb_read_attr_status_record_set_type_n(void);
+extern int utc_zb_read_attr_status_record_get_type_p(void);
+extern int utc_zb_read_attr_status_record_get_type_n(void);
+extern int utc_zb_read_attr_status_record_set_value_p(void);
+extern int utc_zb_read_attr_status_record_set_value_n(void);
+extern int utc_zb_read_attr_status_record_get_value_p(void);
+extern int utc_zb_read_attr_status_record_get_value_n(void);
+#endif /* SUPPORT_ZCL_READ_ATTRIBUTE_STATUS_RECORD */
+
+#ifdef SUPPORT_ZCL_WRITE_ATTRIBUTE_STATUS
+extern int utc_zb_write_attr_record_create_p(void);
+extern int utc_zb_write_attr_record_create_n(void);
+extern int utc_zb_write_attr_record_destroy_p(void);
+extern int utc_zb_write_attr_record_destroy_n(void);
+extern int utc_zb_write_attr_record_set_id_p(void);
+extern int utc_zb_write_attr_record_set_id_n(void);
+extern int utc_zb_write_attr_record_set_value_p(void);
+extern int utc_zb_write_attr_record_set_value_n(void);
+extern int utc_zb_write_attr_status_create_p(void);
+extern int utc_zb_write_attr_status_create_n(void);
+extern int utc_zb_write_attr_status_destroy_p(void);
+extern int utc_zb_write_attr_status_destroy_n(void);
+extern int utc_zb_write_attr_status_set_status_p(void);
+extern int utc_zb_write_attr_status_set_status_n(void);
+extern int utc_zb_write_attr_status_get_status_p(void);
+extern int utc_zb_write_attr_status_get_status_n(void);
+extern int utc_zb_write_attr_status_set_id_p(void);
+extern int utc_zb_write_attr_status_set_id_n(void);
+extern int utc_zb_write_attr_status_get_id_p(void);
+extern int utc_zb_write_attr_status_get_id_n(void);
+#endif /* SUPPORT_ZCL_WRITE_ATTRIBUTE_STATUS */
+
+#ifdef SUPPORT_ZCL_REPORT_CONFIG_REPORT
+extern int utc_zb_report_config_record_create_p(void);
+extern int utc_zb_report_config_record_create_n(void);
+extern int utc_zb_report_config_record_clone_p(void);
+extern int utc_zb_report_config_record_clone_n(void);
+extern int utc_zb_report_config_record_destroy_p(void);
+extern int utc_zb_report_config_record_destroy_n(void);
+extern int utc_zb_report_config_record_set_dir_p(void);
+extern int utc_zb_report_config_record_set_dir_n(void);
+extern int utc_zb_report_config_record_get_dir_p(void);
+extern int utc_zb_report_config_record_get_dir_n(void);
+extern int utc_zb_report_config_record_set_id_p(void);
+extern int utc_zb_report_config_record_set_id_n(void);
+extern int utc_zb_report_config_record_get_id_p(void);
+extern int utc_zb_report_config_record_get_id_n(void);
+extern int utc_zb_report_config_record_set_min_interval_p(void);
+extern int utc_zb_report_config_record_set_min_interval_n(void);
+extern int utc_zb_report_config_record_get_min_interval_p(void);
+extern int utc_zb_report_config_record_get_min_interval_n(void);
+extern int utc_zb_report_config_record_set_max_interval_p(void);
+extern int utc_zb_report_config_record_set_max_interval_n(void);
+extern int utc_zb_report_config_record_get_max_interval_p(void);
+extern int utc_zb_report_config_record_get_max_interval_n(void);
+extern int utc_zb_report_config_record_set_timeout_p(void);
+extern int utc_zb_report_config_record_set_timeout_n(void);
+extern int utc_zb_report_config_record_get_timeout_p(void);
+extern int utc_zb_report_config_record_get_timeout_n(void);
+extern int utc_zb_report_config_record_set_change_p(void);
+extern int utc_zb_report_config_record_set_change_n(void);
+extern int utc_zb_report_config_record_get_change_p(void);
+extern int utc_zb_report_config_record_get_change_n(void);
+#endif /* SUPPORT_ZCL_REPORT_CONFIG_REPORT */
+
+#ifdef SUPPORT_ZCL_READ_REPORT_CONFIG_RECORD
+extern int utc_zb_read_report_config_record_create_p(void);
+extern int utc_zb_read_report_config_record_create_n(void);
+extern int utc_zb_read_report_config_record_destroy_p(void);
+extern int utc_zb_read_report_config_record_destroy_n(void);
+extern int utc_zb_read_report_config_record_set_dir_p(void);
+extern int utc_zb_read_report_config_record_set_dir_n(void);
+extern int utc_zb_read_report_config_record_set_id_p(void);
+extern int utc_zb_read_report_config_record_set_id_n(void);
+#endif /* SUPPORT_ZCL_READ_REPORT_CONFIG_RECORD */
+
+#ifdef SUPPORT_ZCL_REPORT_CONFIG_RESPONSE_RECORD
+extern int utc_zb_report_config_response_record_clone_n(void);
+extern int utc_zb_report_config_response_record_destroy_n(void);
+extern int utc_zb_report_config_response_record_get_status_n(void);
+extern int utc_zb_report_config_response_record_get_dir_n(void);
+extern int utc_zb_report_config_response_record_get_id_n(void);
+#endif /* SUPPORT_ZCL_REPORT_CONFIG_RESPONSE_RECORD */
+
+#ifdef SUPPORT_ZCL_IAS_ZONE_CLUSTER
+/* IAS Zone Cluster */
+extern int utc_zb_zcl_zone_enroll_response_p(void);
+extern int utc_zb_zcl_zone_enroll_response_n(void);
+#endif /* SUPPORT_ZCL_IAS_ZONE_CLUSTER */
+
+#ifdef SUPPORT_ZCL_ON_OFF_CLUSTER
+/* On/Off Cluster */
+extern int utc_zb_zcl_on_off_control_p(void);
+extern int utc_zb_zcl_on_off_control_n(void);
+#endif /* SUPPORT_ZCL_ON_OFF_CLUSTER */
+
+testcase tc_array[] = {
+       /* Zigbee APIs */
+       {"utc_zb_create_p", utc_zb_create_p, utc_startup, utc_cleanup},
+       {"utc_zb_create_n", utc_zb_create_n, utc_startup, utc_cleanup},
+       {"utc_zb_destroy_p", utc_zb_destroy_p, utc_startup, utc_cleanup},
+       {"utc_zb_destroy_n", utc_zb_destroy_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_enable_status_n",  utc_zb_ev_get_enable_status_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_form_network_panid_n", utc_zb_ev_get_form_network_panid_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_join_count_n", utc_zb_ev_get_join_count_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_join_ep_n", utc_zb_ev_get_join_ep_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_child_left_status_n", utc_zb_ev_get_child_left_status_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_global_default_rsp_ep_n", utc_zb_ev_get_global_default_rsp_ep_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_global_default_rsp_cluster_id_n", utc_zb_ev_get_global_default_rsp_cluster_id_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_global_default_rsp_command_id_n", utc_zb_ev_get_global_default_rsp_command_id_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_global_default_rsp_status_n", utc_zb_ev_get_global_default_rsp_status_n, utc_startup, utc_cleanup},
+
+       {"utc_zb_ev_get_enroll_request_src_ep_n", utc_zb_ev_get_enroll_request_src_ep_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_enroll_request_zone_type_n", utc_zb_ev_get_enroll_request_zone_type_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_enroll_request_mfg_code_n", utc_zb_ev_get_enroll_request_mfg_code_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_ias_noti_src_ep_n", utc_zb_ev_get_ias_noti_src_ep_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_ias_noti_zone_status_n", utc_zb_ev_get_ias_noti_zone_status_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_ias_ext_noti_src_ep_n", utc_zb_ev_get_ias_ext_noti_src_ep_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_ias_ext_noti_status_n", utc_zb_ev_get_ias_ext_noti_status_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_ias_ext_noti_zone_status_n", utc_zb_ev_get_ias_ext_noti_zone_status_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_ias_ext_noti_delay_n", utc_zb_ev_get_ias_ext_noti_delay_n, utc_startup, utc_cleanup},
+       {"utc_zb_ev_get_ias_ext_noti_zone_id_n", utc_zb_ev_get_ias_ext_noti_zone_id_n, utc_startup, utc_cleanup},
+       {"utc_zb_set_event_cb_p", utc_zb_set_event_cb_p, utc_startup, utc_cleanup},
+       {"utc_zb_set_event_cb_n", utc_zb_set_event_cb_n, utc_startup, utc_cleanup},
+       {"utc_zb_form_network_p", utc_zb_form_network_p, utc_startup, utc_cleanup},
+       {"utc_zb_form_network_n", utc_zb_form_network_n, utc_startup, utc_cleanup},
+       {"utc_zb_disable_network_p", utc_zb_disable_network_p, utc_startup, utc_cleanup},
+       {"utc_zb_disable_network_n", utc_zb_disable_network_n, utc_startup, utc_cleanup},
+       {"utc_zb_leave_device_p", utc_zb_leave_device_p, utc_startup, utc_cleanup},
+       {"utc_zb_leave_device_n", utc_zb_leave_device_n, utc_startup, utc_cleanup},
+       {"utc_zb_permit_join_p", utc_zb_permit_join_p, utc_startup, utc_cleanup},
+       {"utc_zb_permit_join_n", utc_zb_permit_join_n, utc_startup, utc_cleanup},
+       {"utc_zb_get_controller_mac_address_p", utc_zb_get_controller_mac_address_p, utc_startup, utc_cleanup},
+       {"utc_zb_get_controller_mac_address_n", utc_zb_get_controller_mac_address_n, utc_startup, utc_cleanup},
+       {"utc_zb_get_network_info_p", utc_zb_get_network_info_p, utc_startup, utc_cleanup},
+       {"utc_zb_get_network_info_n", utc_zb_get_network_info_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_get_ep_list_p", utc_zb_end_dev_get_ep_list_p, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_get_ep_list_n", utc_zb_end_dev_get_ep_list_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_get_cluster_list_p", utc_zb_end_dev_get_cluster_list_p, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_get_cluster_list_n", utc_zb_end_dev_get_cluster_list_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_get_end_dev_info_list_p", utc_zb_end_dev_get_end_dev_info_list_p, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_get_end_dev_info_list_n1", utc_zb_end_dev_get_end_dev_info_list_n1, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_get_end_dev_info_list_n2", utc_zb_end_dev_get_end_dev_info_list_n2, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_list_free_p", utc_zb_end_dev_info_list_free_p, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_list_free_n", utc_zb_end_dev_info_list_free_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_create_p", utc_zb_end_dev_info_create_p, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_create_n", utc_zb_end_dev_info_create_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_clone_p", utc_zb_end_dev_info_clone_p, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_clone_n", utc_zb_end_dev_info_clone_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_destroy_p", utc_zb_end_dev_info_destroy_p, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_destroy_n", utc_zb_end_dev_info_destroy_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_get_network_address_n", utc_zb_end_dev_info_get_network_address_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_get_ieee_address_n", utc_zb_end_dev_info_get_ieee_address_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_get_num_of_ep_n", utc_zb_end_dev_info_get_num_of_ep_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_get_ep_list_n", utc_zb_end_dev_info_get_ep_list_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_get_mac_capability_n", utc_zb_end_dev_info_get_mac_capability_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_get_alternative_pan_coordinator_n", utc_zb_end_dev_info_get_alternative_pan_coordinator_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_get_device_id_n", utc_zb_end_dev_info_get_device_id_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_get_profile_id_n", utc_zb_end_dev_info_get_profile_id_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_get_power_source_n", utc_zb_end_dev_info_get_power_source_n, utc_startup, utc_cleanup},
+       {"utc_zb_end_dev_info_get_security_capabilty_n", utc_zb_end_dev_info_get_security_capabilty_n, utc_startup, utc_cleanup},
+
+#ifdef SUPPORT_SIMPLE_DESCRIPTION
+       /* Zigbee ZDO - Simple Descripter Getter/Setter */
+       {"utc_zb_simple_desc_create_p", utc_zb_simple_desc_create_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_create_n", utc_zb_simple_desc_create_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_destroy_p", utc_zb_simple_desc_destroy_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_destroy_n", utc_zb_simple_desc_destroy_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_clone_p", utc_zb_simple_desc_clone_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_clone_n", utc_zb_simple_desc_clone_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_ep_p", utc_zb_simple_desc_get_ep_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_ep_n", utc_zb_simple_desc_get_ep_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_ep_p", utc_zb_simple_desc_set_ep_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_ep_n", utc_zb_simple_desc_set_ep_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_profile_id_p", utc_zb_simple_desc_get_profile_id_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_profile_id_n", utc_zb_simple_desc_get_profile_id_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_profile_id_p", utc_zb_simple_desc_set_profile_id_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_profile_id_n", utc_zb_simple_desc_set_profile_id_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_device_id_p", utc_zb_simple_desc_get_device_id_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_device_id_n", utc_zb_simple_desc_get_device_id_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_device_id_p", utc_zb_simple_desc_set_device_id_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_device_id_n", utc_zb_simple_desc_set_device_id_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_device_ver_p", utc_zb_simple_desc_get_device_ver_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_device_ver_n", utc_zb_simple_desc_get_device_ver_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_device_ver_p", utc_zb_simple_desc_set_device_ver_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_device_ver_n", utc_zb_simple_desc_set_device_ver_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_num_of_in_clusters_p", utc_zb_simple_desc_get_num_of_in_clusters_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_num_of_in_clusters_n", utc_zb_simple_desc_get_num_of_in_clusters_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_num_of_in_clusters_p", utc_zb_simple_desc_set_num_of_in_clusters_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_num_of_in_clusters_n", utc_zb_simple_desc_set_num_of_in_clusters_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_num_of_out_clusters_p", utc_zb_simple_desc_get_num_of_out_clusters_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_num_of_out_clusters_n", utc_zb_simple_desc_get_num_of_out_clusters_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_num_of_out_clusters_p", utc_zb_simple_desc_set_num_of_out_clusters_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_num_of_out_clusters_n", utc_zb_simple_desc_set_num_of_out_clusters_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_in_clusters_p", utc_zb_simple_desc_get_in_clusters_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_in_clusters_n", utc_zb_simple_desc_get_in_clusters_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_in_clusters_p", utc_zb_simple_desc_set_in_clusters_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_in_clusters_n", utc_zb_simple_desc_set_in_clusters_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_out_clusters_p", utc_zb_simple_desc_get_out_clusters_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_get_out_clusters_n", utc_zb_simple_desc_get_out_clusters_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_out_clusters_p", utc_zb_simple_desc_set_out_clusters_p, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+       {"utc_zb_simple_desc_set_out_clusters_n", utc_zb_simple_desc_set_out_clusters_n, utc_zdo_simple_desc_startup, utc_zdo_simple_desc_cleanup},
+#endif /* SUPPORT_SIMPLE_DESCRIPTION*/
+
+#ifdef SUPPORT_ZDO_DEVICE_DISCOVERY_MANAGER
+       /* Zigbee ZDO - Device Discovery */
+       {"utc_zb_zdo_nwk_addr_req_p", utc_zb_zdo_nwk_addr_req_p, utc_startup, utc_startup},
+       {"utc_zb_zdo_nwk_addr_req_n", utc_zb_zdo_nwk_addr_req_n, utc_startup, utc_startup},
+       {"utc_zb_zdo_ieee_addr_req_p", utc_zb_zdo_ieee_addr_req_p, utc_startup, utc_startup},
+       {"utc_zb_zdo_ieee_addr_req_n", utc_zb_zdo_ieee_addr_req_n, utc_startup, utc_startup},
+       {"utc_zb_zdo_active_ep_p", utc_zb_zdo_active_ep_p, utc_startup, utc_startup},
+       {"utc_zb_zdo_active_ep_n", utc_zb_zdo_active_ep_n, utc_startup, utc_startup},
+       {"utc_zb_zdo_simple_desc_req_p", utc_zb_zdo_simple_desc_req_p, utc_startup, utc_startup},
+       {"utc_zb_zdo_simple_desc_req_n", utc_zb_zdo_simple_desc_req_n, utc_startup, utc_startup},
+#endif /* SUPPORT_ZDO_DEVICE_DISCOVERY_MANAGER */
+
+#if defined(SUPPORT_ZCL_GLOBAL_COMMNAD_CLUSTER)
+       /* Zigbee ZCL - Global Cluster */
+       {"utc_zb_zcl_global_attr_read_p", utc_zb_zcl_global_attr_read_p, utc_startup, utc_startup},
+       {"utc_zb_zcl_global_attr_read_n", utc_zb_zcl_global_attr_read_n, utc_startup, utc_startup},
+       {"utc_zb_zcl_global_attr_write_p", utc_zb_zcl_global_attr_write_p, utc_startup, utc_startup},
+       {"utc_zb_zcl_global_attr_write_n", utc_zb_zcl_global_attr_write_n, utc_startup, utc_startup},
+       {"utc_zb_zcl_global_attr_write_undivided_p", utc_zb_zcl_global_attr_write_undivided_p, utc_startup, utc_startup},
+       {"utc_zb_zcl_global_attr_write_undivided_n", utc_zb_zcl_global_attr_write_undivided_n, utc_startup, utc_startup},
+       {"utc_zb_zcl_global_attr_write_no_rsp_p", utc_zb_zcl_global_attr_write_no_rsp_p, utc_startup, utc_startup},
+       {"utc_zb_zcl_global_attr_write_no_rsp_n", utc_zb_zcl_global_attr_write_no_rsp_n, utc_startup, utc_startup},
+       {"utc_zb_zcl_global_config_report_write_p", utc_zb_zcl_global_config_report_write_p, utc_startup, utc_startup},
+       {"utc_zb_zcl_global_config_report_write_n", utc_zb_zcl_global_config_report_write_n, utc_startup, utc_startup},
+       {"utc_zb_zcl_global_config_report_read_p", utc_zb_zcl_global_config_report_write_n, utc_startup, utc_startup},
+       {"utc_zb_zcl_global_config_report_read_n", utc_zb_zcl_global_config_report_read_n, utc_startup, utc_startup},
+#endif /* SUPPORT_ZCL_GLOBAL_COMMAND_CLUSTER */
+
+#ifdef SUPPORT_ZCL_IAS_ZONE_CLUSTER
+       /* Zigbee ZCL - IAS Zone Cluster */
+       {"utc_zb_zcl_zone_enroll_response_p", utc_zb_zcl_zone_enroll_response_p, utc_startup, utc_startup},
+       {"utc_zb_zcl_zone_enroll_response_n", utc_zb_zcl_zone_enroll_response_p, utc_startup, utc_startup},
+#endif /* SUPPORT_ZCL_IAS_ZONE_CLUSTER */
+
+#ifdef SUPPORT_ZCL_ON_OFF_CLUSTER
+       /* Zigbee ZCL - On/Off Cluster */
+       {"utc_zb_zcl_on_off_control_p", utc_zb_zcl_on_off_control_p, utc_startup, utc_startup},
+       {"utc_zb_zcl_on_off_control_n", utc_zb_zcl_on_off_control_n, utc_startup, utc_startup},
+#endif /* SUPPORT_ZCL_ON_OFF_CLUSTER */
+
+#ifdef SUPPORT_ZCL_READ_ATTRIBUTE_STATUS_RECORD
+       /* Zigbee ZCL - Read Attribute Status Record Getter/Setter */
+       {"utc_zb_read_attr_status_record_create_p", utc_zb_read_attr_status_record_create_p, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_create_n", utc_zb_read_attr_status_record_create_n, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_clone_p", utc_zb_read_attr_status_record_clone_p, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_clone_n", utc_zb_read_attr_status_record_clone_n, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_destroy_p", utc_zb_read_attr_status_record_destroy_p, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_destroy_n", utc_zb_read_attr_status_record_destroy_n, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_set_id_p", utc_zb_read_attr_status_record_set_id_p, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_set_id_n", utc_zb_read_attr_status_record_set_id_n, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_get_id_p", utc_zb_read_attr_status_record_get_id_p, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_get_id_n", utc_zb_read_attr_status_record_get_id_n, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_set_status_p", utc_zb_read_attr_status_record_set_status_p, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_set_status_n", utc_zb_read_attr_status_record_set_status_n, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_get_status_p", utc_zb_read_attr_status_record_get_status_p, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_get_status_n", utc_zb_read_attr_status_record_get_status_n, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_set_type_p", utc_zb_read_attr_status_record_get_status_p, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_set_type_n", utc_zb_read_attr_status_record_set_type_n, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_get_type_p", utc_zb_read_attr_status_record_get_type_p, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_get_type_n", utc_zb_read_attr_status_record_get_type_n, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_set_value_p", utc_zb_read_attr_status_record_set_value_p, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_set_value_n", utc_zb_read_attr_status_record_set_value_n, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_get_value_p", utc_zb_read_attr_status_record_get_value_p, utc_startup, utc_startup},
+       {"utc_zb_read_attr_status_record_get_value_n", utc_zb_read_attr_status_record_get_value_n, utc_startup, utc_startup},
+#endif /* SUPPORT_ZCL_READ_ATTRIBUTE_STATUS_RECORD */
+
+#ifdef SUPPORT_ZCL_WRITE_ATTRIBUTE_STATUS
+       /* Zigbee ZCL - Write Attribute Status Record Getter/Setter */
+       {"utc_zb_write_attr_record_create_p", utc_zb_write_attr_record_create_p, utc_startup, utc_startup},
+       {"utc_zb_write_attr_record_create_n", utc_zb_write_attr_record_create_n, utc_startup, utc_startup},
+       {"utc_zb_write_attr_record_destroy_p", utc_zb_write_attr_record_destroy_p, utc_startup, utc_startup},
+       {"utc_zb_write_attr_record_destroy_n", utc_zb_write_attr_record_destroy_n, utc_startup, utc_startup},
+       {"utc_zb_write_attr_record_set_id_p", utc_zb_write_attr_record_set_id_p, utc_startup, utc_startup},
+       {"utc_zb_write_attr_record_set_id_n", utc_zb_write_attr_record_set_id_n, utc_startup, utc_startup},
+       {"utc_zb_write_attr_record_set_value_p", utc_zb_write_attr_record_set_value_p, utc_startup, utc_startup},
+       {"utc_zb_write_attr_record_set_value_n", utc_zb_write_attr_record_set_value_n, utc_startup, utc_startup},
+       {"utc_zb_write_attr_status_create_p", utc_zb_write_attr_status_create_p, utc_startup, utc_startup},
+       {"utc_zb_write_attr_status_create_n", utc_zb_write_attr_status_create_n, utc_startup, utc_startup},
+       {"utc_zb_write_attr_status_destroy_p", utc_zb_write_attr_status_destroy_p, utc_startup, utc_startup},
+       {"utc_zb_write_attr_status_destroy_n", utc_zb_write_attr_status_destroy_n, utc_startup, utc_startup},
+       {"utc_zb_write_attr_status_set_status_p", utc_zb_write_attr_status_set_status_p, utc_startup, utc_startup},
+       {"utc_zb_write_attr_status_set_status_n", utc_zb_write_attr_status_set_status_n, utc_startup, utc_startup},
+       {"utc_zb_write_attr_status_get_status_p", utc_zb_write_attr_status_get_status_p, utc_startup, utc_startup},
+       {"utc_zb_write_attr_status_get_status_n", utc_zb_write_attr_status_get_status_n, utc_startup, utc_startup},
+       {"utc_zb_write_attr_status_set_id_p", utc_zb_write_attr_status_set_id_p, utc_startup, utc_startup},
+       {"utc_zb_write_attr_status_set_id_n", utc_zb_write_attr_status_set_id_n, utc_startup, utc_startup},
+       {"utc_zb_write_attr_status_get_id_p", utc_zb_write_attr_status_get_id_p, utc_startup, utc_startup},
+       {"utc_zb_write_attr_status_get_id_n", utc_zb_write_attr_status_get_id_n, utc_startup, utc_startup},
+#endif /* SUPPORT_ZCL_WRITE_ATTRIBUTE_STATUS */
+
+#ifdef SUPPORT_ZCL_REPORT_CONFIG_REPORT
+       /* Zigbee ZCL - Report Configuration Record Getter/Setter */
+       {"utc_zb_report_config_record_create_p", utc_zb_report_config_record_create_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_create_n", utc_zb_report_config_record_create_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_clone_p", utc_zb_report_config_record_clone_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_clone_n", utc_zb_report_config_record_clone_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_destroy_p", utc_zb_report_config_record_destroy_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_destroy_n", utc_zb_report_config_record_destroy_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_set_dir_p", utc_zb_report_config_record_set_dir_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_set_dir_n", utc_zb_report_config_record_set_dir_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_get_dir_p", utc_zb_report_config_record_get_dir_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_get_dir_n", utc_zb_report_config_record_get_dir_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_set_id_p", utc_zb_report_config_record_set_id_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_set_id_n", utc_zb_report_config_record_set_id_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_get_id_p", utc_zb_report_config_record_get_id_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_get_id_n", utc_zb_report_config_record_get_id_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_set_min_interval_p", utc_zb_report_config_record_set_min_interval_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_set_min_interval_n", utc_zb_report_config_record_set_min_interval_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_get_min_interval_p", utc_zb_report_config_record_get_min_interval_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_get_min_interval_n", utc_zb_report_config_record_get_min_interval_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_set_max_interval_p", utc_zb_report_config_record_set_max_interval_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_set_max_interval_n", utc_zb_report_config_record_set_max_interval_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_get_max_interval_p", utc_zb_report_config_record_get_max_interval_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_get_max_interval_n", utc_zb_report_config_record_get_max_interval_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_set_timeout_p", utc_zb_report_config_record_set_timeout_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_set_timeout_n", utc_zb_report_config_record_set_timeout_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_get_timeout_p", utc_zb_report_config_record_get_timeout_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_get_timeout_n", utc_zb_report_config_record_get_timeout_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_set_change_p", utc_zb_report_config_record_set_change_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_set_change_n", utc_zb_report_config_record_set_change_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_get_change_p", utc_zb_report_config_record_get_change_p, utc_startup, utc_startup},
+       {"utc_zb_report_config_record_get_change_n", utc_zb_report_config_record_get_change_n, utc_startup, utc_startup},
+#endif /* SUPPORT_ZCL_REPORT_CONFIG_REPORT */
+
+#ifdef SUPPORT_ZCL_READ_REPORT_CONFIG_RECORD
+       /* Zigbee ZCL - Read Report Configuration Record Getter/Setter */
+       {"utc_zb_read_report_config_record_create_p", utc_zb_read_report_config_record_create_p, utc_startup, utc_startup},
+       {"utc_zb_read_report_config_record_create_n", utc_zb_read_report_config_record_create_n, utc_startup, utc_startup},
+       {"utc_zb_read_report_config_record_destroy_p", utc_zb_read_report_config_record_destroy_p, utc_startup, utc_startup},
+       {"utc_zb_read_report_config_record_destroy_n", utc_zb_read_report_config_record_destroy_n, utc_startup, utc_startup},
+       {"utc_zb_read_report_config_record_set_dir_p", utc_zb_read_report_config_record_set_dir_p, utc_startup, utc_startup},
+       {"utc_zb_read_report_config_record_set_dir_n", utc_zb_read_report_config_record_set_dir_n, utc_startup, utc_startup},
+       {"utc_zb_read_report_config_record_set_id_p", utc_zb_read_report_config_record_set_id_p, utc_startup, utc_startup},
+       {"utc_zb_read_report_config_record_set_id_n", utc_zb_read_report_config_record_set_id_n, utc_startup, utc_startup},
+#endif /* SUPPORT_ZCL_READ_REPORT_CONFIG_RECORD */
+
+#ifdef SUPPORT_ZCL_REPORT_CONFIG_RESPONSE_RECORD
+       /* Zigbee ZCL - Report Configuration Response Getter/Setter */
+       {"utc_zb_report_config_response_record_clone_n", utc_zb_report_config_response_record_clone_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_response_record_destroy_n", utc_zb_report_config_response_record_destroy_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_response_record_get_status_n", utc_zb_report_config_response_record_get_status_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_response_record_get_dir_n", utc_zb_report_config_response_record_get_dir_n, utc_startup, utc_startup},
+       {"utc_zb_report_config_response_record_get_id_n", utc_zb_report_config_response_record_get_id_n, utc_startup, utc_startup},
+#endif /* SUPPORT_ZCL_REPORT_CONFIG_RESPONSE_RECORD */
+
+       {NULL, NULL}
+};
+
+#endif // __TCT_ZIGBEE_NATIVE_H__
diff --git a/src/utc/zigbee/utc-zigbee-common.h b/src/utc/zigbee/utc-zigbee-common.h
new file mode 100644 (file)
index 0000000..4af325a
--- /dev/null
@@ -0,0 +1,61 @@
+//
+// Copyright (c) 2014 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#ifndef _ZIGBEE_UTC_COMMON_H_
+#define _ZIGBEE_UTC_COMMON_H_
+
+#include <tct_common.h>
+#include <system_info.h>
+#include <dlog.h>
+
+#include <zigbee.h>
+
+FILE *g_fpLog;
+
+#define LOG(...) {\
+       g_fpLog = fopen(ERR_UTC_LOG, "a");\
+       fprintf(g_fpLog, __VA_ARGS__);\
+       fclose(g_fpLog);\
+       dlog_print(DLOG_INFO, "NativeTCT", "[%s:%d] %s", __FILE__, __LINE__, __VA_ARGS__);\
+}
+
+#define PRINT_RETURN(api, ret) {\
+       FPRINTF("[%s:%d] %s ret = %s\\n",\
+               __FILE__, __LINE__, api, zigbee_error_to_string(ret));\
+       dlog_print(DLOG_INFO, "NativeTCT", "[%s:%d] %s ret = %s",\
+               __FILE__, __LINE__, api, zigbee_error_to_string(ret));\
+}
+
+#define PRINT_RETURN1(api, file, line, ret) {\
+       FPRINTF("[%s:%d] %s ret = %s\\n",\
+               file, line, api, zigbee_error_to_string(ret));\
+       dlog_print(DLOG_INFO, "NativeTCT", "[%s:%d] %s ret = %s",\
+               file, line, api, zigbee_error_to_string(ret));\
+}
+
+void utc_startup(void);
+void utc_cleanup(void);
+int check_result_p(const char *api_name, const char *file_name, int line, int ret);
+int check_result_n(const char *api_name, const char *file_name, int line, int ret);
+
+const char* zb_zcl_get_status_str(zb_zcl_status_e status);
+int zb_zcl_get_analog_or_discret(zb_zcl_data_type_e type);
+int zb_zcl_get_data_size(zb_zcl_data_type_e type);
+const char* zb_zcl_get_data_type_str(zb_zcl_data_type_e type);
+const char* zb_zcl_get_cluster_id_str(zb_cluster_id clusterid);
+
+
+#endif  /* _ZIGBEE_UTC_COMMON_H_ */
diff --git a/src/utc/zigbee/utc-zigbee-zcl-global-commands.c b/src/utc/zigbee/utc-zigbee-zcl-global-commands.c
new file mode 100644 (file)
index 0000000..302165c
--- /dev/null
@@ -0,0 +1,610 @@
+//
+// Copyright (c) 2014 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+#include "assert.h"
+#include "utc-zigbee-common.h"
+
+extern bool g_feature;
+extern zb_zigbee_h handle;
+static zb_nwk_addr ha_addr16 = 0x1234;
+static zb_nwk_addr zll_addr16 = 0x5678;
+static zb_end_point zdo_ep = 0;
+static zb_end_point ha_ep = 1;
+static zb_end_point zll_ep = 2;
+
+static void _zb_zcl_global_attr_read_cb(
+       zb_nwk_addr addr16,
+       zb_end_point ep,
+       zb_cluster_id clusterid,
+       zb_zcl_read_attr_status_record_h* records,
+       int count,
+       void *user_data)
+{
+       int i;
+       int ret;
+       int len_of_val;
+
+       zb_attribute_id id;
+       zb_zcl_data_type_e type;
+       zb_zcl_status_e status;
+       unsigned char *buf = NULL;
+
+       LOG("_zb_zcl_global_attr_read_cb()");
+
+       if (NULL == records || 0 == count) {
+               LOG("Invalid records info");
+               LOG("records_info : [%p]", records);
+               return;
+       }
+
+       LOG("  Cluster ID   : 0x%04X (%s)", clusterid,
+               zb_zcl_get_cluster_id_str(clusterid));
+       LOG("  Node ID      : 0x%04X", addr16);
+       LOG("  End-Point    : 0x%02X", ep);
+       LOG("  Rec. Count  :    %d", count);
+
+       for (i = 0; i < count; i++) {
+
+               if (records && *records) {
+                       ret = zb_read_attr_status_record_get_id(records[i], &id);
+                       if (ZIGBEE_ERROR_NONE == ret)
+                               LOG("  Attribute ID : 0x%04X", id);
+
+                       ret = zb_read_attr_status_record_get_type(records[i], &type);
+                       if (ZIGBEE_ERROR_NONE == ret)
+                               LOG("  Type         : 0x%02X", type);
+
+                       ret = zb_read_attr_status_record_get_status(records[i], &status);
+                       if (ZIGBEE_ERROR_NONE == ret)
+                               LOG("  Status       : 0x%02X (%s)",
+                                       status, zb_zcl_get_status_str(status));
+
+                       ret = zb_read_attr_status_record_get_value(records[i],
+                               &type, &buf, &len_of_val);
+                       if (ZIGBEE_ERROR_NONE == ret && buf) {
+                               for (int j = 0; j < len_of_val; j++)
+                                       LOG("  value[%d] = 0x%02x", j, buf[j]);
+                               if (buf) {
+                                       free(buf);
+                                       buf = NULL;
+                               }
+                       }
+               }
+       }
+}
+
+static void _zb_zcl_global_attr_write_cb(
+       zb_nwk_addr addr16,
+       zb_end_point ep,
+       zb_cluster_id clusterid,
+       zb_zcl_write_attr_status_record_h* records,
+       int count,
+       void *user_data)
+{
+       int i;
+       zb_attribute_id id = 0;
+       zb_zcl_status_e status;
+
+       LOG("_zb_zcl_global_attr_write_cb()");
+
+       if (NULL == records || 0 == count) {
+               LOG("Invalid records info");
+               return;
+       }
+
+       for (i = 0; i < count; i++) {
+
+               LOG("  Cluster ID  : 0x%04X (%s)", clusterid,
+                       zb_zcl_get_cluster_id_str(clusterid));
+               LOG("  Node ID     : 0x%04X", addr16);
+               LOG("  End-Point   : 0x%02X", ep);
+               LOG("  Rec. Count  :    %d", count);
+
+               if (records) {
+                       if (ZIGBEE_ERROR_NONE == zb_write_attr_status_get_id(records[i], &id))
+                               LOG("  AttributeId : 0x%04X", id);
+               }
+               if (records) {
+                       if (ZIGBEE_ERROR_NONE == zb_write_attr_status_get_status(records[i], &status))
+                               LOG("  status      : 0x%02X (%s)",
+                                       status, zb_zcl_get_status_str(status));
+               }
+       }
+}
+
+static void _zb_zcl_global_config_report_write_write_cb(
+       zb_nwk_addr addr16,
+       zb_end_point ep,
+       zb_cluster_id clusterid,
+       zb_zcl_report_config_response_record_h* records,
+       int count,
+       void *user_data)
+{
+       int i;
+       zb_zcl_status_e status;
+
+       LOG("_zb_zcl_global_config_report_write_write_cb()");
+
+       if (NULL == records || 0 == count) {
+               LOG("Invalid records info");
+               return;
+       }
+
+       LOG("  count=%d", count);
+       for (i = 0; i < count; i++) {
+               if (ZIGBEE_ERROR_NONE == zb_report_config_response_record_get_status(
+                       records[i], &status))
+                       LOG("    [%d] status = 0x%02X (%s)",
+                               i, status, zb_zcl_get_status_str(status));
+       }
+}
+
+static void _zb_zcl_global_config_report_write_read_cb(
+       zb_nwk_addr addr16,
+       zb_end_point ep,
+       zb_cluster_id clusterid,
+       zb_zcl_reporting_config_record_h* records,
+       int count,
+       void *user_data)
+{
+       int ret;
+       int len_of_val;
+       int i = 0, j = 0;
+       unsigned char *buf = NULL;
+       unsigned short id, max_i, min_i;
+
+       zb_zcl_data_type_e type;
+
+       LOG("_zb_zcl_global_config_report_write_read_cb()");
+
+       if (NULL == records || 0 == count) {
+               LOG("Invalid records info");
+               return;
+       }
+
+       LOG("  cluster_id 0x%04X (%s)", clusterid,
+               zb_zcl_get_cluster_id_str(clusterid));
+       LOG("  nodeId     0x%04X", addr16);
+       LOG("  endpoint   0x%02X", ep);
+       LOG("  Rec. Count  :    %d", count);
+
+       while (i < count) {
+               LOG("    records[%d]", i);
+               if (ZIGBEE_ERROR_NONE == zb_report_config_record_get_id(records[i], &id))
+                       LOG("    AttributeId 0x%04X", id);
+               if (ZIGBEE_ERROR_NONE == zb_report_config_record_get_type(records[i], &type)) {
+                       /*if ((zb_zcl_get_analog_or_discret(type) == DATA_TYPE_ANALOG)) {*/
+                               LOG("    type 0x%02X", type);
+                               if (ZIGBEE_ERROR_NONE == zb_report_config_record_get_max_interval(
+                                       records[i], &max_i))
+                                       LOG("    Max Interval 0x%04X", max_i);
+                               if (ZIGBEE_ERROR_NONE == zb_report_config_record_get_min_interval(
+                                       records[i], &min_i))
+                                       LOG("    Min Interval 0x%04X", min_i);
+
+                               ret = zb_report_config_record_get_change(
+                                               records[i], &type, &buf, &len_of_val);
+
+                               if (ZIGBEE_ERROR_NONE == ret && buf) {
+                                       LOG("     type = [0x%2X][%s]", type, zb_zcl_get_data_type_str(type));
+                                               for (j = 0; j < len_of_val; j++)
+                                               LOG("      change[%d] = 0x%02x", j, buf[j]);
+                               }
+
+                               if (buf) {
+                                       free(buf);
+                                       buf = NULL;
+                               }
+                       /*
+                       } else {
+                               LOG("Unsuccessful Attempt\n");
+                       }
+                       */
+               }
+               i++;
+       }
+}
+
+//& purpose: A purpose of a first positive zb_zcl_global_attr_read.
+int utc_zb_zcl_global_attr_read_p(void)
+{
+       int ret;
+       unsigned short st_cluster_id = ZB_ZCL_CLUSTER_IAS_ZONE;
+       unsigned short st_attribute_id[] = {
+               ZB_ZCL_ATTR_ZONE_STATE,
+               ZB_ZCL_ATTR_ZONE_TYPE,
+               ZB_ZCL_ATTR_ZONE_STATUS,
+               ZB_ZCL_ATTR_IAS_CIE_ADDRESS,
+               ZB_ZCL_ATTR_ZONE_ID
+       };
+       int st_len_of_attr = sizeof(st_attribute_id) / sizeof(st_attribute_id[0]);
+       ret = zb_zcl_global_attr_read(handle, ha_addr16, ha_ep, zll_ep,
+                       ZB_ZCL_DEFAULT_RESPONSE_DISABLED, st_cluster_id, st_attribute_id,
+                       st_len_of_attr, _zb_zcl_global_attr_read_cb, NULL);
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_zcl_global_attr_read.
+int utc_zb_zcl_global_attr_read_n(void)
+{
+       int ret;
+       unsigned short st_cluster_id = ZB_ZCL_CLUSTER_IAS_ZONE;
+       unsigned short st_attribute_id[] = {
+               ZB_ZCL_ATTR_ZONE_STATE,
+               ZB_ZCL_ATTR_ZONE_TYPE,
+               ZB_ZCL_ATTR_ZONE_STATUS,
+               ZB_ZCL_ATTR_IAS_CIE_ADDRESS,
+               ZB_ZCL_ATTR_ZONE_ID
+       };
+       int st_len_of_attr = sizeof(st_attribute_id) / sizeof(st_attribute_id[0]);
+       /* Error case ->  handle = NULL */
+       ret = zb_zcl_global_attr_read(NULL, zll_addr16, ha_ep, zll_ep,
+                       ZB_ZCL_DEFAULT_RESPONSE_DISABLED, st_cluster_id, st_attribute_id,
+                       st_len_of_attr, _zb_zcl_global_attr_read_cb, NULL);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first positive zb_zcl_global_attr_write.
+int utc_zb_zcl_global_attr_write_p(void)
+{
+       int ret;
+       unsigned char value[] = { 0x02, 0x01};
+       zb_zcl_write_attr_record_h attr = NULL;
+
+       ret = zb_write_attr_record_create(&attr);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+       ret = zb_write_attr_record_set_id(attr, ZB_ZCL_ATTR_IDENTIFY_TIME);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+       ret = zb_write_attr_record_set_type(attr, ZB_ZCL_UNSIGNED_16_BIT_INTEGER);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+       ret = zb_write_attr_record_set_value(attr, ZB_ZCL_UNSIGNED_16_BIT_INTEGER, value,
+               zb_zcl_get_data_size(ZB_ZCL_UNSIGNED_16_BIT_INTEGER));
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+
+       ret = zb_zcl_global_attr_write(handle, ha_addr16, ha_ep, zll_ep,
+                       ZB_ZCL_FC_DEFAULT, ZB_ZCL_CLUSTER_IDENTIFY, &attr, 1,
+                       _zb_zcl_global_attr_write_cb, NULL);
+       zb_write_attr_record_destroy(attr);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);}
+
+//& purpose: A purpose of a first negative zb_zcl_global_attr_write.
+int utc_zb_zcl_global_attr_write_n(void)
+{
+       int ret;
+       unsigned char value[] = { 0x02, 0x01};
+       zb_zcl_write_attr_record_h attr = NULL;
+       ret = zb_write_attr_record_create(&attr);
+       if (ZIGBEE_ERROR_NONE != ret)
+               return ret;
+       ret = zb_write_attr_record_set_id(attr, ZB_ZCL_ATTR_IDENTIFY_TIME);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+       ret = zb_write_attr_record_set_type(attr, ZB_ZCL_UNSIGNED_16_BIT_INTEGER);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+       ret = zb_write_attr_record_set_value(attr, ZB_ZCL_UNSIGNED_16_BIT_INTEGER, value,
+               zb_zcl_get_data_size(ZB_ZCL_UNSIGNED_16_BIT_INTEGER));
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+       /* Error case ->  handle = NULL */
+       ret = zb_zcl_global_attr_write(NULL, zll_addr16, ha_ep, zll_ep,
+                       ZB_ZCL_FC_DEFAULT, ZB_ZCL_CLUSTER_IDENTIFY, &attr, 1,
+                       _zb_zcl_global_attr_write_cb, NULL);
+       zb_write_attr_record_destroy(attr);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first positive zb_zcl_global_attr_write_undivided.
+int utc_zb_zcl_global_attr_write_undivided_p(void)
+{
+       int ret;
+       unsigned char value[] = { 0x02, 0x01};
+       zb_zcl_write_attr_record_h attr = NULL;
+       zb_write_attr_record_create(&attr);
+       ret = zb_write_attr_record_set_id(attr, ZB_ZCL_ATTR_IDENTIFY_TIME);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+       ret = zb_write_attr_record_set_type(attr, ZB_ZCL_UNSIGNED_16_BIT_INTEGER);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+       ret = zb_write_attr_record_set_value(attr, ZB_ZCL_UNSIGNED_16_BIT_INTEGER, value,
+               zb_zcl_get_data_size(ZB_ZCL_UNSIGNED_16_BIT_INTEGER));
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+       ret = zb_zcl_global_attr_write_undivided(handle, ha_addr16, ha_ep, zll_ep,
+                       ZB_ZCL_FC_DEFAULT, ZB_ZCL_CLUSTER_IDENTIFY, &attr, 1,
+                       _zb_zcl_global_attr_write_cb, NULL);
+       zb_write_attr_record_destroy(attr);
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_zcl_global_attr_write_undivided.
+int utc_zb_zcl_global_attr_write_undivided_n(void)
+{
+       int ret;
+       unsigned char value[] = { 0x02, 0x01};
+       zb_zcl_write_attr_record_h attr = NULL;
+       ret = zb_write_attr_record_create(&attr);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+       ret = zb_write_attr_record_set_id(attr, ZB_ZCL_ATTR_IDENTIFY_TIME);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+       ret = zb_write_attr_record_set_type(attr, ZB_ZCL_UNSIGNED_16_BIT_INTEGER);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+       ret = zb_write_attr_record_set_value(attr, ZB_ZCL_UNSIGNED_16_BIT_INTEGER, value,
+               zb_zcl_get_data_size(ZB_ZCL_UNSIGNED_16_BIT_INTEGER));
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+       /* Error case ->  handle = NULL */
+       ret = zb_zcl_global_attr_write_undivided(NULL, zll_addr16, ha_ep, zll_ep,
+                       ZB_ZCL_FC_DEFAULT, ZB_ZCL_CLUSTER_IDENTIFY, &attr, 1,
+                       _zb_zcl_global_attr_write_cb, NULL);
+       zb_write_attr_record_destroy(attr);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first positive zb_zcl_global_attr_write_no_rsp.
+int utc_zb_zcl_global_attr_write_no_rsp_p(void)
+{
+       int ret;
+       unsigned char value[] = { 0x02, 0x01};
+       zb_zcl_write_attr_record_h attr = NULL;
+       ret = zb_write_attr_record_create(&attr);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+       ret = zb_write_attr_record_set_id(attr, ZB_ZCL_ATTR_IDENTIFY_TIME);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+       ret = zb_write_attr_record_set_type(attr, ZB_ZCL_UNSIGNED_16_BIT_INTEGER);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+       ret = zb_write_attr_record_set_value(attr, ZB_ZCL_UNSIGNED_16_BIT_INTEGER, value,
+               zb_zcl_get_data_size(ZB_ZCL_UNSIGNED_16_BIT_INTEGER));
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+       ret = zb_zcl_global_attr_write_no_rsp(handle, ha_addr16, ha_ep, zll_ep,
+                       ZB_ZCL_FC_DEFAULT, ZB_ZCL_CLUSTER_IDENTIFY, &attr, 1);
+       zb_write_attr_record_destroy(attr);
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_zcl_global_attr_write_no_rsp.
+int utc_zb_zcl_global_attr_write_no_rsp_n(void)
+{
+       int ret;
+       unsigned char value[] = { 0x02, 0x01};
+       zb_zcl_write_attr_record_h attr = NULL;
+       ret = zb_write_attr_record_create(&attr);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+       ret = zb_write_attr_record_set_id(attr, ZB_ZCL_ATTR_IDENTIFY_TIME);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+       ret = zb_write_attr_record_set_type(attr, ZB_ZCL_UNSIGNED_16_BIT_INTEGER);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+       ret = zb_write_attr_record_set_value(attr, ZB_ZCL_UNSIGNED_16_BIT_INTEGER, value,
+               zb_zcl_get_data_size(ZB_ZCL_UNSIGNED_16_BIT_INTEGER));
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+       /* Error case ->  handle = NULL */
+       ret = zb_zcl_global_attr_write_no_rsp(NULL, zll_addr16, ha_ep, zll_ep,
+                       ZB_ZCL_FC_DEFAULT, ZB_ZCL_CLUSTER_IDENTIFY, &attr, 1);
+       zb_write_attr_record_destroy(attr);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first positive zb_zcl_global_config_report_write.
+int utc_zb_zcl_global_config_report_write_p(void)
+{
+       int ret;
+       unsigned char value[6] = {1, 2, 3, 4, 5, 6};
+       zb_zcl_read_report_config_record_h config = NULL;
+       ret = zb_report_config_record_create(&config);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+       ret = zb_report_config_record_set_dir(config, ZB_ZCL_CLIENT_TO_SERVER);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+       ret = zb_report_config_record_set_id(config, ZB_ZCL_ATTR_ON_OFF);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+       ret = zb_report_config_record_set_change(config, ZB_ZCL_48_BIT_BITMAP, value);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+       ret = zb_report_config_record_set_min_interval(config, 0x01);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+       ret = zb_report_config_record_set_max_interval(config, 0x1000);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+
+       ret = zb_zcl_global_config_report_write(handle, ha_addr16, ha_ep, zll_ep,
+                       ZB_ZCL_FC_DEFAULT, ZB_ZCL_CLUSTER_ON_OFF, &config, 1,
+                       _zb_zcl_global_config_report_write_write_cb, NULL);
+       zb_report_config_record_destroy(config);
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_zcl_global_config_report_write.
+int utc_zb_zcl_global_config_report_write_n(void)
+{
+       int ret;
+       unsigned char value[6] = {1, 2, 3, 4, 5, 6};
+       zb_zcl_read_report_config_record_h config = NULL;
+       ret = zb_report_config_record_create(&config);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+       ret = zb_report_config_record_set_dir(config, ZB_ZCL_CLIENT_TO_SERVER);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+       ret = zb_report_config_record_set_id(config, ZB_ZCL_ATTR_ON_OFF);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+       ret = zb_report_config_record_set_change(config, ZB_ZCL_48_BIT_BITMAP, value);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+       ret = zb_report_config_record_set_min_interval(config, 0x01);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+       ret = zb_report_config_record_set_max_interval(config, 0x1000);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+
+       /* Error case ->  handle = NULL and endpoint = 0 */
+       ret = zb_zcl_global_config_report_write(NULL, zll_addr16, ha_ep, zdo_ep,
+                       ZB_ZCL_FC_DEFAULT, ZB_ZCL_CLUSTER_ON_OFF, &config, 1,
+                       _zb_zcl_global_config_report_write_write_cb, NULL);
+       zb_report_config_record_destroy(config);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first positive zb_zcl_global_config_report_read.
+int utc_zb_zcl_global_config_report_read_p(void)
+{
+       int ret;
+       zb_zcl_read_report_config_record_h read_report_conf = NULL;
+       ret = zb_read_report_config_record_create(&read_report_conf);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+       ret = zb_read_report_config_record_set_dir(read_report_conf, ZB_ZCL_CLIENT_TO_SERVER);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+       ret = zb_read_report_config_record_set_id(read_report_conf, ZB_ZCL_ATTR_ON_OFF);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+       ret = zb_zcl_global_config_report_read(handle, ha_addr16, ha_ep, zll_ep,
+                       ZB_ZCL_FC_DEFAULT, ZB_ZCL_CLUSTER_ON_OFF, &read_report_conf, 1,
+                       _zb_zcl_global_config_report_write_read_cb, NULL);
+       zb_read_report_config_record_destroy(read_report_conf);
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_zcl_global_config_report_read.
+int utc_zb_zcl_global_config_report_read_n(void)
+{
+       int ret;
+       zb_zcl_read_report_config_record_h read_report_conf = NULL;
+       ret = zb_read_report_config_record_create(&read_report_conf);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+       ret = zb_read_report_config_record_set_dir(read_report_conf, ZB_ZCL_CLIENT_TO_SERVER);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+       ret = zb_read_report_config_record_set_id(read_report_conf, ZB_ZCL_ATTR_ON_OFF);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+
+       /* Error case ->  handle = NULL and endpoint = 0 */
+       ret = zb_zcl_global_config_report_read(NULL, zll_addr16, ha_ep, zdo_ep,
+                       ZB_ZCL_FC_DEFAULT, ZB_ZCL_CLUSTER_ON_OFF, &read_report_conf, 1,
+                       _zb_zcl_global_config_report_write_read_cb, NULL);
+       zb_read_report_config_record_destroy(read_report_conf);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
diff --git a/src/utc/zigbee/utc-zigbee-zcl-ias-zone.c b/src/utc/zigbee/utc-zigbee-zcl-ias-zone.c
new file mode 100644 (file)
index 0000000..ddb15d9
--- /dev/null
@@ -0,0 +1,50 @@
+//
+// Copyright (c) 2014 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+#include "assert.h"
+#include "utc-zigbee-common.h"
+
+extern bool g_feature;
+extern zb_zigbee_h handle;
+static zb_nwk_addr ha_addr16 = 0x1234;
+static zb_nwk_addr zll_addr16 = 0x5678;
+static zb_end_point zdo_ep = 0;
+static zb_end_point ha_ep = 1;
+
+//& purpose: A purpose of a first positive zb_zcl_zone_enroll_response.
+int utc_zb_zcl_zone_enroll_response_p(void)
+{
+       int ret;
+       unsigned char zone_id = 0x09;
+
+       ret = zb_zcl_zone_enroll_response(handle, ha_addr16, ha_ep,
+               ZB_ZCL_IAS_ZONE_ENROLL_SUCCESS, zone_id);
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_zcl_zone_enroll_response.
+int utc_zb_zcl_zone_enroll_response_n(void)
+{
+       int ret;
+
+       unsigned char zone_id = 0xC8;
+
+       /* Error case ->  endpoint = 0 */
+       ret = zb_zcl_zone_enroll_response(handle, zll_addr16, zdo_ep,
+                               ZB_ZCL_IAS_ZONE_ENROLL_NO_ENROLL_PERMITTED, zone_id);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
diff --git a/src/utc/zigbee/utc-zigbee-zcl-on-off.c b/src/utc/zigbee/utc-zigbee-zcl-on-off.c
new file mode 100644 (file)
index 0000000..90909e9
--- /dev/null
@@ -0,0 +1,41 @@
+//
+// Copyright (c) 2014 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+#include "assert.h"
+#include "utc-zigbee-common.h"
+
+extern bool g_feature;
+extern zb_zigbee_h handle;
+static zb_nwk_addr ha_addr16 = 0x1234;
+static zb_nwk_addr zll_addr16 = 0x5678;
+static zb_end_point zdo_ep = 0;
+static zb_end_point ha_ep = 1;
+
+//& purpose: A purpose of a first positive zb_zcl_on_off_control.
+int utc_zb_zcl_on_off_control_p(void)
+{
+       int ret;
+       ret = zb_zcl_on_off_control(handle, ha_addr16, ha_ep, ZB_ZCL_OFF);
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_zcl_on_off_control.
+int utc_zb_zcl_on_off_control_n(void)
+{
+       int ret;
+       /* Error case ->  endpoint = 0 */
+       ret = zb_zcl_on_off_control(handle, zll_addr16, zdo_ep, ZB_ZCL_OFF);
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
\ No newline at end of file
diff --git a/src/utc/zigbee/utc-zigbee-zcl.c b/src/utc/zigbee/utc-zigbee-zcl.c
new file mode 100644 (file)
index 0000000..5088819
--- /dev/null
@@ -0,0 +1,1852 @@
+//
+// Copyright (c) 2014 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+#include <string.h>
+#include "utc-zigbee-common.h"
+
+#include "assert.h"
+
+extern bool g_feature;
+extern zb_zigbee_h handle;
+
+#define CASE_TO_STR(x) case x: return #x;
+
+const char* zb_zcl_get_status_str(zb_zcl_status_e status)
+{
+       switch (status) {
+       CASE_TO_STR(ZB_ZCL_STATUS_SUCCESS)
+       CASE_TO_STR(ZB_ZCL_STATUS_FAILURE)
+       CASE_TO_STR(ZB_ZCL_STATUS_NOT_AUTHORIZED)
+       CASE_TO_STR(ZB_ZCL_STATUS_RESERVED_FIELD_NOT_ZERO)
+       CASE_TO_STR(ZB_ZCL_STATUS_MALFORMED_COMMAND)
+       CASE_TO_STR(ZB_ZCL_STATUS_UNSUP_CLUSTER_COMMAND)
+       CASE_TO_STR(ZB_ZCL_STATUS_UNSUP_GENERAL_COMMAND)
+       CASE_TO_STR(ZB_ZCL_STATUS_UNSUP_MANUF_CLUSTER_COMMAND)
+       CASE_TO_STR(ZB_ZCL_STATUS_UNSUP_MANUF_GENERAL_COMMAND)
+       CASE_TO_STR(ZB_ZCL_STATUS_INVALID_FIELD)
+       CASE_TO_STR(ZB_ZCL_STATUS_UNSUPPORTED_ATTRIBUTE)
+       CASE_TO_STR(ZB_ZCL_STATUS_INVALID_VALUE)
+       CASE_TO_STR(ZB_ZCL_STATUS_READ_ONLY)
+       CASE_TO_STR(ZB_ZCL_STATUS_INSUFFICIENT_SPACE)
+       CASE_TO_STR(ZB_ZCL_STATUS_DUPLICATE_EXISTS)
+       CASE_TO_STR(ZB_ZCL_STATUS_NOT_FOUND)
+       CASE_TO_STR(ZB_ZCL_STATUS_UNREPORTABLE_ATTRIBUTE)
+       CASE_TO_STR(ZB_ZCL_STATUS_INVALID_DATA_TYPE)
+       CASE_TO_STR(ZB_ZCL_STATUS_INVALID_SELECTOR)
+       CASE_TO_STR(ZB_ZCL_STATUS_WRITE_ONLY)
+       CASE_TO_STR(ZB_ZCL_STATUS_INCONSISTENT_STARTUP_STATE)
+       CASE_TO_STR(ZB_ZCL_STATUS_DEFINED_OUT_OF_BAND)
+       CASE_TO_STR(ZB_ZCL_STATUS_INCONSISTENT)
+       CASE_TO_STR(ZB_ZCL_STATUS_ACTION_DENIED)
+       CASE_TO_STR(ZB_ZCL_STATUS_TIMEOUT)
+       CASE_TO_STR(ZB_ZCL_STATUS_ABORT)
+       CASE_TO_STR(ZB_ZCL_STATUS_INVALID_IMAGE)
+       CASE_TO_STR(ZB_ZCL_STATUS_WAIT_FOR_DATA)
+       CASE_TO_STR(ZB_ZCL_STATUS_NO_IMAGE_AVAILABLE)
+       CASE_TO_STR(ZB_ZCL_STATUS_REQUIRE_MORE_IMAGE)
+       default:
+               return "ZB_ZCL_STATUS_UNDEFINED";
+       }
+}
+
+typedef struct _attr_type_size {
+       unsigned char type;
+       unsigned char size;
+} AttrTypeSize;
+
+static AttrTypeSize attribute_sizes[] = {
+       {ZB_ZCL_NO_DATA_ATTRIBUTE_TYPE, 0},
+       {ZB_ZCL_8_BIT_DATA, 1},
+       {ZB_ZCL_16_BIT_DATA, 2},
+       {ZB_ZCL_24_BIT_DATA, 3},
+       {ZB_ZCL_32_BIT_DATA, 4},
+       {ZB_ZCL_40_BIT_DATA, 5},
+       {ZB_ZCL_48_BIT_DATA, 6},
+       {ZB_ZCL_56_BIT_DATA, 7},
+       {ZB_ZCL_64_BIT_DATA, 8},
+       {ZB_ZCL_BOOLEAN, 1},
+       {ZB_ZCL_8_BIT_BITMAP, 1},
+       {ZB_ZCL_16_BIT_BITMAP, 2},
+       {ZB_ZCL_24_BIT_BITMAP, 3},
+       {ZB_ZCL_32_BIT_BITMAP, 4},
+       {ZB_ZCL_40_BIT_BITMAP, 5},
+       {ZB_ZCL_48_BIT_BITMAP, 6},
+       {ZB_ZCL_56_BIT_BITMAP, 7},
+       {ZB_ZCL_64_BIT_BITMAP, 8},
+       {ZB_ZCL_UNSIGNED_8_BIT_INTEGER, 1},
+       {ZB_ZCL_UNSIGNED_16_BIT_INTEGER, 2},
+       {ZB_ZCL_UNSIGNED_24_BIT_INTEGER, 3},
+       {ZB_ZCL_UNSIGNED_32_BIT_INTEGER, 4},
+       {ZB_ZCL_UNSIGNED_40_BIT_INTEGER, 5},
+       {ZB_ZCL_UNSIGNED_48_BIT_INTEGER, 6},
+       {ZB_ZCL_UNSIGNED_56_BIT_INTEGER, 7},
+       {ZB_ZCL_UNSIGNED_64_BIT_INTEGER, 8},
+       {ZB_ZCL_SIGNED_8_BIT_INTEGER, 1},
+       {ZB_ZCL_SIGNED_16_BIT_INTEGER, 2},
+       {ZB_ZCL_SIGNED_24_BIT_INTEGER, 3},
+       {ZB_ZCL_SIGNED_32_BIT_INTEGER, 4},
+       {ZB_ZCL_SIGNED_40_BIT_INTEGER, 5},
+       {ZB_ZCL_SIGNED_48_BIT_INTEGER, 6},
+       {ZB_ZCL_SIGNED_56_BIT_INTEGER, 7},
+       {ZB_ZCL_SIGNED_64_BIT_INTEGER, 8},
+       {ZB_ZCL_8_BIT_ENUMERATION, 1},
+       {ZB_ZCL_16_BIT_ENUMERATION, 2},
+       {ZB_ZCL_SEMI_PRECISION, 2},
+       {ZB_ZCL_SINGLE_PRECISION, 4},
+       {ZB_ZCL_DOUBLE_PRECISION, 8},
+       {ZB_ZCL_TIME_OF_DAY, 4},
+       {ZB_ZCL_DATE, 4},
+       {ZB_ZCL_UTC_TIME, 4},
+       {ZB_ZCL_CLUSTER_ID, 2},
+       {ZB_ZCL_ATTRIBUTE_ID, 2},
+       {ZB_ZCL_BACNET_OID, 4},
+       {ZB_ZCL_IEEE_ADDRESS, 8},
+       {ZB_ZCL_128_BIT_SECURITY_KEY, 16},
+};
+
+static unsigned char analog_discrete_thresholds[] = {
+       0x07, ZB_ZCL_DATA_TYPE_NONE,
+       0x1F, ZB_ZCL_DATA_TYPE_DISCRETE,
+       0x2F, ZB_ZCL_DATA_TYPE_ANALOG,
+       0x37, ZB_ZCL_DATA_TYPE_DISCRETE,
+       0x3F, ZB_ZCL_DATA_TYPE_ANALOG,
+       0x57, ZB_ZCL_DATA_TYPE_DISCRETE,
+       0xDF, ZB_ZCL_DATA_TYPE_NONE,
+       0xE7, ZB_ZCL_DATA_TYPE_ANALOG,
+       0xFF, ZB_ZCL_DATA_TYPE_NONE
+};
+
+int zb_zcl_get_analog_or_discret(zb_zcl_data_type_e type)
+{
+       int index = 0;
+
+       unsigned char var = analog_discrete_thresholds[index];
+
+       while (var < type && var < 0xFF) {
+               index += 2;
+               var = analog_discrete_thresholds[index];
+       }
+
+       return analog_discrete_thresholds[index+1];
+}
+
+int zb_zcl_get_data_size(zb_zcl_data_type_e type)
+{
+       int i;
+       int count;
+
+       count = (int)(sizeof(attribute_sizes) / 2);
+       for (i = 0; i < count; i++) {
+               if (attribute_sizes[i].type == type)
+                       return attribute_sizes[i].size;
+       }
+       return -1;
+}
+
+const char* zb_zcl_get_data_type_str(zb_zcl_data_type_e type)
+{
+       switch (type) {
+       CASE_TO_STR(ZB_ZCL_NO_DATA_ATTRIBUTE_TYPE)
+       CASE_TO_STR(ZB_ZCL_8_BIT_DATA)
+       CASE_TO_STR(ZB_ZCL_16_BIT_DATA)
+       CASE_TO_STR(ZB_ZCL_24_BIT_DATA)
+       CASE_TO_STR(ZB_ZCL_32_BIT_DATA)
+       CASE_TO_STR(ZB_ZCL_40_BIT_DATA)
+       CASE_TO_STR(ZB_ZCL_48_BIT_DATA)
+       CASE_TO_STR(ZB_ZCL_56_BIT_DATA)
+       CASE_TO_STR(ZB_ZCL_64_BIT_DATA)
+       CASE_TO_STR(ZB_ZCL_BOOLEAN)
+       CASE_TO_STR(ZB_ZCL_8_BIT_BITMAP)
+       CASE_TO_STR(ZB_ZCL_16_BIT_BITMAP)
+       CASE_TO_STR(ZB_ZCL_24_BIT_BITMAP)
+       CASE_TO_STR(ZB_ZCL_32_BIT_BITMAP)
+       CASE_TO_STR(ZB_ZCL_40_BIT_BITMAP)
+       CASE_TO_STR(ZB_ZCL_48_BIT_BITMAP)
+       CASE_TO_STR(ZB_ZCL_56_BIT_BITMAP)
+       CASE_TO_STR(ZB_ZCL_64_BIT_BITMAP)
+       CASE_TO_STR(ZB_ZCL_UNSIGNED_8_BIT_INTEGER)
+       CASE_TO_STR(ZB_ZCL_UNSIGNED_16_BIT_INTEGER)
+       CASE_TO_STR(ZB_ZCL_UNSIGNED_24_BIT_INTEGER)
+       CASE_TO_STR(ZB_ZCL_UNSIGNED_32_BIT_INTEGER)
+       CASE_TO_STR(ZB_ZCL_UNSIGNED_40_BIT_INTEGER)
+       CASE_TO_STR(ZB_ZCL_UNSIGNED_48_BIT_INTEGER)
+       CASE_TO_STR(ZB_ZCL_UNSIGNED_56_BIT_INTEGER)
+       CASE_TO_STR(ZB_ZCL_UNSIGNED_64_BIT_INTEGER)
+       CASE_TO_STR(ZB_ZCL_SIGNED_8_BIT_INTEGER)
+       CASE_TO_STR(ZB_ZCL_SIGNED_16_BIT_INTEGER)
+       CASE_TO_STR(ZB_ZCL_SIGNED_24_BIT_INTEGER)
+       CASE_TO_STR(ZB_ZCL_SIGNED_32_BIT_INTEGER)
+       CASE_TO_STR(ZB_ZCL_SIGNED_40_BIT_INTEGER)
+       CASE_TO_STR(ZB_ZCL_SIGNED_48_BIT_INTEGER)
+       CASE_TO_STR(ZB_ZCL_SIGNED_56_BIT_INTEGER)
+       CASE_TO_STR(ZB_ZCL_SIGNED_64_BIT_INTEGER)
+       CASE_TO_STR(ZB_ZCL_8_BIT_ENUMERATION)
+       CASE_TO_STR(ZB_ZCL_16_BIT_ENUMERATION)
+       CASE_TO_STR(ZB_ZCL_SEMI_PRECISION)
+       CASE_TO_STR(ZB_ZCL_SINGLE_PRECISION)
+       CASE_TO_STR(ZB_ZCL_DOUBLE_PRECISION)
+       CASE_TO_STR(ZB_ZCL_OCTET_STRING)
+       CASE_TO_STR(ZB_ZCL_CHARACTER_STRING)
+       CASE_TO_STR(ZB_ZCL_LONG_OCTET_STRING)
+       CASE_TO_STR(ZB_ZCL_LONG_CHARACTER_STRING)
+       CASE_TO_STR(ZB_ZCL_ARRAY)
+       CASE_TO_STR(ZB_ZCL_STRUCTURE)
+       CASE_TO_STR(ZB_ZCL_SET)
+       CASE_TO_STR(ZB_ZCL_BAG)
+       CASE_TO_STR(ZB_ZCL_TIME_OF_DAY)
+       CASE_TO_STR(ZB_ZCL_DATE)
+       CASE_TO_STR(ZB_ZCL_UTC_TIME)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_ID)
+       CASE_TO_STR(ZB_ZCL_ATTRIBUTE_ID)
+       CASE_TO_STR(ZB_ZCL_BACNET_OID)
+       CASE_TO_STR(ZB_ZCL_IEEE_ADDRESS)
+       CASE_TO_STR(ZB_ZCL_128_BIT_SECURITY_KEY)
+       default:
+               return "UNKNOWN_DATA_TYPE";
+       }
+}
+
+const char* zb_zcl_get_cluster_id_str(zb_cluster_id clusterid)
+{
+       switch (clusterid) {
+       CASE_TO_STR(ZB_ZCL_CLUSTER_BASIC)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_POWER_CONFIG)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_DEVICE_TEMP)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_IDENTIFY)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_GROUPS)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_SCENES)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_ON_OFF)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_ON_OFF_SWITCH_CONFIG)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_LEVEL_CONTROL)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_ALARM)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_TIME)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_RSSI_LOCATION)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_BINARY_INPUT_BASIC)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_COMMISSIONING)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_PARTITION)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_OTA_BOOTLOAD)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_POWER_PROFILE)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_APPLIANCE_CONTROL)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_POLL_CONTROL)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_SHADE_CONFIG)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_DOOR_LOCK)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_WINDOW_COVERING)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_PUMP_CONFIG_CONTROL)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_THERMOSTAT)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_FAN_CONTROL)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_DEHUMID_CONTROL)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_THERMOSTAT_UI_CONFIG)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_COLOR_CONTROL)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_BALLAST_CONFIGURATION)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_ILLUM_MEASUREMENT)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_ILLUM_LEVEL_SENSING)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_TEMP_MEASUREMENT)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_PRESSURE_MEASUREMENT)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_FLOW_MEASUREMENT)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_RELATIVE_HUMIDITY_MEASUREMENT)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_OCCUPANCY_SENSING)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_IAS_ZONE)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_IAS_ACE)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_IAS_WD)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_GENERIC_TUNNEL)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_BACNET_PROTOCOL_TUNNEL)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_11073_PROTOCOL_TUNNEL)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_ISO7816_PROTOCOL_TUNNEL)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_PRICE)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_DEMAND_RESPONSE_LOAD_CONTROL)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_SIMPLE_METERING)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_MESSAGING)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_TUNNELING)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_PREPAYMENT)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_ENERGY_MANAGEMENT)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_TOU_CALENDAR)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_DEVICE_MANAGEMENT)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_EVENTS)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_MDU_PAIRING)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_KEY_ESTABLISHMENT)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_INFORMATION)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_DATA_SHARING)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_GAMING)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_DATA_RATE_CONTROL)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_VOICE_OVER_ZIGBEE)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_CHATTING)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_PAYMENT)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_BILLING)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_APPLIANCE_IDENTIFICATION)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_METER_IDENTIFICATION)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_APPLIANCE_EVENTS_AND_ALERT)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_APPLIANCE_STATISTICS)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_ELECTRICAL_MEASUREMENT)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_DIAGNOSTICS)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_ZLL_COMMISSIONING)
+       default:
+               return "UNDEFINED_CLUSTER";
+       }
+}
+
+#if 1//def SUPPORT_ZCL_READ_ATTRIBUTE_STATUS_RECORD
+//& purpose: A purpose of a first positive utc_zb_read_attr_status_record_create_p.
+int utc_zb_read_attr_status_record_create_p(void)
+{
+       int ret = -1;
+       zb_zcl_read_attr_status_record_h handle = NULL;
+
+       ret = zb_read_attr_status_record_create(&handle);
+       zb_read_attr_status_record_destroy(handle);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative utc_zb_read_attr_status_record_create_n.
+int utc_zb_read_attr_status_record_create_n(void)
+{
+       int ret = -1;
+
+       ret = zb_read_attr_status_record_create(NULL);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first positive utc_zb_read_attr_status_record_clone_p.
+int utc_zb_read_attr_status_record_clone_p(void)
+{
+       int ret = -1;
+       unsigned char value[] = {1, 2};
+       zb_zcl_read_attr_status_record_h src = NULL;
+       zb_zcl_read_attr_status_record_h dst = NULL;
+
+       zb_read_attr_status_record_create(&src);
+       zb_read_attr_status_record_set_value(src, ZB_ZCL_UNSIGNED_16_BIT_INTEGER,
+               value, zb_zcl_get_data_size(ZB_ZCL_UNSIGNED_16_BIT_INTEGER));
+       ret = zb_read_attr_status_record_clone(src, &dst);
+       zb_read_attr_status_record_destroy(src);
+       zb_read_attr_status_record_destroy(dst);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative utc_zb_read_attr_status_record_clone_n.
+int utc_zb_read_attr_status_record_clone_n(void)
+{
+       int ret = -1;
+       zb_zcl_read_attr_status_record_h src = NULL;
+       zb_zcl_read_attr_status_record_h dst = NULL;
+
+       zb_read_attr_status_record_create(&src);
+       ret = zb_read_attr_status_record_clone(NULL, &dst);
+       zb_read_attr_status_record_destroy(src);
+       zb_read_attr_status_record_destroy(dst);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first positive utc_zb_read_attr_status_record_destroy_p.
+int utc_zb_read_attr_status_record_destroy_p(void)
+{
+       int ret = -1;
+       zb_zcl_read_attr_status_record_h handle = NULL;
+
+       zb_read_attr_status_record_create(&handle);
+       ret = zb_read_attr_status_record_destroy(handle);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative utc_zb_read_attr_status_record_destroy_n.
+int utc_zb_read_attr_status_record_destroy_n(void)
+{
+       int ret = -1;
+
+       ret = zb_read_attr_status_record_destroy(NULL);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first positive zb_read_attr_status_record_set_id.
+int utc_zb_read_attr_status_record_set_id_p(void)
+{
+       int ret = -1;
+       zb_attribute_id pid = 1;
+       zb_zcl_read_attr_status_record_h handle = NULL;
+
+       zb_read_attr_status_record_create(&handle);
+       ret = zb_read_attr_status_record_set_id(handle, pid);
+       zb_read_attr_status_record_destroy(handle);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_read_attr_status_record_set_id.
+int utc_zb_read_attr_status_record_set_id_n(void)
+{
+       int ret = -1;
+       zb_attribute_id pid = 1;
+       zb_zcl_read_attr_status_record_h handle = NULL;
+
+       ret = zb_read_attr_status_record_create(&handle);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+       /* Negative case : handle is null */
+       ret = zb_read_attr_status_record_set_id(NULL, pid);
+       zb_read_attr_status_record_destroy(handle);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first positive zb_read_attr_status_record_get_id.
+int utc_zb_read_attr_status_record_get_id_p(void)
+{
+       int ret = -1;
+       zb_attribute_id pid = 1;
+       zb_attribute_id lid = 2;
+       zb_zcl_read_attr_status_record_h handle = NULL;
+
+       ret = zb_read_attr_status_record_create(&handle);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+       ret = zb_read_attr_status_record_set_id(handle, pid);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+
+       ret = ret = zb_read_attr_status_record_get_id(handle, &lid);
+       zb_read_attr_status_record_destroy(handle);
+
+       if (false == g_feature)
+               assert_eq(ret, ZIGBEE_ERROR_NOT_SUPPORTED);
+       else {
+               assert_eq(ret, ZIGBEE_ERROR_NONE);
+               assert_eq(pid, lid);
+       }
+       return 0;
+}
+
+//& purpose: A purpose of a first negative zb_read_attr_status_record_get_id.
+int utc_zb_read_attr_status_record_get_id_n(void)
+{
+       int ret = -1;
+       zb_attribute_id id = 0xffff;
+       zb_zcl_read_attr_status_record_h handle = NULL;
+
+       ret = zb_read_attr_status_record_create(&handle);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+
+       /* Negative case : handle is null */
+       ret = zb_read_attr_status_record_get_id(NULL, &id);
+       zb_read_attr_status_record_destroy(handle);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first positive zb_read_attr_status_record_set_status.
+int utc_zb_read_attr_status_record_set_status_p(void)
+{
+       int ret = -1;
+       zb_zcl_status_e status = 1;
+       zb_zcl_read_attr_status_record_h handle = NULL;
+
+       ret = zb_read_attr_status_record_create(&handle);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+
+       ret = zb_read_attr_status_record_set_status(handle, status);
+       zb_read_attr_status_record_destroy(handle);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_read_attr_status_record_set_status.
+int utc_zb_read_attr_status_record_set_status_n(void)
+{
+       int ret = -1;
+       zb_zcl_status_e status = 1;
+       zb_zcl_read_attr_status_record_h handle = NULL;
+
+       ret = zb_read_attr_status_record_create(&handle);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+
+       /* Negative case : handle is null */
+       ret = zb_read_attr_status_record_set_status(NULL, status);
+       zb_read_attr_status_record_destroy(handle);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first positive zb_read_attr_status_record_get_status.
+int utc_zb_read_attr_status_record_get_status_p(void)
+{
+       int ret = -1;
+       zb_zcl_status_e status = 0xff;
+       zb_zcl_read_attr_status_record_h handle = NULL;
+
+       zb_read_attr_status_record_create(&handle);
+       ret = zb_read_attr_status_record_get_status(handle, &status);
+       zb_read_attr_status_record_destroy(handle);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_read_attr_status_record_get_status.
+int utc_zb_read_attr_status_record_get_status_n(void)
+{
+       int ret = -1;
+       zb_zcl_status_e status = 0xff;
+       zb_zcl_read_attr_status_record_h handle = NULL;
+
+       ret = zb_read_attr_status_record_create(&handle);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+
+       /* Negative case : handle is null */
+       ret = zb_read_attr_status_record_get_status(NULL, &status);
+       zb_read_attr_status_record_destroy(handle);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first positive zb_read_attr_status_record_set_type.
+int utc_zb_read_attr_status_record_set_type_p(void)
+{
+       int ret = -1;
+       zb_zcl_data_type_e type = ZB_ZCL_ATTRIBUTE_ID;
+       zb_zcl_read_attr_status_record_h handle = NULL;
+
+       ret = zb_read_attr_status_record_create(&handle);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+
+       ret = zb_read_attr_status_record_set_type(handle, type);
+       zb_read_attr_status_record_destroy(handle);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_read_attr_status_record_set_type.
+int utc_zb_read_attr_status_record_set_type_n(void)
+{
+       int ret = -1;
+       zb_zcl_data_type_e type = ZB_ZCL_ATTRIBUTE_ID;
+       zb_zcl_read_attr_status_record_h handle = NULL;
+
+       ret = zb_read_attr_status_record_create(&handle);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+
+       /* Negative case : handle is null */
+       ret = zb_read_attr_status_record_set_type(NULL, type);
+       zb_read_attr_status_record_destroy(handle);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first positive zb_read_attr_status_record_get_type.
+int utc_zb_read_attr_status_record_get_type_p(void)
+{
+       int ret = -1;
+       zb_zcl_data_type_e type = ZB_ZCL_ATTRIBUTE_ID;
+       zb_zcl_read_attr_status_record_h handle = NULL;
+
+       ret = zb_read_attr_status_record_create(&handle);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+
+       ret = zb_read_attr_status_record_get_type(handle, &type);
+       zb_read_attr_status_record_destroy(handle);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_read_attr_status_record_get_type.
+int utc_zb_read_attr_status_record_get_type_n(void)
+{
+       int ret = -1;
+       zb_zcl_data_type_e type = ZB_ZCL_ATTRIBUTE_ID;
+       zb_zcl_read_attr_status_record_h handle = NULL;
+
+       ret = zb_read_attr_status_record_create(&handle);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+
+       /* Negative case : handle is null */
+       ret = zb_read_attr_status_record_get_type(NULL, &type);
+       zb_read_attr_status_record_destroy(handle);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first positive zb_read_attr_status_record_set_value.
+int utc_zb_read_attr_status_record_set_value_p(void)
+{
+       int ret = -1;
+       unsigned char pvalue = 1;
+
+       zb_zcl_data_type_e type = ZB_ZCL_8_BIT_DATA;
+       zb_zcl_read_attr_status_record_h handle = NULL;
+
+       ret = zb_read_attr_status_record_create(&handle);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+
+       ret = zb_read_attr_status_record_set_value(handle, type, &pvalue,
+               zb_zcl_get_data_size(type));
+       zb_read_attr_status_record_destroy(handle);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_read_attr_status_record_set_value.
+int utc_zb_read_attr_status_record_set_value_n(void)
+{
+       int ret = -1;
+       unsigned char pvalue = 1;
+
+       zb_zcl_data_type_e type = ZB_ZCL_8_BIT_DATA;
+       zb_zcl_read_attr_status_record_h handle = NULL;
+
+       ret = zb_read_attr_status_record_create(&handle);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+
+       /* Negative case : handle is null */
+       ret = zb_read_attr_status_record_set_value(NULL, type, &pvalue,
+       zb_zcl_get_data_size(type));
+       zb_read_attr_status_record_destroy(handle);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first positive zb_read_attr_status_record_get_type.
+int utc_zb_read_attr_status_record_get_value_p(void)
+{
+       int ret = -1;
+       int count = 0;
+       unsigned char pvalue = 1;
+       unsigned char *lvalue = NULL;
+
+       zb_zcl_data_type_e type = ZB_ZCL_8_BIT_DATA;
+       zb_zcl_read_attr_status_record_h handle = NULL;
+
+       ret = zb_read_attr_status_record_create(&handle);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+
+       zb_read_attr_status_record_set_value(handle, type, &pvalue,
+               zb_zcl_get_data_size(type));
+       ret = zb_read_attr_status_record_get_value(handle, &type, &lvalue, &count);
+       if (lvalue) {
+               free(lvalue);
+               lvalue = NULL;
+       }
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_read_attr_status_record_get_type.
+int utc_zb_read_attr_status_record_get_value_n(void)
+{
+       int ret = -1;
+       int count = 0;
+       unsigned char pvalue = 1;
+       unsigned char *lvalue = NULL;
+
+       zb_zcl_data_type_e type = ZB_ZCL_8_BIT_DATA;
+       zb_zcl_read_attr_status_record_h handle = NULL;
+
+       ret = zb_read_attr_status_record_create(&handle);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+       ret = zb_read_attr_status_record_set_value(handle, type, &pvalue,
+               zb_zcl_get_data_size(type));
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+
+       /* Negative case : handle is null */
+       ret = zb_read_attr_status_record_get_value(NULL, &type, &lvalue, &count);
+       if (lvalue) {
+               free(lvalue);
+               lvalue = NULL;
+       }
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+#endif /* SUPPORT_ZCL_READ_ATTRIBUTE_STATUS_RECORD */
+
+#if 1 //def SUPPORT_ZCL_WRITE_ATTRIBUTE_STATUS
+//& purpose: A purpose of a first positive zb_write_attr_record_create.
+int utc_zb_write_attr_record_create_p(void)
+{
+       int ret = -1;
+       zb_zcl_write_attr_record_h handle = NULL;
+
+       ret = zb_write_attr_record_create(&handle);
+       zb_write_attr_record_destroy(handle);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_write_attr_record_create.
+int utc_zb_write_attr_record_create_n(void)
+{
+       int ret = -1;
+       zb_zcl_write_attr_record_h handle = NULL;
+
+       /* Negative case : handle is null */
+       ret = zb_write_attr_record_create(NULL);
+       zb_write_attr_record_destroy(handle);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first positive zb_write_attr_record_destroy.
+int utc_zb_write_attr_record_destroy_p(void)
+{
+       int ret = -1;
+       zb_zcl_write_attr_record_h handle = NULL;
+
+       zb_write_attr_record_create(&handle);
+       ret = zb_write_attr_record_destroy(handle);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_write_attr_record_destroy.
+int utc_zb_write_attr_record_destroy_n(void)
+{
+       int ret = -1;
+
+       /* Negative case : handle is null */
+       ret = zb_write_attr_record_destroy(NULL);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first positive zb_write_attr_record_set_id.
+int utc_zb_write_attr_record_set_id_p(void)
+{
+       int ret = -1;
+       zb_zcl_write_attr_record_h handle = NULL;
+       zb_attribute_id id = ZB_ZCL_ATTR_IDENTIFY_TIME;
+
+       ret = zb_write_attr_record_create(&handle);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+
+       ret = zb_write_attr_record_set_id(handle, id);
+       zb_write_attr_record_destroy(handle);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_write_attr_record_set_id.
+int utc_zb_write_attr_record_set_id_n(void)
+{
+       int ret = -1;
+       zb_zcl_write_attr_record_h handle = NULL;
+       zb_attribute_id id = ZB_ZCL_ATTR_IDENTIFY_TIME;
+
+       ret = zb_write_attr_record_create(&handle);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+
+       /* Negative case : handle is null */
+       ret = zb_write_attr_record_set_id(NULL, id);
+       zb_write_attr_record_destroy(handle);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first positive zb_write_attr_record_set_value.
+int utc_zb_write_attr_record_set_value_p(void)
+{
+       int ret = -1;
+       zb_aes128_key pvalue = {
+               0x5A, 0x69, 0x67, 0x42, 0x65, 0x65, 0x41, 0x6C,
+               0x6C, 0x69, 0x61, 0x6E, 0x63, 0x65, 0x30, 0x39
+               };
+
+       zb_zcl_write_attr_record_h handle = NULL;
+
+       ret = zb_write_attr_record_create(&handle);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+
+       ret = zb_write_attr_record_set_value(handle, ZB_ZCL_128_BIT_SECURITY_KEY,
+               pvalue, zb_zcl_get_data_size(ZB_ZCL_128_BIT_SECURITY_KEY));
+       zb_write_attr_record_destroy(handle);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negvalueative zb_write_attr_record_set_value.
+int utc_zb_write_attr_record_set_value_n(void)
+{
+       int ret = -1;
+       zb_aes128_key pvalue = {
+               0x5A, 0x69, 0x67, 0x42, 0x65, 0x65, 0x41, 0x6C,
+               0x6C, 0x69, 0x61, 0x6E, 0x63, 0x65, 0x30, 0x39
+               };
+
+       zb_zcl_write_attr_record_h handle = NULL;
+
+       ret = zb_write_attr_record_create(&handle);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+
+       /* Negative case : handle is null */
+       ret = zb_write_attr_record_set_value(NULL, ZB_ZCL_128_BIT_SECURITY_KEY,
+               pvalue, zb_zcl_get_data_size(ZB_ZCL_128_BIT_SECURITY_KEY));
+       zb_write_attr_record_destroy(handle);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first positive zb_write_attr_status_create.
+int utc_zb_write_attr_status_create_p(void)
+{
+       int ret = -1;
+       zb_zcl_write_attr_status_record_h handle = NULL;
+
+       ret = zb_write_attr_status_create(&handle);
+       zb_write_attr_status_destroy(handle);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_write_attr_status_create.
+int utc_zb_write_attr_status_create_n(void)
+{
+       int ret = -1;
+       zb_zcl_write_attr_status_record_h handle = NULL;
+
+       /* Negative case : handle is null */
+       ret = zb_write_attr_status_create(NULL);
+       zb_write_attr_status_destroy(handle);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first positive zb_write_attr_status_destroy.
+int utc_zb_write_attr_status_destroy_p(void)
+{
+       int ret = -1;
+       zb_zcl_write_attr_status_record_h handle = NULL;
+
+       ret = zb_write_attr_status_create(&handle);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+
+       ret = zb_write_attr_status_destroy(handle);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_write_attr_status_destroy.
+int utc_zb_write_attr_status_destroy_n(void)
+{
+       int ret = -1;
+
+       /* Negative case : handle is null */
+       ret = zb_write_attr_status_destroy(NULL);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first positive zb_write_attr_status_set_status.
+int utc_zb_write_attr_status_set_status_p(void)
+{
+       int ret = -1;
+       zb_zcl_write_attr_status_record_h handle = NULL;
+       zb_zcl_status_e status = ZB_ZCL_STATUS_NO_IMAGE_AVAILABLE;
+
+       ret = zb_write_attr_status_create(&handle);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+
+       ret = zb_write_attr_status_set_status(handle, status);
+       zb_write_attr_status_destroy(handle);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_write_attr_status_set_status.
+int utc_zb_write_attr_status_set_status_n(void)
+{
+       int ret = -1;
+       zb_zcl_write_attr_status_record_h handle = NULL;
+       zb_zcl_status_e status = ZB_ZCL_STATUS_REQUIRE_MORE_IMAGE;
+
+       ret = zb_write_attr_status_create(&handle);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+
+       /* Negative case : handle is null */
+       ret = zb_write_attr_status_set_status(NULL, status);
+       zb_write_attr_status_destroy(handle);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first positive zb_write_attr_status_get_status.
+int utc_zb_write_attr_status_get_status_p(void)
+{
+       int ret = -1;
+       zb_zcl_write_attr_status_record_h handle = NULL;
+       zb_zcl_status_e status = ZB_ZCL_STATUS_NO_IMAGE_AVAILABLE;
+
+       ret = zb_write_attr_status_create(&handle);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+
+       ret = zb_write_attr_status_get_status(handle, &status);
+       zb_write_attr_status_destroy(handle);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_write_attr_status_get_status.
+int utc_zb_write_attr_status_get_status_n(void)
+{
+       int ret = -1;
+       zb_zcl_write_attr_status_record_h handle = NULL;
+       zb_zcl_status_e status = ZB_ZCL_STATUS_REQUIRE_MORE_IMAGE;
+
+       ret = zb_write_attr_status_create(&handle);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+
+       /* Negative case : handle is null */
+       ret = zb_write_attr_status_get_status(NULL, &status);
+       zb_write_attr_status_destroy(handle);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first positive zb_write_attr_status_set_id.
+int utc_zb_write_attr_status_set_id_p(void)
+{
+       int ret = -1;
+       zb_zcl_write_attr_status_record_h handle = NULL;
+       zb_attribute_id id = ZB_ZCL_ATTR_CURRENT_LEVEL;
+
+       ret = zb_write_attr_status_create(&handle);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+
+       ret = zb_write_attr_status_set_id(handle, id);
+       zb_write_attr_status_destroy(handle);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_write_attr_status_set_id.
+int utc_zb_write_attr_status_set_id_n(void)
+{
+       int ret = -1;
+       zb_zcl_write_attr_status_record_h handle = NULL;
+       zb_attribute_id id = ZB_ZCL_ATTR_LEVEL_CONTROL_REMAINING_TIME;
+
+       ret = zb_write_attr_status_create(&handle);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+
+       /* Negative case : handle is null */
+       ret = zb_write_attr_status_set_id(NULL, id);
+       zb_write_attr_status_destroy(handle);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first positive zb_write_attr_status_get_id.
+int utc_zb_write_attr_status_get_id_p(void)
+{
+       int ret = -1;
+       zb_zcl_write_attr_status_record_h handle = NULL;
+       zb_attribute_id id = ZB_ZCL_ATTR_ON_OFF_TRANSITION_TIME;
+
+       ret = zb_write_attr_status_create(&handle);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+
+       ret = zb_write_attr_status_get_id(handle, &id);
+       zb_write_attr_status_destroy(handle);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_write_attr_status_get_id.
+int utc_zb_write_attr_status_get_id_n(void)
+{
+       int ret = -1;
+       zb_zcl_write_attr_status_record_h handle = NULL;
+       zb_attribute_id id = ZB_ZCL_ATTR_ON_LEVEL;
+
+       ret = zb_write_attr_status_create(&handle);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+
+       /* Negative case : handle is null */
+       ret = zb_write_attr_status_get_id(NULL, &id);
+       zb_write_attr_status_destroy(handle);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+#endif /* SUPPORT_ZCL_WRITE_ATTRIBUTE_STATUS */
+
+#if 1 //def SUPPORT_ZCL_REPORT_CONFIG_REPORT
+//& purpose: A purpose of a first positive zb_report_config_record_create.
+int utc_zb_report_config_record_create_p(void)
+{
+       int ret = -1;
+       zb_zcl_read_report_config_record_h handle = NULL;
+
+       ret = zb_report_config_record_create(&handle);
+       zb_report_config_record_destroy(handle);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_report_config_record_create.
+int utc_zb_report_config_record_create_n(void)
+{
+       int ret = -1;
+       zb_zcl_read_report_config_record_h handle = NULL;
+
+       /* Negative case : handle is null */
+       ret = zb_report_config_record_create(NULL);
+       zb_report_config_record_destroy(handle);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first positive zb_report_config_record_clone
+int utc_zb_report_config_record_clone_p(void)
+{
+       int ret = -1;
+       unsigned char change[] = {0, 1, 2, 3, 4, 5};
+       zb_zcl_read_report_config_record_h src = NULL;
+       zb_zcl_read_report_config_record_h dst = NULL;
+
+       ret = zb_report_config_record_create(&src);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+       ret = zb_report_config_record_set_change(src, ZB_ZCL_48_BIT_BITMAP, change);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+
+       ret = zb_report_config_record_clone(src, &dst);
+       zb_report_config_record_destroy(src);
+       zb_report_config_record_destroy(dst);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_report_config_record_clone.
+int utc_zb_report_config_record_clone_n(void)
+{
+       int ret = -1;
+       zb_zcl_read_report_config_record_h src = NULL;
+       zb_zcl_read_report_config_record_h dst = NULL;
+
+       ret = zb_report_config_record_create(&src);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+
+       ret = zb_report_config_record_clone(NULL, &dst);
+       zb_report_config_record_destroy(src);
+       zb_report_config_record_destroy(dst);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first positive zb_report_config_record_destroy.
+int utc_zb_report_config_record_destroy_p(void)
+{
+       int ret = -1;
+       zb_zcl_read_report_config_record_h handle = NULL;
+
+       zb_report_config_record_create(&handle);
+       ret = zb_report_config_record_destroy(handle);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_report_config_record_destroy.
+int utc_zb_report_config_record_destroy_n(void)
+{
+       int ret = -1;
+
+       /* Negative case : handle is null */
+       ret = zb_report_config_record_destroy(NULL);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first positive zb_report_config_record_set_dir.
+int utc_zb_report_config_record_set_dir_p(void)
+{
+       int ret = -1;
+       zb_zcl_read_report_config_record_h handle = NULL;
+       zb_zcl_fc_direction_e dir = ZB_ZCL_SERVER_TO_CLIENT;
+
+       ret = zb_report_config_record_create(&handle);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+
+       ret = zb_report_config_record_set_dir(handle, dir);
+       zb_report_config_record_destroy(handle);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_report_config_record_set_dir.
+int utc_zb_report_config_record_set_dir_n(void)
+{
+       int ret = -1;
+       zb_zcl_read_report_config_record_h handle = NULL;
+       zb_zcl_fc_direction_e dir = ZB_ZCL_CLIENT_TO_SERVER;
+
+       ret = zb_report_config_record_create(&handle);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+
+       /* Negative case : handle is null */
+       ret = zb_report_config_record_set_dir(NULL, dir);
+       zb_report_config_record_destroy(handle);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first positive zb_report_config_record_get_dir.
+int utc_zb_report_config_record_get_dir_p(void)
+{
+       int ret = -1;
+       zb_zcl_read_report_config_record_h handle = NULL;
+       zb_zcl_fc_direction_e dir = ZB_ZCL_SERVER_TO_CLIENT;
+
+       ret = zb_report_config_record_create(&handle);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+
+       ret = zb_report_config_record_get_dir(handle, &dir);
+       zb_report_config_record_destroy(handle);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_report_config_record_get_dir.
+int utc_zb_report_config_record_get_dir_n(void)
+{
+       int ret = -1;
+       zb_zcl_read_report_config_record_h handle = NULL;
+       zb_zcl_fc_direction_e dir = ZB_ZCL_CLIENT_TO_SERVER;
+
+       ret = zb_report_config_record_create(&handle);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+
+       /* Negative case : handle is null */
+       ret = zb_report_config_record_get_dir(NULL, &dir);
+       zb_report_config_record_destroy(handle);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first positive zb_report_config_record_set_id.
+int utc_zb_report_config_record_set_id_p(void)
+{
+       int ret = -1;
+       zb_zcl_read_report_config_record_h handle = NULL;
+       zb_attribute_id id = ZB_ZCL_ATTR_SHORT_ADDRESS;
+
+       ret = zb_report_config_record_create(&handle);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+
+       ret = zb_report_config_record_set_id(handle, id);
+       zb_report_config_record_destroy(handle);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_report_config_record_set_id.
+int utc_zb_report_config_record_set_id_n(void)
+{
+       int ret = -1;
+       zb_zcl_read_report_config_record_h handle = NULL;
+       zb_attribute_id id = ZB_ZCL_ATTR_EXTENDED_PAN_ID;
+
+       ret = zb_report_config_record_create(&handle);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+
+       /* Negative case : handle is null */
+       ret = zb_report_config_record_set_id(NULL, id);
+       zb_report_config_record_destroy(handle);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first positive zb_report_config_record_get_id.
+int utc_zb_report_config_record_get_id_p(void)
+{
+       int ret = -1;
+       zb_zcl_read_report_config_record_h handle = NULL;
+       zb_attribute_id id = ZB_ZCL_ATTR_PAN_ID;
+
+       ret = zb_report_config_record_create(&handle);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+
+       ret = zb_report_config_record_get_id(handle, &id);
+       zb_report_config_record_destroy(handle);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_report_config_record_get_id.
+int utc_zb_report_config_record_get_id_n(void)
+{
+       int ret = -1;
+       zb_zcl_read_report_config_record_h handle = NULL;
+       zb_attribute_id id = ZB_ZCL_ATTR_CHANNEL_MASK;
+
+       ret = zb_report_config_record_create(&handle);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+
+       /* Negative case : handle is null */
+       ret = zb_report_config_record_get_id(NULL, &id);
+       zb_report_config_record_destroy(handle);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first positive zb_report_config_record_set_min_interval.
+int utc_zb_report_config_record_set_min_interval_p(void)
+{
+       int ret = -1;
+       zb_zcl_read_report_config_record_h handle = NULL;
+       unsigned short min_i = 1;
+
+       ret = zb_report_config_record_create(&handle);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+
+       ret = zb_report_config_record_set_min_interval(handle, min_i);
+       zb_report_config_record_destroy(handle);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_report_config_record_set_min_interval.
+int utc_zb_report_config_record_set_min_interval_n(void)
+{
+       int ret = -1;
+       zb_zcl_read_report_config_record_h handle = NULL;
+       unsigned short min_i = 2;
+
+       ret = zb_report_config_record_create(&handle);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+
+       /* Negative case : handle is null */
+       ret = zb_report_config_record_set_min_interval(NULL, min_i);
+       zb_report_config_record_destroy(handle);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first positive zb_report_config_record_get_min_interval.
+int utc_zb_report_config_record_get_min_interval_p(void)
+{
+       int ret = -1;
+       zb_zcl_read_report_config_record_h handle = NULL;
+       unsigned short min_i = 3;
+
+       zb_report_config_record_create(&handle);
+       ret = zb_report_config_record_get_min_interval(handle, &min_i);
+       zb_report_config_record_destroy(handle);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_report_config_record_get_min_interval.
+int utc_zb_report_config_record_get_min_interval_n(void)
+{
+       int ret = -1;
+       zb_zcl_read_report_config_record_h handle = NULL;
+       unsigned short min_i = 4;
+
+       ret = zb_report_config_record_create(&handle);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+
+       /* Negative case : handle is null */
+       ret = zb_report_config_record_get_min_interval(NULL, &min_i);
+       zb_report_config_record_destroy(handle);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first positive zb_report_config_record_set_max_interval.
+int utc_zb_report_config_record_set_max_interval_p(void)
+{
+       int ret = -1;
+       zb_zcl_read_report_config_record_h handle = NULL;
+       unsigned short max_i = 1000;
+
+       ret = zb_report_config_record_create(&handle);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+
+       ret = zb_report_config_record_set_max_interval(handle, max_i);
+       zb_report_config_record_destroy(handle);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_report_config_record_set_max_interval.
+int utc_zb_report_config_record_set_max_interval_n(void)
+{
+       int ret = -1;
+       zb_zcl_read_report_config_record_h handle = NULL;
+       unsigned short max_i = 2000;
+
+       ret = zb_report_config_record_create(&handle);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+
+       /* Negative case : handle is null */
+       ret = zb_report_config_record_set_max_interval(NULL, max_i);
+       zb_report_config_record_destroy(handle);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first positive zb_report_config_record_get_max_interval.
+int utc_zb_report_config_record_get_max_interval_p(void)
+{
+       int ret = -1;
+       zb_zcl_read_report_config_record_h handle = NULL;
+       unsigned short max_i = 3000;
+
+       ret = zb_report_config_record_create(&handle);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+
+       ret = zb_report_config_record_get_max_interval(handle, &max_i);
+       zb_report_config_record_destroy(handle);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_report_config_record_get_max_interval.
+int utc_zb_report_config_record_get_max_interval_n(void)
+{
+       int ret = -1;
+       zb_zcl_read_report_config_record_h handle = NULL;
+       unsigned short max_i = 4000;
+
+       ret = zb_report_config_record_create(&handle);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+
+       /* Negative case : handle is null */
+       ret = zb_report_config_record_get_max_interval(NULL, &max_i);
+       zb_report_config_record_destroy(handle);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first positive zb_report_config_record_set_timeout.
+int utc_zb_report_config_record_set_timeout_p(void)
+{
+       int ret = -1;
+       zb_zcl_read_report_config_record_h handle = NULL;
+       unsigned short to = 10;
+
+       ret = zb_report_config_record_create(&handle);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+
+       ret = zb_report_config_record_set_timeout(handle, to);
+       zb_report_config_record_destroy(handle);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_report_config_record_set_timeout.
+int utc_zb_report_config_record_set_timeout_n(void)
+{
+       int ret = -1;
+       zb_zcl_read_report_config_record_h handle = NULL;
+       unsigned short to = 60;
+
+       ret = zb_report_config_record_create(&handle);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+
+       /* Negative case : handle is null */
+       ret = zb_report_config_record_set_timeout(NULL, to);
+       zb_report_config_record_destroy(handle);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first positive zb_report_config_record_get_timeout.
+int utc_zb_report_config_record_get_timeout_p(void)
+{
+       int ret = -1;
+       zb_zcl_read_report_config_record_h handle = NULL;
+       unsigned short to = 3000;
+
+       ret = zb_report_config_record_create(&handle);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+
+       ret = zb_report_config_record_get_timeout(handle, &to);
+       zb_report_config_record_destroy(handle);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_report_config_record_get_timeout.
+int utc_zb_report_config_record_get_timeout_n(void)
+{
+       int ret = -1;
+       zb_zcl_read_report_config_record_h handle = NULL;
+       unsigned short to = 4000;
+
+       ret = zb_report_config_record_create(&handle);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+
+       /* Negative case : handle is null */
+       ret = zb_report_config_record_get_timeout(NULL, &to);
+       zb_report_config_record_destroy(handle);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first positive zb_report_config_record_set_change.
+int utc_zb_report_config_record_set_change_p(void)
+{
+       int ret = -1;
+       zb_zcl_data_type_e type = ZB_ZCL_8_BIT_DATA;
+       unsigned char pval[] = {1};
+       zb_zcl_read_report_config_record_h handle = NULL;
+
+       ret = zb_report_config_record_create(&handle);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+
+       ret = zb_report_config_record_set_change(handle, type, pval);
+       zb_report_config_record_destroy(handle);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_report_config_record_set_change.
+int utc_zb_report_config_record_set_change_n(void)
+{
+       int ret = -1;
+       zb_zcl_data_type_e type = ZB_ZCL_32_BIT_DATA;
+       unsigned char pval[] = {1, 0, 0, 0};
+       zb_zcl_read_report_config_record_h handle = NULL;
+
+       ret = zb_report_config_record_create(&handle);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+
+       /* Negative case : handle is null */
+       ret = zb_report_config_record_set_change(NULL, type, pval);
+       zb_report_config_record_destroy(handle);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first positive zb_report_config_record_get_change.
+int utc_zb_report_config_record_get_change_p(void)
+{
+       int ret1;
+       int ret2 = -1;
+       int size = -1;
+       zb_zcl_data_type_e type = ZB_ZCL_24_BIT_DATA;
+       unsigned char pval[] = {0xab, 0xcd, 0xef};
+       unsigned char *lval = NULL;
+       zb_zcl_read_report_config_record_h handle = NULL;
+
+       ret1 = zb_report_config_record_create(&handle);
+       if (false == g_feature) {
+               zb_report_config_record_destroy(handle);
+               assert_eq(ret1, ZIGBEE_ERROR_NOT_SUPPORTED);
+       } else {
+
+               zb_report_config_record_set_change(handle, type, pval);
+               lval = calloc(sizeof(pval), sizeof(char));
+
+               ret1 = zb_report_config_record_get_change(handle, &type, &lval, &size);
+               ret2 = memcmp(pval, lval, sizeof(pval));
+
+               zb_report_config_record_destroy(handle);
+               if (lval) {
+                       free(lval);
+                       lval = NULL;
+               }
+
+               assert_eq(ret1, ZIGBEE_ERROR_NONE);
+               assert_eq(ret2, 0);
+       }
+       return 0;
+}
+
+//& purpose: A purpose of a first positive zb_report_config_record_get_change.
+int utc_zb_report_config_record_get_change_n(void)
+{
+       int ret = -1;
+       int size = -1;
+       zb_zcl_data_type_e type = ZB_ZCL_24_BIT_DATA;
+       unsigned char pval[] = {1, 0, 0};
+       unsigned char *lval = NULL;
+       zb_zcl_read_report_config_record_h handle = NULL;
+
+       ret = zb_report_config_record_create(&handle);
+       if (false == g_feature)
+               assert_eq(ret, ZIGBEE_ERROR_NOT_SUPPORTED);
+       else {
+               if (ZIGBEE_ERROR_NONE != ret) {
+                       LOG("pre-condition error: %d", ret);
+                       return ret;
+               }
+               ret = zb_report_config_record_set_change(handle, type, pval);
+               if (ZIGBEE_ERROR_NONE != ret) {
+                       LOG("pre-condition error: %d", ret);
+                       return ret;
+               }
+
+               /* Negative case : handle is null */
+               ret = zb_report_config_record_get_change(NULL, &type, &lval, &size);
+               zb_report_config_record_destroy(handle);
+               assert_neq(ret, ZIGBEE_ERROR_NONE);
+       }
+       return 0;
+}
+#endif /* SUPPORT_ZCL_REPORT_CONFIG_REPORT */
+
+#if 1 //def SUPPORT_ZCL_READ_REPORT_CONFIG_RECORD
+//& purpose: A purpose of a first positive zb_read_report_config_record_create.
+int utc_zb_read_report_config_record_create_p(void)
+{
+       int ret = -1;
+       zb_zcl_read_report_config_record_h handle = NULL;
+
+       ret = zb_read_report_config_record_create(&handle);
+       zb_read_report_config_record_destroy(handle);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_read_report_config_record_create.
+int utc_zb_read_report_config_record_create_n(void)
+{
+       int ret = -1;
+       zb_zcl_read_report_config_record_h handle = NULL;
+
+       /* Negative case : handle is null */
+       ret = zb_read_report_config_record_create(NULL);
+       zb_read_report_config_record_destroy(handle);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);;
+}
+
+//& purpose: A purpose of a first positive zb_read_report_config_record_destroy.
+int utc_zb_read_report_config_record_destroy_p(void)
+{
+       int ret = -1;
+       zb_zcl_read_report_config_record_h handle = NULL;
+
+       zb_read_report_config_record_create(&handle);
+       ret = zb_read_report_config_record_destroy(handle);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_read_report_config_record_destroy.
+int utc_zb_read_report_config_record_destroy_n(void)
+{
+       int ret = -1;
+
+       /* Negative case : handle is null */
+       ret = zb_read_report_config_record_destroy(NULL);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first positive zb_read_report_config_record_set_dir.
+int utc_zb_read_report_config_record_set_dir_p(void)
+{
+       int ret = -1;
+       zb_zcl_read_report_config_record_h handle = NULL;
+       zb_zcl_fc_direction_e dir = ZB_ZCL_CLIENT_TO_SERVER;
+
+       ret = zb_read_report_config_record_create(&handle);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+
+       ret = zb_read_report_config_record_set_dir(handle, dir);
+       zb_read_report_config_record_destroy(handle);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_read_report_config_record_set_id.
+int utc_zb_read_report_config_record_set_dir_n(void)
+{
+       int ret = -1;
+       zb_zcl_read_report_config_record_h handle = NULL;
+       zb_zcl_fc_direction_e dir = ZB_ZCL_CLIENT_TO_SERVER;
+
+       ret = zb_read_report_config_record_create(&handle);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+
+       /* Negative case : handle is null */
+       ret = zb_read_report_config_record_set_dir(NULL, dir);
+       zb_read_report_config_record_destroy(handle);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first positive zb_read_report_config_record_set_id.
+int utc_zb_read_report_config_record_set_id_p(void)
+{
+       int ret = -1;
+       zb_zcl_read_report_config_record_h handle = NULL;
+       zb_attribute_id id = ZB_ZCL_ATTR_UPGRADE_SERVER_ID;
+
+       ret = zb_read_report_config_record_create(&handle);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+
+       ret = zb_read_report_config_record_set_id(handle, id);
+       zb_read_report_config_record_destroy(handle);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_read_report_config_record_set_id.
+int utc_zb_read_report_config_record_set_id_n(void)
+{
+       int ret = -1;
+       zb_zcl_read_report_config_record_h handle = NULL;
+       zb_attribute_id id = ZB_ZCL_ATTR_UPGRADE_SERVER_ID;
+
+       ret = zb_read_report_config_record_create(&handle);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("pre-condition error: %d", ret);
+               return ret;
+       }
+
+       /* Negative case : handle is null */
+       ret = zb_read_report_config_record_set_id(NULL, id);
+       zb_read_report_config_record_destroy(handle);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+#endif /* SUPPORT_ZCL_READ_REPORT_CONFIG_RECORD */
+
+#if 1 //def SUPPORT_ZCL_REPORT_CONFIG_RESPONSE_RECORD
+
+//& purpose: A purpose of a first negative zb_report_config_response_record_clone.
+int utc_zb_report_config_response_record_clone_n(void)
+{
+       int ret = -1;
+       zb_zcl_read_report_config_record_h src = NULL;
+       zb_zcl_read_report_config_record_h dst = NULL;
+
+       ret = zb_report_config_response_record_clone(src, &dst);
+       zb_report_config_response_record_destroy(src);
+       zb_report_config_response_record_destroy(dst);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_report_config_response_record_destroy.
+int utc_zb_report_config_response_record_destroy_n(void)
+{
+       int ret = -1;
+
+       /* Negative case : handle is null */
+       ret = zb_report_config_response_record_destroy(NULL);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_report_config_response_record_get_status.
+int utc_zb_report_config_response_record_get_status_n(void)
+{
+       int ret = -1;
+       zb_zcl_report_config_response_record_h handle = NULL;
+       zb_zcl_status_e lstatus = ZB_ZCL_STATUS_READ_ONLY;
+
+       /* Negative case : handle is null */
+       ret = zb_report_config_response_record_get_status(NULL, &lstatus);
+       zb_report_config_response_record_destroy(handle);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_report_config_response_record_get_dir.
+int utc_zb_report_config_response_record_get_dir_n(void)
+{
+       int ret = -1;
+       zb_zcl_report_config_response_record_h handle = NULL;
+       zb_zcl_fc_direction_e ldir = ZB_ZCL_CLIENT_TO_SERVER;
+
+       /* Negative case : handle is null */
+       ret = zb_report_config_response_record_get_dir(NULL, &ldir);
+       zb_report_config_response_record_destroy(handle);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_report_config_response_record_get_id.
+int utc_zb_report_config_response_record_get_id_n(void)
+{
+       int ret = -1;
+       zb_zcl_report_config_response_record_h handle = NULL;
+       zb_attribute_id lid = ZB_ZCL_ATTR_LAST_CONFIGURED_BY;
+
+       /* Negative case : handle is null */
+       ret = zb_report_config_response_record_get_id(NULL, &lid);
+       zb_report_config_response_record_destroy(handle);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+#endif /* SUPPORT_ZCL_REPORT_CONFIG_RESPONSE_RECORD */
diff --git a/src/utc/zigbee/utc-zigbee-zdo-dev-disc.c b/src/utc/zigbee/utc-zigbee-zdo-dev-disc.c
new file mode 100644 (file)
index 0000000..6d82842
--- /dev/null
@@ -0,0 +1,453 @@
+//
+// Copyright (c) 2016 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+#include <glib.h>
+
+#include "assert.h"
+#include "utc-zigbee-common.h"
+
+extern bool g_feature;
+extern zb_zigbee_h handle;
+
+/**
+ * @brief Devices specified the HA profile.
+ *
+ * @since_tizen 5.0
+ */
+typedef enum {
+       /* General devices */
+       ZB_HA_ON_OFF_SWITCH = 0x0000, /**< On/off switch device */
+       ZB_HA_LEVEL_CONTROL_SWITCH = 0x0001, /**< Level control device */
+       ZB_HA_ON_OFF_OUTPUT = 0x0002, /**< On/off output device */
+       ZB_HA_LEVEL_CONTROLLABLE_OUTPUT = 0x0003, /**< Controllable output device */
+       ZB_HA_SCENE_SELECOTOR = 0x0004, /**< Scene selector device */
+       ZB_HA_CONFIGURATION_TOOL = 0x0005, /**< Configuration tool device */
+       ZB_HA_REMOTE_CONTROL = 0x0006, /**< Remote control device */
+       ZB_HA_COMBINED_INTERFACE = 0x0007, /**< Combined interface device */
+       ZB_HA_RANGE_EXTENDER = 0x0008, /**< Range extender device */
+       ZB_HA_MAINS_POWER_OUTLET = 0x0009, /**< Main power outlet device */
+       ZB_HA_DOOR_LOCK = 0x000A, /**< Door lock device */
+       ZB_HA_DOOR_LOCK_CONTROLLER = 0x000B, /**< Door lock controller device */
+       ZB_HA_SIMPLE_SENSOR = 0x000C, /**< Simple sensor device */
+       ZB_HA_CONSUMPTION_AWARENESS_DEVICE = 0x000D, /**< Consumption awareness device */
+       ZB_HA_HOME_GATEWAY = 0x0050, /**< Home gateway device */
+       ZB_HA_SMART_PLUG = 0x0051, /**< Smart plug device */
+       ZB_HA_WHITE_GOODS = 0x0052, /**< White goods device */
+       ZB_HA_METER_INTERFACE = 0x0053, /**< Meter interface device */
+       /* Lighting devices */
+       ZB_HA_ON_OFF_LIGHT = 0x0100, /**< On/off light device */
+       ZB_HA_DIMMABLE_LIGHT = 0x0101, /**< Dimmable light device */
+       ZB_HA_COLOR_DIMMABLE_LIGHT = 0x0102, /**< Color dimmable light device */
+       ZB_HA_ON_OFF_LIGHT_SWITCH = 0x0103, /**< On/off light device */
+       ZB_HA_DIMMER_SWITCH = 0x0104, /**< Dimmer switch device */
+       ZB_HA_COLOR_DIMMER_SWITCH = 0x0105, /**< Color dimmer switch device */
+       ZB_HA_LIGHT_SENSOR = 0x0106, /**< Light sensor device */
+       ZB_HA_OCUPANCY_SENSOR = 0x0107, /**< Ocupancy sensor device */
+       /* Closures devices */
+       ZB_HA_SHADE = 0x0200, /**< Shade device */
+       ZB_HA_SHADE_CONTROLLER = 0x0201, /**< Shade controller device */
+       ZB_HA_WINDOW_COVERING_DEVICE = 0x0202, /**< Window covering device */
+       ZB_HA_WINDOW_COVERING_CONTROLLER = 0x0203, /**< Window covering controller device */
+       /* HVAC devices */
+       ZB_HA_HEATING_COOLLING_UNIT = 0x0300, /**< Heating coolling device */
+       ZB_HA_THERMOSTAT = 0x0301, /**< Thermostat device */
+       ZB_HA_TEMPERATURE_SENSOR = 0x0302, /**< Temperature sensor device */
+       ZB_HA_PUMP = 0x0303, /**< Pump device */
+       ZB_HA_PUMP_CONTROLLER = 0x0304, /**< Pump controller device */
+       ZB_HA_PRESSURE_SENSOR = 0x0305, /**< Pressure sensor device */
+       ZB_HA_FLOW_SENSOR = 0x0306, /**< Flow sensor device */
+       ZB_HA_MINI_SPLIT_AC = 0x0307, /**< Mini split device */
+       /* Intruder Alarms system */
+       ZB_HA_IAS_CONTROL_AND_INDICATING_EQUIPMENT = 0x0400, /**< IAS control and indicating equipment device */
+       ZB_HA_IAS_ANCILLARY_CONTROL_EQUIPMENT = 0x0401, /**< IAS ancillary control device */
+       ZB_HA_IAS_ZONE = 0x0402, /**< IAS zone device */
+       ZB_HA_IAS_WARNIGN_DEVICE = 0x0403, /**< IAS warning device */
+} ha_device_id_e;
+
+
+#define CASE_TO_STR(x) case x: return #x;
+
+static const char* zb_zdo_get_error_message(int id)
+{
+       switch (id) {
+       CASE_TO_STR(ZB_ZDP_STATUS_SUCCESS)
+       CASE_TO_STR(ZB_ZDP_STATUS_INVALID_REQUEST_TYPE)
+       CASE_TO_STR(ZB_ZDP_STATUS_DEVICE_NOT_FOUND)
+       CASE_TO_STR(ZB_ZDP_STATUS_INVALID_EP)
+       CASE_TO_STR(ZB_ZDP_STATUS_NOT_ACTIVE)
+       CASE_TO_STR(ZB_ZDP_STATUS_NOT_SUPPORTED)
+       CASE_TO_STR(ZB_ZDP_STATUS_TIMEOUT)
+       CASE_TO_STR(ZB_ZDP_STATUS_NO_MATCH)
+       CASE_TO_STR(ZB_ZDP_STATUS_NO_ENTRY)
+       CASE_TO_STR(ZB_ZDP_STATUS_NO_DESCRIPTOR)
+       CASE_TO_STR(ZB_ZDP_STATUS_INSUFFICIENT_SPACE)
+       CASE_TO_STR(ZB_ZDP_STATUS_NOT_PERMITTED)
+       CASE_TO_STR(ZB_ZDP_STATUS_TABLE_FULL)
+       CASE_TO_STR(ZB_ZDP_STATUS_NOT_AUTHORIZED)
+       CASE_TO_STR(ZB_ZDP_STATUS_DEVICE_BINDING_TABLE_FULL)
+       default :
+               return "ZB_ZDP_UNKNOWN";
+       }
+}
+
+static const char* zb_get_profile_id_string(int profile_id)
+{
+       switch (profile_id) {
+       CASE_TO_STR(ZB_PROFILE_HOME_AUTOMATION)
+       default :
+               return "ZB_UNKNOWN_PROFILE";
+       }
+}
+
+static const char* zb_get_device_id_string(int device_id)
+{
+       switch (device_id) {
+       /* General devices */
+       CASE_TO_STR(ZB_HA_ON_OFF_SWITCH)
+       CASE_TO_STR(ZB_HA_LEVEL_CONTROL_SWITCH)
+       CASE_TO_STR(ZB_HA_ON_OFF_OUTPUT)
+       CASE_TO_STR(ZB_HA_LEVEL_CONTROLLABLE_OUTPUT)
+       CASE_TO_STR(ZB_HA_SCENE_SELECOTOR)
+       CASE_TO_STR(ZB_HA_CONFIGURATION_TOOL)
+       CASE_TO_STR(ZB_HA_REMOTE_CONTROL)
+       CASE_TO_STR(ZB_HA_COMBINED_INTERFACE)
+       CASE_TO_STR(ZB_HA_RANGE_EXTENDER)
+       CASE_TO_STR(ZB_HA_MAINS_POWER_OUTLET)
+       CASE_TO_STR(ZB_HA_DOOR_LOCK)
+       CASE_TO_STR(ZB_HA_DOOR_LOCK_CONTROLLER)
+       CASE_TO_STR(ZB_HA_SIMPLE_SENSOR)
+       CASE_TO_STR(ZB_HA_CONSUMPTION_AWARENESS_DEVICE)
+       CASE_TO_STR(ZB_HA_HOME_GATEWAY)
+       CASE_TO_STR(ZB_HA_SMART_PLUG)
+       CASE_TO_STR(ZB_HA_WHITE_GOODS)
+       CASE_TO_STR(ZB_HA_METER_INTERFACE)
+       /* Lighting devices */
+       CASE_TO_STR(ZB_HA_ON_OFF_LIGHT)
+       CASE_TO_STR(ZB_HA_DIMMABLE_LIGHT)
+       CASE_TO_STR(ZB_HA_COLOR_DIMMABLE_LIGHT)
+       CASE_TO_STR(ZB_HA_ON_OFF_LIGHT_SWITCH)
+       CASE_TO_STR(ZB_HA_DIMMER_SWITCH)
+       CASE_TO_STR(ZB_HA_COLOR_DIMMER_SWITCH)
+       CASE_TO_STR(ZB_HA_LIGHT_SENSOR)
+       CASE_TO_STR(ZB_HA_OCUPANCY_SENSOR)
+       /* Closures devices */
+       CASE_TO_STR(ZB_HA_SHADE)
+       CASE_TO_STR(ZB_HA_SHADE_CONTROLLER)
+       CASE_TO_STR(ZB_HA_WINDOW_COVERING_DEVICE)
+       CASE_TO_STR(ZB_HA_WINDOW_COVERING_CONTROLLER)
+       /* HVAC devices */
+       CASE_TO_STR(ZB_HA_HEATING_COOLLING_UNIT)
+       CASE_TO_STR(ZB_HA_THERMOSTAT)
+       CASE_TO_STR(ZB_HA_TEMPERATURE_SENSOR)
+       CASE_TO_STR(ZB_HA_PUMP)
+       CASE_TO_STR(ZB_HA_PUMP_CONTROLLER)
+       CASE_TO_STR(ZB_HA_PRESSURE_SENSOR)
+       CASE_TO_STR(ZB_HA_FLOW_SENSOR)
+       CASE_TO_STR(ZB_HA_MINI_SPLIT_AC)
+       /* Intruder Alarms system */
+       CASE_TO_STR(ZB_HA_IAS_CONTROL_AND_INDICATING_EQUIPMENT)
+       CASE_TO_STR(ZB_HA_IAS_ANCILLARY_CONTROL_EQUIPMENT)
+       CASE_TO_STR(ZB_HA_IAS_ZONE)
+       default :
+               return "ZB_HA_UNKNOWN_DEVICE";
+       }
+}
+
+static const char* zb_get_cluster_name(int id)
+{
+       switch (id) {
+       CASE_TO_STR(ZB_ZCL_CLUSTER_BASIC)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_POWER_CONFIG)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_DEVICE_TEMP)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_IDENTIFY)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_GROUPS)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_SCENES)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_ON_OFF)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_ON_OFF_SWITCH_CONFIG)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_LEVEL_CONTROL)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_ALARM)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_TIME)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_RSSI_LOCATION)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_BINARY_INPUT_BASIC)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_COMMISSIONING)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_PARTITION)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_OTA_BOOTLOAD)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_POWER_PROFILE)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_APPLIANCE_CONTROL)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_POLL_CONTROL)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_SHADE_CONFIG)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_DOOR_LOCK)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_WINDOW_COVERING)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_PUMP_CONFIG_CONTROL)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_THERMOSTAT)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_FAN_CONTROL)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_DEHUMID_CONTROL)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_THERMOSTAT_UI_CONFIG)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_COLOR_CONTROL)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_BALLAST_CONFIGURATION)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_ILLUM_MEASUREMENT)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_ILLUM_LEVEL_SENSING)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_TEMP_MEASUREMENT)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_PRESSURE_MEASUREMENT)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_FLOW_MEASUREMENT)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_RELATIVE_HUMIDITY_MEASUREMENT)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_OCCUPANCY_SENSING)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_IAS_ZONE)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_IAS_ACE)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_IAS_WD)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_GENERIC_TUNNEL)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_BACNET_PROTOCOL_TUNNEL)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_11073_PROTOCOL_TUNNEL)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_ISO7816_PROTOCOL_TUNNEL)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_PRICE)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_DEMAND_RESPONSE_LOAD_CONTROL)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_SIMPLE_METERING)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_MESSAGING)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_TUNNELING)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_PREPAYMENT)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_ENERGY_MANAGEMENT)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_TOU_CALENDAR)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_DEVICE_MANAGEMENT)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_EVENTS)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_MDU_PAIRING)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_KEY_ESTABLISHMENT)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_INFORMATION)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_DATA_SHARING)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_GAMING)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_DATA_RATE_CONTROL)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_VOICE_OVER_ZIGBEE)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_CHATTING)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_PAYMENT)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_BILLING)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_APPLIANCE_IDENTIFICATION)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_METER_IDENTIFICATION)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_APPLIANCE_EVENTS_AND_ALERT)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_APPLIANCE_STATISTICS)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_ELECTRICAL_MEASUREMENT)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_DIAGNOSTICS)
+       CASE_TO_STR(ZB_ZCL_CLUSTER_ZLL_COMMISSIONING)
+       default:
+               return "UNDEFINED_CLUSTER";
+               break;
+       }
+}
+
+
+void _zb_zdo_addr_rsp(zb_zdp_status_e status, zb_ieee_addr remote_dev_addr64,
+               zb_nwk_addr remote_dev_addr16, unsigned char assoc_dev_len,
+               unsigned char start_idx, zb_device_id *assoc_dev_addr_list, void *user_data)
+{
+       LOG("zb_zdo_addr_cb() status = 0x%02X (%s)", status, zb_zdo_get_error_message(status));
+       if (remote_dev_addr64) {
+               LOG("IEEE Address    : %02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:",
+                       remote_dev_addr64[0], remote_dev_addr64[1], remote_dev_addr64[2],
+                       remote_dev_addr64[3], remote_dev_addr64[4], remote_dev_addr64[5],
+                       remote_dev_addr64[6], remote_dev_addr64[7]);
+       } else {
+               LOG("IEEE Address    : 00:00:00:00:00:00:00:00:");
+       }
+
+       LOG("Network Address : 0x%04X", remote_dev_addr16);
+       LOG("Number of Associated Device : %d", assoc_dev_len);
+       LOG("Start Index : %d", start_idx);
+}
+
+void _zb_zdo_active_ep_rsp(zb_zdp_status_e status, zb_nwk_addr addr16,
+       unsigned char count, unsigned char *ep_list, void *user_data)
+{
+       int i;
+
+       LOG("count  = 0x%02X", count);
+       for (i = 0; i < count; i++)
+               LOG("EP  = 0x%02X", ep_list[i]);
+       LOG("zb_zdo_active_ep_cb() status = 0x%02X (%s)", status,
+               zb_zdo_get_error_message(status));
+}
+
+void _zb_zdo_simple_desc_rsp(zb_nwk_addr addr16, unsigned char len,
+               const zb_zdo_simple_desc_h handle, void *user_data)
+{
+       int i, ret;
+       unsigned char param_u8;
+       unsigned short param_u16;
+       unsigned short *in_clusters;
+       unsigned short *out_clusters;
+
+       LOG("zb_zdo_simple_desc_cb()");
+
+       ret = zb_simple_desc_get_ep(handle, &param_u8);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("zb_simple_desc_get_ep() Fail(0x%X)", ret);
+       } else {
+               LOG("  ep = %d", param_u8);
+       }
+
+       ret = zb_simple_desc_get_profile_id(handle, &param_u16);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("zb_simple_desc_get_profile_id() Fail(0x%X)", ret);
+       } else {
+               LOG("  profile_id = 0x%x (%s)", param_u16, zb_get_profile_id_string(param_u16));
+       }
+
+       ret = zb_simple_desc_get_device_id(handle, &param_u16);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("zb_simple_desc_get_device_id() Fail(0x%X)", ret);
+       } else {
+               LOG("  device_id = 0x%x (%s)", param_u16, zb_get_device_id_string(param_u16));
+       }
+
+       ret = zb_simple_desc_get_device_ver(handle, &param_u16);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("zb_simple_desc_get_device_ver() Fail(0x%X)", ret);
+       } else {
+               LOG("  device_ver = %d", param_u16);
+       }
+
+       ret = zb_simple_desc_get_num_of_in_clusters(handle, &param_u8);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("zb_simple_desc_get_num_of_in_clusters() Fail(0x%X)", ret);
+       } else {
+               LOG("  num_of_in_cluster = %d", param_u8);
+       }
+
+       ret = zb_simple_desc_get_in_clusters(handle, &in_clusters);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("zb_simple_desc_get_in_clusters() Fail(0x%X)", ret);
+       } else {
+               for (i = 0; i < param_u8; i++)
+                       LOG("    %04X (%s)", in_clusters[i], zb_get_cluster_name(in_clusters[i]));
+       }
+
+       ret = zb_simple_desc_get_num_of_out_clusters(handle, &param_u8);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("zb_simple_desc_get_num_of_out_clusters() Fail(0x%X)", ret);
+       } else {
+               LOG("  num_of_out_cluster = %d", param_u8);
+       }
+
+       ret = zb_simple_desc_get_out_clusters(handle, &out_clusters);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("zb_simple_desc_get_out_clusters() Fail(0x%X)", ret);
+       } else {
+               for (i = 0; i < param_u8; i++)
+                       LOG("    %04X (%s)", out_clusters[i], zb_get_cluster_name(out_clusters[i]));
+       }
+}
+
+void _zb_zdo_extended_simple_desc_rsp(zb_zdp_status_e status,
+       zb_nwk_addr addr16, zb_end_point ep, unsigned char app_input_cluster_count,
+       unsigned char app_output_cluster_count, unsigned char start_idx,
+       const unsigned char *app_cluster_list, void *user_data)
+{
+       LOG("_zb_zdo_extended_simple_desc_rsp() status = 0x%02X (%s)",
+               status, zb_zdo_get_error_message(status));
+}
+
+//& purpose: A purpose of a first positive zb_zdo_nwk_addr_req.
+int utc_zb_zdo_nwk_addr_req_p(void)
+{
+       int ret;
+       zb_ieee_addr addr64 = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 };
+       unsigned char request_type = 1;
+       unsigned char start_idx = 1;
+
+       ret = zb_zdo_nwk_addr_req(handle, addr64, request_type, start_idx,
+                               _zb_zdo_addr_rsp, NULL);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_zdo_nwk_addr_req.
+int utc_zb_zdo_nwk_addr_req_n(void)
+{
+       int ret;
+       zb_ieee_addr addr64 = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 };
+       unsigned char request_type = 1;
+       unsigned char start_idx = 1;
+
+       ret = zb_zdo_nwk_addr_req(NULL, addr64, request_type, start_idx,
+                               _zb_zdo_addr_rsp, NULL);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first positive zb_zdo_ieee_addr_req.
+int utc_zb_zdo_ieee_addr_req_p(void)
+{
+       int ret;
+       zb_nwk_addr addr16 = 0x1111;
+
+       ret = zb_zdo_ieee_addr_req(handle, addr16, _zb_zdo_addr_rsp, NULL);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_zdo_ieee_addr_req.
+int utc_zb_zdo_ieee_addr_req_n(void)
+{
+       int ret;
+       zb_nwk_addr addr16 = 0x1111;
+
+       ret = zb_zdo_ieee_addr_req(NULL, addr16, _zb_zdo_addr_rsp, NULL);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first positive zb_zdo_active_ep.
+int utc_zb_zdo_active_ep_p(void)
+{
+       int ret;
+       zb_nwk_addr addr16 = 0x1111;
+
+       ret = zb_zdo_active_ep(handle, addr16, _zb_zdo_active_ep_rsp, NULL);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_zdo_active_ep.
+int utc_zb_zdo_active_ep_n(void)
+{
+       int ret;
+       zb_nwk_addr addr16 = 0x1111;
+
+       ret = zb_zdo_active_ep(NULL, addr16, _zb_zdo_active_ep_rsp, NULL);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first positive zb_zdo_simple_desc_req.
+int utc_zb_zdo_simple_desc_req_p(void)
+{
+       int ret;
+       zb_nwk_addr addr16 = 0x1111;
+       unsigned char ep = 1;
+
+       ret = zb_zdo_simple_desc_req(handle, addr16, ep, _zb_zdo_simple_desc_rsp, NULL);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_zdo_simple_desc_req.
+int utc_zb_zdo_simple_desc_req_n(void)
+{
+       int ret;
+       zb_nwk_addr addr16 = 0x1111;
+       unsigned char ep = 1;
+
+       ret = zb_zdo_simple_desc_req(NULL, addr16, ep, _zb_zdo_simple_desc_rsp, NULL);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
diff --git a/src/utc/zigbee/utc-zigbee-zdo.c b/src/utc/zigbee/utc-zigbee-zdo.c
new file mode 100644 (file)
index 0000000..e34695b
--- /dev/null
@@ -0,0 +1,486 @@
+//
+// Copyright (c) 2016 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+#include <glib.h>
+
+#include "assert.h"
+#include "utc-zigbee-common.h"
+
+extern bool g_feature;
+extern zb_zigbee_h handle;
+
+static GMainLoop *main_loop = NULL;
+
+zb_zdo_simple_desc_h simple_desc = NULL;
+
+void utc_zdo_simple_desc_startup(void)
+{
+       /* Initialize simple descriptor handle */
+       utc_startup();
+       zb_simple_desc_create(&simple_desc);
+
+       return;
+}
+
+void utc_zdo_simple_desc_cleanup(void)
+{
+       /* De-Initialize simple descriptor handle */
+       zb_simple_desc_destroy(simple_desc);
+       simple_desc = NULL;
+       utc_cleanup();
+
+       return;
+}
+
+void utc_zdo_getter_startup(void)
+{
+       zb_create(&handle);
+       main_loop = g_main_loop_new(NULL, FALSE);
+
+       return;
+}
+
+void utc_zdo_getter_cleanup(void)
+{
+       zb_destroy(handle);
+       handle = NULL;
+
+       g_main_loop_unref(main_loop);
+       main_loop = NULL;
+
+       return;
+}
+
+//& purpose: A purpose of a first positive zb_simple_desc_create.
+int utc_zb_simple_desc_create_p(void)
+{
+       int ret;
+       zb_zdo_simple_desc_h zdo_simple_desc = NULL;
+
+       ret = zb_simple_desc_create(&zdo_simple_desc);
+       zb_simple_desc_destroy(zdo_simple_desc);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_simple_desc_create.
+int utc_zb_simple_desc_create_n(void)
+{
+       int ret;
+
+       ret = zb_simple_desc_create(NULL);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first positive zb_simple_desc_destroy.
+int utc_zb_simple_desc_destroy_p(void)
+{
+       int ret;
+       zb_zdo_simple_desc_h zdo_simple_desc = NULL;
+
+       zb_simple_desc_create(&zdo_simple_desc);
+       ret = zb_simple_desc_destroy(zdo_simple_desc);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_simple_desc_destroy.
+int utc_zb_simple_desc_destroy_n(void)
+{
+       int ret;
+
+       ret = zb_simple_desc_destroy(NULL);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first positive zb_simple_desc_clone.
+int utc_zb_simple_desc_clone_p(void)
+{
+       int ret;
+       zb_zdo_simple_desc_h new_simple_desc = NULL;
+
+       zb_simple_desc_create(&new_simple_desc);
+       ret = zb_simple_desc_clone(simple_desc, new_simple_desc);
+       zb_simple_desc_destroy(new_simple_desc);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_simple_desc_clone.
+int utc_zb_simple_desc_clone_n(void)
+{
+       int ret;
+
+       ret = zb_simple_desc_clone(simple_desc, NULL);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first positive zb_simple_desc_get_ep.
+int utc_zb_simple_desc_get_ep_p(void)
+{
+       int ret;
+       zb_end_point ep;
+
+       ret = zb_simple_desc_get_ep(simple_desc, &ep);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_simple_desc_get_ep.
+int utc_zb_simple_desc_get_ep_n(void)
+{
+       int ret;
+
+       ret = zb_simple_desc_get_ep(NULL, NULL);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first positive zb_simple_desc_set_ep.
+int utc_zb_simple_desc_set_ep_p(void)
+{
+       int ret;
+       unsigned char ep = 1;
+
+       ret = zb_simple_desc_set_ep(simple_desc, ep);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_simple_desc_set_ep.
+int utc_zb_simple_desc_set_ep_n(void)
+{
+       int ret;
+       unsigned char ep = 1;
+
+       ret = zb_simple_desc_set_ep(NULL, ep);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first positive zb_simple_desc_get_profile_id.
+int utc_zb_simple_desc_get_profile_id_p(void)
+{
+       int ret;
+       unsigned short profile_id;
+
+       ret = zb_simple_desc_get_profile_id(simple_desc, &profile_id);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_simple_desc_get_profile_id.
+int utc_zb_simple_desc_get_profile_id_n(void)
+{
+       int ret;
+
+       ret = zb_simple_desc_get_profile_id(NULL, NULL);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first positive zb_simple_desc_set_profile_id.
+int utc_zb_simple_desc_set_profile_id_p(void)
+{
+       int ret;
+       unsigned short profile_id = 1;
+
+       ret = zb_simple_desc_set_profile_id(simple_desc, profile_id);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_simple_desc_set_profile_id.
+int utc_zb_simple_desc_set_profile_id_n(void)
+{
+       int ret;
+       unsigned short profile_id = 1;
+
+       ret = zb_simple_desc_set_profile_id(NULL, profile_id);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first positive zb_simple_desc_get_device_id.
+int utc_zb_simple_desc_get_device_id_p(void)
+{
+       int ret;
+       unsigned short device_id;
+
+       ret = zb_simple_desc_get_device_id(simple_desc, &device_id);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_simple_desc_get_device_id.
+int utc_zb_simple_desc_get_device_id_n(void)
+{
+       int ret;
+
+       ret = zb_simple_desc_get_device_id(NULL, NULL);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first positive zb_simple_desc_set_device_id.
+int utc_zb_simple_desc_set_device_id_p(void)
+{
+       int ret;
+       unsigned short device_id = 1;
+
+       ret = zb_simple_desc_set_device_id(simple_desc, device_id);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_simple_desc_set_device_id.
+int utc_zb_simple_desc_set_device_id_n(void)
+{
+       int ret;
+       unsigned short device_id = 1;
+
+       ret = zb_simple_desc_set_device_id(NULL, device_id);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first positive zb_simple_desc_get_device_ver.
+int utc_zb_simple_desc_get_device_ver_p(void)
+{
+       int ret;
+       unsigned short device_ver;
+
+       ret = zb_simple_desc_get_device_ver(simple_desc, &device_ver);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_simple_desc_get_device_ver.
+int utc_zb_simple_desc_get_device_ver_n(void)
+{
+       int ret;
+
+       ret = zb_simple_desc_get_device_ver(NULL, NULL);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first positive zb_simple_desc_set_device_ver.
+int utc_zb_simple_desc_set_device_ver_p(void)
+{
+       int ret;
+       unsigned short device_ver = 1;
+
+       ret = zb_simple_desc_set_device_ver(simple_desc, device_ver);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_simple_desc_set_device_ver.
+int utc_zb_simple_desc_set_device_ver_n(void)
+{
+       int ret;
+       unsigned short device_ver = 1;
+
+       ret = zb_simple_desc_set_device_ver(NULL, device_ver);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first positive zb_simple_desc_get_num_of_in_clusters.
+int utc_zb_simple_desc_get_num_of_in_clusters_p(void)
+{
+       int ret;
+       unsigned char num;
+
+       ret = zb_simple_desc_get_num_of_in_clusters(simple_desc, &num);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_simple_desc_get_num_of_in_clusters.
+int utc_zb_simple_desc_get_num_of_in_clusters_n(void)
+{
+       int ret;
+
+       ret = zb_simple_desc_get_num_of_in_clusters(NULL, NULL);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first positive zb_simple_desc_set_num_of_in_clusters.
+int utc_zb_simple_desc_set_num_of_in_clusters_p(void)
+{
+       int ret;
+       unsigned char num = 1;
+
+       ret = zb_simple_desc_set_num_of_in_clusters(simple_desc, num);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_simple_desc_set_num_of_in_clusters.
+int utc_zb_simple_desc_set_num_of_in_clusters_n(void)
+{
+       int ret;
+       unsigned char num = 1;
+
+       ret = zb_simple_desc_set_num_of_in_clusters(NULL, num);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first positive zb_simple_desc_get_num_of_out_clusters.
+int utc_zb_simple_desc_get_num_of_out_clusters_p(void)
+{
+       int ret;
+       unsigned char num;
+
+       ret = zb_simple_desc_get_num_of_out_clusters(simple_desc, &num);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_simple_desc_get_num_of_out_clusters.
+int utc_zb_simple_desc_get_num_of_out_clusters_n(void)
+{
+       int ret;
+
+       ret = zb_simple_desc_get_num_of_out_clusters(NULL, NULL);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first positive zb_simple_desc_set_num_of_out_clusters.
+int utc_zb_simple_desc_set_num_of_out_clusters_p(void)
+{
+       int ret;
+       unsigned char num = 1;
+
+       ret = zb_simple_desc_set_num_of_out_clusters(simple_desc, num);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_simple_desc_set_num_of_out_clusters.
+int utc_zb_simple_desc_set_num_of_out_clusters_n(void)
+{
+       int ret;
+       unsigned char num = 1;
+
+       ret = zb_simple_desc_set_num_of_out_clusters(NULL, num);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first positive zb_simple_desc_get_in_clusters.
+int utc_zb_simple_desc_get_in_clusters_p(void)
+{
+       int ret;
+       unsigned short *in_clusters;
+
+       ret = zb_simple_desc_get_in_clusters(simple_desc, &in_clusters);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_simple_desc_get_in_clusters.
+int utc_zb_simple_desc_get_in_clusters_n(void)
+{
+       int ret;
+
+       ret = zb_simple_desc_get_in_clusters(NULL, NULL);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first positive zb_simple_desc_set_in_clusters.
+int utc_zb_simple_desc_set_in_clusters_p(void)
+{
+       int ret;
+       unsigned short clusters[3];
+       unsigned short num = 3;
+
+       clusters[0] = ZB_ZCL_CLUSTER_BASIC;
+       clusters[1] = ZB_ZCL_CLUSTER_GROUPS;
+       clusters[2] = ZB_ZCL_CLUSTER_ON_OFF;
+
+       ret = zb_simple_desc_set_in_clusters(simple_desc, clusters, num);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_simple_desc_set_in_clusters.
+int utc_zb_simple_desc_set_in_clusters_n(void)
+{
+       int ret;
+       unsigned short num = 0;
+
+       ret = zb_simple_desc_set_in_clusters(NULL, NULL, num);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first positive zb_simple_desc_get_out_clusters.
+int utc_zb_simple_desc_get_out_clusters_p(void)
+{
+       int ret;
+       unsigned short *out_clusters;
+
+       ret = zb_simple_desc_get_out_clusters(simple_desc, &out_clusters);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_simple_desc_get_out_clusters.
+int utc_zb_simple_desc_get_out_clusters_n(void)
+{
+       int ret;
+
+       ret = zb_simple_desc_get_out_clusters(NULL, NULL);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first positive zb_simple_desc_set_out_clusters.
+int utc_zb_simple_desc_set_out_clusters_p(void)
+{
+       int ret;
+       int num = 3;
+       unsigned short clusters[3];
+
+       clusters[0] = ZB_ZCL_CLUSTER_BASIC;
+       clusters[1] = ZB_ZCL_CLUSTER_GROUPS;
+       clusters[2] = ZB_ZCL_CLUSTER_ON_OFF;
+
+       ret = zb_simple_desc_set_out_clusters(simple_desc, clusters, num);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+//& purpose: A purpose of a first negative zb_simple_desc_set_out_clusters.
+int utc_zb_simple_desc_set_out_clusters_n(void)
+{
+       int ret;
+       int num = 0;
+
+       ret = zb_simple_desc_set_out_clusters(NULL, NULL, num);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
diff --git a/src/utc/zigbee/utc-zigbee.c b/src/utc/zigbee/utc-zigbee.c
new file mode 100644 (file)
index 0000000..63dbbfc
--- /dev/null
@@ -0,0 +1,1379 @@
+//
+// Copyright (c) 2014 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+#include <system_info.h>
+#include <glib.h>
+#include <dlog.h>
+
+#include "assert.h"
+#include "utc-zigbee-common.h"
+
+bool g_feature = false;
+zb_zigbee_h handle = NULL;
+static GMainLoop *main_loop = NULL;
+static int callback_ret = ZIGBEE_ERROR_OPERATION_FAILED;
+
+//& set: Zigbee
+#define CASE_TO_STR(x) case x: return #x;
+
+static const char* zigbee_error_to_string(zb_error_e err)
+{
+       switch (err) {
+       /* CHECK: List all enum values here */
+       CASE_TO_STR(ZIGBEE_ERROR_NONE)
+       CASE_TO_STR(ZIGBEE_ERROR_INVALID_PARAMETER)
+       CASE_TO_STR(ZIGBEE_ERROR_PARAMETER_OUT_OF_RANGE)
+       CASE_TO_STR(ZIGBEE_ERROR_OUT_OF_MEMORY)
+       CASE_TO_STR(ZIGBEE_ERROR_IO_ERROR)
+       CASE_TO_STR(ZIGBEE_ERROR_NO_DATA)
+       CASE_TO_STR(ZIGBEE_ERROR_NOT_SUPPORTED)
+       CASE_TO_STR(ZIGBEE_ERROR_PERMISSION_DENIED)
+       CASE_TO_STR(ZIGBEE_ERROR_INVALID_ENDPOINT)
+       CASE_TO_STR(ZIGBEE_ERROR_INVALID_ADDRESS)
+       CASE_TO_STR(ZIGBEE_ERROR_OPERATION_FAILED)
+       default :
+               return "ZIGBEE_ERROR_UNKNOWN";
+       }
+}
+
+static void _on_event(zb_nwk_addr addr16, zb_ieee_addr addr64, zb_event_e e,
+       zb_event_data_h ev, void *user_data)
+{
+       LOG("Zigbee event [%0X]\n", e);
+       callback_ret = ZIGBEE_ERROR_NONE;
+
+       /* Terminate main loop */
+       if (main_loop)
+               g_main_loop_quit(main_loop);
+}
+
+/**
+ * @function      utc_startup
+ * @description   Called before each test
+ * @parameter     NA
+ * @return        NA
+ */
+void utc_startup(void)
+{
+       int ret;
+       g_feature = false;
+
+       /* Find out Zigbee feature supported on DUT */
+       system_info_get_platform_bool("http://tizen.org/feature/network.zigbee", &g_feature);
+       if (false == g_feature) {
+               LOG("Zigbee feature is not enabled.\n");
+               PRINT_RETURN("system_info_get_platform_bool", g_feature);
+       }
+
+
+       /* Check serial driver loaded for Zigbee */
+       ret = zb_create(&handle);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("Failed to zb_create : [%s]\n", zigbee_error_to_string(ret));
+               PRINT_RETURN("zb_create", ret);
+               return;
+       }
+
+       zb_set_event_cb(handle, _on_event);
+#if 0
+       ret = zb_enable(handle);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               //LOG("Failed to zb_enable : [%d]", ret);
+               return;
+       }
+#endif
+}
+
+/**
+ * @function      utc_cleanup
+ * @description   Called after each test
+ * @parameter     NA
+ * @return        NA
+ */
+void utc_cleanup(void)
+{
+       int ret;
+
+       ret = zb_destroy(handle);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("Failed to zb_destroy : [%s]", zigbee_error_to_string(ret));
+               return;
+       }
+}
+
+int check_result_p(const char *api_name, const char *file_name, int line, int ret)
+{
+       PRINT_RETURN1(api_name, file_name, line, ret);
+
+       if (false == g_feature)
+               assert_eq(ret, ZIGBEE_ERROR_NOT_SUPPORTED);
+       assert_eq(ret, ZIGBEE_ERROR_NONE);
+
+       return ZIGBEE_ERROR_NONE;
+}
+
+int check_result_n(const char *api_name, const char *file_name, int line, int ret)
+{
+       PRINT_RETURN1(api_name, file_name, line, ret);
+
+       if (false == g_feature)
+               assert_eq(ret, ZIGBEE_ERROR_NOT_SUPPORTED);
+       assert_neq(ret, ZIGBEE_ERROR_NONE);
+
+       return ZIGBEE_ERROR_NONE;
+}
+
+/**
+ * @testcase           utc_zb_create_p
+ * @since_tizen                5.0
+ * @type                       Positive
+ * @description                Initializes Zigbee API handle.
+ * @scenario           Initializes Zigbee API handle.
+ *                  If already created, removes it and creates again.
+ */
+int utc_zb_create_p(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+
+       if (false == g_feature) {
+               PRINT_RETURN("zb_create", ret);
+               assert_eq(ret, ZIGBEE_ERROR_NOT_SUPPORTED);
+               return 0;
+       }
+
+       if (NULL != handle) {
+               zb_destroy(handle);
+       }
+
+       ret = zb_create(&handle);
+       PRINT_RETURN("zb_create", ret);
+       assert_eq(ret, ZIGBEE_ERROR_NONE);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_zb_create_n
+ * @since_tizen                5.0
+ * @type                       Negative
+ * @description                Initializes Zigbee.
+ * @scenario           Initialize Zigbee.
+ *                  Ensure return value should be ZIGBEE_ERROR_INVALID_PARAMETER.
+ */
+int utc_zb_create_n(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+
+       ret = zb_create(NULL);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+/**
+ * @testcase           utc_zb_destroy_p
+ * @since_tizen                5.0
+ * @type                       Positive
+ * @description                Destroys Zigbee API handle.
+ * @scenario           Destroys Zigbee API handle.
+ *                  Ensure return value should be ZIGBEE_ERROR_NONE.
+ */
+int utc_zb_destroy_p(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+       zb_zigbee_h handle2 = NULL;
+
+       zb_create(&handle2);
+
+       ret = zb_destroy(handle2);
+       handle = NULL;
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+/**
+ * @testcase           utc_zb_destroy_n
+ * @since_tizen                5.0
+ * @type                       Negative
+ * @description                Destroys Zigbee API handle.
+ * @scenario           Destroys Zigbee API handle.
+ *                  Ensure return value should be ZIGBEE_ERROR_INVALID_PARAMETER.
+ */
+int utc_zb_destroy_n(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+
+       ret = zb_destroy(NULL);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+/**
+ * @testcase           utc_zb_ev_get_enable_status_n
+ * @since_tizen                5.0
+ * @type                       Negative
+ * @description                Gets enable status code of the event.
+ * @scenario           Gets enable status code of the event.
+ *                  Ensure return value should be ZIGBEE_ERROR_INVALID_PARAMETER.
+ */
+int utc_zb_ev_get_enable_status_n(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+       zb_error_e status;
+
+       ret = zb_ev_get_enable_status(NULL, &status);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+/**
+ * @testcase           utc_zb_ev_get_form_network_panid_n
+ * @since_tizen                5.0
+ * @type                       Negative
+ * @description                zb_ev_get_form_network_panid of the event.
+ * @scenario           zb_ev_get_form_network_panid of the event.
+ *                  Ensure return value should be ZIGBEE_ERROR_INVALID_PARAMETER.
+ */
+int utc_zb_ev_get_form_network_panid_n(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+       zb_nwk_addr panid;
+
+       ret = zb_ev_get_form_network_panid(NULL, &panid);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+/**
+ * @testcase           utc_zb_ev_get_join_count_n
+ * @since_tizen                5.0
+ * @type                       Negative
+ * @description                Gets the end-point number at a new device joined from the event.
+ * @scenario           Gets the end-point number at a new device joined from the event.
+ *                  Ensure return value should be ZIGBEE_ERROR_INVALID_PARAMETER.
+ */
+int utc_zb_ev_get_join_count_n(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+       unsigned char count;
+
+       ret = zb_ev_get_join_count(NULL, &count);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+/**
+ * @testcase           utc_zb_ev_get_join_ep_n
+ * @since_tizen                5.0
+ * @type                       Negative
+ * @description                Gets the end-point list at a new device joined.
+ * @scenario           Gets the end-point list at a new device joined.
+ *                  Ensure return value should be ZIGBEE_ERROR_INVALID_PARAMETER.
+ */
+int utc_zb_ev_get_join_ep_n(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+       unsigned char *ep = NULL;
+
+       ret = zb_ev_get_join_ep(NULL, (unsigned char **)&ep);
+       if (ep) {
+               free(ep);
+               ep = NULL;
+       }
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+/**
+ * @testcase           utc_zb_ev_get_child_left_status_n
+ * @since_tizen                5.0
+ * @type                       Negative
+ * @description                Gets status code of when child device left.
+ * @scenario           Gets status code of when child device left.
+ *                  Ensure return value should be ZIGBEE_ERROR_INVALID_PARAMETER.
+ */
+int utc_zb_ev_get_child_left_status_n(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+       zb_error_e status;
+
+       ret = zb_ev_get_child_left_status(NULL, &status);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+/**
+ * @testcase           utc_zb_ev_get_global_default_rsp_ep_n
+ * @since_tizen                5.0
+ * @type                       Negative
+ * @description                Gets the end-point number of who sent this default response.
+ * @scenario           Gets the end-point number of who sent this default response.
+ *                  Ensure return value should be ZIGBEE_ERROR_INVALID_PARAMETER.
+ */
+int utc_zb_ev_get_global_default_rsp_ep_n(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+       zb_end_point ep;
+
+       ret = zb_ev_get_global_default_rsp_ep(NULL, &ep);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+/**
+ * @testcase           utc_zb_ev_get_global_default_rsp_cluster_id_n
+ * @since_tizen                5.0
+ * @type                       Negative
+ * @description                Gets the cluster id of who sent this default response.
+ * @scenario           Gets the cluster id of who sent this default response.
+ *                  Ensure return value should be ZIGBEE_ERROR_INVALID_PARAMETER.
+ */
+int utc_zb_ev_get_global_default_rsp_cluster_id_n(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+       unsigned short cluster_id;
+
+       ret = zb_ev_get_global_default_rsp_cluster_id(NULL, &cluster_id);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+/**
+ * @testcase           utc_zb_ev_get_global_default_rsp_command_id_n
+ * @since_tizen                5.0
+ * @type                       Negative
+ * @description                Gets the command id of who sent this default response.
+ * @scenario           Gets the command id of who sent this default response.
+ *                  Ensure return value should be ZIGBEE_ERROR_INVALID_PARAMETER.
+ */
+int utc_zb_ev_get_global_default_rsp_command_id_n(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+       unsigned char cmd_id;
+
+       ret = zb_ev_get_global_default_rsp_command_id(NULL, &cmd_id);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+/**
+ * @testcase           utc_zb_ev_get_global_default_rsp_status_n
+ * @since_tizen                5.0
+ * @type                       Negative
+ * @description     Gets status code of a default response of the global command request.
+ * @scenario        Gets status code of a default response of the global command request.
+ *                  Ensure return value should be ZIGBEE_ERROR_INVALID_PARAMETER.
+ *
+ */
+int utc_zb_ev_get_global_default_rsp_status_n(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+       zb_zcl_status_e status;
+
+       ret = zb_ev_get_global_default_rsp_status(NULL, &status);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+/**
+ * @testcase           utc_zb_ev_get_enroll_request_src_ep_n
+ * @since_tizen                5.0
+ * @type                       Negative
+ * @description     Gets the end-point number of thet this enroll request.
+ * @scenario           Gets the end-point number of who sent this enroll request.
+ *                  Ensure return value should be ZIGBEE_ERROR_INVALID_PARAMETER.
+ *
+ */
+int utc_zb_ev_get_enroll_request_src_ep_n(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+       zb_end_point ep;
+
+       ret = zb_ev_get_enroll_request_src_ep(NULL, &ep);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+/**
+ * @testcase           utc_zb_ev_get_enroll_request_zone_type_n
+ * @since_tizen                5.0
+ * @type                       Negative
+ * @description     Gets zone type of the enroll request.
+ * @scenario           Gets zone type of the enroll request.
+ *                  Ensure return value should be ZIGBEE_ERROR_INVALID_PARAMETER.
+ */
+int utc_zb_ev_get_enroll_request_zone_type_n(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+       zb_zcl_ias_zone_type_e zone_type;
+
+       ret = zb_ev_get_enroll_request_zone_type(NULL, &zone_type);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+/**
+ * @testcase           utc_zb_ev_get_enroll_request_mfg_code_n
+ * @since_tizen                5.0
+ * @type                       Negative
+ * @description     Gets manufacturer code of the enroll request.
+ * @scenario           Gets manufacturer code of the enroll request.
+ *                  Ensure return value should be ZIGBEE_ERROR_INVALID_PARAMETER.
+ */
+int utc_zb_ev_get_enroll_request_mfg_code_n(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+       unsigned char mfg_code;
+
+       ret = zb_ev_get_enroll_request_mfg_code(NULL, &mfg_code);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+/**
+ * @testcase           utc_zb_ev_get_ias_noti_src_ep_n
+ * @since_tizen                5.0
+ * @type                       Negative
+ * @description     Gets the end-point number of the IAS notification.
+ * @scenario           Gets the end-point number of the IAS notification.
+ *                  Ensure return value should be ZIGBEE_ERROR_INVALID_PARAMETER.
+ */
+int utc_zb_ev_get_ias_noti_src_ep_n(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+       unsigned char src_ep;
+
+       ret = zb_ev_get_ias_noti_src_ep(NULL, &src_ep);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+/**
+ * @testcase           utc_zb_ev_get_ias_noti_zone_status_n
+ * @since_tizen                5.0
+ * @type                       Negative
+ * @description     Gets zone status of the IAS notification.
+ * @scenario           Gets zone status of the IAS notification.
+ *                  Ensure return value should be ZIGBEE_ERROR_INVALID_PARAMETER.
+ */
+int utc_zb_ev_get_ias_noti_zone_status_n(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+       unsigned short zone_status;
+
+       ret = zb_ev_get_ias_noti_zone_status(NULL, &zone_status);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+/**
+ * @testcase           utc_zb_ev_get_ias_ext_noti_src_ep_n
+ * @since_tizen                5.0
+ * @type                       Negative
+ * @description     Gets the end-point number of the IAS extended notification.
+ * @scenario           Gets the end-point number of the IAS extended notification.
+ *                  Ensure return value should be ZIGBEE_ERROR_INVALID_PARAMETER.
+ */
+int utc_zb_ev_get_ias_ext_noti_src_ep_n(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+       unsigned char src_ep;
+
+       ret = zb_ev_get_ias_ext_noti_src_ep(NULL, &src_ep);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+/**
+ * @testcase           utc_zb_ev_get_ias_ext_noti_status_n
+ * @since_tizen                5.0
+ * @type                       Negative
+ * @description     Gets status of the IAS extended notification.
+ * @scenario           Gets status of the IAS extended notification.
+ *                  Ensure return value should be ZIGBEE_ERROR_INVALID_PARAMETER.
+ */
+int utc_zb_ev_get_ias_ext_noti_status_n(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+       unsigned char status;
+
+       ret = zb_ev_get_ias_ext_noti_status(NULL, &status);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+/**
+ * @testcase           utc_zb_ev_get_ias_ext_noti_zone_status_n
+ * @since_tizen                5.0
+ * @type                       Negative
+ * @description     Gets zone status of the IAS extended notification.
+ * @scenario           Gets zone status of the IAS extended notification.
+ *                  Ensure return value should be ZIGBEE_ERROR_INVALID_PARAMETER.
+ */
+int utc_zb_ev_get_ias_ext_noti_zone_status_n(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+       unsigned short zone_status;
+
+       ret = zb_ev_get_ias_ext_noti_zone_status(NULL, &zone_status);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+
+/**
+ * @testcase           utc_zb_ev_get_ias_ext_noti_delay_n
+ * @since_tizen                5.0
+ * @type                       Negative
+ * @description     Gets delay of the IAS extended notification.
+ * @scenario           Gets delay of the IAS extended notification.
+ *                  Ensure return value should be ZIGBEE_ERROR_INVALID_PARAMETER.
+ */
+int utc_zb_ev_get_ias_ext_noti_delay_n(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+       unsigned short delay;
+
+       ret = zb_ev_get_ias_ext_noti_delay(NULL, &delay);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+/**
+ * @testcase           utc_zb_ev_get_ias_ext_noti_zone_id_n
+ * @since_tizen                5.0
+ * @type                       Negative
+ * @description     Gets zond id of the IAS extended notification.
+ * @scenario           Gets zond id of the IAS extended notification.
+ *                  Ensure return value should be ZIGBEE_ERROR_INVALID_PARAMETER.
+ */
+int utc_zb_ev_get_ias_ext_noti_zone_id_n(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+       unsigned char zone_id;
+
+       ret = zb_ev_get_ias_ext_noti_zone_id(NULL, &zone_id);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+/**
+ * @testcase           utc_zb_set_event_cb_p
+ * @since_tizen                5.0
+ * @type                       Positive
+ * @description                Sets event callback function.
+ * @scenario           Sets event callback function.
+ *                  Ensure return value should be ZIGBEE_ERROR_NONE.
+ */
+int utc_zb_set_event_cb_p(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+
+       ret = zb_set_event_cb(handle, NULL);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+/**
+ * @testcase           utc_zb_set_event_cb_n
+ * @since_tizen                5.0
+ * @type                       Negative
+ * @description                Destroys Zigbee API handle.
+ * @scenario           Destroys Zigbee API handle.
+ *                  Ensure return value should be ZIGBEE_ERROR_INVALID_PARAMETER.
+ */
+int utc_zb_set_event_cb_n(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+
+       ret = zb_set_event_cb(NULL, NULL);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+static void _on_form_network(zb_nwk_addr panid, void *user_data)
+{
+       callback_ret = ZIGBEE_ERROR_NONE;
+
+       /* Terminate main loop */
+       g_main_loop_quit(main_loop);
+}
+
+/**
+ * @testcase           utc_zb_form_network_p
+ * @since_tizen                5.0
+ * @type                       Positive
+ * @description                Forms Zigbee network.
+ * @scenario           Forms Zigbee network. When
+ *                  Zigbee network formation is completed the callback is triggered.
+ */
+int utc_zb_form_network_p(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+
+       ret = zb_form_network(handle, _on_form_network, NULL);
+
+       /* Waits for callback */
+       if (true == g_feature) {
+               main_loop = g_main_loop_new(NULL, false);
+               g_main_loop_run(main_loop);
+       }
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+/**
+ * @testcase           utc_zb_form_network_n
+ * @since_tizen                5.0
+ * @type                       Negative
+ * @description                Forms Zigbee network.
+ * @scenario           Forms Zigbee network.
+ *                  Ensure return value should be ZIGBEE_ERROR_INVALID_PARAMETER.
+ */
+int utc_zb_form_network_n(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+
+       ret = zb_form_network(NULL, NULL, NULL);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+static void _on_disable_network(unsigned char status, void *user_data)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+       callback_ret = ZIGBEE_ERROR_NONE;
+
+       /* Recover network to proceed other TCs. */
+       ret = zb_form_network(handle, _on_form_network, NULL);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               LOG("Failed to recover network");
+
+               /* Terminate main loop */
+               g_main_loop_quit(main_loop);
+       }
+}
+
+/**
+ * @testcase           utc_zb_disable_network_p
+ * @since_tizen                5.0
+ * @type                       Positive
+ * @description                Destroys Zigbee network.
+ * @scenario           Destroys Zigbee network.
+ *                  When Zigbee network is destroyed the callback is triggered.
+ */
+int utc_zb_disable_network_p(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+
+       ret = zb_disable_network(handle, _on_disable_network, NULL);
+
+       /* Waits for callback */
+       if (true == g_feature) {
+               main_loop = g_main_loop_new(NULL, false);
+               g_main_loop_run(main_loop);
+       }
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+/**
+ * @testcase           utc_zb_disable_network_n
+ * @since_tizen                5.0
+ * @type                       Negative
+ * @description                Destroys Zigbee network.
+ * @scenario           Forms Zigbee network.
+ *                  Ensure return value should be ZIGBEE_ERROR_INVALID_PARAMETER.
+ */
+int utc_zb_disable_network_n(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+
+       ret = zb_disable_network(NULL, NULL, NULL);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+/**
+ * @testcase           utc_zb_leave_device_p
+ * @since_tizen                5.0
+ * @type                       Positive
+ * @description                Forces a node to leave one network and to rejoin the other.
+ * @scenario           Forces a node to leave one network.
+ *                  Ensure return value should be ZIGBEE_ERROR_NONE.
+ */
+int utc_zb_leave_device_p(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+       zb_ieee_addr addr64 = { 0, };
+
+       ret = zb_leave_device(handle, addr64, true, false);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+/**
+ * @testcase           utc_zb_leave_device_n
+ * @since_tizen                5.0
+ * @type                       Negative
+ * @description                Forces a node to leave one network and to rejoin the other.
+ * @scenario           Forces a node to leave one network.
+ *                  Ensure return value should be ZIGBEE_ERROR_INVALID_PARAMETER.
+ */
+int utc_zb_leave_device_n(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+
+       ret = zb_leave_device(NULL, NULL, true, false);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+/**
+ * @testcase           utc_zb_permit_join_p
+ * @since_tizen                5.0
+ * @type                       Positive
+ * @description                Enables coordinator device can accept other device's association request.
+ * @scenario           Enables coordinator device can accept other device's association request.
+ *                  Ensure return value should be ZIGBEE_ERROR_NONE.
+ */
+int utc_zb_permit_join_p(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+
+       ret = zb_permit_join(handle, 10);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+/**
+ * @testcase           utc_zb_permit_join_n
+ * @since_tizen                5.0
+ * @type                       Negative
+ * @description                Enables coordinator device can accept other device's association request.
+ * @scenario           Enables coordinator device can accept other device's association request.
+ *                  Ensure return value should be ZIGBEE_ERROR_INVALID_PARAMETER.
+ */
+int utc_zb_permit_join_n(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+
+       ret = zb_permit_join(NULL, 10);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+/**
+ * @testcase           utc_zb_get_controller_mac_address_p
+ * @since_tizen                5.0
+ * @type                       Positive
+ * @description                Shows current coordinator's IEEE MAC address.
+ * @scenario           Shows current coordinator's IEEE MAC address.
+ *                  Ensure return value should be ZIGBEE_ERROR_NONE.
+ */
+int utc_zb_get_controller_mac_address_p(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+       zb_ieee_addr addr64;
+
+       ret = zb_get_controller_mac_address(handle, addr64);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+/**
+ * @testcase           utc_zb_get_controller_mac_address_n
+ * @since_tizen                5.0
+ * @type                       Negative
+ * @description                Shows current coordinator's IEEE MAC address.
+ * @scenario           Shows current coordinator's IEEE MAC address.
+ *                  Ensure return value should be ZIGBEE_ERROR_INVALID_PARAMETER.
+ */
+int utc_zb_get_controller_mac_address_n(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+       zb_ieee_addr addr64;
+
+       ret = zb_get_controller_mac_address(NULL, addr64);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+/**
+ * @testcase           utc_zb_get_network_info_p
+ * @since_tizen                5.0
+ * @type                       Positive
+ * @description                Gets information of the current network environment of coordinator.
+ * @scenario           Gets information of the current network environment of coordinator.
+ *                  Ensure return value should be ZIGBEE_ERROR_NONE.
+ */
+int utc_zb_get_network_info_p(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+       zb_ieee_addr co_addr64 = { 0, };
+       zb_nwk_addr nodeid;
+       zb_nwk_addr panid;
+       unsigned char channel;
+       unsigned char tx_power;
+
+       ret = zb_get_controller_mac_address(handle, co_addr64);
+
+       ret = zb_get_network_info(handle, co_addr64, &nodeid, &panid, &channel, &tx_power);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+/**
+ * @testcase           utc_zb_get_network_info_n
+ * @since_tizen                5.0
+ * @type                       Negative
+ * @description                Gets information of the current network environment of coordinator.
+ * @scenario           Gets information of the current network environment of coordinator.
+ *                  Ensure return value should be ZIGBEE_ERROR_INVALID_PARAMETER.
+ */
+int utc_zb_get_network_info_n(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+       zb_ieee_addr co_addr64 = { 0, };
+       zb_nwk_addr nodeid;
+       zb_nwk_addr panid;
+       unsigned char channel;
+       unsigned char tx_power;
+
+       ret = zb_get_network_info(NULL, co_addr64, &nodeid, &panid, &channel, &tx_power);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+/**
+ * @testcase           utc_zb_end_dev_get_ep_list_p
+ * @since_tizen                5.0
+ * @type                       Positive
+ * @description                Gets endpoint list information.
+ * @scenario           Gets endpoint list information.
+ *                  Ensure return value should be ZIGBEE_ERROR_NONE.
+ */
+int utc_zb_end_dev_get_ep_list_p(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+
+       zb_ieee_addr addr64 = {0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66};
+       unsigned char count = 0;
+       zb_end_point *ep_list = NULL;
+
+       ret = zb_end_dev_get_ep_list(handle, addr64, &count, &ep_list);
+
+       if (ep_list) {
+               free(ep_list);
+               ep_list = NULL;
+       }
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+/**
+ * @testcase           utc_zb_end_dev_get_ep_list_p
+ * @since_tizen                5.0
+ * @type                       Positive
+ * @description                Gets endpoint list information.
+ * @scenario           Gets endpoint list information.
+ *                  Ensure return value should be ZIGBEE_ERROR_NONE.
+ */
+int utc_zb_end_dev_get_ep_list_n(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+
+       zb_ieee_addr addr64 = {0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66};
+       unsigned char count = 0;
+       zb_end_point *ep_list = NULL;
+
+       ret = zb_end_dev_get_ep_list(NULL, addr64, &count, &ep_list);
+
+       if (ep_list) {
+               free(ep_list);
+               ep_list = NULL;
+       }
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+/**
+ * @testcase           utc_zb_end_dev_get_cluster_list_p
+ * @since_tizen                5.0
+ * @type                       Positive
+ * @description                Gets endpoint list information.
+ * @scenario           Gets endpoint list information.
+ *                  Ensure return value should be ZIGBEE_ERROR_NONE.
+ */
+int utc_zb_end_dev_get_cluster_list_p(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+
+       zb_end_point ep = 1;
+       unsigned char in_count = 0;
+       unsigned char out_count = 0;
+       zb_ieee_addr dest_addr64 = { 0, };
+       zb_cluster_id *in_cluster_list = NULL;
+       zb_cluster_id *out_cluster_list = NULL;
+
+       ret = zb_end_dev_get_cluster_list(handle, dest_addr64, ep,
+                               &in_count, &in_cluster_list, &out_count, &out_cluster_list);
+
+       if (in_cluster_list) {
+               free(in_cluster_list);
+               in_cluster_list = NULL;
+       }
+       if (out_cluster_list) {
+               free(out_cluster_list);
+               out_cluster_list = NULL;
+       }
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+/**
+ * @testcase           utc_zb_end_dev_get_cluster_list_n
+ * @since_tizen                5.0
+ * @type                       Negative
+ * @description                Gets endpoint list information.
+ * @scenario           Gets endpoint list information.
+ *                  Ensure return value should be ZIGBEE_ERROR_INVALID_PARAMETER.
+ */
+int utc_zb_end_dev_get_cluster_list_n(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+       zb_ieee_addr dest_addr64 = { 0, };
+       zb_end_point ep = 1;
+       unsigned char in_count = 0;
+       unsigned char out_count = 0;
+       zb_cluster_id *in_cluster_list = NULL;
+       zb_cluster_id *out_cluster_list = NULL;
+
+       ret = zb_end_dev_get_cluster_list(NULL, dest_addr64, ep,
+                               &in_count, &in_cluster_list, &out_count, &out_cluster_list);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+/**
+ * @testcase           utc_zb_end_dev_get_end_dev_info_list_p
+ * @since_tizen                5.0
+ * @type                       Positive
+ * @description                Gets all children device list information.
+ * @scenario           Gets all children device list information.
+ *                  Ensure return value should be ZIGBEE_ERROR_NONE.
+ */
+int utc_zb_end_dev_get_end_dev_info_list_p(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+       int count;
+       zb_end_dev_info_h *list = NULL;
+
+       ret = zb_end_dev_get_end_dev_info_list(handle, &count, &list);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+/**
+ * @testcase           utc_zb_end_dev_get_end_dev_info_list_n1
+ * @since_tizen                5.0
+ * @type                       Negative
+ * @description                Gets all children device list information.
+ * @scenario           Gets all children device list information.
+ *                  Ensure return value should be ZIGBEE_ERROR_INVALID_PARAMETER.
+ */
+int utc_zb_end_dev_get_end_dev_info_list_n1(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+       int count;
+       zb_end_dev_info_h *list = NULL;
+
+       ret = zb_end_dev_get_end_dev_info_list(NULL, &count, &list);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+/**
+ * @testcase           utc_zb_end_dev_get_end_dev_info_list_n2
+ * @since_tizen                5.0
+ * @type                       Negative
+ * @description                Gets all children device list information.
+ * @scenario           Gets all children device list information.
+ *                  Ensure return value should be ZIGBEE_ERROR_INVALID_PARAMETER.
+ */
+int utc_zb_end_dev_get_end_dev_info_list_n2(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+       int count;
+
+       ret = zb_end_dev_get_end_dev_info_list(handle, &count, NULL);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+/**
+ * @testcase           utc_zb_end_dev_info_list_free_p
+ * @since_tizen                5.0
+ * @type                       Positive
+ * @description                Frees all children device list information.
+ * @scenario           Frees all children device list information.
+ *                  Ensure return value should be ZIGBEE_ERROR_NONE.
+ */
+int utc_zb_end_dev_info_list_free_p(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+       int count;
+       zb_end_dev_info_h *list = NULL;
+
+       zb_end_dev_get_end_dev_info_list(handle, &count, &list);
+       ret = zb_end_dev_info_list_free(list);
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+/**
+ * @testcase           utc_zb_end_dev_info_list_free_n
+ * @since_tizen                5.0
+ * @type                       Negative
+ * @description                Frees all children device list information.
+ * @scenario           Frees all children device list information.
+ *                  Ensure return value should be ZIGBEE_ERROR_INVALID_PARAMETER.
+ */
+int utc_zb_end_dev_info_list_free_n(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+
+       ret = zb_end_dev_info_list_free(NULL);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+/**
+ * @testcase           utc_zb_end_dev_info_create_p
+ * @since_tizen                5.0
+ * @type                       Positive
+ * @description                Creates an end-device handle.
+ * @scenario           Creates an end-device handle.
+ *                  Ensure return value should be ZIGBEE_ERROR_NONE.
+ */
+int utc_zb_end_dev_info_create_p(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+       zb_end_dev_info_h dev = NULL;
+
+       ret = zb_end_dev_info_create(&dev);
+       if (dev) {
+               zb_end_dev_info_destroy(dev);
+               dev = NULL;
+       }
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+/**
+ * @testcase           utc_zb_end_dev_info_create_n
+ * @since_tizen                5.0
+ * @type                       Negative
+ * @description                Creates an end-device handle.
+ * @scenario           Creates an end-device handle.
+ *                  Ensure return value should be ZIGBEE_ERROR_INVALID_PARAMETER.
+ */
+int utc_zb_end_dev_info_create_n(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+
+       ret = zb_end_dev_info_create(NULL);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+/**
+ * @testcase           utc_zb_end_dev_info_clone_p
+ * @since_tizen                5.0
+ * @type                       Positive
+ * @description                Clone an end-device handle.
+ * @scenario           Clone an end-device handle.
+ *                  Ensure return value should be ZIGBEE_ERROR_NONE.
+ */
+int utc_zb_end_dev_info_clone_p(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+       zb_end_dev_info_h src = NULL;
+       zb_end_dev_info_h dst = NULL;
+
+       zb_end_dev_info_create(&src);
+       ret = zb_end_dev_info_clone(src, &dst);
+       if (src) {
+               zb_end_dev_info_destroy(src);
+               src = NULL;
+       }
+       if (dst) {
+               zb_end_dev_info_destroy(dst);
+               dst = NULL;
+       }
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+/**
+ * @testcase           utc_zb_end_dev_info_clone_n
+ * @since_tizen                5.0
+ * @type                       Negative
+ * @description                Clone an end-device handle.
+ * @scenario           Clone an end-device handle.
+ *                  Ensure return value should be ZIGBEE_ERROR_INVALID_PARAMETER.
+ */
+int utc_zb_end_dev_info_clone_n(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+       zb_end_dev_info_h src = NULL;
+       zb_end_dev_info_h dst = NULL;
+
+       ret = zb_end_dev_info_clone(src, &dst);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+/**
+ * @testcase           utc_zb_end_dev_info_destroy_p
+ * @since_tizen                5.0
+ * @type                       Positive
+ * @description                Clone an end-device handle.
+ * @scenario           Clone an end-device handle.
+ *                  Ensure return value should be ZIGBEE_ERROR_NONE.
+ */
+int utc_zb_end_dev_info_destroy_p(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+       zb_end_dev_info_h dev = NULL;
+
+       zb_end_dev_info_create(&dev);
+       if (dev) {
+               ret = zb_end_dev_info_destroy(dev);
+               dev = NULL;
+       }
+
+       return check_result_p(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+/**
+ * @testcase           utc_zb_end_dev_info_destroy_n
+ * @since_tizen                5.0
+ * @type                       Negative
+ * @description                Clone an end-device handle.
+ * @scenario           Clone an end-device handle.
+ *                  Ensure return value should be ZIGBEE_ERROR_INVALID_PARAMETER.
+ */
+int utc_zb_end_dev_info_destroy_n(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+       zb_end_dev_info_h dev = NULL;
+
+       ret = zb_end_dev_info_destroy(dev);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+/**
+ * @testcase           utc_zb_end_dev_info_get_network_address_n
+ * @since_tizen                5.0
+ * @type                       Negative
+ * @description                Gets network address of a specific end-point.
+ * @scenario           Gets network address of a specific end-point.
+ *                  Ensure return value should be ZIGBEE_ERROR_INVALID_PARAMETER.
+ */
+int utc_zb_end_dev_info_get_network_address_n(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+       zb_nwk_addr addr16;
+
+       ret = zb_end_dev_info_get_network_address(NULL, &addr16);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+/**
+ * @testcase           utc_zb_end_dev_info_get_ieee_address_n
+ * @since_tizen                5.0
+ * @type                       Negative
+ * @description                Gets IEEE address of a specific end-point.
+ * @scenario           Gets IEEE address of a specific end-point.
+ *                  Ensure return value should be ZIGBEE_ERROR_INVALID_PARAMETER.
+ */
+int utc_zb_end_dev_info_get_ieee_address_n(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+       zb_ieee_addr addr64;
+
+       ret = zb_end_dev_info_get_ieee_address(NULL, addr64);
+
+       if (false == g_feature)
+               assert_eq(ret, ZIGBEE_ERROR_NOT_SUPPORTED);
+       else
+               assert_eq(ret, ZIGBEE_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_zb_end_dev_info_get_num_of_ep_n
+ * @since_tizen                5.0
+ * @type                       Negative
+ * @description                Gets a number of end-points of a specific end-point.
+ * @scenario           Gets a number of end-points of a specific end-point.
+ *                  Ensure return value should be ZIGBEE_ERROR_INVALID_PARAMETER.
+ */
+int utc_zb_end_dev_info_get_num_of_ep_n(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+       unsigned char count;
+
+       ret = zb_end_dev_info_get_num_of_ep(NULL, &count);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+/**
+ * @testcase           utc_zb_end_dev_info_get_ep_list_n
+ * @since_tizen                5.0
+ * @type                       Negative
+ * @description                Gets list of end-points of a specific end-point.
+ * @scenario           Gets list of end-points of a specific end-point.
+ *                  Ensure return value should be ZIGBEE_ERROR_INVALID_PARAMETER.
+ */
+int utc_zb_end_dev_info_get_ep_list_n(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+       zb_end_point *ep_list = NULL;
+
+       ret = zb_end_dev_info_get_ep_list(NULL, &ep_list);
+
+       if (ep_list) {
+               free(ep_list);
+               ep_list = NULL;
+       }
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+/**
+ * @testcase           utc_zb_end_dev_info_get_mac_capability_n
+ * @since_tizen                5.0
+ * @type                       Negative
+ * @description                Gets security capability of a specific end-point.
+ * @scenario           Gets security capability of a specific end-point.
+ *                  Ensure return value should be ZIGBEE_ERROR_INVALID_PARAMETER.
+ */
+int utc_zb_end_dev_info_get_mac_capability_n(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+       zb_zdp_mac_capability_field_e cap;
+
+       ret = zb_end_dev_info_get_mac_capability(NULL, &cap);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+/**
+ * @testcase           utc_zb_end_dev_info_get_alternative_pan_coordinator_n
+ * @since_tizen                5.0
+ * @type                       Negative
+ * @description                Gets ability of alternative PAN coordinator of a specific end-point.
+ * @scenario           Gets ability of alternative PAN coordinator of a specific end-point.
+ *                  Ensure return value should be ZIGBEE_ERROR_INVALID_PARAMETER.
+ */
+int utc_zb_end_dev_info_get_alternative_pan_coordinator_n(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+       zb_zdp_do_pan_coordinator_e available;
+
+       ret = zb_end_dev_info_get_alternative_pan_coordinator(NULL, &available);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+/**
+ * @testcase           utc_zb_end_dev_info_get_device_id_n
+ * @since_tizen                5.0
+ * @type                       Negative
+ * @description                Gets device id of a specific end-point.
+ * @scenario           Gets device id of a specific end-point.
+ *                  Ensure return value should be ZIGBEE_ERROR_INVALID_PARAMETER.
+ */
+int utc_zb_end_dev_info_get_device_id_n(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+       zb_end_point ep = 1;
+       zb_device_id device_id;
+
+       ret = zb_end_dev_info_get_device_id(NULL, ep, &device_id);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+/**
+ * @testcase           utc_zb_end_dev_info_get_profile_id_n
+ * @since_tizen                5.0
+ * @type                       Negative
+ * @description                Gets profile id of a specific end-point.
+ * @scenario           Gets profile id of a specific end-point.
+ *                  Ensure return value should be ZIGBEE_ERROR_INVALID_PARAMETER.
+ */
+int utc_zb_end_dev_info_get_profile_id_n(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+       zb_end_point ep = 1;
+       zb_profile_id profile_id;
+
+       ret = zb_end_dev_info_get_profile_id(NULL, ep, &profile_id);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+/**
+ * @testcase           utc_zb_end_dev_info_get_power_source_n
+ * @since_tizen                5.0
+ * @type                       Negative
+ * @description                Gets power source type of a specific end-point.
+ * @scenario           Gets power source type of a specific end-point.
+ *                  Ensure return value should be ZIGBEE_ERROR_INVALID_PARAMETER.
+ */
+int utc_zb_end_dev_info_get_power_source_n(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+       zb_zdp_power_e power_src;
+
+       ret = zb_end_dev_info_get_power_source(NULL, &power_src);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
+/**
+ * @testcase           utc_zb_end_dev_info_get_security_capabilty_n
+ * @since_tizen                5.0
+ * @type                       Negative
+ * @description                Gets power source type of a specific end-point.
+ * @scenario           Gets power source type of a specific end-point.
+ *                  Ensure return value should be ZIGBEE_ERROR_INVALID_PARAMETER.
+ */
+int utc_zb_end_dev_info_get_security_capabilty_n(void)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+       zb_zdp_security_cap_e cap;
+
+       ret = zb_end_dev_info_get_security_capability(NULL, &cap);
+
+       return check_result_n(__FUNCTION__, __FILE__, __LINE__, ret);
+}
+
diff --git a/src/utc/zigbee/utc-zigbee.h b/src/utc/zigbee/utc-zigbee.h
new file mode 100644 (file)
index 0000000..57e6468
--- /dev/null
@@ -0,0 +1,54 @@
+//
+// Copyright (c) 2014 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+#ifndef __UTC_ZIGBEE_CONFIGURATION_H__
+#define __UTC_ZIGBEE_CONFIGURATION_H__
+
+#define SUPPORT_SIMPLE_DESCRIPTION
+#define SUPPORT_NODE_POWER_DESCRIPTION
+#define SUPPORT_NODE_DESCRIPION
+#define SUPPORT_NETWORK_LIST_RECORD
+#define SUPPORT_ROUTING_TABLE_DESCRIPTION
+#define SUPPORT_NEIGHBOR_TABLE_DESCRIPTION
+#define SUPPORT_ZDO_BINDING_TABLE
+#define SUPPORT_ZDO_NETWORK_LIST_RECORD
+
+#define SUPPORT_ZDO_NETWORK_MANAGER
+#define SUPPORT_ZDO_DEVICE_DISCOVERY_MANAGER
+#define SUPPORT_ZDO_BIND_MANAGER
+
+#define SUPPORT_ZCL_ALARM_CLUSTER
+#define SUPPORT_ZCL_BASIC_CLUSTER
+#define SUPPORT_ZCL_COLOR_CONTROL_CLUSTER
+#define SUPPORT_ZCL_GLOBAL_COMMNAD_CLUSTER
+#define SUPPORT_ZCL_GROUP_CLUSTER
+#define SUPPORT_ZCL_IAS_ZONE_CLUSTER
+#define SUPPORT_ZCL_IDENTIFY_CLUSTER
+#define SUPPORT_ZCL_LEVEL_CONTROL_CLUSTER
+#define SUPPORT_ZCL_ON_OFF_CLUSTER
+#define SUPPORT_ZCL_POLL_CONTROL_CLUSTER
+#define SUPPORT_ZCL_SCENE_CLUSTER
+#define SUPPORT_ZCL_THERMOSTAT_CLUSTER
+
+#define SUPPORT_ZCL_READ_ATTRIBUTE_STATUS_RECORD
+#define SUPPORT_ZCL_DISCOVER_ATTRIBUTE_INFO
+#define SUPPORT_ZCL_WRITE_ATTRIBUTE_STATUS
+#define SUPPORT_ZCL_REPORT_CONFIG_REPORT
+#define SUPPORT_ZCL_READ_REPORT_CONFIG_RECORD
+#define SUPPORT_ZCL_REPORT_CONFIG_RESPONSE_RECORD
+#define SUPPORT_ZCL_ATTRIHUTE_INFO
+#define SUPPORT_ZCL_EXTENDED_ATTRIHUTE_INFO
+
+#endif /* __UTC_ZIGBEE_CONFIGURATION_H__ */
index 09a2583ff3ecc0614e8d8c2ab875f9819c4bf9d6..135752085832dc59269af9aff2fa70731bb24cca 100755 (executable)
@@ -25,6 +25,10 @@ mobile:armv7l:utc:watchface-complication;
 mobile:aarch64:utc:watchface-complication;
 mobile:x86:utc:watchface-complication;
 mobile:x86_64:utc:watchface-complication;
+mobile:armv7l:utc:zigbee;
+mobile:aarch64:utc:zigbee;
+mobile:x86:utc:zigbee;
+mobile:x86_64:utc:zigbee;
 
 ## itc ##
 mobile:armv7l:itc:appcore-watch;
@@ -82,6 +86,7 @@ wearable:x86_64:utc:shortcut;
 wearable:armv7l:utc:video-util;
 wearable:aarch64:utc:video-util;
 wearable:x86:utc:video-util;
+
 wearable:x86_64:utc:video-util;
 wearable:armv7l:utc:wifi-direct;
 wearable:aarch64:utc:wifi-direct;
@@ -117,6 +122,10 @@ wearable:armv7l:utc:peripheral-io;
 wearable:aarch64:utc:peripheral-io;
 wearable:x86:utc:peripheral-io;
 wearable:x86_64:utc:peripheral-io;
+wearable:armv7l:utc:zigbee;
+wearable:aarch64:utc:zigbee;
+wearable:x86:utc:zigbee;
+wearable:x86_64:utc:zigbee;
 
 ## itc ##
 wearable:armv7l:itc:asp;