#ifndef _LIBSPEECHD_H
#define _LIBSPEECHD_H
#include <stdio.h>
#include <stddef.h>
#include <pthread.h>
#ifdef __cplusplus
extern "C" {
#endif
#define SPD_WAIT_REPLY 1
#define SPD_NO_REPLY 0
typedef enum{
SPD_PUNCT_ALL = 0,
SPD_PUNCT_NONE = 1,
SPD_PUNCT_SOME = 2
}SPDPunctuation;
typedef enum{
SPD_CAP_NONE = 0,
SPD_CAP_SPELL = 1,
SPD_CAP_ICON = 2
}SPDCapitalLetters;
typedef enum{
SPD_SPELL_OFF = 0,
SPD_SPELL_ON = 1
}SPDSpelling;
typedef enum{
SPD_DATA_TEXT = 0,
SPD_DATA_SSML = 1
}SPDDataMode;
typedef enum{
SPD_MALE1 = 1,
SPD_MALE2 = 2,
SPD_MALE3 = 3,
SPD_FEMALE1 = 4,
SPD_FEMALE2 = 5,
SPD_FEMALE3 = 6,
SPD_CHILD_MALE = 7,
SPD_CHILD_FEMALE = 8
}SPDVoiceType;
typedef struct{
char *name;
char *language;
char *variant;
}SPDVoice;
typedef enum{
SPD_BEGIN = 1,
SPD_END = 2,
SPD_INDEX_MARKS = 4,
SPD_CANCEL = 8,
SPD_PAUSE = 16,
SPD_RESUME = 32
}SPDNotification;
typedef enum{
SPD_IMPORTANT = 1,
SPD_MESSAGE = 2,
SPD_TEXT = 3,
SPD_NOTIFICATION = 4,
SPD_PROGRESS = 5
}SPDPriority;
typedef enum{
SPD_EVENT_BEGIN,
SPD_EVENT_END,
SPD_EVENT_CANCEL,
SPD_EVENT_PAUSE,
SPD_EVENT_RESUME,
SPD_EVENT_INDEX_MARK
}SPDNotificationType;
typedef enum{
SPD_MODE_SINGLE = 0,
SPD_MODE_THREADED = 1
}SPDConnectionMode;
typedef enum{
SPD_METHOD_UNIX_SOCKET = 0,
SPD_METHOD_INET_SOCKET = 1,
}SPDConnectionMethod;
typedef struct{
SPDConnectionMethod method;
char *unix_socket_name;
char *inet_socket_host;
int inet_socket_port;
char *dbus_bus;
}SPDConnectionAddress;
typedef void (*SPDCallback)(size_t msg_id, size_t client_id, SPDNotificationType state);
typedef void (*SPDCallbackIM)(size_t msg_id, size_t client_id, SPDNotificationType state, char *index_mark);
typedef struct{
SPDCallback callback_begin;
SPDCallback callback_end;
SPDCallback callback_cancel;
SPDCallback callback_pause;
SPDCallback callback_resume;
SPDCallbackIM callback_im;
int socket;
FILE *stream;
SPDConnectionMode mode;
pthread_mutex_t *ssip_mutex;
pthread_t *events_thread;
pthread_mutex_t *comm_mutex;
pthread_cond_t *cond_reply_ready;
pthread_mutex_t *mutex_reply_ready;
pthread_cond_t *cond_reply_ack;
pthread_mutex_t *mutex_reply_ack;
char *reply;
}SPDConnection;
SPDConnectionAddress* spd_get_default_address(char** error);
SPDConnection* spd_open(const char* client_name, const char* connection_name, const char* user_name,
SPDConnectionMode mode);
SPDConnection* spd_open2(const char* client_name, const char* connection_name, const char* user_name,
SPDConnectionMode mode, SPDConnectionAddress *address, int autospawn,
char **error_result);
void spd_close(SPDConnection* connection);
int spd_say(SPDConnection* connection, SPDPriority priority, const char* text);
int spd_sayf(SPDConnection* connection, SPDPriority priority, const char *format, ...);
int spd_stop(SPDConnection* connection);
int spd_stop_all(SPDConnection* connection);
int spd_stop_uid(SPDConnection* connection, int target_uid);
int spd_cancel(SPDConnection* connection);
int spd_cancel_all(SPDConnection* connection);
int spd_cancel_uid(SPDConnection* connection, int target_uid);
int spd_pause(SPDConnection* connection);
int spd_pause_all(SPDConnection* connection);
int spd_pause_uid(SPDConnection* connection, int target_uid);
int spd_resume(SPDConnection* connection);
int spd_resume_all(SPDConnection* connection);
int spd_resume_uid(SPDConnection* connection, int target_uid);
int spd_key(SPDConnection* connection, SPDPriority priority, const char *key_name);
int spd_char(SPDConnection* connection, SPDPriority priority, const char *character);
int spd_wchar(SPDConnection* connection, SPDPriority priority, wchar_t wcharacter);
int spd_sound_icon(SPDConnection* connection, SPDPriority priority, const char *icon_name);
int spd_set_voice_type(SPDConnection*, SPDVoiceType type);
int spd_set_voice_type_all(SPDConnection*, SPDVoiceType type);
int spd_set_voice_type_uid(SPDConnection*, SPDVoiceType type, unsigned int uid);
int spd_set_synthesis_voice(SPDConnection*, const char *voice_name);
int spd_set_synthesis_voice_all(SPDConnection*, const char *voice_name);
int spd_set_synthesis_voice_uid(SPDConnection*, const char *voice_name, unsigned int uid);
int spd_set_data_mode(SPDConnection *connection, SPDDataMode mode);
int spd_set_notification_on(SPDConnection* connection, SPDNotification notification);
int spd_set_notification_off(SPDConnection* connection, SPDNotification notification);
int spd_set_notification(SPDConnection* connection, SPDNotification notification, const char* state);
int spd_set_voice_rate(SPDConnection* connection, signed int rate);
int spd_set_voice_rate_all(SPDConnection* connection, signed int rate);
int spd_set_voice_rate_uid(SPDConnection* connection, signed int rate, unsigned int uid);
int spd_set_voice_pitch(SPDConnection* connection, signed int pitch);
int spd_set_voice_pitch_all(SPDConnection* connection, signed int pitch);
int spd_set_voice_pitch_uid(SPDConnection* connection, signed int pitch, unsigned int uid);
int spd_set_volume(SPDConnection* connection, signed int volume);
int spd_set_volume_all(SPDConnection* connection, signed int volume);
int spd_set_volume_uid(SPDConnection* connection, signed int volume, unsigned int uid);
int spd_set_punctuation(SPDConnection* connection, SPDPunctuation type);
int spd_set_punctuation_all(SPDConnection* connection, SPDPunctuation type);
int spd_set_punctuation_uid(SPDConnection* connection, SPDPunctuation type, unsigned int uid);
int spd_set_capital_letters(SPDConnection* connection, SPDCapitalLetters type);
int spd_set_capital_letters_all(SPDConnection* connection, SPDCapitalLetters type);
int spd_set_capital_letters_uid(SPDConnection* connection, SPDCapitalLetters type, unsigned int uid);
int spd_set_spelling(SPDConnection* connection, SPDSpelling type);
int spd_set_spelling_all(SPDConnection* connection, SPDSpelling type);
int spd_set_spelling_uid(SPDConnection* connection, SPDSpelling type, unsigned int uid);
int spd_set_language(SPDConnection* connection, const char* language);
int spd_set_language_all(SPDConnection* connection, const char* language);
int spd_set_language_uid(SPDConnection* connection, const char* language, unsigned int uid);
int spd_set_output_module(SPDConnection* connection, const char* output_module);
int spd_set_output_module_all(SPDConnection* connection, const char* output_module);
int spd_set_output_module_uid(SPDConnection* connection, const char* output_module, unsigned int uid);
int spd_get_client_list(SPDConnection *connection, char **client_names, int *client_ids, int* active);
int spd_get_message_list_fd(SPDConnection *connection, int target, int *msg_ids, char **client_names);
char** spd_list_modules(SPDConnection *connection);
char** spd_list_voices(SPDConnection *connection);
SPDVoice** spd_list_synthesis_voices(SPDConnection *connection);
char** spd_execute_command_with_list_reply(SPDConnection *connection, char* command);
int spd_execute_command(SPDConnection* connection, char* command);
int spd_execute_command_with_reply(SPDConnection *connection, char* command, char **reply);
int spd_execute_command_wo_mutex(SPDConnection *connection, char* command);
char* spd_send_data(SPDConnection* connection, const char *message, int wfr);
char* spd_send_data_wo_mutex(SPDConnection *connection, const char *message, int wfr);
#ifdef __cplusplus
}
#endif
#endif