Init a project 76/206676/1 gcamp
authorseof <seog814@gmail.com>
Thu, 23 May 2019 04:16:32 +0000 (13:16 +0900)
committerseof <seog814@gmail.com>
Thu, 23 May 2019 04:16:32 +0000 (13:16 +0900)
Change-Id: Ife60121e5e479b9fc7ad80a6f889ac19be7dc1e8

27 files changed:
.cproject [new file with mode: 0644]
.exportMap [new file with mode: 0644]
.project [new file with mode: 0644]
.tproject [new file with mode: 0644]
LICENSE.APLv2 [new file with mode: 0644]
inc/distance.h [new file with mode: 0644]
inc/log.h [new file with mode: 0644]
inc/resource.h [new file with mode: 0644]
inc/resource/resource_illuminance_sensor.h [new file with mode: 0644]
inc/resource/resource_illuminance_sensor_internal.h [new file with mode: 0644]
inc/resource/resource_led.h [new file with mode: 0644]
inc/resource/resource_led_internal.h [new file with mode: 0644]
inc/resource/resource_oled.h [new file with mode: 0644]
inc/resource/resource_oled_internal.h [new file with mode: 0644]
inc/resource_internal.h [new file with mode: 0644]
inc/sensor-data.h [new file with mode: 0644]
inc/st_things.h [new file with mode: 0644]
inc/st_things_types.h [new file with mode: 0644]
project_def.prop [new file with mode: 0644]
shared/res/distance.png [new file with mode: 0644]
src/lidar-sensor.c [new file with mode: 0644]
src/resource.c [new file with mode: 0644]
src/resource/resource_illuminance_sensor.c [new file with mode: 0644]
src/resource/resource_led.c [new file with mode: 0644]
src/resource/resource_oled.c [new file with mode: 0644]
src/sensor-data.c [new file with mode: 0644]
tizen-manifest.xml [new file with mode: 0644]

diff --git a/.cproject b/.cproject
new file mode 100644 (file)
index 0000000..e174765
--- /dev/null
+++ b/.cproject
@@ -0,0 +1,358 @@
+<?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.1560654178">
+                       <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="org.tizen.nativecore.config.sbi.gcc45.app.debug.1560654178" 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="distance" 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.1560654178" name="Debug" parent="org.tizen.nativecore.config.sbi.gcc45.app.debug">
+                                       <folderInfo id="org.tizen.nativecore.config.sbi.gcc45.app.debug.1560654178." name="/" resourcePath="">
+                                               <toolChain id="org.tizen.nativecore.toolchain.sbi.gcc45.app.debug.774352616" 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.1628589585" osList="linux,win32" superClass="org.tizen.nativeide.target.sbi.gnu.platform.base"/>
+                                                       <builder autoBuildTarget="all" buildPath="${workspace_loc:/distance}/Debug" enableAutoBuild="true" id="org.tizen.nativecore.target.sbi.gnu.builder.1475200105" 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.1336315288" name="Archiver" superClass="org.tizen.nativecore.tool.sbi.gnu.archiver"/>
+                                                       <tool command="clang++.exe" id="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler.361704919" name="C++ Compiler" superClass="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler">
+                                                               <option id="gnu.cpp.compiler.option.optimization.level.397913892" 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.1841145937" 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.418676123" name="-fPIC option" superClass="sbi.gnu.cpp.compiler.option.misc.pic.core" valueType="boolean"/>
+                                                               <option id="sbi.gnu.cpp.compiler.option.1538579148" 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.456978874" superClass="sbi.gnu.cpp.compiler.option.frameworks_inc.core" valueType="includePath">
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libxml2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appcore-agent&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appfw&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/base&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ckm&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/device&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dlog&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efl-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1/eina&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eo-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/gio-unix-2.0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/glib-2.0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/iotcon&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/iotjs&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/json-glib-1.0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/minizip&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/network&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/notification&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/rpc-port&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/storage&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/system&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/glib-2.0/include&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.cpp.compiler.option.frameworks_cflags.core.239867861" 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=&quot;${SBI_SYSROOT}&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="-mthumb"/>
+                                                               </option>
+                                                               <option id="gnu.cpp.compiler.option.include.paths.511928271" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
+                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/inc}&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.cpp.compiler.option.frameworks.core.1486014404" superClass="sbi.gnu.cpp.compiler.option.frameworks.core" valueType="userObjs">
+                                                                       <listOptionValue builtIn="false" value="Native_API"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.cpp.compiler.option.preprocessor.def.deprecation.984257680" 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.850558033" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
+                                                       </tool>
+                                                       <tool command="clang.exe" id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.1626862710" 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.408711205" 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.1455500882" 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.1565624103" name="-fPIC option" superClass="sbi.gnu.c.compiler.option.misc.pic.core" valueType="boolean"/>
+                                                               <option id="sbi.gnu.c.compiler.option.109775339" 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.661861810" superClass="sbi.gnu.c.compiler.option.frameworks_inc.core" valueType="includePath">
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libxml2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appcore-agent&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appfw&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/base&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ckm&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/device&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dlog&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efl-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1/eina&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eo-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/gio-unix-2.0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/glib-2.0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/iotcon&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/iotjs&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/json-glib-1.0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/minizip&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/network&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/notification&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/rpc-port&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/storage&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/system&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/glib-2.0/include&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.c.compiler.option.frameworks_cflags.core.2119009412" 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=&quot;${SBI_SYSROOT}&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="-mthumb"/>
+                                                               </option>
+                                                               <option id="gnu.c.compiler.option.include.paths.2123027308" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
+                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/inc}&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.c.compiler.option.frameworks.core.391938697" superClass="sbi.gnu.c.compiler.option.frameworks.core" valueType="userObjs">
+                                                                       <listOptionValue builtIn="false" value="Native_API"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.c.compiler.option.preprocessor.def.symbols.deprecation.819022565" 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.23562986" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
+                                                       </tool>
+                                                       <tool id="org.tizen.nativeide.tool.sbi.gnu.c.linker.base.1478538462" 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.176847531" name="C++ Linker" superClass="org.tizen.nativecore.tool.sbi.gnu.cpp.linker">
+                                                               <option defaultValue="false" id="sbi.gnu.cpp.link.option.strip.1321895281" 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.1137566279" 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.1786433741" 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.992281494" 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=&quot;${SBI_SYSROOT}&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="-Xlinker --version-script=&quot;${PROJ_PATH}/.exportMap&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="-L&quot;${SBI_SYSROOT}/usr/lib&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="$(RS_LIBRARIES)"/>
+                                                               </option>
+                                                               <option id="gnu.cpp.link.option.paths.393035231" superClass="gnu.cpp.link.option.paths" valueType="libPaths">
+                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/lib}&quot;"/>
+                                                               </option>
+                                                               <inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.1474614885" 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.600761983" name="Assembler" superClass="org.tizen.nativeapp.tool.sbi.gnu.assembler.base">
+                                                               <inputType id="cdt.managedbuild.tool.gnu.assembler.input.2051112355" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
+                                                       </tool>
+                                                       <tool id="org.tizen.nativecore.tool.fnmapgen.1973681559" name="C FN-Map Generator" superClass="org.tizen.nativecore.tool.fnmapgen"/>
+                                                       <tool id="org.tizen.nativecore.tool.fnmapgen.cpp.97291780" name="C++ FN-Map Generator" superClass="org.tizen.nativecore.tool.fnmapgen.cpp"/>
+                                                       <tool id="org.tizen.nativecore.tool.ast.1774092373" name="C Static Analyzer" superClass="org.tizen.nativecore.tool.ast"/>
+                                                       <tool id="org.tizen.nativecore.tool.ast.cpp.1329705201" name="C++ Static Analyzer" superClass="org.tizen.nativecore.tool.ast.cpp"/>
+                                                       <tool id="org.tizen.nativecore.tool.sbi.gnu.archiver.mergelib.1307616516" name="Archive Generator" superClass="org.tizen.nativecore.tool.sbi.gnu.archiver.mergelib"/>
+                                                       <tool id="org.tizen.nativecore.tool.sbi.po.compiler.1163534157" name="PO Resource Compiler" superClass="org.tizen.nativecore.tool.sbi.po.compiler"/>
+                                                       <tool id="org.tizen.nativecore.tool.sbi.edc.compiler.685717626" 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 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.1125298155">
+                       <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="org.tizen.nativecore.config.sbi.gcc45.app.release.1125298155" 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="distance" 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.1125298155" name="Release" parent="org.tizen.nativecore.config.sbi.gcc45.app.release">
+                                       <folderInfo id="org.tizen.nativecore.config.sbi.gcc45.app.release.1125298155." name="/" resourcePath="">
+                                               <toolChain id="org.tizen.nativecore.toolchain.sbi.gcc45.app.release.240470518" 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.1604793585" osList="linux,win32" superClass="org.tizen.nativeide.target.sbi.gnu.platform.base"/>
+                                                       <builder buildPath="${workspace_loc:/distance}/Release" id="org.tizen.nativecore.target.sbi.gnu.builder.2132148278" 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.123684046" name="Archiver" superClass="org.tizen.nativecore.tool.sbi.gnu.archiver"/>
+                                                       <tool command="clang++.exe" id="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler.557274967" name="C++ Compiler" superClass="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler">
+                                                               <option id="gnu.cpp.compiler.option.optimization.level.1322807278" 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.580895105" 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.810935675" name="-fPIC option" superClass="sbi.gnu.cpp.compiler.option.misc.pic.core" valueType="boolean"/>
+                                                               <option id="sbi.gnu.cpp.compiler.option.2012240133" 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.2050914031" superClass="sbi.gnu.cpp.compiler.option.frameworks_inc.core" valueType="includePath">
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libxml2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appcore-agent&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appfw&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/base&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ckm&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/device&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dlog&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efl-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1/eina&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eo-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/gio-unix-2.0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/glib-2.0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/iotcon&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/iotjs&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/json-glib-1.0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/minizip&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/network&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/notification&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/rpc-port&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/storage&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/system&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/glib-2.0/include&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.cpp.compiler.option.frameworks_cflags.core.410105683" 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=&quot;${SBI_SYSROOT}&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="-mthumb"/>
+                                                               </option>
+                                                               <option id="gnu.cpp.compiler.option.include.paths.951198116" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
+                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/inc}&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.cpp.compiler.option.frameworks.core.2052499508" superClass="sbi.gnu.cpp.compiler.option.frameworks.core" valueType="userObjs">
+                                                                       <listOptionValue builtIn="false" value="Native_API"/>
+                                                               </option>
+                                                               <inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.211838672" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
+                                                       </tool>
+                                                       <tool command="clang.exe" id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.1286251202" 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.1941414519" 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.1863089907" 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.547266416" name="-fPIC option" superClass="sbi.gnu.c.compiler.option.misc.pic.core" valueType="boolean"/>
+                                                               <option id="sbi.gnu.c.compiler.option.113049366" 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.1519875041" superClass="sbi.gnu.c.compiler.option.frameworks_inc.core" valueType="includePath">
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libxml2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appcore-agent&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appfw&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/base&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ckm&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/device&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dlog&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efl-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1/eina&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eo-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/gio-unix-2.0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/glib-2.0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/iotcon&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/iotjs&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/json-glib-1.0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/minizip&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/network&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/notification&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/rpc-port&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/storage&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/system&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/glib-2.0/include&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.c.compiler.option.frameworks_cflags.core.1227121558" 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=&quot;${SBI_SYSROOT}&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="-mthumb"/>
+                                                               </option>
+                                                               <option id="gnu.c.compiler.option.include.paths.331301604" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
+                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/inc}&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.c.compiler.option.frameworks.core.307000547" superClass="sbi.gnu.c.compiler.option.frameworks.core" valueType="userObjs">
+                                                                       <listOptionValue builtIn="false" value="Native_API"/>
+                                                               </option>
+                                                               <inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.712782346" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
+                                                       </tool>
+                                                       <tool id="org.tizen.nativeide.tool.sbi.gnu.c.linker.base.1351925430" 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.2133569283" name="C++ Linker" superClass="org.tizen.nativecore.tool.sbi.gnu.cpp.linker">
+                                                               <option defaultValue="true" id="sbi.gnu.cpp.link.option.strip.815936884" 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.1016352204" 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.752688507" 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.1336349919" 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=&quot;${SBI_SYSROOT}&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="-Xlinker --version-script=&quot;${PROJ_PATH}/.exportMap&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="-L&quot;${SBI_SYSROOT}/usr/lib&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="$(RS_LIBRARIES)"/>
+                                                               </option>
+                                                               <option id="gnu.cpp.link.option.paths.823730876" superClass="gnu.cpp.link.option.paths" valueType="libPaths">
+                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/lib}&quot;"/>
+                                                               </option>
+                                                               <inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.195870362" 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.694758669" name="Assembler" superClass="org.tizen.nativeapp.tool.sbi.gnu.assembler.base">
+                                                               <inputType id="cdt.managedbuild.tool.gnu.assembler.input.1131901700" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
+                                                       </tool>
+                                                       <tool id="org.tizen.nativecore.tool.fnmapgen.124949279" name="C FN-Map Generator" superClass="org.tizen.nativecore.tool.fnmapgen"/>
+                                                       <tool id="org.tizen.nativecore.tool.fnmapgen.cpp.346011842" name="C++ FN-Map Generator" superClass="org.tizen.nativecore.tool.fnmapgen.cpp"/>
+                                                       <tool id="org.tizen.nativecore.tool.ast.1447675537" name="C Static Analyzer" superClass="org.tizen.nativecore.tool.ast"/>
+                                                       <tool id="org.tizen.nativecore.tool.ast.cpp.674290411" name="C++ Static Analyzer" superClass="org.tizen.nativecore.tool.ast.cpp"/>
+                                                       <tool id="org.tizen.nativecore.tool.sbi.gnu.archiver.mergelib.283078124" name="Archive Generator" superClass="org.tizen.nativecore.tool.sbi.gnu.archiver.mergelib"/>
+                                                       <tool id="org.tizen.nativecore.tool.sbi.po.compiler.198792701" name="PO Resource Compiler" superClass="org.tizen.nativecore.tool.sbi.po.compiler"/>
+                                                       <tool id="org.tizen.nativecore.tool.sbi.edc.compiler.1550005144" 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 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="distance.org.tizen.nativecore.target.sbi.gcc45.app.2139274665" 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.1125298155">
+                       <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
+               </scannerConfigBuildInfo>
+               <scannerConfigBuildInfo instanceId="org.tizen.nativecore.config.sbi.gcc45.app.debug.1560654178">
+                       <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
+               </scannerConfigBuildInfo>
+       </storageModule>
+       <storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
+</cproject>
diff --git a/.exportMap b/.exportMap
new file mode 100644 (file)
index 0000000..de30516
--- /dev/null
@@ -0,0 +1,5 @@
+{
+       global: main;
+       _IO_*;
+       local: *;
+};
diff --git a/.project b/.project
new file mode 100644 (file)
index 0000000..63904b7
--- /dev/null
+++ b/.project
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>distance</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>1554345450339</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>1554345450354</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/.tproject b/.tproject
new file mode 100644 (file)
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>
diff --git a/LICENSE.APLv2 b/LICENSE.APLv2
new file mode 100644 (file)
index 0000000..d645695
--- /dev/null
@@ -0,0 +1,202 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   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.
diff --git a/inc/distance.h b/inc/distance.h
new file mode 100644 (file)
index 0000000..041e540
--- /dev/null
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2019 G.camp,
+ *
+ * Contact: Jin Seog Bang <seog814@gmail.com>
+ *
+ * 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 __distance_H__
+#define __distance_H__
+
+#include <dlog.h>
+
+#ifdef  LOG_TAG
+#undef  LOG_TAG
+#endif
+#define LOG_TAG "distance"
+
+
+#endif /* __distance_H__ */
diff --git a/inc/log.h b/inc/log.h
new file mode 100644 (file)
index 0000000..daa1b93
--- /dev/null
+++ b/inc/log.h
@@ -0,0 +1,107 @@
+/*
+ * Copyright (c) 2019 G.camp,
+ *
+ * Contact: Jin Seog Bang <seog814@gmail.com>
+ *
+ * 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 __POSITION_FINDER_SERVER_H__
+#define __POSITION_FINDER_SERVER_H__
+
+#include <dlog.h>
+
+#ifdef  LOG_TAG
+#undef  LOG_TAG
+#endif
+#define LOG_TAG "TT"
+
+#if !defined(_D)
+#define _D(fmt, arg...) dlog_print(DLOG_DEBUG, LOG_TAG, "[%s:%d] " fmt "\n", __func__, __LINE__, ##arg)
+#endif
+
+#if !defined(_D2)
+#define _D2(fmt, arg...) dlog_print(DLOG_DEBUG, "LIDAR", "[%s:%d] " fmt "\n", __func__, __LINE__, ##arg)
+#endif
+
+
+#if !defined(DBG)
+#define DBG(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 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; \
+       } \
+}
+
+
+
+#endif /* __POSITION_FINDER_SERVER_H__ */
diff --git a/inc/resource.h b/inc/resource.h
new file mode 100644 (file)
index 0000000..25fde2e
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2019 G.camp,
+ *
+ * Contact: Jin Seog Bang <seog814@gmail.com>
+ *
+ * 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 __POSITION_FINDER_RESOURCE_H__
+#define __POSITION_FINDER_RESOURCE_H__
+
+#include <peripheral_io.h>
+
+#include "resource_internal.h"
+#include "resource/resource_illuminance_sensor.h"
+#include "resource/resource_oled.h"
+#include "resource/resource_led.h"
+
+#endif /* __POSITION_FINDER_RESOURCE_H__ */
diff --git a/inc/resource/resource_illuminance_sensor.h b/inc/resource/resource_illuminance_sensor.h
new file mode 100644 (file)
index 0000000..37703c3
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2019 G.camp,
+ *
+ * Contact: Jin Seog Bang <seog814@gmail.com>
+ *
+ * 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 __POSITION_FINDER_RESOURCE_ILLUMINANCE_SENSOR_H__
+#define __POSITION_FINDER_RESOURCE_ILLUMINANCE_SENSOR_H__
+
+/**
+ * @brief Reads the value of i2c bus connected illuminance sensor.
+ * @param[in] i2c_bus The i2c bus number that the slave device is connected
+ * @param[out] out_value The value read by the illuminance sensor
+ * @return 0 on success, otherwise a negative error value
+ * @see If the i2c bus is not open, creates i2c handle before reading data from the i2c slave device.
+ */
+
+extern int resource_initial_LIDAR_sensor(int i2c_bus);
+
+extern int resource_two_read_set_LIDAR_sensor(int i2c_bus);
+
+extern int resource_read_LIDAR_sensor(int i2c_bus, uint32_t *out_value);
+
+#endif /* __POSITION_FINDER_RESOURCE_ILLUMINANCE_SENSOR_H__ */
+
diff --git a/inc/resource/resource_illuminance_sensor_internal.h b/inc/resource/resource_illuminance_sensor_internal.h
new file mode 100644 (file)
index 0000000..c009912
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2019 G.camp,
+ *
+ * Contact: Jin Seog Bang <seog814@gmail.com>
+ *
+ * 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 __POSITION_FINDER_RESOURCE_ILLUMINANCE_SENSOR_INTERNAL_H__
+#define __POSITION_FINDER_RESOURCE_ILLUMINANCE_SENSOR_INTERNAL_H__
+
+/**
+ * @brief Destory the i2c handle and changes the gpio pin state to the close(0).
+ */
+extern void resource_close_illuminance_sensor(void);
+
+extern void resource_close_initial_LIDAR_sensor(void);
+
+extern void resource_close_two_read_set_LIDAR_sensor(void);
+
+extern void resource_close_read_LIDAR_sensor(void);
+
+#endif /* __POSITION_FINDER_RESOURCE_ILLUMINANCE_SENSOR_INTERNAL_H__ */
+
diff --git a/inc/resource/resource_led.h b/inc/resource/resource_led.h
new file mode 100644 (file)
index 0000000..c295a1a
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2019 G.camp,
+ *
+ * Contact: Jin Seog Bang <seog814@gmail.com>
+ *
+ * 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 __POSITION_FINDER_RESOURCE_LED_H__
+#define __POSITION_FINDER_RESOURCE_LED_H__
+
+extern int resource_write_led(int pin_num, int write_value);
+
+extern void resource_close_led(int pin_num);
+
+#endif /* __POSITION_FINDER_RESOURCE_LED_H__ */
diff --git a/inc/resource/resource_led_internal.h b/inc/resource/resource_led_internal.h
new file mode 100644 (file)
index 0000000..baea205
--- /dev/null
@@ -0,0 +1,24 @@
+./*
+ * Copyright (c) 2019 G.camp,
+ *
+ * Contact: Jin Seog Bang <seog814@gmail.com>
+ *
+ * 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 __RCC_RESOURCE_LED_INTERNAL_H__
+#define __RCC_RESOURCE_LED_INTERNAL_H__
+
+extern void resource_close_led(int pin_num);
+
+#endif /* __RCC_RESOURCE_LED_INTERNAL_H__ */
diff --git a/inc/resource/resource_oled.h b/inc/resource/resource_oled.h
new file mode 100644 (file)
index 0000000..954550c
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2019 G.camp,
+ *
+ * Contact: Jin Seog Bang <seog814@gmail.com>
+ *
+ * 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 __RESOURCE_SERVO_MOTOR_H__
+#define __RESOURCE_SERVO_MOTOR_H__
+
+void resource_close_servo_motor(void);
+
+void resource_close_OLED(void);
+
+/**
+ * This module is sample codes to handling Servo motors in Tizen platform.
+ * Hardware is configured with HS-53,
+ * Bus : 0
+ * Pin : 2
+ * @param[in] duty_cycle_ms
+ * @return 0 on success, otherwise a negative error value
+  */
+int resource_set_servo_motor_value(double duty_cycle_ms);
+
+int resource_OLED_initial(int i2c_bus);
+
+int resource_OLED_disp_logo(int i2c_bus);
+
+#endif /* __RESOURCE_SERVO_MOTOR_H__ */
diff --git a/inc/resource/resource_oled_internal.h b/inc/resource/resource_oled_internal.h
new file mode 100644 (file)
index 0000000..95d500c
--- /dev/null
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2019 G.camp,
+ *
+ * Contact: Jin Seog Bang <seog814@gmail.com>
+ *
+ * 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 __RESOURCE_DISTANCE_SENSOR_INTERNAL_H__
+#define __RESOURCE_DISTANCE_SENSOR_INTERNAL_H__
+
+
+void resource_close_OLED(void);
+
+/**
+ * This module is sample codes to handling Servo motors in Tizen platform.
+ * Hardware is configured with HS-53,
+ * Bus : 0
+ * Pin : 2
+ * @param[in] duty_cycle_ms
+ * @return 0 on success, otherwise a negative error value
+  */
+
+
+#endif /* __RESOURCE_DISTANCE_SENSOR_INTERNAL_H__ */
diff --git a/inc/resource_internal.h b/inc/resource_internal.h
new file mode 100644 (file)
index 0000000..bab5e5d
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2019 G.camp,
+ *
+ * Contact: Jin Seog Bang <seog814@gmail.com>
+ *
+ * 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 __POSITION_FINDER_RESOURCE_INTERNAL_H__
+#define __POSITION_FINDER_RESOURCE_INTERNAL_H__
+
+#include <peripheral_io.h>
+
+#include "resource/resource_illuminance_sensor_internal.h"
+
+#include "resource/resource_oled_internal.h"
+
+#define PIN_MAX 40
+
+struct _resource_s {
+       int opened;
+       peripheral_gpio_h sensor_h;
+       void (*close) (int);
+};
+typedef struct _resource_s resource_s;
+
+typedef void (*resource_read_cb)(double value, void *data);
+
+struct _resource_read_cb_s {
+       resource_read_cb cb;
+       void *data;
+       int pin_num;
+};
+typedef struct _resource_read_cb_s resource_read_s;
+
+extern resource_s *resource_get_info(int pin_num);
+extern void resource_close_all(void);
+
+#endif /* __POSITION_FINDER_RESOURCE_INTERNAL_H__ */
diff --git a/inc/sensor-data.h b/inc/sensor-data.h
new file mode 100644 (file)
index 0000000..95ac8e6
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2019 G.camp,
+ *
+ * Contact: Jin Seog Bang <seog814@gmail.com>
+ *
+ * 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 __SENSOR_DATA_H__
+#define  __SENSOR_DATA_H__
+
+#include <stdbool.h>
+
+typedef enum {
+       SENSOR_DATA_TYPE_NONE = 0,
+       SENSOR_DATA_TYPE_INT,
+       SENSOR_DATA_TYPE_UINT,
+       SENSOR_DATA_TYPE_BOOL,
+       SENSOR_DATA_TYPE_DOUBLE,
+       SENSOR_DATA_TYPE_STR,
+} sensor_data_type_e;
+
+typedef struct __sensor_data_s sensor_data;
+
+sensor_data *sensor_data_new(sensor_data_type_e type);
+void sensor_data_free(sensor_data *data);
+
+int sensor_data_set_int(sensor_data *data, int value);
+int sensor_data_set_uint(sensor_data *data, unsigned int value);
+int sensor_data_set_bool(sensor_data *data, bool value);
+int sensor_data_set_double(sensor_data *data, double value);
+int sensor_data_set_string(sensor_data *data, const char *value, unsigned int size);
+
+int sensor_data_get_int(sensor_data *data, int *value);
+int sensor_data_get_uint(sensor_data *data, unsigned int *value);
+int sensor_data_get_bool(sensor_data *data, bool *value);
+int sensor_data_get_double(sensor_data *data, double *value);
+int sensor_data_get_string(sensor_data *data, const char **value);
+
+#endif /* __SENSOR_DATA_H__ */
diff --git a/inc/st_things.h b/inc/st_things.h
new file mode 100644 (file)
index 0000000..16f90ef
--- /dev/null
@@ -0,0 +1,299 @@
+/*
+ * Copyright (c) 2019 G.camp,
+ *
+ * Contact: Jin Seog Bang <seog814@gmail.com>
+ *
+ * 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
new file mode 100644 (file)
index 0000000..06f0675
--- /dev/null
@@ -0,0 +1,319 @@
+/*
+ * Copyright (c) 2019 G.camp,
+ *
+ * Contact: Jin Seog Bang <seog814@gmail.com>
+ *
+ * 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/project_def.prop b/project_def.prop
new file mode 100644 (file)
index 0000000..df430c3
--- /dev/null
@@ -0,0 +1,11 @@
+APPNAME = distance
+
+type = app
+profile = iot-headless-5.0
+
+USER_SRCS = src/distance.c
+USER_DEFS =
+USER_INC_DIRS = inc
+USER_OBJS =
+USER_LIBS =
+USER_EDCS =
diff --git a/shared/res/distance.png b/shared/res/distance.png
new file mode 100644 (file)
index 0000000..9765b1b
Binary files /dev/null and b/shared/res/distance.png differ
diff --git a/src/lidar-sensor.c b/src/lidar-sensor.c
new file mode 100644 (file)
index 0000000..1040f76
--- /dev/null
@@ -0,0 +1,363 @@
+/*
+ * Copyright (c) 2019 G.camp,
+ *
+ * Contact: Jin Seog Bang <seog814@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <tizen.h>
+#include <service_app.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <pthread.h>
+#include <unistd.h>
+#include <Ecore.h>
+
+#include "st_things.h"
+#include "log.h"
+#include "sensor-data.h"
+#include "resource.h"
+
+#define JSON_PATH "device_def.json"
+
+#define SENSOR_URI_ILLUMINANCE "/capability/illuminanceMeasurement/main/0"
+#define SENSOR_KEY_ILLUMINANCE "illuminance"
+#define SENSOR_KEY_RANGE "range"
+
+#define SENSOR_URI_DOOR "/capability/doorControl/main/0"
+#define SENSOR_KEY_DOOR "doorState"
+#define SENSOR_POWER_INITIALIZING BLIND_DOWN
+
+#define I2C_BUS_NUMBER (1)
+#define SENSOR_GATHER_INTERVAL (1.0f)
+
+
+// #define USE_ST_SDK
+
+typedef struct app_data_s {
+       Ecore_Timer *getter_illuminance;
+       sensor_data *illuminance_data;
+
+} app_data;
+
+static app_data *g_ad = NULL;
+
+static inline int __get_lidar(void *data, unsigned int *illuminance_value)
+{
+       int ret = 0;
+       unsigned int delay_usec = 20000; // 20mS delay
+       app_data *ad = data;
+
+       retv_if(!ad, -1);
+       retv_if(!ad->illuminance_data, -1);
+
+
+       ret = resource_initial_LIDAR_sensor(I2C_BUS_NUMBER);
+       retv_if(ret != 0, -1);
+       ret = resource_two_read_set_LIDAR_sensor(I2C_BUS_NUMBER);
+       retv_if(ret != 0, -1);
+       
+       usleep(delay_usec);
+        
+       ret = resource_read_LIDAR_sensor(I2C_BUS_NUMBER, illuminance_value);
+       retv_if(ret != 0, -1);
+
+       sensor_data_set_uint(ad->illuminance_data, *illuminance_value);
+       _D2("Distance value : %u", *illuminance_value);
+
+#ifdef USE_ST_SDK
+       st_things_notify_observers(SENSOR_URI_ILLUMINANCE);
+#endif
+
+       return 0;
+}
+
+static Eina_Bool __illuminance_to_lidar(void *data)
+{
+       int ret = 0;
+       unsigned int illuminance_value = 0;
+       uint32_t value = 1;
+       app_data *ad = data;
+       resource_write_led(26, value); //debug led on
+       if (!ad) {
+               _E("failed to get app_data");
+               service_app_exit();
+       }
+# if 1
+       if (!ad->illuminance_data) {
+               _E("failed to get illuminance_data");
+               service_app_exit();
+       }
+
+       ret = __get_lidar(ad, &illuminance_value);
+       retv_if(ret != 0, ECORE_CALLBACK_RENEW);
+#endif 
+       
+       return ECORE_CALLBACK_RENEW;
+}
+
+void gathering_stop(void *data)
+{
+       app_data *ad = data;
+
+       ret_if(!ad);
+
+       if (ad->getter_illuminance)
+               ecore_timer_del(ad->getter_illuminance);
+}
+
+void gathering_start(void *data)
+{
+       app_data *ad = data;
+
+       ret_if(!ad);
+
+       gathering_stop(ad);
+
+       ad->getter_illuminance = ecore_timer_add(SENSOR_GATHER_INTERVAL, __illuminance_to_lidar, ad);
+       if (!ad->getter_illuminance)
+               _E("Failed to add getter_illuminance");
+}
+
+#ifdef USE_ST_SDK
+static bool handle_reset_request(void)
+{
+       _D("Received a request for RESET.");
+       return false;
+}
+
+static void handle_reset_result(bool result)
+{
+       _D("Reset %s.\n", result ? "succeeded" : "failed");
+}
+
+static bool handle_ownership_transfer_request(void)
+{
+       _D("Received a request for Ownership-transfer.");
+       return true;
+}
+
+static void handle_things_status_change(st_things_status_e things_status)
+{
+       _D("Things status is changed: %d", things_status);
+
+       if (things_status == ST_THINGS_STATUS_REGISTERED_TO_CLOUD) {
+               ecore_main_loop_thread_safe_call_async(gathering_start, g_ad);
+       }
+}
+
+static bool handle_get_request(st_things_get_request_message_s* req_msg, st_things_representation_s* resp_rep)
+{
+       _D("resource_uri [%s]", req_msg->resource_uri);
+       retv_if(!g_ad, false);
+
+       if (0 == strcmp(req_msg->resource_uri, SENSOR_URI_ILLUMINANCE)) {
+               if (req_msg->has_property_key(req_msg, SENSOR_KEY_ILLUMINANCE)) {
+                       unsigned int value = 0;
+                       sensor_data_get_uint(g_ad->illuminance_data, &value);
+                       resp_rep->set_int_value(resp_rep, SENSOR_KEY_ILLUMINANCE, value);
+               }
+               return true;
+       // QUIZ
+       } else if (0 == strcmp(req_msg->resource_uri, SENSOR_URI_DOOR)) {
+               if (req_msg->has_property_key(req_msg, SENSOR_KEY_DOOR)) {
+                       const char *str = NULL;
+                       sensor_data_get_string(g_ad->power_data, &str);
+                       if (!str) {
+                               str = SENSOR_POWER_INITIALIZING;
+                       }
+                       resp_rep->set_str_value(resp_rep, SENSOR_KEY_DOOR, str);
+                       _D("Power : %s", str);
+               }
+               return true;
+       }
+       _E("not supported uri");
+       return false;
+}
+
+static bool handle_set_request(st_things_set_request_message_s* req_msg, st_things_representation_s* resp_rep)
+{
+       _D("resource_uri [%s]", req_msg->resource_uri);
+       retv_if(!g_ad, false);
+
+               // QUIZ
+               if (0 == strcmp(req_msg->resource_uri, SENSOR_URI_DOOR)) {
+               int ret = 0;
+               char *str = NULL;
+
+               if (req_msg->rep->get_str_value(req_msg->rep, SENSOR_KEY_DOOR, &str)) {
+                       retv_if(!str, false);
+                       _D("set [%s:%s] == %s", SENSOR_URI_DOOR, SENSOR_KEY_DOOR, str);
+
+                       sensor_data_set_string(g_ad->power_data, str, strlen(str));
+                       resp_rep->set_str_value(resp_rep, SENSOR_KEY_DOOR, str);
+
+                       if (0 == strcmp(str, "opening")) {
+                               ret = __set_servo_motor(g_ad, 1);
+                       } else {
+                               ret = __set_servo_motor(g_ad, 0);
+                       }
+                       free(str);
+                       retv_if(ret != 0, false);
+               } else {
+                       _E("cannot get a string value");
+               }
+
+               return true;
+       }
+       return false;
+}
+
+static int __st_things_init(void)
+{
+       bool easysetup_complete = false;
+       char app_json_path[128] = {'\0', };
+       char *app_res_path = NULL;
+       char *app_data_path = NULL;
+
+       app_res_path = app_get_resource_path();
+       if (!app_res_path) {
+               _E("app_res_path is NULL!!");
+               return -1;
+       }
+
+       app_data_path = app_get_data_path();
+       if (!app_data_path) {
+               _E("app_data_path is NULL!!");
+               free(app_res_path);
+               return -1;
+       }
+
+       snprintf(app_json_path, sizeof(app_json_path), "%s%s", app_res_path, JSON_PATH);
+
+       if (0 != st_things_set_configuration_prefix_path(app_res_path, app_data_path)) {
+               _E("st_things_set_configuration_prefix_path() failed!!");
+               free(app_res_path);
+               free(app_data_path);
+               return -1;
+       }
+
+       free(app_res_path);
+       free(app_data_path);
+
+       if (0 != st_things_initialize(app_json_path, &easysetup_complete)) {
+               _E("st_things_initialize() failed!!");
+               return -1;
+       }
+
+       _D("easysetup_complete:[%d] ", easysetup_complete);
+
+       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);
+
+       return 0;
+}
+
+static int __st_things_deinit(void)
+{
+       st_things_deinitialize();
+       return 0;
+}
+
+static int __st_things_start(void)
+{
+       st_things_start();
+       return 0;
+}
+
+static int __st_things_stop(void)
+{
+       st_things_stop();
+       return 0;
+}
+#endif /* USE_ST_SDK */
+
+static bool service_app_create(void *user_data)
+{
+       app_data *ad = (app_data *)user_data;
+
+       ad->illuminance_data = sensor_data_new(SENSOR_DATA_TYPE_UINT);
+       if (!ad->illuminance_data)
+               return false;
+       
+       resource_write_led(5, 1);
+       
+
+
+
+#ifdef USE_ST_SDK
+
+       resource_OLED_initial(I2C_BUS_NUMBER);
+       resource_OLED_disp_logo(I2C_BUS_NUMBER);
+
+       if (__st_things_init())
+               return false;
+#endif
+
+       return true;
+}
+
+static void service_app_control(app_control_h app_control, void *user_data)
+{
+#ifdef USE_ST_SDK
+       __st_things_start();
+#else
+       gathering_start(user_data);
+#endif
+}
+
+static void service_app_terminate(void *user_data)
+{
+       app_data *ad = (app_data *)user_data;
+
+       resource_write_led(5, 0);
+
+       resource_close_all();
+       resource_close_OLED();
+/*     
+       resource_close_initial_LIDAR_sensor();
+       resource_close_two_read_set_LIDAR_sensor();
+       resource_close_read_LIDAR_sensor();
+*/     
+#ifdef USE_ST_SDK
+       __st_things_stop();
+       __st_things_deinit();
+#else
+       gathering_stop(ad);
+#endif
+
+       sensor_data_free(ad->illuminance_data);
+       free(ad);
+}
+
+int main(int argc, char *argv[])
+{
+       app_data *ad = NULL;
+       service_app_lifecycle_callback_s event_callback;
+
+       ad = calloc(1, sizeof(app_data));
+       retv_if(!ad, -1);
+
+       g_ad = ad;
+
+       event_callback.create = service_app_create;
+       event_callback.terminate = service_app_terminate;
+       event_callback.app_control = service_app_control;
+
+       return service_app_main(argc, argv, &event_callback, ad);
+}
+
diff --git a/src/resource.c b/src/resource.c
new file mode 100644 (file)
index 0000000..4cea254
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2019 G.camp,
+ *
+ * Contact: Jin Seog Bang <seog814@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <peripheral_io.h>
+
+#include "log.h"
+#include "resource.h"
+
+static resource_s resource_info[PIN_MAX] = { {0, NULL, NULL}, };
+
+resource_s *resource_get_info(int pin_num)
+{
+       return &resource_info[pin_num];
+}
+
+void resource_close_all(void)
+{
+       int i = 0;
+       for (i = 0; i < PIN_MAX; i++) {
+               if (!resource_info[i].opened) continue;
+               _I("GPIO[%d] is closing...", i);
+
+               if (resource_info[i].close)
+                       resource_info[i].close(i);
+       }
+       
+       resource_close_initial_LIDAR_sensor();
+       resource_close_two_read_set_LIDAR_sensor();
+       resource_close_read_LIDAR_sensor();
+}
diff --git a/src/resource/resource_illuminance_sensor.c b/src/resource/resource_illuminance_sensor.c
new file mode 100644 (file)
index 0000000..6076961
--- /dev/null
@@ -0,0 +1,184 @@
+/*
+ * Copyright (c) 2019 G.camp,
+ *
+ * Contact: Jin Seog Bang <seog814@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <stdlib.h>
+#include <unistd.h>
+#include <peripheral_io.h>
+#include <sys/time.h>
+
+#include "log.h"
+#include "resource_internal.h"
+#include "resource.h"
+
+#define I2C_PIN_MAX 28
+/* I2C */
+#define LIDAR_V1_ADDRW 0x62
+#define LIDAR_V1_ADDRR 0x63
+#define LIDAR_CONSTANT_NUM (1.00)
+
+static struct {
+       int opened;
+       peripheral_i2c_h sensor_h;
+} resource_sensor_s;
+
+
+void resource_close_initial_LIDAR_sensor(void)
+{
+       if (!resource_sensor_s.opened)
+               return;
+
+       _I("initial_LIDAR_Sensor is finishing...");
+       peripheral_i2c_close(resource_sensor_s.sensor_h);
+       resource_sensor_s.opened = 0;
+}
+
+void resource_close_two_read_set_LIDAR_sensor(void)
+{
+       if (!resource_sensor_s.opened)
+               return;
+
+       _I("2 byte read_set LIDAR_Sensor is finishing...");
+       peripheral_i2c_close(resource_sensor_s.sensor_h);
+       resource_sensor_s.opened = 0;
+}
+
+void resource_close_read_LIDAR_sensor(void)
+{
+       if (!resource_sensor_s.opened)
+               return;
+
+       _I("2 byte read_LIDAR_Sensor is finishing...");
+       peripheral_i2c_close(resource_sensor_s.sensor_h);
+       resource_sensor_s.opened = 0;
+}
+
+int resource_initial_LIDAR_sensor(int i2c_bus)
+{
+       int ret = PERIPHERAL_ERROR_NONE;
+       static int write = 0;
+       unsigned char buf[10] = { 0, };
+       resource_write_led(5, 1); // debug led on
+       if (!resource_sensor_s.opened) {
+
+               ret = peripheral_i2c_open(i2c_bus, LIDAR_V1_ADDRW, &resource_sensor_s.sensor_h);
+
+               if (ret != PERIPHERAL_ERROR_NONE) {
+                       _E("i2c open error : %s", get_error_message(ret));
+
+                       return -1;
+               }
+               resource_sensor_s.opened = 1;
+               write = 0;
+       }
+       
+       buf[0] = 0x00;
+       buf[1] = 0x04;
+       
+       if (!write) {
+               ret = peripheral_i2c_write(resource_sensor_s.sensor_h, buf, 2);
+               if (ret != PERIPHERAL_ERROR_NONE) {
+                       _E("i2c write error : %s", get_error_message(ret));
+                       return -1;
+               }
+               write = 0;
+       }
+       _I("iic LIDAR control reset ... step ");        
+
+       buf[0] = 0x00;
+       buf[1] = 0x03;
+       
+       if (!write) {
+               ret = peripheral_i2c_write(resource_sensor_s.sensor_h, buf, 2);
+               if (ret != PERIPHERAL_ERROR_NONE) {
+                       _E("i2c write error : %s", get_error_message(ret));
+                       return -1;
+               }
+               write = 0;
+       }
+       _I("iic LIDAR control reset ... step ");
+
+       return 0;
+}
+
+int resource_two_read_set_LIDAR_sensor(int i2c_bus)
+{
+       int ret = PERIPHERAL_ERROR_NONE;
+       static int write = 0;
+       unsigned char buf[10] = { 0, }; 
+       
+       if (!resource_sensor_s.opened) {
+
+               ret = peripheral_i2c_open(i2c_bus, LIDAR_V1_ADDRW, &resource_sensor_s.sensor_h);
+               if (ret != PERIPHERAL_ERROR_NONE) {
+                       _E("i2c open error : %s", get_error_message(ret));
+
+                       return -1;
+               }
+               resource_sensor_s.opened = 1;
+               write = 0;
+       }       
+
+       buf[0] = 0x8f;  
+
+       if (!write) {
+               ret = peripheral_i2c_write(resource_sensor_s.sensor_h, buf, 1);
+               if (ret != PERIPHERAL_ERROR_NONE) {
+                       _E("i2c write error : %s", get_error_message(ret));
+                       return -1;
+               }
+               write = 0;
+       }
+
+       _I("iic LIDAR control 2byte read set .. step ");        
+       
+       return 0;
+}
+
+int resource_read_LIDAR_sensor(int i2c_bus, uint32_t *out_value)
+{
+       int ret = PERIPHERAL_ERROR_NONE;
+
+       unsigned char buf[10] = { 0, };
+
+       if (!resource_sensor_s.opened) {
+
+               ret = peripheral_i2c_open(i2c_bus, LIDAR_V1_ADDRR, &resource_sensor_s.sensor_h);
+               if (ret != PERIPHERAL_ERROR_NONE) {
+                       _E("i2c open error : %s", get_error_message(ret));
+                       return -1;
+               }
+               resource_sensor_s.opened = 1;
+       }
+
+// resource_write_led(5, 1); // debug led on
+
+       ret = peripheral_i2c_read(resource_sensor_s.sensor_h, buf, 2);
+
+       if (ret != PERIPHERAL_ERROR_NONE) {
+               _E("i2c read error : %s", get_error_message(ret));
+
+               return -1;
+       }
+
+       *out_value = (buf[0] << 8 | buf[1]) / LIDAR_CONSTANT_NUM;
+
+
+ resource_write_led(5, 0); // debug led off
+
+       return 0;
+}      
diff --git a/src/resource/resource_led.c b/src/resource/resource_led.c
new file mode 100644 (file)
index 0000000..2acde5c
--- /dev/null
@@ -0,0 +1,55 @@
+/* 
+ * Copyright (c) 2019 G.camp,
+ *
+ * Contact:    Jin Seog Bang <seog814@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <stdlib.h>
+#include <unistd.h>
+#include <peripheral_io.h>
+
+#include "log.h"
+#include "resource_internal.h"
+
+void resource_close_led(int pin_num)
+{
+       if (!resource_get_info(pin_num)->opened) return;
+
+       _I("LED is finishing...");
+       peripheral_gpio_close(resource_get_info(pin_num)->sensor_h);
+       resource_get_info(pin_num)->opened = 0;
+}
+
+int resource_write_led(int pin_num, int write_value)
+{
+       int ret = PERIPHERAL_ERROR_NONE;
+
+       if (!resource_get_info(pin_num)->opened) {
+               ret = peripheral_gpio_open(pin_num, &resource_get_info(pin_num)->sensor_h);
+               retv_if(!resource_get_info(pin_num)->sensor_h, -1);
+
+               ret = peripheral_gpio_set_direction(resource_get_info(pin_num)->sensor_h, PERIPHERAL_GPIO_DIRECTION_OUT_INITIALLY_LOW);
+               retv_if(ret != 0, -1);
+
+               resource_get_info(pin_num)->opened = 1;
+               resource_get_info(pin_num)->close = resource_close_led;
+       }
+
+       ret = peripheral_gpio_write(resource_get_info(pin_num)->sensor_h, write_value);
+       retv_if(ret < 0, -1);
+
+       _D("LED Value : %s", write_value ? "ON":"OFF");
+       return 0;
+}
diff --git a/src/resource/resource_oled.c b/src/resource/resource_oled.c
new file mode 100644 (file)
index 0000000..608403f
--- /dev/null
@@ -0,0 +1,334 @@
+/*
+ * Copyright (c) 2019 G.camp,
+ *
+ * Contact: Jin Seog Bang <seog814@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <peripheral_io.h>
+#include "log.h"
+#include "resource.h"
+
+/* I2C */
+#define SSD1306_ADDR 0x03c /* Address of SSD1306 OLED */
+
+static struct {
+       int opened;
+       peripheral_i2c_h sensor_h;
+} resource_sensor_s1;
+
+void resource_close_OLED(void)
+{
+       if (!resource_sensor_s1.opened)
+               return;
+
+       _I("OLED display is finishing...");
+       peripheral_i2c_close(resource_sensor_s1.sensor_h);
+       resource_sensor_s1.opened = 0;
+}
+
+int resource_OLED_initial(int i2c_bus)
+{
+       int ret = PERIPHERAL_ERROR_NONE;
+       static int write = 0;
+       unsigned char buff_count ;
+       unsigned char page_count;
+       unsigned char buf[10] = { 0, };
+       unsigned char tcbuf[10] = { 0, };
+       unsigned char tmbuf[30] = { 0xae, 0xd5, 0x80, 0xa8, 0x3f, 
+                                                               0xd3, 0x00, 0x40, 0x8d, 0x14,
+                                                               0x20, 0x00, 0xda, 0x12, 0x81,
+                                                               0x9f, 0xd9, 0x22, 0xdb, 0x40,
+                                                               0xa4, 0xa6, 0xaf};
+
+       if (!resource_sensor_s1.opened) {
+               
+               ret = peripheral_i2c_open(i2c_bus, SSD1306_ADDR, &resource_sensor_s1.sensor_h);
+               if (ret != PERIPHERAL_ERROR_NONE) {
+                       _E("i2c open error OLED1 : %s", get_error_message(ret));
+                        
+                       return -1;
+               }
+               resource_sensor_s1.opened = 1;
+               write = 0;
+       }
+
+//      buf[0] = 0x00; // OLED control command
+//      buf[1] = 0xae; // OLED command
+
+#if 1
+       for (buff_count = 0; buff_count < 24; buff_count++)
+       {       
+               if (!write) {
+                       buf[0] = 0x00;
+                       buf[1] = tmbuf[buff_count];
+
+                       ret = peripheral_i2c_write(resource_sensor_s1.sensor_h, buf, 2);
+                       if (ret != PERIPHERAL_ERROR_NONE) {
+                               _E("i2c write error OLED : %s", get_error_message(ret));
+                               return -1;
+                       }
+                       write = 0;      //write = 1;???
+               }
+       
+               _I("iic OLED control initial .. step ");
+       }
+#endif 
+
+#if 1
+       buf[0] = 0x20;
+       buf[1] = 0x10;
+       for (buff_count = 0; buff_count < 2; buff_count++)
+       {
+               if (!write) {
+                       buf[0] = 0x00;
+                       buf[1] = tcbuf[buff_count];
+                       ret = peripheral_i2c_write(resource_sensor_s1.sensor_h, buf, 2);
+                       if (ret != PERIPHERAL_ERROR_NONE) {
+                               _E("i2c write error OLED 1: %s", get_error_message(ret));
+
+                               return -1;
+                       }
+                       write = 0;      //write = 1;???
+               }
+       }
+
+       _I("iic OLED control pageaddr .. step ");
+#endif
+
+#if 1
+       tcbuf[0] = 0x21;
+       tcbuf[1] = 0x00;
+       tcbuf[2] = 0x7f;
+       for (buff_count = 0; buff_count < 3; buff_count++)
+       {
+               if (!write) {
+                       buf[0] = 0x00;
+                       buf[1] = tcbuf[buff_count];
+                       ret = peripheral_i2c_write(resource_sensor_s1.sensor_h, buf, 2);
+                       if (ret != PERIPHERAL_ERROR_NONE) {
+                               _E("i2c write error OLED 2: %s", get_error_message(ret));
+                               return -1;
+                       }
+                       write = 0;      //write = 1;???
+
+               }
+       }
+       _I("iic OLED control columnaddr .. step ");
+#endif
+
+#if 0  
+       buf[0] = 0x22;
+       buf[1] = 0x00;
+       buf[2] = 0x00;
+       for (buff_count = 0; buff_count < 3; buff_count++)
+       {       
+               if (!write) {
+                       buf[0] = 0x00;
+                       buf[1] = tcbuf[buff_count];
+                       ret = peripheral_i2c_write(resource_sensor_s1.sensor_h, buf, 2);
+                       if (ret != PERIPHERAL_ERROR_NONE) {
+                               _E("i2c write error OLED 3: %s", get_error_message(ret));
+                               return -1;
+                       }
+                       write = 0;      //write = 1;???
+               }
+       }
+       _I("iic OLED control pageaddr .. step ");
+#endif
+
+#if 1
+       for (page_count = 0; page_count < 8; page_count ++)
+       {
+               tcbuf[0] = (0xb0 + page_count);
+               buff_count = 0;
+                       if (!write) {
+                               buf[0] = 0x00;
+                               buf[1] = tcbuf[buff_count];
+                               ret = peripheral_i2c_write(resource_sensor_s1.sensor_h, buf, 2);
+                               if (ret != PERIPHERAL_ERROR_NONE) {
+                                       _E("i2c write error OLED 4: %s", get_error_message(ret));
+                                       return -1;
+                               }
+                       write = 0;      //write = 1;???
+                       }
+                       _I("iic OLED control pageaddr .. step ");
+
+
+               for (buff_count = 0; buff_count < 128; buff_count++)
+               {       
+                       if (!write) {
+                               buf[0] = 0x40;
+                               buf[1] = 0x00;
+                       
+                               ret = peripheral_i2c_write(resource_sensor_s1.sensor_h, buf, 2);
+                               if (ret != PERIPHERAL_ERROR_NONE) {
+                                       _E("i2c write error OLED 5 : %s", get_error_message(ret));
+                                       return -1;
+                               }
+                               write = 0;      //write = 1;???
+                       }
+                       _I("iic OLED data .. step ");
+               
+               }
+       }
+#endif 
+
+       return 0;
+}
+
+int resource_OLED_disp_logo(int i2c_bus)
+{
+       int ret = PERIPHERAL_ERROR_NONE;
+       static int write = 0;
+       unsigned char buff_count ;
+       unsigned char page_count;
+       unsigned char buf[10] = { 0, };
+       unsigned char tcbuf[10] = { 0, };
+       unsigned char font_G_l[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                                                               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                                                               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                                                               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                                                               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                                                               0x00, 0x1f, 0x20, 0x20, 0x20, 0x20, 0x1f, 0x00, // G font 
+                                                               0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, // - font
+                                                               0x00, 0x1f, 0x20, 0x20, 0x20, 0x20, 0x10, 0x00, // C font
+                                                               0x00, 0x3f, 0x01, 0x01, 0x01, 0x01, 0x3f, 0x00, // A font
+                                                               0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, // M font
+                                                               0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // P font
+                                                               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                                                               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                                                               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                                                               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};        
+       unsigned char font_G_h[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                                                               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                                                               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                                                               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                                                               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                                                               0x00, 0xf8, 0x04, 0x04, 0x84, 0x84, 0x88, 0x00,
+                                                               0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00,
+                                                               0x00, 0xf8, 0x04, 0x04, 0x04, 0x04, 0x08, 0x00,
+                                                               0x00, 0xc0, 0x30, 0x0c, 0x0c, 0x30, 0xc0, 0x00,
+                                                               0x00, 0xfc, 0x08, 0x70, 0x70, 0x08, 0xfc, 0x00,
+                                                               0x00, 0xfc, 0x84, 0x84, 0x84, 0x84, 0x78, 0x00,
+                                                               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                                                               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                                                               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                                                               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
+       
+// resource_write_led(5, 1);
+
+
+       tcbuf[0] = 0x21;
+       tcbuf[1] = 0x00;
+       tcbuf[2] = 0x7f;
+       for (buff_count = 0; buff_count < 3; buff_count++)
+       {
+               if (!write) {
+                       buf[0] = 0x00;
+                       buf[1] = tcbuf[buff_count];
+                       ret = peripheral_i2c_write(resource_sensor_s1.sensor_h, buf, 2);
+                       if (ret != PERIPHERAL_ERROR_NONE) {
+                               _E("i2c write error OLED 2: %s", get_error_message(ret));
+                               return -1;
+                       }
+                       write = 0;      //write = 1;???
+               }
+       }       
+       _I("iic OLED control columnaddr .. step ");
+       
+               page_count = 2;
+               tcbuf[0] = (0xb0 + page_count);
+               buff_count = 0;
+                       if (!write) {
+                               buf[0] = 0x00;
+                               buf[1] = tcbuf[buff_count];
+                               ret = peripheral_i2c_write(resource_sensor_s1.sensor_h, buf, 2);
+                               if (ret != PERIPHERAL_ERROR_NONE) {
+                                       _E("i2c write error OLED 6: %s", get_error_message(ret));
+                                       return -1;
+                               }
+                       write = 0;      //write = 1;???
+                       }
+                       _I("iic OLED logo disp high pageaddr .. step ");
+
+
+               for (buff_count = 0; buff_count < 135; buff_count++)
+               {       
+                       if (!write) {
+                               buf[0] = 0x40;
+                               buf[1] = font_G_h[buff_count];
+                       
+                               ret = peripheral_i2c_write(resource_sensor_s1.sensor_h, buf, 2);
+                               if (ret != PERIPHERAL_ERROR_NONE) {
+                                       _E("i2c write error OLED 7 : %s", get_error_message(ret));
+                                       return -1;
+                               }
+                               write = 0;      //write = 1;???
+                       }
+                       _I("iic OLED logo font high data .. step ");
+               
+               }
+               
+       tcbuf[0] = 0x21;
+       tcbuf[1] = 0x00;
+       tcbuf[2] = 0x7e;
+       for (buff_count = 0; buff_count < 3; buff_count++)
+       {
+               if (!write) {
+                       buf[0] = 0x00;
+                       buf[1] = tcbuf[buff_count];
+                       ret = peripheral_i2c_write(resource_sensor_s1.sensor_h, buf, 2);
+                       if (ret != PERIPHERAL_ERROR_NONE) {
+                               _E("i2c write error OLED 2: %s", get_error_message(ret));
+                               return -1;
+                       }
+                       write = 0;      //write = 1;???
+               }
+       }       
+       _I("iic OLED control columnaddr .. step ");
+       
+               page_count = 3;
+               tcbuf[0] = (0xb0 + page_count );
+               buff_count = 0;
+                       if (!write) {
+                               buf[0] = 0x00;
+                               buf[1] = tcbuf[buff_count];
+                               ret = peripheral_i2c_write(resource_sensor_s1.sensor_h, buf, 2);
+                               if (ret != PERIPHERAL_ERROR_NONE) {
+                                       _E("i2c write error OLED 6: %s", get_error_message(ret));
+                                       return -1;
+                               }
+                       write = 0;      //write = 1;???
+                       }
+                       _I("iic OLED logo disp low pageaddr .. step ");
+                       
+                                       for (buff_count = 0; buff_count < 135; buff_count++)
+               {       
+                       if (!write) {
+                               buf[0] = 0x40;
+                               buf[1] = font_G_l[buff_count];
+                       
+                               ret = peripheral_i2c_write(resource_sensor_s1.sensor_h, buf, 2);
+                               if (ret != PERIPHERAL_ERROR_NONE) {
+                                       _E("i2c write error OLED 7 : %s", get_error_message(ret));
+                                       return -1;
+                               }
+                               write = 0;      //write = 1;???
+                       }
+                       _I("iic OLED logo font high data .. step ");
+               
+               }
+       return 0;
+}
diff --git a/src/sensor-data.c b/src/sensor-data.c
new file mode 100644 (file)
index 0000000..fb29ac5
--- /dev/null
@@ -0,0 +1,195 @@
+/*
+ * Copyright (c) 2019 G.camp,
+ *
+ * Contact: Jin Seog Bang <seog814@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <stdlib.h>
+#include <pthread.h>
+#include "log.h"
+#include "sensor-data.h"
+
+struct __sensor_data_s {
+       sensor_data_type_e type;
+       union {
+               int int_val;
+               unsigned int uint_val;
+               bool b_val;
+               double d_val;
+               char *str_val;
+       } value;
+       pthread_mutex_t mutex;
+};
+
+sensor_data *sensor_data_new(sensor_data_type_e type)
+{
+       sensor_data *data = NULL;
+       retv_if(type == SENSOR_DATA_TYPE_NONE, NULL);
+
+       data = calloc(1, sizeof(sensor_data));
+       retv_if(!data, NULL);
+
+       data->type = type;
+       pthread_mutex_init(&data->mutex, NULL);
+
+       return data;
+}
+
+void sensor_data_free(sensor_data *data)
+{
+       ret_if(!data);
+
+       if (data->type == SENSOR_DATA_TYPE_STR) {
+               pthread_mutex_lock(&data->mutex);
+               free(data->value.str_val);
+               data->value.str_val = NULL;
+               pthread_mutex_unlock(&data->mutex);
+       }
+       pthread_mutex_destroy(&data->mutex);
+
+       free(data);
+}
+
+int sensor_data_set_int(sensor_data *data, int value)
+{
+       retv_if(!data, -1);
+       retv_if(data->type != SENSOR_DATA_TYPE_INT, -1);
+
+       pthread_mutex_lock(&data->mutex);
+       data->value.int_val = value;
+       pthread_mutex_unlock(&data->mutex);
+
+       return 0;
+}
+
+int sensor_data_set_uint(sensor_data *data, unsigned int value)
+{
+       retv_if(!data, -1);
+       retv_if(data->type != SENSOR_DATA_TYPE_UINT, -1);
+
+       pthread_mutex_lock(&data->mutex);
+       data->value.uint_val = value;
+       pthread_mutex_unlock(&data->mutex);
+
+       return 0;
+}
+
+int sensor_data_set_bool(sensor_data *data, bool value)
+{
+       retv_if(!data, -1);
+       retv_if(data->type != SENSOR_DATA_TYPE_BOOL, -1);
+
+       pthread_mutex_lock(&data->mutex);
+       data->value.b_val = value;
+       pthread_mutex_unlock(&data->mutex);
+
+       return 0;
+}
+
+int sensor_data_set_double(sensor_data *data, double value)
+{
+       retv_if(!data, -1);
+       retv_if(data->type != SENSOR_DATA_TYPE_DOUBLE, -1);
+
+       pthread_mutex_lock(&data->mutex);
+       data->value.d_val = value;
+       pthread_mutex_unlock(&data->mutex);
+
+       return 0;
+}
+
+int sensor_data_set_string(sensor_data *data, const char *value, unsigned int size)
+{
+       char *temp = NULL;
+       retv_if(!data, -1);
+       retv_if(data->type != SENSOR_DATA_TYPE_STR, -1);
+       retv_if(!value, -1);
+       retv_if(size == 0, -1);
+
+       temp = strndup(value, size);
+       retv_if(!temp, -1);
+
+       pthread_mutex_lock(&data->mutex);
+       free(data->value.str_val);
+       data->value.str_val = temp;
+       pthread_mutex_unlock(&data->mutex);
+
+       return 0;
+}
+
+int sensor_data_get_int(sensor_data *data, int *value)
+{
+       retv_if(!data, -1);
+       retv_if(!value, -1);
+       retv_if(data->type != SENSOR_DATA_TYPE_INT, -1);
+
+       pthread_mutex_lock(&data->mutex);
+       *value = data->value.int_val;
+       pthread_mutex_unlock(&data->mutex);
+
+       return 0;
+}
+
+int sensor_data_get_uint(sensor_data *data, unsigned int *value)
+{
+       retv_if(!data, -1);
+       retv_if(!value, -1);
+       retv_if(data->type != SENSOR_DATA_TYPE_UINT, -1);
+
+       pthread_mutex_lock(&data->mutex);
+       *value = data->value.uint_val;
+       pthread_mutex_unlock(&data->mutex);
+
+       return 0;
+}
+
+int sensor_data_get_bool(sensor_data *data, bool *value)
+{
+       retv_if(!data, -1);
+       retv_if(!value, -1);
+       retv_if(data->type != SENSOR_DATA_TYPE_BOOL, -1);
+
+       pthread_mutex_lock(&data->mutex);
+       *value = data->value.b_val;
+       pthread_mutex_unlock(&data->mutex);
+
+       return 0;
+}
+
+int sensor_data_get_double(sensor_data *data, double *value)
+{
+       retv_if(!data, -1);
+       retv_if(!value, -1);
+       retv_if(data->type != SENSOR_DATA_TYPE_DOUBLE, -1);
+
+       pthread_mutex_lock(&data->mutex);
+       *value = data->value.d_val;
+       pthread_mutex_unlock(&data->mutex);
+
+       return 0;
+}
+
+int sensor_data_get_string(sensor_data *data, const char **value)
+{
+       retv_if(!data, -1);
+       retv_if(!value, -1);
+       retv_if(data->type != SENSOR_DATA_TYPE_STR, -1);
+
+       pthread_mutex_lock(&data->mutex);
+       *value = data->value.str_val;
+       pthread_mutex_unlock(&data->mutex);
+
+       return 0;
+}
diff --git a/tizen-manifest.xml b/tizen-manifest.xml
new file mode 100644 (file)
index 0000000..5c96e57
--- /dev/null
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<manifest xmlns="http://tizen.org/ns/packages" api-version="5.0" package="org.example.distance" version="1.0.0">
+    <profile name="iot-headless"/>
+    <service-application appid="org.example.distance" auto-restart="false" exec="distance" multiple="false" nodisplay="true" on-boot="false" taskmanage="false" type="capp">
+        <label>distance</label>
+        <icon>distance.png</icon>
+    </service-application>
+    <privileges>
+        <privilege>http://tizen.org/privilege/network.get</privilege>
+        <privilege>http://tizen.org/privilege/network.set</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/peripheralio</privilege>
+    </privileges>
+</manifest>