/*
-* Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+* Copyright (c) 2011-2016 Samsung Electronics Co., Ltd All Rights Reserved
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
#include "sttd_client_data.h"
/* Client list */
-static GList *g_client_list = NULL;
+static GSList *g_client_list = NULL;
+
+static int g_cur_recog_uid = 0;
int client_show_list()
{
- GList *iter = NULL;
+ GSList *iter = NULL;
client_info_s *data = NULL;
- SLOG(LOG_DEBUG, TAG_STTD, "----- client list");
+ SLOG(LOG_DEBUG, TAG_STTD, "----- client list");
- if (g_list_length(g_client_list) > 0) {
+ if (g_slist_length(g_client_list) > 0) {
/* Get a first item */
- iter = g_list_first(g_client_list);
+ iter = g_slist_nth(g_client_list, 0);
- int i = 1;
+ int i = 1;
while (NULL != iter) {
/*Get handle data from list*/
data = iter->data;
- SLOG(LOG_DEBUG, TAG_STTD, "[%dth] uid(%d), state(%d)", i, data->uid, data->state);
-
+ SECURE_SLOG(LOG_DEBUG, TAG_STTD, "[%dth] uid(%d), state(%d)", i, data->uid, data->state);
+
/*Get next item*/
- iter = g_list_next(iter);
+ iter = g_slist_next(iter);
i++;
}
} else {
- SLOG(LOG_DEBUG, TAG_STTD, "No Client");
+ SLOG(LOG_DEBUG, TAG_STTD, "No Client");
}
- SLOG(LOG_DEBUG, TAG_STTD, "-----");
+ SLOG(LOG_DEBUG, TAG_STTD, "-----");
return 0;
}
-GList* sttd_client_get_item(const int uid)
+GSList* __client_get_item(int uid)
{
- GList *iter = NULL;
+ GSList *iter = NULL;
client_info_s *data = NULL;
- if (0 < g_list_length(g_client_list)) {
- iter = g_list_first(g_client_list);
+ if (0 < g_slist_length(g_client_list)) {
+ iter = g_slist_nth(g_client_list, 0);
while (NULL != iter) {
/* Get handle data from list */
data = iter->data;
- if (uid == data->uid)
+ if (uid == data->uid)
return iter;
-
- iter = g_list_next(iter);
+
+ iter = g_slist_next(iter);
}
}
return NULL;
}
-int sttd_client_add(const int pid, const int uid)
+int sttd_client_add(int pid, int uid)
{
/*Check uid is duplicated*/
- GList *tmp = NULL;
- tmp = sttd_client_get_item(uid);
-
+ GSList *tmp = NULL;
+ tmp = __client_get_item(uid);
+
if (NULL != tmp) {
- SLOG(LOG_WARN, TAG_STTD, "[Client Data] Client uid is already registered");
+ SLOG(LOG_WARN, TAG_STTD, "[Client Data] Client uid is already registered");
return STTD_ERROR_INVALID_PARAMETER;
}
- client_info_s *info = (client_info_s*)g_malloc0(sizeof(client_info_s));
+ client_info_s *info = (client_info_s*)calloc(1, sizeof(client_info_s));
+ if (NULL == info) {
+ SLOG(LOG_ERROR, TAG_STTD, "[Client Data ERROR] Fail to allocate memory");
+ return STTD_ERROR_OUT_OF_MEMORY;
+ }
info->pid = pid;
info->uid = uid;
+ info->start_beep = NULL;
+ info->stop_beep = NULL;
info->state = APP_STATE_READY;
+ info->app_agreed = false;
+
/* Add item to global list */
- g_client_list = g_list_append(g_client_list, info);
-
+ g_client_list = g_slist_append(g_client_list, info);
+
if (NULL == g_client_list) {
- SLOG(LOG_ERROR, TAG_STTD, "[Client Data ERROR] Fail to add new client");
- return -1;
- } else {
- SLOG(LOG_ERROR, TAG_STTD, "[Client Data SUCCESS] Add new client");
+ SLOG(LOG_ERROR, TAG_STTD, "[Client Data ERROR] Fail to add new client");
+ return STTD_ERROR_OPERATION_FAILED;
}
#ifdef CLIENT_DATA_DEBUG
client_show_list();
-#endif
-
+#endif
return 0;
}
-int sttd_client_delete(const int uid)
+int sttd_client_delete(int uid)
{
- GList *tmp = NULL;
+ GSList *tmp = NULL;
client_info_s* hnd = NULL;
/*Get handle*/
- tmp = sttd_client_get_item(uid);
+ tmp = __client_get_item(uid);
if (NULL == tmp) {
- SLOG(LOG_ERROR, TAG_STTD, "[Client Data ERROR] uid(%d) is NOT valid", uid);
+ SECURE_SLOG(LOG_ERROR, TAG_STTD, "[Client Data ERROR] uid(%d) is NOT valid", uid);
return STTD_ERROR_INVALID_PARAMETER;
}
/*Free client structure*/
hnd = tmp->data;
if (NULL != hnd) {
- g_free(hnd);
+ if (NULL != hnd->start_beep) free(hnd->start_beep);
+ if (NULL != hnd->stop_beep) free(hnd->stop_beep);
+ free(hnd);
}
/*Remove handle from list*/
- g_client_list = g_list_remove_link(g_client_list, tmp);
+ g_client_list = g_slist_remove_link(g_client_list, tmp);
#ifdef CLIENT_DATA_DEBUG
client_show_list();
-#endif
+#endif
return 0;
}
-int sttd_client_get_state(const int uid, app_state_e* state)
+int sttd_client_get_start_sound(int uid, char** filename)
{
- GList *tmp = NULL;
+ if (NULL == filename) {
+ SLOG(LOG_ERROR, TAG_STTD, "[Client Data ERROR] Filename is NULL");
+ return STTD_ERROR_INVALID_PARAMETER;
+ }
+
+ GSList *tmp = NULL;
client_info_s* hnd = NULL;
- tmp = sttd_client_get_item(uid);
+ tmp = __client_get_item(uid);
if (NULL == tmp) {
return STTD_ERROR_INVALID_PARAMETER;
}
hnd = tmp->data;
- *state = hnd->state;
+ if (NULL != hnd->start_beep) {
+ *filename = strdup(hnd->start_beep);
+ } else {
+ *filename = NULL;
+ }
- SLOG(LOG_DEBUG, TAG_STTD, "[Client Data] Get state : uid(%d), state(%d)", uid, *state);
+ return 0;
+}
+
+int sttd_client_set_start_sound(int uid, const char* filename)
+{
+ GSList *tmp = NULL;
+ client_info_s* hnd = NULL;
+
+ tmp = __client_get_item(uid);
+ if (NULL == tmp) {
+ SECURE_SLOG(LOG_ERROR, TAG_STTD, "[Client Data ERROR] uid(%d) is NOT valid", uid);
+ return STTD_ERROR_INVALID_PARAMETER;
+ }
+
+ hnd = tmp->data;
+ if (NULL != hnd->start_beep) {
+ free(hnd->start_beep);
+ }
+
+ if (NULL != filename) {
+ hnd->start_beep = strdup(filename);
+ SLOG(LOG_DEBUG, TAG_STTD, "[Client Data] Start sound file : %s", hnd->start_beep);
+ } else {
+ hnd->start_beep = NULL;
+ }
return 0;
}
-int sttd_client_set_state(const int uid, const app_state_e state)
+int sttd_client_get_stop_sound(int uid, char** filename)
{
- GList *tmp = NULL;
+ if (NULL == filename) {
+ SLOG(LOG_ERROR, TAG_STTD, "[Client Data ERROR] Filename is NULL");
+ return STTD_ERROR_INVALID_PARAMETER;
+ }
+
+ GSList *tmp = NULL;
client_info_s* hnd = NULL;
- tmp = sttd_client_get_item(uid);
+ tmp = __client_get_item(uid);
if (NULL == tmp) {
- SLOG(LOG_ERROR, TAG_STTD, "[Client Data ERROR] uid(%d) is NOT valid", uid);
return STTD_ERROR_INVALID_PARAMETER;
}
hnd = tmp->data;
- hnd->state = state ;
+ if (NULL != hnd->stop_beep) {
+ *filename = strdup(hnd->stop_beep);
+ } else {
+ *filename = NULL;
+ }
+
+ return 0;
+}
+
+int sttd_client_set_stop_sound(int uid, const char* filename)
+{
+ GSList *tmp = NULL;
+ client_info_s* hnd = NULL;
+
+ tmp = __client_get_item(uid);
+ if (NULL == tmp) {
+ SECURE_SLOG(LOG_ERROR, TAG_STTD, "[Client Data ERROR] uid(%d) is NOT valid", uid);
+ return STTD_ERROR_INVALID_PARAMETER;
+ }
+
+ hnd = tmp->data;
+ if (NULL != hnd->stop_beep) {
+ free(hnd->stop_beep);
+ }
+
+ if (NULL != filename) {
+ hnd->stop_beep = strdup(filename);
+ SLOG(LOG_DEBUG, TAG_STTD, "[Client Data] Stop sound file : %s", hnd->stop_beep);
+ } else {
+ hnd->stop_beep = NULL;
+ }
+
+ return 0;
+}
+
+int sttd_client_get_state(int uid, app_state_e* state)
+{
+ GSList *tmp = NULL;
+ client_info_s* hnd = NULL;
- SLOG(LOG_DEBUG, TAG_STTD, "[Client Data SUCCESS] Set state : uid(%d), state(%d)", uid, state);
+ tmp = __client_get_item(uid);
+ if (NULL == tmp) {
+ return STTD_ERROR_INVALID_PARAMETER;
+ }
+
+ hnd = tmp->data;
+ *state = hnd->state;
+
+ return 0;
+}
+
+int sttd_client_set_state(int uid, app_state_e state)
+{
+ GSList *tmp = NULL;
+ client_info_s* hnd = NULL;
+
+ tmp = __client_get_item(uid);
+ if (NULL == tmp) {
+ SECURE_SLOG(LOG_ERROR, TAG_STTD, "[Client Data ERROR] uid(%d) is NOT valid", uid);
+ return STTD_ERROR_INVALID_PARAMETER;
+ }
+
+ hnd = tmp->data;
+ hnd->state = state ;
return 0;
}
int sttd_client_get_ref_count()
{
- return g_list_length(g_client_list);
+ int count = g_slist_length(g_client_list);
+
+ return count;
}
-int sttd_client_get_pid(const int uid)
+int sttd_client_get_pid(int uid)
{
- GList *tmp = NULL;
+ GSList *tmp = NULL;
client_info_s* hnd = NULL;
- tmp = sttd_client_get_item(uid);
+ tmp = __client_get_item(uid);
if (NULL == tmp) {
- SLOG(LOG_ERROR, TAG_STTD, "[Client Data ERROR] sttd_client_get_pid : uid(%d) is not found", uid);
+ SECURE_SLOG(LOG_ERROR, TAG_STTD, "[Client Data ERROR] sttd_client_get_pid : uid(%d) is not found", uid);
return STTD_ERROR_INVALID_PARAMETER;
}
return hnd->pid;
}
+#if 0
int sttd_client_get_current_recording()
{
- GList *iter = NULL;
+ GSList *iter = NULL;
client_info_s *data = NULL;
- if (0 < g_list_length(g_client_list)) {
- iter = g_list_first(g_client_list);
+ if (0 < g_slist_length(g_client_list)) {
+ iter = g_slist_nth(g_client_list, 0);
while (NULL != iter) {
/* Get handle data from list */
data = iter->data;
- if (APP_STATE_RECORDING == data->state)
+ if (APP_STATE_RECORDING == data->state)
return data->uid;
- iter = g_list_next(iter);
+ iter = g_slist_next(iter);
}
}
int sttd_client_get_current_thinking()
{
- GList *iter = NULL;
+ GSList *iter = NULL;
client_info_s *data = NULL;
- if (0 < g_list_length(g_client_list)) {
- iter = g_list_first(g_client_list);
+ if (0 < g_slist_length(g_client_list)) {
+ iter = g_slist_nth(g_client_list, 0);
while (NULL != iter) {
/* Get handle data from list */
data = iter->data;
- if (APP_STATE_PROCESSING == data->state)
+ if (APP_STATE_PROCESSING == data->state)
return data->uid;
- iter = g_list_next(iter);
+ iter = g_slist_next(iter);
}
}
return -1;
}
+
+int sttd_cliet_set_timer(int uid, Ecore_Timer* timer)
+{
+ GSList *tmp = NULL;
+ client_info_s* hnd = NULL;
+
+ tmp = __client_get_item(uid);
+ if (NULL == tmp) {
+ SECURE_SLOG(LOG_ERROR, TAG_STTD, "[Client Data ERROR] uid(%d) is NOT valid", uid);
+ return STTD_ERROR_INVALID_PARAMETER;
+ }
+
+ hnd = tmp->data;
+ hnd->timer = timer;
+
+ return 0;
+}
+
+int sttd_cliet_get_timer(int uid, Ecore_Timer** timer)
+{
+ GSList *tmp = NULL;
+ client_info_s* hnd = NULL;
+
+ tmp = __client_get_item(uid);
+ if (NULL == tmp) {
+ SECURE_SLOG(LOG_ERROR, TAG_STTD, "[Client Data ERROR] uid(%d) is NOT valid", uid);
+ return STTD_ERROR_INVALID_PARAMETER;
+ }
+
+ hnd = tmp->data;
+ *timer = hnd->timer;
+
+ return 0;
+}
+#endif
+
+int sttd_client_get_list(int** uids, int* uid_count)
+{
+ if (NULL == uids || NULL == uid_count)
+ return -1;
+
+ int count = g_slist_length(g_client_list);
+
+ if (0 == count)
+ return -1;
+
+ int *tmp;
+ tmp = (int*)calloc(count, sizeof(int));
+ if (NULL == tmp) {
+ SLOG(LOG_ERROR, TAG_STTD, "[Client Data ERROR] Fail to allocate memory");
+ return STTD_ERROR_OUT_OF_MEMORY;
+ }
+
+ GSList *iter = NULL;
+ client_info_s *data = NULL;
+ int i = 0;
+
+ iter = g_slist_nth(g_client_list, 0);
+ for (i = 0; i < count; i++) {
+ data = iter->data;
+ tmp[i] = data->uid;
+ iter = g_slist_next(iter);
+ }
+
+ *uids = tmp;
+ *uid_count = count;
+
+ return 0;
+}
+
+int stt_client_set_current_recognition(int uid)
+{
+ if (0 != g_cur_recog_uid) {
+ return -1;
+ }
+
+ g_cur_recog_uid = uid;
+
+ return 0;
+}
+
+int stt_client_get_current_recognition()
+{
+ return g_cur_recog_uid;
+}
+
+int stt_client_unset_current_recognition()
+{
+ g_cur_recog_uid = 0;
+ return 0;
+}
+
+int stt_client_set_app_agreed(int uid)
+{
+ GSList *tmp = NULL;
+ client_info_s* hnd = NULL;
+
+ tmp = __client_get_item(uid);
+ if (NULL == tmp) {
+ SLOG(LOG_ERROR, TAG_STTD, "[Client Data ERROR] uid(%d) is NOT valid", uid);
+ return STTD_ERROR_INVALID_PARAMETER;
+ }
+
+ hnd = tmp->data;
+ hnd->app_agreed = true;
+
+ return 0;
+}
+
+bool stt_client_get_app_agreed(int uid)
+{
+ GSList *tmp = NULL;
+ client_info_s* hnd = NULL;
+
+ tmp = __client_get_item(uid);
+ if (NULL == tmp) {
+ SLOG(LOG_ERROR, TAG_STTD, "[Client Data ERROR] uid(%d) is NOT valid", uid);
+ return STTD_ERROR_INVALID_PARAMETER;
+ }
+
+ hnd = tmp->data;
+ return hnd->app_agreed;
+}
\ No newline at end of file