Tizen 2.1 base
[apps/core/preloaded/ug-camera-efl.git] / src / cam_voice_command.c
1 /*\r
2  * Copyright 2012  Samsung Electronics Co., Ltd\r
3  *\r
4  * Licensed under the Flora License, Version 1.0 (the "License");\r
5  * you may not use this file except in compliance with the License.\r
6  * You may obtain a copy of the License at\r
7  *\r
8  *        http://floralicense.org/license/\r
9  *\r
10  * Unless required by applicable law or agreed to in writing, software\r
11  * distributed under the License is distributed on an "AS IS" BASIS,\r
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
13  * See the License for the specific language governing permissions and\r
14  * limitations under the License.\r
15  */\r
16 \r
17 \r
18 #include "cam_voice_command.h"\r
19 #include "cam_debug.h"\r
20 \r
21 // voice control module is not setup.\r
22 #ifdef ENABLE_VOICE_CONTROL\r
23 #include <vc_bargein.h>\r
24 \r
25 static vc_bargein_h voice_cmd_h = NULL;\r
26 static cam_voice_cmd_cb g_cmd_cb;\r
27 \r
28 static void __init_cb(vc_bargein_h vc, void *user_data);\r
29 static void __result_cb(vc_bargein_h vc, vc_bargein_result_event_e event, vc_bargein_app_type_e app_type, int action_type, void *user_data);\r
30 static void __error_cb(vc_bargein_h vc, vc_bargein_error_e reason, void *user_data);\r
31 static void __start_voice_cmd(void *user_data);\r
32 \r
33 static void __init_cb(vc_bargein_h vc, void *user_data)\r
34 {\r
35 \r
36         cam_retm_if(user_data == NULL, "user_data is NULL");\r
37 \r
38         if (vc == NULL) {\r
39                 cam_debug(LOG_CAM, "voice handle init fail");\r
40                 g_cmd_cb(CAM_VOICE_CMD_ERROR, user_data);\r
41         }\r
42 \r
43         __start_voice_cmd(user_data);\r
44 \r
45         return;\r
46 }\r
47 \r
48 static void __result_cb(vc_bargein_h vc, vc_bargein_result_event_e event, vc_bargein_app_type_e app_type, int action_type, void *user_data)\r
49 {\r
50         if (voice_cmd_h == NULL) {\r
51                 cam_debug(LOG_CAM, "voice_cmd_h is NULL");\r
52                 g_cmd_cb(CAM_VOICE_CMD_ERROR, user_data);\r
53         }\r
54 \r
55         if (app_type == VC_BARGEIN_APP_TYPE_CAMERA && action_type == VC_BARGEIN_CAMERA_ACTION_CAPTURE) {\r
56                 switch(event) {\r
57                 case VC_BARGEIN_RESULT_EVENT_SUCCESS:\r
58                         {\r
59                                 g_cmd_cb(CAM_VOICE_CMD_READY, user_data);\r
60                         }\r
61                         break;\r
62                 case VC_BARGEIN_RESULT_EVENT_REJECTED:\r
63                         {\r
64                                 g_cmd_cb(CAM_VOICE_CMD_REJECT, user_data);\r
65                         }\r
66                         break;\r
67                 case VC_BARGEIN_RESULT_EVENT_ERROR:\r
68                 default:\r
69                         g_cmd_cb(CAM_VOICE_CMD_ERROR, user_data);\r
70                         return;\r
71                 }\r
72         }\r
73         else\r
74                 g_cmd_cb(CAM_VOICE_CMD_ERROR, user_data);\r
75 \r
76         return;\r
77 }\r
78 \r
79 static void __error_cb(vc_bargein_h vc, vc_bargein_error_e reason, void *user_data)\r
80 {\r
81         cam_debug(LOG_CAM, "error is [%d]", reason);\r
82         g_cmd_cb(CAM_VOICE_CMD_READY, user_data);\r
83         return;\r
84 }\r
85 \r
86 static void __start_voice_cmd(void *user_data)\r
87 {\r
88         if (voice_cmd_h == NULL) {\r
89                 cam_debug(LOG_CAM, "voice_cmd_h is NULL");\r
90                 g_cmd_cb(CAM_VOICE_CMD_ERROR, user_data);\r
91         }\r
92 \r
93         if (vc_bargein_start(voice_cmd_h, VC_BARGEIN_LANGUAGE_KO_KR, VC_BARGEIN_APP_TYPE_CAMERA) != VC_BARGEIN_ERROR_NONE) {\r
94                 cam_debug(LOG_CAM, "vc_bargein_start() fail");\r
95                 g_cmd_cb(CAM_VOICE_CMD_ERROR, user_data);\r
96         }\r
97         return;\r
98 }\r
99 \r
100 #endif\r
101 \r
102 gboolean cam_voice_cmd_create(cam_voice_cmd_cb cmd_cb, void *user_data)\r
103 {\r
104 #ifdef ENABLE_VOICE_CONTROL\r
105 \r
106         cam_retvm_if(user_data == NULL, FALSE, "user_data is NULL");\r
107         if (voice_cmd_h) {\r
108                 vc_bargein_cancel(voice_cmd_h);\r
109                 vc_bargein_destroy(voice_cmd_h);\r
110                 voice_cmd_h = NULL;\r
111         }\r
112 \r
113         g_cmd_cb = cmd_cb;\r
114 \r
115         if (vc_bargein_create(&voice_cmd_h, (vc_bargein_initialized_cb)__init_cb,\r
116                 (vc_bargein_result_cb)__result_cb, (vc_bargein_error_cb)__error_cb, user_data) != VC_BARGEIN_ERROR_NONE) {\r
117                 cam_debug(LOG_CAM, "vc_bargein_create() fail");\r
118                 return FALSE;\r
119         }\r
120 #endif\r
121 \r
122         return TRUE;\r
123 }\r
124 \r
125 void cam_voice_cmd_destroy()\r
126 {\r
127 #ifdef ENABLE_VOICE_CONTROL\r
128         if (voice_cmd_h == NULL) {\r
129                 cam_debug(LOG_CAM, "voice_cmd_h is already delete");\r
130                 return;\r
131         }\r
132 \r
133         vc_bargein_cancel(voice_cmd_h);\r
134         vc_bargein_destroy(voice_cmd_h);\r
135         voice_cmd_h = NULL;\r
136 #endif\r
137         return;\r
138 }\r
139 \r