From 96b942dd26500fd12c61b1597185c6a44180fd78 Mon Sep 17 00:00:00 2001 From: Boyeon Date: Fri, 23 Aug 2019 20:34:04 +0900 Subject: [PATCH] Add two projects in master repository Change-Id: If7464555bb65cb0504597c3ac327c335a2fbaf7c --- LICENSE.APLv2 | 202 --- NOTICE | 3 - basic-interrupted | 1 + basic-timer | 1 + inc/log.h | 97 -- inc/resource/resource_infrared_motion_sensor.h | 34 - inc/resource/resource_led.h | 34 - inc/smartthings.h | 1656 ------------------------ inc/smartthings_payload.h | 663 ---------- inc/smartthings_resource.h | 364 ------ lib/libst_thing_master_api.so | Bin 111204 -> 0 bytes lib/libst_thing_resource_api.so | Bin 72524 -> 0 bytes project_def.prop | 11 - shared/res/master.json | 18 - shared/res/motion.png | Bin 57662 -> 0 bytes shared/res/resource.json | 52 - src/controller.c | 645 --------- src/resource/resource_infrared_motion_sensor.c | 66 - src/resource/resource_led.c | 68 - tizen-manifest.xml | 21 - 20 files changed, 2 insertions(+), 3934 deletions(-) delete mode 100755 LICENSE.APLv2 delete mode 100755 NOTICE create mode 160000 basic-interrupted create mode 160000 basic-timer delete mode 100644 inc/log.h delete mode 100755 inc/resource/resource_infrared_motion_sensor.h delete mode 100755 inc/resource/resource_led.h delete mode 100644 inc/smartthings.h delete mode 100644 inc/smartthings_payload.h delete mode 100644 inc/smartthings_resource.h delete mode 100644 lib/libst_thing_master_api.so delete mode 100644 lib/libst_thing_resource_api.so delete mode 100644 project_def.prop delete mode 100644 shared/res/master.json delete mode 100644 shared/res/motion.png delete mode 100644 shared/res/resource.json delete mode 100755 src/controller.c delete mode 100755 src/resource/resource_infrared_motion_sensor.c delete mode 100755 src/resource/resource_led.c delete mode 100644 tizen-manifest.xml diff --git a/LICENSE.APLv2 b/LICENSE.APLv2 deleted file mode 100755 index d645695..0000000 --- a/LICENSE.APLv2 +++ /dev/null @@ -1,202 +0,0 @@ - - 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 deleted file mode 100755 index ba98e27..0000000 --- a/NOTICE +++ /dev/null @@ -1,3 +0,0 @@ -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 new file mode 160000 index 0000000..71be3d8 --- /dev/null +++ b/basic-interrupted @@ -0,0 +1 @@ +Subproject commit 71be3d8daf587a2a5221dcda7d16227577bd8578 diff --git a/basic-timer b/basic-timer new file mode 160000 index 0000000..9860e2f --- /dev/null +++ b/basic-timer @@ -0,0 +1 @@ +Subproject commit 9860e2f54df01e11ed05c38d50a573a4e55a176a diff --git a/inc/log.h b/inc/log.h deleted file mode 100644 index eb89231..0000000 --- a/inc/log.h +++ /dev/null @@ -1,97 +0,0 @@ -/* **************************************************************** - * - * Copyright 2017 Samsung Electronics All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ******************************************************************/ -#ifndef __LOG_H__ -#define __LOG_H__ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef LOG_TAG -#undef LOG_TAG -#endif -#define LOG_TAG "MOTION_APP" - -#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_sensor.h b/inc/resource/resource_infrared_motion_sensor.h deleted file mode 100755 index 49062e6..0000000 --- a/inc/resource/resource_infrared_motion_sensor.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (c) 2018 Samsung Electronics Co., Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef __POSITION_FINDER_RESOURCE_INFRARED_MOTION_SENSOR_H__ -#define __POSITION_FINDER_RESOURCE_INFRARED_MOTION_SENSOR_H__ - -/** - * @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_sensor(int pin_num, uint32_t *out_value); - -/** - * @brief Releases the gpio handle - */ -extern void resource_close_infrared_motion_sensor(void); - -#endif /* __POSITION_FINDER_RESOURCE_INFRARED_MOTION_SENSOR_H__ */ diff --git a/inc/resource/resource_led.h b/inc/resource/resource_led.h deleted file mode 100755 index 1a81a18..0000000 --- a/inc/resource/resource_led.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (c) 2018 Samsung Electronics Co., Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef __POSITION_FINDER_RESOURCE_LED_H__ -#define __POSITION_FINDER_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 /* __POSITION_FINDER_RESOURCE_LED_H__ */ diff --git a/inc/smartthings.h b/inc/smartthings.h deleted file mode 100644 index 7206479..0000000 --- a/inc/smartthings.h +++ /dev/null @@ -1,1656 +0,0 @@ -/***************************************************************** - * - * Copyright (c) 2018 Samsung Electronics Co., Ltd. All Rights Reserved - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ******************************************************************/ - - -#ifndef __SAMSUNG_EXPERIENCE_SERVICE_SMARTTHINGS_H__ -#define __SAMSUNG_EXPERIENCE_SERVICE_SMARTTHINGS_H__ - -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * @addtogroup CAPI_SMARTTHINGS_THING_MASTER_MODULE - * @{ - */ - -/** - * @brief Definition for the max length of SSID for access point. - * @since_ses 1 - */ -#define SMARTTHINGS_SSID_LEN_MAX 32 - -/** - * @brief Definition for the max length of cloud information. - * @since_ses 1 - */ -#define SMARTTHINGS_CLOUD_INFO_LEN_MAX 128 - -/** - * @brief Enumeration for the SmartThings error. - * @since_ses 1 - */ -typedef enum { - SMARTTHINGS_ERROR_NONE = TIZEN_ERROR_NONE, /**< Successful */ - SMARTTHINGS_ERROR_INVALID_PARAMETER = TIZEN_ERROR_INVALID_PARAMETER, /**< Invalid parameter */ - SMARTTHINGS_ERROR_OUT_OF_MEMORY = TIZEN_ERROR_OUT_OF_MEMORY, /**< Out of memory */ - SMARTTHINGS_ERROR_PERMISSION_DENIED = TIZEN_ERROR_PERMISSION_DENIED, /**< Permission denied */ - SMARTTHINGS_ERROR_NO_DATA = TIZEN_ERROR_NO_DATA, /**< No data */ - SMARTTHINGS_ERROR_NOT_SUPPORTED = TIZEN_ERROR_NOT_SUPPORTED, /**< Not supported */ - SMARTTHINGS_ERROR_OPERATION_FAILED = TIZEN_ERROR_UNKNOWN - 1, /**< Operation failed */ - SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE = TIZEN_ERROR_UNKNOWN -2 /**< Service unavailable */ -} smartthings_error_e; - -/** - * @brief Enumeration for SmartThings status. - * @since_ses 1 - */ -typedef enum { - SMARTTHINGS_STATUS_NOT_READY = -1, /**< Service agent is not ready */ - SMARTTHINGS_STATUS_INIT = 0, /**< Initial state of SmartThings Thing */ - SMARTTHINGS_STATUS_ES_STARTED, /**< Easy-setup is started */ - SMARTTHINGS_STATUS_ES_DONE, /**< Easy-setup is done */ - SMARTTHINGS_STATUS_ES_FAILED_ON_OWNERSHIP_TRANSFER, /**< Easy-setup failed due to Ownership-Transfer failure */ - SMARTTHINGS_STATUS_CONNECTING_TO_AP, /**< Connecting to target Wi-Fi access point */ - SMARTTHINGS_STATUS_CONNECTED_TO_AP, /**< Connected to target Wi-Fi access point */ - SMARTTHINGS_STATUS_CONNECTING_TO_AP_FAILED, /**< Failed to connect to target Wi-Fi access point */ - SMARTTHINGS_STATUS_REGISTERING_TO_CLOUD, /**< Trying to sign up, sign in and publish resources to cloud */ - SMARTTHINGS_STATUS_REGISTERED_TO_CLOUD, /**< Publish resources to cloud is complete. Now the thing is ready to be controlled via cloud */ - SMARTTHINGS_STATUS_REGISTERING_FAILED_ON_SIGN_IN, /**< Failed to sign in to cloud */ - SMARTTHINGS_STATUS_REGISTERING_FAILED_ON_PUB_RES /**< Failed to publish resources to cloud */ -} smartthings_status_e; - -/** - * @brief Enumeration for RPC connection status. - * @since_ses 1 - */ -typedef enum { - SMARTTHINGS_CONNECTION_STATUS_CONNECTED = 0, /**< Connection is connected */ - SMARTTHINGS_CONNECTION_STATUS_DISCONNECTED, /**< Connection is disconnected */ - SMARTTHINGS_CONNECTION_STATUS_REJECTED, /**< Connection is rejected */ -} smartthings_connection_status_e; - -/** - * @brief The Wi-Fi mode. - * @since_ses 1 - */ -typedef enum { - SMARTTHINGS_WIFI_MODE_11A = (1 << 0), /**< Wi-Fi 11A */ - SMARTTHINGS_WIFI_MODE_11B = (1 << 1), /**< Wi-Fi 11B */ - SMARTTHINGS_WIFI_MODE_11G = (1 << 2), /**< Wi-Fi 11G */ - SMARTTHINGS_WIFI_MODE_11N = (1 << 3), /**< Wi-Fi 11N */ - SMARTTHINGS_WIFI_MODE_11AC = (1 << 4) /**< Wi-Fi 11AC */ -} smartthings_wifi_mode_e; - -/** - * @brief The Wi-Fi frequency band. - * @since_ses 1 - */ -typedef enum { - SMARTTHINGS_WIFI_FREQ_24G = (1 << 0), /**< Wi-Fi 2.4GHz */ - SMARTTHINGS_WIFI_FREQ_5G = (1 << 1), /**< Wi-Fi 5GHz */ -} smartthings_wifi_freq_e; - -/** - * @brief The Wi-Fi authentication type of access point. - * @since_ses 1 - */ -typedef enum { - SMARTTHINGS_WIFI_AUTHTYPE_NONE = 0, /**< No authentication */ - SMARTTHINGS_WIFI_AUTHTYPE_WEP, /**< WEP */ - SMARTTHINGS_WIFI_AUTHTYPE_WPA_PSK, /**< WPA-PSK */ - SMARTTHINGS_WIFI_AUTHTYPE_WPA2_PSK /**< WPA2-PSK */ -} smartthings_wifi_authtype_e; - -/** - * @brief The Wi-Fi encryption type of access point. - * @since_ses 1 - */ -typedef enum { - SMARTTHINGS_WIFI_ENCTYPE_NONE = 0, /**< No encryption */ - SMARTTHINGS_WIFI_ENCTYPE_WEP_64, /**< WEP 64 */ - SMARTTHINGS_WIFI_ENCTYPE_WEP_128, /**< WEP 128 */ - SMARTTHINGS_WIFI_ENCTYPE_TKIP, /**< TKIP */ - SMARTTHINGS_WIFI_ENCTYPE_AES, /**< AES */ - SMARTTHINGS_WIFI_ENCTYPE_TKIP_AES /**< TKIP/AES */ -} smartthings_wifi_enctype_e; - -/** - * @brief The SmartThings handle. - * @since_ses 1 - */ -typedef struct smartthings_s *smartthings_h; - -/** - * @brief The access point information handle. - * @since_ses 1 - */ -typedef struct smartthings_ap_info_s *smartthings_ap_info_h; - -/** - * @brief The device provisioning information handle. - * @since_ses 1 - */ -typedef struct smartthings_device_prov_info_s *smartthings_device_prov_info_h; - -/** - * @brief The cloud information handle for cloud sign-up. - * @since_ses 1 - */ -typedef struct smartthings_cloud_info_s *smartthings_cloud_info_h; - -/** - * @brief The access point list handle. - * @since_ses 1 - */ -typedef struct smartthings_ap_list_s *smartthings_ap_list_h; - -/** - * @brief Callback for status of connection to SmartThings Thing agent. - * @since_ses 1 - * - * @remarks The @a handle should not be released. - * @remarks The @a handle is the same object for which the callback was set/added. - * @remarks The @a handle will be released when smartthings_deinitialize() is called. - * @remarks When callback is called, user can see connection status as #smartthings_connection_status_e enumeration value. - * - * @param[in] result The result of connection operation - * @param[in] handle The SmartThings handle - * @param[in] status The status of connection - * @param[in] user_data The user data passed from the callback registration function - * - * @see smartthings_initialize() - */ -typedef void (*smartthings_connection_status_cb)(smartthings_h handle, smartthings_connection_status_e status, void *user_data); - -/** - * @brief Callback for SmartThings Thing status. - * @since_ses 1 - * - * @remarks The @a handle should not be released. - * @remarks The @a handle is the same object for which the callback was set/added. - * @remarks The @a handle will be released when smartthings_deinitialize() is called. - * @remarks When callback is called, user can see SmartThings status as #smartthings_status_e enumeration value. - * - * @param[in] handle The SmartThings handle - * @param[in] status The status of SmartThings - * @param[in] user_data The user data passed from the callback registration function - * - * @see smartthings_set_status_changed_cb() - * @see smartthings_unset_status_changed_cb() - */ -typedef void (*smartthings_status_changed_cb)(smartthings_h handle, smartthings_status_e status, void *user_data); - -/** - * @brief Callback for getting user's input regarding mutual verification. - * @since_ses 1 - * - * @remarks The @a handle should not be released. - * @remarks The @a handle is the same object for which the callback was set/added. - * @remarks The @a handle will be released when smartthings_deinitialize() is called. - * @remarks When callback is called, user can send a confirmation for mutual verification as true or false. - * - * @param[in] handle The SmartThings handle - * @param[in] user_data The user data passed from the callback registration function - * - * @see smartthings_set_user_confirm_cb() - * @see smartthings_unset_user_confirm_cb() - */ -typedef void (*smartthings_user_confirm_cb)(smartthings_h handle, void *user_data); - -/** - * @brief Callback for getting user's opinion regarding device reset. - * @since_ses 1 - * - * @remarks The @a handle should not be released. - * @remarks The @a handle is the same object for which the callback was set/added. - * @remarks The @a handle will be released when smartthings_deinitialize() is called. - * @remarks When callback is called, user can sends a confirmation for reset as true or false. - * - * @param[in] handle The SmartThings handle - * @param[in] user_data The user data passed from the callback registration function - * - * @see smartthings_set_reset_confirm_cb() - * @see smartthings_unset_reset_confirm_cb() - */ -typedef void (*smartthings_reset_confirm_cb)(smartthings_h handle, void *user_data); - -/** - * @brief Callback for result of reset operation. - * @since_ses 1 - * - * @remarks The @a handle should not be released. - * @remarks The @a handle is the same object for which the callback was set/added. - * @remarks The @a handle will be released when smartthings_deinitialize() is called. - * @remarks When callback is called, user can check reset operation succeeds or fails. - * - * @param[in] handle The SmartThings handle - * @param[in] result The result of reset - * @param[in] user_data The user data passed from the callback registration function - * - * @see smartthings_set_reset_result_cb() - * @see smartthings_unset_reset_result_cb() - */ -typedef void (*smartthings_reset_result_cb)(smartthings_h handle, bool result, void *user_data); - -/** - * @brief Callback for carrying the randomly generated PIN information. - * @since_ses 1 - * - * @remarks The @a handle should not be released. - * @remarks The @a handle is the same object for which the callback was set/added. - * @remarks The @a handle will be released when smartthings_deinitialize() is called. - * @remarks The @a pin can be used only in the callback. To use outside, make a copy. - * @remarks When callback is called, user can see PIN value and length. - * - * @param[in] handle The SmartThings handle - * @param[in] pin The PIN data in string format - * @param[in] size The PIN length of @a pin - * @param[in] user_data The user data passed from the callback registration function - * - * @see smartthings_set_pin_cb() - * @see smartthings_unset_pin_cb() - */ -typedef void (*smartthings_pin_generated_cb)(smartthings_h handle, const char* pin, size_t size, void *user_data); - -/** - * @brief Callback for informing the application to close the PIN display. - * @since_ses 1 - * - * @remarks The @a handle should not be released. - * @remarks The @a handle is the same object for which the callback was set/added. - * @remarks The @a handle will be released when smartthings_deinitialize() is called. - * @remarks When callback is called, user can know PIN based ownership transfer is finished. - * - * @param[in] handle The SmartThings handle - * @param[in] user_data The user data passed from the callback registration function - * - * @see smartthings_set_pin_cb() - * @see smartthings_unset_pin_cb() - */ -typedef void (*smartthings_pin_display_close_cb)(smartthings_h handle, void *user_data); - -/** - * @brief Callback for informing Wi-Fi AP information to connect. - * @since_ses 1 - * - * @remarks The @a handle should not be released. - * @remarks The @a handle is the same object for which the callback was set/added. - * @remarks The @a handle will be released when smartthings_deinitialize() is called. - * @remarks The @a ap_info_h should not be released. - * @remarks The @a ap_info_h will be released when smartthings_unset_wifi_ap_provisioning_cb() is called. - * @remarks When callback is called, user can get Wi-Fi provisioning information. - * - * @param[in] handle The SmartThings handle - * @param[in] ap_info_h The AP information handle - * @param[in] user_data The user data passed from the callback registration function - * - * @see smartthings_set_wifi_ap_provisioning_cb() - * @see smartthings_unset_wifi_ap_provisioning_cb() - */ -typedef void (*smartthings_wifi_ap_provisioning_cb)(smartthings_h handle, smartthings_ap_info_h ap_info_h, void *user_data); - -/** - * @brief Callback for informing device provisioning information. - * @since_ses 1 - * - * @remarks The @a handle should not be released. - * @remarks The @a handle is the same object for which the callback was set/added. - * @remarks The @a handle will be released when smartthings_deinitialize() is called. - * @remarks The @a dev_prov_h should not be released. - * @remarks The @a dev_prov_h will be released when smartthings_unset_device_provisioning_cb() is called. - * @remarks When callback is called, user can get device provisioning information. - * - * @param[in] handle The SmartThings handle - * @param[in] dev_prov_h The device provisioning information handle - * @param[in] user_data The user data passed from the callback registration function - * - * @see smartthings_set_device_provisioning_cb() - * @see smartthings_unset_device_provisioning_cb() - */ -typedef void (*smartthings_device_provisioning_cb)(smartthings_h handle, smartthings_device_prov_info_h dev_prov_h, void *user_data); - -/** - * @brief Callback for informing the scan AP list request. - * @since_ses 1 - * - * @remarks The @a handle should not be released. - * @remarks The @a handle is the same object for which the callback was set/added. - * @remarks The @a handle will be released when smartthings_deinitialize() is called. - * @remarks When callback is called, user scans access points, sets AP list and sends it to agent. - * - * @param[in] handle The SmartThings handle - * @param[in] req_id The request ID - * @param[in] user_data The user data passed from the callback registration function - * - * @see smartthings_set_scan_ap_cb() - * @see smartthings_unset_scan_ap_cb() - */ -typedef void (*smartthings_scan_ap_cb)(smartthings_h handle, int req_id, void *user_data); - -/** - * @brief Callback for informing the stop soft AP request. - * @since_ses 1 - * - * @remarks The @a handle should not be released. - * @remarks The @a handle is the same object for which the callback was set/added. - * @remarks The @a handle will be released when smartthings_deinitialize() is called. - * @remarks When callback is called, user stops soft AP. - * - * @param[in] handle The SmartThings handle - * @param[in] user_data The user data passed from the callback registration function - * - * @see smartthings_set_stop_soft_ap_cb() - * @see smartthings_unset_stop_soft_ap_cb() - */ -typedef void (*smartthings_stop_soft_ap_cb)(smartthings_h handle, void *user_data); - -/** - * @brief Creates a handle and connects to agent. - * @since_ses 1 - * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n - * %http://tizen.org/privilege/appmanager.launch \n - * %http://tizen.org/privilege/datasharing - * - * @remarks The @a handle must be released using smartthings_deinitialize(). - * @remarks Ths function returns #SMARTTHINGS_ERROR_PERMISSION_DENIED\n - * if the application has no app-defined privilege for 'http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master'. - * - * @param[out] handle The SmartThings handle to be newly created on success - * @param[in] connection_status_cb The RPC connection status callback to register - * @param[in] user_data The user data to be passed to the callback function - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_ERROR_NONE Successful - * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_ERROR_OUT_OF_MEMORY Out of memory - * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied - * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed - * @retval #SMARTTHINGS_ERROR_NOT_SUPPORTED Not supported - * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable - * - * @see smartthings_deinitialize() - */ -int smartthings_initialize(smartthings_h *handle, - smartthings_connection_status_cb connection_status_cb, - void *user_data); - -/** - * @brief Deinitializes a handle and disconnects from the agent. - * @since_ses 1 - * - * @param[in] handle The SmartThings handle - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_ERROR_NONE Successful - * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed - * - * @see smartthings_initialize() - */ -int smartthings_deinitialize(smartthings_h handle); - -/** - * @brief Starts SmartThings Thing operation. - * @since_ses 1 - * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n - * %http://tizen.org/privilege/appmanager.launch \n - * %http://tizen.org/privilege/datasharing - * - * @param[in] handle The SmartThings handle - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_ERROR_NONE Successful - * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied - * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed - * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable - * - * @see smartthings_stop() - */ -int smartthings_start(smartthings_h handle); - -/** - * @brief Stops SmartThings Thing operation. - * @since_ses 1 - * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n - * %http://tizen.org/privilege/appmanager.launch \n - * %http://tizen.org/privilege/datasharing - * - * @param[in] handle The SmartThings handle - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_ERROR_NONE Successful - * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied - * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed - * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable - * - * @see smartthings_start() - */ -int smartthings_stop(smartthings_h handle); - -/** - * @brief Sets thing status changed callback. - * @since_ses 1 - * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n - * %http://tizen.org/privilege/appmanager.launch \n - * %http://tizen.org/privilege/datasharing - * - * @remarks Only one callback function can be set with this function. - * @remarks If multiple callbacks are set, the last one is registered only. - * @remarks Callback is called when SmartThings status is changed. - * @remarks When callback is called, user can get SmartThings status as #smartthings_status_e enumeration value. - * - * @param[in] handle The SmartThings handle - * @param[in] status_cb The status changed callback to register - * @param[in] user_data The user data to be passed to the callback function - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_ERROR_NONE Successful - * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied - * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed - * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable - * - * @see smartthings_unset_status_changed_cb() - */ -int smartthings_set_status_changed_cb(smartthings_h handle, - smartthings_status_changed_cb status_cb, - void *user_data); - -/** - * @brief Unsets thing status changed callback. - * @since_ses 1 - * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n - * %http://tizen.org/privilege/appmanager.launch \n - * %http://tizen.org/privilege/datasharing - * - * @param[in] handle The SmartThings handle - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_ERROR_NONE Successful - * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied - * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed - * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable - * - * @see smartthings_set_status_changed_cb() - */ -int smartthings_unset_status_changed_cb(smartthings_h handle); - -/** - * @brief Sets test certificate files. - * @since_ses 1 - * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n - * %http://tizen.org/privilege/appmanager.launch \n - * %http://tizen.org/privilege/datasharing - * - * @remarks These files should be placed in 'res' directory of application. - * @remarks This function is needed only for using test certificate. - * @remarks This function can be used before smartthings_start() - * - * @param[in] handle The SmartThings handle - * @param[in] certificate The certificate file - * @param[in] private_key The private key file - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_ERROR_NONE Successful - * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied - * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed - * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable - */ -int smartthings_set_certificate_file(smartthings_h handle, const char *certificate, const char *private_key); - -/** - * @brief Sets device property for Easy-setup. - * @since_ses 1 - * - * @remarks This function can be used before smartthings_start() - * - * @param[in] handle The SmartThings handle - * @param[in] dev_name The device name - * @param[in] wifi_mode The supported Wi-Fi mode (bit masked value for #smartthings_wifi_mode_e) - * @param[in] wifi_freq The supported Wi-Fi frequency (bit masked value for #smartthings_wifi_freq_e) - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_ERROR_NONE Successful - * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter - */ -int smartthings_set_device_property(smartthings_h handle, const char* dev_name, int wifi_mode, int wifi_freq); - -/** - * @brief Gets a device ID. - * @since_ses 1 - * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n - * %http://tizen.org/privilege/appmanager.launch \n - * %http://tizen.org/privilege/datasharing - * - * @remarks The @a device_id should be released using free(). - * - * @param[in] handle The SmartThings handle - * @param[out] device_id The device ID - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_ERROR_NONE Successful - * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied - * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed - * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable - */ -int smartthings_get_device_id(smartthings_h handle, char **device_id); - -/** - * @brief Gets a Easy-setup status. - * @since_ses 1 - * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n - * %http://tizen.org/privilege/appmanager.launch \n - * %http://tizen.org/privilege/datasharing - * - * @param[in] handle The SmartThings handle - * @param[out] is_completed The status of Easy-setup whether it is completed or not - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_ERROR_NONE Successful - * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied - * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed - * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable - */ -int smartthings_get_easysetup_status(smartthings_h handle, bool *is_completed); - -/** - * @brief Starts Easy-setup mode. - * - * @details This function requests for turning on soft AP to SmartThings Thing agent. - * @since_ses 1 - * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n - * %http://tizen.org/privilege/appmanager.launch \n - * %http://tizen.org/privilege/datasharing \n - * %http://tizen.org/privilege/softap - * - * @param[in] handle The SmartThings handle - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_ERROR_NONE Successful - * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied - * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed - * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable - * - * @see smartthings_stop_easysetup() - */ -int smartthings_start_easysetup(smartthings_h handle); - -/** - * @brief Stops Easy-setup mode. - * - * @details This function requests for turning off soft AP to SmartThings Thing agent. - * @since_ses 1 - * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n - * %http://tizen.org/privilege/appmanager.launch \n - * %http://tizen.org/privilege/datasharing \n - * %http://tizen.org/privilege/softap - * - * @param[in] handle The SmartThings handle - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_ERROR_NONE Successful - * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied - * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed - * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable - * - * @see smartthings_start_easysetup() - */ -int smartthings_stop_easysetup(smartthings_h handle); - -/** - * @brief Sets callback for getting user confirmation for mutual verification based just work ownership transfer. - * @since_ses 1 - * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n - * %http://tizen.org/privilege/appmanager.launch \n - * %http://tizen.org/privilege/datasharing - * - * @remarks Only one callback function can be set with this function. - * @remarks If multiple callbacks are set, the last one is registered only. - * @remarks Callback is called when it needs user's confirm for mutual verification based just work ownership transfer. - * @remarks When callback is called, user can send a confirmation for mutual verification based just work ownership transfer as true or false. - * - * @param[in] handle The SmartThings handle - * @param[in] confirm_cb The user confirm callback to register - * @param[in] user_data The user data to be passed to the callback function - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_ERROR_NONE Successful - * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied - * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed - * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable - * - * @see smartthings_unset_user_confirm_cb() - */ -int smartthings_set_user_confirm_cb(smartthings_h handle, - smartthings_user_confirm_cb confirm_cb, - void *user_data); - -/** - * @brief Unsets user confirmation callback. - * @since_ses 1 - * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n - * %http://tizen.org/privilege/appmanager.launch \n - * %http://tizen.org/privilege/datasharing - * - * @param[in] handle The SmartThings handle - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_ERROR_NONE Successful - * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied - * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed - * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable - * - * @see smartthings_set_user_confirm_cb() - */ -int smartthings_unset_user_confirm_cb(smartthings_h handle); - -/** - * @brief Sets reset confirmation callback. - * @since_ses 1 - * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n - * %http://tizen.org/privilege/appmanager.launch \n - * %http://tizen.org/privilege/datasharing - * - * @remarks Only one callback function can be set with this function. - * @remarks If multiple callbacks are set, the last one is registered only. - * @remarks Callback is called when it needs user's confirm for reset. - * @remarks When callback is called, user can send a confirmation for reset as true or false. - * - * @param[in] handle The SmartThings handle - * @param[in] confirm_cb The reset confirm callback to register - * @param[in] user_data The user data to be passed to the callback function - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_ERROR_NONE Successful - * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied - * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed - * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable - * - * @see smartthings_unset_reset_confirm_cb() - */ -int smartthings_set_reset_confirm_cb(smartthings_h handle, - smartthings_reset_confirm_cb confirm_cb, - void *user_data); - -/** - * @brief Unsets reset confirmation callback. - * @since_ses 1 - * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n - * %http://tizen.org/privilege/appmanager.launch \n - * %http://tizen.org/privilege/datasharing - * - * @param[in] handle The SmartThings handle - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_ERROR_NONE Successful - * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied - * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed - * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable - * - * @see smartthings_set_reset_confirm_cb() - */ -int smartthings_unset_reset_confirm_cb(smartthings_h handle); - -/** - * @brief Sets reset result callback. - * @since_ses 1 - * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n - * %http://tizen.org/privilege/appmanager.launch \n - * %http://tizen.org/privilege/datasharing - * - * @remarks Only one callback function can be set with this function. - * @remarks If multiple callbacks are set, the last one is registered only. - * @remarks Callback is called when reset operation returns its result. - * @remarks When callback is called, user can check reset operation succeeds or fails. - * - * @param[in] handle The SmartThings handle - * @param[in] reset_result_cb The reset result callback to register - * @param[in] user_data The user data to be passed to the callback function - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_ERROR_NONE Successful - * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied - * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed - * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable - * - * @see smartthings_unset_reset_result_cb() - */ -int smartthings_set_reset_result_cb(smartthings_h handle, - smartthings_reset_result_cb reset_result_cb, - void *user_data); - -/** - * @brief Unsets reset result callback. - * @since_ses 1 - * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n - * %http://tizen.org/privilege/appmanager.launch \n - * %http://tizen.org/privilege/datasharing - * - * @param[in] handle The SmartThings handle - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_ERROR_NONE Successful - * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied - * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed - * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable - * - * @see smartthings_set_reset_result_cb() - */ -int smartthings_unset_reset_result_cb(smartthings_h handle); - - -/** - * @brief Sets callback for getting randomly generated PIN for the PIN-based ownership transfer request. - * @since_ses 1 - * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n - * %http://tizen.org/privilege/appmanager.launch \n - * %http://tizen.org/privilege/datasharing - * - * @remarks Only one callback function can be set with this function. - * @remarks If multiple callbacks are set, the last one is registered only. - * @remarks @a generated_cb callback is called when PIN is generated. - * @remarks @a close_cb callback is called when PIN based ownership transfer is finished. - * @remarks When @a generated_cb callback is called, user can see PIN value and length. - * @remarks When @a close_cb callback is called, user can know PIN based ownership transfer is finished. - * - * @param[in] handle The SmartThings handle - * @param[in] generated_cb The PIN generation callback to register - * @param[in] close_cb The PIN display close callback to register - * @param[in] user_data The user data to be passed to the callback function - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_ERROR_NONE Successful - * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied - * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed - * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable - * - * @see smartthings_unset_pin_cb() - */ -int smartthings_set_pin_cb(smartthings_h handle, - smartthings_pin_generated_cb generated_cb, - smartthings_pin_display_close_cb close_cb, - void *user_data); - -/** - * @brief Unsets PIN callback. - * @since_ses 1 - * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n - * %http://tizen.org/privilege/appmanager.launch \n - * %http://tizen.org/privilege/datasharing - * - * @param[in] handle The SmartThings handle - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_ERROR_NONE Successful - * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied - * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed - * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable - * - * @see smartthings_set_pin_cb() - */ -int smartthings_unset_pin_cb(smartthings_h handle); - -/** - * @brief Sets callback for getting Wi-Fi AP information during Easy-setup. - * @since_ses 1 - * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n - * %http://tizen.org/privilege/appmanager.launch \n - * %http://tizen.org/privilege/datasharing - * - * @remarks Only one callback function can be set with this function. - * @remarks If multiple callbacks are set, the last one is registered only. - * @remarks Callback is called when Wi-Fi provisioning event occurs. - * @remarks When callback is called, user can get Wi-Fi provisioning information. - * - * @param[in] handle The SmartThings handle - * @param[in] wifi_ap_cb The Wi-Fi AP callback to register - * @param[in] user_data The user data to be passed to the callback function - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_ERROR_NONE Successful - * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied - * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed - * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable - * - * @see smartthings_unset_wifi_ap_provisioning_cb() - */ -int smartthings_set_wifi_ap_provisioning_cb(smartthings_h handle, - smartthings_wifi_ap_provisioning_cb wifi_ap_cb, - void *user_data); - -/** - * @brief Unsets callback for getting Wi-Fi AP information during Easy-setup. - * @since_ses 1 - * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n - * %http://tizen.org/privilege/appmanager.launch \n - * %http://tizen.org/privilege/datasharing - * - * @param[in] handle The SmartThings handle - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_ERROR_NONE Successful - * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied - * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed - * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable - * - * @see smartthings_set_wifi_ap_provisioning_cb() - */ -int smartthings_unset_wifi_ap_provisioning_cb(smartthings_h handle); - -/** - * @brief Sets callback for getting device provisioning information. - * @since_ses 1 - * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n - * %http://tizen.org/privilege/appmanager.launch \n - * %http://tizen.org/privilege/datasharing - * - * @remarks Only one callback function can be set with this function. - * @remarks If multiple callbacks are set, the last one is registered only. - * @remarks Callback is called when device provisioning event occurs. - * @remarks When callback is called, user can get device provisioning information. - * - * @param[in] handle The SmartThings handle - * @param[in] dev_prov_cb The device provisioning callback to register - * @param[in] user_data The user data to be passed to the callback function - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_ERROR_NONE Successful - * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied - * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed - * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable - * - * @see smartthings_unset_device_provisioning_cb() - */ -int smartthings_set_device_provisioning_cb(smartthings_h handle, - smartthings_device_provisioning_cb dev_prov_cb, - void *user_data); - -/** - * @brief Unsets callback for getting device provisioning information. - * @since_ses 1 - * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n - * %http://tizen.org/privilege/appmanager.launch \n - * %http://tizen.org/privilege/datasharing - * - * @param[in] handle The SmartThings handle - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_ERROR_NONE Successful - * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied - * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed - * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable - * - * @see smartthings_set_device_provisioning_cb() - */ -int smartthings_unset_device_provisioning_cb(smartthings_h handle); - -/** - * @brief Sets callback for informing the scan AP list request. - * @since_ses 1 - * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n - * %http://tizen.org/privilege/appmanager.launch \n - * %http://tizen.org/privilege/datasharing - * - * @remarks Only one callback function can be set with this function. - * @remarks If multiple callbacks are set, the last one is registered only. - * @remarks Callback is called when GET request for access point list. - * @remarks When callback is called, user scans access points, sets AP list and sends it to agent. - * - * @param[in] handle The SmartThings handle - * @param[in] scan_ap_cb The callback to register - * @param[in] user_data The user data to be passed to the callback function - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_ERROR_NONE Successful - * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied - * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed - * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable - * - * @see smartthings_unset_scan_ap_cb() - * @see smartthings_send_ap_list() - */ -int smartthings_set_scan_ap_cb(smartthings_h handle, - smartthings_scan_ap_cb scan_ap_cb, - void *user_data); - -/** - * @brief Unsets callback for informing the scan AP list request. - * @since_ses 1 - * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n - * %http://tizen.org/privilege/appmanager.launch \n - * %http://tizen.org/privilege/datasharing - * - * @param[in] handle The SmartThings handle - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_ERROR_NONE Successful - * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied - * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed - * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable - * - * @see smartthings_set_scan_ap_cb() - */ -int smartthings_unset_scan_ap_cb(smartthings_h handle); - -/** - * @brief Sets callback for informing the stop soft AP request. - * @since_ses 1 - * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n - * %http://tizen.org/privilege/appmanager.launch \n - * %http://tizen.org/privilege/datasharing - * - * @remarks Only one callback function can be set with this function. - * @remarks If multiple callbacks are set, the last one is registered only. - * @remarks Callback is called when POST request for stopping soft AP. - * @remarks When callback is called, user stops soft AP. - * - * @param[in] handle The SmartThings handle - * @param[in] stop_soft_ap_cb The callback to register - * @param[in] user_data The user data to be passed to the callback function - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_ERROR_NONE Successful - * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied - * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed - * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable - * - * @see smartthings_unset_stop_soft_ap_cb() - */ -int smartthings_set_stop_soft_ap_cb(smartthings_h handle, - smartthings_stop_soft_ap_cb stop_soft_ap_cb, - void *user_data); - -/** - * @brief Unsets callback for informing the stop soft AP request. - * @since_ses 1 - * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n - * %http://tizen.org/privilege/appmanager.launch \n - * %http://tizen.org/privilege/datasharing - * - * @param[in] handle The SmartThings handle - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_ERROR_NONE Successful - * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied - * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed - * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable - * - * @see smartthings_set_stop_soft_ap_cb() - */ -int smartthings_unset_stop_soft_ap_cb(smartthings_h handle); - -/** - * @brief Sends a user confirmation for MUTUAL VERIFICATION BASED JUST WORK Ownership transfer. - * @since_ses 1 - * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n - * %http://tizen.org/privilege/appmanager.launch \n - * %http://tizen.org/privilege/datasharing \n - * %http://tizen.org/privilege/internet - * - * @param[in] handle The SmartThings handle - * @param[in] confirm The user confirmation for OTM(ownership transfer method) - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_ERROR_NONE Successful - * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied - * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed - * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable - * - * @see smartthings_set_user_confirm_cb() - * @see smartthings_unset_user_confirm_cb() - */ -int smartthings_send_user_confirm(smartthings_h handle, bool confirm); - - -/** - * @brief Sends a reset confirmation. - * @since_ses 1 - * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n - * %http://tizen.org/privilege/appmanager.launch \n - * %http://tizen.org/privilege/datasharing \n - * %http://tizen.org/privilege/internet - * - * @param[in] handle The SmartThings handle - * @param[in] confirm The reset confirmation - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_ERROR_NONE Successful - * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied - * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed - * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable - * - * @see smartthings_set_reset_confirm_cb() - * @see smartthings_unset_reset_confirm_cb() - */ -int smartthings_send_reset_confirm(smartthings_h handle, bool confirm); - -/** - * @brief Sends a reset command for resetting the device's Cloud signup and Easy-setup. - * @since_ses 1 - * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n - * %http://tizen.org/privilege/appmanager.launch \n - * %http://tizen.org/privilege/datasharing \n - * %http://tizen.org/privilege/internet - * - * @param[in] handle The SmartThings handle - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_ERROR_NONE Successful - * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied - * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed - * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable - * - * @see smartthings_set_reset_result_cb() - * @see smartthings_unset_reset_result_cb() - */ -int smartthings_reset(smartthings_h handle); - -/** - * @brief Gets SSID of access point. - * @since_ses 1 - * - * @remarks The @a ssid should be released using free(). - * - * @param[in] ap_info_h The SmartThings AP information handle - * @param[out] ssid The SSID name - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_ERROR_NONE Successful - * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed - * - * @see smartthings_set_wifi_ap_provisioning_cb() - * @see smartthings_unset_wifi_ap_provisioning_cb() - */ -int smartthings_apinfo_get_ssid(smartthings_ap_info_h ap_info_h, char **ssid); - -/** - * @brief Gets password of access point. - * @since_ses 1 - * - * @remarks The @a pwd should be released using free(). - * - * @param[in] ap_info_h The SmartThings AP information handle - * @param[out] pwd The password - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_ERROR_NONE Successful - * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed - * - * @see smartthings_set_wifi_ap_provisioning_cb() - * @see smartthings_unset_wifi_ap_provisioning_cb() - */ -int smartthings_apinfo_get_password(smartthings_ap_info_h ap_info_h, char **pwd); - -/** - * @brief Gets authentification type of access point. - * @since_ses 1 - * - * @param[in] ap_info_h The SmartThings AP information handle - * @param[out] authtype The authentification type - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_ERROR_NONE Successful - * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed - * - * @see smartthings_set_wifi_ap_provisioning_cb() - * @see smartthings_unset_wifi_ap_provisioning_cb() - */ -int smartthings_apinfo_get_authtype(smartthings_ap_info_h ap_info_h, smartthings_wifi_authtype_e *authtype); - -/** - * @brief Gets encryption type of access point. - * @since_ses 1 - * - * @param[in] ap_info_h The SmartThings AP information handle - * @param[out] enctype The encryption type - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_ERROR_NONE Successful - * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed - * - * @see smartthings_set_wifi_ap_provisioning_cb() - * @see smartthings_unset_wifi_ap_provisioning_cb() - */ -int smartthings_apinfo_get_enctype(smartthings_ap_info_h ap_info_h, smartthings_wifi_enctype_e *enctype); - -/** - * @brief Gets channel information of access point. - * @since_ses 1 - * - * @param[in] ap_info_h The SmartThings AP information handle - * @param[out] channel The frequency channel - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_ERROR_NONE Successful - * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed - * - * @see smartthings_set_wifi_ap_provisioning_cb() - * @see smartthings_unset_wifi_ap_provisioning_cb() - */ -int smartthings_apinfo_get_channel(smartthings_ap_info_h ap_info_h, int *channel); - -/** - * @brief Gets language of device provisioing information. - * @since_ses 1 - * - * @remarks The @a language should be released using free(). - * - * @param[in] dev_prov_h The SmartThings device provisioning information handle - * @param[out] language The IETF language tag using ISO 639X - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_ERROR_NONE Successful - * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed - * - * @see smartthings_set_device_provisioning_cb() - * @see smartthings_unset_device_provisioning_cb() - */ -int smartthings_devinfo_get_language(smartthings_device_prov_info_h dev_prov_h, char **language); - -/** - * @brief Gets country of device provisioing information. - * @since_ses 1 - * - * @remarks The @a country should be released using free(). - * - * @param[in] dev_prov_h The SmartThings device provisioning information handle - * @param[out] country The ISO Country Code (ISO 3166-1 Alpha-2) - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_ERROR_NONE Successful - * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed - * - * @see smartthings_set_device_provisioning_cb() - * @see smartthings_unset_device_provisioning_cb() - */ -int smartthings_devinfo_get_country(smartthings_device_prov_info_h dev_prov_h, char **country); - -/** - * @brief Gets datetime of device provisioing information. - * @since_ses 1 - * - * @remarks The @a datetime should be released using free(). - * - * @param[in] dev_prov_h The SmartThings device provisioning information handle - * @param[out] datetime The date and time - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_ERROR_NONE Successful - * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed - * - * @see smartthings_set_device_provisioning_cb() - * @see smartthings_unset_device_provisioning_cb() - */ -int smartthings_devinfo_get_datetime(smartthings_device_prov_info_h dev_prov_h, char **datetime); - -/** - * @brief Creates a SmartThings AP list handle. - * @since_ses 1 - * - * @remarks The @a ap_list_h must be released using smartthings_aplist_destroy(). - * - * @param[out] ap_list_h The SmartThings AP list handle to be newly created on success - * @param[in] count The count of AP - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_ERROR_NONE Successful - * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_ERROR_OUT_OF_MEMORY Out of memory - * - * @see smartthings_aplist_destroy() - */ -int smartthings_aplist_create(smartthings_ap_list_h *ap_list_h, unsigned int count); - -/** - * @brief Destroys a SmartThings AP list handle. - * @since_ses 1 - * - * @param[in] ap_list_h The SmartThings AP list handle - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_ERROR_NONE Successful - * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter - * - * @see smartthings_aplist_create() - */ -int smartthings_aplist_destroy(smartthings_ap_list_h ap_list_h); - -/** - * @brief Sets SSID at the specific index of AP list handle. - * @since_ses 1 - * - * @param[in] ap_list_h The SmartThings AP list handle - * @param[in] idx The index - * @param[in] ssid The SSID of AP - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_ERROR_NONE Successful - * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter - * - * @see smartthings_aplist_create() - * @see smartthings_aplist_destroy() - */ -int smartthings_aplist_set_ssid(smartthings_ap_list_h ap_list_h, int idx, const char *ssid); - -/** - * @brief Sets BSSID at the specific index of AP list handle. - * @since_ses 1 - * - * @param[in] ap_list_h The SmartThings AP list handle - * @param[in] idx The index - * @param[in] bssid The BSSID of AP - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_ERROR_NONE Successful - * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter - * - * @see smartthings_aplist_create() - * @see smartthings_aplist_destroy() - */ -int smartthings_aplist_set_bssid(smartthings_ap_list_h ap_list_h, int idx, const char *bssid); - -/** - * @brief Sets authentification type at the specific index of AP list handle. - * @since_ses 1 - * - * @param[in] ap_list_h The SmartThings AP list handle - * @param[in] idx The index - * @param[in] authtype The authentification type of AP - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_ERROR_NONE Successful - * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter - * - * @see smartthings_aplist_create() - * @see smartthings_aplist_destroy() - */ -int smartthings_aplist_set_authtype(smartthings_ap_list_h ap_list_h, int idx, smartthings_wifi_authtype_e authtype); - -/** - * @brief Sets encryption type at the specific index of AP list handle. - * @since_ses 1 - * - * @param[in] ap_list_h The SmartThings AP list handle - * @param[in] idx The index - * @param[in] enctype The encryption type of AP - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_ERROR_NONE Successful - * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter - * - * @see smartthings_aplist_create() - * @see smartthings_aplist_destroy() - */ -int smartthings_aplist_set_enctype(smartthings_ap_list_h ap_list_h, int idx, smartthings_wifi_enctype_e enctype); - -/** - * @brief Sets frequency channel at the specific index of AP list handle. - * @since_ses 1 - * - * @param[in] ap_list_h The SmartThings AP list handle - * @param[in] idx The index - * @param[in] channel The frequency channel of AP - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_ERROR_NONE Successful - * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter - * - * @see smartthings_aplist_create() - * @see smartthings_aplist_destroy() - */ -int smartthings_aplist_set_channel(smartthings_ap_list_h ap_list_h, int idx, int channel); - -/** - * @brief Sets signal level at the specific index of AP list handle. - * @since_ses 1 - * - * @param[in] ap_list_h The SmartThings AP list handle - * @param[in] idx The index - * @param[in] signal_level The signal level of AP - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_ERROR_NONE Successful - * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter - * - * @see smartthings_aplist_create() - * @see smartthings_aplist_destroy() - */ -int smartthings_aplist_set_signal_level(smartthings_ap_list_h ap_list_h, int idx, int signal_level); - -/** - * @brief Sets max speed rate at the specific index of AP list handle. - * @since_ses 1 - * - * @param[in] ap_list_h The SmartThings AP list handle - * @param[in] idx The index - * @param[in] max_rate The max speed rate of AP - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_ERROR_NONE Successful - * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter - * - * @see smartthings_aplist_create() - * @see smartthings_aplist_destroy() - */ -int smartthings_aplist_set_max_rate(smartthings_ap_list_h ap_list_h, int idx, int max_rate); - -/** - * @brief Sends the scanned AP list. - * @since_ses 1 - * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n - * %http://tizen.org/privilege/appmanager.launch \n - * %http://tizen.org/privilege/datasharing \n - * %http://tizen.org/privilege/internet - * - * @param[in] handle The SmartThings handle - * @param[in] ap_list_h The SmartThings AP list handle - * @param[in] req_id The request ID - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_ERROR_NONE Successful - * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_ERROR_OUT_OF_MEMORY Out of memory - * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied - * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed - * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable - * - * @see smartthings_aplist_create() - * @see smartthings_aplist_destroy() - * @see smartthings_set_scan_ap_cb() - */ -int smartthings_send_ap_list(smartthings_h handle, smartthings_ap_list_h ap_list_h, int req_id); - -/** - * @brief Creates a SmartThings cloud information handle. - * @since_ses 1 - * - * @remarks The @a cloud_info_h must be released using smartthings_cloudinfo_destroy(). - * - * @param[out] cloud_info_h The SmartThings cloud information handle to be newly created on success - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_ERROR_NONE Successful - * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_ERROR_OUT_OF_MEMORY Out of memory - * - * @see smartthings_cloudinfo_destroy() - */ -int smartthings_cloudinfo_create(smartthings_cloud_info_h *cloud_info_h); - -/** - * @brief Destroys a SmartThings cloud information handle. - * @since_ses 1 - * - * @param[in] cloud_info_h The SmartThings cloud information handle - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_ERROR_NONE Successful - * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter - * - * @see smartthings_cloudinfo_create() - */ -int smartthings_cloudinfo_destroy(smartthings_cloud_info_h cloud_info_h); - -/** - * @brief Sets region of cloud information. - * @since_ses 1 - * - * @remarks The @a region can be set to one of "global" or "china". - * @remarks If it doesn't use this function, the @a region will be set to "global" internally. - * - * @param[in] cloud_info_h The SmartThings cloud information handle - * @param[in] region The region name - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_ERROR_NONE Successful - * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter - */ -int smartthings_cloudinfo_set_region(smartthings_cloud_info_h cloud_info_h, const char *region); - -/** - * @brief Sets authentification provider of cloud information. - * @since_ses 1 - * - * @param[in] cloud_info_h The SmartThings cloud information handle - * @param[in] auth_provider The authentification provider - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_ERROR_NONE Successful - * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter - */ -int smartthings_cloudinfo_set_auth_provider(smartthings_cloud_info_h cloud_info_h, const char *auth_provider); - -/** - * @brief Sets access token of cloud information. - * @since_ses 1 - * - * @param[in] cloud_info_h The SmartThings cloud information handle - * @param[in] access_token The access token - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_ERROR_NONE Successful - * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter - */ -int smartthings_cloudinfo_set_access_token(smartthings_cloud_info_h cloud_info_h, const char *access_token); - -/** - * @brief Sets refresh token of cloud information. - * @since_ses 1 - * - * @param[in] cloud_info_h The SmartThings cloud information handle - * @param[in] refresh_token The refresh token - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_ERROR_NONE Successful - * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter - */ -int smartthings_cloudinfo_set_refresh_token(smartthings_cloud_info_h cloud_info_h, const char *refresh_token); - -/** - * @brief Sets user ID of cloud information. - * @since_ses 1 - * - * @param[in] cloud_info_h The SmartThings cloud information handle - * @param[in] user_id The user ID - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_ERROR_NONE Successful - * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter - */ -int smartthings_cloudinfo_set_user_id(smartthings_cloud_info_h cloud_info_h, const char *user_id); - -/** - * @brief Sets client ID of cloud information. - * @since_ses 1 - * - * @param[in] cloud_info_h The SmartThings cloud information handle - * @param[in] client_id The client ID - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_ERROR_NONE Successful - * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter - */ -int smartthings_cloudinfo_set_client_id(smartthings_cloud_info_h cloud_info_h, const char *client_id); - -/** - * @brief Requests to sign up to cloud. - * @since_ses 1 - * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n - * %http://tizen.org/privilege/appmanager.launch \n - * %http://tizen.org/privilege/datasharing \n - * %http://tizen.org/privilege/internet - * - * @param[in] handle The SmartThings handle - * @param[in] cloud_info_h The handle for cloud signup - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_ERROR_NONE Successful - * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied - * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed - * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable - */ -int smartthings_sign_up_cloud(smartthings_h handle, smartthings_cloud_info_h cloud_info_h); - -/** - * @brief Sets preconfigured PIN. - * @since_ses 1 - * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n - * %http://tizen.org/privilege/appmanager.launch \n - * %http://tizen.org/privilege/datasharing - * - * @param[in] handle The SmartThings handle - * @param[in] pin The PIN code to preconfigure - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_ERROR_NONE Successful - * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied - * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed - * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable - */ -int smartthings_set_preconfigured_pin(smartthings_h handle, const char* pin); - -/** - * @brief Sets MOT(multiple ownership transfer) status. - * @since_ses 1 - * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master \n - * %http://tizen.org/privilege/appmanager.launch \n - * %http://tizen.org/privilege/datasharing - * - * @param[in] handle The SmartThings handle - * @param[in] enable The MOT(multiple ownership transfer) status - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_ERROR_NONE Successful - * @retval #SMARTTHINGS_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_ERROR_PERMISSION_DENIED Permission denied - * @retval #SMARTTHINGS_ERROR_OPERATION_FAILED Operation failed - * @retval #SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE Service unavailable - */ -int smartthings_set_mot_status(smartthings_h handle, bool enable); - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __SAMSUNG_EXPERIENCE_SERVICE_SMARTTHINGS_H__ */ diff --git a/inc/smartthings_payload.h b/inc/smartthings_payload.h deleted file mode 100644 index 988585d..0000000 --- a/inc/smartthings_payload.h +++ /dev/null @@ -1,663 +0,0 @@ -/***************************************************************** - * - * Copyright (c) 2018 Samsung Electronics Co., Ltd. All Rights Reserved - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ******************************************************************/ - - -#ifndef __SAMSUNG_EXPERIENCE_SERVICE_SMARTTHINGS_PAYLOAD_H__ -#define __SAMSUNG_EXPERIENCE_SERVICE_SMARTTHINGS_PAYLOAD_H__ - -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * @file smartthings_payload.h - */ - -/** - * @addtogroup CAPI_SMARTTHINGS_THING_PAYLOAD_MODULE - * @{ - */ - -/** - * @brief The SmartThings payload handle. - * @since_ses 1 - */ -typedef struct smartthings_payload_s *smartthings_payload_h; - -/** - * @brief Creates a SmartThings payload handle. - * @since_ses 1 - * - * @remarks The @a payload must be released using smartthings_payload_destroy(). - * @remarks If the @a payload is set to parent payload as an object or object array - * using smartthings_payload_set_object() or smartthings_payload_set_object_array(), - * the @a payload must not be released. - - * @param[out] payload The SmartThings payload handle to be newly created on success - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful - * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_RESOURCE_ERROR_OUT_OF_MEMORY Out of memory - * - * @see smartthings_payload_destroy() - */ -int smartthings_payload_create(smartthings_payload_h *payload); - -/** - * @brief Destroys a SmartThings payload handle and releases all its resources. - * @since_ses 1 - * - * @remarks If the @a payload has child payload, its child payload will be released as well. - * - * @param[in] payload The SmartThings payload handle - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful - * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter - * - * @see smartthings_payload_create() - */ -int smartthings_payload_destroy(smartthings_payload_h payload); - -/** - * @brief Sets an integer value for the attribute name. - * @since_ses 1 - * - * @remarks The @a attr_name is key value, one of several properties of the resource type. - * @remarks The function replaces any existing value for the given @a attr_name. - * - * @param[in] payload The SmartThings payload handle - * @param[in] attr_name The attribute name - * @param[in] value The value to set - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful - * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter - */ -int smartthings_payload_set_int(smartthings_payload_h payload, const char *attr_name, int value); - -/** - * @brief Sets a boolean value for the attribute name. - * @since_ses 1 - * - * @remarks The @a attr_name is key value, one of several properties of the resource type. - * @remarks The function replaces any existing value for the given @a attr_name. - * - * @param[in] payload The SmartThings payload handle - * @param[in] attr_name The attribute name - * @param[in] value The value to set - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful - * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter - */ -int smartthings_payload_set_bool(smartthings_payload_h payload, const char *attr_name, bool value); - -/** - * @brief Sets a double value for the attribute name. - * @since_ses 1 - * - * @remarks The @a attr_name is key value, one of several properties of the resource type. - * @remarks The function replaces any existing value for the given @a attr_name. - * - * @param[in] payload The SmartThings payload handle - * @param[in] attr_name The attribute name - * @param[in] value The value to set - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful - * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter - */ -int smartthings_payload_set_double(smartthings_payload_h payload, const char *attr_name, double value); - -/** - * @brief Sets a string value for the attribute name. - * @since_ses 1 - * - * @remarks The @a attr_name is key value, one of several properties of the resource type. - * @remarks The function replaces any existing value for the given @a attr_name. - * - * @param[in] payload The SmartThings payload handle - * @param[in] attr_name The attribute name - * @param[in] value The value to set - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful - * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter - */ -int smartthings_payload_set_string(smartthings_payload_h payload, const char *attr_name, const char *value); - -/** - * @brief Sets a byte string value and length for the attribute name. - * @since_ses 1 - * - * @remarks The @a attr_name is key value, one of several properties of the resource type. - * @remarks The function replaces any existing value for the given @a attr_name. - * - * @param[in] payload The SmartThings payload handle - * @param[in] attr_name The attribute name - * @param[in] value The value to set - * @param[in] length The size of value - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful - * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_RESOURCE_ERROR_OPERATION_FAILED Operation failed - */ -int smartthings_payload_set_byte_string(smartthings_payload_h payload, const char *attr_name, const char *value, unsigned int length); - -/** - * @brief Sets an object value for the attribute name. - * @since_ses 1 - * - * @remarks The @a attr_name is key value, one of several properties of the resource type. - * @remarks The @a value is SmartThings payload handle. - * @remarks The function replaces any existing value for the given @a attr_name. - * - * @param[in] payload The SmartThings payload handle - * @param[in] attr_name The attribute name - * @param[in] value The value to set - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful - * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter - */ -int smartthings_payload_set_object(smartthings_payload_h payload, const char *attr_name, smartthings_payload_h value); - -/** - * @brief Sets an integer array for the attribute name. - * @since_ses 1 - * - * @remarks The @a attr_name is key value, one of several properties of the resource type. - * @remarks The function replaces any existing array for the given @a attr_name. - * - * @param[in] payload The SmartThings payload handle - * @param[in] attr_name The attribute name - * @param[in] array The array associated with the given attribute name - * @param[in] length The length of @a array - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful - * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter - */ -int smartthings_payload_set_int_array(smartthings_payload_h payload, const char *attr_name, const int *array, unsigned int length); - -/** - * @brief Sets a boolean array for the attribute name. - * @since_ses 1 - * - * @remarks The @a attr_name is key value, one of several properties of the resource type. - * @remarks The function replaces any existing array for the given @a attr_name. - * - * @param[in] payload The SmartThings payload handle - * @param[in] attr_name The attribute name - * @param[in] array The array associated with the given attribute name - * @param[in] length The length of @a array - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful - * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter - */ -int smartthings_payload_set_bool_array(smartthings_payload_h payload, const char *attr_name, const bool *array, unsigned int length); - -/** - * @brief Sets a double array for the attribute name. - * @since_ses 1 - * - * @remarks The @a attr_name is key value, one of several properties of the resource type. - * @remarks The function replaces any existing array for the given @a attr_name. - * - * @param[in] payload The SmartThings payload handle - * @param[in] attr_name The attribute name - * @param[in] array The array associated with the given attribute name - * @param[in] length The length of @a array - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful - * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter - */ -int smartthings_payload_set_double_array(smartthings_payload_h payload, const char *attr_name, const double *array, unsigned int length); - -/** - * @brief Sets a string array for the attribute name. - * @since_ses 1 - * - * @remarks The @a attr_name is key value, one of several properties of the resource type. - * @remarks The function replaces any existing array for the given @a attr_name. - * - * @param[in] payload The SmartThings payload handle - * @param[in] attr_name The attribute name - * @param[in] array The array associated with the given attribute name - * @param[in] length The length of @a array - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful - * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter - */ -int smartthings_payload_set_string_array(smartthings_payload_h payload, const char *attr_name, const char **array, unsigned int length); - -/** - * @brief Sets an object array for the attribute name. - * @since_ses 1 - * - * @remarks The @a attr_name is key value, one of several properties of the resource type. - * @remarks The function replaces any existing array for the given @a attr_name. - * - * @param[in] payload The SmartThings payload handle - * @param[in] attr_name The attribute name - * @param[in] array The array associated with the given attribute name - * @param[in] length The length of @a array - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful - * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_RESOURCE_ERROR_OUT_OF_MEMORY Out of memory - */ -int smartthings_payload_set_object_array(smartthings_payload_h payload, const char *attr_name, smartthings_payload_h *array, unsigned int length); - -/** - * @brief Adds a payload for child resource of collection resource. - * @since_ses 1 - * - * @remarks The @a resource_uri is key value, one of several child resources of the collection resource. - * @remarks The @a value is SmartThings payload handle. - * @remarks The function replaces any existing payload for the given @a resource_uri. - * - * @param[in] payload The SmartThings payload handle - * @param[in] resource_uri The resource URI of child resource - * @param[in] value The payload associated with the given resource URI - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful - * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter - */ -int smartthings_payload_add_collection_object(smartthings_payload_h payload, const char *resource_uri, smartthings_payload_h value); - -/** - * @brief Gets an integer value for the attribute name. - * @since_ses 1 - * - * @remarks The @a attr_name is key value, one of several properties of the resource type. - * - * @param[in] payload The SmartThings payload handle - * @param[in] attr_name The attribute name - * @param[out] value The value associated with the given attribute name - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful - * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_RESOURCE_ERROR_NO_DATA No data - */ -int smartthings_payload_get_int(smartthings_payload_h payload, const char *attr_name, int *value); - -/** - * @brief Gets a boolean value for the attribute name. - * @since_ses 1 - * - * @remarks The @a attr_name is key value, one of several properties of the resource type. - * - * @param[in] payload The SmartThings payload handle - * @param[in] attr_name The attribute name - * @param[out] value The value associated with the given attribute name - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful - * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_RESOURCE_ERROR_NO_DATA No data - */ -int smartthings_payload_get_bool(smartthings_payload_h payload, const char *attr_name, bool *value); - -/** - * @brief Gets a double value for the attribute name. - * @since_ses 1 - * - * @remarks The @a attr_name is key value, one of several properties of the resource type. - * - * @param[in] payload The SmartThings payload handle - * @param[in] attr_name The attribute name - * @param[out] value The value associated with the given attribute name - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful - * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_RESOURCE_ERROR_NO_DATA No data - */ -int smartthings_payload_get_double(smartthings_payload_h payload, const char *attr_name, double *value); - -/** - * @brief Gets a string value for the attribute name. - * @since_ses 1 - * - * @remarks The @a attr_name is key value, one of several properties of the resource type. - * @remarks The @a value should be released using free(). - * - * @param[in] payload The SmartThings payload handle - * @param[in] attr_name The attribute name - * @param[out] value The value associated with the given attribute name - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful - * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_RESOURCE_ERROR_NO_DATA No data - */ -int smartthings_payload_get_string(smartthings_payload_h payload, const char *attr_name, char **value); - -/** - * @brief Gets a byte string value and length for the attribute name. - * @since_ses 1 - * - * @remarks The @a attr_name is key value, one of several properties of the resource type. - * @remarks The @a value should be released using free(). - * - * @param[in] payload The SmartThings payload handle - * @param[in] attr_name The attribute name - * @param[out] value The value associated with the given attribute name - * @param[out] length The size of value - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful - * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_RESOURCE_ERROR_NO_DATA No data - */ -int smartthings_payload_get_byte_string(smartthings_payload_h payload, const char *attr_name, char **value, unsigned int *length); - -/** - * @brief Gets an object value for the attribute name. - * @since_ses 1 - * - * @remarks The @a attr_name is key value, one of several properties of the resource type. - * @remarks The @a value is SmartThings payload handle. - * @remarks The @a value must be released using smartthings_payload_release_object(). - * - * @param[in] payload The SmartThings payload handle - * @param[in] attr_name The attribute name - * @param[out] value The value associated with the given attribute name - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful - * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_RESOURCE_ERROR_OUT_OF_MEMORY Out of memory - * @retval #SMARTTHINGS_RESOURCE_ERROR_NO_DATA No data - */ -int smartthings_payload_get_object(smartthings_payload_h payload, const char *attr_name, smartthings_payload_h *value); - -/** - * @brief Gets an integer array for the attribute name. - * @since_ses 1 - * - * @remarks The @a attr_name is key value, one of several properties of the resource type. - * @remarks The @a array must be released using smartthings_payload_release_int_array(). - * - * @param[in] payload The SmartThings payload handle - * @param[in] attr_name The attribute name - * @param[out] array The array associated with the given attribute name - * @param[out] length The length of @a array - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful - * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_RESOURCE_ERROR_OUT_OF_MEMORY Out of memory - * @retval #SMARTTHINGS_RESOURCE_ERROR_NO_DATA No data - * - * @see smartthings_payload_release_int_array() - */ -int smartthings_payload_get_int_array(smartthings_payload_h payload, const char *attr_name, int **array, unsigned int *length); - -/** - * @brief Gets a boolean array for the attribute name. - * @since_ses 1 - * - * @remarks The @a attr_name is key value, one of several properties of the resource type. - * @remarks The @a array must be released using smartthings_payload_release_bool_array(). - * - * @param[in] payload The SmartThings payload handle - * @param[in] attr_name The attribute name - * @param[out] array The array associated with the given attribute name - * @param[out] length The length of @a array - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful - * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_RESOURCE_ERROR_OUT_OF_MEMORY Out of memory - * @retval #SMARTTHINGS_RESOURCE_ERROR_NO_DATA No data - * - * @see smartthings_payload_release_bool_array() - */ -int smartthings_payload_get_bool_array(smartthings_payload_h payload, const char *attr_name, bool **array, unsigned int *length); - -/** - * @brief Gets a double array for the attribute name. - * @since_ses 1 - * - * @remarks The @a attr_name is key value, one of several properties of the resource type. - * @remarks The @a array must be released using smartthings_payload_release_double_array(). - * - * @param[in] payload The SmartThings payload handle - * @param[in] attr_name The attribute name - * @param[out] array The array associated with the given attribute name - * @param[out] length The length of @a array - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful - * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_RESOURCE_ERROR_OUT_OF_MEMORY Out of memory - * @retval #SMARTTHINGS_RESOURCE_ERROR_NO_DATA No data - * - * @see smartthings_payload_release_double_array() - */ -int smartthings_payload_get_double_array(smartthings_payload_h payload, const char *attr_name, double **array, unsigned int *length); - -/** - * @brief Gets a string array for the attribute name. - * @since_ses 1 - * - * @remarks The @a attr_name is key value, one of several properties of the resource type. - * @remarks The @a array must be released using smartthings_payload_release_string_array(). - * - * @param[in] payload The SmartThings payload handle - * @param[in] attr_name The attribute name - * @param[out] array The array associated with the given attribute name - * @param[out] length The length of @a array - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful - * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_RESOURCE_ERROR_OUT_OF_MEMORY Out of memory - * @retval #SMARTTHINGS_RESOURCE_ERROR_NO_DATA No data - * - * @see smartthings_payload_release_string_array() - */ -int smartthings_payload_get_string_array(smartthings_payload_h payload, const char *attr_name, char ***array, unsigned int *length); - -/** - * @brief Gets an object array for the attribute name. - * @since_ses 1 - * - * @remarks The @a attr_name is key value, one of several properties of the resource type. - * @remarks The @a array is a list of SmartThings payload handle. - * @remarks The @a array must be released using smartthings_payload_release_object_array(). - * - * @param[in] payload The SmartThings payload handle - * @param[in] attr_name The attribute name - * @param[out] array The array associated with the given attribute name - * @param[out] length The length of @a array - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful - * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_RESOURCE_ERROR_OUT_OF_MEMORY Out of memory - * @retval #SMARTTHINGS_RESOURCE_ERROR_NO_DATA No data - * - * @see smartthings_payload_release_object_array() - */ -int smartthings_payload_get_object_array(smartthings_payload_h payload, const char *attr_name, smartthings_payload_h **array, unsigned int *length); - -/** - * @brief Gets a payload for child resource of collection resource. - * @since_ses 1 - * - * @remarks The @a resource_uri is key value, one of several child resources of the collection resource. - * @remarks The @a value is SmartThings payload handle. - * @remarks The @a value must be released using smartthings_payload_release_object(). - * - * @param[in] payload The SmartThings payload handle - * @param[in] resource_uri The resource URI of child resource - * @param[out] value The payload associated with the given resource URI - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful - * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_RESOURCE_ERROR_OUT_OF_MEMORY Out of memory - * @retval #SMARTTHINGS_RESOURCE_ERROR_NO_DATA No data - */ -int smartthings_payload_get_collection_object(smartthings_payload_h payload, const char *resource_uri, smartthings_payload_h *value); - -/** - * @brief Releases an integer array of the SmartThings payload. - * @since_ses 1 - * - * @param[in] array The array to release - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful - * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter - * - * @see smartthings_payload_get_int_array() - */ -int smartthings_payload_release_int_array(int *array); - -/** - * @brief Releases a boolean array of the SmartThings payload. - * @since_ses 1 - * - * @param[in] array The array to release - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful - * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter - * - * @see smartthings_payload_get_bool_array() - */ -int smartthings_payload_release_bool_array(bool *array); - -/** - * @brief Releases a double array of the SmartThings payload. - * @since_ses 1 - * - * @param[in] array The array to release - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful - * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter - * - * @see smartthings_payload_get_double_array() - */ -int smartthings_payload_release_double_array(double *array); - -/** - * @brief Releases a string array of the SmartThings payload. - * @since_ses 1 - * - * @param[in] array The array to release - * @param[in] length The length of @a array - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful - * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter - * - * @see smartthings_payload_get_string_array() - */ -int smartthings_payload_release_string_array(char **array, unsigned int length); - -/** - * @brief Releases an object array of the SmartThings payload. - * @since_ses 1 - * - * @param[in] array The array to release - * @param[in] length The length of @a array - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful - * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter - * - * @see smartthings_payload_get_object_array() - */ -int smartthings_payload_release_object_array(smartthings_payload_h *array, unsigned int length); - -/** - * @brief Releases a SmartThings payload. - * @since_ses 1 - * - * @remarks The function is different with smartthings_payload_destroy(). - * @remarks The function releases only payload value that is obtained by smartthings_payload_get_object(). - * - * @param[in] payload The payload to release - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful - * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter - * - * @see smartthings_payload_get_object() - */ -int smartthings_payload_release_object(smartthings_payload_h payload); - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __SAMSUNG_EXPERIENCE_SERVICE_SMARTTHINGS_PAYLOAD_H__ */ diff --git a/inc/smartthings_resource.h b/inc/smartthings_resource.h deleted file mode 100644 index 1968c50..0000000 --- a/inc/smartthings_resource.h +++ /dev/null @@ -1,364 +0,0 @@ -/***************************************************************** - * - * Copyright (c) 2018 Samsung Electronics Co., Ltd. All Rights Reserved - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ******************************************************************/ - - -#ifndef __SAMSUNG_EXPERIENCE_SERVICE_SMARTTHINGS_RESOURCE_H__ -#define __SAMSUNG_EXPERIENCE_SERVICE_SMARTTHINGS_RESOURCE_H__ - -#include -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * @file smartthings_resource.h - */ - -/** - * @addtogroup CAPI_SMARTTHINGS_THING_RESOURCE_MODULE - * @{ - */ - -/** - * @brief Enumeration for the SmartThings resource error. - * @since_ses 1 - */ -typedef enum { - SMARTTHINGS_RESOURCE_ERROR_NONE = TIZEN_ERROR_NONE, /**< Successful */ - SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER = TIZEN_ERROR_INVALID_PARAMETER, /**< Invalid parameter */ - SMARTTHINGS_RESOURCE_ERROR_OUT_OF_MEMORY = TIZEN_ERROR_OUT_OF_MEMORY, /**< Out of memory */ - SMARTTHINGS_RESOURCE_ERROR_PERMISSION_DENIED = TIZEN_ERROR_PERMISSION_DENIED, /**< Permission denied */ - SMARTTHINGS_RESOURCE_ERROR_NO_DATA = TIZEN_ERROR_NO_DATA, /**< No data */ - SMARTTHINGS_RESOURCE_ERROR_NOT_SUPPORTED = TIZEN_ERROR_NOT_SUPPORTED, /**< Not supported */ - SMARTTHINGS_RESOURCE_ERROR_OPERATION_FAILED = TIZEN_ERROR_UNKNOWN - 1, /**< Operation failed */ - SMARTTHINGS_RESOURCE_ERROR_SERVICE_UNAVAILABLE = TIZEN_ERROR_UNKNOWN -2 /**< Service unavailable */ -} smartthings_resource_error_e; - -/** - * @brief Enumeration for the request type of resource and collection resource. - * @since_ses 1 - */ -typedef enum { - SMARTTHINGS_RESOURCE_REQUEST_GET = 0, /**< Get request type */ - SMARTTHINGS_RESOURCE_REQUEST_SET = 1, /**< Set request type */ - SMARTTHINGS_RESOURCE_REQUEST_COLLECTION_GET = 2, /**< Get request type for collection */ - SMARTTHINGS_RESOURCE_REQUEST_COLLECTION_SET = 3 /**< Set request type for collection */ -} smartthings_resource_req_type_e; - -/** - * @brief Enumeration for RPC connection status. - * @since_ses 1 - */ -typedef enum { - SMARTTHINGS_RESOURCE_CONNECTION_STATUS_CONNECTED = 0, /**< Connection is connected */ - SMARTTHINGS_RESOURCE_CONNECTION_STATUS_DISCONNECTED, /**< Connection is disconnected */ - SMARTTHINGS_RESOURCE_CONNECTION_STATUS_REJECTED, /**< Connection is rejected */ -} smartthings_resource_connection_status_e; - -/** - * @brief The SmartThings resource handle. - * @since_ses 1 - */ -typedef struct smartthings_resource_s *smartthings_resource_h; - -/** - * @brief Callback for status of connection to SmartThings Thing agent. - * @since_ses 1 - * - * @remarks The @a handle should not be released. - * @remarks The @a handle is the same object for which the callback was set/added. - * @remarks The @a handle will be released when smartthings_deinitialize() is called. - * @remarks When callback is called, user can see connection status as #smartthings_connection_status_e enumeration value. - * - * @param[in] result The result of connection operation - * @param[in] handle The SmartThings handle - * @param[in] status The status of connection - * @param[in] user_data The user data passed from the callback registration function - * - * @see smartthings_resource_initialize() - */ -typedef void (*smartthings_resource_connection_status_cb)(smartthings_resource_h handle, smartthings_resource_connection_status_e status, void *user_data); - -/** - * @brief Callback for handling request(GET/SET) messages. - * @since_ses 1 - * - * @remarks The @a payload is NULL when @a req_type is #SMARTTHINGS_RESOURCE_REQUEST_GET. - * @remarks The @a payload can be used only in the callback. To use outside, make a copy. - * @remarks The @a st_h should not be released. - * @remarks The @a st_h is the same object for which the callback was set/added. - * @remarks The @a st_h will be released when smartthings_resource_deinitialize() is called. - * @remarks The @a payload should not be released. - * @remarks The @a uri can be used only in the callback. To use outside, make a copy. - * - * @param[in] st_h The SmartThings resource handle - * @param[in] req_id The request ID of request message - * @param[in] uri The resource URI - * @param[in] req_type The request type for request message - * @param[in] payload The payload for SET request message - * @param[in] user_data The user data passed from the callback registration function - * - * @see smartthings_resource_set_request_cb() - * @see smartthings_resource_unset_request_cb() - */ -typedef void (*smartthings_resource_request_cb)(smartthings_resource_h st_h, int req_id, const char *uri, - smartthings_resource_req_type_e req_type, - smartthings_payload_h payload, void *user_data); - -/** - * @brief Callback for status of resource registration to cloud. - * @since_ses 1 - * - * @remarks This callback will be called when status of resource registration is changed. - * @remarks The @a st_h should not be released. - * @remarks The @a st_h is the same object for which the callback was set/added. - * @remarks The @a st_h will be released when smartthings_resource_deinitialize() is called. - * @remarks The @a is_registered will be true when resources are registered to cloud. - * - * @param[in] st_h The SmartThings resource handle - * @param[in] is_registered The status of resource registration to cloud - * @param[in] user_data The user data passed from the callback registration function - * - * @see smartthings_resource_set_cloud_registration_status_cb() - * @see smartthings_resource_unset_cloud_registration_status_cb() - */ -typedef void (*smartthings_resource_cloud_registration_status_cb)(smartthings_resource_h st_h, bool is_registered, void *user_data); - - -/** - * @brief Initializes a resource handle and connects to agent. - * @since_ses 1 - * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.resource \n - * %http://tizen.org/privilege/appmanager.launch \n - * %http://tizen.org/privilege/datasharing - * - * @remarks The @a st_h must be released using smartthings_resource_deinitialize(). - * @remarks Ths function returns #SMARTTHINGS_RESOURCE_ERROR_PERMISSION_DENIED\n - * if the application has no app-defined privilege for 'http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.resource'. - * - * @param[out] st_h The SmartThings resource handle to be newly created on success - * @param[in] connection_status_cb The connection status callback to register - * @param[in] user_data The user data to be passed to the callback function - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful - * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_RESOURCE_ERROR_OUT_OF_MEMORY Out of memory - * @retval #SMARTTHINGS_RESOURCE_ERROR_PERMISSION_DENIED Permission denied - * @retval #SMARTTHINGS_RESOURCE_ERROR_OPERATION_FAILED Operation failed - * @retval #SMARTTHINGS_RESOURCE_ERROR_NOT_SUPPORTED Not supported - * @retval #SMARTTHINGS_RESOURCE_ERROR_SERVICE_UNAVAILABLE Service unavailable - * - * @see smartthings_resource_deinitialize() - */ -int smartthings_resource_initialize(smartthings_resource_h *st_h, - smartthings_resource_connection_status_cb connection_status_cb, - void *user_data); - -/** - * @brief Deinitializes a resource handle and disconnects from the agent. - * @since_ses 1 - * - * @param[in] st_h The SmartThings resource handle - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful - * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter - * - * @see smartthings_resource_initialize() - */ -int smartthings_resource_deinitialize(smartthings_resource_h st_h); - -/** - * @brief Sets resource request callback. - * @since_ses 1 - * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.resource \n - * %http://tizen.org/privilege/appmanager.launch \n - * %http://tizen.org/privilege/datasharing - * - * @param[in] st_h The SmartThings resource handle - * @param[in] req_cb The request callback to register - * @param[in] user_data The user data to be passed to the callback function - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful - * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_RESOURCE_ERROR_PERMISSION_DENIED Permission denied - * @retval #SMARTTHINGS_RESOURCE_ERROR_OPERATION_FAILED Operation failed - * @retval #SMARTTHINGS_RESOURCE_ERROR_SERVICE_UNAVAILABLE Service unavailable - * - * @see smartthings_resource_unset_request_cb() - */ -int smartthings_resource_set_request_cb(smartthings_resource_h st_h, - smartthings_resource_request_cb req_cb, - void *user_data); - -/** - * @brief Unsets resource request callback. - * @since_ses 1 - * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.resource \n - * %http://tizen.org/privilege/appmanager.launch \n - * %http://tizen.org/privilege/datasharing - * - * @param[in] st_h The SmartThings resource handle - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful - * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_RESOURCE_ERROR_PERMISSION_DENIED Permission denied - * @retval #SMARTTHINGS_RESOURCE_ERROR_OPERATION_FAILED Operation failed - * @retval #SMARTTHINGS_RESOURCE_ERROR_SERVICE_UNAVAILABLE Service unavailable - * - * @see smartthings_resource_set_request_cb() - */ -int smartthings_resource_unset_request_cb(smartthings_resource_h st_h); - -/** - * @brief Sends response for resource request message. - * @since_ses 1 - * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.resource \n - * %http://tizen.org/privilege/appmanager.launch \n - * %http://tizen.org/privilege/datasharing \n - * %http://tizen.org/privilege/internet - * - * @param[in] st_h The SmartThings resource handle - * @param[in] req_id The request ID of request message - * @param[in] uri The resource URI - * @param[in] payload The payload of response message - * @param[in] result The result of response - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful - * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_RESOURCE_ERROR_PERMISSION_DENIED Permission denied - * @retval #SMARTTHINGS_RESOURCE_ERROR_OPERATION_FAILED Operation failed - * @retval #SMARTTHINGS_RESOURCE_ERROR_SERVICE_UNAVAILABLE Service unavailable - */ -int smartthings_resource_send_response(smartthings_resource_h st_h, int req_id, const char *uri, smartthings_payload_h payload, bool result); - -/** - * @brief Notifies resource change. - * @since_ses 1 - * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.resource \n - * %http://tizen.org/privilege/appmanager.launch \n - * %http://tizen.org/privilege/datasharing \n - * %http://tizen.org/privilege/internet - * - * @param[in] st_h The SmartThings resource handle - * @param[in] uri The resource URI - * @param[in] payload The payload of response message - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful - * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_RESOURCE_ERROR_PERMISSION_DENIED Permission denied - * @retval #SMARTTHINGS_RESOURCE_ERROR_OPERATION_FAILED Operation failed - * @retval #SMARTTHINGS_RESOURCE_ERROR_SERVICE_UNAVAILABLE Service unavailable - */ -int smartthings_resource_notify(smartthings_resource_h st_h, const char *uri, smartthings_payload_h payload); - -/** - * @brief Gets resource URIs. - * @since_ses 1 - * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.resource \n - * %http://tizen.org/privilege/appmanager.launch \n - * %http://tizen.org/privilege/datasharing - * - * @remarks The @a uris should be released using free(). - * - * @param[in] st_h The SmartThings resource handle - * @param[out] count The resource count - * @param[out] uris The resource URI list - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful - * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_RESOURCE_ERROR_PERMISSION_DENIED Permission denied - * @retval #SMARTTHINGS_RESOURCE_ERROR_OPERATION_FAILED Operation failed - * @retval #SMARTTHINGS_RESOURCE_ERROR_SERVICE_UNAVAILABLE Service unavailable - */ -int smartthings_resource_get_uris(smartthings_resource_h st_h, int *count, char ***uris); - -/** - * @brief Sets cloud registration callback. - * @since_ses 1 - * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.resource \n - * %http://tizen.org/privilege/appmanager.launch \n - * %http://tizen.org/privilege/datasharing - * - * @param[in] st_h The SmartThings resource handle - * @param[in] reg_cb The callback to register - * @param[in] user_data The user data to be passed to the callback function - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful - * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_RESOURCE_ERROR_PERMISSION_DENIED Permission denied - * @retval #SMARTTHINGS_RESOURCE_ERROR_OPERATION_FAILED Operation failed - * @retval #SMARTTHINGS_RESOURCE_ERROR_SERVICE_UNAVAILABLE Service unavailable - * - * @see smartthings_resource_unset_cloud_registration_status_cb() - */ -int smartthings_resource_set_cloud_registration_status_cb(smartthings_resource_h st_h, - smartthings_resource_cloud_registration_status_cb reg_cb, - void *user_data); - -/** - * @brief Unsets cloud registration callback. - * @since_ses 1 - * @privilege %http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.resource \n - * %http://tizen.org/privilege/appmanager.launch \n - * %http://tizen.org/privilege/datasharing - * - * @param[in] st_h The SmartThings resource handle - * - * @return @c 0 on success, - * otherwise a negative error value - * @retval #SMARTTHINGS_RESOURCE_ERROR_NONE Successful - * @retval #SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #SMARTTHINGS_RESOURCE_ERROR_PERMISSION_DENIED Permission denied - * @retval #SMARTTHINGS_RESOURCE_ERROR_OPERATION_FAILED Operation failed - * @retval #SMARTTHINGS_RESOURCE_ERROR_SERVICE_UNAVAILABLE Service unavailable - * - * @see smartthings_resource_set_cloud_registration_status_cb() - */ -int smartthings_resource_unset_cloud_registration_status_cb(smartthings_resource_h st_h); - - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __SAMSUNG_EXPERIENCE_SERVICE_SMARTTHINGS_RESOURCE_H__ */ diff --git a/lib/libst_thing_master_api.so b/lib/libst_thing_master_api.so deleted file mode 100644 index aef594ac8f21d1a845064d74f25ee4f24bd21c80..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 111204 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 diff --git a/project_def.prop b/project_def.prop deleted file mode 100644 index b6a64c2..0000000 --- a/project_def.prop +++ /dev/null @@ -1,11 +0,0 @@ -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/master.json b/shared/res/master.json deleted file mode 100644 index 7d27d0f..0000000 --- a/shared/res/master.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "devices": [ - { - "deviceType": "oic.d.light", - "deviceName": "***Your Device Name***", - "mnid": "***Your MNID***", - "vid": "***Your Vendor ID***" - } - ], - "configuration": { - "easySetup": { - "mode": 1, - "setupId": "***Your Setup ID***" - }, - "otm": 2, - "crtType": 1 - } -} \ No newline at end of file diff --git a/shared/res/motion.png b/shared/res/motion.png deleted file mode 100644 index 9765b1bda7e5bddf0925555ab204b887a873bf24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 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_sensor.h" -#include "resource/resource_led.h" - -// Timer duration -#define TIMER_GATHER_INTERVAL (5.0f) - -// Motion sensor information -#define SENSOR_MOTION_GPIO_NUMBER (46) - -// LED sensor information -#define SENSOR_LED_GPIO_NUMBER (130) -#define SENSOR_LED_ON "on" -#define SENSOR_LED_OFF "off" - -// For using SmartThings SDK -#define USE_ST_SDK -#ifdef USE_ST_SDK -#include "smartthings.h" -#include "smartthings_resource.h" -#include "smartthings_payload.h" - -// Certification file and private key file stored in the resource directory -#define CERT_FILE "certificate.pem" -#define PRIV_FILE "privatekey.der" - -// URI and key information -#define SENSOR_MOTION_URI "/capability/motionSensor/main/0" -#define SENSOR_MOTION_KEY "value" -#define SENSOR_LED_URI "/capability/switch/main/0" -#define SENSOR_LED_KEY "power" -#endif /* USE_ST_SDK */ - -typedef struct app_data_s { - Ecore_Timer *getter_timer; - uint32_t motion_data; - int led_data; -#ifdef USE_ST_SDK - smartthings_h st_master_h; - smartthings_resource_h st_res_h; - smartthings_status_e status; -#endif /* USE_ST_SDK */ -} app_data; - -static app_data *g_ad = NULL; - -#ifdef USE_ST_SDK -static const char * _resource_error_to_str(smartthings_resource_error_e error) -{ - const char *err_str = NULL; - - switch (error) { - case SMARTTHINGS_RESOURCE_ERROR_NONE: - err_str = "SMARTTHINGS_RESOURCE_ERROR_NONE"; - break; - case SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER: - err_str = "SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER"; - break; - case SMARTTHINGS_RESOURCE_ERROR_OUT_OF_MEMORY: - err_str = "SMARTTHINGS_RESOURCE_ERROR_OUT_OF_MEMORY"; - break; - case SMARTTHINGS_RESOURCE_ERROR_PERMISSION_DENIED: - err_str = "SMARTTHINGS_RESOURCE_ERROR_PERMISSION_DENIED"; - break; - case SMARTTHINGS_RESOURCE_ERROR_NO_DATA: - err_str = "SMARTTHINGS_RESOURCE_ERROR_NO_DATA"; - break; - case SMARTTHINGS_RESOURCE_ERROR_NOT_SUPPORTED: - err_str = "SMARTTHINGS_RESOURCE_ERROR_NOT_SUPPORTED"; - break; - case SMARTTHINGS_RESOURCE_ERROR_OPERATION_FAILED: - err_str = "SMARTTHINGS_RESOURCE_ERROR_NOT_SUPPORTED"; - break; - case SMARTTHINGS_RESOURCE_ERROR_SERVICE_UNAVAILABLE: - err_str = "SMARTTHINGS_RESOURCE_ERROR_SERVICE_UNAVAILABLE"; - break; - default: - err_str = "Unknown error"; - break; - } - - return err_str; -} -#endif - -static Eina_Bool _get_motion_sensor_data(void *user_data) -{ - int ret = 0; - uint32_t value = 0; - app_data *ad = user_data; - - if (!ad) { - _E("failed to get app_data"); - return ECORE_CALLBACK_CANCEL; - } - - ret = resource_read_infrared_motion_sensor(SENSOR_MOTION_GPIO_NUMBER, &value); - if (ret != 0) { - _E("cannot read data from the infrared motion sensor"); - return ECORE_CALLBACK_CANCEL; - } - ad->motion_data = value; - - _D("Detected motion value is: %u", value); - -#ifdef USE_ST_SDK - int error = SMARTTHINGS_RESOURCE_ERROR_NONE; - smartthings_payload_h resp_payload = NULL; - - if (ad->status != SMARTTHINGS_STATUS_REGISTERED_TO_CLOUD) - return ECORE_CALLBACK_RENEW; - - error = smartthings_payload_create(&resp_payload); - if (error != SMARTTHINGS_RESOURCE_ERROR_NONE || !resp_payload) { - _E("smartthings_payload_create() failed, [%s]", - _resource_error_to_str(error)); - return ECORE_CALLBACK_CANCEL; - } - - error = smartthings_payload_set_bool(resp_payload, SENSOR_MOTION_KEY, (bool)ad->motion_data); - if (error != SMARTTHINGS_RESOURCE_ERROR_NONE) - _E("smartthings_payload_set_bool() failed, [%s]", - _resource_error_to_str(error)); - - error = smartthings_resource_notify(ad->st_res_h, SENSOR_MOTION_URI, resp_payload); - if (error != SMARTTHINGS_RESOURCE_ERROR_NONE) - _E("smartthings_resource_notify() failed, [%s]", - _resource_error_to_str(error)); - - if (smartthings_payload_destroy(resp_payload)) - _E("smartthings_payload_destroy() failed"); -#endif - - return ECORE_CALLBACK_RENEW; -} - -static int _set_led_data(app_data *ad, int state) { - int ret = 0; - - ad->led_data = state; - ret = resource_write_led(SENSOR_LED_GPIO_NUMBER, state); - if (ret != 0) { - _E("cannot write led data"); - return -1; - } - _I("LED : %d",state); - - return 0; -} - -#ifdef USE_ST_SDK -/* SmartThings resource functions */ -static bool _handle_get_motion(smartthings_payload_h resp_payload, void *user_data) -{ - int error = SMARTTHINGS_RESOURCE_ERROR_NONE; - app_data *ad = user_data; - - retv_if(!ad, false); - - _D("Received a GET request for MOTION"); - - error = smartthings_payload_set_bool(resp_payload, SENSOR_MOTION_KEY, (bool)ad->motion_data); - if (error != SMARTTHINGS_RESOURCE_ERROR_NONE) - _E("smartthings_payload_set_bool() failed, [%s]", - _resource_error_to_str(error)); - - return true; -} - -static bool _handle_get_led(smartthings_payload_h resp_payload, void *user_data) -{ - app_data *ad = user_data; - int error = SMARTTHINGS_RESOURCE_ERROR_NONE; - char *str = NULL; - - retv_if(!ad, false); - - _D("Received a GET request for LED"); - - if (ad->led_data) - str = SENSOR_LED_ON; - else - str = SENSOR_LED_OFF; - - error = smartthings_payload_set_string(resp_payload, SENSOR_LED_KEY, str); - if (error != SMARTTHINGS_RESOURCE_ERROR_NONE) - _E("smartthings_payload_set_string() failed, [%s]", - _resource_error_to_str(error)); - - _D("Power : %s", str); - - return true; -} - -static bool _handle_set_led(smartthings_payload_h payload, smartthings_payload_h resp_payload, void *user_data) -{ - app_data *ad = user_data; - char *str = NULL; - char *res_str = NULL; - int ret = 0; - int error = SMARTTHINGS_RESOURCE_ERROR_NONE; - - retv_if(!ad, false); - - _D("Received a SET request"); - - error = smartthings_payload_get_string(payload, SENSOR_LED_KEY, &str); - if (error != SMARTTHINGS_RESOURCE_ERROR_NONE) - _E("smartthings_payload_get_string() failed, [%s]", - _resource_error_to_str(error)); - - if (strncmp(str, SENSOR_LED_ON, strlen(SENSOR_LED_ON))) { - ret = _set_led_data(ad, 0); - res_str = SENSOR_LED_OFF; - } else { - ret = _set_led_data(ad, 1); - res_str = SENSOR_LED_ON; - } - - free(str); - if (ret != 0) { - _E("cannot set LED"); - return false; - } - - error = smartthings_payload_set_string(resp_payload, SENSOR_LED_KEY, res_str); - if (error != SMARTTHINGS_RESOURCE_ERROR_NONE) - _E("smartthings_payload_set_string() failed, [%s]", - _resource_error_to_str(error)); - - return true; -} - -static void _request_cb(smartthings_resource_h handle, int req_id, - const char *uri, smartthings_resource_req_type_e req_type, - smartthings_payload_h payload, void *user_data) -{ - smartthings_payload_h resp_payload = NULL; - bool result = false; - int error = SMARTTHINGS_RESOURCE_ERROR_NONE; - - _D("request on %s, type[%d], id[%d]", uri, req_type, req_id); - - error = smartthings_payload_create(&resp_payload); - if (error != SMARTTHINGS_RESOURCE_ERROR_NONE || ! resp_payload) - _E("smartthings_payload_create() failed, [%s]", - _resource_error_to_str(error)); - - if (req_type == SMARTTHINGS_RESOURCE_REQUEST_GET) { - if (!strncmp(uri, SENSOR_MOTION_URI, strlen(SENSOR_MOTION_URI))) - result = _handle_get_motion(resp_payload, user_data); - else if (!strncmp(uri, SENSOR_LED_URI, strlen(SENSOR_LED_URI))) - result = _handle_get_led(resp_payload, user_data); - else - _E("No matching Resource uri to get"); - } else if (req_type == SMARTTHINGS_RESOURCE_REQUEST_SET) { - if (!strncmp(uri, SENSOR_LED_URI, strlen(SENSOR_LED_URI))) - result = _handle_set_led(payload, resp_payload, user_data); - else - _E("No matching Resource uri to get"); - } else { - _E("Invalid request type - %d", req_type); - smartthings_payload_destroy(resp_payload); - return; - } - - error = smartthings_resource_send_response(handle, req_id, uri, resp_payload, result); - if (error != SMARTTHINGS_RESOURCE_ERROR_NONE) { - _E("smartthings_resource_send_response() failed, [%s]", - _resource_error_to_str(error)); - smartthings_payload_destroy(resp_payload); - return; - } - - if (req_type == SMARTTHINGS_RESOURCE_REQUEST_SET) { - error = smartthings_resource_notify(handle, uri, resp_payload); - if (error != SMARTTHINGS_RESOURCE_ERROR_NONE) - _E("smartthings_resource_notify() failed, [%s]", - _resource_error_to_str(error)); - } - - if (smartthings_payload_destroy(resp_payload)) - _E("smartthings_payload_destroy() failed"); - - return; -} - -static void _resource_connection_status_cb( - smartthings_resource_h handle, - smartthings_resource_connection_status_e status, void *user_data) -{ - app_data *ad = user_data; - - _D("status=[%d]", status); - - ret_if(!ad); - - if (status == SMARTTHINGS_RESOURCE_CONNECTION_STATUS_CONNECTED) { - int error = SMARTTHINGS_RESOURCE_ERROR_NONE; - error = smartthings_resource_set_request_cb(handle, _request_cb, ad); - if (error != SMARTTHINGS_RESOURCE_ERROR_NONE) { - _E("smartthings_resource_set_request_cb() is failed"); - return; - } - } else { - _E("connection failed"); - } -} - -static int _init_resource(app_data *ad) -{ - smartthings_resource_h st_res_h = NULL; - int error = 0; - - retv_if(!ad, -1); - if (ad->st_res_h) { - _I("Already initialized!"); - return 0; - } - - error = smartthings_resource_initialize(&st_res_h, - _resource_connection_status_cb, ad); - if (error) { - _E("smartthings_resource_initialize() is failed, [%s]", - _resource_error_to_str(error)); - return -1; - } - - ad->st_res_h = st_res_h; - - return 0; -} - -static int _fini_resource(app_data *ad) -{ - retv_if(!ad, -1); - - if (!ad->st_res_h) - return 0; - - smartthings_resource_unset_request_cb(ad->st_res_h); - smartthings_resource_deinitialize(ad->st_res_h); - - ad->st_res_h = NULL; - - return 0; -} - -/* SmartThings master functions */ -static const char *__master_error_to_str(smartthings_error_e error) -{ - const char *err_str = NULL; - - switch (error) { - case SMARTTHINGS_ERROR_NONE: - err_str = "SMARTTHINGS_ERROR_NONE"; - break; - case SMARTTHINGS_ERROR_INVALID_PARAMETER: - err_str = "SMARTTHINGS_ERROR_INVALID_PARAMETER"; - break; - case SMARTTHINGS_ERROR_OUT_OF_MEMORY: - err_str = "SMARTTHINGS_ERROR_OUT_OF_MEMORY"; - break; - case SMARTTHINGS_ERROR_PERMISSION_DENIED: - err_str = "SMARTTHINGS_ERROR_PERMISSION_DENIED"; - break; - case SMARTTHINGS_ERROR_NO_DATA: - err_str = "SMARTTHINGS_ERROR_NO_DATA"; - break; - case SMARTTHINGS_ERROR_NOT_SUPPORTED: - err_str = "SMARTTHINGS_ERROR_NOT_SUPPORTED"; - break; - case SMARTTHINGS_ERROR_OPERATION_FAILED: - err_str = "SMARTTHINGS_ERROR_OPERATION_FAILED"; - break; - case SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE: - err_str = "SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE"; - break; - default: - err_str = "Unknown error"; - break; - } - - return err_str; -} - -static void _user_confirm_cb(smartthings_h handle, void *user_data) -{ - if (smartthings_send_user_confirm(handle, true) != 0) - _E("smartthings_send_user_confirm() is failed"); -} - -static void _reset_confirm_cb(smartthings_h handle, void *user_data) -{ - if (smartthings_send_reset_confirm(handle, true) != 0) - _E("smartthings_send_reset_confirm() is failed"); -} - -static void _reset_result_cb(smartthings_h handle, bool result, void *user_data) -{ - _I("reset result = [%d]", result); -} - -static void _thing_status_cb( - smartthings_h handle, smartthings_status_e status, void *user_data) -{ - app_data *ad = user_data; - _D("status: [%d]", status); - ad->status = status; -} - -static void _things_connection_status_cb( - smartthings_h handle, smartthings_connection_status_e status, - void *user_data) -{ - _D("status = [%d]", status); - - if (status == SMARTTHINGS_CONNECTION_STATUS_CONNECTED) { - int err = 0; - bool is_es_completed = false; - const char* dev_name = "motion-light-app"; - int wifi_mode = SMARTTHINGS_WIFI_MODE_11B - | SMARTTHINGS_WIFI_MODE_11G - | SMARTTHINGS_WIFI_MODE_11N; - - int wifi_freq = SMARTTHINGS_WIFI_FREQ_24G | SMARTTHINGS_WIFI_FREQ_5G; - - err = smartthings_set_device_property( - handle, dev_name, wifi_mode, wifi_freq); - if (err) { - _E("smartthings_set_device_property() is failed, [%s]", - __master_error_to_str(err)); - return; - } - - err = smartthings_set_certificate_file(handle, CERT_FILE, PRIV_FILE); - if (err) { - _E("smartthings_set_certificate_file() is failed, [%s]", - __master_error_to_str(err)); - return; - } - - err = smartthings_set_user_confirm_cb(handle, _user_confirm_cb, NULL); - if (err) { - _E("smartthings_set_user_confirm_cb() is failed, [%s]", - __master_error_to_str(err)); - return; - } - - err = smartthings_set_reset_confirm_cb(handle, _reset_confirm_cb, NULL); - if (err) { - _E("smartthings_set_reset_confirm_cb() is failed, [%s]", - __master_error_to_str(err)); - return; - } - - err = smartthings_set_reset_result_cb(handle, _reset_result_cb, NULL); - if (err) { - _E("smartthings_set_reset_result_cb() is failed, [%s]", - __master_error_to_str(err)); - return; - } - - err = smartthings_set_status_changed_cb(handle, _thing_status_cb, user_data); - if (err) { - _E("smartthings_set_status_changed_callback() is failed, [%s]", - __master_error_to_str(err)); - return; - } - - err = smartthings_start(handle); - if (err) { - _E("smartthings_start() is failed, [%s]", - __master_error_to_str(err)); - return; - } - - err = smartthings_get_easysetup_status(handle, &is_es_completed); - if (err) { - _E("smartthings_get_easysetup_status() is failed, [%s]", - __master_error_to_str(err)); - return; - } - - if (is_es_completed == true) { - _I("Easysetup is already done"); - return; - } - - _I("Easysetup is starting now"); - err = smartthings_start_easysetup(handle); - if (err) { - _E("smartthings_start_easysetup() is failed, [%s]", - __master_error_to_str(err)); - smartthings_stop(handle); - return; - } - } else { - _E("connection failed"); - } -} - -static int _init_master(app_data *ad) -{ - int err = 0; - smartthings_h st_handle = NULL; - - retv_if(!ad, -1); - - if (ad->st_master_h) { - _I("Already initialized!"); - return 0; - } - - err = smartthings_initialize(&st_handle, _things_connection_status_cb, ad); - if (err) { - _E("smartthings_initialize() is failed, [%s]", - __master_error_to_str(err)); - return -1; - } - - ad->st_master_h = st_handle; - - return 0; -} - -int _fini_master(app_data *ad) -{ - retv_if(!ad, -1); - - if (!ad->st_master_h) { - _I("handle is already NULL"); - return 0; - } - - smartthings_unset_user_confirm_cb(ad->st_master_h); - smartthings_unset_reset_confirm_cb(ad->st_master_h); - smartthings_unset_reset_result_cb(ad->st_master_h); - smartthings_unset_status_changed_cb(ad->st_master_h); - - smartthings_stop_easysetup(ad->st_master_h); - smartthings_stop(ad->st_master_h); - - if (smartthings_deinitialize(ad->st_master_h) != 0) { - _E("smartthings_deinitialize() is failed"); - return -1; - } - ad->st_master_h = NULL; - - return 0; -} -#endif /* USE_ST_SDK */ - -static bool service_app_create(void *user_data) -{ -#ifdef USE_ST_SDK - app_data *ad = user_data; - - if (_init_master(ad)) - return false; - - if (_init_resource(ad)) { - _fini_master(ad); - return false; - } -#endif - - return true; -} - -static void service_app_control(app_control_h app_control, void *user_data) -{ - app_data *ad = user_data; - - if (ad->getter_timer) - ecore_timer_del(ad->getter_timer); - - ad->getter_timer = ecore_timer_add(TIMER_GATHER_INTERVAL, _get_motion_sensor_data, ad); - if (!ad->getter_timer) { - _E("Failed to add getter timer"); - return; - } -} - -static void service_app_terminate(void *user_data) -{ - app_data *ad = user_data; - -#ifdef USE_ST_SDK - _fini_resource(ad); - _fini_master(ad); -#endif - - // Turn off LED light with __set_led() - _set_led_data(ad, 0); - - // Close Motion and LED resources - resource_close_infrared_motion_sensor(); - resource_close_led(); - - // Free app data - free(ad); - - FN_END; -} - -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/resource_infrared_motion_sensor.c b/src/resource/resource_infrared_motion_sensor.c deleted file mode 100755 index d0605e6..0000000 --- a/src/resource/resource_infrared_motion_sensor.c +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (c) 2018 Samsung Electronics Co., Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include - -#include "log.h" - -static peripheral_gpio_h g_sensor_h = NULL; -static int g_pin_num = -1; - -void resource_close_infrared_motion_sensor(void) -{ - if (!g_sensor_h) return; - - _I("Infrared Motion Sensor is finishing..."); - - peripheral_gpio_close(g_sensor_h); - - g_sensor_h = NULL; - g_pin_num = -1; -} - -int resource_read_infrared_motion_sensor(int pin_num, uint32_t *out_value) -{ - int ret = PERIPHERAL_ERROR_NONE; - - if (!g_sensor_h) { - peripheral_gpio_h temp = NULL; - - ret = peripheral_gpio_open(pin_num, &temp); - retv_if(ret, -1); - - ret = peripheral_gpio_set_direction(temp, PERIPHERAL_GPIO_DIRECTION_IN); - if (ret) { - peripheral_gpio_close(temp); - _E("peripheral_gpio_set_direction failed."); - return -1; - } - - g_sensor_h = temp; - g_pin_num = pin_num; - } - - if (g_pin_num != pin_num) { - _E("Invalid pin number."); - return -1; - } - - ret = peripheral_gpio_read(g_sensor_h, out_value); - retv_if(ret < 0, -1); - - return 0; -} diff --git a/src/resource/resource_led.c b/src/resource/resource_led.c deleted file mode 100755 index 242cf73..0000000 --- a/src/resource/resource_led.c +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (c) 2018 Samsung Electronics Co., Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include - -#include "log.h" - -static peripheral_gpio_h g_sensor_h = NULL; -static int g_pin_num = -1; - -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; - - if (!g_sensor_h) { - peripheral_gpio_h temp = NULL; - - ret = peripheral_gpio_open(pin_num, &temp); - retv_if(ret, -1); - - ret = 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; - } - - g_sensor_h = temp; - g_pin_num = pin_num; - } - - if (g_pin_num != pin_num) { - _E("Invalid pin number."); - return -1; - } - - ret = peripheral_gpio_write(g_sensor_h, write_value); - retv_if(ret < 0, -1); - - _I("LED Value : %s", write_value ? "ON":"OFF"); - - return 0; -} diff --git a/tizen-manifest.xml b/tizen-manifest.xml deleted file mode 100644 index 83d5397..0000000 --- a/tizen-manifest.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - smart-light.png - - - - - - - http://tizen.org/privilege/appmanager.launch - http://tizen.org/privilege/softap - http://tizen.org/privilege/internet - http://tizen.org/privilege/datasharing - http://tizen.org/privilege/peripheralio - http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.resource - http://com.samsung.tizen.smartthings-thing/appdefined/smartthings-thing.master - - -- 2.7.4