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.
20 #include "utility/sync_util.h"
21 #include "engine-controller/message.h"
22 #include "engine-controller/queuing_rule_spec_internal.h"
23 #include "engine-controller/task_spec_internal.h"
25 #ifndef SYNC_AGENT_LOG
27 #define LOG_TAG "AF_EC"
30 void ec_msg_set_msg_head(ec_msg_head_t * msg_head, ec_msg_type_t msg_type, sync_agent_ec_uint msg_id)
34 if (msg_head != NULL) {
35 msg_head->msg_id = msg_id;
36 msg_head->msg_type = msg_type;
42 ec_register_msg_t *ec_msg_create_register_msg(sync_agent_ec_uint task_spec_id, sync_agent_ec_task_spec_s * task_spec, sync_agent_calculate_identifier_cb id_calc_func)
46 retvm_if(task_spec == NULL, NULL, "sync_agent_ec_task_spec_s is NULL !!");
48 ec_register_msg_t *register_msg = (ec_register_msg_t *) calloc(1, sizeof(ec_register_msg_t));
49 if (register_msg == NULL) {
53 ec_msg_set_msg_head(&(register_msg->msg_head), EC_REGISTER_MSG_TYPE, 0);
55 register_msg->task_spec_id = task_spec_id;
56 register_msg->task_spec = ec_task_spec_ref(task_spec);
57 if (id_calc_func != NULL) {
58 register_msg->id_calc_func = id_calc_func;
65 ec_msg_free_register_msg(register_msg);
69 void ec_msg_free_register_msg(ec_register_msg_t * register_msg)
73 if (register_msg != NULL) {
74 if (register_msg->task_spec != NULL) {
75 ec_task_spec_unref(register_msg->task_spec);
84 ec_register_queuing_rule_spec_msg_t *ec_msg_create_register_queuing_rule_spec_msg(sync_agent_ec_queuing_rule_spec_s * spec, sync_agent_register_finish_cb register_finish_callback, sync_agent_ec_pointer usr_data)
88 ec_register_queuing_rule_spec_msg_t *msg = (ec_register_queuing_rule_spec_msg_t *) calloc(1, sizeof(ec_register_queuing_rule_spec_msg_t));
93 ec_msg_set_msg_head(&(msg->msg_head), EC_REGISTER_QUEUING_RULE_SPEC_MSG_TYPE, 0);
94 msg->spec = ec_ref_queuing_rule_spec(spec);
96 msg->register_finish_callback = register_finish_callback;
97 msg->usr_data = usr_data;
103 ec_msg_free_register_queuing_rule_spec_msg(msg);
107 void ec_msg_free_register_queuing_rule_spec_msg(ec_register_queuing_rule_spec_msg_t * msg)
111 retm_if(msg == NULL, "ec_register_queuing_rule_spec_msg_t is NULL !!");
120 ec_request_msg_t *ec_msg_create_request_msg(sync_agent_ec_uint task_spec_id, sync_agent_ec_uint identifier, sync_agent_ec_int cnt_in_param, sync_agent_ec_int * in_param_index_array, sync_agent_ec_value_type_e * in_param_value_type_array,
121 sync_agent_ec_pointer * in_param_value_array, sync_agent_task_finish_cb task_finish_callback, sync_agent_ec_pointer simple_task_finish_callback_usr_data)
125 ec_request_msg_t *msg = (ec_request_msg_t *) calloc(1, sizeof(ec_request_msg_t));
126 sync_agent_ec_int i = 0;
131 ec_msg_set_msg_head(&(msg->msg_head), EC_REQUEST_MSG_TYPE, 0);
132 msg->task_spec_id = task_spec_id;
133 msg->identifier = identifier;
134 msg->cnt_in_param = cnt_in_param;
135 if (cnt_in_param > 0) {
136 msg->in_param_index_array = (sync_agent_ec_int *) malloc(cnt_in_param * sizeof(sync_agent_ec_int));
137 if (msg->in_param_index_array == NULL) {
140 memcpy(msg->in_param_index_array, in_param_index_array, cnt_in_param * sizeof(sync_agent_ec_int));
142 msg->in_param_value_array = (sync_agent_ec_param_value_u *) calloc(cnt_in_param, sizeof(sync_agent_ec_param_value_u));
143 if (msg->in_param_value_array == NULL) {
147 for (i = 0; i < cnt_in_param; i++) {
148 sync_agent_set_param_value(&(msg->in_param_value_array[i]), in_param_value_type_array[i], in_param_value_array[i]);
151 msg->task_finish_callback = task_finish_callback;
152 msg->simple_task_finish_callback_usr_data = simple_task_finish_callback_usr_data;
159 ec_msg_free_request_msg(msg);
163 void ec_msg_free_request_msg(ec_request_msg_t * msg)
176 ec_cancel_all_msg_t *ec_msg_create_cancel_all_msg()
180 ec_cancel_all_msg_t *cancel_all_msg = (ec_cancel_all_msg_t *) calloc(1, sizeof(ec_cancel_all_msg_t));
181 if (cancel_all_msg == NULL) {
185 ec_msg_set_msg_head(&(cancel_all_msg->msg_head), EC_CANCEL_ALL_MSG_TYPE, 0);
189 return cancel_all_msg;
191 ec_msg_free_cancel_all_msg(cancel_all_msg);
195 void ec_msg_free_cancel_all_msg(ec_cancel_all_msg_t * cancel_all_msg)
199 if (cancel_all_msg != NULL) {
206 ec_cancel_msg_t *ec_msg_create_cancel_msg(sync_agent_ec_uint request_msg_id_to_cancel)
210 ec_cancel_msg_t *cancel_msg = (ec_cancel_msg_t *) calloc(1, sizeof(ec_cancel_msg_t));
211 if (cancel_msg == NULL) {
215 ec_msg_set_msg_head(&(cancel_msg->msg_head), EC_CANCEL_MSG_TYPE, 0);
216 cancel_msg->request_msg_id_to_cancel = request_msg_id_to_cancel;
222 ec_msg_free_cancel_msg(cancel_msg);
226 void ec_msg_free_cancel_msg(ec_cancel_msg_t * cancel_msg)
230 if (cancel_msg != NULL) {
237 sync_agent_ec_boolean ec_msg_check_same_msg_type(ec_msg_head_t * pHead, ec_msg_type_t msg_type)
241 if (pHead->msg_type == msg_type) {
250 sync_agent_ec_boolean ec_msg_is_register_msg(ec_msg_head_t * pHead)
256 return ec_msg_check_same_msg_type(pHead, EC_REGISTER_MSG_TYPE);
259 sync_agent_ec_boolean ec_msg_is_unregister_msg(ec_msg_head_t * pHead)
265 return ec_msg_check_same_msg_type(pHead, EC_UNREGISTER_MSG_TYPE);
268 sync_agent_ec_boolean ec_msg_is_register_queuing_rule_spec_msg(ec_msg_head_t * pHead)
274 return ec_msg_check_same_msg_type(pHead, EC_REGISTER_QUEUING_RULE_SPEC_MSG_TYPE);
277 sync_agent_ec_boolean ec_msg_is_request_msg(ec_msg_head_t * pHead)
281 return ec_msg_check_same_msg_type(pHead, EC_REQUEST_MSG_TYPE);
284 sync_agent_ec_boolean ec_msg_is_cancel_msg(ec_msg_head_t * pHead)
290 return ec_msg_check_same_msg_type(pHead, EC_CANCEL_MSG_TYPE);
293 sync_agent_ec_boolean ec_msg_is_cancel_all_msg(ec_msg_head_t * pHead)
299 return ec_msg_check_same_msg_type(pHead, EC_CANCEL_ALL_MSG_TYPE);