Release 4.0.0-preview1-00051
[platform/core/csapi/tizenfx.git] / src / Tizen.Uix.TtsEngine / Interop / Interop.TtsEngine.cs
1 /*
2 * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
3 *
4 * Licensed under the Apache License, Version 2.0 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17
18 using System;
19 using System.Runtime.InteropServices;
20 using Tizen.Uix.TtsEngine;
21 using static Tizen.Uix.TtsEngine.Engine;
22
23 /// <summary>
24 /// Partial Interop Class
25 /// </summary>
26 internal static partial class Interop
27 {
28     /// <summary>
29     /// TtsEngine Interop Class
30     /// </summary>
31     internal static class TtsEngine
32     {
33         internal static string LogTag = "Tizen.Uix.TtsEngine";
34
35         private const int ErrorTts = -0x02F10000;
36
37         public enum ErrorCode
38         {
39             None = Tizen.Internals.Errors.ErrorCode.None,                           /**< Successful */
40             OutOfMemory = Tizen.Internals.Errors.ErrorCode.OutOfMemory,             /**< Out of Memory */
41             IoError = Tizen.Internals.Errors.ErrorCode.IoError,                     /**< I/O error */
42             InvalidParameter = Tizen.Internals.Errors.ErrorCode.InvalidParameter,   /**< Invalid parameter */
43             NetworkDown = Tizen.Internals.Errors.ErrorCode.Networkdown,             /**< Network down(Out of network) */
44             PermissionDenied = Tizen.Internals.Errors.ErrorCode.PermissionDenied,   /**< Permission denied */
45             InvalidState = ErrorTts | 0x01,                                         /**< Invalid state */
46             InvalidVoice = ErrorTts | 0x02,                                         /**< Invalid voice */
47             OperationFailed = ErrorTts | 0x04,                                      /**< Operation failed  */
48             NotSupportedFeature = ErrorTts | 0x06,                                  /**< Not supported feature of current engine */
49             NotSupported = Tizen.Internals.Errors.ErrorCode.NotSupported,           /**< Device or resource busy */
50         };
51
52         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
53         internal delegate Error InitializeCb();
54
55         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
56         internal delegate Error DeinitializeCb();
57
58         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
59         internal delegate Error ForEachSupportedVoicesCb(SupportedVoice cb, IntPtr userData);
60
61         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
62         internal delegate Error IsValidVoiceCb(string language, int type, out bool isValid);
63
64         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
65         internal delegate Error SetPitchCb(int pitch);
66
67         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
68         internal delegate Error LoadVoiceCb(string langauge, int type);
69
70         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
71         internal delegate Error UnloadVoiceCb(string language, int type);
72
73         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
74         internal delegate Error CheckAppAgreedCb(string appid, out bool isAgreed);
75
76         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
77         internal delegate bool NeedAppCredentialCb();
78
79         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
80         internal delegate Error StartSynthesisCb(IntPtr language, int type, IntPtr text, int speed, IntPtr appid, IntPtr credential, IntPtr userData);
81
82         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
83         internal delegate Error CancelSynthesisCb();
84
85         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
86         internal delegate Error GetInfoCb(out IntPtr engineUuid, out IntPtr engineName, out IntPtr engineSetting, out int useNetwork);
87
88         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
89         internal delegate Error PrivateDataSetCb(string key, string data);
90
91         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
92         internal delegate Error PrivateDataRequestedCb(string key, out string data);
93
94         [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
95         internal struct RequestCallbackStruct
96         {
97             internal int version;
98             [MarshalAs(UnmanagedType.FunctionPtr)]
99             internal GetInfoCb getInfo;
100             [MarshalAs(UnmanagedType.FunctionPtr)]
101             internal InitializeCb initialize;
102             [MarshalAs(UnmanagedType.FunctionPtr)]
103             internal DeinitializeCb deinitialize;
104             [MarshalAs(UnmanagedType.FunctionPtr)]
105             internal ForEachSupportedVoicesCb supportedVoice;
106             [MarshalAs(UnmanagedType.FunctionPtr)]
107             internal IsValidVoiceCb validVoice;
108             [MarshalAs(UnmanagedType.FunctionPtr)]
109             internal SetPitchCb pitch;
110             [MarshalAs(UnmanagedType.FunctionPtr)]
111             internal LoadVoiceCb loadVoice;
112             [MarshalAs(UnmanagedType.FunctionPtr)]
113             internal UnloadVoiceCb unloadVoice;
114             [MarshalAs(UnmanagedType.FunctionPtr)]
115             internal StartSynthesisCb startSynthesis;
116             [MarshalAs(UnmanagedType.FunctionPtr)]
117             internal CancelSynthesisCb cancelSynthesis;
118             [MarshalAs(UnmanagedType.FunctionPtr)]
119             internal CheckAppAgreedCb checkAppAgreed;
120             [MarshalAs(UnmanagedType.FunctionPtr)]
121             internal NeedAppCredentialCb needAppCredential;
122         };
123
124         internal sealed class CallbackStructGCHandle : IDisposable
125         {
126             internal RequestCallbackStruct CallbackStruct;
127             internal GCHandle CallbackStructHandle;
128             public CallbackStructGCHandle()
129             {
130                 CallbackStruct = new RequestCallbackStruct();
131                 CallbackStructHandle = GCHandle.Alloc(CallbackStruct);
132             }
133
134             #region IDisposable Support
135             private bool disposedValue = false;
136
137             void Dispose(bool disposing)
138             {
139                 Tizen.Log.Info(LogTag, "In Dispose");
140                 if (!disposedValue)
141                 {
142                     if (disposing)
143                     {
144                         Tizen.Log.Info(LogTag, "In Dispose free called");
145                         CallbackStructHandle.Free();
146                     }
147
148                     disposedValue = true;
149                 }
150             }
151
152             public void Dispose()
153             {
154                 Dispose(true);
155             }
156             #endregion
157         }
158
159         [DllImport(Libraries.TtsEngine, EntryPoint = "ttse_main")]
160         internal static extern Error TTSEMain(int argc, string[] argv, IntPtr callback);
161
162         [DllImport(Libraries.TtsEngine, EntryPoint = "ttse_get_speed_range")]
163         internal static extern Error TTSEGetSpeedRange(out int min, out int normal, out int max);
164
165         [DllImport(Libraries.TtsEngine, EntryPoint = "ttse_get_pitch_range")]
166         internal static extern Error TTSEGetPitchRange(out int min, out int normal, out int max);
167
168         [DllImport(Libraries.TtsEngine, EntryPoint = "ttse_send_result")]
169         internal static extern Error TTSESendResult(ResultEvent resultEvent, IntPtr data, int dataSize, AudioType audioType, int rate, IntPtr userData);
170
171         [DllImport(Libraries.TtsEngine, EntryPoint = "ttse_send_error")]
172         internal static extern Error TTSESendError(Error error, string msg);
173
174         [DllImport(Libraries.TtsEngine, EntryPoint = "ttse_set_private_data_set_cb")]
175         internal static extern Error TTSESetPrivateDataSetCb(PrivateDataSetCb callbackFunc);
176
177         [DllImport(Libraries.TtsEngine, EntryPoint = "ttse_set_private_data_requested_cb")]
178         internal static extern Error TTSESetPrivateDataRequestedCb(PrivateDataRequestedCb callbackFunc);
179     }
180 }