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;
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 smack_label[1024] = "/proc/self/attr/current";
84 fp = fopen(smack_label, "r");
86 if (fread(smack_label, 1, sizeof(smack_label), fp) <= 0)
87 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] fail to fread");
93 char *session = cynara_session_from_pid(pid);
94 int ret = cynara_check(p_cynara, smack_label, session, uid, privilege);
95 SLOG(LOG_DEBUG, TAG_VCCMD, "[Client]cynara_check returned %d(%s)", ret, (CYNARA_API_ACCESS_ALLOWED == ret) ? "Allowed" : "Denied");
99 if (ret != CYNARA_API_ACCESS_ALLOWED)
104 static void __check_privilege_deinitialize()
107 cynara_finish(p_cynara);
111 static int __vc_cmd_check_privilege()
117 if (0 == g_privilege_allowed) {
118 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Permission is denied");
119 return VC_ERROR_PERMISSION_DENIED;
120 } else if (-1 == g_privilege_allowed) {
121 if (false == __check_privilege_initialize()){
122 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] privilege initialize is failed");
123 return VC_ERROR_PERMISSION_DENIED;
125 snprintf(uid, 16, "%d", getuid());
126 if (false == __check_privilege(uid, VC_PRIVILEGE)) {
127 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Permission is denied");
128 g_privilege_allowed = 0;
129 __check_privilege_deinitialize();
130 return VC_ERROR_PERMISSION_DENIED;
132 __check_privilege_deinitialize();
135 g_privilege_allowed = 1;
137 return VC_ERROR_NONE;
140 int vc_cmd_list_create(vc_cmd_list_h* vc_cmd_list)
142 if (0 != __vc_cmd_get_feature_enabled()) {
143 return VC_ERROR_NOT_SUPPORTED;
145 if (0 != __vc_cmd_check_privilege()) {
146 return VC_ERROR_PERMISSION_DENIED;
149 if (NULL == vc_cmd_list) {
150 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Input parameter is NULL");
151 return VC_ERROR_INVALID_PARAMETER;
154 vc_cmd_list_s* list = (vc_cmd_list_s*)calloc(1, sizeof(vc_cmd_list_s));
157 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Not enough memory");
158 return VC_ERROR_OUT_OF_MEMORY;
164 *vc_cmd_list = (vc_cmd_list_h)list;
166 SLOG(LOG_DEBUG, TAG_VCCMD, "[List] list(%p)", *vc_cmd_list);
168 return VC_ERROR_NONE;
171 int vc_cmd_list_destroy(vc_cmd_list_h vc_cmd_list, bool release_command)
173 if (0 != __vc_cmd_get_feature_enabled()) {
174 return VC_ERROR_NOT_SUPPORTED;
176 if (0 != __vc_cmd_check_privilege()) {
177 return VC_ERROR_PERMISSION_DENIED;
180 if (NULL == vc_cmd_list) {
181 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Input parameter is NULL");
182 return VC_ERROR_INVALID_PARAMETER;
185 vc_cmd_list_remove_all(vc_cmd_list, release_command);
187 vc_cmd_list_s* list = NULL;
188 list = (vc_cmd_list_s*)vc_cmd_list;
190 SLOG(LOG_DEBUG, TAG_VCCMD, "[List] list(%p)", list);
197 return VC_ERROR_NONE;
200 int vc_cmd_list_get_count(vc_cmd_list_h vc_cmd_list, int* count)
202 if (0 != __vc_cmd_get_feature_enabled()) {
203 return VC_ERROR_NOT_SUPPORTED;
205 if (0 != __vc_cmd_check_privilege()) {
206 return VC_ERROR_PERMISSION_DENIED;
209 if (NULL == vc_cmd_list || NULL == count) {
210 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Get command count : Input parameter is NULL");
211 return VC_ERROR_INVALID_PARAMETER;
214 vc_cmd_list_s* list = NULL;
215 list = (vc_cmd_list_s*)vc_cmd_list;
217 *count = g_slist_length(list->list);
219 SLOG(LOG_DEBUG, TAG_VCCMD, "[List] list(%p), count(%d)", list, *count);
221 return VC_ERROR_NONE;
224 int vc_cmd_list_add(vc_cmd_list_h vc_cmd_list, vc_cmd_h vc_command)
226 if (0 != __vc_cmd_get_feature_enabled()) {
227 return VC_ERROR_NOT_SUPPORTED;
229 if (0 != __vc_cmd_check_privilege()) {
230 return VC_ERROR_PERMISSION_DENIED;
233 if (NULL == vc_cmd_list || NULL == vc_command) {
234 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Input parameter is NULL");
235 return VC_ERROR_INVALID_PARAMETER;
238 vc_cmd_list_s* list = NULL;
239 list = (vc_cmd_list_s*)vc_cmd_list;
241 vc_cmd_s* cmd = NULL;
242 cmd = (vc_cmd_s*)vc_command;
244 list->list = g_slist_append(list->list, cmd);
246 if (1 == g_slist_length(list->list)) {
250 SLOG(LOG_DEBUG, TAG_VCCMD, "[List] list(%p), command(%p)", list, cmd);
252 return VC_ERROR_NONE;
255 int vc_cmd_list_remove(vc_cmd_list_h vc_cmd_list, vc_cmd_h vc_command)
257 if (0 != __vc_cmd_get_feature_enabled()) {
258 return VC_ERROR_NOT_SUPPORTED;
260 if (0 != __vc_cmd_check_privilege()) {
261 return VC_ERROR_PERMISSION_DENIED;
264 if (NULL == vc_cmd_list || NULL == vc_command) {
265 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Input parameter is NULL");
266 return VC_ERROR_INVALID_PARAMETER;
269 vc_cmd_list_s* list = NULL;
270 list = (vc_cmd_list_s*)vc_cmd_list;
272 vc_cmd_s* cmd = NULL;
273 cmd = (vc_cmd_s*)vc_command;
275 SLOG(LOG_DEBUG, TAG_VCCMD, "[List] list(%p), command(%p)", list, cmd);
277 vc_cmd_s* temp_cmd = NULL;
280 iter = g_slist_nth(list->list, 0);
282 while (NULL != iter) {
283 temp_cmd = iter->data;
285 if (NULL != temp_cmd && cmd == temp_cmd) {
286 list->list = g_slist_remove(list->list, temp_cmd);
288 if (true == release_command) {
289 SLOG(LOG_DEBUG, TAG_VCCMD, "Release command data");
290 if (NULL != temp_cmd->command) free(temp_cmd->command);
291 if (NULL != temp_cmd->parameter) free(temp_cmd->parameter);
298 iter = g_slist_next(iter);
301 int count = g_slist_length(list->list);
305 } else if (list->index == count) {
306 list->index = count - 1;
309 return VC_ERROR_NONE;
312 int vc_cmd_list_remove_all(vc_cmd_list_h vc_cmd_list, bool release_command)
314 if (0 != __vc_cmd_get_feature_enabled()) {
315 return VC_ERROR_NOT_SUPPORTED;
317 if (0 != __vc_cmd_check_privilege()) {
318 return VC_ERROR_PERMISSION_DENIED;
321 SLOG(LOG_DEBUG, TAG_VCCMD, "===== Destroy all command");
323 if (NULL == vc_cmd_list) {
324 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Input parameter is NULL");
325 return VC_ERROR_INVALID_PARAMETER;
328 vc_cmd_list_s* list = NULL;
329 list = (vc_cmd_list_s*)vc_cmd_list;
331 SLOG(LOG_DEBUG, TAG_VCCMD, "[List] list (%p), release command (%s)"
332 , list, release_command ? "true" : "false");
334 int count = g_slist_length(list->list);
339 for (i = 0; i < count ; i++) {
340 temp_cmd = g_slist_nth_data(list->list, 0);
342 if (NULL != temp_cmd) {
343 list->list = g_slist_remove(list->list, temp_cmd);
345 if (true == release_command) {
346 SLOG(LOG_DEBUG, TAG_VCCMD, "Free command(%p)", temp_cmd);
347 if (NULL != temp_cmd->command) free(temp_cmd->command);
348 if (NULL != temp_cmd->parameter) free(temp_cmd->parameter);
357 SLOG(LOG_DEBUG, TAG_VCCMD, "=====");
358 SLOG(LOG_DEBUG, TAG_VCCMD, " ");
360 return VC_ERROR_NONE;
363 int vc_cmd_list_foreach_commands(vc_cmd_list_h vc_cmd_list, vc_cmd_list_cb callback, void* user_data)
365 if (0 != __vc_cmd_get_feature_enabled()) {
366 return VC_ERROR_NOT_SUPPORTED;
368 if (0 != __vc_cmd_check_privilege()) {
369 return VC_ERROR_PERMISSION_DENIED;
372 if (NULL == vc_cmd_list) {
373 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Input parameter is NULL");
374 return VC_ERROR_INVALID_PARAMETER;
377 vc_cmd_list_s* list = NULL;
378 list = (vc_cmd_list_s*)vc_cmd_list;
380 int count = g_slist_length(list->list);
386 iter = g_slist_nth(list->list, 0);
388 for (i = 0; i < count; i++) {
389 temp_cmd = iter->data;
391 if (NULL != temp_cmd) {
392 if (false == callback((vc_cmd_h)temp_cmd, user_data)) {
397 iter = g_slist_next(iter);
400 SLOG(LOG_DEBUG, TAG_VCCMD, "===== Foreach commands Done");
402 return VC_ERROR_NONE;
405 int vc_cmd_list_filter_by_type(vc_cmd_list_h original, int type, vc_cmd_list_h* filtered)
407 SLOG(LOG_DEBUG, TAG_VCCMD, "===== Filter by type");
409 if (0 != __vc_cmd_get_feature_enabled()) {
410 return VC_ERROR_NOT_SUPPORTED;
412 if (0 != __vc_cmd_check_privilege()) {
413 return VC_ERROR_PERMISSION_DENIED;
416 if (NULL == original) {
417 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Input parameter is NULL");
418 return VC_ERROR_INVALID_PARAMETER;
421 if (VC_COMMAND_TYPE_NONE >= type || VC_COMMAND_TYPE_EXCLUSIVE < type) {
422 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Invalid type");
423 return VC_ERROR_INVALID_PARAMETER;
426 vc_cmd_list_s* list = NULL;
427 list = (vc_cmd_list_s*)original;
429 vc_cmd_list_h temp_list;
430 if (0 != vc_cmd_list_create(&temp_list)) {
431 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Fail to list create");
432 return VC_ERROR_OPERATION_FAILED;
435 int count = g_slist_length(list->list);
441 iter = g_slist_nth(list->list, 0);
443 for (i = 0; i < count; i++) {
444 if (NULL != iter->data) {
445 iter_cmd = iter->data;
447 if (NULL != iter_cmd) {
449 if (0 != vc_cmd_get_type((vc_cmd_h)iter_cmd, &iter_type)) {
450 SLOG(LOG_ERROR,TAG_VCCMD, "[ERROR] Fail to get command type");
454 if (iter_type == type) {
456 if (0 != vc_cmd_create(&temp_cmd)) {
457 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Fail to create cmd");
461 memcpy(temp_cmd, iter_cmd, sizeof(vc_cmd_s));
462 if (NULL != iter_cmd->command) {
463 ((vc_cmd_s*)temp_cmd)->command = strdup(iter_cmd->command);
465 if (NULL != iter_cmd->parameter) {
466 ((vc_cmd_s*)temp_cmd)->parameter = strdup(iter_cmd->parameter);
469 if (0 != vc_cmd_list_add(temp_list, temp_cmd)) {
470 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Fail to cmd list add");
471 vc_cmd_destroy(temp_cmd);
477 iter = g_slist_next(iter);
481 if (0 != vc_cmd_list_get_count(temp_list, &count)) {
482 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Fail to get count");
484 SLOG(LOG_DEBUG, TAG_VCCMD, "Filtering result : (%d) command", count);
487 *filtered = temp_list;
489 SLOG(LOG_DEBUG, TAG_VCCMD, "=====");
491 return VC_ERROR_NONE;
494 int vc_cmd_list_first(vc_cmd_list_h vc_cmd_list)
496 if (0 != __vc_cmd_get_feature_enabled()) {
497 return VC_ERROR_NOT_SUPPORTED;
499 if (0 != __vc_cmd_check_privilege()) {
500 return VC_ERROR_PERMISSION_DENIED;
503 if (NULL == vc_cmd_list) {
504 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Input parameter is NULL");
505 return VC_ERROR_INVALID_PARAMETER;
508 vc_cmd_list_s* list = NULL;
509 list = (vc_cmd_list_s*)vc_cmd_list;
511 if (0 == g_slist_length(list->list)) {
512 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] List is empty");
513 return VC_ERROR_EMPTY;
518 return VC_ERROR_NONE;
521 int vc_cmd_list_last(vc_cmd_list_h vc_cmd_list)
523 if (0 != __vc_cmd_get_feature_enabled()) {
524 return VC_ERROR_NOT_SUPPORTED;
526 if (0 != __vc_cmd_check_privilege()) {
527 return VC_ERROR_PERMISSION_DENIED;
530 if (NULL == vc_cmd_list) {
531 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Input parameter is NULL");
532 return VC_ERROR_INVALID_PARAMETER;
535 vc_cmd_list_s* list = NULL;
536 list = (vc_cmd_list_s*)vc_cmd_list;
538 int count = g_slist_length(list->list);
541 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] List is empty");
542 return VC_ERROR_EMPTY;
544 list->index = count - 1;
545 SLOG(LOG_DEBUG, TAG_VCCMD, "[DEBUG] List index : %d", list->index);
548 return VC_ERROR_NONE;
551 int vc_cmd_list_next(vc_cmd_list_h vc_cmd_list)
553 if (0 != __vc_cmd_get_feature_enabled()) {
554 return VC_ERROR_NOT_SUPPORTED;
556 if (0 != __vc_cmd_check_privilege()) {
557 return VC_ERROR_PERMISSION_DENIED;
560 if (NULL == vc_cmd_list) {
561 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Input parameter is NULL");
562 return VC_ERROR_INVALID_PARAMETER;
565 vc_cmd_list_s* list = NULL;
566 list = (vc_cmd_list_s*)vc_cmd_list;
568 int count = g_slist_length(list->list);
570 if (list->index < count - 1) {
571 list->index = list->index + 1;
572 SLOG(LOG_DEBUG, TAG_VCCMD, "[DEBUG] List index : %d", list->index);
574 SLOG(LOG_DEBUG, TAG_VCCMD, "[DEBUG] List index : %d", list->index);
575 return VC_ERROR_ITERATION_END;
578 return VC_ERROR_NONE;
581 int vc_cmd_list_prev(vc_cmd_list_h vc_cmd_list)
583 if (0 != __vc_cmd_get_feature_enabled()) {
584 return VC_ERROR_NOT_SUPPORTED;
586 if (0 != __vc_cmd_check_privilege()) {
587 return VC_ERROR_PERMISSION_DENIED;
590 if (NULL == vc_cmd_list) {
591 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Input parameter is NULL");
592 return VC_ERROR_INVALID_PARAMETER;
595 vc_cmd_list_s* list = NULL;
596 list = (vc_cmd_list_s*)vc_cmd_list;
598 if (list->index > 0) {
599 list->index = list->index - 1;
600 SLOG(LOG_DEBUG, TAG_VCCMD, "[DEBUG] List index : %d", list->index);
602 SLOG(LOG_DEBUG, TAG_VCCMD, "[DEBUG] List index : %d", list->index);
603 return VC_ERROR_ITERATION_END;
606 return VC_ERROR_NONE;
609 int vc_cmd_list_get_current(vc_cmd_list_h vc_cmd_list, vc_cmd_h* vc_command)
611 if (0 != __vc_cmd_get_feature_enabled()) {
612 return VC_ERROR_NOT_SUPPORTED;
614 if (0 != __vc_cmd_check_privilege()) {
615 return VC_ERROR_PERMISSION_DENIED;
618 if (NULL == vc_cmd_list || NULL == vc_command) {
619 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Input parameter is NULL");
620 return VC_ERROR_INVALID_PARAMETER;
623 vc_cmd_list_s* list = NULL;
624 list = (vc_cmd_list_s*)vc_cmd_list;
626 SLOG(LOG_DEBUG, TAG_VCCMD, "[List] list (%p), index (%d)", list, list->index);
628 if (0 == g_slist_length(list->list)) {
629 SLOG(LOG_DEBUG, TAG_VCCMD, "[List] list is empty");
631 return VC_ERROR_EMPTY;
634 vc_cmd_s *temp_cmd = NULL;
635 temp_cmd = g_slist_nth_data(list->list, list->index);
637 *vc_command = (vc_cmd_h)temp_cmd;
639 SLOG(LOG_DEBUG, TAG_VCCMD, "[List] Get current command (%p)", *vc_command);
641 return VC_ERROR_NONE;
645 int vc_cmd_create(vc_cmd_h* vc_command)
647 if (0 != __vc_cmd_get_feature_enabled()) {
648 return VC_ERROR_NOT_SUPPORTED;
650 if (0 != __vc_cmd_check_privilege()) {
651 return VC_ERROR_PERMISSION_DENIED;
654 if (NULL == vc_command) {
655 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Input parameter is NULL");
656 return VC_ERROR_INVALID_PARAMETER;
659 vc_cmd_s* command = (vc_cmd_s*)calloc(1, sizeof(vc_cmd_s));
661 if (NULL == command) {
662 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Not enough memory");
663 return VC_ERROR_OUT_OF_MEMORY;
669 command->type = VC_COMMAND_TYPE_NONE;
670 command->format = VC_CMD_FORMAT_FIXED;
671 command->command = NULL;
672 command->parameter = NULL;
674 command->key = VC_KEY_NONE;
675 command->modifier = VC_MODIFIER_NONE;
677 *vc_command = (vc_cmd_h)command;
679 SLOG(LOG_DEBUG, TAG_VCCMD, "[Create command][%p]", *vc_command);
681 return VC_ERROR_NONE;
684 int vc_cmd_destroy(vc_cmd_h vc_command)
686 if (0 != __vc_cmd_get_feature_enabled()) {
687 return VC_ERROR_NOT_SUPPORTED;
689 if (0 != __vc_cmd_check_privilege()) {
690 return VC_ERROR_PERMISSION_DENIED;
693 if (NULL == vc_command) {
694 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Input parameter is NULL");
695 return VC_ERROR_INVALID_PARAMETER;
698 vc_cmd_s* command = NULL;
699 command = (vc_cmd_s*)vc_command;
701 SLOG(LOG_DEBUG, TAG_VCCMD, "[Destroy command][%p]", command);
703 if (NULL != command) {
704 if (NULL != command->command) free(command->command);
705 if (NULL != command->parameter) free(command->parameter);
710 return VC_ERROR_NONE;
713 int vc_cmd_set_id(vc_cmd_h vc_command, int id)
715 if (0 != __vc_cmd_get_feature_enabled()) {
716 return VC_ERROR_NOT_SUPPORTED;
718 if (0 != __vc_cmd_check_privilege()) {
719 return VC_ERROR_PERMISSION_DENIED;
722 if (NULL == vc_command) {
723 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Invalid parameter ");
724 return VC_ERROR_INVALID_PARAMETER;
727 vc_cmd_s* cmd = NULL;
728 cmd = (vc_cmd_s*)vc_command;
732 SLOG(LOG_DEBUG, TAG_VCCMD, "[Set id][%p] id(%d)", vc_command, cmd->id);
738 int vc_cmd_get_id(vc_cmd_h vc_command, int* id)
740 if (0 != __vc_cmd_get_feature_enabled()) {
741 return VC_ERROR_NOT_SUPPORTED;
743 if (0 != __vc_cmd_check_privilege()) {
744 return VC_ERROR_PERMISSION_DENIED;
747 if (NULL == vc_command || NULL == id) {
748 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Invalid handle ");
749 return VC_ERROR_INVALID_PARAMETER;
752 vc_cmd_s* cmd = NULL;
753 cmd = (vc_cmd_s*)vc_command;
757 SLOG(LOG_DEBUG, TAG_VCCMD, "[Get id][%p] id(%d)", vc_command, *id);
763 int vc_cmd_set_command(vc_cmd_h vc_command, const char* command)
765 if (0 != __vc_cmd_get_feature_enabled()) {
766 return VC_ERROR_NOT_SUPPORTED;
768 if (0 != __vc_cmd_check_privilege()) {
769 return VC_ERROR_PERMISSION_DENIED;
772 if (NULL == vc_command) {
773 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Invalid parameter ");
774 return VC_ERROR_INVALID_PARAMETER;
777 vc_cmd_s* cmd = NULL;
778 cmd = (vc_cmd_s*)vc_command;
780 if (NULL != cmd->command) {
786 if (NULL != command) {
787 cmd->command = strdup(command);
790 SLOG(LOG_DEBUG, TAG_VCCMD, "[Set command][%p] Command(%s)", vc_command, cmd->command);
795 int vc_cmd_get_command(vc_cmd_h vc_command, char** command)
797 if (0 != __vc_cmd_get_feature_enabled()) {
798 return VC_ERROR_NOT_SUPPORTED;
800 if (0 != __vc_cmd_check_privilege()) {
801 return VC_ERROR_PERMISSION_DENIED;
804 if (NULL == vc_command || NULL == command) {
805 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Invalid handle ");
806 return VC_ERROR_INVALID_PARAMETER;
809 vc_cmd_s* cmd = NULL;
810 cmd = (vc_cmd_s*)vc_command;
812 if (NULL != cmd->command) {
813 *command = strdup(gettext(cmd->command));
816 SLOG(LOG_DEBUG, TAG_VCCMD, "[Get command][%p] Command(%s)", vc_command, *command);
821 int vc_cmd_set_unfixed_command(vc_cmd_h vc_command, const char* command)
823 if (0 != __vc_cmd_get_feature_enabled()) {
824 return VC_ERROR_NOT_SUPPORTED;
826 if (0 != __vc_cmd_check_privilege()) {
827 return VC_ERROR_PERMISSION_DENIED;
830 if (NULL == vc_command) {
831 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Invalid parameter ");
832 return VC_ERROR_INVALID_PARAMETER;
835 vc_cmd_s* cmd = NULL;
836 cmd = (vc_cmd_s*)vc_command;
838 if (NULL != cmd->parameter) {
839 free(cmd->parameter);
842 cmd->parameter = NULL;
844 if (NULL != command) {
845 cmd->parameter = strdup(command);
846 SLOG(LOG_DEBUG, TAG_VCCMD, "[Set parameter][%p] parameter(%s)", vc_command, cmd->parameter);
852 int vc_cmd_get_unfixed_command(vc_cmd_h vc_command, char** command)
854 if (0 != __vc_cmd_get_feature_enabled()) {
855 return VC_ERROR_NOT_SUPPORTED;
857 if (0 != __vc_cmd_check_privilege()) {
858 return VC_ERROR_PERMISSION_DENIED;
861 if (NULL == vc_command || NULL == command) {
862 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Invalid handle ");
863 return VC_ERROR_INVALID_PARAMETER;
866 vc_cmd_s* cmd = NULL;
867 cmd = (vc_cmd_s*)vc_command;
869 if (NULL != cmd->parameter) {
870 *command = strdup(gettext(cmd->parameter));
871 SLOG(LOG_DEBUG, TAG_VCCMD, "[Get nonfixed command][%p] nonfixed command(%s)", vc_command, *command);
877 int vc_cmd_set_type(vc_cmd_h vc_command, int type)
879 if (0 != __vc_cmd_get_feature_enabled()) {
880 return VC_ERROR_NOT_SUPPORTED;
882 if (0 != __vc_cmd_check_privilege()) {
883 return VC_ERROR_PERMISSION_DENIED;
886 if (NULL == vc_command) {
887 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Invalid parameter ");
888 return VC_ERROR_INVALID_PARAMETER;
891 vc_cmd_s* cmd = NULL;
892 cmd = (vc_cmd_s*)vc_command;
896 SLOG(LOG_DEBUG, TAG_VCCMD, "[Set type][%p] type(%d)", vc_command, cmd->type);
901 int vc_cmd_get_type(vc_cmd_h vc_command, int* type)
903 if (0 != __vc_cmd_get_feature_enabled()) {
904 return VC_ERROR_NOT_SUPPORTED;
906 if (0 != __vc_cmd_check_privilege()) {
907 return VC_ERROR_PERMISSION_DENIED;
910 if (NULL == vc_command || NULL == type) {
911 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Invalid parameter ");
912 return VC_ERROR_INVALID_PARAMETER;
915 vc_cmd_s* cmd = NULL;
916 cmd = (vc_cmd_s*)vc_command;
920 SLOG(LOG_DEBUG, TAG_VCCMD, "[Get type][%p] type(%d)", vc_command, *type);
925 int vc_cmd_set_format(vc_cmd_h vc_command, vc_cmd_format_e format)
927 if (0 != __vc_cmd_get_feature_enabled()) {
928 return VC_ERROR_NOT_SUPPORTED;
930 if (0 != __vc_cmd_check_privilege()) {
931 return VC_ERROR_PERMISSION_DENIED;
934 if (NULL == vc_command) {
935 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Invalid parameter ");
936 return VC_ERROR_INVALID_PARAMETER;
939 vc_cmd_s* cmd = NULL;
940 cmd = (vc_cmd_s*)vc_command;
942 cmd->format = format;
944 SLOG(LOG_DEBUG, TAG_VCCMD, "[Set format][%p] format(%d)", vc_command, format);
949 int vc_cmd_get_format(vc_cmd_h vc_command, vc_cmd_format_e* format)
951 if (0 != __vc_cmd_get_feature_enabled()) {
952 return VC_ERROR_NOT_SUPPORTED;
954 if (0 != __vc_cmd_check_privilege()) {
955 return VC_ERROR_PERMISSION_DENIED;
958 if (NULL == vc_command || NULL == format) {
959 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Invalid parameter ");
960 return VC_ERROR_INVALID_PARAMETER;
963 vc_cmd_s* cmd = NULL;
964 cmd = (vc_cmd_s*)vc_command;
966 *format = cmd->format;
968 SLOG(LOG_DEBUG, TAG_VCCMD, "[Get format][%p] format(%d)", vc_command, *format);
973 int vc_cmd_set_pid(vc_cmd_h vc_command, int pid)
975 if (0 != __vc_cmd_get_feature_enabled()) {
976 return VC_ERROR_NOT_SUPPORTED;
978 if (0 != __vc_cmd_check_privilege()) {
979 return VC_ERROR_PERMISSION_DENIED;
982 if (NULL == vc_command) {
983 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Invalid parameter ");
984 return VC_ERROR_INVALID_PARAMETER;
987 vc_cmd_s* cmd = NULL;
988 cmd = (vc_cmd_s*)vc_command;
992 SLOG(LOG_DEBUG, TAG_VCCMD, "[Set pid][%p] pid(%d)", vc_command, cmd->pid);
997 int vc_cmd_get_pid(vc_cmd_h vc_command, int* pid)
999 if (0 != __vc_cmd_get_feature_enabled()) {
1000 return VC_ERROR_NOT_SUPPORTED;
1002 if (0 != __vc_cmd_check_privilege()) {
1003 return VC_ERROR_PERMISSION_DENIED;
1006 if (NULL == vc_command || NULL == pid) {
1007 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Invalid parameter ");
1008 return VC_ERROR_INVALID_PARAMETER;
1011 vc_cmd_s* cmd = NULL;
1012 cmd = (vc_cmd_s*)vc_command;
1016 SLOG(LOG_DEBUG, TAG_VCCMD, "[Get pid][%p] pid(%d)", vc_command, *pid);
1021 int vc_cmd_set_domain(vc_cmd_h vc_command, int domain)
1023 if (0 != __vc_cmd_get_feature_enabled()) {
1024 return VC_ERROR_NOT_SUPPORTED;
1026 if (0 != __vc_cmd_check_privilege()) {
1027 return VC_ERROR_PERMISSION_DENIED;
1030 if (NULL == vc_command) {
1031 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Invalid parameter ");
1032 return VC_ERROR_INVALID_PARAMETER;
1035 vc_cmd_s* cmd = NULL;
1036 cmd = (vc_cmd_s*)vc_command;
1038 cmd->domain = domain;
1040 SLOG(LOG_DEBUG, TAG_VCCMD, "[Set domain] domain : %d", domain);
1045 int vc_cmd_get_domain(vc_cmd_h vc_command, int* domain)
1047 if (0 != __vc_cmd_get_feature_enabled()) {
1048 return VC_ERROR_NOT_SUPPORTED;
1050 if (0 != __vc_cmd_check_privilege()) {
1051 return VC_ERROR_PERMISSION_DENIED;
1054 if (NULL == vc_command || NULL == domain) {
1055 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Invalid parameter ");
1056 return VC_ERROR_INVALID_PARAMETER;
1059 vc_cmd_s* cmd = NULL;
1060 cmd = (vc_cmd_s*)vc_command;
1062 *domain = cmd->domain;
1064 SLOG(LOG_DEBUG, TAG_VCCMD, "[Get domain] domain : %d", *domain);
1070 * @brief Sets key value of command.
1072 * @param[in] vc_command Command handle
1073 * @param[in] key key value
1074 * @param[in] modifier modifier value
1076 * @return 0 on success, otherwise a negative error value
1077 * @retval #VC_ERROR_NONE Successful
1078 * @retval #VC_ERROR_INVALID_PARAMETER Invalid parameter
1080 * @see vc_cmd_get_result_key()
1082 int vc_cmd_set_result_key(vc_cmd_h vc_command, int key, int modifier)
1084 SLOG(LOG_DEBUG, TAG_VCCMD, "===== Set result key");
1086 if (NULL == vc_command) {
1087 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Invalid parameter ");
1088 return VC_ERROR_INVALID_PARAMETER;
1091 vc_cmd_s* cmd = NULL;
1092 cmd = (vc_cmd_s*)vc_command;
1094 SLOG(LOG_DEBUG, TAG_VCCMD, "key : %d, modifier : %d", key, modifier);
1097 cmd->modifier = modifier;
1099 SLOG(LOG_DEBUG, TAG_VCCMD, "=====");
1100 SLOG(LOG_DEBUG, TAG_VCCMD, " ");
1106 * @brief Gets key value of command.
1108 * @param[in] vc_command Command handle
1109 * @param[out] key key value
1110 * @param[out] modifier modifier value
1112 * @return 0 on success, otherwise a negative error value
1113 * @retval #VC_ERROR_NONE Successful
1114 * @retval #VC_ERROR_INVALID_PARAMETER Invalid parameter
1116 * @see vc_cmd_add_result_key()
1118 int vc_cmd_get_result_key(vc_cmd_h vc_command, int* key, int* modifier)
1120 SLOG(LOG_DEBUG, TAG_VCCMD, "===== Get result key");
1122 if (NULL == vc_command || NULL == key || NULL == modifier) {
1123 SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Invalid parameter ");
1124 return VC_ERROR_INVALID_PARAMETER;
1127 vc_cmd_s* cmd = NULL;
1128 cmd = (vc_cmd_s*)vc_command;
1131 *modifier = cmd->modifier;
1133 SLOG(LOG_DEBUG, TAG_VCCMD, "=====");
1134 SLOG(LOG_DEBUG, TAG_VCCMD, " ");
1139 int vc_cmd_print_list(vc_cmd_list_h vc_cmd_list)
1141 if (NULL == vc_cmd_list) {
1145 vc_cmd_list_s* list = NULL;
1146 list = (vc_cmd_list_s*)vc_cmd_list;
1148 SLOG(LOG_DEBUG, TAG_VCCMD, "=== Command List ===");
1149 SLOG(LOG_DEBUG, TAG_VCCMD, "[List][%p]", list);
1151 int count = g_slist_length(list->list);
1154 vc_cmd_s *temp_cmd = NULL;
1156 for (i = 0; i < count ; i++) {
1157 temp_cmd = g_slist_nth_data(list->list, i);
1159 if (NULL != temp_cmd) {
1160 SLOG(LOG_DEBUG, TAG_VCCMD, " [%d][%p] PID(%d) ID(%d) Type(%d) Format(%d) Domain(%d) Command(%s) Param(%s)",
1161 i, temp_cmd, temp_cmd->pid, temp_cmd->index, temp_cmd->type, temp_cmd->format, temp_cmd->domain, temp_cmd->command, temp_cmd->parameter);
1165 SLOG(LOG_DEBUG, TAG_VCCMD, "==================");
1166 SLOG(LOG_DEBUG, TAG_VCCMD, " ");