diff options
author | scott park <scott.park@dignsys.com> | 2019-01-22 12:02:39 +0900 |
---|---|---|
committer | scott park <scott.park@dignsys.com> | 2019-02-12 16:49:45 +0900 |
commit | e6619fe4551577ba404523d52ce8cbf4f9a4fcd6 (patch) | |
tree | b00da56e78cfe32bf8a9346b07dd81ba9f266311 | |
parent | 71199b6b42f641fec673a8ea72645f99cb9dddca (diff) | |
download | distance-checker-e6619fe4551577ba404523d52ce8cbf4f9a4fcd6.tar.gz distance-checker-e6619fe4551577ba404523d52ce8cbf4f9a4fcd6.tar.bz2 distance-checker-e6619fe4551577ba404523d52ce8cbf4f9a4fcd6.zip |
tizen 5.0 migration
Change-Id: I7be39a753693fd962cf924ada70678b0116d7f26
Signed-off-by: scott park <scott.park@dignsys.com>
28 files changed, 3722 insertions, 1058 deletions
diff --git a/.cproject b/.cproject new file mode 100644 index 0000000..08a5919 --- /dev/null +++ b/.cproject @@ -0,0 +1,372 @@ +<?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.670783910"> + <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="org.tizen.nativecore.config.sbi.gcc45.app.debug.670783910" 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="distance50" 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.670783910" name="Debug" parent="org.tizen.nativecore.config.sbi.gcc45.app.debug"> + <folderInfo id="org.tizen.nativecore.config.sbi.gcc45.app.debug.670783910." name="/" resourcePath=""> + <toolChain id="org.tizen.nativecore.toolchain.sbi.gcc45.app.debug.153707611" 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.1092832673" osList="linux,win32" superClass="org.tizen.nativeide.target.sbi.gnu.platform.base"/> + <builder autoBuildTarget="all" buildPath="${workspace_loc:/distance50}/Debug" enableAutoBuild="true" id="org.tizen.nativecore.target.sbi.gnu.builder.525844674" 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.1299183869" name="Archiver" superClass="org.tizen.nativecore.tool.sbi.gnu.archiver"/> + <tool command="clang++.exe" id="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler.716337718" name="C++ Compiler" superClass="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler"> + <option id="gnu.cpp.compiler.option.optimization.level.1986315385" 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.1867908324" 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.851998771" name="-fPIC option" superClass="sbi.gnu.cpp.compiler.option.misc.pic.core" valueType="boolean"/> + <option id="sbi.gnu.cpp.compiler.option.2014808110" 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.1065735553" 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.111140631" 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.2032045208" 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.2003550688" 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.228561357" 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.1536296869" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/> + </tool> + <tool command="clang.exe" id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.1894078450" 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.1677006032" 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.1850949115" 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.185846611" name="-fPIC option" superClass="sbi.gnu.c.compiler.option.misc.pic.core" valueType="boolean"/> + <option id="sbi.gnu.c.compiler.option.896334659" 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.2097958419" 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.581395452" 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.1714220636" 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.934396692" 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.688116291" 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.92874118" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/> + </tool> + <tool id="org.tizen.nativeide.tool.sbi.gnu.c.linker.base.984536056" 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.1307536758" name="C++ Linker" superClass="org.tizen.nativecore.tool.sbi.gnu.cpp.linker"> + <option defaultValue="false" id="sbi.gnu.cpp.link.option.strip.995555488" 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.1483177453" 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.1494193053" 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.1970967065" 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.1082814800" 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.1343654197" 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.83953896" 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.777718557" name="Assembler" superClass="org.tizen.nativeapp.tool.sbi.gnu.assembler.base"> + <inputType id="cdt.managedbuild.tool.gnu.assembler.input.294142418" superClass="cdt.managedbuild.tool.gnu.assembler.input"/> + </tool> + <tool id="org.tizen.nativecore.tool.fnmapgen.910847590" name="C FN-Map Generator" superClass="org.tizen.nativecore.tool.fnmapgen"/> + <tool id="org.tizen.nativecore.tool.fnmapgen.cpp.100768658" name="C++ FN-Map Generator" superClass="org.tizen.nativecore.tool.fnmapgen.cpp"/> + <tool id="org.tizen.nativecore.tool.ast.1700756741" name="C Static Analyzer" superClass="org.tizen.nativecore.tool.ast"/> + <tool id="org.tizen.nativecore.tool.ast.cpp.1736129008" name="C++ Static Analyzer" superClass="org.tizen.nativecore.tool.ast.cpp"/> + <tool id="org.tizen.nativecore.tool.sbi.gnu.archiver.mergelib.919151312" name="Archive Generator" superClass="org.tizen.nativecore.tool.sbi.gnu.archiver.mergelib"/> + <tool id="org.tizen.nativecore.tool.sbi.po.compiler.1029667034" name="PO Resource Compiler" superClass="org.tizen.nativecore.tool.sbi.po.compiler"/> + <tool id="org.tizen.nativecore.tool.sbi.edc.compiler.577579700" 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="distance50.c|thing_resource_user.c|thing_master_user.c|resource_capability_switch_main_0.c|resource_capability_presencesensor_main_0.c|resource_capability_illuminancemeasurement_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.1027624160"> + <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="org.tizen.nativecore.config.sbi.gcc45.app.release.1027624160" 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="distance50" 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.1027624160" name="Release" parent="org.tizen.nativecore.config.sbi.gcc45.app.release"> + <folderInfo id="org.tizen.nativecore.config.sbi.gcc45.app.release.1027624160." name="/" resourcePath=""> + <toolChain id="org.tizen.nativecore.toolchain.sbi.gcc45.app.release.755412940" 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.1747408462" osList="linux,win32" superClass="org.tizen.nativeide.target.sbi.gnu.platform.base"/> + <builder buildPath="${workspace_loc:/distance50}/Release" id="org.tizen.nativecore.target.sbi.gnu.builder.1470820117" 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.787058972" name="Archiver" superClass="org.tizen.nativecore.tool.sbi.gnu.archiver"/> + <tool command="clang++.exe" id="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler.1008672483" name="C++ Compiler" superClass="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler"> + <option id="gnu.cpp.compiler.option.optimization.level.940099292" 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.629433243" 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.1769803507" name="-fPIC option" superClass="sbi.gnu.cpp.compiler.option.misc.pic.core" valueType="boolean"/> + <option id="sbi.gnu.cpp.compiler.option.898570310" 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.629688726" 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.624423551" 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.666021416" 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.1067055618" 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.1130236274" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/> + </tool> + <tool command="clang.exe" id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.1428730515" 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.639061897" 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.2063854527" 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.755965767" name="-fPIC option" superClass="sbi.gnu.c.compiler.option.misc.pic.core" valueType="boolean"/> + <option id="sbi.gnu.c.compiler.option.1673331789" 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.219774583" 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.386068376" 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.23669575" 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.441929929" 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.127246572" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/> + </tool> + <tool id="org.tizen.nativeide.tool.sbi.gnu.c.linker.base.615224980" 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.1608411464" name="C++ Linker" superClass="org.tizen.nativecore.tool.sbi.gnu.cpp.linker"> + <option defaultValue="true" id="sbi.gnu.cpp.link.option.strip.733750727" 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.1482679736" 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.620530345" 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.1005943908" 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.76755435" 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.1037140800" 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.532866592" 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.371442421" name="Assembler" superClass="org.tizen.nativeapp.tool.sbi.gnu.assembler.base"> + <inputType id="cdt.managedbuild.tool.gnu.assembler.input.1229927031" superClass="cdt.managedbuild.tool.gnu.assembler.input"/> + </tool> + <tool id="org.tizen.nativecore.tool.fnmapgen.542645604" name="C FN-Map Generator" superClass="org.tizen.nativecore.tool.fnmapgen"/> + <tool id="org.tizen.nativecore.tool.fnmapgen.cpp.544492730" name="C++ FN-Map Generator" superClass="org.tizen.nativecore.tool.fnmapgen.cpp"/> + <tool id="org.tizen.nativecore.tool.ast.1961711152" name="C Static Analyzer" superClass="org.tizen.nativecore.tool.ast"/> + <tool id="org.tizen.nativecore.tool.ast.cpp.506369170" name="C++ Static Analyzer" superClass="org.tizen.nativecore.tool.ast.cpp"/> + <tool id="org.tizen.nativecore.tool.sbi.gnu.archiver.mergelib.1442877564" name="Archive Generator" superClass="org.tizen.nativecore.tool.sbi.gnu.archiver.mergelib"/> + <tool id="org.tizen.nativecore.tool.sbi.po.compiler.1391030550" name="PO Resource Compiler" superClass="org.tizen.nativecore.tool.sbi.po.compiler"/> + <tool id="org.tizen.nativecore.tool.sbi.edc.compiler.2131354077" 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="distance50.c|thing_resource_user.c|thing_master_user.c|resource_capability_switch_main_0.c|resource_capability_presencesensor_main_0.c|resource_capability_illuminancemeasurement_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="distance50.org.tizen.nativecore.target.sbi.gcc45.app.636495932" 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.release.1027624160"> + <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/> + </scannerConfigBuildInfo> + <scannerConfigBuildInfo instanceId="org.tizen.nativecore.config.sbi.gcc45.app.debug.670783910"> + <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> diff --git a/.exportMap b/.exportMap new file mode 100644 index 0000000..de30516 --- /dev/null +++ b/.exportMap @@ -0,0 +1,5 @@ +{ + global: main; + _IO_*; + local: *; +}; diff --git a/.project b/.project new file mode 100644 index 0000000..c58fda8 --- /dev/null +++ b/.project @@ -0,0 +1,46 @@ +<?xml version="1.0" encoding="UTF-8"?> +<projectDescription> + <name>distance50</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>1548066482146</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>1548066482150</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> diff --git a/.smartthingsapp b/.smartthingsapp new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/.smartthingsapp diff --git a/.tproject b/.tproject new file mode 100644 index 0000000..7bd616a --- /dev/null +++ b/.tproject @@ -0,0 +1,12 @@ +<?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> @@ -15,7 +15,7 @@ */ #ifndef __LOG_H__ -#define __LOG_H__ +#define __LOG_H__ #include <dlog.h> @@ -23,90 +23,22 @@ extern "C" { #endif -#ifdef LOG_TAG -#undef LOG_TAG +#ifdef LOG_TAG +#undef LOG_TAG #endif -#define LOG_TAG "sensor" +#define LOG_TAG "STAPP" -#if !defined(_D) -#define _D(fmt, arg...) dlog_print(DLOG_DEBUG, LOG_TAG, "[%s:%d] " fmt "\n", __func__, __LINE__, ##arg) -#endif - -#if !defined(_I) -#define _I(fmt, arg...) dlog_print(DLOG_INFO, LOG_TAG, "[%s:%d] " fmt "\n", __func__, __LINE__, ##arg) -#endif - -#if !defined(_W) -#define _W(fmt, arg...) dlog_print(DLOG_WARN, LOG_TAG, "[%s:%d] " fmt "\n", __func__, __LINE__, ##arg) -#endif - -#if !defined(_E) -#define _E(fmt, arg...) dlog_print(DLOG_ERROR, LOG_TAG, "[%s:%d] " fmt "\n", __func__, __LINE__, ##arg) -#endif - -#define retvm_if(expr, val, fmt, arg...) do { \ - if (expr) { \ - _E(fmt, ##arg); \ - _E("(%s) -> %s() return", #expr, __FUNCTION__); \ - return val; \ - } \ -} while (0) - -#define retv_if(expr, val) do { \ - if (expr) { \ - _E("(%s) -> %s() return", #expr, __FUNCTION__); \ - return (val); \ - } \ -} while (0) - -#define retm_if(expr, fmt, arg...) do { \ - if (expr) { \ - _E(fmt, ##arg); \ - _E("(%s) -> %s() return", #expr, __FUNCTION__); \ - return; \ - } \ -} while (0) +#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 ret_if(expr) do { \ - if (expr) { \ - _E("(%s) -> %s() return", #expr, __FUNCTION__); \ - return; \ - } \ -} while (0) - -#define goto_if(expr, val) do { \ - if (expr) { \ - _E("(%s) -> goto", #expr); \ - goto val; \ - } \ -} while (0) - -#define break_if(expr) { \ - if (expr) { \ - _E("(%s) -> break", #expr); \ - break; \ - } \ -} - -#define continue_if(expr) { \ - if (expr) { \ - _E("(%s) -> continue", #expr); \ - continue; \ - } \ -} - -#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 FN_CALL dlog_print(DLOG_DEBUG, LOG_TAG, ">>>>>>>> called") -#define FN_END dlog_print(DLOG_DEBUG, LOG_TAG, "<<<<<<<< ended") - -#define UNUSED(x) (void)(x) +#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__ */ diff --git a/inc/smartthings.h b/inc/smartthings.h new file mode 100644 index 0000000..7206479 --- /dev/null +++ b/inc/smartthings.h @@ -0,0 +1,1656 @@ +/***************************************************************** + * + * 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__ */ diff --git a/inc/smartthings_payload.h b/inc/smartthings_payload.h new file mode 100644 index 0000000..988585d --- /dev/null +++ b/inc/smartthings_payload.h @@ -0,0 +1,663 @@ +/***************************************************************** + * + * 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__ */ diff --git a/inc/smartthings_resource.h b/inc/smartthings_resource.h new file mode 100644 index 0000000..1968c50 --- /dev/null +++ b/inc/smartthings_resource.h @@ -0,0 +1,364 @@ +/***************************************************************** + * + * 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__ */ diff --git a/inc/st_things.h b/inc/st_things.h deleted file mode 100644 index 92015d7..0000000 --- a/inc/st_things.h +++ /dev/null @@ -1,299 +0,0 @@ -/* **************************************************************** - * - * Copyright 2017 Samsung Electronics 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 __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__ */ diff --git a/inc/st_things_types.h b/inc/st_things_types.h deleted file mode 100644 index 58f75b2..0000000 --- a/inc/st_things_types.h +++ /dev/null @@ -1,321 +0,0 @@ -/* **************************************************************** - * - * Copyright 2017 Samsung Electronics 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 __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__ */ diff --git a/inc/thing.h b/inc/thing.h deleted file mode 100644 index e91b2d0..0000000 --- a/inc/thing.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - * 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 */ diff --git a/lib/liboicdastack.so b/lib/liboicdastack.so Binary files differdeleted file mode 100644 index 4a5cc91..0000000 --- a/lib/liboicdastack.so +++ /dev/null diff --git a/lib/libsdkapi.so b/lib/libsdkapi.so Binary files differdeleted file mode 100644 index 47ca354..0000000 --- a/lib/libsdkapi.so +++ /dev/null diff --git a/lib/libst_thing_master_api.so b/lib/libst_thing_master_api.so Binary files differnew file mode 100644 index 0000000..aef594a --- /dev/null +++ b/lib/libst_thing_master_api.so diff --git a/lib/libst_thing_resource_api.so b/lib/libst_thing_resource_api.so Binary files differnew file mode 100644 index 0000000..245093f --- /dev/null +++ b/lib/libst_thing_resource_api.so diff --git a/project_def.prop b/project_def.prop index dea44c3..a8fe156 100644 --- a/project_def.prop +++ b/project_def.prop @@ -1,11 +1,11 @@ -APPNAME = distance +APPNAME = distance50 type = app -profile = iot-headless-4.0 +profile = iot-headless-5.0 -USER_SRCS = src/distance.c +USER_SRCS = src/distance50.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 = diff --git a/res/device_def.json b/res/device_def.json deleted file mode 100644 index c2eb821..0000000 --- a/res/device_def.json +++ /dev/null @@ -1,119 +0,0 @@ -{ - "device": [ - { - "specification": { - "device": { - "deviceType": "x.wwst.d.basic", - "deviceName": "distance", - "specVersion": "core.1.1.0", - "dataModelVersion": "res.1.1.0" - }, - "platform": { - "manufacturerName": "*** YOUR DEVICE NAME ***", - "manufacturerUrl": "http://www.samsung.com/sec/", - "manufacturingDate": "2017-11-29", - "modelNumber": "DIST-01", - "platformVersion": "1.0", - "osVersion": "1.0", - "hardwareVersion": "1.0", - "firmwareVersion": "1.0", - "vendorId": "*** YOUR VENDOR ID ***" - } - }, - "resources": { - "single": [ - { - "uri": "/capability/presenceSensor/main/0", - "types": [ - "oic.r.sensor.presence" - ], - "interfaces": [ - "oic.if.s", - "oic.if.baseline" - ], - "policy": 3 - }, - { - "uri": "/capability/switch/main/0", - "types": [ - "x.com.st.powerswitch" - ], - "interfaces": [ - "oic.if.a", - "oic.if.baseline" - ], - "policy": 3 - }, - { - "uri": "/capability/illuminanceMeasurement/main/0", - "types": [ - "oic.r.sensor.illuminance" - ], - "interfaces": [ - "oic.if.s", - "oic.if.baseline" - ], - "policy": 3 - } - ] - } - } - ], - "resourceTypes": [ - { - "type": "oic.r.sensor.presence", - "properties": [ - { - "key": "value", - "type": 0, - "mandatory": false, - "rw": 1 - } - ] - }, - { - "type": "x.com.st.powerswitch", - "properties": [ - { - "key": "power", - "type": 3, - "mandatory": true, - "rw": 3 - } - ] - }, - { - "type": "oic.r.sensor.illuminance", - "properties": [ - { - "key": "illuminance", - "type": 2, - "mandatory": true, - "rw": 1 - } - ] - } - ], - "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 diff --git a/shared/res/distance.png b/shared/res/distance50.png Binary files differindex 9765b1b..9765b1b 100644 --- a/shared/res/distance.png +++ b/shared/res/distance50.png diff --git a/shared/res/master.json b/shared/res/master.json new file mode 100644 index 0000000..59f3ed6 --- /dev/null +++ b/shared/res/master.json @@ -0,0 +1,18 @@ +{ + "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 + } +} diff --git a/shared/res/resource.json b/shared/res/resource.json new file mode 100644 index 0000000..324333b --- /dev/null +++ b/shared/res/resource.json @@ -0,0 +1,74 @@ +{ + "resources": { + "single": [ + { + "uri": "/capability/switch/main/0", + "types": [ + "x.com.st.powerswitch" + ], + "interfaces": [ + "oic.if.a", + "oic.if.baseline" + ] + }, + { + "uri": "/capability/illuminanceMeasurement/main/0", + "types": [ + "oic.r.sensor.illuminance" + ], + "interfaces": [ + "oic.if.s", + "oic.if.baseline" + ] + }, + { + "uri": "/capability/presenceSensor/main/0", + "types": [ + "oic.r.sensor.presence" + ], + "interfaces": [ + "oic.if.s", + "oic.if.baseline" + ] + } + ] + }, + "resourceTypes": [ + { + "type": "x.com.st.powerswitch", + "properties": [ + { + "key": "power", + "type": "string", + "readOnly": 3, + "mandatory": true, + "isArray": false + } + ] + }, + { + "type": "oic.r.sensor.illuminance", + "properties": [ + { + "key": "illuminance", + "type": "double", + "readOnly": 1, + "mandatory": true, + "isArray": false + } + ] + }, + { + "type": "oic.r.sensor.presence", + "properties": [ + { + "key": "value", + "type": "boolean", + "readOnly": 1, + "mandatory": false, + "isArray": false + } + ] + } + ] +}
\ No newline at end of file diff --git a/src/capability/capability_illuminancemeasurement.c b/src/capability/capability_illuminancemeasurement.c index a51f8f8..d2b6dad 100644 --- a/src/capability/capability_illuminancemeasurement.c +++ b/src/capability/capability_illuminancemeasurement.c @@ -14,29 +14,28 @@ * limitations under the License. */ -#include <stdio.h> -#include <stdbool.h> -#include "st_things.h" +#include "smartthings_resource.h" +#include <peripheral_io.h> +#include <stdint.h> #include "log.h" static const char *PROP_ILLUMINANCE = "illuminance"; extern uint16_t get_sensor_value(void); -bool handle_get_request_on_resource_capability_illuminancemeasurement_main_0(st_things_get_request_message_s* req_msg, st_things_representation_s* resp_rep) +bool handle_get_request_on_resource_capability_illuminancemeasurement_main_0(smartthings_payload_h resp_payload, void *user_data) { - //DBG("Received a GET request on %s\n", req_msg->resource_uri); uint16_t sensor_value; + int error = SMARTTHINGS_RESOURCE_ERROR_NONE; - if (req_msg->has_property_key(req_msg, PROP_ILLUMINANCE)) { - // get distance sensor value - sensor_value = get_sensor_value(); + // get distance sensor value + sensor_value = get_sensor_value(); - //INFO("get sensor_value : %d", sensor_value); - - // set sensor value - resp_rep->set_int_value(resp_rep, PROP_ILLUMINANCE, sensor_value); - - return true; + // set sensor value + error = smartthings_payload_set_int(resp_payload, PROP_ILLUMINANCE, sensor_value); + if (error != SMARTTHINGS_RESOURCE_ERROR_NONE) { + _E("smartthings_payload_set_int() failed, [%d]", error); + return false; } - return false; + + return true; } diff --git a/src/capability/capability_presencesensor.c b/src/capability/capability_presencesensor.c index 3296446..ad7b5dc 100644 --- a/src/capability/capability_presencesensor.c +++ b/src/capability/capability_presencesensor.c @@ -16,22 +16,24 @@ #include <stdio.h> #include <stdbool.h> -#include "st_things.h" +#include "smartthings_resource.h" #include "log.h" static const char *PROP_VALUE = "value"; extern void get_presence_status(bool *status); -bool handle_get_request_on_resource_capability_presencesensor_main_0(st_things_get_request_message_s* req_msg, st_things_representation_s* resp_rep) +bool handle_get_request_on_resource_capability_presencesensor_main_0(smartthings_payload_h resp_payload, void *user_data) { - DBG("Received a GET request on %s\n", req_msg->resource_uri); bool presence_status; + int error = SMARTTHINGS_RESOURCE_ERROR_NONE; - if (req_msg->has_property_key(req_msg, PROP_VALUE)) { - get_presence_status(&presence_status); - resp_rep->set_bool_value(resp_rep, PROP_VALUE, presence_status); + get_presence_status(&presence_status); - return true; + error = smartthings_payload_set_bool(resp_payload, PROP_VALUE, presence_status); + if (error != SMARTTHINGS_RESOURCE_ERROR_NONE) { + _E("smartthings_payload_set_bool() failed, [%d]", error); + return false; } - return false; + + return true; } diff --git a/src/capability/capability_switch.c b/src/capability/capability_switch.c index ea12f9b..23fae2c 100644 --- a/src/capability/capability_switch.c +++ b/src/capability/capability_switch.c @@ -16,7 +16,7 @@ #include <stdio.h> #include <stdbool.h> -#include "st_things.h" +#include "smartthings_resource.h" #include "log.h" #define VALUE_STR_LEN_MAX 32 @@ -29,33 +29,44 @@ static char g_switch[VALUE_STR_LEN_MAX] = "off"; extern bool get_switch_status(void); extern void set_switch_status(bool status); -bool handle_get_request_on_resource_capability_switch_main_0(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); bool switch_status; + int error = SMARTTHINGS_RESOURCE_ERROR_NONE; - if (req_msg->has_property_key(req_msg, PROP_POWER)) { - switch_status = get_switch_status(); - if (switch_status == true) { - resp_rep->set_str_value(resp_rep, PROP_POWER, VALUE_SWITCH_ON); - } else { - resp_rep->set_str_value(resp_rep, PROP_POWER, VALUE_SWITCH_OFF); + switch_status = get_switch_status(); + if (switch_status == true) { + error = smartthings_payload_set_string(resp_payload, PROP_POWER, VALUE_SWITCH_ON); + if (error != SMARTTHINGS_RESOURCE_ERROR_NONE) { + _E("smartthings_payload_set_string() failed, [%d]", error); + return false; + } + } else { + error = smartthings_payload_set_string(resp_payload, PROP_POWER, VALUE_SWITCH_OFF); + 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_switch_main_0(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; + } /* 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; } @@ -68,11 +79,13 @@ bool handle_set_request_on_resource_capability_switch_main_0(st_things_set_reque set_switch_status(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; } diff --git a/src/distance-checker.c b/src/distance-checker.c index 13b8ce4..ecf7c3c 100644 --- a/src/distance-checker.c +++ b/src/distance-checker.c @@ -15,7 +15,9 @@ */ #include <service_app.h> -#include "st_things.h" +#include "smartthings.h" +#include "smartthings_resource.h" +#include "smartthings_payload.h" #include "log.h" #include <Ecore.h> #include <peripheral_io.h> @@ -25,7 +27,6 @@ #include <sys/time.h> #endif -#define JSON_PATH "device_def.json" #define VALUE_STR_LEN_MAX 32 #define EVENT_INTERVAL_SECOND 0.2f // periodic sensor event timer #define MUTEX_LOCK pthread_mutex_lock(&mutex_lock) @@ -41,6 +42,9 @@ static const char *RES_CAPABILITY_PRESENCESENSOR_MAIN_0 = "/capability/presenceS static const char *RES_CAPABILITY_SWITCH_MAIN_0 = "/capability/switch/main/0"; static const char *RES_CAPABILITY_ILLUMINANCEMEASUREMENT_MAIN_0 = "/capability/illuminanceMeasurement/main/0"; +static const char *PROP_ILLUMINANCE = "illuminance"; +static const char *PROP_VALUE = "value"; + static Ecore_Timer *distance_sensor_event_timer; static bool g_presence_status = false; static bool g_switch_status = false; @@ -50,6 +54,15 @@ static pthread_mutex_t mutex_lock = PTHREAD_MUTEX_INITIALIZER; static peripheral_gpio_h green_led_h = NULL; static peripheral_gpio_h red_led_h = NULL; +#define THING_RESOURCE_FILE_NAME "resource.json" + +static 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; + extern bool resource_read_distance_sensor(uint16_t *sensor_value); extern int resource_close_distance_sensor(void); extern int resource_write_led(peripheral_gpio_h handle, int write_value); @@ -57,11 +70,10 @@ extern void resource_close_led(peripheral_gpio_h handle); extern int resource_open_led(int gpio_pin, peripheral_gpio_h *handle); /* get and set request handlers */ -extern bool handle_get_request_on_resource_capability_switch_main_0(st_things_get_request_message_s* req_msg, st_things_representation_s* resp_rep); -extern bool handle_set_request_on_resource_capability_switch_main_0(st_things_set_request_message_s* req_msg, st_things_representation_s* resp_rep); -extern bool handle_get_request_on_resource_capability_illuminancemeasurement_main_0(st_things_get_request_message_s* req_msg, st_things_representation_s* resp_rep); -extern bool handle_get_request_on_resource_capability_presencesensor_main_0(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_illuminancemeasurement_main_0(smartthings_payload_h resp_payload, void *user_data); +extern bool handle_get_request_on_resource_capability_presencesensor_main_0(smartthings_payload_h resp_payload, void *user_data); bool get_switch_status(void) { @@ -117,16 +129,44 @@ static void set_presence_status(bool status) static void update_sensor_value(void) { bool status; + int error = SMARTTHINGS_RESOURCE_ERROR_NONE; + status = get_switch_status(); + if (status == true) { - #ifndef _DEBUG_PRINT_ uint16_t sensor_value = get_sensor_value(); + + #ifndef _DEBUG_PRINT_ struct timeval tv; gettimeofday(&tv, NULL); - INFO("[%d.%06d] distance : %d Cm", tv.tv_sec, tv.tv_usec, sensor_value); + _I("[%d.%06d] distance : %d Cm", tv.tv_sec, tv.tv_usec, sensor_value); #endif - st_things_notify_observers(RES_CAPABILITY_ILLUMINANCEMEASUREMENT_MAIN_0); + 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 = smartthings_payload_set_int(resp_payload, PROP_ILLUMINANCE, sensor_value); + if (error != SMARTTHINGS_RESOURCE_ERROR_NONE) { + _E("smartthings_payload_set_int() failed, [%d]", error); + return; + } + + error = smartthings_resource_notify(st_handle, RES_CAPABILITY_ILLUMINANCEMEASUREMENT_MAIN_0, resp_payload); + if (error != SMARTTHINGS_RESOURCE_ERROR_NONE) { + _E("smartthings_resource_notify() failed, [%d]", error); + return; + } + + if (smartthings_payload_destroy(resp_payload)) { + _E("smartthings_payload_destroy() failed"); + return; + } } } @@ -138,6 +178,7 @@ static void update_sensor_value(void) static void update_presence_status(bool status) { static bool present = false; + int error = SMARTTHINGS_RESOURCE_ERROR_NONE; if (present == status) { // same status, do nothing @@ -145,7 +186,7 @@ static void update_presence_status(bool status) } if (status == true) { - //INFO("Arrive - Red:ON, Green:OFF"); + //_I("Arrive - Red:ON, Green:OFF"); present = true; set_presence_status(present); @@ -154,7 +195,7 @@ static void update_presence_status(bool status) resource_write_led(red_led_h, LED_ON); } else { - //INFO("Leave - Red:OFF, Green:ON"); + //_I("Leave - Red:OFF, Green:ON"); present = false; set_presence_status(present); @@ -164,66 +205,36 @@ static void update_presence_status(bool status) } if (g_switch_status == true) { - st_things_notify_observers(RES_CAPABILITY_PRESENCESENSOR_MAIN_0); - INFO("notify presence status : %d", status); - } -} + smartthings_payload_h resp_payload = NULL; -/* 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); + // create response payload + error = smartthings_payload_create(&resp_payload); + if (error != SMARTTHINGS_RESOURCE_ERROR_NONE || !resp_payload) { + _E("smartthings_payload_create() failed, [%d]", error); + return; + } - if (0 == strcmp(req_msg->resource_uri, RES_CAPABILITY_SWITCH_MAIN_0)) { - return handle_get_request_on_resource_capability_switch_main_0(req_msg, resp_rep); - } - if (0 == strcmp(req_msg->resource_uri, RES_CAPABILITY_ILLUMINANCEMEASUREMENT_MAIN_0)) { - return handle_get_request_on_resource_capability_illuminancemeasurement_main_0(req_msg, resp_rep); - } - if (0 == strcmp(req_msg->resource_uri, RES_CAPABILITY_PRESENCESENSOR_MAIN_0)) { - return handle_get_request_on_resource_capability_presencesensor_main_0(req_msg, resp_rep); - } + // set response data into payload + error = smartthings_payload_set_bool(resp_payload, PROP_VALUE, status); + if (error != SMARTTHINGS_RESOURCE_ERROR_NONE) { + _E("smartthings_payload_set_bool() failed, [%d]", error); + return; + } - ERR("not supported uri"); - return false; -} + // send notification to cloud server + error = smartthings_resource_notify(st_handle, RES_CAPABILITY_PRESENCESENSOR_MAIN_0, resp_payload); + if (error != SMARTTHINGS_RESOURCE_ERROR_NONE) { + _E("smartthings_resource_notify() failed, [%d]", error); + return; + } -/* 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 (smartthings_payload_destroy(resp_payload)) { + _E("smartthings_payload_destroy() failed"); + return; + } - if (0 == strcmp(req_msg->resource_uri, RES_CAPABILITY_SWITCH_MAIN_0)) { - return handle_set_request_on_resource_capability_switch_main_0(req_msg, resp_rep); + _I("notify presence status : %d", status); } - - 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); } /* @@ -236,15 +247,22 @@ static Eina_Bool _distance_sensor_interval_event_cb(void *data) { uint16_t sensor_value; int ret = 0; - bool switch_status = false; // read sensor value ret = resource_read_distance_sensor(&sensor_value); if (ret != 0) { - ERR("invalid sensor value"); - // cancel periodic event timer operation - return ECORE_CALLBACK_CANCEL; + _E("invalid sensor value"); + return ECORE_CALLBACK_RENEW; } else { + if (st_things_status != SMARTTHINGS_STATUS_REGISTERED_TO_CLOUD) { + return ECORE_CALLBACK_RENEW; + } + + if (!st_handle) { + _D("st_handle is NULL"); + return ECORE_CALLBACK_RENEW; + } + // save sensor value set_sensor_value(sensor_value); update_sensor_value(); @@ -252,7 +270,7 @@ static Eina_Bool _distance_sensor_interval_event_cb(void *data) #ifndef _DEBUG_PRINT_ struct timeval tv; gettimeofday(&tv, NULL); - INFO("[%d.%06d] distance : %d Cm", tv.tv_sec, tv.tv_usec, sensor_value); + _I("[%d.%06d] distance : %d Cm", tv.tv_sec, tv.tv_usec, sensor_value); #endif // check if value is within MIN ~ MAX range @@ -261,13 +279,6 @@ static Eina_Bool _distance_sensor_interval_event_cb(void *data) } else { update_presence_status(false); } - - // send notification when switch is on state. - switch_status = get_switch_status(); - if (switch_status) { - // send notification to cloud server - st_things_notify_observers(RES_CAPABILITY_ILLUMINANCEMEASUREMENT_MAIN_0); - } } // reset event timer periodic return ECORE_CALLBACK_RENEW; @@ -275,7 +286,7 @@ static Eina_Bool _distance_sensor_interval_event_cb(void *data) void clear_timer_resource(void) { - INFO("clear_timer_resource..."); + _I("clear_timer_resource..."); if (distance_sensor_event_timer) { ecore_timer_del(distance_sensor_event_timer); distance_sensor_event_timer = NULL; @@ -289,104 +300,365 @@ void init_mutex(void) void deinit_mutex(void) { - INFO("deinit_mutex..."); + _I("deinit_mutex..."); pthread_mutex_destroy(&mutex_lock); } -bool init_user() +void _send_response_result_cb(smartthings_resource_error_e result, void *user_data) { - bool ret = true; + _D("app_control reply callback for send_response : result=[%d]", result); +} - init_mutex(); +void _notify_result_cb(smartthings_resource_error_e result, void *user_data) +{ + _D("app_control reply callback for notify : result=[%d]", result); +} - if (resource_open_led(GREEN_LED, &green_led_h) != 0) { - ERR("GREEN LED resource open failed"); +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) +{ + smartthings_payload_h resp_payload = NULL; + + smartthings_payload_create(&resp_payload); + if (!resp_payload) { + _E("Response payload is NULL"); + return; } - if (resource_open_led(RED_LED, &red_led_h) != 0) { - ERR("RED LED resource open failed"); + + bool result = false; + + if (req_type == SMARTTHINGS_RESOURCE_REQUEST_GET) { + if (0 == strncmp(uri, RES_CAPABILITY_SWITCH_MAIN_0, strlen(RES_CAPABILITY_SWITCH_MAIN_0))) { + result = handle_get_request_on_resource_capability_switch_main_0(resp_payload, user_data); + } + if (0 == strncmp(uri, RES_CAPABILITY_ILLUMINANCEMEASUREMENT_MAIN_0, strlen(RES_CAPABILITY_ILLUMINANCEMEASUREMENT_MAIN_0))) { + result = handle_get_request_on_resource_capability_illuminancemeasurement_main_0(resp_payload, user_data); + } + if (0 == strncmp(uri, RES_CAPABILITY_PRESENCESENSOR_MAIN_0, strlen(RES_CAPABILITY_PRESENCESENSOR_MAIN_0))) { + result = handle_get_request_on_resource_capability_presencesensor_main_0(resp_payload, user_data); + } + } else if (req_type == SMARTTHINGS_RESOURCE_REQUEST_SET) { + if (0 == strncmp(uri, RES_CAPABILITY_SWITCH_MAIN_0, strlen(RES_CAPABILITY_SWITCH_MAIN_0))) { + result = handle_set_request_on_resource_capability_switch_main_0(payload, resp_payload, user_data); + } + } else { + _E("Invalid request type"); + smartthings_payload_destroy(resp_payload); + return; } - distance_sensor_event_timer = ecore_timer_add(EVENT_INTERVAL_SECOND, _distance_sensor_interval_event_cb, NULL); - if (!distance_sensor_event_timer) { - ERR("Failed to add distance_sensor_event_timer"); - ret = false; + int error = SMARTTHINGS_RESOURCE_ERROR_NONE; + + 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); + return; } - return ret; + 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 (smartthings_payload_destroy(resp_payload) != 0) { + _E("smartthings_payload_destroy failed"); + } + + return; } -/* initialize */ -void init_thing() +static void _resource_connection_status_cb(smartthings_resource_h handle, smartthings_resource_connection_status_e status, void *user_data) { - FN_CALL; - static bool binitialized = false; - if (binitialized) { - DBG("Already initialized!!"); - return; + 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); } - bool easysetup_complete = false; + END; + return; +} - char app_json_path[128] = {0,}; - char *app_res_path = NULL; - char *app_data_path = NULL; +int init_resource_app() +{ + START; - app_res_path = app_get_resource_path(); - if (!app_res_path) { - ERR("app_res_path is NULL!!"); - return; + if (is_resource_init) { + _I("Already initialized!"); + return 0; } - app_data_path = app_get_data_path(); - if (!app_data_path) { - ERR("app_data_path is NULL!!"); - free(app_res_path); - return; + if (smartthings_resource_initialize(&st_handle, _resource_connection_status_cb, NULL) != 0) { + _E("smartthings_resource_initialize() is failed"); + goto _out; } - snprintf(app_json_path, sizeof(app_json_path), "%s/%s", app_res_path, JSON_PATH); + is_resource_init = true; - 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; + 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_resource_init = false; + + END; + return 0; +} + + +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); + st_things_status = 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; +} - free(app_res_path); - free(app_data_path); +static void _things_connection_status_cb(smartthings_h handle, smartthings_connection_status_e status, void *user_data) +{ + START; - if (0 != st_things_initialize(app_json_path, &easysetup_complete)) { - ERR("st_things_initialize() failed!!"); - return; + _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); } - binitialized = true; - init_user(); + END; + return; +} + +int init_master_app() +{ + START; + + if (is_init) { + _I("Already initialized!"); + END; + return 0; + } - DBG("easysetup_complete:[%d] ", easysetup_complete); + if (smartthings_initialize(&st_h, _things_connection_status_cb, NULL) != 0) { + _E("smartthings_initialize() is failed"); + goto _out; + } - 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); + is_init = true; - st_things_start(); + END; + return 0; - FN_END; +_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); + bool ret = true; - return true; + init_mutex(); + + if (resource_open_led(GREEN_LED, &green_led_h) != 0) { + _E("GREEN LED resource open failed"); + } + if (resource_open_led(RED_LED, &red_led_h) != 0) { + _E("RED LED resource open failed"); + } + + distance_sensor_event_timer = ecore_timer_add(EVENT_INTERVAL_SECOND, _distance_sensor_interval_event_cb, NULL); + if (!distance_sensor_event_timer) { + _E("Failed to add distance_sensor_event_timer"); + ret = false; + } + + return ret; } static void service_app_terminate(void *user_data) { - UNUSED(user_data); - // clear event timer resource clear_timer_resource(); @@ -403,20 +675,17 @@ static void service_app_terminate(void *user_data) 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; diff --git a/src/resource/resource_distance_sensor.c b/src/resource/resource_distance_sensor.c index 4772606..86ed54a 100644 --- a/src/resource/resource_distance_sensor.c +++ b/src/resource/resource_distance_sensor.c @@ -23,13 +23,13 @@ peripheral_i2c_h distance_sensor_h = NULL; -int resource_open_distance_sensor(void) +static int _open_distance_sensor(void) { int ret; // open i2c handle for I2C read/write if ((ret = peripheral_i2c_open(ARTIK_I2C_BUS, SRF02_ADDR, &distance_sensor_h)) != 0 ) { - ERR("peripheral_i2c_open() failed!![%d]", ret); + _E("peripheral_i2c_open() failed!![%d]", ret); return ret; } @@ -43,15 +43,14 @@ int resource_close_distance_sensor(void) if (distance_sensor_h != NULL) { // close i2c handle if ((ret = peripheral_i2c_close(distance_sensor_h)) != 0 ) { - ERR("peripheral_i2c_close() failed!![%d]", ret); + _E("peripheral_i2c_close() failed!![%d]", ret); } distance_sensor_h = NULL; } - INFO("resource_close_distance_sensor..."); + _I("resource_close_distance_sensor..."); return ret; } - int resource_read_distance_sensor(uint16_t *out_value) { int ret = PERIPHERAL_ERROR_NONE; @@ -60,8 +59,8 @@ int resource_read_distance_sensor(uint16_t *out_value) if (distance_sensor_h == NULL) { // open i2c handle for I2C read/write - if ((ret = peripheral_i2c_open(ARTIK_I2C_BUS, SRF02_ADDR, &distance_sensor_h)) != PERIPHERAL_ERROR_NONE ) { - ERR("peripheral_i2c_open() failed!![%d]", ret); + if ((ret = _open_distance_sensor()) != PERIPHERAL_ERROR_NONE ) { + _E("peripheral_i2c_open() failed!![%d]", ret); return ret; } } @@ -71,7 +70,7 @@ int resource_read_distance_sensor(uint16_t *out_value) // write mode command to sensor if ((ret = peripheral_i2c_write(distance_sensor_h, buf, 2)) != PERIPHERAL_ERROR_NONE) { - ERR("peripheral_i2c_write() failed!![%d]", ret); + _E("peripheral_i2c_write() failed!![%d]", ret); return ret; } @@ -80,13 +79,13 @@ int resource_read_distance_sensor(uint16_t *out_value) // Send the register to read from if ((ret = peripheral_i2c_write(distance_sensor_h, buf, 1)) != PERIPHERAL_ERROR_NONE) { - ERR("peripheral_i2c_write() failed!![%d]", ret); + _E("peripheral_i2c_write() failed!![%d]", ret); return ret; } // // Read back data into buf[] if ((ret = peripheral_i2c_read(distance_sensor_h, buf, 6)) != PERIPHERAL_ERROR_NONE) { - ERR("peripheral_i2c_read() failed!![%d]", ret); + _E("peripheral_i2c_read() failed!![%d]", ret); return ret; } else { /* @@ -105,7 +104,7 @@ int resource_read_distance_sensor(uint16_t *out_value) } #ifdef DEBUG - INFO("Range : %u Cm", range); + _I("Range : %u Cm", range); #endif *out_value = range; diff --git a/src/resource/resource_led.c b/src/resource/resource_led.c index 5618a22..66fbfcd 100644 --- a/src/resource/resource_led.c +++ b/src/resource/resource_led.c @@ -28,10 +28,10 @@ int resource_close_led(peripheral_gpio_h handle) { int ret = PERIPHERAL_ERROR_NONE; - INFO("LED is finishing..."); + _I("LED is finishing..."); ret = peripheral_gpio_close(handle); if (ret != PERIPHERAL_ERROR_NONE) { - ERR("peripheral_gpio_close failed"); + _E("peripheral_gpio_close failed"); } return ret; } @@ -40,15 +40,15 @@ int resource_open_led(int gpio_pin, peripheral_gpio_h *handle) { int ret = PERIPHERAL_ERROR_NONE; - INFO("LED(gpio_pin:%d) is opening...", gpio_pin); + _I("LED(gpio_pin:%d) is opening...", gpio_pin); ret = peripheral_gpio_open(gpio_pin, handle); if (ret != PERIPHERAL_ERROR_NONE) { - ERR("peripheral_gpio_open failed, ret=[%d]", ret); + _E("peripheral_gpio_open failed, ret=[%d]", ret); } ret = peripheral_gpio_set_direction(*handle, PERIPHERAL_GPIO_DIRECTION_OUT_INITIALLY_LOW); if (ret != PERIPHERAL_ERROR_NONE) { - ERR("peripheral_gpio_set_direction failed, ret=[%d]", ret); + _E("peripheral_gpio_set_direction failed, ret=[%d]", ret); } return ret; @@ -59,17 +59,17 @@ int resource_write_led(peripheral_gpio_h handle, int write_value) int ret = PERIPHERAL_ERROR_NONE; if (!handle) { - ERR("peripheral_gpio_open failed, ret=[%d]", ret); + _E("peripheral_gpio_open failed, ret=[%d]", ret); return -1; } ret = peripheral_gpio_write(handle, write_value); if (ret != PERIPHERAL_ERROR_NONE) { - ERR("peripheral_gpio_write failed, ret=[%d]", ret); + _E("peripheral_gpio_write failed, ret=[%d]", ret); return -1; } - //INFO("LED Value : %s", write_value ? "ON":"OFF"); + //_I("LED Value : %s", write_value ? "ON":"OFF"); return 0; } diff --git a/tizen-manifest.xml b/tizen-manifest.xml index 5421b63..352edf6 100644 --- a/tizen-manifest.xml +++ b/tizen-manifest.xml @@ -1,17 +1,21 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<manifest xmlns="http://tizen.org/ns/packages" api-version="4.0" package="org.example.distance" version="1.0.0"> +<manifest xmlns="http://tizen.org/ns/packages" api-version="5.0" package="org.example.distance50" version="1.0.0"> <profile name="iot-headless"/> - <service-application appid="org.example.distance" exec="distance" multiple="false" nodisplay="true" on-boot="true" taskmanage="false" type="capp"> - <label>distance</label> - <icon>distance.png</icon> + <service-application appid="org.example.distance50" exec="distance50" multiple="false" nodisplay="true" on-boot="true" taskmanage="false" type="capp"> + <label>distance50</label> + <icon>distance50.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/alarm.set</privilege> - <privilege>http://tizen.org/privilege/network.profile</privilege> + <privilege>http://tizen.org/privilege/softap</privilege> <privilege>http://tizen.org/privilege/peripheralio</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> |