3 * Copyright (c) 2012 Samsung Electronics Co., Ltd.
5 * Licensed under the Apache License, Version 2.0 (the License);
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
18 #ifndef EC_TASK_CANCEL_INFO_H_
19 #define EC_TASK_CANCEL_INFO_H_
23 #include "utility/fw_ref.h"
24 #include "engine-controller/define.h"
27 * @file task_cancel_info.h
28 * @brief Provides enum definition for task status
31 /** @addtogroup engine_controller
36 * @brief Cancel callback
38 typedef void (*ec_cancel_callback_cb) (void *user_data);
41 * @brief Structure for cancel callback information
43 typedef struct ec_cancel_callback_info_s ec_cancel_callback_info_t;
46 * @brief Structure for cancel callback information
48 struct ec_cancel_callback_info_s {
49 GThread *who_registered; /**< Register thread */
50 ec_cancel_callback_cb how_to_do; /**< Cancel callback */
51 sync_agent_ec_pointer user_data; /**< User data */
55 * @brief Initialize ec_cancel_callback_info_t
56 * @param[in] who_registered GThread
57 * @param[in] how_to_do ec_cancel_callback_cb
58 * @param[in] user_data user data
59 * @return ec_cancel_callback_info_t on Success, NULL on fail
60 * @retval ec_cancel_callback_info_t Successful
63 ec_cancel_callback_info_t *ec_cancel_callback_info_init(GThread * who_registered, ec_cancel_callback_cb how_to_do, sync_agent_ec_pointer user_data);
66 * @brief Compare ec_cancel_callback_info_t
67 * @param[in] cancel_callback_info ec_cancel_callback_info_t
68 * @param[in] who_registered GThread
69 * @param[in] how_to_do ec_cancel_callback_cb
70 * @param[in] user_data user data
71 * @return true is same callback information , false is note same callback information
72 * @retval true is same callback information
73 * @retval false is not same callback information
75 sync_agent_ec_boolean ec_cancel_callback_info_compare(ec_cancel_callback_info_t * cancel_callback_info, GThread * who_registered, ec_cancel_callback_cb how_to_do, sync_agent_ec_pointer user_data);
78 * @brief Call registered callback
79 * @param[in] cancel_callback_info ec_cancel_callback_info_t
81 void ec_cancel_callback_info_call_callback(ec_cancel_callback_info_t * cancel_callback_info);
84 * @brief Destroy ec_cancel_callback_info_t
85 * @param[in] cancel_callback_info ec_cancel_callback_info_t
87 void ec_cancel_callback_info_destroy(ec_cancel_callback_info_t * cancel_callback_info);
90 * @brief Structure for cancel information
92 typedef struct ec_task_cancel_info_s ec_task_cancel_info_t;
95 * @brief Structure for cancel information
97 struct ec_task_cancel_info_s {
98 sync_agent_ec_int ref_count; /**< Reference count */
100 sync_agent_ec_boolean cancel_flag; /**< Cancel flag */
101 sync_agent_util_ref_object_s *request_msg; /**< Request message(containing ec_request_msg_t*) */
103 #if !GLIB_CHECK_VERSION (2, 32, 0)
104 GMutex *cancel_info_mutex; /**< Cancel information mutex */
106 GMutex cancel_info_mutex; /**< Cancel information mutex */
108 struct timeval cancel_time; /**< Cancel time */
109 GSList *cancel_callback_infos; /**< Cancel callback informations(containing ec_cancel_callback_info_t*) */
113 * @brief Initialize ec_task_cancel_info_t
114 * @param[in] request_msg sync_agent_util_ref_object_s
115 * @return ec_task_cancel_info_t on success , NULL on fail
116 * @retval ec_task_cancel_info_t Successful
119 ec_task_cancel_info_t *ec_task_cancel_info_init(sync_agent_util_ref_object_s * request_msg);
122 * @brief Increase cancel information reference
123 * @param[in] info ec_task_cancel_info_t
124 * @return ec_task_cancel_info_t on success
125 * @retval ec_task_cancel_info_t Successful
127 ec_task_cancel_info_t *ec_task_cancel_info_ref(ec_task_cancel_info_t * info);
130 * @brief Decrease cancel information reference
131 * @param[in] info ec_task_cancel_info_t
133 void ec_task_cancel_info_unref(ec_task_cancel_info_t * info);
136 * @brief Get cancel flag
137 * @param[in] cancel_info ec_task_cancel_info_t
138 * @return sync_agent_ec_boolean
139 * @retval true on cancel flag is on
140 * @retval false on cancel flag is off
142 sync_agent_ec_boolean ec_task_cancel_info_get_cancel_flag_atomic(ec_task_cancel_info_t * cancel_info);
145 * @brief Set cancel flag
146 * @param[in] cancel_info ec_task_cancel_info_t
148 void ec_task_cancel_info_set_cancel_flag_atomic(ec_task_cancel_info_t * cancel_info);
151 * @brief Get request message id
152 * @param[in] cancel_info ec_task_cancel_info_t
153 * @return sync_agent_ec_int
154 * @retval request message id
156 sync_agent_ec_int ec_task_cancel_info_get_request_msg_id(ec_task_cancel_info_t * cancel_info);
159 * @brief Call all registered callback
160 * @param[in] cancel_info ec_task_cancel_info_t
162 void ec_task_cancel_info_call_cancel_callbacks_unlocked(ec_task_cancel_info_t * cancel_info);
165 * @brief Register cancel callback
166 * @param[in] cancel_info ec_task_cancel_info_t
167 * @param[in] callback_func ec_cancel_callback_cb callback_func
168 * @param[in] user_data user data
169 * @return SYNC_AGENT_EC_OK on success, otherwise error value
170 * @retval SYNC_AGENT_EC_INVALID_PARAMETER when invalid parameter is inputted
171 * @retval SYNC_AGENT_EC_OUT_OF_MEMORY when memory allocation is failed
173 sync_agent_ec_error_e ec_task_cancel_info_register_cancel_callback_unlocked(ec_task_cancel_info_t * cancel_info, ec_cancel_callback_cb callback_func, sync_agent_ec_pointer user_data);
176 * @brief Unregister cancel callback
177 * @param[in] cancel_info ec_task_cancel_info_t
178 * @param[in] callback_func ec_cancel_callback_cb callback_func
179 * @param[in] user_data user data
180 * @return SYNC_AGENT_EC_OK on success, otherwise error value
181 * @retval SYNC_AGENT_EC_INVALID_PARAMETER when invalid parameter is inputted
183 sync_agent_ec_error_e ec_task_cancel_info_unregister_cancel_callback_unlocked(ec_task_cancel_info_t * cancel_info, ec_cancel_callback_cb callback_func, sync_agent_ec_pointer user_data);
189 #endif /* EC_TASK_CANCEL_INFO_H_ */