From 08ebb1c62757a4d4e7447c0394b68ecce5eedf08 Mon Sep 17 00:00:00 2001 From: BoYeoN SoN Date: Sat, 21 Sep 2019 11:24:25 +0900 Subject: [PATCH] Init master branch with timer code Change-Id: I933880fde7fd667f43876d45bc905743eafdb773 --- .cproject | 643 ++++++++++++++++++++++++++++++++ .exportMap | 5 + .gitignore | 8 + .project | 52 +++ .tproject | 12 + LICENSE.APLv2 | 202 ++++++++++ NOTICE | 3 + basic-interrupted | 1 - basic-timer | 1 - inc/log.h | 97 +++++ inc/resource/resource_infrared_motion.h | 51 +++ inc/resource/resource_led.h | 34 ++ lib/libst_thing_master_api.so | Bin 0 -> 111204 bytes lib/libst_thing_resource_api.so | Bin 0 -> 72524 bytes project_def.prop | 11 + shared/res/icon.png | Bin 0 -> 57662 bytes shared/res/master.json | 18 + shared/res/resource.json | 52 +++ src/controller.c | 122 ++++++ src/resource/resource_infrared_motion.c | 195 ++++++++++ src/resource/resource_led.c | 101 +++++ tizen-manifest.xml | 15 + 22 files changed, 1621 insertions(+), 2 deletions(-) create mode 100644 .cproject create mode 100755 .exportMap create mode 100644 .gitignore create mode 100644 .project create mode 100644 .tproject create mode 100755 LICENSE.APLv2 create mode 100755 NOTICE delete mode 160000 basic-interrupted delete mode 160000 basic-timer create mode 100644 inc/log.h create mode 100755 inc/resource/resource_infrared_motion.h create mode 100755 inc/resource/resource_led.h create mode 100644 lib/libst_thing_master_api.so create mode 100644 lib/libst_thing_resource_api.so create mode 100644 project_def.prop create mode 100644 shared/res/icon.png create mode 100644 shared/res/master.json create mode 100644 shared/res/resource.json create mode 100755 src/controller.c create mode 100755 src/resource/resource_infrared_motion.c create mode 100755 src/resource/resource_led.c create mode 100644 tizen-manifest.xml diff --git a/.cproject b/.cproject new file mode 100644 index 0000000..65556d0 --- /dev/null +++ b/.cproject @@ -0,0 +1,643 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.exportMap b/.exportMap new file mode 100755 index 0000000..de30516 --- /dev/null +++ b/.exportMap @@ -0,0 +1,5 @@ +{ + global: main; + _IO_*; + local: *; +}; diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5f489ce --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +/Debug/ +/SA_Report/ +/.sign/ +/res/certificate.pem +/res/privatekey.der +/crash-info/ +/.package-stamp +/res/ diff --git a/.project b/.project new file mode 100644 index 0000000..1bffd91 --- /dev/null +++ b/.project @@ -0,0 +1,52 @@ + + + smart-light-basic-timer + + + + + + org.tizen.nativecore.apichecker.apicheckerbuilder + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + org.tizen.nativecore.apichecker.apicheckernature + + + + 0 + + 26 + + org.eclipse.ui.ide.multiFilter + 1.0-projectRelativePath-matches-false-false-*/.tpk + + + + 0 + + 6 + + org.eclipse.ui.ide.multiFilter + 1.0-name-matches-false-false-project_def.prop + + + + diff --git a/.tproject b/.tproject new file mode 100644 index 0000000..7bd616a --- /dev/null +++ b/.tproject @@ -0,0 +1,12 @@ + + + + + iot-headless-5.0 + + + + + + + diff --git a/LICENSE.APLv2 b/LICENSE.APLv2 new file mode 100755 index 0000000..d645695 --- /dev/null +++ b/LICENSE.APLv2 @@ -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/NOTICE b/NOTICE new file mode 100755 index 0000000..ba98e27 --- /dev/null +++ b/NOTICE @@ -0,0 +1,3 @@ +Copyright (c) 2018 Samsung Electronics Co., Ltd. All rights reserved. +Except as noted, this software is licensed under Apache License, Version 2. +Please, see the LICENSE.APLv2 file for Apache License, Version 2 terms and conditions. diff --git a/basic-interrupted b/basic-interrupted deleted file mode 160000 index 71be3d8..0000000 --- a/basic-interrupted +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 71be3d8daf587a2a5221dcda7d16227577bd8578 diff --git a/basic-timer b/basic-timer deleted file mode 160000 index 9860e2f..0000000 --- a/basic-timer +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 9860e2f54df01e11ed05c38d50a573a4e55a176a diff --git a/inc/log.h b/inc/log.h new file mode 100644 index 0000000..e9e2b41 --- /dev/null +++ b/inc/log.h @@ -0,0 +1,97 @@ +/* **************************************************************** + * + * Copyright 2017 Samsung Electronics All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************/ +#ifndef __LOG_H__ +#define __LOG_H__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef LOG_TAG +#undef LOG_TAG +#endif +#define LOG_TAG "SMART_LIGHT" + +#define _E(fmt, args...) dlog_print(DLOG_ERROR, LOG_TAG, "%s : %s(%d) > "fmt"\n", rindex(__FILE__, '/') + 1, __func__, __LINE__, ##args) +#define _W(fmt, args...) dlog_print(DLOG_WARN, LOG_TAG, "%s : %s(%d) > "fmt"\n", rindex(__FILE__, '/') + 1, __func__, __LINE__, ##args) +#define _I(fmt, args...) dlog_print(DLOG_INFO, LOG_TAG, "%s : %s(%d) > "fmt"\n", rindex(__FILE__, '/') + 1, __func__, __LINE__, ##args) +#define _D(fmt, args...) dlog_print(DLOG_DEBUG, LOG_TAG, "%s : %s(%d) > "fmt"\n", rindex(__FILE__, '/') + 1, __func__, __LINE__, ##args) + +#define FN_CALL dlog_print(DLOG_DEBUG, LOG_TAG, ">>>>>>>> %s() called\n", __func__) +#define FN_END dlog_print(DLOG_DEBUG, LOG_TAG, "<<<<<<<< %s() ended\n", __func__) + + +#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; \ + } \ +} + +#ifdef __cplusplus +} +#endif + +#endif /* __LOG_H__ */ + diff --git a/inc/resource/resource_infrared_motion.h b/inc/resource/resource_infrared_motion.h new file mode 100755 index 0000000..115c634 --- /dev/null +++ b/inc/resource/resource_infrared_motion.h @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2018 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __RESOURCE_INFRARED_MOTION_H__ +#define __RESOURCE_INFRARED_MOTION_H__ + +typedef void (*resource_infrared_motion_interrupted_cb) (uint32_t motion_value, void *user_data); + +/** + * @brief Reads value of gpio connected infrared motion sensor (HC-SR501) + * @param[in] pin_num The gpio pin number for the infrared motion sensor + * @param[out] out_value The value of the gpio (zero or non-zero) + * @return 0 on success, otherwise a negative error value + * @see If the gpio pin is not open, create gpio handle before reading the value + */ +extern int resource_read_infrared_motion(int pin_num, uint32_t *out_value); + +/** + * @brief Releases the gpio handle + */ +extern void resource_close_infrared_motion(void); + +/** + * @brief Sets an interrupted callback to be invoked when interrupt is triggered on motion sensor + * @param[in] pin_num The gpio pin number for the infrared motion sensor + * @param[in] interrupted_cb interrupted user callback to be invoked + * @return 0 on success, otherwise a negative error value + * @see If the gpio pin is not open, create gpio handle before reading the value + */ +extern int resource_set_interrupted_cb_infrared_motion(int pin_num, resource_infrared_motion_interrupted_cb interrupted_cb, void *user_data); + +/** + * @brief Unsets the interrupted callback for motion sensor + * @param[in] pin_num The gpio pin number for the infrared motion sensor + */ +extern int resource_unset_interrupted_cb_infrared_motion(int pin_num); + +#endif /* __RESOURCE_INFRARED_MOTION_H__ */ diff --git a/inc/resource/resource_led.h b/inc/resource/resource_led.h new file mode 100755 index 0000000..4adf22f --- /dev/null +++ b/inc/resource/resource_led.h @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2018 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __RESOURCE_LED_H__ +#define __RESOURCE_LED_H__ + +/** + * @brief Writes value of gpio connected led light + * @param[in] pin_num The gpio pin number for the led light + * @param[out] out_value The value of turniing the led light on/off + * @return 0 on success, otherwise a negative error value + * @see If the gpio pin is not open, create gpio handle before writing the value + */ +extern int resource_write_led(int pin_num, int write_value); + +/** + * @brief Releases the gpio handle + */ +extern void resource_close_led(void); + +#endif /* __RESOURCE_LED_H__ */ diff --git a/lib/libst_thing_master_api.so b/lib/libst_thing_master_api.so new file mode 100644 index 0000000000000000000000000000000000000000..aef594ac8f21d1a845064d74f25ee4f24bd21c80 GIT binary patch literal 111204 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 literal 0 HcmV?d00001 diff --git a/project_def.prop b/project_def.prop new file mode 100644 index 0000000..b6a64c2 --- /dev/null +++ b/project_def.prop @@ -0,0 +1,11 @@ +APPNAME = smart-light + +type = app +profile = iot-headed-5.0 + +USER_SRCS = src/smart-light.c +USER_DEFS = +USER_INC_DIRS = inc +USER_OBJS = +USER_LIBS = lib/libst_thing_master_api.so, lib/libst_thing_resource_api.so +USER_EDCS = diff --git a/shared/res/icon.png b/shared/res/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..9765b1bda7e5bddf0925555ab204b887a873bf24 GIT binary patch literal 57662 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 kZ}gYfNaCF}xV$|1>H6z0+kD +#include +#include +#include +#include +#include + +#include "log.h" +#include "resource/resource_infrared_motion.h" +#include "resource/resource_led.h" + +// Timer duration +#define TIMER_GATHER_INTERVAL (2.0f) + +// Motion sensor information +#define SENSOR_MOTION_GPIO_NUMBER (18) + +// LED sensor information +#define SENSOR_LED_GPIO_NUMBER (24) + +Ecore_Timer *getter_timer = NULL; + +static int _change_led_state(int state) { + int ret = 0; + + // Write state to LED light + ret = resource_write_led(SENSOR_LED_GPIO_NUMBER, state); + if (ret != 0) { + _E("cannot write led data"); + return -1; + } + + _I("LED State : %s", state ? "ON":"OFF"); + + return 0; +} + +static Eina_Bool _get_motion_set_led(void *user_data) +{ + int ret = 0; + uint32_t value = 0; + + // Get value from motion sensor + ret = resource_read_infrared_motion(SENSOR_MOTION_GPIO_NUMBER, &value); + if (ret != 0) { + _E("cannot read data from the infrared motion sensor"); + return ECORE_CALLBACK_CANCEL; + } + + _I("Detected motion value : %u", value); + + // Set LED light with value + _change_led_state(value); + + return ECORE_CALLBACK_RENEW; +} + +static bool service_app_create(void *user_data) +{ + return true; +} + +static void service_app_control(app_control_h app_control, void *user_data) +{ + // Delete old timer if there is one + if (getter_timer) { + ecore_timer_del(getter_timer); + getter_timer = NULL; + } + + // Create a timer to call the given function in given period of time + getter_timer = ecore_timer_add(TIMER_GATHER_INTERVAL, _get_motion_set_led, user_data); + if (!getter_timer) { + _E("Failed to add getter timer"); + return; + } +} + +static void service_app_terminate(void *user_data) +{ + // Delete timer + if (getter_timer) { + ecore_timer_del(getter_timer); + getter_timer = NULL; + } + + // Turn off LED light with __set_led() + _change_led_state(0); + + // Close Motion and LED resources + resource_close_infrared_motion(); + resource_close_led(); + + FN_END; +} + +int main(int argc, char *argv[]) +{ + service_app_lifecycle_callback_s event_callback; + + 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, NULL); +} diff --git a/src/resource/resource_infrared_motion.c b/src/resource/resource_infrared_motion.c new file mode 100755 index 0000000..9263143 --- /dev/null +++ b/src/resource/resource_infrared_motion.c @@ -0,0 +1,195 @@ +/* + * Copyright (c) 2018 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include "resource/resource_infrared_motion.h" +#include "log.h" + +enum { + MOTION_HANDLE_ERROR_NONE = 0, /**< Successful */ + MOTION_HANDLE_ERROR_NOT_OPEN, + MOTION_HANDLE_ERROR_INVALID_PIN +} motion_handle_error_e; + +struct resource_im_interrupted_data { + resource_infrared_motion_interrupted_cb interrupted_cb; + void *interrupted_cb_user_data; + uint32_t motion_value; +}; + +static peripheral_gpio_h g_sensor_h = NULL; +static int g_pin_num = -1; +static struct resource_im_interrupted_data g_interrupted_data; + +static int _resource_validate_infrared_motion(int pin_num) +{ + int ret = MOTION_HANDLE_ERROR_NONE; + + if (!g_sensor_h) + { + ret = MOTION_HANDLE_ERROR_NOT_OPEN; + } else if (g_pin_num != pin_num) { + ret = MOTION_HANDLE_ERROR_INVALID_PIN; + } + + return ret; +} + +static int resource_open_infrared_motion(int pin_num) +{ + int ret = PERIPHERAL_ERROR_NONE; + peripheral_gpio_h temp = NULL; + + ret = peripheral_gpio_open(pin_num, &temp); + if (ret != PERIPHERAL_ERROR_NONE) { + _E("peripheral_gpio_open failed."); + return -1; + } + + // It should be removed after peripheral-io is patched. + peripheral_gpio_set_direction(temp, PERIPHERAL_GPIO_DIRECTION_OUT_INITIALLY_LOW); + if (ret) { + peripheral_gpio_close(temp); + _E("peripheral_gpio_set_direction failed."); + return -1; + } + + ret = peripheral_gpio_set_direction(temp, PERIPHERAL_GPIO_DIRECTION_IN); + if (ret != PERIPHERAL_ERROR_NONE) { + peripheral_gpio_close(temp); + _E("peripheral_gpio_set_direction failed."); + return -1; + } + + g_sensor_h = temp; + g_pin_num = pin_num; + + return 0; +} + +int resource_read_infrared_motion(int pin_num, uint32_t *out_value) +{ + int ret = PERIPHERAL_ERROR_NONE; + int ret_valid = MOTION_HANDLE_ERROR_NONE; + + ret_valid = _resource_validate_infrared_motion(pin_num); + if (ret_valid != MOTION_HANDLE_ERROR_NONE) { + if (ret_valid == MOTION_HANDLE_ERROR_NOT_OPEN) { + ret = resource_open_infrared_motion(pin_num); + retv_if(ret != PERIPHERAL_ERROR_NONE, -1); + } else if (ret_valid == MOTION_HANDLE_ERROR_INVALID_PIN) { + _E("Invalid pin number."); + return -1; + } + } + + ret = peripheral_gpio_read(g_sensor_h, out_value); + retv_if(ret != PERIPHERAL_ERROR_NONE, -1); + + return 0; +} + +void resource_close_infrared_motion(void) +{ + if (!g_sensor_h) return; + + _I("Infrared Motion Sensor is finishing..."); + + if (g_interrupted_data.interrupted_cb) { + peripheral_gpio_unset_interrupted_cb(g_sensor_h); + g_interrupted_data.interrupted_cb = NULL; + g_interrupted_data.interrupted_cb_user_data = NULL; + g_interrupted_data.motion_value = 0; + } + + peripheral_gpio_close(g_sensor_h); + + g_sensor_h = NULL; + g_pin_num = -1; +} + +void _resoucre_motion_interrupted_cb (peripheral_gpio_h gpio, peripheral_error_e error, void *user_data) +{ + if (!g_sensor_h) return; + + g_interrupted_data.motion_value = !g_interrupted_data.motion_value; + + g_interrupted_data.interrupted_cb(g_interrupted_data.motion_value, g_interrupted_data.interrupted_cb_user_data); +} + +int resource_set_interrupted_cb_infrared_motion(int pin_num, resource_infrared_motion_interrupted_cb interrupted_cb, void *user_data) +{ + int ret = PERIPHERAL_ERROR_NONE; + int ret_valid = MOTION_HANDLE_ERROR_NONE; + + retv_if(!interrupted_cb, -1); + + ret_valid = _resource_validate_infrared_motion(pin_num); + if (ret_valid == MOTION_HANDLE_ERROR_NOT_OPEN) { + ret = resource_open_infrared_motion(pin_num); + retv_if(ret != PERIPHERAL_ERROR_NONE, -1); + } else if (ret_valid == MOTION_HANDLE_ERROR_INVALID_PIN) { + _E("Invalid pin number."); + return -1; + } + + ret = peripheral_gpio_set_edge_mode(g_sensor_h, PERIPHERAL_GPIO_EDGE_BOTH); + retv_if(ret != PERIPHERAL_ERROR_NONE, -1); + + g_interrupted_data.motion_value = 0; + ret = peripheral_gpio_read(g_sensor_h, &g_interrupted_data.motion_value); + retv_if(ret != PERIPHERAL_ERROR_NONE, -1); + + ret = peripheral_gpio_set_interrupted_cb(g_sensor_h, _resoucre_motion_interrupted_cb, &g_interrupted_data); + goto_if(ret != PERIPHERAL_ERROR_NONE, ERROR); + + g_interrupted_data.interrupted_cb = interrupted_cb; + g_interrupted_data.interrupted_cb_user_data = user_data; + + return 0; + +ERROR: + _E("failed to read gpio"); + peripheral_gpio_unset_interrupted_cb(g_sensor_h); + g_interrupted_data.interrupted_cb = NULL; + g_interrupted_data.interrupted_cb_user_data = NULL; + g_interrupted_data.motion_value = 0; + return -1; +} + +int resource_unset_interrupted_cb_infrared_motion(int pin_num) +{ + int ret = PERIPHERAL_ERROR_NONE; + int ret_valid = MOTION_HANDLE_ERROR_NONE; + + ret_valid = _resource_validate_infrared_motion(pin_num); + if (ret_valid == MOTION_HANDLE_ERROR_NOT_OPEN) { + _E("No open handle."); + return -1; + } else if (ret_valid == MOTION_HANDLE_ERROR_INVALID_PIN) { + _E("Invalid pin number."); + return -1; + } + + ret = peripheral_gpio_unset_interrupted_cb(g_sensor_h); + retv_if(ret != PERIPHERAL_ERROR_NONE, -1); + + g_interrupted_data.interrupted_cb = NULL; + g_interrupted_data.interrupted_cb_user_data = NULL; + g_interrupted_data.motion_value = 0; + + return 0; +} diff --git a/src/resource/resource_led.c b/src/resource/resource_led.c new file mode 100755 index 0000000..a6edd7c --- /dev/null +++ b/src/resource/resource_led.c @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2018 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include "resource/resource_led.h" +#include "log.h" + +typedef enum { + LED_HANDLE_ERROR_NONE = 0, /**< Successful */ + LED_HANDLE_ERROR_NOT_OPEN, + LED_HANDLE_ERROR_INVALID_PIN +} led_handle_error_e; + +static peripheral_gpio_h g_sensor_h = NULL; +static int g_pin_num = -1; + +int _resource_validate_led(int pin_num) +{ + int ret = LED_HANDLE_ERROR_NONE; + + if (!g_sensor_h) + { + ret = LED_HANDLE_ERROR_NOT_OPEN; + } else if (g_pin_num != pin_num) { + ret = LED_HANDLE_ERROR_INVALID_PIN; + } + + return ret; +} + +int resource_open_led(int pin_num) +{ + int ret = PERIPHERAL_ERROR_NONE; + peripheral_gpio_h temp = NULL; + + ret = peripheral_gpio_open(pin_num, &temp); + if (ret != PERIPHERAL_ERROR_NONE) { + peripheral_gpio_close(temp); + _E("peripheral_gpio_open failed."); + return -1; + } + + ret = peripheral_gpio_set_direction(temp, PERIPHERAL_GPIO_DIRECTION_OUT_INITIALLY_LOW); + if (ret != PERIPHERAL_ERROR_NONE) { + peripheral_gpio_close(temp); + _E("peripheral_gpio_set_direction failed."); + return -1; + } + + g_sensor_h = temp; + g_pin_num = pin_num; + + return 0; +} + +void resource_close_led(void) +{ + if (!g_sensor_h) return; + + _I("LED is finishing..."); + + peripheral_gpio_close(g_sensor_h); + + g_sensor_h = NULL; + g_pin_num = -1; +} + +int resource_write_led(int pin_num, int write_value) +{ + int ret = PERIPHERAL_ERROR_NONE; + int ret_valid = LED_HANDLE_ERROR_NONE; + + ret_valid = _resource_validate_led(pin_num); + if (ret_valid != LED_HANDLE_ERROR_NONE) { + if (ret_valid == LED_HANDLE_ERROR_NOT_OPEN) { + ret = resource_open_led(pin_num); + retv_if(ret != PERIPHERAL_ERROR_NONE, -1); + } else if (ret_valid == LED_HANDLE_ERROR_INVALID_PIN) { + _E("Invalid pin number."); + return -1; + } + } + + ret = peripheral_gpio_write(g_sensor_h, write_value); + retv_if(ret < 0, -1); + + return 0; +} diff --git a/tizen-manifest.xml b/tizen-manifest.xml new file mode 100644 index 0000000..ffb309a --- /dev/null +++ b/tizen-manifest.xml @@ -0,0 +1,15 @@ + + + + + + icon.png + + + + + + + http://tizen.org/privilege/peripheralio + + -- 2.7.4