--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
+ <storageModule moduleId="org.eclipse.cdt.core.settings">
+ <cconfiguration id="org.tizen.nativecore.config.sbi.gcc45.app.debug.1328561736">
+ <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="org.tizen.nativecore.config.sbi.gcc45.app.debug.1328561736" moduleId="org.eclipse.cdt.core.settings" name="Debug">
+ <externalSettings/>
+ <extensions>
+ <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+ <extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.MakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.tizen.nativecore.NativeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ </extensions>
+ </storageModule>
+ <storageModule moduleId="cdtBuildSystem" version="4.0.0">
+ <configuration artifactName="co2_50" buildArtefactType="org.tizen.nativecore.buildArtefactType.app" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.tizen.nativecore.buildArtefactType.app,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug" description="" errorParsers="org.eclipse.cdt.core.MakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;" id="org.tizen.nativecore.config.sbi.gcc45.app.debug.1328561736" name="Debug" parent="org.tizen.nativecore.config.sbi.gcc45.app.debug">
+ <folderInfo id="org.tizen.nativecore.config.sbi.gcc45.app.debug.1328561736." name="/" resourcePath="">
+ <toolChain id="org.tizen.nativecore.toolchain.sbi.gcc45.app.debug.891574552" name="Tizen Native Toolchain" superClass="org.tizen.nativecore.toolchain.sbi.gcc45.app.debug">
+ <targetPlatform binaryParser="org.eclipse.cdt.core.ELF" id="org.tizen.nativeide.target.sbi.gnu.platform.base.1426170365" osList="linux,win32" superClass="org.tizen.nativeide.target.sbi.gnu.platform.base"/>
+ <builder autoBuildTarget="all" buildPath="${workspace_loc:/co2_50}/Debug" enableAutoBuild="true" id="org.tizen.nativecore.target.sbi.gnu.builder.42092935" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Tizen Application Builder" superClass="org.tizen.nativecore.target.sbi.gnu.builder"/>
+ <tool command="arm-linux-gnueabi-ar.exe" id="org.tizen.nativecore.tool.sbi.gnu.archiver.1774290722" name="Archiver" superClass="org.tizen.nativecore.tool.sbi.gnu.archiver"/>
+ <tool command="clang++.exe" id="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler.636621274" name="C++ Compiler" superClass="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler">
+ <option id="gnu.cpp.compiler.option.optimization.level.1188966517" name="Optimization Level" superClass="gnu.cpp.compiler.option.optimization.level" value="gnu.cpp.compiler.optimization.level.none" valueType="enumerated"/>
+ <option defaultValue="gnu.cpp.compiler.debugging.level.max" id="sbi.gnu.cpp.compiler.option.debugging.level.core.2110396254" name="Debug level" superClass="sbi.gnu.cpp.compiler.option.debugging.level.core" valueType="enumerated"/>
+ <option defaultValue="false" id="sbi.gnu.cpp.compiler.option.misc.pic.core.735673557" name="-fPIC option" superClass="sbi.gnu.cpp.compiler.option.misc.pic.core" valueType="boolean"/>
+ <option id="sbi.gnu.cpp.compiler.option.1344645767" name="Tizen-Target" superClass="sbi.gnu.cpp.compiler.option" valueType="userObjs">
+ <listOptionValue builtIn="false" value="iot-headless-5.0-device.core_llvm40.armel"/>
+ </option>
+ <option id="sbi.gnu.cpp.compiler.option.frameworks_inc.core.184981053" name="Tizen-Frameworks-Include-Path" superClass="sbi.gnu.cpp.compiler.option.frameworks_inc.core" valueType="includePath">
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/libxml2""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/appcore-agent""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/appfw""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/base""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/ckm""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/device""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/dlog""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/ecore-1""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/efl-1""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/eina-1""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/eina-1/eina""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/eo-1""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/gio-unix-2.0""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/glib-2.0""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/iotcon""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/iotjs""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/json-glib-1.0""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/media""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/minizip""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/network""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/notification""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/rpc-port""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/storage""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/system""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/lib/glib-2.0/include""/>
+ </option>
+ <option id="sbi.gnu.cpp.compiler.option.frameworks_cflags.core.1214333289" name="Tizen-Frameworks-Other-Cflags" superClass="sbi.gnu.cpp.compiler.option.frameworks_cflags.core" valueType="stringList">
+ <listOptionValue builtIn="false" value="${TC_COMPILER_MISC}"/>
+ <listOptionValue builtIn="false" value="${RS_COMPILER_MISC}"/>
+ <listOptionValue builtIn="false" value=" -fPIE"/>
+ <listOptionValue builtIn="false" value="--sysroot="${SBI_SYSROOT}""/>
+ <listOptionValue builtIn="false" value="-mthumb"/>
+ </option>
+ <option id="gnu.cpp.compiler.option.include.paths.1775461621" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
+ <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/inc}""/>
+ </option>
+ <option id="sbi.gnu.cpp.compiler.option.frameworks.core.1070916157" name="Tizen-Frameworks" superClass="sbi.gnu.cpp.compiler.option.frameworks.core" valueType="userObjs">
+ <listOptionValue builtIn="false" value="Native_API"/>
+ <listOptionValue builtIn="false" value="iot-things"/>
+ </option>
+ <option id="sbi.gnu.cpp.compiler.option.preprocessor.def.deprecation.318470223" name="Defined symbols (-D)" superClass="sbi.gnu.cpp.compiler.option.preprocessor.def.deprecation" valueType="definedSymbols">
+ <listOptionValue builtIn="false" value="TIZEN_DEPRECATION"/>
+ <listOptionValue builtIn="false" value="DEPRECATION_WARNING"/>
+ <listOptionValue builtIn="false" value="_DEBUG"/>
+ </option>
+ <inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.486805548" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
+ </tool>
+ <tool command="clang.exe" id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.256520883" name="C Compiler" superClass="org.tizen.nativecore.tool.sbi.gnu.c.compiler">
+ <option defaultValue="gnu.c.optimization.level.none" id="gnu.c.compiler.option.optimization.level.522463538" name="Optimization Level" superClass="gnu.c.compiler.option.optimization.level" valueType="enumerated"/>
+ <option defaultValue="gnu.c.debugging.level.max" id="sbi.gnu.c.compiler.option.debugging.level.core.1962126645" name="Debug level" superClass="sbi.gnu.c.compiler.option.debugging.level.core" valueType="enumerated"/>
+ <option defaultValue="false" id="sbi.gnu.c.compiler.option.misc.pic.core.415275226" name="-fPIC option" superClass="sbi.gnu.c.compiler.option.misc.pic.core" valueType="boolean"/>
+ <option id="sbi.gnu.c.compiler.option.1216626615" name="Tizen-Target" superClass="sbi.gnu.c.compiler.option" valueType="userObjs">
+ <listOptionValue builtIn="false" value="iot-headless-5.0-device.core_llvm40.armel"/>
+ </option>
+ <option id="sbi.gnu.c.compiler.option.frameworks_inc.core.1162181689" name="Tizen-Frameworks-Include-Path" superClass="sbi.gnu.c.compiler.option.frameworks_inc.core" valueType="includePath">
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/libxml2""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/appcore-agent""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/appfw""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/base""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/ckm""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/device""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/dlog""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/ecore-1""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/efl-1""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/eina-1""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/eina-1/eina""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/eo-1""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/gio-unix-2.0""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/glib-2.0""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/iotcon""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/iotjs""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/json-glib-1.0""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/media""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/minizip""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/network""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/notification""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/rpc-port""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/storage""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/system""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/lib/glib-2.0/include""/>
+ </option>
+ <option id="sbi.gnu.c.compiler.option.frameworks_cflags.core.1424410217" name="Tizen-Frameworks-Other-Cflags" superClass="sbi.gnu.c.compiler.option.frameworks_cflags.core" valueType="stringList">
+ <listOptionValue builtIn="false" value="${TC_COMPILER_MISC}"/>
+ <listOptionValue builtIn="false" value="${RS_COMPILER_MISC}"/>
+ <listOptionValue builtIn="false" value=" -fPIE"/>
+ <listOptionValue builtIn="false" value="--sysroot="${SBI_SYSROOT}""/>
+ <listOptionValue builtIn="false" value="-mthumb"/>
+ </option>
+ <option id="gnu.c.compiler.option.include.paths.549010617" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
+ <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/inc}""/>
+ </option>
+ <option id="sbi.gnu.c.compiler.option.frameworks.core.218832387" name="Tizen-Frameworks" superClass="sbi.gnu.c.compiler.option.frameworks.core" valueType="userObjs">
+ <listOptionValue builtIn="false" value="Native_API"/>
+ <listOptionValue builtIn="false" value="iot-things"/>
+ </option>
+ <option id="sbi.gnu.c.compiler.option.preprocessor.def.symbols.deprecation.276762840" name="Defined symbols (-D)" superClass="sbi.gnu.c.compiler.option.preprocessor.def.symbols.deprecation" valueType="definedSymbols">
+ <listOptionValue builtIn="false" value="TIZEN_DEPRECATION"/>
+ <listOptionValue builtIn="false" value="DEPRECATION_WARNING"/>
+ <listOptionValue builtIn="false" value="_DEBUG"/>
+ </option>
+ <inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.1291088027" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
+ </tool>
+ <tool id="org.tizen.nativeide.tool.sbi.gnu.c.linker.base.1826757162" name="C Linker" superClass="org.tizen.nativeide.tool.sbi.gnu.c.linker.base"/>
+ <tool command="clang++.exe" id="org.tizen.nativecore.tool.sbi.gnu.cpp.linker.723538722" name="C++ Linker" superClass="org.tizen.nativecore.tool.sbi.gnu.cpp.linker">
+ <option defaultValue="false" id="sbi.gnu.cpp.link.option.strip.162228960" name="Omit all symbol information (-s)" superClass="sbi.gnu.cpp.link.option.strip" valueType="boolean"/>
+ <option defaultValue="false" id="sbi.gnu.cpp.linker.option.shared_flag.core.203364710" name="Linker.Shared" superClass="sbi.gnu.cpp.linker.option.shared_flag.core" valueType="boolean"/>
+ <option defaultValue="false" id="sbi.gnu.cpp.linker.option.noundefined.core.830269282" name="Report unresolved symbol references (-Wl,--no-undefined)" superClass="sbi.gnu.cpp.linker.option.noundefined.core" valueType="boolean"/>
+ <option id="sbi.gnu.cpp.linker.option.frameworks_lflags.core.1633287212" name="Tizen-Frameworks-Other-Lflags" superClass="sbi.gnu.cpp.linker.option.frameworks_lflags.core" valueType="stringList">
+ <listOptionValue builtIn="false" value="${TC_LINKER_MISC}"/>
+ <listOptionValue builtIn="false" value="${RS_LINKER_MISC}"/>
+ <listOptionValue builtIn="false" value="-pie -lpthread "/>
+ <listOptionValue builtIn="false" value="--sysroot="${SBI_SYSROOT}""/>
+ <listOptionValue builtIn="false" value="-Xlinker --version-script="${PROJ_PATH}/.exportMap""/>
+ <listOptionValue builtIn="false" value="-L"${SBI_SYSROOT}/usr/lib""/>
+ <listOptionValue builtIn="false" value="$(RS_LIBRARIES)"/>
+ </option>
+ <option id="gnu.cpp.link.option.paths.305444247" name="Library search path (-L)" superClass="gnu.cpp.link.option.paths" valueType="libPaths">
+ <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/lib}""/>
+ </option>
+ <option id="gnu.cpp.link.option.libs.515860380" name="Libraries (-l)" superClass="gnu.cpp.link.option.libs" valueType="libs">
+ <listOptionValue builtIn="false" value="st_thing_master_api"/>
+ <listOptionValue builtIn="false" value="st_thing_resource_api"/>
+ </option>
+ <inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.17628121" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
+ <additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
+ <additionalInput kind="additionalinput" paths="$(LIBS)"/>
+ </inputType>
+ </tool>
+ <tool command="#{PLATFORM_DEFAULT_GCC_PREFIX}as.exe" id="org.tizen.nativeapp.tool.sbi.gnu.assembler.base.1641651443" name="Assembler" superClass="org.tizen.nativeapp.tool.sbi.gnu.assembler.base">
+ <inputType id="cdt.managedbuild.tool.gnu.assembler.input.1941670617" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
+ </tool>
+ <tool id="org.tizen.nativecore.tool.fnmapgen.132487306" name="C FN-Map Generator" superClass="org.tizen.nativecore.tool.fnmapgen"/>
+ <tool id="org.tizen.nativecore.tool.fnmapgen.cpp.2067396173" name="C++ FN-Map Generator" superClass="org.tizen.nativecore.tool.fnmapgen.cpp"/>
+ <tool id="org.tizen.nativecore.tool.ast.1953749623" name="C Static Analyzer" superClass="org.tizen.nativecore.tool.ast"/>
+ <tool id="org.tizen.nativecore.tool.ast.cpp.2140395747" name="C++ Static Analyzer" superClass="org.tizen.nativecore.tool.ast.cpp"/>
+ <tool id="org.tizen.nativecore.tool.sbi.gnu.archiver.mergelib.2137636715" name="Archive Generator" superClass="org.tizen.nativecore.tool.sbi.gnu.archiver.mergelib"/>
+ <tool id="org.tizen.nativecore.tool.sbi.po.compiler.1643734186" name="PO Resource Compiler" superClass="org.tizen.nativecore.tool.sbi.po.compiler"/>
+ <tool id="org.tizen.nativecore.tool.sbi.edc.compiler.1663634624" name="EDC Resource Compiler" superClass="org.tizen.nativecore.tool.sbi.edc.compiler"/>
+ </toolChain>
+ </folderInfo>
+ <sourceEntries>
+ <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="inc"/>
+ <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="res"/>
+ <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="shared"/>
+ <entry excluding="thing_resource_user.c|thing_master_user.c|co2_50.c|resource_capability_thermostatcoolingsetpoint_main_0.c|resource_capability_switch_main_0.c|resource_capability_airqualitysensor_main_0.c" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src"/>
+ </sourceEntries>
+ </configuration>
+ </storageModule>
+ <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+ </cconfiguration>
+ <cconfiguration id="org.tizen.nativecore.config.sbi.gcc45.app.release.983305347">
+ <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="org.tizen.nativecore.config.sbi.gcc45.app.release.983305347" moduleId="org.eclipse.cdt.core.settings" name="Release">
+ <externalSettings/>
+ <extensions>
+ <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+ <extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.MakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.tizen.nativecore.NativeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ </extensions>
+ </storageModule>
+ <storageModule moduleId="cdtBuildSystem" version="4.0.0">
+ <configuration artifactName="co2_50" buildArtefactType="org.tizen.nativecore.buildArtefactType.app" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.tizen.nativecore.buildArtefactType.app,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release" description="" errorParsers="org.eclipse.cdt.core.MakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;" id="org.tizen.nativecore.config.sbi.gcc45.app.release.983305347" name="Release" parent="org.tizen.nativecore.config.sbi.gcc45.app.release">
+ <folderInfo id="org.tizen.nativecore.config.sbi.gcc45.app.release.983305347." name="/" resourcePath="">
+ <toolChain id="org.tizen.nativecore.toolchain.sbi.gcc45.app.release.291781515" name="Tizen Native Toolchain" superClass="org.tizen.nativecore.toolchain.sbi.gcc45.app.release">
+ <targetPlatform binaryParser="org.eclipse.cdt.core.ELF" id="org.tizen.nativeide.target.sbi.gnu.platform.base.289967493" osList="linux,win32" superClass="org.tizen.nativeide.target.sbi.gnu.platform.base"/>
+ <builder buildPath="${workspace_loc:/co2_50}/Release" id="org.tizen.nativecore.target.sbi.gnu.builder.1186360180" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Tizen Application Builder" superClass="org.tizen.nativecore.target.sbi.gnu.builder"/>
+ <tool command="arm-linux-gnueabi-ar.exe" id="org.tizen.nativecore.tool.sbi.gnu.archiver.354362985" name="Archiver" superClass="org.tizen.nativecore.tool.sbi.gnu.archiver"/>
+ <tool command="clang++.exe" id="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler.1551727829" name="C++ Compiler" superClass="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler">
+ <option id="gnu.cpp.compiler.option.optimization.level.1407320172" name="Optimization Level" superClass="gnu.cpp.compiler.option.optimization.level" value="gnu.cpp.compiler.optimization.level.most" valueType="enumerated"/>
+ <option defaultValue="gnu.cpp.compiler.debugging.level.none" id="sbi.gnu.cpp.compiler.option.debugging.level.core.699519699" name="Debug level" superClass="sbi.gnu.cpp.compiler.option.debugging.level.core" valueType="enumerated"/>
+ <option defaultValue="false" id="sbi.gnu.cpp.compiler.option.misc.pic.core.1598397877" name="-fPIC option" superClass="sbi.gnu.cpp.compiler.option.misc.pic.core" valueType="boolean"/>
+ <option id="sbi.gnu.cpp.compiler.option.1380933728" name="Tizen-Target" superClass="sbi.gnu.cpp.compiler.option" valueType="userObjs">
+ <listOptionValue builtIn="false" value="iot-headless-5.0-device.core_llvm40.armel"/>
+ </option>
+ <option id="sbi.gnu.cpp.compiler.option.frameworks_inc.core.1374568227" name="Tizen-Frameworks-Include-Path" superClass="sbi.gnu.cpp.compiler.option.frameworks_inc.core" valueType="includePath">
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/libxml2""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/appcore-agent""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/appfw""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/base""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/ckm""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/device""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/dlog""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/ecore-1""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/efl-1""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/eina-1""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/eina-1/eina""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/eo-1""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/gio-unix-2.0""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/glib-2.0""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/iotcon""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/iotjs""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/json-glib-1.0""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/media""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/minizip""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/network""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/notification""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/rpc-port""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/storage""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/system""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/lib/glib-2.0/include""/>
+ </option>
+ <option id="sbi.gnu.cpp.compiler.option.frameworks_cflags.core.1371115673" name="Tizen-Frameworks-Other-Cflags" superClass="sbi.gnu.cpp.compiler.option.frameworks_cflags.core" valueType="stringList">
+ <listOptionValue builtIn="false" value="${TC_COMPILER_MISC}"/>
+ <listOptionValue builtIn="false" value="${RS_COMPILER_MISC}"/>
+ <listOptionValue builtIn="false" value=" -fPIE"/>
+ <listOptionValue builtIn="false" value="--sysroot="${SBI_SYSROOT}""/>
+ <listOptionValue builtIn="false" value="-mthumb"/>
+ </option>
+ <option id="gnu.cpp.compiler.option.include.paths.1230226233" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
+ <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/inc}""/>
+ </option>
+ <option id="sbi.gnu.cpp.compiler.option.frameworks.core.1776360356" name="Tizen-Frameworks" superClass="sbi.gnu.cpp.compiler.option.frameworks.core" valueType="userObjs">
+ <listOptionValue builtIn="false" value="Native_API"/>
+ <listOptionValue builtIn="false" value="iot-things"/>
+ </option>
+ <inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.841243701" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
+ </tool>
+ <tool command="clang.exe" id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.2031793647" name="C Compiler" superClass="org.tizen.nativecore.tool.sbi.gnu.c.compiler">
+ <option defaultValue="gnu.c.optimization.level.most" id="gnu.c.compiler.option.optimization.level.1971593299" name="Optimization Level" superClass="gnu.c.compiler.option.optimization.level" valueType="enumerated"/>
+ <option defaultValue="gnu.c.debugging.level.none" id="sbi.gnu.c.compiler.option.debugging.level.core.2007061202" name="Debug level" superClass="sbi.gnu.c.compiler.option.debugging.level.core" valueType="enumerated"/>
+ <option defaultValue="false" id="sbi.gnu.c.compiler.option.misc.pic.core.663928948" name="-fPIC option" superClass="sbi.gnu.c.compiler.option.misc.pic.core" valueType="boolean"/>
+ <option id="sbi.gnu.c.compiler.option.1370065580" name="Tizen-Target" superClass="sbi.gnu.c.compiler.option" valueType="userObjs">
+ <listOptionValue builtIn="false" value="iot-headless-5.0-device.core_llvm40.armel"/>
+ </option>
+ <option id="sbi.gnu.c.compiler.option.frameworks_inc.core.161282873" name="Tizen-Frameworks-Include-Path" superClass="sbi.gnu.c.compiler.option.frameworks_inc.core" valueType="includePath">
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/libxml2""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/appcore-agent""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/appfw""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/base""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/ckm""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/device""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/dlog""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/ecore-1""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/efl-1""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/eina-1""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/eina-1/eina""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/eo-1""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/gio-unix-2.0""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/glib-2.0""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/iotcon""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/iotjs""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/json-glib-1.0""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/media""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/minizip""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/network""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/notification""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/rpc-port""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/storage""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/system""/>
+ <listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/lib/glib-2.0/include""/>
+ </option>
+ <option id="sbi.gnu.c.compiler.option.frameworks_cflags.core.50270090" name="Tizen-Frameworks-Other-Cflags" superClass="sbi.gnu.c.compiler.option.frameworks_cflags.core" valueType="stringList">
+ <listOptionValue builtIn="false" value="${TC_COMPILER_MISC}"/>
+ <listOptionValue builtIn="false" value="${RS_COMPILER_MISC}"/>
+ <listOptionValue builtIn="false" value=" -fPIE"/>
+ <listOptionValue builtIn="false" value="--sysroot="${SBI_SYSROOT}""/>
+ <listOptionValue builtIn="false" value="-mthumb"/>
+ </option>
+ <option id="gnu.c.compiler.option.include.paths.1510823081" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
+ <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/inc}""/>
+ </option>
+ <option id="sbi.gnu.c.compiler.option.frameworks.core.20067079" name="Tizen-Frameworks" superClass="sbi.gnu.c.compiler.option.frameworks.core" valueType="userObjs">
+ <listOptionValue builtIn="false" value="Native_API"/>
+ <listOptionValue builtIn="false" value="iot-things"/>
+ </option>
+ <inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.694931793" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
+ </tool>
+ <tool id="org.tizen.nativeide.tool.sbi.gnu.c.linker.base.684675361" name="C Linker" superClass="org.tizen.nativeide.tool.sbi.gnu.c.linker.base"/>
+ <tool command="clang++.exe" id="org.tizen.nativecore.tool.sbi.gnu.cpp.linker.1201968842" name="C++ Linker" superClass="org.tizen.nativecore.tool.sbi.gnu.cpp.linker">
+ <option defaultValue="true" id="sbi.gnu.cpp.link.option.strip.452831619" name="Omit all symbol information (-s)" superClass="sbi.gnu.cpp.link.option.strip" valueType="boolean"/>
+ <option defaultValue="false" id="sbi.gnu.cpp.linker.option.shared_flag.core.1211039381" name="Linker.Shared" superClass="sbi.gnu.cpp.linker.option.shared_flag.core" valueType="boolean"/>
+ <option defaultValue="false" id="sbi.gnu.cpp.linker.option.noundefined.core.2090913951" name="Report unresolved symbol references (-Wl,--no-undefined)" superClass="sbi.gnu.cpp.linker.option.noundefined.core" valueType="boolean"/>
+ <option id="sbi.gnu.cpp.linker.option.frameworks_lflags.core.1980193199" name="Tizen-Frameworks-Other-Lflags" superClass="sbi.gnu.cpp.linker.option.frameworks_lflags.core" valueType="stringList">
+ <listOptionValue builtIn="false" value="${TC_LINKER_MISC}"/>
+ <listOptionValue builtIn="false" value="${RS_LINKER_MISC}"/>
+ <listOptionValue builtIn="false" value="-pie -lpthread "/>
+ <listOptionValue builtIn="false" value="--sysroot="${SBI_SYSROOT}""/>
+ <listOptionValue builtIn="false" value="-Xlinker --version-script="${PROJ_PATH}/.exportMap""/>
+ <listOptionValue builtIn="false" value="-L"${SBI_SYSROOT}/usr/lib""/>
+ <listOptionValue builtIn="false" value="$(RS_LIBRARIES)"/>
+ </option>
+ <option id="gnu.cpp.link.option.paths.1351704700" name="Library search path (-L)" superClass="gnu.cpp.link.option.paths" valueType="libPaths">
+ <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/lib}""/>
+ </option>
+ <option id="gnu.cpp.link.option.libs.1366460576" name="Libraries (-l)" superClass="gnu.cpp.link.option.libs" valueType="libs">
+ <listOptionValue builtIn="false" value="st_thing_master_api"/>
+ <listOptionValue builtIn="false" value="st_thing_resource_api"/>
+ </option>
+ <inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.1290292098" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
+ <additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
+ <additionalInput kind="additionalinput" paths="$(LIBS)"/>
+ </inputType>
+ </tool>
+ <tool command="#{PLATFORM_DEFAULT_GCC_PREFIX}as.exe" id="org.tizen.nativeapp.tool.sbi.gnu.assembler.base.1451045081" name="Assembler" superClass="org.tizen.nativeapp.tool.sbi.gnu.assembler.base">
+ <inputType id="cdt.managedbuild.tool.gnu.assembler.input.333149541" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
+ </tool>
+ <tool id="org.tizen.nativecore.tool.fnmapgen.2121610845" name="C FN-Map Generator" superClass="org.tizen.nativecore.tool.fnmapgen"/>
+ <tool id="org.tizen.nativecore.tool.fnmapgen.cpp.1799742651" name="C++ FN-Map Generator" superClass="org.tizen.nativecore.tool.fnmapgen.cpp"/>
+ <tool id="org.tizen.nativecore.tool.ast.568448285" name="C Static Analyzer" superClass="org.tizen.nativecore.tool.ast"/>
+ <tool id="org.tizen.nativecore.tool.ast.cpp.817322202" name="C++ Static Analyzer" superClass="org.tizen.nativecore.tool.ast.cpp"/>
+ <tool id="org.tizen.nativecore.tool.sbi.gnu.archiver.mergelib.340102188" name="Archive Generator" superClass="org.tizen.nativecore.tool.sbi.gnu.archiver.mergelib"/>
+ <tool id="org.tizen.nativecore.tool.sbi.po.compiler.817624000" name="PO Resource Compiler" superClass="org.tizen.nativecore.tool.sbi.po.compiler"/>
+ <tool id="org.tizen.nativecore.tool.sbi.edc.compiler.1706838655" name="EDC Resource Compiler" superClass="org.tizen.nativecore.tool.sbi.edc.compiler"/>
+ </toolChain>
+ </folderInfo>
+ <sourceEntries>
+ <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="inc"/>
+ <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="res"/>
+ <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="shared"/>
+ <entry excluding="thing_resource_user.c|thing_master_user.c|co2_50.c|resource_capability_thermostatcoolingsetpoint_main_0.c|resource_capability_switch_main_0.c|resource_capability_airqualitysensor_main_0.c" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src"/>
+ </sourceEntries>
+ </configuration>
+ </storageModule>
+ <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+ </cconfiguration>
+ </storageModule>
+ <storageModule moduleId="cdtBuildSystem" version="4.0.0">
+ <project id="co2_50.org.tizen.nativecore.target.sbi.gcc45.app.1768897679" name="Tizen Native Application" projectType="org.tizen.nativecore.target.sbi.gcc45.app"/>
+ </storageModule>
+ <storageModule moduleId="scannerConfiguration">
+ <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
+ <scannerConfigBuildInfo instanceId="org.tizen.nativecore.config.sbi.gcc45.app.debug.1328561736">
+ <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
+ </scannerConfigBuildInfo>
+ <scannerConfigBuildInfo instanceId="org.tizen.nativecore.config.sbi.gcc45.app.release.983305347">
+ <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
+ </scannerConfigBuildInfo>
+ </storageModule>
+ <storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
+ <storageModule moduleId="refreshScope"/>
+ <storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"/>
+</cproject>
--- /dev/null
+{
+ global: main;
+ _IO_*;
+ local: *;
+};
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>co2_50</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
+ <triggers>full,incremental,</triggers>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.cdt.core.cnature</nature>
+ <nature>org.eclipse.cdt.core.ccnature</nature>
+ <nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
+ <nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
+ </natures>
+ <filteredResources>
+ <filter>
+ <id>1548126403883</id>
+ <name></name>
+ <type>26</type>
+ <matcher>
+ <id>org.eclipse.ui.ide.multiFilter</id>
+ <arguments>1.0-projectRelativePath-matches-false-false-*/.tpk</arguments>
+ </matcher>
+ </filter>
+ <filter>
+ <id>1548126403886</id>
+ <name></name>
+ <type>6</type>
+ <matcher>
+ <id>org.eclipse.ui.ide.multiFilter</id>
+ <arguments>1.0-name-matches-false-false-project_def.prop</arguments>
+ </matcher>
+ </filter>
+ </filteredResources>
+</projectDescription>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<tproject xmlns="http://www.tizen.org/tproject">
+ <platforms>
+ <platform>
+ <name>iot-headless-5.0</name>
+ </platform>
+ </platforms>
+ <package>
+ <blacklist/>
+ <resFallback autoGen="true"/>
+ </package>
+</tproject>
*/
#ifndef __LOG_H__
-#define __LOG_H__
+#define __LOG_H__
#include <dlog.h>
extern "C" {
#endif
-#ifdef LOG_TAG
-#undef LOG_TAG
+#ifdef LOG_TAG
+#undef LOG_TAG
#endif
-#define LOG_TAG "co2"
+#define LOG_TAG "STAPP"
-#define ERR(fmt, args...) dlog_print(DLOG_ERROR, LOG_TAG, "%s : %s(%d) > "fmt"\n", rindex(__FILE__, '/') + 1, __func__, __LINE__, ##args)
-#define WARN(fmt, args...) dlog_print(DLOG_WARN, LOG_TAG, "%s : %s(%d) > "fmt"\n", rindex(__FILE__, '/') + 1, __func__, __LINE__, ##args)
-#define INFO(fmt, args...) dlog_print(DLOG_INFO, LOG_TAG, "%s : %s(%d) > "fmt"\n", rindex(__FILE__, '/') + 1, __func__, __LINE__, ##args)
-#define DBG(fmt, args...) dlog_print(DLOG_DEBUG, LOG_TAG, "%s : %s(%d) > "fmt"\n", rindex(__FILE__, '/') + 1, __func__, __LINE__, ##args)
+#define _E(fmt, args...) dlog_print(DLOG_ERROR, LOG_TAG, "%s : %s(%d) > "fmt"\n", rindex(__FILE__, '/') + 1, __func__, __LINE__, ##args)
+#define _W(fmt, args...) dlog_print(DLOG_WARN, LOG_TAG, "%s : %s(%d) > "fmt"\n", rindex(__FILE__, '/') + 1, __func__, __LINE__, ##args)
+#define _I(fmt, args...) dlog_print(DLOG_INFO, LOG_TAG, "%s : %s(%d) > "fmt"\n", rindex(__FILE__, '/') + 1, __func__, __LINE__, ##args)
+#define _D(fmt, args...) dlog_print(DLOG_DEBUG, LOG_TAG, "%s : %s(%d) > "fmt"\n", rindex(__FILE__, '/') + 1, __func__, __LINE__, ##args)
-#define FN_CALL dlog_print(DLOG_DEBUG, LOG_TAG, ">>>>>>>> called")
-#define FN_END dlog_print(DLOG_DEBUG, LOG_TAG, "<<<<<<<< ended")
+#define START dlog_print(DLOG_DEBUG, LOG_TAG, "%s : %s(%d) >>>>>>>> called", rindex(__FILE__, '/') + 1, __func__, __LINE__)
+#define END dlog_print(DLOG_DEBUG, LOG_TAG, "%s : %s(%d) <<<<<<<< ended", rindex(__FILE__, '/') + 1, __func__, __LINE__)
#ifdef __cplusplus
}
#endif
+
#endif /* __LOG_H__ */
--- /dev/null
+/*****************************************************************
+ *
+ * Copyright (c) 2018 Samsung Electronics Co., Ltd. All Rights Reserved
+ *
+ * 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 __SAMSUNG_EXPERIENCE_SERVICE_SMARTTHINGS_H__
+#define __SAMSUNG_EXPERIENCE_SERVICE_SMARTTHINGS_H__
+
+#include <stdlib.h>
+#include <stdbool.h>
+#include <tizen.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @addtogroup CAPI_SMARTTHINGS_THING_MASTER_MODULE
+ * @{
+ */
+
+/**
+ * @brief Definition for the max length of SSID for access point.
+ * @since_ses 1
+ */
+#define SMARTTHINGS_SSID_LEN_MAX 32
+
+/**
+ * @brief Definition for the max length of cloud information.
+ * @since_ses 1
+ */
+#define SMARTTHINGS_CLOUD_INFO_LEN_MAX 128
+
+/**
+ * @brief Enumeration for the SmartThings error.
+ * @since_ses 1
+ */
+typedef enum {
+ SMARTTHINGS_ERROR_NONE = TIZEN_ERROR_NONE, /**< Successful */
+ SMARTTHINGS_ERROR_INVALID_PARAMETER = TIZEN_ERROR_INVALID_PARAMETER, /**< Invalid parameter */
+ SMARTTHINGS_ERROR_OUT_OF_MEMORY = TIZEN_ERROR_OUT_OF_MEMORY, /**< Out of memory */
+ SMARTTHINGS_ERROR_PERMISSION_DENIED = TIZEN_ERROR_PERMISSION_DENIED, /**< Permission denied */
+ SMARTTHINGS_ERROR_NO_DATA = TIZEN_ERROR_NO_DATA, /**< No data */
+ SMARTTHINGS_ERROR_NOT_SUPPORTED = TIZEN_ERROR_NOT_SUPPORTED, /**< Not supported */
+ SMARTTHINGS_ERROR_OPERATION_FAILED = TIZEN_ERROR_UNKNOWN - 1, /**< Operation failed */
+ SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE = TIZEN_ERROR_UNKNOWN -2 /**< Service unavailable */
+} smartthings_error_e;
+
+/**
+ * @brief Enumeration for SmartThings status.
+ * @since_ses 1
+ */
+typedef enum {
+ SMARTTHINGS_STATUS_NOT_READY = -1, /**< Service agent is not ready */
+ SMARTTHINGS_STATUS_INIT = 0, /**< Initial state of SmartThings Thing */
+ SMARTTHINGS_STATUS_ES_STARTED, /**< Easy-setup is started */
+ SMARTTHINGS_STATUS_ES_DONE, /**< Easy-setup is done */
+ SMARTTHINGS_STATUS_ES_FAILED_ON_OWNERSHIP_TRANSFER, /**< Easy-setup failed due to Ownership-Transfer failure */
+ SMARTTHINGS_STATUS_CONNECTING_TO_AP, /**< Connecting to target Wi-Fi access point */
+ SMARTTHINGS_STATUS_CONNECTED_TO_AP, /**< Connected to target Wi-Fi access point */
+ SMARTTHINGS_STATUS_CONNECTING_TO_AP_FAILED, /**< Failed to connect to target Wi-Fi access point */
+ SMARTTHINGS_STATUS_REGISTERING_TO_CLOUD, /**< Trying to sign up, sign in and publish resources to cloud */
+ SMARTTHINGS_STATUS_REGISTERED_TO_CLOUD, /**< Publish resources to cloud is complete. Now the thing is ready to be controlled via cloud */
+ SMARTTHINGS_STATUS_REGISTERING_FAILED_ON_SIGN_IN, /**< Failed to sign in to cloud */
+ SMARTTHINGS_STATUS_REGISTERING_FAILED_ON_PUB_RES /**< Failed to publish resources to cloud */
+} smartthings_status_e;
+
+/**
+ * @brief Enumeration for RPC connection status.
+ * @since_ses 1
+ */
+typedef enum {
+ SMARTTHINGS_CONNECTION_STATUS_CONNECTED = 0, /**< Connection is connected */
+ SMARTTHINGS_CONNECTION_STATUS_DISCONNECTED, /**< Connection is disconnected */
+ SMARTTHINGS_CONNECTION_STATUS_REJECTED, /**< Connection is rejected */
+} smartthings_connection_status_e;
+
+/**
+ * @brief The Wi-Fi mode.
+ * @since_ses 1
+ */
+typedef enum {
+ SMARTTHINGS_WIFI_MODE_11A = (1 << 0), /**< Wi-Fi 11A */
+ SMARTTHINGS_WIFI_MODE_11B = (1 << 1), /**< Wi-Fi 11B */
+ SMARTTHINGS_WIFI_MODE_11G = (1 << 2), /**< Wi-Fi 11G */
+ SMARTTHINGS_WIFI_MODE_11N = (1 << 3), /**< Wi-Fi 11N */
+ SMARTTHINGS_WIFI_MODE_11AC = (1 << 4) /**< Wi-Fi 11AC */
+} smartthings_wifi_mode_e;
+
+/**
+ * @brief The Wi-Fi frequency band.
+ * @since_ses 1
+ */
+typedef enum {
+ SMARTTHINGS_WIFI_FREQ_24G = (1 << 0), /**< Wi-Fi 2.4GHz */
+ SMARTTHINGS_WIFI_FREQ_5G = (1 << 1), /**< Wi-Fi 5GHz */
+} smartthings_wifi_freq_e;
+
+/**
+ * @brief The Wi-Fi authentication type of access point.
+ * @since_ses 1
+ */
+typedef enum {
+ SMARTTHINGS_WIFI_AUTHTYPE_NONE = 0, /**< No authentication */
+ SMARTTHINGS_WIFI_AUTHTYPE_WEP, /**< WEP */
+ SMARTTHINGS_WIFI_AUTHTYPE_WPA_PSK, /**< WPA-PSK */
+ SMARTTHINGS_WIFI_AUTHTYPE_WPA2_PSK /**< WPA2-PSK */
+} smartthings_wifi_authtype_e;
+
+/**
+ * @brief The Wi-Fi encryption type of access point.
+ * @since_ses 1
+ */
+typedef enum {
+ SMARTTHINGS_WIFI_ENCTYPE_NONE = 0, /**< No encryption */
+ SMARTTHINGS_WIFI_ENCTYPE_WEP_64, /**< WEP 64 */
+ SMARTTHINGS_WIFI_ENCTYPE_WEP_128, /**< WEP 128 */
+ SMARTTHINGS_WIFI_ENCTYPE_TKIP, /**< TKIP */
+ SMARTTHINGS_WIFI_ENCTYPE_AES, /**< AES */
+ SMARTTHINGS_WIFI_ENCTYPE_TKIP_AES /**< TKIP/AES */
+} smartthings_wifi_enctype_e;
+
+/**
+ * @brief The SmartThings handle.
+ * @since_ses 1
+ */
+typedef struct smartthings_s *smartthings_h;
+
+/**
+ * @brief The access point information handle.
+ * @since_ses 1
+ */
+typedef struct smartthings_ap_info_s *smartthings_ap_info_h;
+
+/**
+ * @brief The device provisioning information handle.
+ * @since_ses 1
+ */
+typedef struct smartthings_device_prov_info_s *smartthings_device_prov_info_h;
+
+/**
+ * @brief The cloud information handle for cloud sign-up.
+ * @since_ses 1
+ */
+typedef struct smartthings_cloud_info_s *smartthings_cloud_info_h;
+
+/**
+ * @brief The access point list handle.
+ * @since_ses 1
+ */
+typedef struct smartthings_ap_list_s *smartthings_ap_list_h;
+
+/**
+ * @brief Callback for status of connection to SmartThings Thing agent.
+ * @since_ses 1
+ *
+ * @remarks The @a handle should not be released.
+ * @remarks The @a handle is the same object for which the callback was set/added.
+ * @remarks The @a handle will be released when smartthings_deinitialize() is called.
+ * @remarks When callback is called, user can see connection status as #smartthings_connection_status_e enumeration value.
+ *
+ * @param[in] result The result of connection operation
+ * @param[in] handle The SmartThings handle
+ * @param[in] status The status of connection
+ * @param[in] user_data The user data passed from the callback registration function
+ *
+ * @see smartthings_initialize()
+ */
+typedef void (*smartthings_connection_status_cb)(smartthings_h handle, smartthings_connection_status_e status, void *user_data);
+
+/**
+ * @brief Callback for SmartThings Thing status.
+ * @since_ses 1
+ *
+ * @remarks The @a handle should not be released.
+ * @remarks The @a handle is the same object for which the callback was set/added.
+ * @remarks The @a handle will be released when smartthings_deinitialize() is called.
+ * @remarks When callback is called, user can see SmartThings status as #smartthings_status_e enumeration value.
+ *
+ * @param[in] handle The SmartThings handle
+ * @param[in] status The status of SmartThings
+ * @param[in] user_data The user data passed from the callback registration function
+ *
+ * @see smartthings_set_status_changed_cb()
+ * @see smartthings_unset_status_changed_cb()
+ */
+typedef void (*smartthings_status_changed_cb)(smartthings_h handle, smartthings_status_e status, void *user_data);
+
+/**
+ * @brief Callback for getting user's input regarding mutual verification.
+ * @since_ses 1
+ *
+ * @remarks The @a handle should not be released.
+ * @remarks The @a handle is the same object for which the callback was set/added.
+ * @remarks The @a handle will be released when smartthings_deinitialize() is called.
+ * @remarks When callback is called, user can send a confirmation for mutual verification as true or false.
+ *
+ * @param[in] handle The SmartThings handle
+ * @param[in] user_data The user data passed from the callback registration function
+ *
+ * @see smartthings_set_user_confirm_cb()
+ * @see smartthings_unset_user_confirm_cb()
+ */
+typedef void (*smartthings_user_confirm_cb)(smartthings_h handle, void *user_data);
+
+/**
+ * @brief Callback for getting user's opinion regarding device reset.
+ * @since_ses 1
+ *
+ * @remarks The @a handle should not be released.
+ * @remarks The @a handle is the same object for which the callback was set/added.
+ * @remarks The @a handle will be released when smartthings_deinitialize() is called.
+ * @remarks When callback is called, user can sends a confirmation for reset as true or false.
+ *
+ * @param[in] handle The SmartThings handle
+ * @param[in] user_data The user data passed from the callback registration function
+ *
+ * @see smartthings_set_reset_confirm_cb()
+ * @see smartthings_unset_reset_confirm_cb()
+ */
+typedef void (*smartthings_reset_confirm_cb)(smartthings_h handle, void *user_data);
+
+/**
+ * @brief Callback for result of reset operation.
+ * @since_ses 1
+ *
+ * @remarks The @a handle should not be released.
+ * @remarks The @a handle is the same object for which the callback was set/added.
+ * @remarks The @a handle will be released when smartthings_deinitialize() is called.
+ * @remarks When callback is called, user can check reset operation succeeds or fails.
+ *
+ * @param[in] handle The SmartThings handle
+ * @param[in] result The result of reset
+ * @param[in] user_data The user data passed from the callback registration function
+ *
+ * @see smartthings_set_reset_result_cb()
+ * @see smartthings_unset_reset_result_cb()
+ */
+typedef void (*smartthings_reset_result_cb)(smartthings_h handle, bool result, void *user_data);
+
+/**
+ * @brief Callback for carrying the randomly generated PIN information.
+ * @since_ses 1
+ *
+ * @remarks The @a handle should not be released.
+ * @remarks The @a handle is the same object for which the callback was set/added.
+ * @remarks The @a handle will be released when smartthings_deinitialize() is called.
+ * @remarks The @a pin can be used only in the callback. To use outside, make a copy.
+ * @remarks When callback is called, user can see PIN value and length.
+ *
+ * @param[in] handle The SmartThings handle
+ * @param[in] pin The PIN data in string format
+ * @param[in] size The PIN length of @a pin
+ * @param[in] user_data The user data passed from the callback registration function
+ *
+ * @see smartthings_set_pin_cb()
+ * @see smartthings_unset_pin_cb()
+ */
+typedef void (*smartthings_pin_generated_cb)(smartthings_h handle, const char* pin, size_t size, void *user_data);
+
+/**
+ * @brief Callback for informing the application to close the PIN display.
+ * @since_ses 1
+ *
+ * @remarks The @a handle should not be released.
+ * @remarks The @a handle is the same object for which the callback was set/added.
+ * @remarks The @a handle will be released when smartthings_deinitialize() is called.
+ * @remarks When callback is called, user can know PIN based ownership transfer is finished.
+ *
+ * @param[in] handle The SmartThings handle
+ * @param[in] user_data The user data passed from the callback registration function
+ *
+ * @see smartthings_set_pin_cb()
+ * @see smartthings_unset_pin_cb()
+ */
+typedef void (*smartthings_pin_display_close_cb)(smartthings_h handle, void *user_data);
+
+/**
+ * @brief Callback for informing Wi-Fi AP information to connect.
+ * @since_ses 1
+ *
+ * @remarks The @a handle should not be released.
+ * @remarks The @a handle is the same object for which the callback was set/added.
+ * @remarks The @a handle will be released when smartthings_deinitialize() is called.
+ * @remarks The @a ap_info_h should not be released.
+ * @remarks The @a ap_info_h will be released when smartthings_unset_wifi_ap_provisioning_cb() is called.
+ * @remarks When callback is called, user can get Wi-Fi provisioning information.
+ *
+ * @param[in] handle The SmartThings handle
+ * @param[in] ap_info_h The AP information handle
+ * @param[in] user_data The user data passed from the callback registration function
+ *
+ * @see smartthings_set_wifi_ap_provisioning_cb()
+ * @see smartthings_unset_wifi_ap_provisioning_cb()
+ */
+typedef void (*smartthings_wifi_ap_provisioning_cb)(smartthings_h handle, smartthings_ap_info_h ap_info_h, void *user_data);
+
+/**
+ * @brief Callback for informing device provisioning information.
+ * @since_ses 1
+ *
+ * @remarks The @a handle should not be released.
+ * @remarks The @a handle is the same object for which the callback was set/added.
+ * @remarks The @a handle will be released when smartthings_deinitialize() is called.
+ * @remarks The @a dev_prov_h should not be released.
+ * @remarks The @a dev_prov_h will be released when smartthings_unset_device_provisioning_cb() is called.
+ * @remarks When callback is called, user can get device provisioning information.
+ *
+ * @param[in] handle The SmartThings handle
+ * @param[in] dev_prov_h The device provisioning information handle
+ * @param[in] user_data The user data passed from the callback registration function
+ *
+ * @see smartthings_set_device_provisioning_cb()
+ * @see smartthings_unset_device_provisioning_cb()
+ */
+typedef void (*smartthings_device_provisioning_cb)(smartthings_h handle, smartthings_device_prov_info_h dev_prov_h, void *user_data);
+
+/**
+ * @brief Callback for informing the scan AP list request.
+ * @since_ses 1
+ *
+ * @remarks The @a handle should not be released.
+ * @remarks The @a handle is the same object for which the callback was set/added.
+ * @remarks The @a handle will be released when smartthings_deinitialize() is called.
+ * @remarks When callback is called, user scans access points, sets AP list and sends it to agent.
+ *
+ * @param[in] handle The SmartThings handle
+ * @param[in] req_id The request ID
+ * @param[in] user_data The user data passed from the callback registration function
+ *
+ * @see smartthings_set_scan_ap_cb()
+ * @see smartthings_unset_scan_ap_cb()
+ */
+typedef void (*smartthings_scan_ap_cb)(smartthings_h handle, int req_id, void *user_data);
+
+/**
+ * @brief Callback for informing the stop soft AP request.
+ * @since_ses 1
+ *
+ * @remarks The @a handle should not be released.
+ * @remarks The @a handle is the same object for which the callback was set/added.
+ * @remarks The @a handle will be released when smartthings_deinitialize() is called.
+ * @remarks When callback is called, user stops soft AP.
+ *
+ * @param[in] handle The SmartThings handle
+ * @param[in] user_data The user data passed from the callback registration function
+ *
+ * @see smartthings_set_stop_soft_ap_cb()
+ * @see smartthings_unset_stop_soft_ap_cb()
+ */
+typedef void (*smartthings_stop_soft_ap_cb)(smartthings_h handle, void *user_data);
+
+/**
+ * @brief Creates a handle and connects to agent.
+ * @since_ses 1
+ * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n
+ * %http://tizen.org/privilege/appmanager.launch \n
+ * %http://tizen.org/privilege/datasharing
+ *
+ * @remarks The @a handle must be released using smartthings_deinitialize().
+ * @remarks Ths function returns #SMARTTHINGS_ERROR_PERMISSION_DENIED\n
+ * if the application has no app-defined privilege for 'http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master'.
+ *
+ * @param[out] handle The SmartThings handle to be newly created on success
+ * @param[in] connection_status_cb The RPC connection status callback to register
+ * @param[in] user_data The user data to be passed to the callback function
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed
+ * @retval #SMARTTHINGS_ERROR_NOT_SUPPORTED Not supported
+ * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable
+ *
+ * @see smartthings_deinitialize()
+ */
+int smartthings_initialize(smartthings_h *handle,
+ smartthings_connection_status_cb connection_status_cb,
+ void *user_data);
+
+/**
+ * @brief Deinitializes a handle and disconnects from the agent.
+ * @since_ses 1
+ *
+ * @param[in] handle The SmartThings handle
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed
+ *
+ * @see smartthings_initialize()
+ */
+int smartthings_deinitialize(smartthings_h handle);
+
+/**
+ * @brief Starts SmartThings Thing operation.
+ * @since_ses 1
+ * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n
+ * %http://tizen.org/privilege/appmanager.launch \n
+ * %http://tizen.org/privilege/datasharing
+ *
+ * @param[in] handle The SmartThings handle
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed
+ * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable
+ *
+ * @see smartthings_stop()
+ */
+int smartthings_start(smartthings_h handle);
+
+/**
+ * @brief Stops SmartThings Thing operation.
+ * @since_ses 1
+ * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n
+ * %http://tizen.org/privilege/appmanager.launch \n
+ * %http://tizen.org/privilege/datasharing
+ *
+ * @param[in] handle The SmartThings handle
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed
+ * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable
+ *
+ * @see smartthings_start()
+ */
+int smartthings_stop(smartthings_h handle);
+
+/**
+ * @brief Sets thing status changed callback.
+ * @since_ses 1
+ * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n
+ * %http://tizen.org/privilege/appmanager.launch \n
+ * %http://tizen.org/privilege/datasharing
+ *
+ * @remarks Only one callback function can be set with this function.
+ * @remarks If multiple callbacks are set, the last one is registered only.
+ * @remarks Callback is called when SmartThings status is changed.
+ * @remarks When callback is called, user can get SmartThings status as #smartthings_status_e enumeration value.
+ *
+ * @param[in] handle The SmartThings handle
+ * @param[in] status_cb The status changed callback to register
+ * @param[in] user_data The user data to be passed to the callback function
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed
+ * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable
+ *
+ * @see smartthings_unset_status_changed_cb()
+ */
+int smartthings_set_status_changed_cb(smartthings_h handle,
+ smartthings_status_changed_cb status_cb,
+ void *user_data);
+
+/**
+ * @brief Unsets thing status changed callback.
+ * @since_ses 1
+ * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n
+ * %http://tizen.org/privilege/appmanager.launch \n
+ * %http://tizen.org/privilege/datasharing
+ *
+ * @param[in] handle The SmartThings handle
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed
+ * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable
+ *
+ * @see smartthings_set_status_changed_cb()
+ */
+int smartthings_unset_status_changed_cb(smartthings_h handle);
+
+/**
+ * @brief Sets test certificate files.
+ * @since_ses 1
+ * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n
+ * %http://tizen.org/privilege/appmanager.launch \n
+ * %http://tizen.org/privilege/datasharing
+ *
+ * @remarks These files should be placed in 'res' directory of application.
+ * @remarks This function is needed only for using test certificate.
+ * @remarks This function can be used before smartthings_start()
+ *
+ * @param[in] handle The SmartThings handle
+ * @param[in] certificate The certificate file
+ * @param[in] private_key The private key file
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed
+ * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable
+ */
+int smartthings_set_certificate_file(smartthings_h handle, const char *certificate, const char *private_key);
+
+/**
+ * @brief Sets device property for Easy-setup.
+ * @since_ses 1
+ *
+ * @remarks This function can be used before smartthings_start()
+ *
+ * @param[in] handle The SmartThings handle
+ * @param[in] dev_name The device name
+ * @param[in] wifi_mode The supported Wi-Fi mode (bit masked value for #smartthings_wifi_mode_e)
+ * @param[in] wifi_freq The supported Wi-Fi frequency (bit masked value for #smartthings_wifi_freq_e)
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter
+ */
+int smartthings_set_device_property(smartthings_h handle, const char* dev_name, int wifi_mode, int wifi_freq);
+
+/**
+ * @brief Gets a device ID.
+ * @since_ses 1
+ * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n
+ * %http://tizen.org/privilege/appmanager.launch \n
+ * %http://tizen.org/privilege/datasharing
+ *
+ * @remarks The @a device_id should be released using free().
+ *
+ * @param[in] handle The SmartThings handle
+ * @param[out] device_id The device ID
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed
+ * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable
+ */
+int smartthings_get_device_id(smartthings_h handle, char **device_id);
+
+/**
+ * @brief Gets a Easy-setup status.
+ * @since_ses 1
+ * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n
+ * %http://tizen.org/privilege/appmanager.launch \n
+ * %http://tizen.org/privilege/datasharing
+ *
+ * @param[in] handle The SmartThings handle
+ * @param[out] is_completed The status of Easy-setup whether it is completed or not
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed
+ * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable
+ */
+int smartthings_get_easysetup_status(smartthings_h handle, bool *is_completed);
+
+/**
+ * @brief Starts Easy-setup mode.
+ *
+ * @details This function requests for turning on soft AP to SmartThings Thing agent.
+ * @since_ses 1
+ * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n
+ * %http://tizen.org/privilege/appmanager.launch \n
+ * %http://tizen.org/privilege/datasharing \n
+ * %http://tizen.org/privilege/softap
+ *
+ * @param[in] handle The SmartThings handle
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed
+ * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable
+ *
+ * @see smartthings_stop_easysetup()
+ */
+int smartthings_start_easysetup(smartthings_h handle);
+
+/**
+ * @brief Stops Easy-setup mode.
+ *
+ * @details This function requests for turning off soft AP to SmartThings Thing agent.
+ * @since_ses 1
+ * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n
+ * %http://tizen.org/privilege/appmanager.launch \n
+ * %http://tizen.org/privilege/datasharing \n
+ * %http://tizen.org/privilege/softap
+ *
+ * @param[in] handle The SmartThings handle
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed
+ * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable
+ *
+ * @see smartthings_start_easysetup()
+ */
+int smartthings_stop_easysetup(smartthings_h handle);
+
+/**
+ * @brief Sets callback for getting user confirmation for mutual verification based just work ownership transfer.
+ * @since_ses 1
+ * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n
+ * %http://tizen.org/privilege/appmanager.launch \n
+ * %http://tizen.org/privilege/datasharing
+ *
+ * @remarks Only one callback function can be set with this function.
+ * @remarks If multiple callbacks are set, the last one is registered only.
+ * @remarks Callback is called when it needs user's confirm for mutual verification based just work ownership transfer.
+ * @remarks When callback is called, user can send a confirmation for mutual verification based just work ownership transfer as true or false.
+ *
+ * @param[in] handle The SmartThings handle
+ * @param[in] confirm_cb The user confirm callback to register
+ * @param[in] user_data The user data to be passed to the callback function
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed
+ * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable
+ *
+ * @see smartthings_unset_user_confirm_cb()
+ */
+int smartthings_set_user_confirm_cb(smartthings_h handle,
+ smartthings_user_confirm_cb confirm_cb,
+ void *user_data);
+
+/**
+ * @brief Unsets user confirmation callback.
+ * @since_ses 1
+ * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n
+ * %http://tizen.org/privilege/appmanager.launch \n
+ * %http://tizen.org/privilege/datasharing
+ *
+ * @param[in] handle The SmartThings handle
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed
+ * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable
+ *
+ * @see smartthings_set_user_confirm_cb()
+ */
+int smartthings_unset_user_confirm_cb(smartthings_h handle);
+
+/**
+ * @brief Sets reset confirmation callback.
+ * @since_ses 1
+ * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n
+ * %http://tizen.org/privilege/appmanager.launch \n
+ * %http://tizen.org/privilege/datasharing
+ *
+ * @remarks Only one callback function can be set with this function.
+ * @remarks If multiple callbacks are set, the last one is registered only.
+ * @remarks Callback is called when it needs user's confirm for reset.
+ * @remarks When callback is called, user can send a confirmation for reset as true or false.
+ *
+ * @param[in] handle The SmartThings handle
+ * @param[in] confirm_cb The reset confirm callback to register
+ * @param[in] user_data The user data to be passed to the callback function
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed
+ * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable
+ *
+ * @see smartthings_unset_reset_confirm_cb()
+ */
+int smartthings_set_reset_confirm_cb(smartthings_h handle,
+ smartthings_reset_confirm_cb confirm_cb,
+ void *user_data);
+
+/**
+ * @brief Unsets reset confirmation callback.
+ * @since_ses 1
+ * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n
+ * %http://tizen.org/privilege/appmanager.launch \n
+ * %http://tizen.org/privilege/datasharing
+ *
+ * @param[in] handle The SmartThings handle
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed
+ * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable
+ *
+ * @see smartthings_set_reset_confirm_cb()
+ */
+int smartthings_unset_reset_confirm_cb(smartthings_h handle);
+
+/**
+ * @brief Sets reset result callback.
+ * @since_ses 1
+ * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n
+ * %http://tizen.org/privilege/appmanager.launch \n
+ * %http://tizen.org/privilege/datasharing
+ *
+ * @remarks Only one callback function can be set with this function.
+ * @remarks If multiple callbacks are set, the last one is registered only.
+ * @remarks Callback is called when reset operation returns its result.
+ * @remarks When callback is called, user can check reset operation succeeds or fails.
+ *
+ * @param[in] handle The SmartThings handle
+ * @param[in] reset_result_cb The reset result callback to register
+ * @param[in] user_data The user data to be passed to the callback function
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed
+ * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable
+ *
+ * @see smartthings_unset_reset_result_cb()
+ */
+int smartthings_set_reset_result_cb(smartthings_h handle,
+ smartthings_reset_result_cb reset_result_cb,
+ void *user_data);
+
+/**
+ * @brief Unsets reset result callback.
+ * @since_ses 1
+ * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n
+ * %http://tizen.org/privilege/appmanager.launch \n
+ * %http://tizen.org/privilege/datasharing
+ *
+ * @param[in] handle The SmartThings handle
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed
+ * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable
+ *
+ * @see smartthings_set_reset_result_cb()
+ */
+int smartthings_unset_reset_result_cb(smartthings_h handle);
+
+
+/**
+ * @brief Sets callback for getting randomly generated PIN for the PIN-based ownership transfer request.
+ * @since_ses 1
+ * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n
+ * %http://tizen.org/privilege/appmanager.launch \n
+ * %http://tizen.org/privilege/datasharing
+ *
+ * @remarks Only one callback function can be set with this function.
+ * @remarks If multiple callbacks are set, the last one is registered only.
+ * @remarks @a generated_cb callback is called when PIN is generated.
+ * @remarks @a close_cb callback is called when PIN based ownership transfer is finished.
+ * @remarks When @a generated_cb callback is called, user can see PIN value and length.
+ * @remarks When @a close_cb callback is called, user can know PIN based ownership transfer is finished.
+ *
+ * @param[in] handle The SmartThings handle
+ * @param[in] generated_cb The PIN generation callback to register
+ * @param[in] close_cb The PIN display close callback to register
+ * @param[in] user_data The user data to be passed to the callback function
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed
+ * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable
+ *
+ * @see smartthings_unset_pin_cb()
+ */
+int smartthings_set_pin_cb(smartthings_h handle,
+ smartthings_pin_generated_cb generated_cb,
+ smartthings_pin_display_close_cb close_cb,
+ void *user_data);
+
+/**
+ * @brief Unsets PIN callback.
+ * @since_ses 1
+ * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n
+ * %http://tizen.org/privilege/appmanager.launch \n
+ * %http://tizen.org/privilege/datasharing
+ *
+ * @param[in] handle The SmartThings handle
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed
+ * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable
+ *
+ * @see smartthings_set_pin_cb()
+ */
+int smartthings_unset_pin_cb(smartthings_h handle);
+
+/**
+ * @brief Sets callback for getting Wi-Fi AP information during Easy-setup.
+ * @since_ses 1
+ * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n
+ * %http://tizen.org/privilege/appmanager.launch \n
+ * %http://tizen.org/privilege/datasharing
+ *
+ * @remarks Only one callback function can be set with this function.
+ * @remarks If multiple callbacks are set, the last one is registered only.
+ * @remarks Callback is called when Wi-Fi provisioning event occurs.
+ * @remarks When callback is called, user can get Wi-Fi provisioning information.
+ *
+ * @param[in] handle The SmartThings handle
+ * @param[in] wifi_ap_cb The Wi-Fi AP callback to register
+ * @param[in] user_data The user data to be passed to the callback function
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed
+ * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable
+ *
+ * @see smartthings_unset_wifi_ap_provisioning_cb()
+ */
+int smartthings_set_wifi_ap_provisioning_cb(smartthings_h handle,
+ smartthings_wifi_ap_provisioning_cb wifi_ap_cb,
+ void *user_data);
+
+/**
+ * @brief Unsets callback for getting Wi-Fi AP information during Easy-setup.
+ * @since_ses 1
+ * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n
+ * %http://tizen.org/privilege/appmanager.launch \n
+ * %http://tizen.org/privilege/datasharing
+ *
+ * @param[in] handle The SmartThings handle
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed
+ * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable
+ *
+ * @see smartthings_set_wifi_ap_provisioning_cb()
+ */
+int smartthings_unset_wifi_ap_provisioning_cb(smartthings_h handle);
+
+/**
+ * @brief Sets callback for getting device provisioning information.
+ * @since_ses 1
+ * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n
+ * %http://tizen.org/privilege/appmanager.launch \n
+ * %http://tizen.org/privilege/datasharing
+ *
+ * @remarks Only one callback function can be set with this function.
+ * @remarks If multiple callbacks are set, the last one is registered only.
+ * @remarks Callback is called when device provisioning event occurs.
+ * @remarks When callback is called, user can get device provisioning information.
+ *
+ * @param[in] handle The SmartThings handle
+ * @param[in] dev_prov_cb The device provisioning callback to register
+ * @param[in] user_data The user data to be passed to the callback function
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed
+ * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable
+ *
+ * @see smartthings_unset_device_provisioning_cb()
+ */
+int smartthings_set_device_provisioning_cb(smartthings_h handle,
+ smartthings_device_provisioning_cb dev_prov_cb,
+ void *user_data);
+
+/**
+ * @brief Unsets callback for getting device provisioning information.
+ * @since_ses 1
+ * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n
+ * %http://tizen.org/privilege/appmanager.launch \n
+ * %http://tizen.org/privilege/datasharing
+ *
+ * @param[in] handle The SmartThings handle
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed
+ * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable
+ *
+ * @see smartthings_set_device_provisioning_cb()
+ */
+int smartthings_unset_device_provisioning_cb(smartthings_h handle);
+
+/**
+ * @brief Sets callback for informing the scan AP list request.
+ * @since_ses 1
+ * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n
+ * %http://tizen.org/privilege/appmanager.launch \n
+ * %http://tizen.org/privilege/datasharing
+ *
+ * @remarks Only one callback function can be set with this function.
+ * @remarks If multiple callbacks are set, the last one is registered only.
+ * @remarks Callback is called when GET request for access point list.
+ * @remarks When callback is called, user scans access points, sets AP list and sends it to agent.
+ *
+ * @param[in] handle The SmartThings handle
+ * @param[in] scan_ap_cb The callback to register
+ * @param[in] user_data The user data to be passed to the callback function
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed
+ * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable
+ *
+ * @see smartthings_unset_scan_ap_cb()
+ * @see smartthings_send_ap_list()
+ */
+int smartthings_set_scan_ap_cb(smartthings_h handle,
+ smartthings_scan_ap_cb scan_ap_cb,
+ void *user_data);
+
+/**
+ * @brief Unsets callback for informing the scan AP list request.
+ * @since_ses 1
+ * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n
+ * %http://tizen.org/privilege/appmanager.launch \n
+ * %http://tizen.org/privilege/datasharing
+ *
+ * @param[in] handle The SmartThings handle
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed
+ * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable
+ *
+ * @see smartthings_set_scan_ap_cb()
+ */
+int smartthings_unset_scan_ap_cb(smartthings_h handle);
+
+/**
+ * @brief Sets callback for informing the stop soft AP request.
+ * @since_ses 1
+ * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n
+ * %http://tizen.org/privilege/appmanager.launch \n
+ * %http://tizen.org/privilege/datasharing
+ *
+ * @remarks Only one callback function can be set with this function.
+ * @remarks If multiple callbacks are set, the last one is registered only.
+ * @remarks Callback is called when POST request for stopping soft AP.
+ * @remarks When callback is called, user stops soft AP.
+ *
+ * @param[in] handle The SmartThings handle
+ * @param[in] stop_soft_ap_cb The callback to register
+ * @param[in] user_data The user data to be passed to the callback function
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed
+ * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable
+ *
+ * @see smartthings_unset_stop_soft_ap_cb()
+ */
+int smartthings_set_stop_soft_ap_cb(smartthings_h handle,
+ smartthings_stop_soft_ap_cb stop_soft_ap_cb,
+ void *user_data);
+
+/**
+ * @brief Unsets callback for informing the stop soft AP request.
+ * @since_ses 1
+ * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n
+ * %http://tizen.org/privilege/appmanager.launch \n
+ * %http://tizen.org/privilege/datasharing
+ *
+ * @param[in] handle The SmartThings handle
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed
+ * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable
+ *
+ * @see smartthings_set_stop_soft_ap_cb()
+ */
+int smartthings_unset_stop_soft_ap_cb(smartthings_h handle);
+
+/**
+ * @brief Sends a user confirmation for MUTUAL VERIFICATION BASED JUST WORK Ownership transfer.
+ * @since_ses 1
+ * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n
+ * %http://tizen.org/privilege/appmanager.launch \n
+ * %http://tizen.org/privilege/datasharing \n
+ * %http://tizen.org/privilege/internet
+ *
+ * @param[in] handle The SmartThings handle
+ * @param[in] confirm The user confirmation for OTM(ownership transfer method)
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed
+ * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable
+ *
+ * @see smartthings_set_user_confirm_cb()
+ * @see smartthings_unset_user_confirm_cb()
+ */
+int smartthings_send_user_confirm(smartthings_h handle, bool confirm);
+
+
+/**
+ * @brief Sends a reset confirmation.
+ * @since_ses 1
+ * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n
+ * %http://tizen.org/privilege/appmanager.launch \n
+ * %http://tizen.org/privilege/datasharing \n
+ * %http://tizen.org/privilege/internet
+ *
+ * @param[in] handle The SmartThings handle
+ * @param[in] confirm The reset confirmation
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed
+ * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable
+ *
+ * @see smartthings_set_reset_confirm_cb()
+ * @see smartthings_unset_reset_confirm_cb()
+ */
+int smartthings_send_reset_confirm(smartthings_h handle, bool confirm);
+
+/**
+ * @brief Sends a reset command for resetting the device's Cloud signup and Easy-setup.
+ * @since_ses 1
+ * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n
+ * %http://tizen.org/privilege/appmanager.launch \n
+ * %http://tizen.org/privilege/datasharing \n
+ * %http://tizen.org/privilege/internet
+ *
+ * @param[in] handle The SmartThings handle
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed
+ * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable
+ *
+ * @see smartthings_set_reset_result_cb()
+ * @see smartthings_unset_reset_result_cb()
+ */
+int smartthings_reset(smartthings_h handle);
+
+/**
+ * @brief Gets SSID of access point.
+ * @since_ses 1
+ *
+ * @remarks The @a ssid should be released using free().
+ *
+ * @param[in] ap_info_h The SmartThings AP information handle
+ * @param[out] ssid The SSID name
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed
+ *
+ * @see smartthings_set_wifi_ap_provisioning_cb()
+ * @see smartthings_unset_wifi_ap_provisioning_cb()
+ */
+int smartthings_apinfo_get_ssid(smartthings_ap_info_h ap_info_h, char **ssid);
+
+/**
+ * @brief Gets password of access point.
+ * @since_ses 1
+ *
+ * @remarks The @a pwd should be released using free().
+ *
+ * @param[in] ap_info_h The SmartThings AP information handle
+ * @param[out] pwd The password
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed
+ *
+ * @see smartthings_set_wifi_ap_provisioning_cb()
+ * @see smartthings_unset_wifi_ap_provisioning_cb()
+ */
+int smartthings_apinfo_get_password(smartthings_ap_info_h ap_info_h, char **pwd);
+
+/**
+ * @brief Gets authentification type of access point.
+ * @since_ses 1
+ *
+ * @param[in] ap_info_h The SmartThings AP information handle
+ * @param[out] authtype The authentification type
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed
+ *
+ * @see smartthings_set_wifi_ap_provisioning_cb()
+ * @see smartthings_unset_wifi_ap_provisioning_cb()
+ */
+int smartthings_apinfo_get_authtype(smartthings_ap_info_h ap_info_h, smartthings_wifi_authtype_e *authtype);
+
+/**
+ * @brief Gets encryption type of access point.
+ * @since_ses 1
+ *
+ * @param[in] ap_info_h The SmartThings AP information handle
+ * @param[out] enctype The encryption type
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed
+ *
+ * @see smartthings_set_wifi_ap_provisioning_cb()
+ * @see smartthings_unset_wifi_ap_provisioning_cb()
+ */
+int smartthings_apinfo_get_enctype(smartthings_ap_info_h ap_info_h, smartthings_wifi_enctype_e *enctype);
+
+/**
+ * @brief Gets channel information of access point.
+ * @since_ses 1
+ *
+ * @param[in] ap_info_h The SmartThings AP information handle
+ * @param[out] channel The frequency channel
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed
+ *
+ * @see smartthings_set_wifi_ap_provisioning_cb()
+ * @see smartthings_unset_wifi_ap_provisioning_cb()
+ */
+int smartthings_apinfo_get_channel(smartthings_ap_info_h ap_info_h, int *channel);
+
+/**
+ * @brief Gets language of device provisioing information.
+ * @since_ses 1
+ *
+ * @remarks The @a language should be released using free().
+ *
+ * @param[in] dev_prov_h The SmartThings device provisioning information handle
+ * @param[out] language The IETF language tag using ISO 639X
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed
+ *
+ * @see smartthings_set_device_provisioning_cb()
+ * @see smartthings_unset_device_provisioning_cb()
+ */
+int smartthings_devinfo_get_language(smartthings_device_prov_info_h dev_prov_h, char **language);
+
+/**
+ * @brief Gets country of device provisioing information.
+ * @since_ses 1
+ *
+ * @remarks The @a country should be released using free().
+ *
+ * @param[in] dev_prov_h The SmartThings device provisioning information handle
+ * @param[out] country The ISO Country Code (ISO 3166-1 Alpha-2)
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed
+ *
+ * @see smartthings_set_device_provisioning_cb()
+ * @see smartthings_unset_device_provisioning_cb()
+ */
+int smartthings_devinfo_get_country(smartthings_device_prov_info_h dev_prov_h, char **country);
+
+/**
+ * @brief Gets datetime of device provisioing information.
+ * @since_ses 1
+ *
+ * @remarks The @a datetime should be released using free().
+ *
+ * @param[in] dev_prov_h The SmartThings device provisioning information handle
+ * @param[out] datetime The date and time
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed
+ *
+ * @see smartthings_set_device_provisioning_cb()
+ * @see smartthings_unset_device_provisioning_cb()
+ */
+int smartthings_devinfo_get_datetime(smartthings_device_prov_info_h dev_prov_h, char **datetime);
+
+/**
+ * @brief Creates a SmartThings AP list handle.
+ * @since_ses 1
+ *
+ * @remarks The @a ap_list_h must be released using smartthings_aplist_destroy().
+ *
+ * @param[out] ap_list_h The SmartThings AP list handle to be newly created on success
+ * @param[in] count The count of AP
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_ERROR_OUT_OF_MEMORY Out of memory
+ *
+ * @see smartthings_aplist_destroy()
+ */
+int smartthings_aplist_create(smartthings_ap_list_h *ap_list_h, unsigned int count);
+
+/**
+ * @brief Destroys a SmartThings AP list handle.
+ * @since_ses 1
+ *
+ * @param[in] ap_list_h The SmartThings AP list handle
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter
+ *
+ * @see smartthings_aplist_create()
+ */
+int smartthings_aplist_destroy(smartthings_ap_list_h ap_list_h);
+
+/**
+ * @brief Sets SSID at the specific index of AP list handle.
+ * @since_ses 1
+ *
+ * @param[in] ap_list_h The SmartThings AP list handle
+ * @param[in] idx The index
+ * @param[in] ssid The SSID of AP
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter
+ *
+ * @see smartthings_aplist_create()
+ * @see smartthings_aplist_destroy()
+ */
+int smartthings_aplist_set_ssid(smartthings_ap_list_h ap_list_h, int idx, const char *ssid);
+
+/**
+ * @brief Sets BSSID at the specific index of AP list handle.
+ * @since_ses 1
+ *
+ * @param[in] ap_list_h The SmartThings AP list handle
+ * @param[in] idx The index
+ * @param[in] bssid The BSSID of AP
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter
+ *
+ * @see smartthings_aplist_create()
+ * @see smartthings_aplist_destroy()
+ */
+int smartthings_aplist_set_bssid(smartthings_ap_list_h ap_list_h, int idx, const char *bssid);
+
+/**
+ * @brief Sets authentification type at the specific index of AP list handle.
+ * @since_ses 1
+ *
+ * @param[in] ap_list_h The SmartThings AP list handle
+ * @param[in] idx The index
+ * @param[in] authtype The authentification type of AP
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter
+ *
+ * @see smartthings_aplist_create()
+ * @see smartthings_aplist_destroy()
+ */
+int smartthings_aplist_set_authtype(smartthings_ap_list_h ap_list_h, int idx, smartthings_wifi_authtype_e authtype);
+
+/**
+ * @brief Sets encryption type at the specific index of AP list handle.
+ * @since_ses 1
+ *
+ * @param[in] ap_list_h The SmartThings AP list handle
+ * @param[in] idx The index
+ * @param[in] enctype The encryption type of AP
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter
+ *
+ * @see smartthings_aplist_create()
+ * @see smartthings_aplist_destroy()
+ */
+int smartthings_aplist_set_enctype(smartthings_ap_list_h ap_list_h, int idx, smartthings_wifi_enctype_e enctype);
+
+/**
+ * @brief Sets frequency channel at the specific index of AP list handle.
+ * @since_ses 1
+ *
+ * @param[in] ap_list_h The SmartThings AP list handle
+ * @param[in] idx The index
+ * @param[in] channel The frequency channel of AP
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter
+ *
+ * @see smartthings_aplist_create()
+ * @see smartthings_aplist_destroy()
+ */
+int smartthings_aplist_set_channel(smartthings_ap_list_h ap_list_h, int idx, int channel);
+
+/**
+ * @brief Sets signal level at the specific index of AP list handle.
+ * @since_ses 1
+ *
+ * @param[in] ap_list_h The SmartThings AP list handle
+ * @param[in] idx The index
+ * @param[in] signal_level The signal level of AP
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter
+ *
+ * @see smartthings_aplist_create()
+ * @see smartthings_aplist_destroy()
+ */
+int smartthings_aplist_set_signal_level(smartthings_ap_list_h ap_list_h, int idx, int signal_level);
+
+/**
+ * @brief Sets max speed rate at the specific index of AP list handle.
+ * @since_ses 1
+ *
+ * @param[in] ap_list_h The SmartThings AP list handle
+ * @param[in] idx The index
+ * @param[in] max_rate The max speed rate of AP
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter
+ *
+ * @see smartthings_aplist_create()
+ * @see smartthings_aplist_destroy()
+ */
+int smartthings_aplist_set_max_rate(smartthings_ap_list_h ap_list_h, int idx, int max_rate);
+
+/**
+ * @brief Sends the scanned AP list.
+ * @since_ses 1
+ * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n
+ * %http://tizen.org/privilege/appmanager.launch \n
+ * %http://tizen.org/privilege/datasharing \n
+ * %http://tizen.org/privilege/internet
+ *
+ * @param[in] handle The SmartThings handle
+ * @param[in] ap_list_h The SmartThings AP list handle
+ * @param[in] req_id The request ID
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed
+ * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable
+ *
+ * @see smartthings_aplist_create()
+ * @see smartthings_aplist_destroy()
+ * @see smartthings_set_scan_ap_cb()
+ */
+int smartthings_send_ap_list(smartthings_h handle, smartthings_ap_list_h ap_list_h, int req_id);
+
+/**
+ * @brief Creates a SmartThings cloud information handle.
+ * @since_ses 1
+ *
+ * @remarks The @a cloud_info_h must be released using smartthings_cloudinfo_destroy().
+ *
+ * @param[out] cloud_info_h The SmartThings cloud information handle to be newly created on success
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_ERROR_OUT_OF_MEMORY Out of memory
+ *
+ * @see smartthings_cloudinfo_destroy()
+ */
+int smartthings_cloudinfo_create(smartthings_cloud_info_h *cloud_info_h);
+
+/**
+ * @brief Destroys a SmartThings cloud information handle.
+ * @since_ses 1
+ *
+ * @param[in] cloud_info_h The SmartThings cloud information handle
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter
+ *
+ * @see smartthings_cloudinfo_create()
+ */
+int smartthings_cloudinfo_destroy(smartthings_cloud_info_h cloud_info_h);
+
+/**
+ * @brief Sets region of cloud information.
+ * @since_ses 1
+ *
+ * @remarks The @a region can be set to one of "global" or "china".
+ * @remarks If it doesn't use this function, the @a region will be set to "global" internally.
+ *
+ * @param[in] cloud_info_h The SmartThings cloud information handle
+ * @param[in] region The region name
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter
+ */
+int smartthings_cloudinfo_set_region(smartthings_cloud_info_h cloud_info_h, const char *region);
+
+/**
+ * @brief Sets authentification provider of cloud information.
+ * @since_ses 1
+ *
+ * @param[in] cloud_info_h The SmartThings cloud information handle
+ * @param[in] auth_provider The authentification provider
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter
+ */
+int smartthings_cloudinfo_set_auth_provider(smartthings_cloud_info_h cloud_info_h, const char *auth_provider);
+
+/**
+ * @brief Sets access token of cloud information.
+ * @since_ses 1
+ *
+ * @param[in] cloud_info_h The SmartThings cloud information handle
+ * @param[in] access_token The access token
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter
+ */
+int smartthings_cloudinfo_set_access_token(smartthings_cloud_info_h cloud_info_h, const char *access_token);
+
+/**
+ * @brief Sets refresh token of cloud information.
+ * @since_ses 1
+ *
+ * @param[in] cloud_info_h The SmartThings cloud information handle
+ * @param[in] refresh_token The refresh token
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter
+ */
+int smartthings_cloudinfo_set_refresh_token(smartthings_cloud_info_h cloud_info_h, const char *refresh_token);
+
+/**
+ * @brief Sets user ID of cloud information.
+ * @since_ses 1
+ *
+ * @param[in] cloud_info_h The SmartThings cloud information handle
+ * @param[in] user_id The user ID
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter
+ */
+int smartthings_cloudinfo_set_user_id(smartthings_cloud_info_h cloud_info_h, const char *user_id);
+
+/**
+ * @brief Sets client ID of cloud information.
+ * @since_ses 1
+ *
+ * @param[in] cloud_info_h The SmartThings cloud information handle
+ * @param[in] client_id The client ID
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter
+ */
+int smartthings_cloudinfo_set_client_id(smartthings_cloud_info_h cloud_info_h, const char *client_id);
+
+/**
+ * @brief Requests to sign up to cloud.
+ * @since_ses 1
+ * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n
+ * %http://tizen.org/privilege/appmanager.launch \n
+ * %http://tizen.org/privilege/datasharing \n
+ * %http://tizen.org/privilege/internet
+ *
+ * @param[in] handle The SmartThings handle
+ * @param[in] cloud_info_h The handle for cloud signup
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed
+ * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable
+ */
+int smartthings_sign_up_cloud(smartthings_h handle, smartthings_cloud_info_h cloud_info_h);
+
+/**
+ * @brief Sets preconfigured PIN.
+ * @since_ses 1
+ * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n
+ * %http://tizen.org/privilege/appmanager.launch \n
+ * %http://tizen.org/privilege/datasharing
+ *
+ * @param[in] handle The SmartThings handle
+ * @param[in] pin The PIN code to preconfigure
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed
+ * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable
+ */
+int smartthings_set_preconfigured_pin(smartthings_h handle, const char* pin);
+
+/**
+ * @brief Sets MOT(multiple ownership transfer) status.
+ * @since_ses 1
+ * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n
+ * %http://tizen.org/privilege/appmanager.launch \n
+ * %http://tizen.org/privilege/datasharing
+ *
+ * @param[in] handle The SmartThings handle
+ * @param[in] enable The MOT(multiple ownership transfer) status
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed
+ * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable
+ */
+int smartthings_set_mot_status(smartthings_h handle, bool enable);
+
+/**
+ * @}
+ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __SAMSUNG_EXPERIENCE_SERVICE_SMARTTHINGS_H__ */
--- /dev/null
+/*****************************************************************
+ *
+ * Copyright (c) 2018 Samsung Electronics Co., Ltd. All Rights Reserved
+ *
+ * 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 __SAMSUNG_EXPERIENCE_SERVICE_SMARTTHINGS_PAYLOAD_H__
+#define __SAMSUNG_EXPERIENCE_SERVICE_SMARTTHINGS_PAYLOAD_H__
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdbool.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @file smartthings_payload.h
+ */
+
+/**
+ * @addtogroup CAPI_SMARTTHINGS_THING_PAYLOAD_MODULE
+ * @{
+ */
+
+/**
+ * @brief The SmartThings payload handle.
+ * @since_ses 1
+ */
+typedef struct smartthings_payload_s *smartthings_payload_h;
+
+/**
+ * @brief Creates a SmartThings payload handle.
+ * @since_ses 1
+ *
+ * @remarks The @a payload must be released using smartthings_payload_destroy().
+ * @remarks If the @a payload is set to parent payload as an object or object array
+ * using smartthings_payload_set_object() or smartthings_payload_set_object_array(),
+ * the @a payload must not be released.
+
+ * @param[out] payload The SmartThings payload handle to be newly created on success
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_OUT_OF_MEMORY Out of memory
+ *
+ * @see smartthings_payload_destroy()
+ */
+int smartthings_payload_create(smartthings_payload_h *payload);
+
+/**
+ * @brief Destroys a SmartThings payload handle and releases all its resources.
+ * @since_ses 1
+ *
+ * @remarks If the @a payload has child payload, its child payload will be released as well.
+ *
+ * @param[in] payload The SmartThings payload handle
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter
+ *
+ * @see smartthings_payload_create()
+ */
+int smartthings_payload_destroy(smartthings_payload_h payload);
+
+/**
+ * @brief Sets an integer value for the attribute name.
+ * @since_ses 1
+ *
+ * @remarks The @a attr_name is key value, one of several properties of the resource type.
+ * @remarks The function replaces any existing value for the given @a attr_name.
+ *
+ * @param[in] payload The SmartThings payload handle
+ * @param[in] attr_name The attribute name
+ * @param[in] value The value to set
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter
+ */
+int smartthings_payload_set_int(smartthings_payload_h payload, const char *attr_name, int value);
+
+/**
+ * @brief Sets a boolean value for the attribute name.
+ * @since_ses 1
+ *
+ * @remarks The @a attr_name is key value, one of several properties of the resource type.
+ * @remarks The function replaces any existing value for the given @a attr_name.
+ *
+ * @param[in] payload The SmartThings payload handle
+ * @param[in] attr_name The attribute name
+ * @param[in] value The value to set
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter
+ */
+int smartthings_payload_set_bool(smartthings_payload_h payload, const char *attr_name, bool value);
+
+/**
+ * @brief Sets a double value for the attribute name.
+ * @since_ses 1
+ *
+ * @remarks The @a attr_name is key value, one of several properties of the resource type.
+ * @remarks The function replaces any existing value for the given @a attr_name.
+ *
+ * @param[in] payload The SmartThings payload handle
+ * @param[in] attr_name The attribute name
+ * @param[in] value The value to set
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter
+ */
+int smartthings_payload_set_double(smartthings_payload_h payload, const char *attr_name, double value);
+
+/**
+ * @brief Sets a string value for the attribute name.
+ * @since_ses 1
+ *
+ * @remarks The @a attr_name is key value, one of several properties of the resource type.
+ * @remarks The function replaces any existing value for the given @a attr_name.
+ *
+ * @param[in] payload The SmartThings payload handle
+ * @param[in] attr_name The attribute name
+ * @param[in] value The value to set
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter
+ */
+int smartthings_payload_set_string(smartthings_payload_h payload, const char *attr_name, const char *value);
+
+/**
+ * @brief Sets a byte string value and length for the attribute name.
+ * @since_ses 1
+ *
+ * @remarks The @a attr_name is key value, one of several properties of the resource type.
+ * @remarks The function replaces any existing value for the given @a attr_name.
+ *
+ * @param[in] payload The SmartThings payload handle
+ * @param[in] attr_name The attribute name
+ * @param[in] value The value to set
+ * @param[in] length The size of value
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_OPERATION_FAILED Operation failed
+ */
+int smartthings_payload_set_byte_string(smartthings_payload_h payload, const char *attr_name, const char *value, unsigned int length);
+
+/**
+ * @brief Sets an object value for the attribute name.
+ * @since_ses 1
+ *
+ * @remarks The @a attr_name is key value, one of several properties of the resource type.
+ * @remarks The @a value is SmartThings payload handle.
+ * @remarks The function replaces any existing value for the given @a attr_name.
+ *
+ * @param[in] payload The SmartThings payload handle
+ * @param[in] attr_name The attribute name
+ * @param[in] value The value to set
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter
+ */
+int smartthings_payload_set_object(smartthings_payload_h payload, const char *attr_name, smartthings_payload_h value);
+
+/**
+ * @brief Sets an integer array for the attribute name.
+ * @since_ses 1
+ *
+ * @remarks The @a attr_name is key value, one of several properties of the resource type.
+ * @remarks The function replaces any existing array for the given @a attr_name.
+ *
+ * @param[in] payload The SmartThings payload handle
+ * @param[in] attr_name The attribute name
+ * @param[in] array The array associated with the given attribute name
+ * @param[in] length The length of @a array
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter
+ */
+int smartthings_payload_set_int_array(smartthings_payload_h payload, const char *attr_name, const int *array, unsigned int length);
+
+/**
+ * @brief Sets a boolean array for the attribute name.
+ * @since_ses 1
+ *
+ * @remarks The @a attr_name is key value, one of several properties of the resource type.
+ * @remarks The function replaces any existing array for the given @a attr_name.
+ *
+ * @param[in] payload The SmartThings payload handle
+ * @param[in] attr_name The attribute name
+ * @param[in] array The array associated with the given attribute name
+ * @param[in] length The length of @a array
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter
+ */
+int smartthings_payload_set_bool_array(smartthings_payload_h payload, const char *attr_name, const bool *array, unsigned int length);
+
+/**
+ * @brief Sets a double array for the attribute name.
+ * @since_ses 1
+ *
+ * @remarks The @a attr_name is key value, one of several properties of the resource type.
+ * @remarks The function replaces any existing array for the given @a attr_name.
+ *
+ * @param[in] payload The SmartThings payload handle
+ * @param[in] attr_name The attribute name
+ * @param[in] array The array associated with the given attribute name
+ * @param[in] length The length of @a array
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter
+ */
+int smartthings_payload_set_double_array(smartthings_payload_h payload, const char *attr_name, const double *array, unsigned int length);
+
+/**
+ * @brief Sets a string array for the attribute name.
+ * @since_ses 1
+ *
+ * @remarks The @a attr_name is key value, one of several properties of the resource type.
+ * @remarks The function replaces any existing array for the given @a attr_name.
+ *
+ * @param[in] payload The SmartThings payload handle
+ * @param[in] attr_name The attribute name
+ * @param[in] array The array associated with the given attribute name
+ * @param[in] length The length of @a array
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter
+ */
+int smartthings_payload_set_string_array(smartthings_payload_h payload, const char *attr_name, const char **array, unsigned int length);
+
+/**
+ * @brief Sets an object array for the attribute name.
+ * @since_ses 1
+ *
+ * @remarks The @a attr_name is key value, one of several properties of the resource type.
+ * @remarks The function replaces any existing array for the given @a attr_name.
+ *
+ * @param[in] payload The SmartThings payload handle
+ * @param[in] attr_name The attribute name
+ * @param[in] array The array associated with the given attribute name
+ * @param[in] length The length of @a array
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_OUT_OF_MEMORY Out of memory
+ */
+int smartthings_payload_set_object_array(smartthings_payload_h payload, const char *attr_name, smartthings_payload_h *array, unsigned int length);
+
+/**
+ * @brief Adds a payload for child resource of collection resource.
+ * @since_ses 1
+ *
+ * @remarks The @a resource_uri is key value, one of several child resources of the collection resource.
+ * @remarks The @a value is SmartThings payload handle.
+ * @remarks The function replaces any existing payload for the given @a resource_uri.
+ *
+ * @param[in] payload The SmartThings payload handle
+ * @param[in] resource_uri The resource URI of child resource
+ * @param[in] value The payload associated with the given resource URI
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter
+ */
+int smartthings_payload_add_collection_object(smartthings_payload_h payload, const char *resource_uri, smartthings_payload_h value);
+
+/**
+ * @brief Gets an integer value for the attribute name.
+ * @since_ses 1
+ *
+ * @remarks The @a attr_name is key value, one of several properties of the resource type.
+ *
+ * @param[in] payload The SmartThings payload handle
+ * @param[in] attr_name The attribute name
+ * @param[out] value The value associated with the given attribute name
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_NO_DATA No data
+ */
+int smartthings_payload_get_int(smartthings_payload_h payload, const char *attr_name, int *value);
+
+/**
+ * @brief Gets a boolean value for the attribute name.
+ * @since_ses 1
+ *
+ * @remarks The @a attr_name is key value, one of several properties of the resource type.
+ *
+ * @param[in] payload The SmartThings payload handle
+ * @param[in] attr_name The attribute name
+ * @param[out] value The value associated with the given attribute name
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_NO_DATA No data
+ */
+int smartthings_payload_get_bool(smartthings_payload_h payload, const char *attr_name, bool *value);
+
+/**
+ * @brief Gets a double value for the attribute name.
+ * @since_ses 1
+ *
+ * @remarks The @a attr_name is key value, one of several properties of the resource type.
+ *
+ * @param[in] payload The SmartThings payload handle
+ * @param[in] attr_name The attribute name
+ * @param[out] value The value associated with the given attribute name
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_NO_DATA No data
+ */
+int smartthings_payload_get_double(smartthings_payload_h payload, const char *attr_name, double *value);
+
+/**
+ * @brief Gets a string value for the attribute name.
+ * @since_ses 1
+ *
+ * @remarks The @a attr_name is key value, one of several properties of the resource type.
+ * @remarks The @a value should be released using free().
+ *
+ * @param[in] payload The SmartThings payload handle
+ * @param[in] attr_name The attribute name
+ * @param[out] value The value associated with the given attribute name
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_NO_DATA No data
+ */
+int smartthings_payload_get_string(smartthings_payload_h payload, const char *attr_name, char **value);
+
+/**
+ * @brief Gets a byte string value and length for the attribute name.
+ * @since_ses 1
+ *
+ * @remarks The @a attr_name is key value, one of several properties of the resource type.
+ * @remarks The @a value should be released using free().
+ *
+ * @param[in] payload The SmartThings payload handle
+ * @param[in] attr_name The attribute name
+ * @param[out] value The value associated with the given attribute name
+ * @param[out] length The size of value
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_NO_DATA No data
+ */
+int smartthings_payload_get_byte_string(smartthings_payload_h payload, const char *attr_name, char **value, unsigned int *length);
+
+/**
+ * @brief Gets an object value for the attribute name.
+ * @since_ses 1
+ *
+ * @remarks The @a attr_name is key value, one of several properties of the resource type.
+ * @remarks The @a value is SmartThings payload handle.
+ * @remarks The @a value must be released using smartthings_payload_release_object().
+ *
+ * @param[in] payload The SmartThings payload handle
+ * @param[in] attr_name The attribute name
+ * @param[out] value The value associated with the given attribute name
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_NO_DATA No data
+ */
+int smartthings_payload_get_object(smartthings_payload_h payload, const char *attr_name, smartthings_payload_h *value);
+
+/**
+ * @brief Gets an integer array for the attribute name.
+ * @since_ses 1
+ *
+ * @remarks The @a attr_name is key value, one of several properties of the resource type.
+ * @remarks The @a array must be released using smartthings_payload_release_int_array().
+ *
+ * @param[in] payload The SmartThings payload handle
+ * @param[in] attr_name The attribute name
+ * @param[out] array The array associated with the given attribute name
+ * @param[out] length The length of @a array
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_NO_DATA No data
+ *
+ * @see smartthings_payload_release_int_array()
+ */
+int smartthings_payload_get_int_array(smartthings_payload_h payload, const char *attr_name, int **array, unsigned int *length);
+
+/**
+ * @brief Gets a boolean array for the attribute name.
+ * @since_ses 1
+ *
+ * @remarks The @a attr_name is key value, one of several properties of the resource type.
+ * @remarks The @a array must be released using smartthings_payload_release_bool_array().
+ *
+ * @param[in] payload The SmartThings payload handle
+ * @param[in] attr_name The attribute name
+ * @param[out] array The array associated with the given attribute name
+ * @param[out] length The length of @a array
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_NO_DATA No data
+ *
+ * @see smartthings_payload_release_bool_array()
+ */
+int smartthings_payload_get_bool_array(smartthings_payload_h payload, const char *attr_name, bool **array, unsigned int *length);
+
+/**
+ * @brief Gets a double array for the attribute name.
+ * @since_ses 1
+ *
+ * @remarks The @a attr_name is key value, one of several properties of the resource type.
+ * @remarks The @a array must be released using smartthings_payload_release_double_array().
+ *
+ * @param[in] payload The SmartThings payload handle
+ * @param[in] attr_name The attribute name
+ * @param[out] array The array associated with the given attribute name
+ * @param[out] length The length of @a array
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_NO_DATA No data
+ *
+ * @see smartthings_payload_release_double_array()
+ */
+int smartthings_payload_get_double_array(smartthings_payload_h payload, const char *attr_name, double **array, unsigned int *length);
+
+/**
+ * @brief Gets a string array for the attribute name.
+ * @since_ses 1
+ *
+ * @remarks The @a attr_name is key value, one of several properties of the resource type.
+ * @remarks The @a array must be released using smartthings_payload_release_string_array().
+ *
+ * @param[in] payload The SmartThings payload handle
+ * @param[in] attr_name The attribute name
+ * @param[out] array The array associated with the given attribute name
+ * @param[out] length The length of @a array
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_NO_DATA No data
+ *
+ * @see smartthings_payload_release_string_array()
+ */
+int smartthings_payload_get_string_array(smartthings_payload_h payload, const char *attr_name, char ***array, unsigned int *length);
+
+/**
+ * @brief Gets an object array for the attribute name.
+ * @since_ses 1
+ *
+ * @remarks The @a attr_name is key value, one of several properties of the resource type.
+ * @remarks The @a array is a list of SmartThings payload handle.
+ * @remarks The @a array must be released using smartthings_payload_release_object_array().
+ *
+ * @param[in] payload The SmartThings payload handle
+ * @param[in] attr_name The attribute name
+ * @param[out] array The array associated with the given attribute name
+ * @param[out] length The length of @a array
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_NO_DATA No data
+ *
+ * @see smartthings_payload_release_object_array()
+ */
+int smartthings_payload_get_object_array(smartthings_payload_h payload, const char *attr_name, smartthings_payload_h **array, unsigned int *length);
+
+/**
+ * @brief Gets a payload for child resource of collection resource.
+ * @since_ses 1
+ *
+ * @remarks The @a resource_uri is key value, one of several child resources of the collection resource.
+ * @remarks The @a value is SmartThings payload handle.
+ * @remarks The @a value must be released using smartthings_payload_release_object().
+ *
+ * @param[in] payload The SmartThings payload handle
+ * @param[in] resource_uri The resource URI of child resource
+ * @param[out] value The payload associated with the given resource URI
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_NO_DATA No data
+ */
+int smartthings_payload_get_collection_object(smartthings_payload_h payload, const char *resource_uri, smartthings_payload_h *value);
+
+/**
+ * @brief Releases an integer array of the SmartThings payload.
+ * @since_ses 1
+ *
+ * @param[in] array The array to release
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter
+ *
+ * @see smartthings_payload_get_int_array()
+ */
+int smartthings_payload_release_int_array(int *array);
+
+/**
+ * @brief Releases a boolean array of the SmartThings payload.
+ * @since_ses 1
+ *
+ * @param[in] array The array to release
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter
+ *
+ * @see smartthings_payload_get_bool_array()
+ */
+int smartthings_payload_release_bool_array(bool *array);
+
+/**
+ * @brief Releases a double array of the SmartThings payload.
+ * @since_ses 1
+ *
+ * @param[in] array The array to release
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter
+ *
+ * @see smartthings_payload_get_double_array()
+ */
+int smartthings_payload_release_double_array(double *array);
+
+/**
+ * @brief Releases a string array of the SmartThings payload.
+ * @since_ses 1
+ *
+ * @param[in] array The array to release
+ * @param[in] length The length of @a array
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter
+ *
+ * @see smartthings_payload_get_string_array()
+ */
+int smartthings_payload_release_string_array(char **array, unsigned int length);
+
+/**
+ * @brief Releases an object array of the SmartThings payload.
+ * @since_ses 1
+ *
+ * @param[in] array The array to release
+ * @param[in] length The length of @a array
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter
+ *
+ * @see smartthings_payload_get_object_array()
+ */
+int smartthings_payload_release_object_array(smartthings_payload_h *array, unsigned int length);
+
+/**
+ * @brief Releases a SmartThings payload.
+ * @since_ses 1
+ *
+ * @remarks The function is different with smartthings_payload_destroy().
+ * @remarks The function releases only payload value that is obtained by smartthings_payload_get_object().
+ *
+ * @param[in] payload The payload to release
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter
+ *
+ * @see smartthings_payload_get_object()
+ */
+int smartthings_payload_release_object(smartthings_payload_h payload);
+
+/**
+ * @}
+ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __SAMSUNG_EXPERIENCE_SERVICE_SMARTTHINGS_PAYLOAD_H__ */
--- /dev/null
+/*****************************************************************
+ *
+ * Copyright (c) 2018 Samsung Electronics Co., Ltd. All Rights Reserved
+ *
+ * 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 __SAMSUNG_EXPERIENCE_SERVICE_SMARTTHINGS_RESOURCE_H__
+#define __SAMSUNG_EXPERIENCE_SERVICE_SMARTTHINGS_RESOURCE_H__
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdbool.h>
+#include <tizen.h>
+#include <smartthings_payload.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @file smartthings_resource.h
+ */
+
+/**
+ * @addtogroup CAPI_SMARTTHINGS_THING_RESOURCE_MODULE
+ * @{
+ */
+
+/**
+ * @brief Enumeration for the SmartThings resource error.
+ * @since_ses 1
+ */
+typedef enum {
+ SMARTTHINGS_RESOURCE_ERROR_NONE = TIZEN_ERROR_NONE, /**< Successful */
+ SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER = TIZEN_ERROR_INVALID_PARAMETER, /**< Invalid parameter */
+ SMARTTHINGS_RESOURCE_ERROR_OUT_OF_MEMORY = TIZEN_ERROR_OUT_OF_MEMORY, /**< Out of memory */
+ SMARTTHINGS_RESOURCE_ERROR_PERMISSION_DENIED = TIZEN_ERROR_PERMISSION_DENIED, /**< Permission denied */
+ SMARTTHINGS_RESOURCE_ERROR_NO_DATA = TIZEN_ERROR_NO_DATA, /**< No data */
+ SMARTTHINGS_RESOURCE_ERROR_NOT_SUPPORTED = TIZEN_ERROR_NOT_SUPPORTED, /**< Not supported */
+ SMARTTHINGS_RESOURCE_ERROR_OPERATION_FAILED = TIZEN_ERROR_UNKNOWN - 1, /**< Operation failed */
+ SMARTTHINGS_RESOURCE_ERROR_SERVICE_UNAVAILABLE = TIZEN_ERROR_UNKNOWN -2 /**< Service unavailable */
+} smartthings_resource_error_e;
+
+/**
+ * @brief Enumeration for the request type of resource and collection resource.
+ * @since_ses 1
+ */
+typedef enum {
+ SMARTTHINGS_RESOURCE_REQUEST_GET = 0, /**< Get request type */
+ SMARTTHINGS_RESOURCE_REQUEST_SET = 1, /**< Set request type */
+ SMARTTHINGS_RESOURCE_REQUEST_COLLECTION_GET = 2, /**< Get request type for collection */
+ SMARTTHINGS_RESOURCE_REQUEST_COLLECTION_SET = 3 /**< Set request type for collection */
+} smartthings_resource_req_type_e;
+
+/**
+ * @brief Enumeration for RPC connection status.
+ * @since_ses 1
+ */
+typedef enum {
+ SMARTTHINGS_RESOURCE_CONNECTION_STATUS_CONNECTED = 0, /**< Connection is connected */
+ SMARTTHINGS_RESOURCE_CONNECTION_STATUS_DISCONNECTED, /**< Connection is disconnected */
+ SMARTTHINGS_RESOURCE_CONNECTION_STATUS_REJECTED, /**< Connection is rejected */
+} smartthings_resource_connection_status_e;
+
+/**
+ * @brief The SmartThings resource handle.
+ * @since_ses 1
+ */
+typedef struct smartthings_resource_s *smartthings_resource_h;
+
+/**
+ * @brief Callback for status of connection to SmartThings Thing agent.
+ * @since_ses 1
+ *
+ * @remarks The @a handle should not be released.
+ * @remarks The @a handle is the same object for which the callback was set/added.
+ * @remarks The @a handle will be released when smartthings_deinitialize() is called.
+ * @remarks When callback is called, user can see connection status as #smartthings_connection_status_e enumeration value.
+ *
+ * @param[in] result The result of connection operation
+ * @param[in] handle The SmartThings handle
+ * @param[in] status The status of connection
+ * @param[in] user_data The user data passed from the callback registration function
+ *
+ * @see smartthings_resource_initialize()
+ */
+typedef void (*smartthings_resource_connection_status_cb)(smartthings_resource_h handle, smartthings_resource_connection_status_e status, void *user_data);
+
+/**
+ * @brief Callback for handling request(GET/SET) messages.
+ * @since_ses 1
+ *
+ * @remarks The @a payload is NULL when @a req_type is #SMARTTHINGS_RESOURCE_REQUEST_GET.
+ * @remarks The @a payload can be used only in the callback. To use outside, make a copy.
+ * @remarks The @a st_h should not be released.
+ * @remarks The @a st_h is the same object for which the callback was set/added.
+ * @remarks The @a st_h will be released when smartthings_resource_deinitialize() is called.
+ * @remarks The @a payload should not be released.
+ * @remarks The @a uri can be used only in the callback. To use outside, make a copy.
+ *
+ * @param[in] st_h The SmartThings resource handle
+ * @param[in] req_id The request ID of request message
+ * @param[in] uri The resource URI
+ * @param[in] req_type The request type for request message
+ * @param[in] payload The payload for SET request message
+ * @param[in] user_data The user data passed from the callback registration function
+ *
+ * @see smartthings_resource_set_request_cb()
+ * @see smartthings_resource_unset_request_cb()
+ */
+typedef void (*smartthings_resource_request_cb)(smartthings_resource_h st_h, int req_id, const char *uri,
+ smartthings_resource_req_type_e req_type,
+ smartthings_payload_h payload, void *user_data);
+
+/**
+ * @brief Callback for status of resource registration to cloud.
+ * @since_ses 1
+ *
+ * @remarks This callback will be called when status of resource registration is changed.
+ * @remarks The @a st_h should not be released.
+ * @remarks The @a st_h is the same object for which the callback was set/added.
+ * @remarks The @a st_h will be released when smartthings_resource_deinitialize() is called.
+ * @remarks The @a is_registered will be true when resources are registered to cloud.
+ *
+ * @param[in] st_h The SmartThings resource handle
+ * @param[in] is_registered The status of resource registration to cloud
+ * @param[in] user_data The user data passed from the callback registration function
+ *
+ * @see smartthings_resource_set_cloud_registration_status_cb()
+ * @see smartthings_resource_unset_cloud_registration_status_cb()
+ */
+typedef void (*smartthings_resource_cloud_registration_status_cb)(smartthings_resource_h st_h, bool is_registered, void *user_data);
+
+
+/**
+ * @brief Initializes a resource handle and connects to agent.
+ * @since_ses 1
+ * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.resource \n
+ * %http://tizen.org/privilege/appmanager.launch \n
+ * %http://tizen.org/privilege/datasharing
+ *
+ * @remarks The @a st_h must be released using smartthings_resource_deinitialize().
+ * @remarks Ths function returns #SMARTTHINGS_RESOURCE_ERROR_PERMISSION_DENIED\n
+ * if the application has no app-defined privilege for 'http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.resource'.
+ *
+ * @param[out] st_h The SmartThings resource handle to be newly created on success
+ * @param[in] connection_status_cb The connection status callback to register
+ * @param[in] user_data The user data to be passed to the callback function
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_OPERATION_FAILED Operation failed
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_NOT_SUPPORTED Not supported
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_SERVICE_UNAVAILABLE Service unavailable
+ *
+ * @see smartthings_resource_deinitialize()
+ */
+int smartthings_resource_initialize(smartthings_resource_h *st_h,
+ smartthings_resource_connection_status_cb connection_status_cb,
+ void *user_data);
+
+/**
+ * @brief Deinitializes a resource handle and disconnects from the agent.
+ * @since_ses 1
+ *
+ * @param[in] st_h The SmartThings resource handle
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter
+ *
+ * @see smartthings_resource_initialize()
+ */
+int smartthings_resource_deinitialize(smartthings_resource_h st_h);
+
+/**
+ * @brief Sets resource request callback.
+ * @since_ses 1
+ * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.resource \n
+ * %http://tizen.org/privilege/appmanager.launch \n
+ * %http://tizen.org/privilege/datasharing
+ *
+ * @param[in] st_h The SmartThings resource handle
+ * @param[in] req_cb The request callback to register
+ * @param[in] user_data The user data to be passed to the callback function
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_OPERATION_FAILED Operation failed
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_SERVICE_UNAVAILABLE Service unavailable
+ *
+ * @see smartthings_resource_unset_request_cb()
+ */
+int smartthings_resource_set_request_cb(smartthings_resource_h st_h,
+ smartthings_resource_request_cb req_cb,
+ void *user_data);
+
+/**
+ * @brief Unsets resource request callback.
+ * @since_ses 1
+ * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.resource \n
+ * %http://tizen.org/privilege/appmanager.launch \n
+ * %http://tizen.org/privilege/datasharing
+ *
+ * @param[in] st_h The SmartThings resource handle
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_OPERATION_FAILED Operation failed
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_SERVICE_UNAVAILABLE Service unavailable
+ *
+ * @see smartthings_resource_set_request_cb()
+ */
+int smartthings_resource_unset_request_cb(smartthings_resource_h st_h);
+
+/**
+ * @brief Sends response for resource request message.
+ * @since_ses 1
+ * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.resource \n
+ * %http://tizen.org/privilege/appmanager.launch \n
+ * %http://tizen.org/privilege/datasharing \n
+ * %http://tizen.org/privilege/internet
+ *
+ * @param[in] st_h The SmartThings resource handle
+ * @param[in] req_id The request ID of request message
+ * @param[in] uri The resource URI
+ * @param[in] payload The payload of response message
+ * @param[in] result The result of response
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_OPERATION_FAILED Operation failed
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_SERVICE_UNAVAILABLE Service unavailable
+ */
+int smartthings_resource_send_response(smartthings_resource_h st_h, int req_id, const char *uri, smartthings_payload_h payload, bool result);
+
+/**
+ * @brief Notifies resource change.
+ * @since_ses 1
+ * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.resource \n
+ * %http://tizen.org/privilege/appmanager.launch \n
+ * %http://tizen.org/privilege/datasharing \n
+ * %http://tizen.org/privilege/internet
+ *
+ * @param[in] st_h The SmartThings resource handle
+ * @param[in] uri The resource URI
+ * @param[in] payload The payload of response message
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_OPERATION_FAILED Operation failed
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_SERVICE_UNAVAILABLE Service unavailable
+ */
+int smartthings_resource_notify(smartthings_resource_h st_h, const char *uri, smartthings_payload_h payload);
+
+/**
+ * @brief Gets resource URIs.
+ * @since_ses 1
+ * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.resource \n
+ * %http://tizen.org/privilege/appmanager.launch \n
+ * %http://tizen.org/privilege/datasharing
+ *
+ * @remarks The @a uris should be released using free().
+ *
+ * @param[in] st_h The SmartThings resource handle
+ * @param[out] count The resource count
+ * @param[out] uris The resource URI list
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_OPERATION_FAILED Operation failed
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_SERVICE_UNAVAILABLE Service unavailable
+ */
+int smartthings_resource_get_uris(smartthings_resource_h st_h, int *count, char ***uris);
+
+/**
+ * @brief Sets cloud registration callback.
+ * @since_ses 1
+ * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.resource \n
+ * %http://tizen.org/privilege/appmanager.launch \n
+ * %http://tizen.org/privilege/datasharing
+ *
+ * @param[in] st_h The SmartThings resource handle
+ * @param[in] reg_cb The callback to register
+ * @param[in] user_data The user data to be passed to the callback function
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_OPERATION_FAILED Operation failed
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_SERVICE_UNAVAILABLE Service unavailable
+ *
+ * @see smartthings_resource_unset_cloud_registration_status_cb()
+ */
+int smartthings_resource_set_cloud_registration_status_cb(smartthings_resource_h st_h,
+ smartthings_resource_cloud_registration_status_cb reg_cb,
+ void *user_data);
+
+/**
+ * @brief Unsets cloud registration callback.
+ * @since_ses 1
+ * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.resource \n
+ * %http://tizen.org/privilege/appmanager.launch \n
+ * %http://tizen.org/privilege/datasharing
+ *
+ * @param[in] st_h The SmartThings resource handle
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_OPERATION_FAILED Operation failed
+ * @retval #SMARTTHINGS_RESOURCE_ERROR_SERVICE_UNAVAILABLE Service unavailable
+ *
+ * @see smartthings_resource_set_cloud_registration_status_cb()
+ */
+int smartthings_resource_unset_cloud_registration_status_cb(smartthings_resource_h st_h);
+
+
+/**
+ * @}
+ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __SAMSUNG_EXPERIENCE_SERVICE_SMARTTHINGS_RESOURCE_H__ */
+++ /dev/null
-/*
- * Copyright (c) 2018 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 __ST_THINGS_H__
-#define __ST_THINGS_H__
-
-#include <stdint.h>
-#include <stdbool.h>
-
-#ifdef __ST_THINGS_RTOS__
-#include <st_things/st_things_types.h>
-#else
-#include "st_things_types.h"
-#endif // __ST_THINGS_RTOS__
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-/**
- * @brief Set prefix paths (ReadOnly and ReadWrite) for configuration files for the device.
- * This is Optional API, and should be used if relative location is used in
- * filePath variable in JSON Configuration file.
- * @param[in] ro_path Prefix Path for Read Only directory location.
- * @param[in] rw_path Prefix Path for Read Write directory location.
- * @return @c 0 on success, otherwise a negative error value
- * @retval #ST_THINGS_ERROR_NONE Successful
- * @retval #ST_THINGS_ERROR_INVALID_PARAMETER Invalid parameter(both ro_path and rw_path are NULL).
- * @retval #ST_THINGS_ERROR_OPERATION_FAILED Operation failed
- * @retval #ST_THINGS_ERROR_STACK_ALREADY_INITIALIZED Stack already initialized.
- * To set Prefix Paths, stack should be deinitilized first by calling st_things_deinitialize().
- * @retval #ST_THINGS_ERROR_STACK_RUNNING Stack is currently running.
- * To set Prefix Paths, stack should be stopped first by calling st_things_stop()
- * and then deinitialized by calling st_things_deinitialize().
- */
-int st_things_set_configuration_prefix_path(const char* ro_path, const char* rw_path);
-
-/**
- * @brief Initializes things stack and returns whether easy-setup is completed or not.
- * Easy-setup enable users to acquire the ownership of things and to connect the things with the cloud.
- * After performing easy-setup, users can access things from anywhere through the cloud.
- * In things stack, easy-setup is a primary and the first operation to be performed on the thing.
- * Application running on the thing can know whether easy-setup is done already or not.
- * If easy-setup is done, app can start the things stack by calling st_things_start().
- * If easy-setup is not done, app can either wait for the user interaction before starting the things stack or
- * start the things stack directly without waiting for any events(This case is for those things which doesn't
- * support input capability and for all other unknown cases).
- * To use a new json file after initialization, stack should be deinitialized
- * and stopped(if its started already).
- * @param[in] json_path Path to Json file which defines a thing. Definition includes the device information,
- * resources and their properties, configuration info for connectivity and easy-setup, etc.
- * @param[out] easysetup_complete Indicates whether easysetup is completed already or not.
- * @return @c 0 on success, otherwise a negative error value
- * @retval #ST_THINGS_ERROR_NONE Successful
- * @retval #ST_THINGS_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #ST_THINGS_ERROR_OPERATION_FAILED Operation failed
- * @retval #ST_THINGS_ERROR_STACK_ALREADY_INITIALIZED Stack already initialized.
- * To initialize again, stack should be deinitilized first by calling st_things_deinitialize().
- * @retval #ST_THINGS_ERROR_STACK_RUNNING Stack is currently running.
- * To initialize again, stack should be stopped first by calling st_things_stop()
- * and then deinitialized by calling st_things_deinitialize().
- */
-int st_things_initialize(const char *json_path, bool *easysetup_complete);
-
-/**
- * @brief Deinitializes things stack.
- * Stack should have been initialized before calling this API.
- * @return @c 0 on success, otherwise a negative error value
- * @retval #ST_THINGS_ERROR_NONE Successful
- * @retval #ST_THINGS_ERROR_OPERATION_FAILED Operation failed
- * @retval #ST_THINGS_ERROR_STACK_NOT_INITIALIZED Stack is not initialized.
- * Initialize the stack by calling st_things_initialize().
- * @retval #ST_THINGS_ERROR_STACK_RUNNING Stack is currently running.
- * Before deinitialize, stack needs to be stopped by calling st_things_stop().
- */
-int st_things_deinitialize(void);
-
-/**
- * @brief Callback for handling GET request.
- * @param[in] req_msg GET request message.
- * @param[out] resp_rep Representation that will be set to payload of response.
- * @return @c true in case of success, otherwise @c false
- */
-typedef bool (*st_things_get_request_cb)(st_things_get_request_message_s *req_msg, st_things_representation_s *resp_rep);
-
-/**
- * @brief Callback for handling SET(POST) request.
- * @param[in] req_msg SET request message.
- * @param[out] resp_rep Representation that will be set to payload of response.
- * @return @c true in case of success, otherwise @c false
- */
-typedef bool (*st_things_set_request_cb)(st_things_set_request_message_s *req_msg, st_things_representation_s *resp_rep);
-
-/**
- * @brief Callback registration function for handling request messages.
- * @details The callbacks ensure that a request message will be carried with one of the resource uris from json file of st_things_start().
- * @remarks Only one callback function can be set with this API.\n
- * If multiple callbacks are set, the last one is registered only.\n
- * And the callbacks are called in the internal thread, which is not detached,\n
- * so application should return it to get the next callbacks.
- * @param[in] get_cb Reference of the callback function to handle GET request.
- * @param[in] set_cb Reference of the callback function to handle SET(POST) request.
- * @return @c 0 on success, otherwise a negative error value
- * @retval #ST_THINGS_ERROR_NONE Successful
- * @retval #ST_THINGS_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #ST_THINGS_ERROR_OPERATION_FAILED Operation failed
- */
-int st_things_register_request_cb(st_things_get_request_cb get_cb, st_things_set_request_cb set_cb);
-
-/**
- * @brief Starts things stack.
- * Parses the thing definition(whose path is passed to st_things_initialize(), configures the thing,
- * creates the resources and prepares it for easy-setup.
- * If easy-setup is not done yet, onboarding will be started using either SoftAP or BLE connection.
- * Onboarding creates an ad-hoc network between the thing and the client for performing easy-setup.
- * If easy-setup is already done, thing will be connected with the cloud.
- * Application can know whether easy-setup is done or not through st_things_initialize API.
- * Stack should have been initialized before calling this API.
- * @return @c 0 on success, otherwise a negative error value
- * @retval #ST_THINGS_ERROR_NONE Successful.
- * It is also used for the case that the stack is started already.
- * @retval #ST_THINGS_ERROR_OPERATION_FAILED Operation failed
- * @retval #ST_THINGS_ERROR_STACK_NOT_INITIALIZED Stack is not initialized.
- * Initialize the stack by calling st_things_initialize().
- */
-int st_things_start(void);
-
-/**
- * @brief Stops things stack.
- * Removes all the data being used internally and releases all the memory allocated for the stack.
- * Stack should have been initialized and started before calling this API.
- * @return @c 0 on success, otherwise a negative error value
- * @retval #ST_THINGS_ERROR_NONE Successful
- * @retval #ST_THINGS_ERROR_OPERATION_FAILED Operation failed
- * @retval #ST_THINGS_ERROR_STACK_NOT_INITIALIZED Stack is not initialized.
- * Initialize the stack by calling st_things_initialize().
- * @retval #ST_THINGS_ERROR_STACK_NOT_STARTED Stack is not started.
- * Start the stack by calling st_things_start().
- */
-int st_things_stop(void);
-
-/**
- * @brief Callback for getting user's opinion regarding device reset.
- * @return @c true to confirm, otherwise @c to deny
- */
-typedef bool (*st_things_reset_confirm_cb)(void);
-
-/**
- * @brief Callback for carrying the result of reset.
- * @param[in] is_success Result of Stack-reset. (true : success, false : failure)
- */
-typedef void (*st_things_reset_result_cb)(bool is_success);
-
-/**
- * @brief Callback registration function for Reset-Confirmation and Reset-Result functions.
- * @remarks Only one callback function can be set with this API.\n
- * If multiple callbacks are set, the last one is registered only.\n
- And the callbacks are called in the internal thread, which is not detached,\n
- * so application should return it to get the next callbacks.
- * @param[in] confirm_cb Callback function that will be called to get the user's input when reset is triggered.
- * @param[in] result_cb Callback function that will be called after the reset process is done.
- * This parameter can be NULL if notification for result of reset is not needed.
- * @return @c 0 on success, otherwise a negative error value
- * @retval #ST_THINGS_ERROR_NONE Successful
- * @retval #ST_THINGS_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #ST_THINGS_ERROR_OPERATION_FAILED Operation failed
- */
-int st_things_register_reset_cb(st_things_reset_confirm_cb confirm_cb, st_things_reset_result_cb result_cb);
-
-/**
- * @brief Reset all the data related to security and cloud being used in the stack.
- * Stack should have been initialized and started before calling this API.
- * @return @c 0 on success, otherwise a negative error value
- * @retval #ST_THINGS_ERROR_NONE Successful
- * @retval #ST_THINGS_ERROR_OPERATION_FAILED Operation failed
- * @retval #ST_THINGS_ERROR_STACK_NOT_INITIALIZED Stack is not intialized.
- * Initialize the stack by calling st_things_initialize().
- * @retval #ST_THINGS_ERROR_STACK_NOT_STARTED Stack is not started.
- * Start the stack by calling st_things_start().
- */
-int st_things_reset(void);
-
-/**
- * @brief Callback for carrying the randomly generated PIN info.
- * @details Device should show the PIN on display.
- * @param[in] pin_data PIN data in string format.
- * @param[in] pin_size Length of the PIN String.
- */
-typedef void (*st_things_pin_generated_cb)(const char *pin_data, const size_t pin_size);
-
-/**
- * @brief Callback for informing the application to close the PIN display.
- */
-typedef void (*st_things_pin_display_close_cb)(void);
-
-/**
- * @brief Callback registration function for getting randomly generated PIN for the PIN-Based Ownership Transfer Request.
- * @remarks Only one callback function can be set with this API.\n
- * If multiple callbacks are set, the last one is registered only.\n
- * And the callbacks are called in the internal thread, which is not detached,\n
- * so application should return it to get the next callbacks.
- * @param[in] generated_cb Callback function that will be called when device receives a Ownership Transfer request from client.
- * @param[in] close_cb Callback function that will be called when Ownership Transfer is done so device can stop showing PIN on display.
- * This parameter can be NULL if stop triggering is not needed.
- * @return @c 0 on success, otherwise a negative error value
- * @retval #ST_THINGS_ERROR_NONE Successful
- * @retval #ST_THINGS_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #ST_THINGS_ERROR_OPERATION_FAILED Operation failed
- */
-int st_things_register_pin_handling_cb(st_things_pin_generated_cb generated_cb, st_things_pin_display_close_cb close_cb);
-
-/**
- * @brief Callback for getting user's input regarding mutual verification.
- * @return @c true true in cse of confirmed, otherwise @c false
- */
-typedef bool (*st_things_user_confirm_cb)(void);
-
-/**
- * @brief Callback registration function for getting user confirmation for MUTUAL VERIFICATION BASED JUST WORK Ownership transfer.
- * @remarks Only one callback function can be set with this API.\n
- * If multiple callbacks are set, the last one is registered only.\n
- * And the callbacks are called in the internal thread, which is not detached,\n
- * so application should return it to get the next callbacks.
- * @param[in] confirm_cb Callback function that will be called when device receives a confirm request from client.
- * @return @c 0 on success, otherwise a negative error value
- * @retval #ST_THINGS_ERROR_NONE Successful
- * @retval #ST_THINGS_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #ST_THINGS_ERROR_OPERATION_FAILED Operation failed
- */
-int st_things_register_user_confirm_cb(st_things_user_confirm_cb confirm_cb);
-
-/**
- * @brief Callback for getting the current state of ST Things.
- * @param[in] things_status ST Things State
- */
-typedef void (*st_things_status_change_cb)(st_things_status_e things_status);
-
-/**
- * @brief Callback registration function for getting notified when ST Things state changes.
- * @remarks Only one callback function can be set with this API.\n
- * If multiple callbacks are set, the last one is registered only.\n
- * And the callbacks are called in the internal thread, which is not detached,\n
- * so application should return it to get the next callbacks.
- * @param[in] status_cb Refernce of the callback function to get ST Things status
- * @return @c 0 on success, otherwise a negative error value
- * @retval #ST_THINGS_ERROR_NONE Successful
- * @retval #ST_THINGS_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #ST_THINGS_ERROR_OPERATION_FAILED Operation failed
- */
-int st_things_register_things_status_change_cb(st_things_status_change_cb status_cb);
-
-/**
- * @brief Notify the observers of a specific resource.
- * Stack should have been initialized and started before calling this API.
- * @param[in] resource_uri Resource URI of the resource which will be notified to observers.
- * @return @c 0 on success, otherwise a negative error value
- * @retval #ST_THINGS_ERROR_NONE Successful
- * @retval #ST_THINGS_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #ST_THINGS_ERROR_OPERATION_FAILED Operation failed
- * @retval #ST_THINGS_ERROR_STACK_NOT_INITIALIZED Stack is not intialized.
- * Initialize the stack by calling st_things_initialize().
- * @retval #ST_THINGS_ERROR_STACK_NOT_STARTED Stack is not started.
- * Start the stack by calling st_things_start().
- */
-int st_things_notify_observers(const char *resource_uri);
-
-/**
- * @brief Create an instance of representation.
- * @remarks To destroy an instance, st_things_destroy_representation_inst() should be used.
- * @return a pointer of the created representation, otherwise a null pointer if the memory is insufficient.
- */
-st_things_representation_s *st_things_create_representation_inst(void);
-
-/**
- * @brief Destroy an instance of representation.
- * @param[in] rep Representation that will be destroyed.
- */
-void st_things_destroy_representation_inst(st_things_representation_s *rep);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* __ST_THINGS_H__ */
+++ /dev/null
-/*
- * Copyright (c) 2018 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 __ST_THINGS_TYPES_H__
-#define __ST_THINGS_TYPES_H__
-
-#include <stdint.h>
-#include <stdlib.h>
-#include <stdbool.h>
-
-/**
- * @brief Enumeration for ST Things error code.
- */
-typedef enum {
- ST_THINGS_ERROR_NONE = 0, /**< Successful */
- ST_THINGS_ERROR_INVALID_PARAMETER = -1, /**< Invalid parameter (If parameter is null or empty)*/
- ST_THINGS_ERROR_OPERATION_FAILED = -2, /**< Operation Failed */
- ST_THINGS_ERROR_STACK_NOT_INITIALIZED = -3, /**< Stack is not yet initialized*/
- ST_THINGS_ERROR_STACK_ALREADY_INITIALIZED = -4, /**< Stack is already initialized*/
- ST_THINGS_ERROR_STACK_NOT_STARTED = -5, /**< Stack is not yet started*/
- ST_THINGS_ERROR_STACK_RUNNING = -6, /**< Stack is currently running*/
-} st_things_error_e;
-
-/**
- * @brief Enumeration for ST Things status.
- */
-typedef enum {
- ST_THINGS_STATUS_INIT = 0, /**< Initial state of ST Things */
- ST_THINGS_STATUS_ES_STARTED, /**< Easy-setup is started */
- ST_THINGS_STATUS_ES_DONE, /**< Easy-setup is done */
- ST_THINGS_STATUS_ES_FAILED_ON_OWNERSHIP_TRANSFER, /**< Easy-setup failed due to Ownership-Transfer failure */
- ST_THINGS_STATUS_CONNECTING_TO_AP, /**< Connecting to target Wi-Fi access point */
- ST_THINGS_STATUS_CONNECTED_TO_AP, /**< Connected to target Wi-Fi access point */
- ST_THINGS_STATUS_CONNECTING_TO_AP_FAILED, /**< Failed to connect to target Wi-Fi access point */
- ST_THINGS_STATUS_REGISTERING_TO_CLOUD, /**< Trying to Sign-up/Sign-in/Publish-Resource(s) to Cloud */
- ST_THINGS_STATUS_REGISTERED_TO_CLOUD, /**< Publish resource(s) to cloud is complete. Now the Thing is ready to be controlled via Cloud */
- ST_THINGS_STATUS_REGISTERING_FAILED_ON_SIGN_IN, /**< Failed to sign-in to Cloud */
- ST_THINGS_STATUS_REGISTERING_FAILED_ON_PUB_RES /**< Failed to publish resources to Cloud */
-} st_things_status_e;
-
-/**
- * @brief Structure for Representation.
- */
-typedef struct _st_things_representation
-{
- void* payload; /**< Payload of representation */
-
- /**
- * @brief API for getting the value of string type property with a key.
- * @remarks This API will return deep-copied string value as out parameter, so application must free it after use.
- * @param[in] rep Instance of Representation.
- * @param[in] key Property Name which represents the value.
- * @param[out] value String value
- * @return @c true if value exist, otherwise @c false
- */
- bool (*get_str_value) (struct _st_things_representation* rep, const char* key, char** value);
-
- /**
- * @brief API for getting the value of boolean type property with a key.
- * @param[in] rep Instance of Representation.
- * @param[in] key Property Name which represents the value.
- * @param[out] value Bool value
- * @return @c true if value exist, otherwise @c false
- */
- bool (*get_bool_value) (struct _st_things_representation* rep, const char* key, bool* value);
-
- /**
- * @brief API for getting the value of integer type property with a key.
- * @param[in] rep Instance of Representation.
- * @param[in] key Property Name which represents the value.
- * @param[out] value Integer value
- * @return @c true if value exist, otherwise @c false
- */
- bool (*get_int_value) (struct _st_things_representation* rep, const char* key, int64_t* value);
-
- /**
- * @brief API for getting the value of double type property with a key.
- * @param[in] rep Instance of Representation.
- * @param[in] key Property Name which represents the value.
- * @param[out] value Double value
- * @return @c true if value exist, otherwise @c false
- */
- bool (*get_double_value) (struct _st_things_representation* rep, const char* key, double* value);
-
- /**
- * @brief API for getting the value of byte array type property with a key.
- * @remarks This API will return deep-copied byte value as out parameter, so application must free it after use.
- * @param[in] rep Instance of Representation.
- * @param[in] key Property Name which represents the value.
- * @param[out] value Byte value
- * @param[out] size Size of Byte value
- * @return @c true if value exist, otherwise @c false
- */
- bool (*get_byte_value) (struct _st_things_representation* rep, const char* key, uint8_t** value, size_t* size);
-
- /**
- * @brief API for getting the value of object type property with a key.
- * @remarks This API will return deep-copied object value as out parameter, so application must free it after use.\n
- * To free an object, st_things_destroy_representation_inst() in st_things.h should be used.
- * @param[in] rep Instance of Representation.
- * @param[in] key Property Name which represents the value.
- * @param[out] value Object value
- * @return @c true if value exist, otherwise @c false
- */
- bool (*get_object_value) (struct _st_things_representation* rep, const char* key, struct _st_things_representation** value);
-
- /**
- * @brief API for setting the value of string type property with a key.
- * @remarks This API will deep-copy the string value inside, so application still has an ownership of memory for the string value.
- * @param[in] rep Instance of Representation.
- * @param[in] key Property Name which will represent the value.
- * @param[in] value String value.
- * @return @c true if setting value is successful, otherwise @c false
- */
- bool (*set_str_value) (struct _st_things_representation* rep, const char* key, const char* value);
-
- /**
- * @brief API for setting the value of boolean type property with a key.
- * @param[in] rep Instance of Representation.
- * @param[in] key Property Name which will represent the value.
- * @param[in] value Bool value.
- * @return @c true if setting value is successful, otherwise @c false
- */
- bool (*set_bool_value) (struct _st_things_representation* rep, const char* key, bool value);
-
- /**
- * @brief API for setting the value of integer type property with a key.
- * @param[in] rep Instance of Representation.
- * @param[in] key Property Name which will represent the value.
- * @param[in] value Integer value.
- * @return @c true if setting value is successful, otherwise @c false
- */
- bool (*set_int_value) (struct _st_things_representation* rep, const char* key, int64_t value);
-
- /**
- * @brief API for setting the value of double type property with a key.
- * @param[in] rep Instance of Representation.
- * @param[in] key Property Name which will represent the value.
- * @param[in] value Double value.
- * @return @c true if setting value is successful, otherwise @c false
- */
- bool (*set_double_value) (struct _st_things_representation* rep, const char* key, double value);
-
- /**
- * @brief API for setting the value of byte array type property with a key.
- * @remarks This API will deep-copy the byte value inside, so application still has an ownership of memory for the byte value.
- * @param[in] rep Instance of Representation.
- * @param[in] key Property Name which will represent the value.
- * @param[in] value Byte value.
- * @param[in] size Size of Byte value.
- * @return @c true if setting value is successful, otherwise @c false
- */
- bool (*set_byte_value) (struct _st_things_representation* rep, const char* key, const uint8_t* value, size_t size);
-
- /**
- * @brief API for setting the value of object type property with a key.
- * @remarks This API will deep-copy the object value inside, so application still has an ownership of memory for the object value.
- * @param[in] rep Instance of Representation.
- * @param[in] key Property Name which will represent the value.
- * @param[in] value Object value.
- * @return @c true if value exist, otherwise @c false
- */
- bool (*set_object_value) (struct _st_things_representation* rep, const char* key, const struct _st_things_representation* value);
-
- /**
- * @brief API for getting the value of string array type property with a key.
- * @remarks This API will return deep-copied array value as out parameter, so application must free it after use.
- * @param[in] rep Instance of Representation.
- * @param[in] key Property Name which will represent the array type of value.
- * @param[out] array Reference of the string array to where the value will be copied.
- * @param[out] length Total number of elements in the array.
- * @return @c true if value exist, otherwise @c false
- */
- bool (*get_str_array_value) (struct _st_things_representation* rep, const char* key, char*** array, size_t* length);
-
- /**
- * @brief API for getting the value of integer array type property with a key.
- * @remarks This API will return deep-copied array value as out parameter, so application must free it after use.
- * @param[in] rep Instance of Representation.
- * @param[in] key Property Name which will represent the array type of value.
- * @param[out] array Reference of the integer array where the value will be copied.
- * @param[out] length Total number of elements in the array.
- * @return @c true if value exist, otherwise @c false
- */
- bool (*get_int_array_value) (struct _st_things_representation* rep, const char* key, int64_t** array, size_t* length);
-
- /**
- * @brief API for getting the value of double array type property with a key.
- * @remarks This API will return deep-copied array value as out parameter, so application must free it after use.
- * @param[in] rep Instance of Representation.
- * @param[in] key Property Name which will represent the array type of value.
- * @param[out] array Reference of the double array where the value will be copied.
- * @param[out] length Total number of elements in the array.
- * @return @c true if value exist, otherwise @c false
- */
- bool (*get_double_array_value) (struct _st_things_representation* rep, const char* key, double** array, size_t* length);
-
- /**
- * @brief API for getting the value of object array type property with a key.
- * @remarks This API will return deep-copied array value as out parameter, so application must free it after use.\n
- * To free each object in array, st_things_destroy_representation_inst() in st_things.h should be used.
- * @param[in] rep Instance of Representation.
- * @param[in] key Property Name which represents the array type of value.
- * @param[out] array Reference of the object array where the value will be copied.
- * @param[out] length Total number of elements in the array.
- * @return @c true if value exist, otherwise @c false
- */
- bool (*get_object_array_value) (struct _st_things_representation* rep, const char* key, struct _st_things_representation*** array, size_t* length);
-
- /**
- * @brief API for setting the value of string array type property with a key.
- * @remarks This API will deep-copy the array value inside, so application still has an ownership of memory for the array value.
- * @param[in] rep Instance of Representation.
- * @param[in] key Property Name which represents the value.
- * @param[in] array String array type value.
- * @param[in] length Total number of elements in the array.
- * @return @c true if setting value is successful, otherwise @c false
- */
- bool (*set_str_array_value) (struct _st_things_representation* rep, const char* key, const char** array, size_t length);
-
- /**
- * @brief API for setting the value of integer array type property with a key.
- * @remarks This API will deep-copy the array value inside, so application still has an ownership of memory for the array value.
- * @param[in] rep Instance of Representation.
- * @param[in] key Property Name which represents the value.
- * @param[in] array Integer array type value.
- * @param[in] length Total number of elements in the array.
- * @return @c true if setting value is successful, otherwise @c false
- */
- bool (*set_int_array_value) (struct _st_things_representation* rep, const char* key, const int64_t* array, size_t length);
-
- /**
- * @brief API for setting the value of double array type property with a key.
- * @remarks This API will deep-copy the array value inside, so application still has an ownership of memory for the array value.
- * @param[in] rep Instance of Representation.
- * @param[in] key Property Name which represents the value.
- * @param[in] array Double array type value.
- * @param[in] length Total number of elements in the array.
- * @return @c true if setting value is successful, otherwise @c false
- */
- bool (*set_double_array_value) (struct _st_things_representation* rep, const char* key, const double* array, size_t length);
-
- /**
- * @brief API for setting the value of object array type property with a key.
- * @remarks This API will deep-copy the array value inside, so application still has an ownership of memory for the array value.
- * @param[in] rep Instance of Representation.
- * @param[in] key Property Name which represents the value.
- * @param[in] array Object array type value.
- * @param[in] length Total number of elements in the array.
- * @return @c true if setting value is successful, otherwise @c false
- */
- bool (*set_object_array_value) (struct _st_things_representation* rep, const char* key, const struct _st_things_representation** array, size_t length);
-
-} st_things_representation_s;
-
-/**
- * @brief Structure for representing the Get Request Message.
- */
-typedef struct _st_things_get_request_message
-{
- char* resource_uri; /**< Resource URI */
- char* query; /**< One or more query parameters of the request message. Ex: key1=value1;key2=value2;... */
- char* property_key; /**< One or more property key that application needs to set a value for response. Ex: key1;key2;... */
-
- /**
- * @brief API for getting the value of a specific query from the query parameters of the request.
- * @param[in] req_msg Instance of get request message.
- * @param[in] key Name of the query.(ex: key1, key2, etc)
- * @param[out] value Value of the query.(value1, value2, etc)
- * @return @c true if query exist, otherwise @c false
- */
- bool (*get_query_value) (struct _st_things_get_request_message* req_msg, const char* key, char** value);
-
- /**
- * @brief API for checking whether the request has a specific property key or not.
- * @param[in] req_msg Instance of get request message.
- * @param[in] key Name of the property.
- * @return @c true if the property key exists, otherwise @c false
- */
- bool (*has_property_key) (struct _st_things_get_request_message* req_msg, const char* key);
-
-} st_things_get_request_message_s;
-
-/**
- * @brief Structure for representing the Set Request Message.
- */
-typedef struct _st_things_set_request_message
-{
- char* resource_uri; /**< Resource URI */
- char* query; /**< One or more query parameters of the request message. Ex: key1=value1?key2=value2?... */
- struct _st_things_representation* rep; /**< Representation of the set request message */
-
- /**
- * @brief API for getting the value of a specific query from the query parameters of the request.
- * @param[in] req_msg Instance of request message.
- * @param[in] key Name of the query.(ex: key1, key2, etc)
- * @param[out] value Value of the query.(value1, value2, etc)
- * @return @c true if query exist, otherwise @c false
- */
- bool (*get_query_value) (struct _st_things_set_request_message* req_msg, const char* key, char** value);
-
-} st_things_set_request_message_s;
-
-#endif /* __ST_THINGS_TYPES_H__ */
+++ /dev/null
-/*
- * Copyright (c) 2018 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.
- */
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-void init_thing();
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
--- /dev/null
+/*
+ * thing_master_user.h
+ *
+ * Created on: Jan 22, 2019
+ * Author: segaon
+ */
+
+#ifndef THING_MASTER_USER_H_
+#define THING_MASTER_USER_H_
+
+int init_master_app();
+
+int deinit_master_app();
+
+#endif /* THING_MASTER_USER_H_ */
--- /dev/null
+/*
+ * thing_resource_user.h
+ *
+ * Created on: Jan 22, 2019
+ * Author: segaon
+ */
+
+#ifndef THING_RESOURCE_USER_H_
+#define THING_RESOURCE_USER_H_
+
+
+int init_resource_app();
+
+int deinit_resource_app();
+
+#endif /* THING_RESOURCE_USER_H_ */
-APPNAME = co2sensor
+APPNAME = co2_50
type = app
-profile = iot-headless-4.0
+profile = iot-headless-5.0
-USER_SRCS = src/co2sensor.c
+USER_SRCS = src/co2_50.c
USER_DEFS =
-USER_INC_DIRS = inc, inc/sdk
+USER_INC_DIRS = inc
USER_OBJS =
-USER_LIBS = lib/liboicdastack.so, lib/libsdkapi.so
+USER_LIBS = lib/libst_thing_master_api.so, lib/libst_thing_resource_api.so
USER_EDCS =
+++ /dev/null
-{
- "device": [
- {
- "specification": {
- "device": {
- "deviceType": "x.wwst.d.basic",
- "deviceName": "co2sensor",
- "specVersion": "core.1.1.0",
- "dataModelVersion": "res.1.1.0"
- },
- "platform": {
- "manufacturerName": "fC3T",
- "manufacturerUrl": "http://www.samsung.com/sec/",
- "manufacturingDate": "2017-11-29",
- "modelNumber": "NWSP-01",
- "platformVersion": "1.0",
- "osVersion": "1.0",
- "hardwareVersion": "1.0",
- "firmwareVersion": "1.0",
- "vendorId": "vid_1001"
- }
- },
- "resources": {
- "single": [
- {
- "uri": "/capability/switch/main/0",
- "types": [
- "x.com.st.powerswitch"
- ],
- "interfaces": [
- "oic.if.a",
- "oic.if.baseline"
- ],
- "policy": 3
- },
- {
- "uri": "/capability/airQualitySensor/main/0",
- "types": [
- "x.com.st.airqualitylevel"
- ],
- "interfaces": [
- "oic.if.s",
- "oic.if.baseline"
- ],
- "policy": 3
- },
- {
- "uri": "/capability/thermostatCoolingSetpoint/main/0",
- "types": [
- "x.com.st.temperature.cooling"
- ],
- "interfaces": [
- "oic.if.a",
- "oic.if.s",
- "oic.if.baseline"
- ],
- "policy": 3
- }
- ]
- }
- }
- ],
- "resourceTypes": [
- {
- "type": "x.com.st.powerswitch",
- "properties": [
- {
- "key": "power",
- "type": 3,
- "mandatory": true,
- "rw": 3
- }
- ]
- },
- {
- "type": "x.com.st.airqualitylevel",
- "properties": [
- {
- "key": "airQuality",
- "type": 2,
- "mandatory": true,
- "rw": 1
- },
- {
- "key": "range",
- "type": 7,
- "mandatory": true,
- "rw": 1
- }
- ]
- },
- {
- "type": "x.com.st.temperature.cooling",
- "properties": [
- {
- "key": "temperature",
- "type": 2,
- "mandatory": true,
- "rw": 3
- },
- {
- "key": "range",
- "type": 7,
- "mandatory": true,
- "rw": 3
- },
- {
- "key": "units",
- "type": 3,
- "mandatory": true,
- "rw": 3
- }
- ]
- }
- ],
- "configuration": {
- "easySetup": {
- "connectivity": {
- "type": 1,
- "softAP": {
- "setupId": "001",
- "artik": false
- }
- },
- "ownershipTransferMethod": 2
- },
- "wifi": {
- "interfaces": 15,
- "frequency": 1
- },
- "filePath": {
- "svrdb": "artikserversecured.dat",
- "provisioning": "provisioning.dat",
- "certificate": "certificate.pem",
- "privateKey": "privatekey.der"
- }
- }
-}
\ No newline at end of file
--- /dev/null
+{
+ "devices": [
+ {
+ "deviceType": "x.wwst.d.basic",
+ "deviceName": "*** YOUR DEVICE NAME ***",
+ "mnid": "*** YOUR NMID ***",
+ "vid": "*** YOUR VENDOR ID ***"
+ }
+ ],
+ "configuration": {
+ "easySetup": {
+ "mode": 1,
+ "setupId": "*** YOUR SETUP ID ***"
+ },
+ "otm": 2,
+ "crtType": 1
+ }
+}
--- /dev/null
+{
+ "resources": {
+ "single": [
+ {
+ "uri": "/capability/switch/main/0",
+ "types": [
+ "x.com.st.powerswitch"
+ ],
+ "interfaces": [
+ "oic.if.a",
+ "oic.if.baseline"
+ ]
+ },
+ {
+ "uri": "/capability/airQualitySensor/main/0",
+ "types": [
+ "x.com.st.airqualitylevel"
+ ],
+ "interfaces": [
+ "oic.if.s",
+ "oic.if.baseline"
+ ]
+ },
+ {
+ "uri": "/capability/thermostatCoolingSetpoint/main/0",
+ "types": [
+ "x.com.st.temperature.cooling"
+ ],
+ "interfaces": [
+ "oic.if.a",
+ "oic.if.s",
+ "oic.if.baseline"
+ ]
+ }
+ ]
+ },
+ "resourceTypes": [
+ {
+ "type": "x.com.st.powerswitch",
+ "properties": [
+ {
+ "key": "power",
+ "type": "string",
+ "readOnly": 3,
+ "mandatory": true,
+ "isArray": false
+ }
+ ]
+ },
+ {
+ "type": "x.com.st.airqualitylevel",
+ "properties": [
+ {
+ "key": "airQuality",
+ "type": "double",
+ "readOnly": 1,
+ "mandatory": true,
+ "isArray": false
+ },
+ {
+ "key": "range",
+ "type": "double",
+ "readOnly": 1,
+ "mandatory": true,
+ "isArray": true
+ }
+ ]
+ },
+ {
+ "type": "x.com.st.temperature.cooling",
+ "properties": [
+ {
+ "key": "temperature",
+ "type": "double",
+ "readOnly": 3,
+ "mandatory": true,
+ "isArray": false
+ },
+ {
+ "key": "range",
+ "type": "double",
+ "readOnly": 3,
+ "mandatory": true,
+ "isArray": true
+ },
+ {
+ "key": "units",
+ "type": "string",
+ "readOnly": 3,
+ "mandatory": true,
+ "isArray": false
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
* limitations under the License.
*/
-#include "st_things.h"
+#include "smartthings_resource.h"
#include "log.h"
-static const char* PROP_AIRQUALITY = "airQuality";
-static const char* PROP_RANGE = "range";
+static const char *PROP_AIRQUALITY = "airQuality";
+static const char *PROP_RANGE = "range";
static double g_range[2] = { 0, 10000. };
static size_t g_length = 2;
int32_t g_co2_sensor_value = 400;
extern int resource_update_co2_sensor_value(void);
-bool handle_get_request_on_resource_capability_airqualitysensor(st_things_get_request_message_s* req_msg, st_things_representation_s* resp_rep)
+bool handle_get_request_on_resource_capability_airqualitysensor_main_0(smartthings_payload_h resp_payload, void *user_data)
{
- //DBG("Received a GET request on %s\n", req_msg->resource_uri);
+ int error = SMARTTHINGS_RESOURCE_ERROR_NONE;
- if (req_msg->has_property_key(req_msg, PROP_AIRQUALITY)) {
- g_co2_sensor_value = resource_update_co2_sensor_value();
- resp_rep->set_int_value(resp_rep, PROP_AIRQUALITY, g_co2_sensor_value);
+ g_co2_sensor_value = resource_update_co2_sensor_value();
+ error = smartthings_payload_set_int(resp_payload, PROP_AIRQUALITY, g_co2_sensor_value);
+ if (error != SMARTTHINGS_RESOURCE_ERROR_NONE) {
+ _E("smartthings_payload_set_int() failed, [%d]", error);
+ return false;
}
- if (req_msg->has_property_key(req_msg, PROP_RANGE)) {
- resp_rep->set_double_array_value(resp_rep, PROP_RANGE, (double*)&g_range, g_length);
+
+ error = smartthings_payload_set_double_array(resp_payload, PROP_RANGE, (double*)&g_range, g_length);
+ if (error != SMARTTHINGS_RESOURCE_ERROR_NONE) {
+ _E("smartthings_payload_set_double_array() failed, [%d]", error);
+ return false;
}
return true;
* limitations under the License.
*/
-#include "st_things.h"
+#include "smartthings_resource.h"
#include "log.h"
#define VALUE_STR_LEN_MAX 32
-static const char* PROP_POWER = "power";
-static const char* VALUE_SWITCH_ON = "on";
-static const char* VALUE_SWITCH_OFF = "off";
+static const char *PROP_POWER = "power";
+static const char *VALUE_SWITCH_ON = "on";
+static const char *VALUE_SWITCH_OFF = "off";
static char g_switch[VALUE_STR_LEN_MAX] = "off";
bool g_switch_is_on = false;
-bool handle_get_request_on_resource_capability_switch(st_things_get_request_message_s* req_msg, st_things_representation_s* resp_rep)
+bool handle_get_request_on_resource_capability_switch_main_0(smartthings_payload_h resp_payload, void *user_data)
{
- DBG("Received a GET request on %s\n", req_msg->resource_uri);
+ int error = SMARTTHINGS_RESOURCE_ERROR_NONE;
- if (req_msg->has_property_key(req_msg, PROP_POWER)) {
- resp_rep->set_str_value(resp_rep, PROP_POWER, g_switch);
- }
- else
+ error = smartthings_payload_set_string(resp_payload, PROP_POWER, g_switch);
+ if (error != SMARTTHINGS_RESOURCE_ERROR_NONE) {
+ _E("smartthings_payload_set_string() failed, [%d]", error);
return false;
+ }
+ _D("get switch : %s", g_switch);
+
return true;
}
-bool handle_set_request_on_resource_capability_switch(st_things_set_request_message_s* req_msg, st_things_representation_s* resp_rep)
+bool handle_set_request_on_resource_capability_switch_main_0(smartthings_payload_h payload, smartthings_payload_h resp_payload, void *user_data)
{
- DBG("Received a SET request on %s\n", req_msg->resource_uri);
-
char *str_value = NULL;
- req_msg->rep->get_str_value(req_msg->rep, PROP_POWER, &str_value);
+ int error = SMARTTHINGS_RESOURCE_ERROR_NONE;
+
+ error = smartthings_payload_get_string(payload, PROP_POWER, &str_value);
+ if (error != SMARTTHINGS_RESOURCE_ERROR_NONE) {
+ _E("smartthings_payload_get_string() failed, [%d]", error);
+ return false;
+ }
+ _D("set switch : %s", str_value);
/* check validation */
if ((0 != strncmp(str_value, VALUE_SWITCH_ON, strlen(VALUE_SWITCH_ON)))
&& (0 != strncmp(str_value, VALUE_SWITCH_OFF, strlen(VALUE_SWITCH_OFF)))) {
- ERR("Not supported value!!");
+ _E("Not supported value!!");
free(str_value);
return false;
}
+
if (0 != strncmp(str_value, g_switch, strlen(g_switch))) {
strncpy(g_switch, str_value, VALUE_STR_LEN_MAX);
if (0 == strncmp(g_switch, VALUE_SWITCH_ON, strlen(VALUE_SWITCH_ON))) {
g_switch_is_on = true;
- }
- else {
+ } else {
g_switch_is_on = false;
}
}
- resp_rep->set_str_value(resp_rep, PROP_POWER, g_switch);
-
- st_things_notify_observers(req_msg->resource_uri);
-
free(str_value);
+ error = smartthings_payload_set_string(resp_payload, PROP_POWER, g_switch);
+ if (error != SMARTTHINGS_RESOURCE_ERROR_NONE) {
+ _E("smartthings_payload_set_string() failed, [%d]", error);
+ return false;
+ }
+
return true;
}
* limitations under the License.
*/
-#include "st_things.h"
+#include "smartthings_resource.h"
#include "log.h"
static const char* PROP_TEMPERATURE = "temperature";
extern int resource_get_co2_sensor_parameter(void);
extern void resource_set_sensor_parameter(int zero_volts);
-bool handle_get_request_on_resource_capability_thermostatcoolingsetpoint(st_things_get_request_message_s* req_msg, st_things_representation_s* resp_rep)
+bool handle_get_request_on_resource_capability_thermostatcoolingsetpoint_main_0(smartthings_payload_h resp_payload, void *user_data)
{
- DBG("Received a GET request on %s\n", req_msg->resource_uri);
+ int error = SMARTTHINGS_RESOURCE_ERROR_NONE;
- if (req_msg->has_property_key(req_msg, PROP_TEMPERATURE)) {
- DBG("requested temperature");
- if (0 == g_temperature)
- g_temperature = (double)resource_get_co2_sensor_parameter();
- resp_rep->set_double_value(resp_rep, PROP_TEMPERATURE, g_temperature);
+ if (0 == g_temperature) {
+ g_temperature = (double)resource_get_co2_sensor_parameter();
+ error = smartthings_payload_set_double(resp_payload, PROP_TEMPERATURE, g_temperature);
+ if (error != SMARTTHINGS_RESOURCE_ERROR_NONE) {
+ _E("smartthings_payload_set_double() failed, [%d]", error);
+ return false;
+ }
}
- if (req_msg->has_property_key(req_msg, PROP_RANGE)) {
- //DBG("requested range");
- resp_rep->set_double_array_value(resp_rep, PROP_RANGE, (double*)&g_range, g_length);
+
+ error = smartthings_payload_set_double_array(resp_payload, PROP_RANGE, (double*)&g_range, g_length);
+ if (error != SMARTTHINGS_RESOURCE_ERROR_NONE) {
+ _E("smartthings_payload_set_double_array() failed, [%d]", error);
+ return false;
}
- if (req_msg->has_property_key(req_msg, PROP_UNITS)) {
- //DBG("requested units");
- resp_rep->set_str_value(resp_rep, PROP_UNITS, g_unit);
+
+ error = smartthings_payload_set_string(resp_payload, PROP_UNITS, g_unit);
+ if (error != SMARTTHINGS_RESOURCE_ERROR_NONE) {
+ _E("smartthings_payload_set_string() failed, [%d]", error);
+ return false;
}
+
return true;
}
-bool handle_set_request_on_resource_capability_thermostatcoolingsetpoint(st_things_set_request_message_s* req_msg, st_things_representation_s* resp_rep)
+bool handle_set_request_on_resource_capability_thermostatcoolingsetpoint_main_0(smartthings_payload_h payload, smartthings_payload_h resp_payload, void *user_data)
{
- DBG("Received a SET request on %s\n", req_msg->resource_uri);
+ int error = SMARTTHINGS_RESOURCE_ERROR_NONE;
double dvalue = 0;
- if (req_msg->rep->get_double_value(req_msg->rep, PROP_TEMPERATURE, &dvalue)) {
- g_temperature = dvalue;
- resource_set_sensor_parameter((int32_t)g_temperature);
- resource_init_co2_sensor();
- resp_rep->set_double_value(resp_rep, PROP_TEMPERATURE, dvalue);
- DBG("set requested: %.f\n", g_temperature);
+ error = smartthings_payload_get_double(payload, PROP_TEMPERATURE, &dvalue);
+ if (error != SMARTTHINGS_RESOURCE_ERROR_NONE) {
+ _E("smartthings_payload_get_double() failed, [%d]", error);
+ return false;
+ }
+ g_temperature = dvalue;
+ resource_set_sensor_parameter((int32_t)g_temperature);
+ resource_init_co2_sensor();
+
+ error = smartthings_payload_set_double(resp_payload, PROP_TEMPERATURE, dvalue);
+ if (error != SMARTTHINGS_RESOURCE_ERROR_NONE) {
+ _E("smartthings_payload_set_double() failed, [%d]", error);
+ return false;
}
char *str_value = NULL;
- if (req_msg->rep->get_str_value(req_msg->rep, PROP_UNITS, &str_value)) {
- resp_rep->set_str_value(resp_rep, PROP_UNITS, g_unit);
+ error = smartthings_payload_get_string(payload, PROP_UNITS, &str_value);
+ if (error != SMARTTHINGS_RESOURCE_ERROR_NONE) {
+ _E("smartthings_payload_get_string() failed, [%d]", error);
free(str_value);
+ return false;
}
+ error = smartthings_payload_set_string(resp_payload, PROP_UNITS, g_unit);
+ if (error != SMARTTHINGS_RESOURCE_ERROR_NONE) {
+ _E("smartthings_payload_set_string() failed, [%d]", error);
+ free(str_value);
+ return false;
+ }
+ free(str_value);
double davalue[2] = { 0, };
size_t dlength = 0;
- if (req_msg->rep->get_double_array_value(req_msg->rep, PROP_RANGE, (double**)&davalue, &dlength )) {
- resp_rep->set_double_array_value(resp_rep, PROP_RANGE, g_range, g_length);
+ error = smartthings_payload_get_double_array(payload, PROP_RANGE, (double**)&davalue, &dlength);
+ if (error != SMARTTHINGS_RESOURCE_ERROR_NONE) {
+ _E("smartthings_payload_get_double_array() failed, [%d]", error);
+ return false;
+ }
+
+ error = smartthings_payload_set_double_array(resp_payload, PROP_RANGE, g_range, g_length);
+ if (error != SMARTTHINGS_RESOURCE_ERROR_NONE) {
+ _E("smartthings_payload_set_double_array() failed, [%d]", error);
+ return false;
}
- st_things_notify_observers(req_msg->resource_uri);
return true;
}
#include <service_app.h>
#include <stdio.h>
-#include <resource/resource_co2_sensor.h>
-#include "st_things.h"
+#include "smartthings.h"
+#include "smartthings_resource.h"
+#include "smartthings_payload.h"
+#include "resource/resource_co2_sensor.h"
#include "log.h"
#include <signal.h>
-#define JSON_PATH "device_def.json"
+static const char *RES_CAPABILITY_SWITCH = "/capability/switch/main/0";
+static const char *RES_CAPABILITY_THERMOSTATCOOLINGSETPOINT = "/capability/thermostatCoolingSetpoint/main/0";
+static const char *RES_CAPABILITY_AIRQUALITYSENSOR = "/capability/airQualitySensor/main/0";
-static const char* RES_CAPABILITY_SWITCH = "/capability/switch/main/0";
-static const char* RES_CAPABILITY_THERMOSTATCOOLINGSETPOINT = "/capability/thermostatCoolingSetpoint/main/0";
-static const char* RES_CAPABILITY_AIRQUALITYSENSOR = "/capability/airQualitySensor/main/0";
+smartthings_resource_h st_handle = NULL;
+static bool is_init = false;
+static bool is_resource_init = false;
+static smartthings_h st_h;
+
+smartthings_status_e st_things_status = -1;
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
extern int thread_done; /* resource_co2_sensor.c */
/* get and set request handlers */
-extern bool handle_get_request_on_resource_capability_switch(st_things_get_request_message_s* req_msg, st_things_representation_s* resp_rep);
-extern bool handle_set_request_on_resource_capability_switch(st_things_set_request_message_s* req_msg, st_things_representation_s* resp_rep);
-extern bool handle_get_request_on_resource_capability_thermostatcoolingsetpoint(st_things_get_request_message_s* req_msg, st_things_representation_s* resp_rep);
-extern bool handle_set_request_on_resource_capability_thermostatcoolingsetpoint(st_things_set_request_message_s* req_msg, st_things_representation_s* resp_rep);
-extern bool handle_get_request_on_resource_capability_airqualitysensor(st_things_get_request_message_s* req_msg, st_things_representation_s* resp_rep);
+extern bool handle_get_request_on_resource_capability_switch_main_0(smartthings_payload_h resp_payload, void *user_data);
+extern bool handle_set_request_on_resource_capability_switch_main_0(smartthings_payload_h payload, smartthings_payload_h resp_payload, void *user_data);
+extern bool handle_get_request_on_resource_capability_airqualitysensor_main_0(smartthings_payload_h resp_payload, void *user_data);
+extern bool handle_get_request_on_resource_capability_thermostatcoolingsetpoint_main_0(smartthings_payload_h resp_payload, void *user_data);
+extern bool handle_set_request_on_resource_capability_thermostatcoolingsetpoint_main_0(smartthings_payload_h payload, smartthings_payload_h resp_payload, void *user_data);
extern void *thread_sensor_main(void *arg);
extern void *thread_sensor_notify(void *arg);
-/* handle : for getting request on resources */
-bool handle_get_request(st_things_get_request_message_s* req_msg, st_things_representation_s* resp_rep)
-{
- //DBG("resource_uri [%s]", req_msg->resource_uri);
-
- if (0 == strcmp(req_msg->resource_uri, RES_CAPABILITY_SWITCH)) {
- return handle_get_request_on_resource_capability_switch(req_msg, resp_rep);
- }
- if (0 == strcmp(req_msg->resource_uri, RES_CAPABILITY_THERMOSTATCOOLINGSETPOINT)) {
- return handle_get_request_on_resource_capability_thermostatcoolingsetpoint(req_msg, resp_rep);
- }
- if (0 == strcmp(req_msg->resource_uri, RES_CAPABILITY_AIRQUALITYSENSOR)) {
- return handle_get_request_on_resource_capability_airqualitysensor(req_msg, resp_rep);
- }
-
- ERR("not supported uri");
- return false;
-}
-
-/* handle : for setting request on resources */
-bool handle_set_request(st_things_set_request_message_s* req_msg, st_things_representation_s* resp_rep)
-{
- DBG("resource_uri [%s]", req_msg->resource_uri);
-
- if (0 == strcmp(req_msg->resource_uri, RES_CAPABILITY_SWITCH)) {
- return handle_set_request_on_resource_capability_switch(req_msg, resp_rep);
- }
- if (0 == strcmp(req_msg->resource_uri, RES_CAPABILITY_THERMOSTATCOOLINGSETPOINT)) {
- return handle_set_request_on_resource_capability_thermostatcoolingsetpoint(req_msg, resp_rep);
- }
-
- ERR("not supported uri");
- return false;
-}
-
-/* callback functions */
-bool handle_reset_request(void)
-{
- DBG("Received a request for RESET.");
- return false;
-}
-
-void handle_reset_result(bool result)
-{
- DBG("Reset %s.\n", result ? "succeeded" : "failed");
-}
-
-bool handle_ownership_transfer_request(void)
-{
- DBG("Received a request for Ownership-transfer.");
- return true;
-}
-
-void handle_things_status_change(st_things_status_e things_status)
-{
- DBG("Things status is changed: %d\n", things_status);
-}
-
void sig_handler(int sig)
{
switch (sig) {
case SIGINT:
- INFO("SIGINT received");
+ _I("SIGINT received");
thread_done = 1;
break;
case SIGSEGV:
- INFO("SIGSEGV received");
+ _I("SIGSEGV received");
thread_done = 1;
break;
case SIGTERM:
- INFO("SIGTERM received");
+ _I("SIGTERM received");
thread_done = 1;
break;
default:
- ERR("wasn't expecting that sig [%d]", sig);
+ _E("wasn't expecting that sig [%d]", sig);
abort();
}
}
/* main loop */
void handle_main_loop(void)
{
- FN_CALL;
-
pthread_t p_thread[2];
int ret = 0;
ret = pthread_create(&p_thread[0], NULL, &thread_sensor_main, NULL);
if (ret != 0) {
- ERR("[ERROR] thread_sensor_main create failed, ret=%d", ret);
+ _E("[ERROR] thread_sensor_main create failed, ret=%d", ret);
return;
}
ret = pthread_create(&p_thread[1], NULL, &thread_sensor_notify, NULL);
if (ret != 0) {
- ERR("[ERROR] thread_sensor_notify create failed, ret=%d", ret);
+ _E("[ERROR] thread_sensor_notify create failed, ret=%d", ret);
return;
}
}
-/* initialize */
-void init_thing()
+void _send_response_result_cb(smartthings_resource_error_e result, void *user_data)
{
- FN_CALL;
- static bool binitialized = false;
- if (binitialized) {
- DBG("Already initialized!!");
- return;
- }
+ _D("app_control reply callback for send_response : result=[%d]", result);
+}
- bool easysetup_complete = false;
+void _notify_result_cb(smartthings_resource_error_e result, void *user_data)
+{
+ _D("app_control reply callback for notify : result=[%d]", result);
+}
- char app_json_path[128] = {0,};
- char *app_res_path = NULL;
- char *app_data_path = NULL;
+void _request_cb(smartthings_resource_h st_h, int req_id, const char *uri, smartthings_resource_req_type_e req_type,
+ smartthings_payload_h payload, void *user_data)
+{
+ START;
+
+ smartthings_payload_h resp_payload = NULL;
- app_res_path = app_get_resource_path();
- if (!app_res_path) {
- ERR("app_res_path is NULL!!");
+ smartthings_payload_create(&resp_payload);
+ if (!resp_payload) {
+ _E("Response payload is NULL");
return;
}
- app_data_path = app_get_data_path();
- if (!app_data_path) {
- ERR("app_data_path is NULL!!");
- free(app_res_path);
+ bool result = false;
+
+ if (req_type == SMARTTHINGS_RESOURCE_REQUEST_GET) {
+ if (0 == strncmp(uri, RES_CAPABILITY_SWITCH, strlen(RES_CAPABILITY_SWITCH))) {
+ result = handle_get_request_on_resource_capability_switch_main_0(resp_payload, user_data);
+ }
+ if (0 == strncmp(uri, RES_CAPABILITY_AIRQUALITYSENSOR, strlen(RES_CAPABILITY_AIRQUALITYSENSOR))) {
+ result = handle_get_request_on_resource_capability_airqualitysensor_main_0(resp_payload, user_data);
+ }
+ if (0 == strncmp(uri, RES_CAPABILITY_THERMOSTATCOOLINGSETPOINT, strlen(RES_CAPABILITY_THERMOSTATCOOLINGSETPOINT))) {
+ result = handle_get_request_on_resource_capability_thermostatcoolingsetpoint_main_0(resp_payload, user_data);
+ }
+ } else if (req_type == SMARTTHINGS_RESOURCE_REQUEST_SET) {
+ if (0 == strncmp(uri, RES_CAPABILITY_SWITCH, strlen(RES_CAPABILITY_SWITCH))) {
+ result = handle_set_request_on_resource_capability_switch_main_0(payload, resp_payload, user_data);
+ }
+ if (0 == strncmp(uri, RES_CAPABILITY_THERMOSTATCOOLINGSETPOINT, strlen(RES_CAPABILITY_THERMOSTATCOOLINGSETPOINT))) {
+ result = handle_set_request_on_resource_capability_thermostatcoolingsetpoint_main_0(payload, resp_payload, user_data);
+ }
+ } else {
+ _E("Invalid request type");
+ smartthings_payload_destroy(resp_payload);
+ END;
return;
}
- snprintf(app_json_path, sizeof(app_json_path), "%s/%s", app_res_path, JSON_PATH);
+ int error = SMARTTHINGS_RESOURCE_ERROR_NONE;
- if (0 != st_things_set_configuration_prefix_path((const char *)app_res_path, (const char *)app_data_path)) {
- ERR("st_things_set_configuration_prefix_path() failed!!");
- free(app_res_path);
- free(app_data_path);
- return;
+ error = smartthings_resource_send_response(st_h, req_id, uri, resp_payload, result);
+ if (error != SMARTTHINGS_RESOURCE_ERROR_NONE) {
+ smartthings_payload_destroy(resp_payload);
+ _E("smartthings_resource_send_response() failed, err=[%d]", error);
+ END;
+ return;
}
- free(app_res_path);
- free(app_data_path);
+ if (req_type == SMARTTHINGS_RESOURCE_REQUEST_SET) {
+ error = smartthings_resource_notify(st_h, uri, resp_payload);
+ if (error != SMARTTHINGS_RESOURCE_ERROR_NONE) {
+ _E("smartthings_resource_notify() failed, err=[%d]", error);
+ }
+ }
- if (0 != st_things_initialize(app_json_path, &easysetup_complete)) {
- ERR("st_things_initialize() failed!!");
- return;
+ if (smartthings_payload_destroy(resp_payload) != 0) {
+ _E("smartthings_payload_destroy failed");
+ }
+
+ END;
+ return;
+}
+
+static void _resource_connection_status_cb(smartthings_resource_h handle, smartthings_resource_connection_status_e status, void *user_data)
+{
+ START;
+
+ if (status == SMARTTHINGS_RESOURCE_CONNECTION_STATUS_CONNECTED) {
+ if (smartthings_resource_set_request_cb(st_handle, _request_cb, NULL) != 0) {
+ _E("smartthings_resource_set_request_cb() is failed");
+ return;
+ }
+ } else {
+ _I("connection failed, status=[%d]", status);
}
- binitialized = true;
+ END;
+ return;
+}
- DBG("easysetup_complete:[%d] ", easysetup_complete);
+int init_resource_app()
+{
+ START;
- st_things_register_request_cb(handle_get_request, handle_set_request);
- st_things_register_reset_cb(handle_reset_request, handle_reset_result);
- st_things_register_user_confirm_cb(handle_ownership_transfer_request);
- st_things_register_things_status_change_cb(handle_things_status_change);
+ if (is_resource_init) {
+ _I("Already initialized!");
+ return 0;
+ }
- st_things_start();
+ if (smartthings_resource_initialize(&st_handle, _resource_connection_status_cb, NULL) != 0) {
+ _E("smartthings_resource_initialize() is failed");
+ goto _out;
+ }
- handle_main_loop();
+ is_resource_init = true;
+
+ END;
+ return 0;
+
+_out :
+ END;
+ return -1;
+}
+
+int deinit_resource_app()
+{
+ START;
+
+ if (!st_handle)
+ return 0;
+
+ smartthings_resource_unset_request_cb(st_handle);
+
+ if (smartthings_resource_deinitialize(st_handle) != 0)
+ return -1;
+
+ is_init = false;
+
+ END;
+ return 0;
+}
- FN_END;
+void _user_confirm_cb(smartthings_h handle, void *user_data)
+{
+ START;
+
+ if (smartthings_send_user_confirm(handle, true) != 0)
+ _E("smartthings_send_user_confirm() is failed");
+
+ END;
+ return;
+}
+
+void _reset_confirm_cb(smartthings_h handle, void *user_data)
+{
+ START;
+
+ if (smartthings_send_reset_confirm(handle, true) != 0)
+ _E("smartthings_send_reset_confirm() is failed");
+
+ END;
+ return;
+}
+
+static void _reset_result_cb(smartthings_h handle, bool result, void *user_data)
+{
+ START;
+
+ _I("reset result = [%d]", result);
+
+ END;
+ return;
+}
+
+static void _thing_status_cb(smartthings_h handle, smartthings_status_e status, void *user_data)
+{
+ START;
+
+ _D("Received status changed cb : status = [%d]", status);
+
+ switch (status) {
+ case SMARTTHINGS_STATUS_NOT_READY:
+ _I("status: [%d] [%s]", status, "SMARTTHINGS_STATUS_NOT_READY");
+ break;
+ case SMARTTHINGS_STATUS_INIT:
+ _I("status: [%d] [%s]", status, "SMARTTHINGS_STATUS_INIT");
+ break;
+ case SMARTTHINGS_STATUS_ES_STARTED:
+ _I("status: [%d] [%s]", status, "SMARTTHINGS_STATUS_ES_STARTED");
+ break;
+ case SMARTTHINGS_STATUS_ES_DONE:
+ _I("status: [%d] [%s]", status, "SMARTTHINGS_STATUS_ES_DONE");
+ break;
+ case SMARTTHINGS_STATUS_ES_FAILED_ON_OWNERSHIP_TRANSFER:
+ _I("status: [%d] [%s]", status, "SMARTTHINGS_STATUS_ES_FAILED_ON_OWNERSHIP_TRANSFER");
+ break;
+ case SMARTTHINGS_STATUS_CONNECTING_TO_AP:
+ _I("status: [%d] [%s]", status, "SMARTTHINGS_STATUS_CONNECTING_TO_AP");
+ break;
+ case SMARTTHINGS_STATUS_CONNECTED_TO_AP:
+ _I("status: [%d] [%s]", status, "SMARTTHINGS_STATUS_CONNECTED_TO_AP");
+ break;
+ case SMARTTHINGS_STATUS_CONNECTING_TO_AP_FAILED:
+ _I("status: [%d] [%s]", status, "SMARTTHINGS_STATUS_CONNECTING_TO_AP_FAILED");
+ break;
+ case SMARTTHINGS_STATUS_REGISTERING_TO_CLOUD:
+ _I("status: [%d] [%s]", status, "SMARTTHINGS_STATUS_REGISTERING_TO_CLOUD");
+ break;
+ case SMARTTHINGS_STATUS_REGISTERED_TO_CLOUD:
+ _I("status: [%d] [%s]", status, "SMARTTHINGS_STATUS_REGISTERED_TO_CLOUD");
+ break;
+ case SMARTTHINGS_STATUS_REGISTERING_FAILED_ON_SIGN_IN:
+ _I("status: [%d] [%s]", status, "SMARTTHINGS_STATUS_REGISTERING_FAILED_ON_SIGN_IN");
+ break;
+ case SMARTTHINGS_STATUS_REGISTERING_FAILED_ON_PUB_RES:
+ _I("status: [%d] [%s]", status, "SMARTTHINGS_STATUS_REGISTERING_FAILED_ON_PUB_RES");
+ break;
+ default:
+ _E("status: [%d][%s]", status, "Unknown Status");
+ break;
+ }
+ END;
+ return;
+}
+
+static void _things_connection_status_cb(smartthings_h handle, smartthings_connection_status_e status, void *user_data)
+{
+ START;
+
+ _D("Received connection status changed cb : status = [%d]", status);
+
+ if (status == SMARTTHINGS_CONNECTION_STATUS_CONNECTED) {
+ const char* dev_name = "IoT Test Device";
+ int wifi_mode = SMARTTHINGS_WIFI_MODE_11B | SMARTTHINGS_WIFI_MODE_11G | SMARTTHINGS_WIFI_MODE_11N;
+ int wifi_freq = SMARTTHINGS_WIFI_FREQ_24G | SMARTTHINGS_WIFI_FREQ_5G;
+
+ if (smartthings_set_device_property(handle, dev_name, wifi_mode, wifi_freq) != 0) {
+ _E("smartthings_initialize() is failed");
+ return;
+ }
+
+ if (smartthings_set_certificate_file(handle, "certificate.pem", "privatekey.der") != 0) {
+ _E("smartthings_set_certificate_file() is failed");
+ return;
+ }
+
+ if (smartthings_set_user_confirm_cb(st_h, _user_confirm_cb, NULL) != 0) {
+ _E("smartthings_set_user_confirm_cb() is failed");
+ return;
+ }
+
+ if (smartthings_set_reset_confirm_cb(handle, _reset_confirm_cb, NULL) != 0) {
+ _E("smartthings_set_reset_confirm_cb() is failed");
+ return;
+ }
+
+ if (smartthings_set_reset_result_cb(handle, _reset_result_cb, NULL) != 0) {
+ _E("smartthings_set_reset_confirm_cb() is failed");
+ return;
+ }
+
+ if (smartthings_set_status_changed_cb(handle, _thing_status_cb, NULL) != 0) {
+ _E("smartthings_set_status_changed_callback() is failed");
+ return;
+ }
+
+ if (smartthings_start(handle) != 0) {
+ _E("smartthings_start() is failed");
+ return;
+ }
+
+ bool is_es_completed = false;
+ if (smartthings_get_easysetup_status(handle, &is_es_completed) != 0) {
+ _E("smartthings_get_easysetup_status() is failed");
+ return;
+ }
+
+ if (is_es_completed == true) {
+ _I("Easysetup is already done");
+ return;
+ }
+
+ if (smartthings_start_easysetup(handle) != 0) {
+ _E("smartthings_start_easysetup() is failed");
+ return;
+ }
+ } else {
+ _E("connection failed, status=[%d]", status);
+ }
+
+ END;
+ return;
+}
+
+int init_master_app()
+{
+ START;
+
+ if (is_init) {
+ _I("Already initialized!");
+ END;
+ return 0;
+ }
+
+ if (smartthings_initialize(&st_h, _things_connection_status_cb, NULL) != 0) {
+ _E("smartthings_initialize() is failed");
+ goto _out;
+ }
+
+ is_init = true;
+
+ END;
+ return 0;
+
+_out :
+ END;
+ return -1;
+}
+
+int deinit_master_app()
+{
+ START;
+
+ is_init = false;
+
+ if (!st_h) {
+ _I("handle is already NULL");
+ END;
+ return 0;
+ }
+
+ smartthings_unset_user_confirm_cb(st_h);
+ smartthings_unset_reset_confirm_cb(st_h);
+ smartthings_unset_reset_result_cb(st_h);
+ smartthings_unset_status_changed_cb(st_h);
+
+ if (smartthings_deinitialize(st_h) != 0) {
+ _E("smartthings_deinitialize() is failed");
+ END;
+ return -1;
+ }
+
+ END;
+ return 0;
}
static bool service_app_create(void *user_data)
{
- UNUSED(user_data);
+ handle_main_loop();
return true;
}
static void service_app_terminate(void *user_data)
{
- UNUSED(user_data);
-
MUTEX_LOCK;
thread_done = 1;
MUTEX_UNLOCK;
int status = pthread_mutex_destroy(&mutex);
- INFO("mutex destroy status = %d", status);
+ _I("mutex destroy status = %d", status);
}
static void service_app_control(app_control_h app_control, void *user_data)
{
- UNUSED(user_data);
if (app_control == NULL) {
- ERR("app_control is NULL");
+ _E("app_control is NULL");
return;
}
- init_thing();
+ init_master_app();
+ init_resource_app();
}
int main(int argc, char *argv[])
{
- FN_CALL;
-
service_app_lifecycle_callback_s event_callback;
event_callback.create = service_app_create;
#define retv_if(expr, val) do { \
if (expr) { \
- ERR("(%s) -> %s() return", #expr, __FUNCTION__); \
+ _E("(%s) -> %s() return", #expr, __FUNCTION__); \
return (val); \
} \
} while (0)
char *model_name = NULL;
if (MCP3008_H) {
- DBG("SPI device already initialized [ref_count : %u]", ref_count);
+ _D("SPI device already initialized [ref_count : %u]", ref_count);
MUTEX_LOCK;
ref_count++;
MUTEX_UNLOCK;
system_info_get_platform_string(MODEL_NAME_KEY, &model_name);
if (!model_name) {
- ERR("fail to get model name");
+ _E("fail to get model name");
return -1;
}
} else if (!strcmp(model_name, MODEL_NAME_ARTIK)) {
bus = 2; // ARTIK (2)
} else {
- ERR("unknown model name : %s", model_name);
+ _E("unknown model name : %s", model_name);
free(model_name);
return -1;
}
- DBG("%s model_name: %s, bus: %d", __func__, model_name, bus);
+ _D("%s model_name: %s, bus: %d", __func__, model_name, bus);
free(model_name);
model_name = NULL;
ret = peripheral_spi_open(bus, 0, &MCP3008_H);
if (PERIPHERAL_ERROR_NONE != ret) {
- ERR("spi open failed :%s ", get_error_message(ret));
+ _E("spi open failed :%s ", get_error_message(ret));
return -1;
}
ret = peripheral_spi_set_mode(MCP3008_H, PERIPHERAL_SPI_MODE_0);
if (PERIPHERAL_ERROR_NONE != ret) {
- ERR("peripheral_spi_set_mode failed :%s ", get_error_message(ret));
+ _E("peripheral_spi_set_mode failed :%s ", get_error_message(ret));
goto error_after_open;
}
ret = peripheral_spi_set_bit_order(MCP3008_H, PERIPHERAL_SPI_BIT_ORDER_MSB);
if (PERIPHERAL_ERROR_NONE != ret) {
- ERR("peripheral_spi_set_bit_order failed :%s ", get_error_message(ret));
+ _E("peripheral_spi_set_bit_order failed :%s ", get_error_message(ret));
goto error_after_open;
}
ret = peripheral_spi_set_bits_per_word(MCP3008_H, MCP3008_BPW);
if (PERIPHERAL_ERROR_NONE != ret) {
- ERR("peripheral_spi_set_bits_per_word failed :%s ", get_error_message(ret));
+ _E("peripheral_spi_set_bits_per_word failed :%s ", get_error_message(ret));
goto error_after_open;
}
ret = peripheral_spi_set_frequency(MCP3008_H, MCP3008_SPEED);
if (PERIPHERAL_ERROR_NONE != ret) {
- ERR("peripheral_spi_set_frequency failed :%s ", get_error_message(ret));
+ _E("peripheral_spi_set_frequency failed :%s ", get_error_message(ret));
goto error_after_open;
}
- DBG("%s success: %d", __func__, ref_count);
+ _D("%s success: %d", __func__, ref_count);
MUTEX_LOCK;
ref_count++;
return 0;
error_after_open:
- DBG("%s error: %d", __func__, ref_count);
+ _D("%s error: %d", __func__, ref_count);
peripheral_spi_close(MCP3008_H);
MCP3008_H = NULL;
return -1;
spi_err_cnt++;
if (spi_err_cnt >= 100)
{
- DBG("resource_read_adc_mcp3008 rx_w2_nb is not 0 -> rx: %02x, count: %d", rx[1], spi_read_cnt);
+ _D("resource_read_adc_mcp3008 rx_w2_nb is not 0 -> rx: %02x, count: %d", rx[1], spi_read_cnt);
spi_err_cnt = 0;
}
return -1;
#include <unistd.h>
#include <math.h>
#include <app_common.h>
-#include "st_things.h"
+#include "smartthings_resource.h"
#include "resource/resource_co2_sensor.h"
#include "log.h"
#define VOLT_V_REACT (VOLT_V_ZERO - VOLT_V_MAX)
static const char* RES_CAPABILITY_AIRQUALITYSENSOR = "/capability/airQualitySensor/main/0";
+static const char* PROP_AIRQUALITY = "airQuality";
+
static float mg811_co2_slope; // refer to datasheet, mg811 co2 slope value
static sensor_mg811_t mg_sensor;
int thread_done = 0;
extern int32_t g_co2_sensor_value;
extern bool g_switch_is_on;
+extern smartthings_resource_h st_handle;
extern int resource_read_adc_mcp3008(int ch_num, unsigned int *out_value); /* resource_adc_mcp3008.c */
extern int resource_adc_mcp3008_init(void); /* resource_adc_mcp3008.c */
reaction_volts = VOLT_V_REACT;
mg811_co2_slope = reaction_volts / (POINT_X_ZERO - POINT_X_MAX);
#if defined(__DEBUG__)
- DBG("CO2Volage zero_volts: %.f mV, max_volts: %.f mV, reaction %.f mV",
+ _D("CO2Volage zero_volts: %.f mV, max_volts: %.f mV, reaction %.f mV",
sen->zero_point_volts * 1000., sen->max_point_volts * 1000., reaction_volts * 1000.);
- DBG("mg811_ppm: %.3f V, %.3f", POINT_X_ZERO, mg811_co2_slope);
+ _D("mg811_ppm: %.3f V, %.3f", POINT_X_ZERO, mg811_co2_slope);
#endif
}
volts = volts / DC_GAIN;
if (!(volts <= sen->zero_point_volts && volts >= sen->max_point_volts)) {
if ((debug++ % 10) == 0) {
- DBG("wrong input %.f mV, voltage range %.f ~ %.f (400 ppm ~ 10000 ppm)",
+ _D("wrong input %.f mV, voltage range %.f ~ %.f (400 ppm ~ 10000 ppm)",
volts * 1000., sen->zero_point_volts * 1000., sen->max_point_volts * 1000.);
}
if (volts < sen->max_point_volts) {
if (percentage < 0 || percentage >= 10000) {
if ((debug++ % 5) == 0)
- DBG("sensor: %.f, volt: %.2f mV, CO2: %d ppm", sensor_value, sensor_fvalue, percentage);
+ _D("sensor: %.f, volt: %.2f mV, CO2: %d ppm", sensor_value, sensor_fvalue, percentage);
}
return percentage;
sprintf(path, "%s%s", app_data_path, CO2_DATA);
if((fp = fopen(path, "r")) == NULL) {
- ERR("Error: [%s] can't open adc data file", path);
+ _E("Error: [%s] can't open adc data file", path);
if (index == 2)
return 0;
return (int)(DEFAULT_ZERO_VOLTS * 1000);
fgets(buffer, 16, fp);
fclose(fp);
sscanf(buffer, "%d %d %d", &volts[0], &volts[1], &volts[2]);
- DBG("get parameter: %s, zero: %d, max: %d, count: %d", buffer, volts[0], volts[1], volts[2]);
+ _D("get parameter: %s, zero: %d, max: %d, count: %d", buffer, volts[0], volts[1], volts[2]);
free(app_data_path);
sprintf(path, "%s%s", app_data_path, CO2_DATA);
if((fp = fopen(path, "w+")) == NULL) {
- ERR("ERROR: can't fopen file: %s", CO2_DATA);
+ _E("ERROR: can't fopen file: %s", CO2_DATA);
return;
}
memset(buffer, 0, sizeof(buffer));
}
/*
- * main thread funtion to get sensor data
+ * notify sensor value to cloud
+ */
+static int notify_sensor_value(void)
+{
+ int error = SMARTTHINGS_RESOURCE_ERROR_NONE;
+
+ smartthings_payload_h resp_payload = NULL;
+
+ // send notification to cloud server
+ error = smartthings_payload_create(&resp_payload);
+ if (error != SMARTTHINGS_RESOURCE_ERROR_NONE || !resp_payload) {
+ _E("smartthings_payload_create() failed, [%d]", error);
+ return error;
+ }
+
+ error = smartthings_payload_set_int(resp_payload, PROP_AIRQUALITY, g_co2_sensor_value);
+ if (error != SMARTTHINGS_RESOURCE_ERROR_NONE) {
+ _E("smartthings_payload_set_int() failed, [%d]", error);
+ return error;
+ }
+
+ error = smartthings_resource_notify(st_handle, RES_CAPABILITY_AIRQUALITYSENSOR, resp_payload);
+ if (error != SMARTTHINGS_RESOURCE_ERROR_NONE) {
+ _E("smartthings_resource_notify() failed, [%d]", error);
+ return error;
+ }
+
+ if (smartthings_payload_destroy(resp_payload)) {
+ _E("smartthings_payload_destroy() failed");
+ return error;
+ }
+
+ return error;
+}
+
+/*
+ * main thread function to get sensor data
*/
void *thread_sensor_main(void *arg)
{
short sensor_value;
co2_sensor_data_t *sensorp = &co2_sensor;
- DBG("%s starting...\n", __func__);
+ _D("%s starting...\n", __func__);
memset((void *)sensorp, 0, sizeof(co2_sensor_data_t));
resource_init_co2_sensor();
ret = resource_adc_mcp3008_init();
- DBG("resource_adc_mcp3008_init ret: %d", ret);
+ _D("resource_adc_mcp3008_init ret: %d", ret);
while (true)
{
usleep(10 * 1000); // 10msec
}
}
- DBG("%s exiting...\n", __func__);
+ _D("%s exiting...\n", __func__);
pthread_exit((void *) 0);
}
co2_sensor_data_t *sensorp = &co2_sensor;
if (g_co2_sensor_value > 0 && g_co2_sensor_value < 10000)
- DBG("CO2 value: %d, count: %d", g_co2_sensor_value, sensorp->count);
+ _D("CO2 value: %d, count: %d", g_co2_sensor_value, sensorp->count);
MUTEX_LOCK;
sensorp->count = 0;
MUTEX_UNLOCK;
- if (g_switch_is_on)
- st_things_notify_observers(RES_CAPABILITY_AIRQUALITYSENSOR);
+ if (g_switch_is_on) {
+ notify_sensor_value();
}
+ }
usleep(10 * 1000); // 10msec
}
- DBG("%s exiting...\n", __func__);
+ _D("%s exiting...\n", __func__);
pthread_exit((void *) 0);
}
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<manifest xmlns="http://tizen.org/ns/packages" api-version="4.0" package="org.example.co2sensor" version="1.0.0">
+<manifest xmlns="http://tizen.org/ns/packages" api-version="5.0" package="org.example.co2_50" version="1.0.0">
<profile name="iot-headless"/>
- <service-application appid="org.example.co2sensor" exec="co2sensor" multiple="false" nodisplay="true" on-boot="true" taskmanage="false" type="capp">
- <label>co2sensor</label>
- <icon>co2sensor.png</icon>
+ <service-application appid="org.example.co2_50" exec="co2_50" multiple="false" nodisplay="true" on-boot="true" taskmanage="false" type="capp">
+ <label>co2_50</label>
+ <icon>co2_50.png</icon>
+ <metadata key="http://tizen.org/iot/metadata/master" value="shared/res/master.json"/>
+ <metadata key="http://tizen.org/iot/metadata/resource" value="shared/res/resource.json"/>
<background-category value="background-network"/>
+ <background-category value="iot-communication"/>
</service-application>
<privileges>
- <privilege>http://tizen.org/privilege/network.get</privilege>
- <privilege>http://tizen.org/privilege/network.set</privilege>
+ <privilege>http://tizen.org/privilege/appmanager.launch</privilege>
+ <privilege>http://tizen.org/privilege/datasharing</privilege>
<privilege>http://tizen.org/privilege/internet</privilege>
+ <privilege>http://tizen.org/privilege/softap</privilege>
<privilege>http://tizen.org/privilege/peripheralio</privilege>
- <privilege>http://tizen.org/privilege/alarm.set</privilege>
- <privilege>http://tizen.org/privilege/network.profile</privilege>
+ <appdefined-privilege>http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master</appdefined-privilege>
+ <appdefined-privilege>http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.resource</appdefined-privilege>
</privileges>
</manifest>