2 * Copyright (c) 2011-2015 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
21 #include "vc_command.h"
23 #include "voice_control_command.h"
24 #include "voice_control_command_expand.h"
25 #include "voice_control_common.h"
26 #include "voice_control_key_defines.h"
29 int vc_cmd_list_create(vc_cmd_list_h* vc_cmd_list)
31 if (NULL == vc_cmd_list) {
32 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Input parameter is NULL");
33 return VC_ERROR_INVALID_PARAMETER;
36 vc_cmd_list_s* list = (vc_cmd_list_s*)calloc(1, sizeof(vc_cmd_list_s));
39 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Not enough memory");
40 return VC_ERROR_OUT_OF_MEMORY;
46 *vc_cmd_list = (vc_cmd_list_h)list;
48 SLOG(LOG_DEBUG, TAG_VCCMD, "[List] list(%p)", *vc_cmd_list);
53 int vc_cmd_list_destroy(vc_cmd_list_h vc_cmd_list, bool release_command)
55 if (NULL == vc_cmd_list) {
56 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Input parameter is NULL");
57 return VC_ERROR_INVALID_PARAMETER;
60 vc_cmd_list_remove_all(vc_cmd_list, release_command);
62 vc_cmd_list_s* list = NULL;
63 list = (vc_cmd_list_s*)vc_cmd_list;
65 SLOG(LOG_DEBUG, TAG_VCCMD, "[List] list(%p)", list);
75 int vc_cmd_list_get_count(vc_cmd_list_h vc_cmd_list, int* count)
77 if (NULL == vc_cmd_list || NULL == count) {
78 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Get command count : Input parameter is NULL");
79 return VC_ERROR_INVALID_PARAMETER;
82 vc_cmd_list_s* list = NULL;
83 list = (vc_cmd_list_s*)vc_cmd_list;
85 *count = g_slist_length(list->list);
87 SLOG(LOG_DEBUG, TAG_VCCMD, "[List] list(%p), count(%d)", list, *count);
92 int vc_cmd_list_add(vc_cmd_list_h vc_cmd_list, vc_cmd_h vc_command)
94 if (NULL == vc_cmd_list || NULL == vc_command) {
95 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Input parameter is NULL");
96 return VC_ERROR_INVALID_PARAMETER;
99 vc_cmd_list_s* list = NULL;
100 list = (vc_cmd_list_s*)vc_cmd_list;
102 vc_cmd_s* cmd = NULL;
103 cmd = (vc_cmd_s*)vc_command;
105 list->list = g_slist_append(list->list, cmd);
107 if (1 == g_slist_length(list->list)) {
111 SLOG(LOG_DEBUG, TAG_VCCMD, "[List] list(%p), command(%p)", list, cmd);
113 return VC_ERROR_NONE;
116 int vc_cmd_list_remove(vc_cmd_list_h vc_cmd_list, vc_cmd_h vc_command)
118 if (NULL == vc_cmd_list || NULL == vc_command) {
119 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Input parameter is NULL");
120 return VC_ERROR_INVALID_PARAMETER;
123 vc_cmd_list_s* list = NULL;
124 list = (vc_cmd_list_s*)vc_cmd_list;
126 vc_cmd_s* cmd = NULL;
127 cmd = (vc_cmd_s*)vc_command;
129 SLOG(LOG_DEBUG, TAG_VCCMD, "[List] list(%p), command(%p)", list, cmd);
131 vc_cmd_s* temp_cmd = NULL;
134 iter = g_slist_nth(list->list, 0);
136 while (NULL != iter) {
137 temp_cmd = iter->data;
139 if (NULL != temp_cmd && cmd == temp_cmd) {
140 list->list = g_slist_remove(list->list, temp_cmd);
142 if (true == release_command) {
143 SLOG(LOG_DEBUG, TAG_VCCMD, "Release command data");
144 if (NULL != temp_cmd->command) free(temp_cmd->command);
145 if (NULL != temp_cmd->parameter) free(temp_cmd->parameter);
152 iter = g_slist_next(iter);
155 int count = g_slist_length(list->list);
159 } else if (list->index == count) {
160 list->index = count - 1;
163 return VC_ERROR_NONE;
166 int vc_cmd_list_remove_all(vc_cmd_list_h vc_cmd_list, bool release_command)
168 SLOG(LOG_DEBUG, TAG_VCCMD, "===== Destroy all command");
170 if (NULL == vc_cmd_list) {
171 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Input parameter is NULL");
172 return VC_ERROR_INVALID_PARAMETER;
175 vc_cmd_list_s* list = NULL;
176 list = (vc_cmd_list_s*)vc_cmd_list;
178 SLOG(LOG_DEBUG, TAG_VCCMD, "[List] list (%p), release command (%s)"
179 , list, release_command ? "true" : "false");
181 int count = g_slist_length(list->list);
186 for (i = 0;i < count ;i++) {
187 temp_cmd = g_slist_nth_data(list->list, 0);
189 if (NULL != temp_cmd) {
190 list->list = g_slist_remove(list->list, temp_cmd);
192 if (true == release_command) {
193 SLOG(LOG_DEBUG, TAG_VCCMD, "Free command(%p)", temp_cmd);
194 if (NULL != temp_cmd->command) free(temp_cmd->command);
195 if (NULL != temp_cmd->parameter) free(temp_cmd->parameter);
204 SLOG(LOG_DEBUG, TAG_VCCMD, "=====");
205 SLOG(LOG_DEBUG, TAG_VCCMD, " ");
207 return VC_ERROR_NONE;
210 int vc_cmd_list_foreach_commands(vc_cmd_list_h vc_cmd_list, vc_cmd_list_cb callback, void* user_data)
212 if (NULL == vc_cmd_list) {
213 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Input parameter is NULL");
214 return VC_ERROR_INVALID_PARAMETER;
217 vc_cmd_list_s* list = NULL;
218 list = (vc_cmd_list_s*)vc_cmd_list;
220 int count = g_slist_length(list->list);
226 iter = g_slist_nth(list->list, 0);
228 for (i = 0;i < count;i++) {
229 temp_cmd = iter->data;
231 if (NULL != temp_cmd) {
232 if (false == callback((vc_cmd_h)temp_cmd, user_data)) {
237 iter = g_slist_next(iter);
240 SLOG(LOG_DEBUG, TAG_VCCMD, "===== Foreach commands Done");
242 return VC_ERROR_NONE;
245 int vc_cmd_list_first(vc_cmd_list_h vc_cmd_list)
247 if (NULL == vc_cmd_list) {
248 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Input parameter is NULL");
249 return VC_ERROR_INVALID_PARAMETER;
252 vc_cmd_list_s* list = NULL;
253 list = (vc_cmd_list_s*)vc_cmd_list;
255 if (0 == g_slist_length(list->list)) {
256 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] List is empty");
257 return VC_ERROR_EMPTY;
262 return VC_ERROR_NONE;
265 int vc_cmd_list_last(vc_cmd_list_h vc_cmd_list)
267 if (NULL == vc_cmd_list) {
268 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Input parameter is NULL");
269 return VC_ERROR_INVALID_PARAMETER;
272 vc_cmd_list_s* list = NULL;
273 list = (vc_cmd_list_s*)vc_cmd_list;
275 int count = g_slist_length(list->list);
278 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] List is empty");
279 return VC_ERROR_EMPTY;
281 list->index = count - 1;
282 SLOG(LOG_DEBUG, TAG_VCCMD, "[DEBUG] List index : %d", list->index);
285 return VC_ERROR_NONE;
288 int vc_cmd_list_next(vc_cmd_list_h vc_cmd_list)
290 if (NULL == vc_cmd_list) {
291 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Input parameter is NULL");
292 return VC_ERROR_INVALID_PARAMETER;
295 vc_cmd_list_s* list = NULL;
296 list = (vc_cmd_list_s*)vc_cmd_list;
298 int count = g_slist_length(list->list);
300 if (list->index < count - 1) {
301 list->index = list->index + 1;
302 SLOG(LOG_DEBUG, TAG_VCCMD, "[DEBUG] List index : %d", list->index);
304 SLOG(LOG_DEBUG, TAG_VCCMD, "[DEBUG] List index : %d", list->index);
305 return VC_ERROR_ITERATION_END;
308 return VC_ERROR_NONE;
311 int vc_cmd_list_prev(vc_cmd_list_h vc_cmd_list)
313 if (NULL == vc_cmd_list) {
314 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Input parameter is NULL");
315 return VC_ERROR_INVALID_PARAMETER;
318 vc_cmd_list_s* list = NULL;
319 list = (vc_cmd_list_s*)vc_cmd_list;
321 if (list->index > 0) {
322 list->index = list->index - 1;
323 SLOG(LOG_DEBUG, TAG_VCCMD, "[DEBUG] List index : %d", list->index);
325 SLOG(LOG_DEBUG, TAG_VCCMD, "[DEBUG] List index : %d", list->index);
326 return VC_ERROR_ITERATION_END;
329 return VC_ERROR_NONE;
332 int vc_cmd_list_get_current(vc_cmd_list_h vc_cmd_list, vc_cmd_h* vc_command)
334 if (NULL == vc_cmd_list || NULL == vc_command) {
335 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Input parameter is NULL");
336 return VC_ERROR_INVALID_PARAMETER;
339 vc_cmd_list_s* list = NULL;
340 list = (vc_cmd_list_s*)vc_cmd_list;
342 SLOG(LOG_DEBUG, TAG_VCCMD, "[List] list (%p), index (%d)", list, list->index);
344 if (0 == g_slist_length(list->list)) {
345 SLOG(LOG_DEBUG, TAG_VCCMD, "[List] list is empty");
347 return VC_ERROR_EMPTY;
350 vc_cmd_s *temp_cmd = NULL;
351 temp_cmd = g_slist_nth_data(list->list, list->index);
353 *vc_command = (vc_cmd_h)temp_cmd;
355 SLOG(LOG_DEBUG, TAG_VCCMD, "[List] Get current command (%p)", *vc_command);
357 return VC_ERROR_NONE;
361 int vc_cmd_create(vc_cmd_h* vc_command)
363 if (NULL == vc_command) {
364 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Input parameter is NULL");
365 return VC_ERROR_INVALID_PARAMETER;
368 vc_cmd_s* command = (vc_cmd_s*)calloc(1, sizeof(vc_cmd_s));
370 if (NULL == command) {
371 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Not enough memory");
372 return VC_ERROR_OUT_OF_MEMORY;
378 command->type = VC_COMMAND_TYPE_NONE;
379 command->format = VC_CMD_FORMAT_FIXED;
380 command->command = NULL;
381 command->parameter = NULL;
383 command->key = VC_KEY_NONE;
384 command->modifier = VC_MODIFIER_NONE;
386 *vc_command = (vc_cmd_h)command;
388 SLOG(LOG_DEBUG, TAG_VCCMD, "[Create command][%p]", *vc_command);
390 return VC_ERROR_NONE;
393 int vc_cmd_destroy(vc_cmd_h vc_command)
395 if (NULL == vc_command) {
396 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Input parameter is NULL");
397 return VC_ERROR_INVALID_PARAMETER;
400 vc_cmd_s* command = NULL;
401 command = (vc_cmd_s*)vc_command;
403 SLOG(LOG_DEBUG, TAG_VCCMD, "[Destroy command][%p]", command);
405 if (NULL != command) {
406 if (NULL != command->command) free(command->command);
407 if (NULL != command->parameter) free(command->parameter);
412 return VC_ERROR_NONE;
415 int vc_cmd_set_id(vc_cmd_h vc_command, int id)
417 if (NULL == vc_command) {
418 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Invalid parameter ");
419 return VC_ERROR_INVALID_PARAMETER;
422 vc_cmd_s* cmd = NULL;
423 cmd = (vc_cmd_s*)vc_command;
427 SLOG(LOG_DEBUG, TAG_VCCMD, "[Set id][%p] id(%d)", vc_command, cmd->id);
433 int vc_cmd_get_id(vc_cmd_h vc_command, int* id)
435 if (NULL == vc_command || NULL == id) {
436 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Invalid handle ");
437 return VC_ERROR_INVALID_PARAMETER;
440 vc_cmd_s* cmd = NULL;
441 cmd = (vc_cmd_s*)vc_command;
445 SLOG(LOG_DEBUG, TAG_VCCMD, "[Get id][%p] id(%d)", vc_command, *id);
451 int vc_cmd_set_command(vc_cmd_h vc_command, const char* command)
453 if (NULL == vc_command) {
454 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Invalid parameter ");
455 return VC_ERROR_INVALID_PARAMETER;
458 vc_cmd_s* cmd = NULL;
459 cmd = (vc_cmd_s*)vc_command;
461 if (NULL != cmd->command) {
467 if (NULL != command) {
468 cmd->command = strdup(command);
471 SLOG(LOG_DEBUG, TAG_VCCMD, "[Set command][%p] Command(%s)", vc_command, cmd->command);
476 int vc_cmd_get_command(vc_cmd_h vc_command, char** command)
478 if (NULL == vc_command || NULL == command) {
479 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Invalid handle ");
480 return VC_ERROR_INVALID_PARAMETER;
483 vc_cmd_s* cmd = NULL;
484 cmd = (vc_cmd_s*)vc_command;
486 if (NULL != cmd->command) {
487 *command = strdup(gettext(cmd->command));
490 SLOG(LOG_DEBUG, TAG_VCCMD, "[Get command][%p] Command(%s)", vc_command, *command);
495 int vc_cmd_set_unfixed_command(vc_cmd_h vc_command, const char* command)
497 if (NULL == vc_command) {
498 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Invalid parameter ");
499 return VC_ERROR_INVALID_PARAMETER;
502 vc_cmd_s* cmd = NULL;
503 cmd = (vc_cmd_s*)vc_command;
505 if (NULL != cmd->parameter) {
506 free(cmd->parameter);
509 cmd->parameter = NULL;
511 if (NULL != command) {
512 cmd->parameter = strdup(command);
513 SLOG(LOG_DEBUG, TAG_VCCMD, "[Set parameter][%p] parameter(%s)", vc_command, cmd->parameter);
519 int vc_cmd_get_unfixed_command(vc_cmd_h vc_command, char** command)
521 if (NULL == vc_command || NULL == command) {
522 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Invalid handle ");
523 return VC_ERROR_INVALID_PARAMETER;
526 vc_cmd_s* cmd = NULL;
527 cmd = (vc_cmd_s*)vc_command;
529 if (NULL != cmd->parameter) {
530 *command = strdup(gettext(cmd->parameter));
531 SLOG(LOG_DEBUG, TAG_VCCMD, "[Get nonfixed command][%p] nonfixed command(%s)", vc_command, *command);
537 //int vc_cmd_set_type(vc_cmd_h vc_command, vc_cmd_type_e type)
538 int vc_cmd_set_type(vc_cmd_h vc_command, int type)
540 if (NULL == vc_command) {
541 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Invalid parameter ");
542 return VC_ERROR_INVALID_PARAMETER;
545 vc_cmd_s* cmd = NULL;
546 cmd = (vc_cmd_s*)vc_command;
550 SLOG(LOG_DEBUG, TAG_VCCMD, "[Set type][%p] type(%d)", vc_command, cmd->type);
555 int vc_cmd_get_type(vc_cmd_h vc_command, int* type)
557 if (NULL == vc_command || NULL == type) {
558 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Invalid parameter ");
559 return VC_ERROR_INVALID_PARAMETER;
562 vc_cmd_s* cmd = NULL;
563 cmd = (vc_cmd_s*)vc_command;
567 SLOG(LOG_DEBUG, TAG_VCCMD, "[Get type][%p] type(%d)", vc_command, *type);
572 int vc_cmd_set_format(vc_cmd_h vc_command, vc_cmd_format_e format)
574 if (NULL == vc_command) {
575 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Invalid parameter ");
576 return VC_ERROR_INVALID_PARAMETER;
579 vc_cmd_s* cmd = NULL;
580 cmd = (vc_cmd_s*)vc_command;
582 cmd->format = format;
584 SLOG(LOG_DEBUG, TAG_VCCMD, "[Set format][%p] format(%d)", vc_command, format);
589 int vc_cmd_get_format(vc_cmd_h vc_command, vc_cmd_format_e* format)
591 if (NULL == vc_command || NULL == format) {
592 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Invalid parameter ");
593 return VC_ERROR_INVALID_PARAMETER;
596 vc_cmd_s* cmd = NULL;
597 cmd = (vc_cmd_s*)vc_command;
599 *format = cmd->format;
601 SLOG(LOG_DEBUG, TAG_VCCMD, "[Get format][%p] format(%d)", vc_command, *format);
606 int vc_cmd_set_pid(vc_cmd_h vc_command, int pid)
608 if (NULL == vc_command) {
609 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Invalid parameter ");
610 return VC_ERROR_INVALID_PARAMETER;
613 vc_cmd_s* cmd = NULL;
614 cmd = (vc_cmd_s*)vc_command;
618 SLOG(LOG_DEBUG, TAG_VCCMD, "[Set pid][%p] pid(%d)", vc_command, cmd->pid);
623 int vc_cmd_get_pid(vc_cmd_h vc_command, int* pid)
625 if (NULL == vc_command || NULL == pid) {
626 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Invalid parameter ");
627 return VC_ERROR_INVALID_PARAMETER;
630 vc_cmd_s* cmd = NULL;
631 cmd = (vc_cmd_s*)vc_command;
635 SLOG(LOG_DEBUG, TAG_VCCMD, "[Get pid][%p] pid(%d)", vc_command, *pid);
640 int vc_cmd_set_domain(vc_cmd_h vc_command, int domain)
642 if (NULL == vc_command) {
643 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Invalid parameter ");
644 return VC_ERROR_INVALID_PARAMETER;
647 vc_cmd_s* cmd = NULL;
648 cmd = (vc_cmd_s*)vc_command;
650 cmd->domain = domain;
652 SLOG(LOG_DEBUG, TAG_VCCMD, "[Set domain] domain : %d", domain);
657 int vc_cmd_get_domain(vc_cmd_h vc_command, int* domain)
659 if (NULL == vc_command || NULL == domain) {
660 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Invalid parameter ");
661 return VC_ERROR_INVALID_PARAMETER;
664 vc_cmd_s* cmd = NULL;
665 cmd = (vc_cmd_s*)vc_command;
667 *domain = cmd->domain;
669 SLOG(LOG_DEBUG, TAG_VCCMD, "[Get domain] domain : %d", *domain);
675 * @brief Sets key value of command.
677 * @param[in] vc_command Command handle
678 * @param[in] key key value
679 * @param[in] modifier modifier value
681 * @return 0 on success, otherwise a negative error value
682 * @retval #VC_ERROR_NONE Successful
683 * @retval #VC_ERROR_INVALID_PARAMETER Invalid parameter
685 * @see vc_cmd_get_result_key()
687 int vc_cmd_set_result_key(vc_cmd_h vc_command, int key, int modifier)
689 SLOG(LOG_DEBUG, TAG_VCCMD, "===== Set result key");
691 if (NULL == vc_command) {
692 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Invalid parameter ");
693 return VC_ERROR_INVALID_PARAMETER;
696 vc_cmd_s* cmd = NULL;
697 cmd = (vc_cmd_s*)vc_command;
699 SLOG(LOG_DEBUG, TAG_VCCMD, "key : %d, modifier : %d", key, modifier);
702 cmd->modifier = modifier;
704 SLOG(LOG_DEBUG, TAG_VCCMD, "=====");
705 SLOG(LOG_DEBUG, TAG_VCCMD, " ");
711 * @brief Gets key value of command.
713 * @param[in] vc_command Command handle
714 * @param[out] key key value
715 * @param[out] modifier modifier value
717 * @return 0 on success, otherwise a negative error value
718 * @retval #VC_ERROR_NONE Successful
719 * @retval #VC_ERROR_INVALID_PARAMETER Invalid parameter
721 * @see vc_cmd_add_result_key()
723 int vc_cmd_get_result_key(vc_cmd_h vc_command, int* key, int* modifier)
724 //int vc_command_get_result_key(vc_cmd_h vc_command, int* key, int* modifier)
726 SLOG(LOG_DEBUG, TAG_VCCMD, "===== Get result key");
728 if (NULL == vc_command || NULL == key || NULL == modifier) {
729 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Invalid parameter ");
730 return VC_ERROR_INVALID_PARAMETER;
733 vc_cmd_s* cmd = NULL;
734 cmd = (vc_cmd_s*)vc_command;
737 *modifier = cmd->modifier;
739 SLOG(LOG_DEBUG, TAG_VCCMD, "=====");
740 SLOG(LOG_DEBUG, TAG_VCCMD, " ");
745 int vc_cmd_print_list(vc_cmd_list_h vc_cmd_list)
747 if (NULL == vc_cmd_list) {
751 vc_cmd_list_s* list = NULL;
752 list = (vc_cmd_list_s*)vc_cmd_list;
754 SLOG(LOG_DEBUG, TAG_VCCMD, "=== Command List ===");
755 SLOG(LOG_DEBUG, TAG_VCCMD, "[List][%p]", list);
757 int count = g_slist_length(list->list);
760 vc_cmd_s *temp_cmd = NULL;
762 for (i = 0;i < count ;i++) {
763 temp_cmd = g_slist_nth_data(list->list, i);
765 if (NULL != temp_cmd) {
766 SLOG(LOG_DEBUG, TAG_VCCMD, " [%d][%p] PID(%d) ID(%d) Type(%d) Format(%d) Domain(%d) Command(%s) Param(%s)",
767 i, temp_cmd, temp_cmd->pid, temp_cmd->index, temp_cmd->type, temp_cmd->format, temp_cmd->domain, temp_cmd->command, temp_cmd->parameter);
771 SLOG(LOG_DEBUG, TAG_VCCMD, "==================");
772 SLOG(LOG_DEBUG, TAG_VCCMD, " ");