2 * Copyright (c) 2012, Intel Corporation
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are
8 * * Redistributions of source code must retain the above copyright notice,
9 * this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 * * Neither the name of Intel Corporation nor the names of its contributors
14 * may be used to endorse or promote products derived from this software
15 * without specific prior written permission.
17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 #ifndef __SRS_DAEMON_CLIENT_H__
31 #define __SRS_DAEMON_CLIENT_H__
33 typedef struct srs_client_s srs_client_t;
35 #include "src/daemon/context.h"
36 #include "src/daemon/resourceif.h"
37 #include "src/daemon/audiobuf.h"
38 #include "srs/daemon/voice.h"
46 SRS_CLIENT_TYPE_NONE = 0,
47 SRS_CLIENT_TYPE_DBUS, /* external D-BUS client */
48 SRS_CLIENT_TYPE_BUILTIN, /* builtin client */
57 SRS_VOICE_FOCUS_NONE = 0, /* focus released */
58 SRS_VOICE_FOCUS_SHARED, /* normal shared voice focus */
59 SRS_VOICE_FOCUS_EXCLUSIVE, /* exclusive voice focus */
67 #define SRS_MAX_TOKENS 64
70 char **tokens; /* tokens of this command */
71 int ntoken; /* number of tokens */
76 * special command tokens
79 #define SRS_TOKEN_SWITCHDICT "__switch_dict__"
80 #define SRS_TOKEN_PUSHDICT "__push_dict__"
81 #define SRS_TOKEN_POPDICT "__pop_dict__"
82 #define SRS_TOKEN_WILDCARD "*"
85 /* dictionary pseudo-commands */
86 #define SRS_DICTCMD_SWITCH "__switch_dict__"
87 #define SRS_DICTCMD_PUSH "__push_dict__"
88 #define SRS_DICTCMD_POP "__pop_dict__"
90 #define SRS_DICT_SWITCH(dict) SRS_DICTCMD_SWITCH"("dict")"
91 #define SRS_DICT_PUSH(dict) SRS_DICTCMD_PUSH"("dict")"
92 #define SRS_DICT_POP() SRS_DICTCMD_POP
99 #define SRS_TOKEN_SWITCHDICT "__switch_dict__"
100 #define SRS_TOKEN_PUSHDICT "__push_dict__"
101 #define SRS_TOKEN_POPDICT "__pop_dict__"
103 #define SRS_TOKEN_WILDCARD "*" /* match till end of utterance */
106 * dictionary operations
109 /* dictionary operations */
111 SRS_DICT_OP_UNKNOWN = 0,
123 /* recognizer interface */
124 int (*notify_focus)(srs_client_t *c, srs_voice_focus_t focus);
125 int (*notify_command)(srs_client_t *c, int idx, int ntoken,
126 char **tokens, uint32_t *start, uint32_t *end,
127 srs_audiobuf_t *audio);
128 /* voice rendering interface */
129 int (*notify_render)(srs_client_t *c, srs_voice_event_t *event);
133 struct srs_client_s {
134 mrp_list_hook_t hook; /* to list of clients */
135 srs_client_type_t type; /* client type */
136 char *name; /* client name */
137 char *appclass; /* client application class */
138 srs_command_t *commands; /* client command set */
139 int ncommand; /* number of commands */
140 char *id; /* client id */
141 srs_context_t *srs; /* context back pointer */
142 mrp_res_resource_set_t *rset; /* resource set */
143 srs_voice_focus_t requested; /* requested voice focus */
144 srs_voice_focus_t granted; /* granted voice focus */
145 srs_voice_focus_t focus; /* requested voice focus */
146 int enabled : 1; /* interested in commands */
147 int allowed : 1; /* has resource granted */
148 mrp_list_hook_t voices; /* unfinished voice requests */
149 srs_client_ops_t ops; /* client ops (notifications) */
150 void *user_data; /* opaque client data */
154 /** Create a new client. */
155 srs_client_t *client_create(srs_context_t *srs, srs_client_type_t type,
156 const char *name, const char *appclass,
157 char **commands, int ncommand,
158 const char *id, srs_client_ops_t *ops,
161 /** Destroy a client. */
162 void client_destroy(srs_client_t *c);
164 /** Look up a client by its id. */
165 srs_client_t *client_lookup_by_id(srs_context_t *srs, const char *id);
167 /** Request client focus change. */
168 int client_request_focus(srs_client_t *c, srs_voice_focus_t focus);
170 /** Deliver a command notification event to the client. */
171 void client_notify_command(srs_client_t *c, int idx, int ntoken,
172 const char **tokens, uint32_t *start, uint32_t *end,
173 srs_audiobuf_t *audio);
175 /** Request synthesizing a message. */
176 uint32_t client_render_voice(srs_client_t *c, const char *msg,
177 const char *voice, int timeout, int notify_events);
179 /** Cancel/stop a synthesizing request. */
180 void client_cancel_voice(srs_client_t *c, uint32_t id);
182 /** Create resources for all registered clients. */
183 void client_create_resources(srs_context_t *srs);
185 /** Reset the resource sets of all clients. */
186 void client_reset_resources(srs_context_t *srs);
188 /** Deliver a resource notification event to the client. */
189 void client_resource_event(srs_client_t *c, srs_resset_event_t event);
191 /** Query voice actors. */
192 int client_query_voices(srs_client_t *c, const char *language,
193 srs_voice_actor_t **actorsp);
195 /** Free voice actor query reult. */
196 void client_free_queried_voices(srs_voice_actor_t *actors);
198 #endif /* __SRS_DAEMON_CLIENT_H__ */