2 * Copyright (c) 2011 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.
15 #include "tts_client.h"
17 /* Max number of handle */
18 static const int g_max_handle = 999;
19 /* allocated handle */
20 static int g_allocated_handle = 0;
22 static GList *g_client_list = NULL;
24 /* private functions */
25 static int __client_generate_uid(int pid)
29 if (g_allocated_handle > g_max_handle) {
30 g_allocated_handle = 1;
33 /* generate uid, handle number should be smaller than 1000 */
34 return pid * 1000 + g_allocated_handle;
37 int tts_client_new(tts_h* tts)
39 tts_client_s* client = NULL;
40 client = (tts_client_s*)g_malloc0 (sizeof(tts_client_s));
42 tts_h temp = (tts_h)g_malloc0(sizeof(tts_h));
43 temp->handle = __client_generate_uid(getpid());
45 /* initialize client data */
47 client->pid = getpid();
48 client->uid = temp->handle;
49 client->current_utt_id = 0;
51 client->interrupted_cb = NULL;
52 client->interrupted_user_data = NULL;
54 client->utt_started_cb = NULL;
55 client->utt_started_user_data = NULL;
56 client->utt_completeted_cb = NULL;
57 client->utt_completed_user_data = NULL;
59 client->error_cb = NULL;
60 client->error_user_data = NULL;
62 client->current_state = TTS_STATE_READY;
64 client->cb_ref_count = 0;
66 g_client_list = g_list_append(g_client_list, client);
70 SLOG(LOG_DEBUG, TAG_TTSC, "[Success] Create client object : uid(%d)", client->uid);
75 int tts_client_destroy(tts_h tts)
78 SLOG(LOG_ERROR, TAG_TTSC, "Input parameter is NULL");
83 tts_client_s *data = NULL;
85 /* if list have item */
86 if (g_list_length(g_client_list) > 0) {
87 /* Get a first item */
88 iter = g_list_first(g_client_list);
90 while (NULL != iter) {
92 if (tts->handle == data->tts->handle) {
93 g_client_list = g_list_remove_link(g_client_list, iter);
95 while (0 != data->cb_ref_count)
97 /* wait for release callback function */
106 iter = g_list_next(iter);
109 SLOG(LOG_ERROR, TAG_TTSC, "Fail to destroy client : handle is not valid");
114 tts_client_s* tts_client_get(tts_h tts)
117 SLOG(LOG_ERROR, TAG_TTSC, "Input parameter is NULL");
122 tts_client_s *data = NULL;
124 if (g_list_length(g_client_list) > 0) {
125 /* Get a first item */
126 iter = g_list_first(g_client_list);
128 while (NULL != iter) {
131 if (tts->handle == data->tts->handle)
135 iter = g_list_next(iter);
139 SLOG(LOG_ERROR, TAG_TTSC, "handle is not valid");
144 tts_client_s* tts_client_get_by_uid(const int uid)
147 SLOG(LOG_ERROR, TAG_TTSC, "out of range : handle");
152 tts_client_s *data = NULL;
154 if (g_list_length(g_client_list) > 0) {
155 /* Get a first item */
156 iter = g_list_first(g_client_list);
158 while (NULL != iter) {
160 if (uid == data->uid) {
165 iter = g_list_next(iter);
169 SLOG(LOG_WARN, TAG_TTSC, "uid is not valid");
174 int tts_client_get_size()
176 return g_list_length(g_client_list);
179 int tts_client_use_callback(tts_client_s* client)
181 client->cb_ref_count++;
185 int tts_client_not_use_callback(tts_client_s* client)
187 client->cb_ref_count--;