From: wchang kim Date: Thu, 12 Jul 2018 22:12:24 +0000 (+0900) Subject: Adding Smartthings Service App Template. X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F71%2F183971%2F1;p=tools%2Ftbb.git Adding Smartthings Service App Template. Change-Id: Ia8fac4413612e15fc39e91a6117fcbd5b2507695 --- diff --git a/config-sdk/extension/core-add-ons/template/samples/Template/Native/headless-things-app/description.xml b/config-sdk/extension/core-add-ons/template/samples/Template/Native/headless-things-app/description.xml new file mode 100755 index 0000000..0318792 --- /dev/null +++ b/config-sdk/extension/core-add-ons/template/samples/Template/Native/headless-things-app/description.xml @@ -0,0 +1,31 @@ + + + Smartthings Service + 1.0 + + + tizen_iot + 4.0 + + + org.tizen.nativecore.buildArtefactType.app + True + + Template + + + screenshot.png + + + ic_s_service.png + ic_m_service_n.png + ic_m_service_s.png + ic_l_service.png + + + This is the empty template for developing Smartthings Service application + Note : + The standalone service application can't be submitted to Tizen Store. + Refer to 'Developing Multi-projects as a Combined Package' section of Getting Started page in the developer's site or help contents. + + diff --git a/config-sdk/extension/core-add-ons/template/samples/Template/Native/headless-things-app/ic_l_service.png b/config-sdk/extension/core-add-ons/template/samples/Template/Native/headless-things-app/ic_l_service.png new file mode 100755 index 0000000..50e796f Binary files /dev/null and b/config-sdk/extension/core-add-ons/template/samples/Template/Native/headless-things-app/ic_l_service.png differ diff --git a/config-sdk/extension/core-add-ons/template/samples/Template/Native/headless-things-app/ic_m_service_n.png b/config-sdk/extension/core-add-ons/template/samples/Template/Native/headless-things-app/ic_m_service_n.png new file mode 100755 index 0000000..3c3c4ae Binary files /dev/null and b/config-sdk/extension/core-add-ons/template/samples/Template/Native/headless-things-app/ic_m_service_n.png differ diff --git a/config-sdk/extension/core-add-ons/template/samples/Template/Native/headless-things-app/ic_m_service_s.png b/config-sdk/extension/core-add-ons/template/samples/Template/Native/headless-things-app/ic_m_service_s.png new file mode 100755 index 0000000..02c8c08 Binary files /dev/null and b/config-sdk/extension/core-add-ons/template/samples/Template/Native/headless-things-app/ic_m_service_s.png differ diff --git a/config-sdk/extension/core-add-ons/template/samples/Template/Native/headless-things-app/ic_s_service.png b/config-sdk/extension/core-add-ons/template/samples/Template/Native/headless-things-app/ic_s_service.png new file mode 100755 index 0000000..b982002 Binary files /dev/null and b/config-sdk/extension/core-add-ons/template/samples/Template/Native/headless-things-app/ic_s_service.png differ diff --git a/config-sdk/extension/core-add-ons/template/samples/Template/Native/headless-things-app/project/inc/main.h b/config-sdk/extension/core-add-ons/template/samples/Template/Native/headless-things-app/project/inc/main.h new file mode 100755 index 0000000..9d90e54 --- /dev/null +++ b/config-sdk/extension/core-add-ons/template/samples/Template/Native/headless-things-app/project/inc/main.h @@ -0,0 +1,12 @@ +#ifndef __$(appName)_H__ +#define __$(appName)_H__ + +#include + +#ifdef LOG_TAG +#undef LOG_TAG +#endif +#define LOG_TAG "$(appName)" + + +#endif /* __$(appName)_H__ */ diff --git a/config-sdk/extension/core-add-ons/template/samples/Template/Native/headless-things-app/project/inc/st_things.h b/config-sdk/extension/core-add-ons/template/samples/Template/Native/headless-things-app/project/inc/st_things.h new file mode 100755 index 0000000..92015d7 --- /dev/null +++ b/config-sdk/extension/core-add-ons/template/samples/Template/Native/headless-things-app/project/inc/st_things.h @@ -0,0 +1,299 @@ +/* **************************************************************** + * + * Copyright 2017 Samsung Electronics All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************/ + +#ifndef __ST_THINGS_H__ +#define __ST_THINGS_H__ + +#include +#include + +#ifdef __ST_THINGS_RTOS__ +#include +#else +#include "st_things_types.h" +#endif // __ST_THINGS_RTOS__ + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/** + * @brief Set prefix paths (ReadOnly and ReadWrite) for configuration files for the device. + * This is Optional API, and should be used if relative location is used in + * filePath variable in JSON Configuration file. + * @param[in] ro_path Prefix Path for Read Only directory location. + * @param[in] rw_path Prefix Path for Read Write directory location. + * @return @c 0 on success, otherwise a negative error value + * @retval #ST_THINGS_ERROR_NONE Successful + * @retval #ST_THINGS_ERROR_INVALID_PARAMETER Invalid parameter(both ro_path and rw_path are NULL). + * @retval #ST_THINGS_ERROR_OPERATION_FAILED Operation failed + * @retval #ST_THINGS_ERROR_STACK_ALREADY_INITIALIZED Stack already initialized. + * To set Prefix Paths, stack should be deinitilized first by calling st_things_deinitialize(). + * @retval #ST_THINGS_ERROR_STACK_RUNNING Stack is currently running. + * To set Prefix Paths, stack should be stopped first by calling st_things_stop() + * and then deinitialized by calling st_things_deinitialize(). + */ +int st_things_set_configuration_prefix_path(const char* ro_path, const char* rw_path); + +/** + * @brief Initializes things stack and returns whether easy-setup is completed or not. + * Easy-setup enable users to acquire the ownership of things and to connect the things with the cloud. + * After performing easy-setup, users can access things from anywhere through the cloud. + * In things stack, easy-setup is a primary and the first operation to be performed on the thing. + * Application running on the thing can know whether easy-setup is done already or not. + * If easy-setup is done, app can start the things stack by calling st_things_start(). + * If easy-setup is not done, app can either wait for the user interaction before starting the things stack or + * start the things stack directly without waiting for any events(This case is for those things which doesn't + * support input capability and for all other unknown cases). + * To use a new json file after initialization, stack should be deinitialized + * and stopped(if its started already). + * @param[in] json_path Path to Json file which defines a thing. Definition includes the device information, + * resources and their properties, configuration info for connectivity and easy-setup, etc. + * @param[out] easysetup_complete Indicates whether easysetup is completed already or not. + * @return @c 0 on success, otherwise a negative error value + * @retval #ST_THINGS_ERROR_NONE Successful + * @retval #ST_THINGS_ERROR_INVALID_PARAMETER Invalid parameter + * @retval #ST_THINGS_ERROR_OPERATION_FAILED Operation failed + * @retval #ST_THINGS_ERROR_STACK_ALREADY_INITIALIZED Stack already initialized. + * To initialize again, stack should be deinitilized first by calling st_things_deinitialize(). + * @retval #ST_THINGS_ERROR_STACK_RUNNING Stack is currently running. + * To initialize again, stack should be stopped first by calling st_things_stop() + * and then deinitialized by calling st_things_deinitialize(). + */ +int st_things_initialize(const char *json_path, bool *easysetup_complete); + +/** + * @brief Deinitializes things stack. + * Stack should have been initialized before calling this API. + * @return @c 0 on success, otherwise a negative error value + * @retval #ST_THINGS_ERROR_NONE Successful + * @retval #ST_THINGS_ERROR_OPERATION_FAILED Operation failed + * @retval #ST_THINGS_ERROR_STACK_NOT_INITIALIZED Stack is not initialized. + * Initialize the stack by calling st_things_initialize(). + * @retval #ST_THINGS_ERROR_STACK_RUNNING Stack is currently running. + * Before deinitialize, stack needs to be stopped by calling st_things_stop(). + */ +int st_things_deinitialize(void); + +/** + * @brief Callback for handling GET request. + * @param[in] req_msg GET request message. + * @param[out] resp_rep Representation that will be set to payload of response. + * @return @c true in case of success, otherwise @c false + */ +typedef bool (*st_things_get_request_cb)(st_things_get_request_message_s *req_msg, st_things_representation_s *resp_rep); + +/** + * @brief Callback for handling SET(POST) request. + * @param[in] req_msg SET request message. + * @param[out] resp_rep Representation that will be set to payload of response. + * @return @c true in case of success, otherwise @c false + */ +typedef bool (*st_things_set_request_cb)(st_things_set_request_message_s *req_msg, st_things_representation_s *resp_rep); + +/** + * @brief Callback registration function for handling request messages. + * @details The callbacks ensure that a request message will be carried with one of the resource uris from json file of st_things_start(). + * @remarks Only one callback function can be set with this API.\n + * If multiple callbacks are set, the last one is registered only.\n + * And the callbacks are called in the internal thread, which is not detached,\n + * so application should return it to get the next callbacks. + * @param[in] get_cb Reference of the callback function to handle GET request. + * @param[in] set_cb Reference of the callback function to handle SET(POST) request. + * @return @c 0 on success, otherwise a negative error value + * @retval #ST_THINGS_ERROR_NONE Successful + * @retval #ST_THINGS_ERROR_INVALID_PARAMETER Invalid parameter + * @retval #ST_THINGS_ERROR_OPERATION_FAILED Operation failed + */ +int st_things_register_request_cb(st_things_get_request_cb get_cb, st_things_set_request_cb set_cb); + +/** + * @brief Starts things stack. + * Parses the thing definition(whose path is passed to st_things_initialize(), configures the thing, + * creates the resources and prepares it for easy-setup. + * If easy-setup is not done yet, onboarding will be started using either SoftAP or BLE connection. + * Onboarding creates an ad-hoc network between the thing and the client for performing easy-setup. + * If easy-setup is already done, thing will be connected with the cloud. + * Application can know whether easy-setup is done or not through st_things_initialize API. + * Stack should have been initialized before calling this API. + * @return @c 0 on success, otherwise a negative error value + * @retval #ST_THINGS_ERROR_NONE Successful. + * It is also used for the case that the stack is started already. + * @retval #ST_THINGS_ERROR_OPERATION_FAILED Operation failed + * @retval #ST_THINGS_ERROR_STACK_NOT_INITIALIZED Stack is not initialized. + * Initialize the stack by calling st_things_initialize(). + */ +int st_things_start(void); + +/** + * @brief Stops things stack. + * Removes all the data being used internally and releases all the memory allocated for the stack. + * Stack should have been initialized and started before calling this API. + * @return @c 0 on success, otherwise a negative error value + * @retval #ST_THINGS_ERROR_NONE Successful + * @retval #ST_THINGS_ERROR_OPERATION_FAILED Operation failed + * @retval #ST_THINGS_ERROR_STACK_NOT_INITIALIZED Stack is not initialized. + * Initialize the stack by calling st_things_initialize(). + * @retval #ST_THINGS_ERROR_STACK_NOT_STARTED Stack is not started. + * Start the stack by calling st_things_start(). + */ +int st_things_stop(void); + +/** + * @brief Callback for getting user's opinion regarding device reset. + * @return @c true to confirm, otherwise @c to deny + */ +typedef bool (*st_things_reset_confirm_cb)(void); + +/** + * @brief Callback for carrying the result of reset. + * @param[in] is_success Result of Stack-reset. (true : success, false : failure) + */ +typedef void (*st_things_reset_result_cb)(bool is_success); + +/** + * @brief Callback registration function for Reset-Confirmation and Reset-Result functions. + * @remarks Only one callback function can be set with this API.\n + * If multiple callbacks are set, the last one is registered only.\n + And the callbacks are called in the internal thread, which is not detached,\n + * so application should return it to get the next callbacks. + * @param[in] confirm_cb Callback function that will be called to get the user's input when reset is triggered. + * @param[in] result_cb Callback function that will be called after the reset process is done. + * This parameter can be NULL if notification for result of reset is not needed. + * @return @c 0 on success, otherwise a negative error value + * @retval #ST_THINGS_ERROR_NONE Successful + * @retval #ST_THINGS_ERROR_INVALID_PARAMETER Invalid parameter + * @retval #ST_THINGS_ERROR_OPERATION_FAILED Operation failed + */ +int st_things_register_reset_cb(st_things_reset_confirm_cb confirm_cb, st_things_reset_result_cb result_cb); + +/** + * @brief Reset all the data related to security and cloud being used in the stack. + * Stack should have been initialized and started before calling this API. + * @return @c 0 on success, otherwise a negative error value + * @retval #ST_THINGS_ERROR_NONE Successful + * @retval #ST_THINGS_ERROR_OPERATION_FAILED Operation failed + * @retval #ST_THINGS_ERROR_STACK_NOT_INITIALIZED Stack is not intialized. + * Initialize the stack by calling st_things_initialize(). + * @retval #ST_THINGS_ERROR_STACK_NOT_STARTED Stack is not started. + * Start the stack by calling st_things_start(). + */ +int st_things_reset(void); + +/** + * @brief Callback for carrying the randomly generated PIN info. + * @details Device should show the PIN on display. + * @param[in] pin_data PIN data in string format. + * @param[in] pin_size Length of the PIN String. + */ +typedef void (*st_things_pin_generated_cb)(const char *pin_data, const size_t pin_size); + +/** + * @brief Callback for informing the application to close the PIN display. + */ +typedef void (*st_things_pin_display_close_cb)(void); + +/** + * @brief Callback registration function for getting randomly generated PIN for the PIN-Based Ownership Transfer Request. + * @remarks Only one callback function can be set with this API.\n + * If multiple callbacks are set, the last one is registered only.\n + * And the callbacks are called in the internal thread, which is not detached,\n + * so application should return it to get the next callbacks. + * @param[in] generated_cb Callback function that will be called when device receives a Ownership Transfer request from client. + * @param[in] close_cb Callback function that will be called when Ownership Transfer is done so device can stop showing PIN on display. + * This parameter can be NULL if stop triggering is not needed. + * @return @c 0 on success, otherwise a negative error value + * @retval #ST_THINGS_ERROR_NONE Successful + * @retval #ST_THINGS_ERROR_INVALID_PARAMETER Invalid parameter + * @retval #ST_THINGS_ERROR_OPERATION_FAILED Operation failed + */ +int st_things_register_pin_handling_cb(st_things_pin_generated_cb generated_cb, st_things_pin_display_close_cb close_cb); + +/** + * @brief Callback for getting user's input regarding mutual verification. + * @return @c true true in cse of confirmed, otherwise @c false + */ +typedef bool (*st_things_user_confirm_cb)(void); + +/** + * @brief Callback registration function for getting user confirmation for MUTUAL VERIFICATION BASED JUST WORK Ownership transfer. + * @remarks Only one callback function can be set with this API.\n + * If multiple callbacks are set, the last one is registered only.\n + * And the callbacks are called in the internal thread, which is not detached,\n + * so application should return it to get the next callbacks. + * @param[in] confirm_cb Callback function that will be called when device receives a confirm request from client. + * @return @c 0 on success, otherwise a negative error value + * @retval #ST_THINGS_ERROR_NONE Successful + * @retval #ST_THINGS_ERROR_INVALID_PARAMETER Invalid parameter + * @retval #ST_THINGS_ERROR_OPERATION_FAILED Operation failed + */ +int st_things_register_user_confirm_cb(st_things_user_confirm_cb confirm_cb); + +/** + * @brief Callback for getting the current state of ST Things. + * @param[in] things_status ST Things State + */ +typedef void (*st_things_status_change_cb)(st_things_status_e things_status); + +/** + * @brief Callback registration function for getting notified when ST Things state changes. + * @remarks Only one callback function can be set with this API.\n + * If multiple callbacks are set, the last one is registered only.\n + * And the callbacks are called in the internal thread, which is not detached,\n + * so application should return it to get the next callbacks. + * @param[in] status_cb Refernce of the callback function to get ST Things status + * @return @c 0 on success, otherwise a negative error value + * @retval #ST_THINGS_ERROR_NONE Successful + * @retval #ST_THINGS_ERROR_INVALID_PARAMETER Invalid parameter + * @retval #ST_THINGS_ERROR_OPERATION_FAILED Operation failed + */ +int st_things_register_things_status_change_cb(st_things_status_change_cb status_cb); + +/** + * @brief Notify the observers of a specific resource. + * Stack should have been initialized and started before calling this API. + * @param[in] resource_uri Resource URI of the resource which will be notified to observers. + * @return @c 0 on success, otherwise a negative error value + * @retval #ST_THINGS_ERROR_NONE Successful + * @retval #ST_THINGS_ERROR_INVALID_PARAMETER Invalid parameter + * @retval #ST_THINGS_ERROR_OPERATION_FAILED Operation failed + * @retval #ST_THINGS_ERROR_STACK_NOT_INITIALIZED Stack is not intialized. + * Initialize the stack by calling st_things_initialize(). + * @retval #ST_THINGS_ERROR_STACK_NOT_STARTED Stack is not started. + * Start the stack by calling st_things_start(). + */ +int st_things_notify_observers(const char *resource_uri); + +/** + * @brief Create an instance of representation. + * @remarks To destroy an instance, st_things_destroy_representation_inst() should be used. + * @return a pointer of the created representation, otherwise a null pointer if the memory is insufficient. + */ +st_things_representation_s *st_things_create_representation_inst(void); + +/** + * @brief Destroy an instance of representation. + * @param[in] rep Representation that will be destroyed. + */ +void st_things_destroy_representation_inst(st_things_representation_s *rep); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* __ST_THINGS_H__ */ diff --git a/config-sdk/extension/core-add-ons/template/samples/Template/Native/headless-things-app/project/inc/st_things_types.h b/config-sdk/extension/core-add-ons/template/samples/Template/Native/headless-things-app/project/inc/st_things_types.h new file mode 100755 index 0000000..58f75b2 --- /dev/null +++ b/config-sdk/extension/core-add-ons/template/samples/Template/Native/headless-things-app/project/inc/st_things_types.h @@ -0,0 +1,321 @@ +/* **************************************************************** + * + * Copyright 2017 Samsung Electronics All Rights Reserved. + * + * + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************/ + +#ifndef __ST_THINGS_TYPES_H__ +#define __ST_THINGS_TYPES_H__ + +#include +#include +#include + +/** + * @brief Enumeration for ST Things error code. + */ +typedef enum { + ST_THINGS_ERROR_NONE = 0, /**< Successful */ + ST_THINGS_ERROR_INVALID_PARAMETER = -1, /**< Invalid parameter (If parameter is null or empty)*/ + ST_THINGS_ERROR_OPERATION_FAILED = -2, /**< Operation Failed */ + ST_THINGS_ERROR_STACK_NOT_INITIALIZED = -3, /**< Stack is not yet initialized*/ + ST_THINGS_ERROR_STACK_ALREADY_INITIALIZED = -4, /**< Stack is already initialized*/ + ST_THINGS_ERROR_STACK_NOT_STARTED = -5, /**< Stack is not yet started*/ + ST_THINGS_ERROR_STACK_RUNNING = -6, /**< Stack is currently running*/ +} st_things_error_e; + +/** + * @brief Enumeration for ST Things status. + */ +typedef enum { + ST_THINGS_STATUS_INIT = 0, /**< Initial state of ST Things */ + ST_THINGS_STATUS_ES_STARTED, /**< Easy-setup is started */ + ST_THINGS_STATUS_ES_DONE, /**< Easy-setup is done */ + ST_THINGS_STATUS_ES_FAILED_ON_OWNERSHIP_TRANSFER, /**< Easy-setup failed due to Ownership-Transfer failure */ + ST_THINGS_STATUS_CONNECTING_TO_AP, /**< Connecting to target Wi-Fi access point */ + ST_THINGS_STATUS_CONNECTED_TO_AP, /**< Connected to target Wi-Fi access point */ + ST_THINGS_STATUS_CONNECTING_TO_AP_FAILED, /**< Failed to connect to target Wi-Fi access point */ + ST_THINGS_STATUS_REGISTERING_TO_CLOUD, /**< Trying to Sign-up/Sign-in/Publish-Resource(s) to Cloud */ + ST_THINGS_STATUS_REGISTERED_TO_CLOUD, /**< Publish resource(s) to cloud is complete. Now the Thing is ready to be controlled via Cloud */ + ST_THINGS_STATUS_REGISTERING_FAILED_ON_SIGN_IN, /**< Failed to sign-in to Cloud */ + ST_THINGS_STATUS_REGISTERING_FAILED_ON_PUB_RES /**< Failed to publish resources to Cloud */ +} st_things_status_e; + +/** + * @brief Structure for Representation. + */ +typedef struct _st_things_representation +{ + void* payload; /**< Payload of representation */ + + /** + * @brief API for getting the value of string type property with a key. + * @remarks This API will return deep-copied string value as out parameter, so application must free it after use. + * @param[in] rep Instance of Representation. + * @param[in] key Property Name which represents the value. + * @param[out] value String value + * @return @c true if value exist, otherwise @c false + */ + bool (*get_str_value) (struct _st_things_representation* rep, const char* key, char** value); + + /** + * @brief API for getting the value of boolean type property with a key. + * @param[in] rep Instance of Representation. + * @param[in] key Property Name which represents the value. + * @param[out] value Bool value + * @return @c true if value exist, otherwise @c false + */ + bool (*get_bool_value) (struct _st_things_representation* rep, const char* key, bool* value); + + /** + * @brief API for getting the value of integer type property with a key. + * @param[in] rep Instance of Representation. + * @param[in] key Property Name which represents the value. + * @param[out] value Integer value + * @return @c true if value exist, otherwise @c false + */ + bool (*get_int_value) (struct _st_things_representation* rep, const char* key, int64_t* value); + + /** + * @brief API for getting the value of double type property with a key. + * @param[in] rep Instance of Representation. + * @param[in] key Property Name which represents the value. + * @param[out] value Double value + * @return @c true if value exist, otherwise @c false + */ + bool (*get_double_value) (struct _st_things_representation* rep, const char* key, double* value); + + /** + * @brief API for getting the value of byte array type property with a key. + * @remarks This API will return deep-copied byte value as out parameter, so application must free it after use. + * @param[in] rep Instance of Representation. + * @param[in] key Property Name which represents the value. + * @param[out] value Byte value + * @param[out] size Size of Byte value + * @return @c true if value exist, otherwise @c false + */ + bool (*get_byte_value) (struct _st_things_representation* rep, const char* key, uint8_t** value, size_t* size); + + /** + * @brief API for getting the value of object type property with a key. + * @remarks This API will return deep-copied object value as out parameter, so application must free it after use.\n + * To free an object, st_things_destroy_representation_inst() in st_things.h should be used. + * @param[in] rep Instance of Representation. + * @param[in] key Property Name which represents the value. + * @param[out] value Object value + * @return @c true if value exist, otherwise @c false + */ + bool (*get_object_value) (struct _st_things_representation* rep, const char* key, struct _st_things_representation** value); + + /** + * @brief API for setting the value of string type property with a key. + * @remarks This API will deep-copy the string value inside, so application still has an ownership of memory for the string value. + * @param[in] rep Instance of Representation. + * @param[in] key Property Name which will represent the value. + * @param[in] value String value. + * @return @c true if setting value is successful, otherwise @c false + */ + bool (*set_str_value) (struct _st_things_representation* rep, const char* key, const char* value); + + /** + * @brief API for setting the value of boolean type property with a key. + * @param[in] rep Instance of Representation. + * @param[in] key Property Name which will represent the value. + * @param[in] value Bool value. + * @return @c true if setting value is successful, otherwise @c false + */ + bool (*set_bool_value) (struct _st_things_representation* rep, const char* key, bool value); + + /** + * @brief API for setting the value of integer type property with a key. + * @param[in] rep Instance of Representation. + * @param[in] key Property Name which will represent the value. + * @param[in] value Integer value. + * @return @c true if setting value is successful, otherwise @c false + */ + bool (*set_int_value) (struct _st_things_representation* rep, const char* key, int64_t value); + + /** + * @brief API for setting the value of double type property with a key. + * @param[in] rep Instance of Representation. + * @param[in] key Property Name which will represent the value. + * @param[in] value Double value. + * @return @c true if setting value is successful, otherwise @c false + */ + bool (*set_double_value) (struct _st_things_representation* rep, const char* key, double value); + + /** + * @brief API for setting the value of byte array type property with a key. + * @remarks This API will deep-copy the byte value inside, so application still has an ownership of memory for the byte value. + * @param[in] rep Instance of Representation. + * @param[in] key Property Name which will represent the value. + * @param[in] value Byte value. + * @param[in] size Size of Byte value. + * @return @c true if setting value is successful, otherwise @c false + */ + bool (*set_byte_value) (struct _st_things_representation* rep, const char* key, const uint8_t* value, size_t size); + + /** + * @brief API for setting the value of object type property with a key. + * @remarks This API will deep-copy the object value inside, so application still has an ownership of memory for the object value. + * @param[in] rep Instance of Representation. + * @param[in] key Property Name which will represent the value. + * @param[in] value Object value. + * @return @c true if value exist, otherwise @c false + */ + bool (*set_object_value) (struct _st_things_representation* rep, const char* key, const struct _st_things_representation* value); + + /** + * @brief API for getting the value of string array type property with a key. + * @remarks This API will return deep-copied array value as out parameter, so application must free it after use. + * @param[in] rep Instance of Representation. + * @param[in] key Property Name which will represent the array type of value. + * @param[out] array Reference of the string array to where the value will be copied. + * @param[out] length Total number of elements in the array. + * @return @c true if value exist, otherwise @c false + */ + bool (*get_str_array_value) (struct _st_things_representation* rep, const char* key, char*** array, size_t* length); + + /** + * @brief API for getting the value of integer array type property with a key. + * @remarks This API will return deep-copied array value as out parameter, so application must free it after use. + * @param[in] rep Instance of Representation. + * @param[in] key Property Name which will represent the array type of value. + * @param[out] array Reference of the integer array where the value will be copied. + * @param[out] length Total number of elements in the array. + * @return @c true if value exist, otherwise @c false + */ + bool (*get_int_array_value) (struct _st_things_representation* rep, const char* key, int64_t** array, size_t* length); + + /** + * @brief API for getting the value of double array type property with a key. + * @remarks This API will return deep-copied array value as out parameter, so application must free it after use. + * @param[in] rep Instance of Representation. + * @param[in] key Property Name which will represent the array type of value. + * @param[out] array Reference of the double array where the value will be copied. + * @param[out] length Total number of elements in the array. + * @return @c true if value exist, otherwise @c false + */ + bool (*get_double_array_value) (struct _st_things_representation* rep, const char* key, double** array, size_t* length); + + /** + * @brief API for getting the value of object array type property with a key. + * @remarks This API will return deep-copied array value as out parameter, so application must free it after use.\n + * To free each object in array, st_things_destroy_representation_inst() in st_things.h should be used. + * @param[in] rep Instance of Representation. + * @param[in] key Property Name which represents the array type of value. + * @param[out] array Reference of the object array where the value will be copied. + * @param[out] length Total number of elements in the array. + * @return @c true if value exist, otherwise @c false + */ + bool (*get_object_array_value) (struct _st_things_representation* rep, const char* key, struct _st_things_representation*** array, size_t* length); + + /** + * @brief API for setting the value of string array type property with a key. + * @remarks This API will deep-copy the array value inside, so application still has an ownership of memory for the array value. + * @param[in] rep Instance of Representation. + * @param[in] key Property Name which represents the value. + * @param[in] array String array type value. + * @param[in] length Total number of elements in the array. + * @return @c true if setting value is successful, otherwise @c false + */ + bool (*set_str_array_value) (struct _st_things_representation* rep, const char* key, const char** array, size_t length); + + /** + * @brief API for setting the value of integer array type property with a key. + * @remarks This API will deep-copy the array value inside, so application still has an ownership of memory for the array value. + * @param[in] rep Instance of Representation. + * @param[in] key Property Name which represents the value. + * @param[in] array Integer array type value. + * @param[in] length Total number of elements in the array. + * @return @c true if setting value is successful, otherwise @c false + */ + bool (*set_int_array_value) (struct _st_things_representation* rep, const char* key, const int64_t* array, size_t length); + + /** + * @brief API for setting the value of double array type property with a key. + * @remarks This API will deep-copy the array value inside, so application still has an ownership of memory for the array value. + * @param[in] rep Instance of Representation. + * @param[in] key Property Name which represents the value. + * @param[in] array Double array type value. + * @param[in] length Total number of elements in the array. + * @return @c true if setting value is successful, otherwise @c false + */ + bool (*set_double_array_value) (struct _st_things_representation* rep, const char* key, const double* array, size_t length); + + /** + * @brief API for setting the value of object array type property with a key. + * @remarks This API will deep-copy the array value inside, so application still has an ownership of memory for the array value. + * @param[in] rep Instance of Representation. + * @param[in] key Property Name which represents the value. + * @param[in] array Object array type value. + * @param[in] length Total number of elements in the array. + * @return @c true if setting value is successful, otherwise @c false + */ + bool (*set_object_array_value) (struct _st_things_representation* rep, const char* key, const struct _st_things_representation** array, size_t length); + +} st_things_representation_s; + +/** + * @brief Structure for representing the Get Request Message. + */ +typedef struct _st_things_get_request_message +{ + char* resource_uri; /**< Resource URI */ + char* query; /**< One or more query parameters of the request message. Ex: key1=value1;key2=value2;... */ + char* property_key; /**< One or more property key that application needs to set a value for response. Ex: key1;key2;... */ + + /** + * @brief API for getting the value of a specific query from the query parameters of the request. + * @param[in] req_msg Instance of get request message. + * @param[in] key Name of the query.(ex: key1, key2, etc) + * @param[out] value Value of the query.(value1, value2, etc) + * @return @c true if query exist, otherwise @c false + */ + bool (*get_query_value) (struct _st_things_get_request_message* req_msg, const char* key, char** value); + + /** + * @brief API for checking whether the request has a specific property key or not. + * @param[in] req_msg Instance of get request message. + * @param[in] key Name of the property. + * @return @c true if the property key exists, otherwise @c false + */ + bool (*has_property_key) (struct _st_things_get_request_message* req_msg, const char* key); + +} st_things_get_request_message_s; + +/** + * @brief Structure for representing the Set Request Message. + */ +typedef struct _st_things_set_request_message +{ + char* resource_uri; /**< Resource URI */ + char* query; /**< One or more query parameters of the request message. Ex: key1=value1?key2=value2?... */ + struct _st_things_representation* rep; /**< Representation of the set request message */ + + /** + * @brief API for getting the value of a specific query from the query parameters of the request. + * @param[in] req_msg Instance of request message. + * @param[in] key Name of the query.(ex: key1, key2, etc) + * @param[out] value Value of the query.(value1, value2, etc) + * @return @c true if query exist, otherwise @c false + */ + bool (*get_query_value) (struct _st_things_set_request_message* req_msg, const char* key, char** value); + +} st_things_set_request_message_s; + +#endif /* __ST_THINGS_TYPES_H__ */ diff --git a/config-sdk/extension/core-add-ons/template/samples/Template/Native/headless-things-app/project/lib/liboicdastack.so b/config-sdk/extension/core-add-ons/template/samples/Template/Native/headless-things-app/project/lib/liboicdastack.so new file mode 100755 index 0000000..4a5cc91 Binary files /dev/null and b/config-sdk/extension/core-add-ons/template/samples/Template/Native/headless-things-app/project/lib/liboicdastack.so differ diff --git a/config-sdk/extension/core-add-ons/template/samples/Template/Native/headless-things-app/project/lib/libsdkapi.so b/config-sdk/extension/core-add-ons/template/samples/Template/Native/headless-things-app/project/lib/libsdkapi.so new file mode 100755 index 0000000..47ca354 Binary files /dev/null and b/config-sdk/extension/core-add-ons/template/samples/Template/Native/headless-things-app/project/lib/libsdkapi.so differ diff --git a/config-sdk/extension/core-add-ons/template/samples/Template/Native/headless-things-app/project/project_def.prop b/config-sdk/extension/core-add-ons/template/samples/Template/Native/headless-things-app/project/project_def.prop new file mode 100755 index 0000000..a0cdd64 --- /dev/null +++ b/config-sdk/extension/core-add-ons/template/samples/Template/Native/headless-things-app/project/project_def.prop @@ -0,0 +1,11 @@ +APPNAME = $(appName) + +type = app +profile = $(platform) + +USER_SRCS = src/$(appName).c +USER_DEFS = +USER_INC_DIRS = inc, inc/sdk +USER_OBJS = +USER_LIBS = lib/liboicdastack.so, lib/libsdkapi.so +USER_EDCS = diff --git a/config-sdk/extension/core-add-ons/template/samples/Template/Native/headless-things-app/project/shared/res/mainmenu.png b/config-sdk/extension/core-add-ons/template/samples/Template/Native/headless-things-app/project/shared/res/mainmenu.png new file mode 100755 index 0000000..9765b1b Binary files /dev/null and b/config-sdk/extension/core-add-ons/template/samples/Template/Native/headless-things-app/project/shared/res/mainmenu.png differ diff --git a/config-sdk/extension/core-add-ons/template/samples/Template/Native/headless-things-app/project/src/main.c b/config-sdk/extension/core-add-ons/template/samples/Template/Native/headless-things-app/project/src/main.c new file mode 100755 index 0000000..fb520aa --- /dev/null +++ b/config-sdk/extension/core-add-ons/template/samples/Template/Native/headless-things-app/project/src/main.c @@ -0,0 +1,64 @@ +#include +#include +#include "$(appName).h" + +bool service_app_create(void *data) +{ + // Todo: add your code here. + return true; +} + +void service_app_terminate(void *data) +{ + // Todo: add your code here. + return; +} + +void service_app_control(app_control_h app_control, void *data) +{ + // Todo: add your code here. + return; +} + +static void +service_app_lang_changed(app_event_info_h event_info, void *user_data) +{ + /*APP_EVENT_LANGUAGE_CHANGED*/ + return; +} + +static void +service_app_region_changed(app_event_info_h event_info, void *user_data) +{ + /*APP_EVENT_REGION_FORMAT_CHANGED*/ +} + +static void +service_app_low_battery(app_event_info_h event_info, void *user_data) +{ + /*APP_EVENT_LOW_BATTERY*/ +} + +static void +service_app_low_memory(app_event_info_h event_info, void *user_data) +{ + /*APP_EVENT_LOW_MEMORY*/ +} + +int main(int argc, char* argv[]) +{ + char ad[50] = {0,}; + service_app_lifecycle_callback_s event_callback; + app_event_handler_h handlers[5] = {NULL, }; + + event_callback.create = service_app_create; + event_callback.terminate = service_app_terminate; + event_callback.app_control = service_app_control; + + service_app_add_event_handler(&handlers[APP_EVENT_LOW_BATTERY], APP_EVENT_LOW_BATTERY, service_app_low_battery, &ad); + service_app_add_event_handler(&handlers[APP_EVENT_LOW_MEMORY], APP_EVENT_LOW_MEMORY, service_app_low_memory, &ad); + service_app_add_event_handler(&handlers[APP_EVENT_LANGUAGE_CHANGED], APP_EVENT_LANGUAGE_CHANGED, service_app_lang_changed, &ad); + service_app_add_event_handler(&handlers[APP_EVENT_REGION_FORMAT_CHANGED], APP_EVENT_REGION_FORMAT_CHANGED, service_app_region_changed, &ad); + + return service_app_main(argc, argv, &event_callback, ad); +} diff --git a/config-sdk/extension/core-add-ons/template/samples/Template/Native/headless-things-app/project/tizen-manifest.xml b/config-sdk/extension/core-add-ons/template/samples/Template/Native/headless-things-app/project/tizen-manifest.xml new file mode 100755 index 0000000..8a2a56a --- /dev/null +++ b/config-sdk/extension/core-add-ons/template/samples/Template/Native/headless-things-app/project/tizen-manifest.xml @@ -0,0 +1,16 @@ + + + + + + $(appName).png + + + + http://tizen.org/privilege/network.get + http://tizen.org/privilege/network.set + http://tizen.org/privilege/internet + http://tizen.org/privilege/alarm.set + http://tizen.org/privilege/network.profile + + diff --git a/config-sdk/extension/core-add-ons/template/samples/Template/Native/headless-things-app/sample.xml b/config-sdk/extension/core-add-ons/template/samples/Template/Native/headless-things-app/sample.xml new file mode 100755 index 0000000..d91782b --- /dev/null +++ b/config-sdk/extension/core-add-ons/template/samples/Template/Native/headless-things-app/sample.xml @@ -0,0 +1,68 @@ + + diff --git a/config-sdk/extension/core-add-ons/template/samples/Template/Native/headless-things-app/screenshot.png b/config-sdk/extension/core-add-ons/template/samples/Template/Native/headless-things-app/screenshot.png new file mode 100755 index 0000000..a8e5e1a Binary files /dev/null and b/config-sdk/extension/core-add-ons/template/samples/Template/Native/headless-things-app/screenshot.png differ diff --git a/config-sdk/package_all.sh b/config-sdk/package_all.sh index d4603b4..ffcada1 100755 --- a/config-sdk/package_all.sh +++ b/config-sdk/package_all.sh @@ -80,11 +80,13 @@ make_addon_data() UIEDC_PATH="${DATA_PATH}/samples/Template/Native/basic-edc-ui" SVC_PATH="${DATA_PATH}/samples/Template/Native/ServiceApp" SLIB_PATH="${DATA_PATH}/samples/Template/Native/SharedLibrary" + THINGS_PATH="${DATA_PATH}/samples/Template/Native/headless-things-app" sed -i "s/tizen_iot/${PROFILE}/g" ${UI_PATH}/description.xml sed -i "s/tizen_iot/${PROFILE}/g" ${UIEDC_PATH}/description.xml sed -i "s/tizen_iot/${PROFILE}/g" ${SVC_PATH}/description.xml sed -i "s/tizen_iot/${PROFILE}/g" ${SLIB_PATH}/description.xml + sed -i "s/tizen_iot/${PROFILE}/g" ${THINGS_PATH}/description.xml } clean_up_addon()