Add new flag variable for checking state
[platform/core/uifw/tts.git] / client / tts_ipc.c
1 /*
2 *  Copyright (c) 2021 Samsung Electronics Co., Ltd All Rights Reserved
3 *  Licensed under the Apache License, Version 2.0 (the "License");
4 *  you may not use this file except in compliance with the License.
5 *  You may obtain a copy of the License at
6 *  http://www.apache.org/licenses/LICENSE-2.0
7 *  Unless required by applicable law or agreed to in writing, software
8 *  distributed under the License is distributed on an "AS IS" BASIS,
9 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10 *  See the License for the specific language governing permissions and
11 *  limitations under the License.
12 */
13 #include "tts_ipc.h"
14 #include "tts_dbus.h"
15 #include "tts_tidl.h"
16 #include "tts_dlog.h"
17
18
19 typedef enum {
20         OPEN_CONNECTION,
21         CLOSE_CONNECTION,
22         STOP_LISTENING,
23         REQUEST_HELLO,
24         REQUEST_HELLO_SYNC,
25         REQUEST_INITIALIZE,
26         REQUEST_FINALIZE,
27         REQUEST_ADD_TEXT,
28         REQUEST_PLAY,
29         REQUEST_STOP,
30         REQUEST_PAUSE,
31         REQUEST_SET_PRIVATE_DATA,
32         REQUEST_GET_PRIVATE_DATA,
33         REQUEST_PLAY_PCM,
34         REQUEST_STOP_PCM,
35         REQUEST_ADD_PCM
36 } tts_ipc_vtable_e;
37
38
39 static int(*ttsc_dbus_vtable[])() = { &tts_dbus_open_connection, &tts_dbus_close_connection, &tts_dbus_stop_listening,
40                                                 &tts_dbus_request_hello, &tts_dbus_request_hello_sync, &tts_dbus_request_initialize,
41                                                 &tts_dbus_request_finalize, &tts_dbus_request_add_text, &tts_dbus_request_play, &tts_dbus_request_stop,
42                                                 &tts_dbus_request_pause, &tts_dbus_request_set_private_data, &tts_dbus_request_get_private_data,
43                                                 &tts_dbus_request_play_pcm, &tts_dbus_request_stop_pcm, &tts_dbus_request_add_pcm };
44
45 static int(*ttsc_tidl_vtable[])() = { &tts_tidl_open_connection, &tts_tidl_close_connection, &tts_tidl_stop_listening,
46                                                 &tts_tidl_request_hello, &tts_tidl_request_hello_sync, &tts_tidl_request_initialize,
47                                                 &tts_tidl_request_finalize, &tts_tidl_request_add_text, &tts_tidl_request_play, &tts_tidl_request_stop,
48                                                 &tts_tidl_request_pause, &tts_tidl_request_set_private_data, &tts_tidl_request_get_private_data,
49                                                 &tts_tidl_request_play_pcm, &tts_tidl_request_stop_pcm, &tts_tidl_request_add_pcm };
50
51 static int (**g_vtable)();
52 static tts_ipc_method_e g_ipc_method = TTS_IPC_METHOD_UNDEFINED;
53
54 int tts_ipc_set_method(tts_ipc_method_e method)
55 {
56         switch (method) {
57         case TTS_IPC_METHOD_DBUS:
58                 g_vtable = ttsc_dbus_vtable;
59                 break;
60         case TTS_IPC_METHOD_TIDL:
61                 g_vtable = ttsc_tidl_vtable;
62                 break;
63         default:
64                 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] IPC method is not valid");
65                 g_vtable = NULL;
66                 return TTS_ERROR_INVALID_PARAMETER;
67         }
68
69         g_ipc_method = method;
70         return TTS_ERROR_NONE;
71 }
72
73 bool tts_ipc_is_method_set()
74 {
75         SLOG(LOG_INFO, TAG_TTSC, "Set method (TIDL or DBUS) for ipc");
76         return (g_ipc_method != TTS_IPC_METHOD_UNDEFINED);
77 }
78
79 int tts_ipc_open_connection(unsigned int uid)
80 {
81         SLOG(LOG_INFO, TAG_TTSC, "[IPC] tts_ipc_open_connection");
82
83         RETVM_IF(false == tts_client_is_valid_uid(uid), TTS_ERROR_INVALID_PARAMETER, "Fail to get tts_client with uid(%u)", uid);
84         RETVM_IF(NULL == g_vtable, TTS_ERROR_OPERATION_FAILED, "[ERROR] IPC method is not set");
85
86         return g_vtable[OPEN_CONNECTION](uid);
87 }
88
89 int tts_ipc_close_connection(unsigned int uid)
90 {
91         SLOG(LOG_INFO, TAG_TTSC, "[IPC] tts_ipc_close_connection");
92
93         RETVM_IF(false == tts_client_is_valid_uid(uid), TTS_ERROR_INVALID_PARAMETER, "Fail to get tts_client with uid(%u)", uid);
94         RETVM_IF(NULL == g_vtable, TTS_ERROR_OPERATION_FAILED, "[ERROR] IPC method is not set");
95
96         return g_vtable[CLOSE_CONNECTION](uid);
97 }
98
99 int tts_ipc_stop_listening(unsigned int uid)
100 {
101         SLOG(LOG_INFO, TAG_TTSC, "[IPC] tts_ipc_stop_listening");
102
103         RETVM_IF(false == tts_client_is_valid_uid(uid), TTS_ERROR_INVALID_PARAMETER, "Fail to get tts_client with uid(%u)", uid);
104         RETVM_IF(NULL == g_vtable, TTS_ERROR_OPERATION_FAILED, "[ERROR] IPC method is not set");
105
106         return g_vtable[STOP_LISTENING](uid);
107 }
108
109 int tts_ipc_request_hello(unsigned int uid, tts_mode_e mode)
110 {
111         SLOG(LOG_INFO, TAG_TTSC, "[IPC] tts_ipc_request_hello");
112
113         RETVM_IF(false == tts_client_is_valid_uid(uid), TTS_ERROR_INVALID_PARAMETER, "Fail to get tts_client with uid(%u)", uid);
114         RETVM_IF(NULL == g_vtable, TTS_ERROR_OPERATION_FAILED, "[ERROR] IPC method is not set");
115
116         return g_vtable[REQUEST_HELLO](uid, mode);
117 }
118
119 int tts_ipc_request_hello_sync(unsigned int uid)
120 {
121         SLOG(LOG_INFO, TAG_TTSC, "[IPC] tts_ipc_request_hello_sync");
122
123         RETVM_IF(false == tts_client_is_valid_uid(uid), TTS_ERROR_INVALID_PARAMETER, "Fail to get tts_client with uid(%u)", uid);
124         RETVM_IF(NULL == g_vtable, TTS_ERROR_OPERATION_FAILED, "[ERROR] IPC method is not set");
125
126         return g_vtable[REQUEST_HELLO_SYNC](uid);
127 }
128
129 int tts_ipc_request_initialize(unsigned int uid, tts_mode_e mode, bool* credential_needed)
130 {
131         SLOG(LOG_INFO, TAG_TTSC, "[IPC] tts_ipc_request_initialize");
132
133         RETVM_IF(false == tts_client_is_valid_uid(uid), TTS_ERROR_INVALID_PARAMETER, "Fail to get tts_client with uid(%u)", uid);
134         RETVM_IF(NULL == g_vtable, TTS_ERROR_OPERATION_FAILED, "[ERROR] IPC method is not set");
135
136         return g_vtable[REQUEST_INITIALIZE](uid, mode, credential_needed);
137 }
138
139 int tts_ipc_request_finalize(unsigned int uid)
140 {
141         SLOG(LOG_INFO, TAG_TTSC, "[IPC] tts_ipc_request_finalize");
142
143         RETVM_IF(false == tts_client_is_valid_uid(uid), TTS_ERROR_INVALID_PARAMETER, "Fail to get tts_client with uid(%u)", uid);
144         RETVM_IF(NULL == g_vtable, TTS_ERROR_OPERATION_FAILED, "[ERROR] IPC method is not set");
145
146         return g_vtable[REQUEST_FINALIZE](uid);
147 }
148
149 int tts_ipc_request_add_text(unsigned int uid, const char* text, const char* lang, int vctype, int speed, int uttid, const char* credential)
150 {
151         SLOG(LOG_INFO, TAG_TTSC, "[IPC] tts_ipc_request_add_text");
152
153         RETVM_IF(false == tts_client_is_valid_uid(uid), TTS_ERROR_INVALID_PARAMETER, "Fail to get tts_client with uid(%u)", uid);
154         RETVM_IF(NULL == g_vtable, TTS_ERROR_OPERATION_FAILED, "[ERROR] IPC method is not set");
155
156         return g_vtable[REQUEST_ADD_TEXT](uid, text, lang, vctype, speed, uttid, credential);
157 }
158
159 int tts_ipc_request_set_private_data(unsigned int uid, const char* key, const char* data)
160 {
161         SLOG(LOG_INFO, TAG_TTSC, "[IPC] tts_ipc_request_set_private_data");
162
163         RETVM_IF(false == tts_client_is_valid_uid(uid), TTS_ERROR_INVALID_PARAMETER, "Fail to get tts_client with uid(%u)", uid);
164         RETVM_IF(NULL == g_vtable, TTS_ERROR_OPERATION_FAILED, "[ERROR] IPC method is not set");
165
166         return g_vtable[REQUEST_SET_PRIVATE_DATA](uid, key, data);
167 }
168
169 int tts_ipc_request_get_private_data(unsigned int uid, const char* key, char** data)
170 {
171         SLOG(LOG_INFO, TAG_TTSC, "[IPC] tts_ipc_request_get_private_data");
172
173         RETVM_IF(false == tts_client_is_valid_uid(uid), TTS_ERROR_INVALID_PARAMETER, "Fail to get tts_client with uid(%u)", uid);
174         RETVM_IF(NULL == g_vtable, TTS_ERROR_OPERATION_FAILED, "[ERROR] IPC method is not set");
175
176         return g_vtable[REQUEST_GET_PRIVATE_DATA](uid, key, data);
177 }
178
179 int tts_ipc_request_play(unsigned int uid, const char* credential)
180 {
181         SLOG(LOG_INFO, TAG_TTSC, "[IPC] tts_ipc_request_play");
182
183         RETVM_IF(false == tts_client_is_valid_uid(uid), TTS_ERROR_INVALID_PARAMETER, "Fail to get tts_client with uid(%u)", uid);
184         RETVM_IF(NULL == g_vtable, TTS_ERROR_OPERATION_FAILED, "[ERROR] IPC method is not set");
185
186         return g_vtable[REQUEST_PLAY](uid, credential);
187 }
188
189 int tts_ipc_request_stop(unsigned int uid)
190 {
191         SLOG(LOG_INFO, TAG_TTSC, "[IPC] tts_ipc_request_stop");
192
193         RETVM_IF(false == tts_client_is_valid_uid(uid), TTS_ERROR_INVALID_PARAMETER, "Fail to get tts_client with uid(%u)", uid);
194         RETVM_IF(NULL == g_vtable, TTS_ERROR_OPERATION_FAILED, "[ERROR] IPC method is not set");
195
196         return g_vtable[REQUEST_STOP](uid);
197 }
198
199 int tts_ipc_request_pause(unsigned int uid)
200 {
201         SLOG(LOG_INFO, TAG_TTSC, "[IPC] tts_ipc_request_pause");
202
203         RETVM_IF(false == tts_client_is_valid_uid(uid), TTS_ERROR_INVALID_PARAMETER, "Fail to get tts_client with uid(%u)", uid);
204         RETVM_IF(NULL == g_vtable, TTS_ERROR_OPERATION_FAILED, "[ERROR] IPC method is not set");
205
206         return g_vtable[REQUEST_PAUSE](uid);
207 }
208
209 int tts_ipc_request_play_pcm(unsigned int uid)
210 {
211         SLOG(LOG_INFO, TAG_TTSC, "[IPC] tts_ipc_request_play_pcm");
212
213         RETVM_IF(false == tts_client_is_valid_uid(uid), TTS_ERROR_INVALID_PARAMETER, "Fail to get tts_client with uid(%u)", uid);
214         RETVM_IF(NULL == g_vtable, TTS_ERROR_OPERATION_FAILED, "[ERROR] IPC method is not set");
215
216         return g_vtable[REQUEST_PLAY_PCM](uid);
217 }
218
219 int tts_ipc_request_stop_pcm(unsigned int uid)
220 {
221         SLOG(LOG_INFO, TAG_TTSC, "[IPC] tts_ipc_request_stop_pcm");
222
223         RETVM_IF(false == tts_client_is_valid_uid(uid), TTS_ERROR_INVALID_PARAMETER, "Fail to get tts_client with uid(%u)", uid);
224         RETVM_IF(NULL == g_vtable, TTS_ERROR_OPERATION_FAILED, "[ERROR] IPC method is not set");
225
226         return g_vtable[REQUEST_STOP_PCM](uid);
227 }
228
229 int tts_ipc_request_add_pcm(unsigned int uid, int event, const char* data, int data_size, int audio_type, int rate)
230 {
231         SLOG(LOG_INFO, TAG_TTSC, "[IPC] tts_ipc_request_add_pcm");
232
233         RETVM_IF(false == tts_client_is_valid_uid(uid), TTS_ERROR_INVALID_PARAMETER, "Fail to get tts_client with uid(%u)", uid);
234         RETVM_IF(NULL == g_vtable, TTS_ERROR_OPERATION_FAILED, "[ERROR] IPC method is not set");
235
236         return g_vtable[REQUEST_ADD_PCM](uid, event, data, data_size, audio_type, rate);
237 }