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.
17 #include <cynara-client.h>
18 #include <cynara-error.h>
19 #include <cynara-session.h>
22 #include <system_info.h>
24 #include "vc_command.h"
26 #include "voice_control_command.h"
27 #include "voice_control_command_expand.h"
28 #include "voice_control_common.h"
29 #include "voice_control_key_defines.h"
31 static int g_feature_enabled = -1;
33 static int g_privilege_allowed = 1; /* Always True */
34 static cynara *p_cynara = NULL;
36 static int __vc_cmd_get_feature_enabled()
38 if (0 == g_feature_enabled) {
39 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Voice control feature NOT supported");
40 return VC_ERROR_NOT_SUPPORTED;
41 } else if (-1 == g_feature_enabled) {
42 bool vc_supported = false;
43 bool mic_supported = false;
44 if (0 == system_info_get_platform_bool(VC_FEATURE_PATH, &vc_supported)) {
45 if (0 == system_info_get_platform_bool(VC_MIC_FEATURE_PATH, &mic_supported)) {
46 if (false == vc_supported || false == mic_supported) {
47 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Voice control feature NOT supported");
48 g_feature_enabled = 0;
49 return VC_ERROR_NOT_SUPPORTED;
52 g_feature_enabled = 1;
54 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Fail to get feature value");
55 return VC_ERROR_NOT_SUPPORTED;
58 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Fail to get feature value");
59 return VC_ERROR_NOT_SUPPORTED;
66 static int __check_privilege_initialize()
68 int ret = cynara_initialize(&p_cynara, NULL);
69 if (CYNARA_API_SUCCESS != ret)
70 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] fail to initialize");
72 return ret == CYNARA_API_SUCCESS;
75 static int __check_privilege(const char* uid, const char * privilege)
78 char label_path[1024] = "/proc/self/attr/current";
79 char smack_label[1024] = {'\0',};
85 fp = fopen(label_path, "r");
87 if (fread(smack_label, 1, sizeof(smack_label), fp) <= 0)
88 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] fail to fread");
94 char *session = cynara_session_from_pid(pid);
95 int ret = cynara_check(p_cynara, smack_label, session, uid, privilege);
96 SLOG(LOG_DEBUG, TAG_VCCMD, "[Client]cynara_check returned %d(%s)", ret, (CYNARA_API_ACCESS_ALLOWED == ret) ? "Allowed" : "Denied");
100 if (ret != CYNARA_API_ACCESS_ALLOWED)
105 static void __check_privilege_deinitialize()
108 cynara_finish(p_cynara);
112 static int __vc_cmd_check_privilege()
116 if (0 == g_privilege_allowed) {
117 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Permission is denied");
118 return VC_ERROR_PERMISSION_DENIED;
119 } else if (-1 == g_privilege_allowed) {
120 if (false == __check_privilege_initialize()) {
121 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] privilege initialize is failed");
122 return VC_ERROR_PERMISSION_DENIED;
124 snprintf(uid, 16, "%d", getuid());
125 if (false == __check_privilege(uid, VC_PRIVILEGE)) {
126 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Permission is denied");
127 g_privilege_allowed = 0;
128 __check_privilege_deinitialize();
129 return VC_ERROR_PERMISSION_DENIED;
131 __check_privilege_deinitialize();
134 g_privilege_allowed = 1;
136 return VC_ERROR_NONE;
139 int vc_cmd_list_create(vc_cmd_list_h* vc_cmd_list)
141 if (0 != __vc_cmd_get_feature_enabled()) {
142 return VC_ERROR_NOT_SUPPORTED;
144 if (0 != __vc_cmd_check_privilege()) {
145 return VC_ERROR_PERMISSION_DENIED;
148 if (NULL == vc_cmd_list) {
149 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Input parameter is NULL");
150 return VC_ERROR_INVALID_PARAMETER;
153 vc_cmd_list_s* list = (vc_cmd_list_s*)calloc(1, sizeof(vc_cmd_list_s));
156 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Not enough memory");
157 return VC_ERROR_OUT_OF_MEMORY;
163 *vc_cmd_list = (vc_cmd_list_h)list;
165 SLOG(LOG_DEBUG, TAG_VCCMD, "[List] list(%p)", *vc_cmd_list);
167 return VC_ERROR_NONE;
170 int vc_cmd_list_destroy(vc_cmd_list_h vc_cmd_list, bool release_command)
172 if (0 != __vc_cmd_get_feature_enabled()) {
173 return VC_ERROR_NOT_SUPPORTED;
175 if (0 != __vc_cmd_check_privilege()) {
176 return VC_ERROR_PERMISSION_DENIED;
179 if (NULL == vc_cmd_list) {
180 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Input parameter is NULL");
181 return VC_ERROR_INVALID_PARAMETER;
184 vc_cmd_list_remove_all(vc_cmd_list, release_command);
186 vc_cmd_list_s* list = NULL;
187 list = (vc_cmd_list_s*)vc_cmd_list;
189 SLOG(LOG_DEBUG, TAG_VCCMD, "[List] list(%p)", list);
196 return VC_ERROR_NONE;
199 int vc_cmd_list_get_count(vc_cmd_list_h vc_cmd_list, int* count)
201 if (0 != __vc_cmd_get_feature_enabled()) {
202 return VC_ERROR_NOT_SUPPORTED;
204 if (0 != __vc_cmd_check_privilege()) {
205 return VC_ERROR_PERMISSION_DENIED;
208 if (NULL == vc_cmd_list || NULL == count) {
209 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Get command count : Input parameter is NULL");
210 return VC_ERROR_INVALID_PARAMETER;
213 vc_cmd_list_s* list = NULL;
214 list = (vc_cmd_list_s*)vc_cmd_list;
216 *count = g_slist_length(list->list);
218 SLOG(LOG_DEBUG, TAG_VCCMD, "[List] list(%p), count(%d)", list, *count);
220 return VC_ERROR_NONE;
223 int vc_cmd_list_add(vc_cmd_list_h vc_cmd_list, vc_cmd_h vc_command)
225 if (0 != __vc_cmd_get_feature_enabled()) {
226 return VC_ERROR_NOT_SUPPORTED;
228 if (0 != __vc_cmd_check_privilege()) {
229 return VC_ERROR_PERMISSION_DENIED;
232 if (NULL == vc_cmd_list || NULL == vc_command) {
233 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Input parameter is NULL");
234 return VC_ERROR_INVALID_PARAMETER;
237 vc_cmd_list_s* list = NULL;
238 list = (vc_cmd_list_s*)vc_cmd_list;
240 vc_cmd_s* cmd = NULL;
241 cmd = (vc_cmd_s*)vc_command;
243 list->list = g_slist_append(list->list, cmd);
245 if (1 == g_slist_length(list->list)) {
249 SLOG(LOG_DEBUG, TAG_VCCMD, "[List] list(%p), command(%p)", list, cmd);
251 return VC_ERROR_NONE;
254 int vc_cmd_list_remove(vc_cmd_list_h vc_cmd_list, vc_cmd_h vc_command)
256 if (0 != __vc_cmd_get_feature_enabled()) {
257 return VC_ERROR_NOT_SUPPORTED;
259 if (0 != __vc_cmd_check_privilege()) {
260 return VC_ERROR_PERMISSION_DENIED;
263 if (NULL == vc_cmd_list || NULL == vc_command) {
264 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Input parameter is NULL");
265 return VC_ERROR_INVALID_PARAMETER;
268 vc_cmd_list_s* list = NULL;
269 list = (vc_cmd_list_s*)vc_cmd_list;
271 vc_cmd_s* cmd = NULL;
272 cmd = (vc_cmd_s*)vc_command;
274 SLOG(LOG_DEBUG, TAG_VCCMD, "[List] list(%p), command(%p)", list, cmd);
276 vc_cmd_s* temp_cmd = NULL;
279 iter = g_slist_nth(list->list, 0);
281 while (NULL != iter) {
282 temp_cmd = iter->data;
284 if (NULL != temp_cmd && cmd == temp_cmd) {
285 list->list = g_slist_remove(list->list, temp_cmd);
287 if (true == release_command) {
288 SLOG(LOG_DEBUG, TAG_VCCMD, "Release command data");
289 if (NULL != temp_cmd->command) free(temp_cmd->command);
290 if (NULL != temp_cmd->parameter) free(temp_cmd->parameter);
297 iter = g_slist_next(iter);
300 int count = g_slist_length(list->list);
304 } else if (list->index == count) {
305 list->index = count - 1;
308 return VC_ERROR_NONE;
311 int vc_cmd_list_remove_all(vc_cmd_list_h vc_cmd_list, bool release_command)
313 if (0 != __vc_cmd_get_feature_enabled()) {
314 return VC_ERROR_NOT_SUPPORTED;
316 if (0 != __vc_cmd_check_privilege()) {
317 return VC_ERROR_PERMISSION_DENIED;
320 SLOG(LOG_DEBUG, TAG_VCCMD, "===== Destroy all command");
322 if (NULL == vc_cmd_list) {
323 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Input parameter is NULL");
324 return VC_ERROR_INVALID_PARAMETER;
327 vc_cmd_list_s* list = NULL;
328 list = (vc_cmd_list_s*)vc_cmd_list;
330 SLOG(LOG_DEBUG, TAG_VCCMD, "[List] list (%p), release command (%s)"
331 , list, release_command ? "true" : "false");
333 int count = g_slist_length(list->list);
338 for (i = 0; i < count ; i++) {
339 temp_cmd = g_slist_nth_data(list->list, 0);
341 if (NULL != temp_cmd) {
342 list->list = g_slist_remove(list->list, temp_cmd);
344 if (true == release_command) {
345 SLOG(LOG_DEBUG, TAG_VCCMD, "Free command(%p)", temp_cmd);
346 if (NULL != temp_cmd->command) free(temp_cmd->command);
347 if (NULL != temp_cmd->parameter) free(temp_cmd->parameter);
356 SLOG(LOG_DEBUG, TAG_VCCMD, "=====");
357 SLOG(LOG_DEBUG, TAG_VCCMD, " ");
359 return VC_ERROR_NONE;
362 int vc_cmd_list_foreach_commands(vc_cmd_list_h vc_cmd_list, vc_cmd_list_cb callback, void* user_data)
364 if (0 != __vc_cmd_get_feature_enabled()) {
365 return VC_ERROR_NOT_SUPPORTED;
367 if (0 != __vc_cmd_check_privilege()) {
368 return VC_ERROR_PERMISSION_DENIED;
371 if (NULL == vc_cmd_list) {
372 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Input parameter is NULL");
373 return VC_ERROR_INVALID_PARAMETER;
376 vc_cmd_list_s* list = NULL;
377 list = (vc_cmd_list_s*)vc_cmd_list;
379 int count = g_slist_length(list->list);
385 iter = g_slist_nth(list->list, 0);
387 for (i = 0; i < count; i++) {
389 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] No command in list");
390 return VC_ERROR_OPERATION_FAILED;
393 temp_cmd = iter->data;
395 if (NULL != temp_cmd) {
396 if (false == callback((vc_cmd_h)temp_cmd, user_data)) {
401 iter = g_slist_next(iter);
404 SLOG(LOG_DEBUG, TAG_VCCMD, "===== Foreach commands Done");
406 return VC_ERROR_NONE;
409 int vc_cmd_list_filter_by_type(vc_cmd_list_h original, int type, vc_cmd_list_h* filtered)
411 SLOG(LOG_DEBUG, TAG_VCCMD, "===== Filter by type");
413 if (0 != __vc_cmd_get_feature_enabled()) {
414 return VC_ERROR_NOT_SUPPORTED;
416 if (0 != __vc_cmd_check_privilege()) {
417 return VC_ERROR_PERMISSION_DENIED;
420 if (NULL == original) {
421 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Input parameter is NULL");
422 return VC_ERROR_INVALID_PARAMETER;
425 if (VC_COMMAND_TYPE_NONE >= type || VC_COMMAND_TYPE_EXCLUSIVE < type) {
426 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Invalid type");
427 return VC_ERROR_INVALID_PARAMETER;
430 vc_cmd_list_s* list = NULL;
431 list = (vc_cmd_list_s*)original;
433 vc_cmd_list_h temp_list;
434 if (0 != vc_cmd_list_create(&temp_list)) {
435 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Fail to list create");
436 return VC_ERROR_OPERATION_FAILED;
439 int count = g_slist_length(list->list);
445 iter = g_slist_nth(list->list, 0);
447 for (i = 0; i < count; i++) {
449 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] No command in list");
450 return VC_ERROR_OPERATION_FAILED;
452 if (NULL != iter->data) {
453 iter_cmd = iter->data;
455 if (NULL != iter_cmd) {
457 if (0 != vc_cmd_get_type((vc_cmd_h)iter_cmd, &iter_type)) {
458 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Fail to get command type");
462 if (iter_type == type) {
464 if (0 != vc_cmd_create(&temp_cmd)) {
465 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Fail to create cmd");
469 memcpy(temp_cmd, iter_cmd, sizeof(vc_cmd_s));
470 if (NULL != iter_cmd->command) {
471 ((vc_cmd_s*)temp_cmd)->command = strdup(iter_cmd->command);
473 if (NULL != iter_cmd->parameter) {
474 ((vc_cmd_s*)temp_cmd)->parameter = strdup(iter_cmd->parameter);
477 if (0 != vc_cmd_list_add(temp_list, temp_cmd)) {
478 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Fail to cmd list add");
479 vc_cmd_destroy(temp_cmd);
485 iter = g_slist_next(iter);
489 if (0 != vc_cmd_list_get_count(temp_list, &count)) {
490 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Fail to get count");
492 SLOG(LOG_DEBUG, TAG_VCCMD, "Filtering result : (%d) command", count);
495 *filtered = temp_list;
497 SLOG(LOG_DEBUG, TAG_VCCMD, "=====");
499 return VC_ERROR_NONE;
502 int vc_cmd_list_first(vc_cmd_list_h vc_cmd_list)
504 if (0 != __vc_cmd_get_feature_enabled()) {
505 return VC_ERROR_NOT_SUPPORTED;
507 if (0 != __vc_cmd_check_privilege()) {
508 return VC_ERROR_PERMISSION_DENIED;
511 if (NULL == vc_cmd_list) {
512 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Input parameter is NULL");
513 return VC_ERROR_INVALID_PARAMETER;
516 vc_cmd_list_s* list = NULL;
517 list = (vc_cmd_list_s*)vc_cmd_list;
519 if (0 == g_slist_length(list->list)) {
520 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] List is empty");
521 return VC_ERROR_EMPTY;
526 return VC_ERROR_NONE;
529 int vc_cmd_list_last(vc_cmd_list_h vc_cmd_list)
531 if (0 != __vc_cmd_get_feature_enabled()) {
532 return VC_ERROR_NOT_SUPPORTED;
534 if (0 != __vc_cmd_check_privilege()) {
535 return VC_ERROR_PERMISSION_DENIED;
538 if (NULL == vc_cmd_list) {
539 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Input parameter is NULL");
540 return VC_ERROR_INVALID_PARAMETER;
543 vc_cmd_list_s* list = NULL;
544 list = (vc_cmd_list_s*)vc_cmd_list;
546 int count = g_slist_length(list->list);
549 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] List is empty");
550 return VC_ERROR_EMPTY;
552 list->index = count - 1;
553 SLOG(LOG_DEBUG, TAG_VCCMD, "[DEBUG] List index : %d", list->index);
556 return VC_ERROR_NONE;
559 int vc_cmd_list_next(vc_cmd_list_h vc_cmd_list)
561 if (0 != __vc_cmd_get_feature_enabled()) {
562 return VC_ERROR_NOT_SUPPORTED;
564 if (0 != __vc_cmd_check_privilege()) {
565 return VC_ERROR_PERMISSION_DENIED;
568 if (NULL == vc_cmd_list) {
569 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Input parameter is NULL");
570 return VC_ERROR_INVALID_PARAMETER;
573 vc_cmd_list_s* list = NULL;
574 list = (vc_cmd_list_s*)vc_cmd_list;
576 int count = g_slist_length(list->list);
578 if (list->index < count - 1) {
579 list->index = list->index + 1;
580 SLOG(LOG_DEBUG, TAG_VCCMD, "[DEBUG] List index : %d", list->index);
582 SLOG(LOG_DEBUG, TAG_VCCMD, "[DEBUG] List index : %d", list->index);
583 return VC_ERROR_ITERATION_END;
586 return VC_ERROR_NONE;
589 int vc_cmd_list_prev(vc_cmd_list_h vc_cmd_list)
591 if (0 != __vc_cmd_get_feature_enabled()) {
592 return VC_ERROR_NOT_SUPPORTED;
594 if (0 != __vc_cmd_check_privilege()) {
595 return VC_ERROR_PERMISSION_DENIED;
598 if (NULL == vc_cmd_list) {
599 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Input parameter is NULL");
600 return VC_ERROR_INVALID_PARAMETER;
603 vc_cmd_list_s* list = NULL;
604 list = (vc_cmd_list_s*)vc_cmd_list;
606 if (list->index > 0) {
607 list->index = list->index - 1;
608 SLOG(LOG_DEBUG, TAG_VCCMD, "[DEBUG] List index : %d", list->index);
610 SLOG(LOG_DEBUG, TAG_VCCMD, "[DEBUG] List index : %d", list->index);
611 return VC_ERROR_ITERATION_END;
614 return VC_ERROR_NONE;
617 int vc_cmd_list_get_current(vc_cmd_list_h vc_cmd_list, vc_cmd_h* vc_command)
619 if (0 != __vc_cmd_get_feature_enabled()) {
620 return VC_ERROR_NOT_SUPPORTED;
622 if (0 != __vc_cmd_check_privilege()) {
623 return VC_ERROR_PERMISSION_DENIED;
626 if (NULL == vc_cmd_list || NULL == vc_command) {
627 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Input parameter is NULL");
628 return VC_ERROR_INVALID_PARAMETER;
631 vc_cmd_list_s* list = NULL;
632 list = (vc_cmd_list_s*)vc_cmd_list;
634 SLOG(LOG_DEBUG, TAG_VCCMD, "[List] list (%p), index (%d)", list, list->index);
636 if (0 == g_slist_length(list->list)) {
637 SLOG(LOG_DEBUG, TAG_VCCMD, "[List] list is empty");
639 return VC_ERROR_EMPTY;
642 vc_cmd_s *temp_cmd = NULL;
643 temp_cmd = g_slist_nth_data(list->list, list->index);
645 *vc_command = (vc_cmd_h)temp_cmd;
647 SLOG(LOG_DEBUG, TAG_VCCMD, "[List] Get current command (%p)", *vc_command);
649 return VC_ERROR_NONE;
653 int vc_cmd_create(vc_cmd_h* vc_command)
655 if (0 != __vc_cmd_get_feature_enabled()) {
656 return VC_ERROR_NOT_SUPPORTED;
658 if (0 != __vc_cmd_check_privilege()) {
659 return VC_ERROR_PERMISSION_DENIED;
662 if (NULL == vc_command) {
663 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Input parameter is NULL");
664 return VC_ERROR_INVALID_PARAMETER;
667 vc_cmd_s* command = (vc_cmd_s*)calloc(1, sizeof(vc_cmd_s));
669 if (NULL == command) {
670 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Not enough memory");
671 return VC_ERROR_OUT_OF_MEMORY;
677 command->type = VC_COMMAND_TYPE_NONE;
678 command->format = VC_CMD_FORMAT_FIXED;
679 command->command = NULL;
680 command->parameter = NULL;
682 command->key = VC_KEY_NONE;
683 command->modifier = VC_MODIFIER_NONE;
685 *vc_command = (vc_cmd_h)command;
687 SLOG(LOG_DEBUG, TAG_VCCMD, "[Create command][%p]", *vc_command);
689 return VC_ERROR_NONE;
692 int vc_cmd_destroy(vc_cmd_h vc_command)
694 if (0 != __vc_cmd_get_feature_enabled()) {
695 return VC_ERROR_NOT_SUPPORTED;
697 if (0 != __vc_cmd_check_privilege()) {
698 return VC_ERROR_PERMISSION_DENIED;
701 if (NULL == vc_command) {
702 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Input parameter is NULL");
703 return VC_ERROR_INVALID_PARAMETER;
706 vc_cmd_s* command = NULL;
707 command = (vc_cmd_s*)vc_command;
709 SLOG(LOG_DEBUG, TAG_VCCMD, "[Destroy command][%p]", command);
711 if (NULL != command) {
712 if (NULL != command->command) free(command->command);
713 if (NULL != command->parameter) free(command->parameter);
718 return VC_ERROR_NONE;
721 int vc_cmd_set_id(vc_cmd_h vc_command, int id)
723 if (0 != __vc_cmd_get_feature_enabled()) {
724 return VC_ERROR_NOT_SUPPORTED;
726 if (0 != __vc_cmd_check_privilege()) {
727 return VC_ERROR_PERMISSION_DENIED;
730 if (NULL == vc_command) {
731 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Invalid parameter ");
732 return VC_ERROR_INVALID_PARAMETER;
735 vc_cmd_s* cmd = NULL;
736 cmd = (vc_cmd_s*)vc_command;
740 SLOG(LOG_DEBUG, TAG_VCCMD, "[Set id][%p] id(%d)", vc_command, cmd->id);
746 int vc_cmd_get_id(vc_cmd_h vc_command, int* id)
748 if (0 != __vc_cmd_get_feature_enabled()) {
749 return VC_ERROR_NOT_SUPPORTED;
751 if (0 != __vc_cmd_check_privilege()) {
752 return VC_ERROR_PERMISSION_DENIED;
755 if (NULL == vc_command || NULL == id) {
756 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Invalid handle ");
757 return VC_ERROR_INVALID_PARAMETER;
760 vc_cmd_s* cmd = NULL;
761 cmd = (vc_cmd_s*)vc_command;
765 SLOG(LOG_DEBUG, TAG_VCCMD, "[Get id][%p] id(%d)", vc_command, *id);
771 int vc_cmd_set_command(vc_cmd_h vc_command, const char* command)
773 if (0 != __vc_cmd_get_feature_enabled()) {
774 return VC_ERROR_NOT_SUPPORTED;
776 if (0 != __vc_cmd_check_privilege()) {
777 return VC_ERROR_PERMISSION_DENIED;
780 if (NULL == vc_command) {
781 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Invalid parameter ");
782 return VC_ERROR_INVALID_PARAMETER;
785 vc_cmd_s* cmd = NULL;
786 cmd = (vc_cmd_s*)vc_command;
788 if (NULL != cmd->command) {
794 if (NULL != command) {
795 cmd->command = strdup(command);
798 SLOG(LOG_DEBUG, TAG_VCCMD, "[Set command][%p] Command(%s)", vc_command, cmd->command);
803 int vc_cmd_get_command(vc_cmd_h vc_command, char** command)
805 if (0 != __vc_cmd_get_feature_enabled()) {
806 return VC_ERROR_NOT_SUPPORTED;
808 if (0 != __vc_cmd_check_privilege()) {
809 return VC_ERROR_PERMISSION_DENIED;
812 if (NULL == vc_command || NULL == command) {
813 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Invalid handle ");
814 return VC_ERROR_INVALID_PARAMETER;
817 vc_cmd_s* cmd = NULL;
818 cmd = (vc_cmd_s*)vc_command;
820 if (NULL != cmd->command) {
821 *command = strdup(gettext(cmd->command));
824 SLOG(LOG_DEBUG, TAG_VCCMD, "[Get command][%p] Command(%s)", vc_command, *command);
829 int vc_cmd_set_unfixed_command(vc_cmd_h vc_command, const char* command)
831 if (0 != __vc_cmd_get_feature_enabled()) {
832 return VC_ERROR_NOT_SUPPORTED;
834 if (0 != __vc_cmd_check_privilege()) {
835 return VC_ERROR_PERMISSION_DENIED;
838 if (NULL == vc_command) {
839 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Invalid parameter ");
840 return VC_ERROR_INVALID_PARAMETER;
843 vc_cmd_s* cmd = NULL;
844 cmd = (vc_cmd_s*)vc_command;
846 if (NULL != cmd->parameter) {
847 free(cmd->parameter);
850 cmd->parameter = NULL;
852 if (NULL != command) {
853 cmd->parameter = strdup(command);
854 SLOG(LOG_DEBUG, TAG_VCCMD, "[Set parameter][%p] parameter(%s)", vc_command, cmd->parameter);
860 int vc_cmd_get_unfixed_command(vc_cmd_h vc_command, char** command)
862 if (0 != __vc_cmd_get_feature_enabled()) {
863 return VC_ERROR_NOT_SUPPORTED;
865 if (0 != __vc_cmd_check_privilege()) {
866 return VC_ERROR_PERMISSION_DENIED;
869 if (NULL == vc_command || NULL == command) {
870 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Invalid handle ");
871 return VC_ERROR_INVALID_PARAMETER;
874 vc_cmd_s* cmd = NULL;
875 cmd = (vc_cmd_s*)vc_command;
877 if (NULL != cmd->parameter) {
878 *command = strdup(gettext(cmd->parameter));
879 SLOG(LOG_DEBUG, TAG_VCCMD, "[Get nonfixed command][%p] nonfixed command(%s)", vc_command, *command);
885 int vc_cmd_set_type(vc_cmd_h vc_command, int type)
887 if (0 != __vc_cmd_get_feature_enabled()) {
888 return VC_ERROR_NOT_SUPPORTED;
890 if (0 != __vc_cmd_check_privilege()) {
891 return VC_ERROR_PERMISSION_DENIED;
894 if (NULL == vc_command) {
895 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Invalid parameter ");
896 return VC_ERROR_INVALID_PARAMETER;
899 vc_cmd_s* cmd = NULL;
900 cmd = (vc_cmd_s*)vc_command;
904 SLOG(LOG_DEBUG, TAG_VCCMD, "[Set type][%p] type(%d)", vc_command, cmd->type);
909 int vc_cmd_get_type(vc_cmd_h vc_command, int* type)
911 if (0 != __vc_cmd_get_feature_enabled()) {
912 return VC_ERROR_NOT_SUPPORTED;
914 if (0 != __vc_cmd_check_privilege()) {
915 return VC_ERROR_PERMISSION_DENIED;
918 if (NULL == vc_command || NULL == type) {
919 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Invalid parameter ");
920 return VC_ERROR_INVALID_PARAMETER;
923 vc_cmd_s* cmd = NULL;
924 cmd = (vc_cmd_s*)vc_command;
928 SLOG(LOG_DEBUG, TAG_VCCMD, "[Get type][%p] type(%d)", vc_command, *type);
933 int vc_cmd_set_format(vc_cmd_h vc_command, vc_cmd_format_e format)
935 if (0 != __vc_cmd_get_feature_enabled()) {
936 return VC_ERROR_NOT_SUPPORTED;
938 if (0 != __vc_cmd_check_privilege()) {
939 return VC_ERROR_PERMISSION_DENIED;
942 if (NULL == vc_command) {
943 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Invalid parameter ");
944 return VC_ERROR_INVALID_PARAMETER;
947 vc_cmd_s* cmd = NULL;
948 cmd = (vc_cmd_s*)vc_command;
950 cmd->format = format;
952 SLOG(LOG_DEBUG, TAG_VCCMD, "[Set format][%p] format(%d)", vc_command, format);
957 int vc_cmd_get_format(vc_cmd_h vc_command, vc_cmd_format_e* format)
959 if (0 != __vc_cmd_get_feature_enabled()) {
960 return VC_ERROR_NOT_SUPPORTED;
962 if (0 != __vc_cmd_check_privilege()) {
963 return VC_ERROR_PERMISSION_DENIED;
966 if (NULL == vc_command || NULL == format) {
967 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Invalid parameter ");
968 return VC_ERROR_INVALID_PARAMETER;
971 vc_cmd_s* cmd = NULL;
972 cmd = (vc_cmd_s*)vc_command;
974 *format = cmd->format;
976 SLOG(LOG_DEBUG, TAG_VCCMD, "[Get format][%p] format(%d)", vc_command, *format);
981 int vc_cmd_set_pid(vc_cmd_h vc_command, int pid)
983 if (0 != __vc_cmd_get_feature_enabled()) {
984 return VC_ERROR_NOT_SUPPORTED;
986 if (0 != __vc_cmd_check_privilege()) {
987 return VC_ERROR_PERMISSION_DENIED;
990 if (NULL == vc_command) {
991 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Invalid parameter ");
992 return VC_ERROR_INVALID_PARAMETER;
995 vc_cmd_s* cmd = NULL;
996 cmd = (vc_cmd_s*)vc_command;
1000 SLOG(LOG_DEBUG, TAG_VCCMD, "[Set pid][%p] pid(%d)", vc_command, cmd->pid);
1005 int vc_cmd_get_pid(vc_cmd_h vc_command, int* pid)
1007 if (0 != __vc_cmd_get_feature_enabled()) {
1008 return VC_ERROR_NOT_SUPPORTED;
1010 if (0 != __vc_cmd_check_privilege()) {
1011 return VC_ERROR_PERMISSION_DENIED;
1014 if (NULL == vc_command || NULL == pid) {
1015 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Invalid parameter ");
1016 return VC_ERROR_INVALID_PARAMETER;
1019 vc_cmd_s* cmd = NULL;
1020 cmd = (vc_cmd_s*)vc_command;
1024 SLOG(LOG_DEBUG, TAG_VCCMD, "[Get pid][%p] pid(%d)", vc_command, *pid);
1029 int vc_cmd_set_domain(vc_cmd_h vc_command, int domain)
1031 if (0 != __vc_cmd_get_feature_enabled()) {
1032 return VC_ERROR_NOT_SUPPORTED;
1034 if (0 != __vc_cmd_check_privilege()) {
1035 return VC_ERROR_PERMISSION_DENIED;
1038 if (NULL == vc_command) {
1039 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Invalid parameter ");
1040 return VC_ERROR_INVALID_PARAMETER;
1043 vc_cmd_s* cmd = NULL;
1044 cmd = (vc_cmd_s*)vc_command;
1046 cmd->domain = domain;
1048 SLOG(LOG_DEBUG, TAG_VCCMD, "[Set domain] domain : %d", domain);
1053 int vc_cmd_get_domain(vc_cmd_h vc_command, int* domain)
1055 if (0 != __vc_cmd_get_feature_enabled()) {
1056 return VC_ERROR_NOT_SUPPORTED;
1058 if (0 != __vc_cmd_check_privilege()) {
1059 return VC_ERROR_PERMISSION_DENIED;
1062 if (NULL == vc_command || NULL == domain) {
1063 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Invalid parameter ");
1064 return VC_ERROR_INVALID_PARAMETER;
1067 vc_cmd_s* cmd = NULL;
1068 cmd = (vc_cmd_s*)vc_command;
1070 *domain = cmd->domain;
1072 SLOG(LOG_DEBUG, TAG_VCCMD, "[Get domain] domain : %d", *domain);
1078 * @brief Sets key value of command.
1080 * @param[in] vc_command Command handle
1081 * @param[in] key key value
1082 * @param[in] modifier modifier value
1084 * @return 0 on success, otherwise a negative error value
1085 * @retval #VC_ERROR_NONE Successful
1086 * @retval #VC_ERROR_INVALID_PARAMETER Invalid parameter
1088 * @see vc_cmd_get_result_key()
1090 int vc_cmd_set_result_key(vc_cmd_h vc_command, int key, int modifier)
1092 SLOG(LOG_DEBUG, TAG_VCCMD, "===== Set result key");
1094 if (NULL == vc_command) {
1095 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Invalid parameter ");
1096 return VC_ERROR_INVALID_PARAMETER;
1099 vc_cmd_s* cmd = NULL;
1100 cmd = (vc_cmd_s*)vc_command;
1102 SLOG(LOG_DEBUG, TAG_VCCMD, "key : %d, modifier : %d", key, modifier);
1105 cmd->modifier = modifier;
1107 SLOG(LOG_DEBUG, TAG_VCCMD, "=====");
1108 SLOG(LOG_DEBUG, TAG_VCCMD, " ");
1114 * @brief Gets key value of command.
1116 * @param[in] vc_command Command handle
1117 * @param[out] key key value
1118 * @param[out] modifier modifier value
1120 * @return 0 on success, otherwise a negative error value
1121 * @retval #VC_ERROR_NONE Successful
1122 * @retval #VC_ERROR_INVALID_PARAMETER Invalid parameter
1124 * @see vc_cmd_add_result_key()
1126 int vc_cmd_get_result_key(vc_cmd_h vc_command, int* key, int* modifier)
1128 SLOG(LOG_DEBUG, TAG_VCCMD, "===== Get result key");
1130 if (NULL == vc_command || NULL == key || NULL == modifier) {
1131 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Invalid parameter ");
1132 return VC_ERROR_INVALID_PARAMETER;
1135 vc_cmd_s* cmd = NULL;
1136 cmd = (vc_cmd_s*)vc_command;
1139 *modifier = cmd->modifier;
1141 SLOG(LOG_DEBUG, TAG_VCCMD, "=====");
1142 SLOG(LOG_DEBUG, TAG_VCCMD, " ");
1147 int vc_cmd_print_list(vc_cmd_list_h vc_cmd_list)
1149 if (NULL == vc_cmd_list) {
1153 vc_cmd_list_s* list = NULL;
1154 list = (vc_cmd_list_s*)vc_cmd_list;
1156 SLOG(LOG_DEBUG, TAG_VCCMD, "=== Command List ===");
1157 SLOG(LOG_DEBUG, TAG_VCCMD, "[List][%p]", list);
1159 int count = g_slist_length(list->list);
1162 vc_cmd_s *temp_cmd = NULL;
1164 for (i = 0; i < count ; i++) {
1165 temp_cmd = g_slist_nth_data(list->list, i);
1167 if (NULL != temp_cmd) {
1168 SLOG(LOG_DEBUG, TAG_VCCMD, " [%d][%p] PID(%d) ID(%d) Type(%d) Format(%d) Domain(%d) Command(%s) Param(%s)",
1169 i, temp_cmd, temp_cmd->pid, temp_cmd->index, temp_cmd->type, temp_cmd->format, temp_cmd->domain, temp_cmd->command, temp_cmd->parameter);
1173 SLOG(LOG_DEBUG, TAG_VCCMD, "==================");
1174 SLOG(LOG_DEBUG, TAG_VCCMD, " ");