/*
* Copyright (c) 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
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an AS IS BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
using System;
using System.Runtime.InteropServices;
using Tizen.Uix.TtsEngine;
using static Tizen.Uix.TtsEngine.Engine;
///
/// Partial Interop Class
///
internal static partial class Interop
{
///
/// TtsEngine Interop Class
///
internal static class TtsEngine
{
internal static string LogTag = "Tizen.Uix.TtsEngine";
private const int ErrorTts = -0x02F10000;
public enum ErrorCode
{
None = Tizen.Internals.Errors.ErrorCode.None, /**< Successful */
OutOfMemory = Tizen.Internals.Errors.ErrorCode.OutOfMemory, /**< Out of Memory */
IoError = Tizen.Internals.Errors.ErrorCode.IoError, /**< I/O error */
InvalidParameter = Tizen.Internals.Errors.ErrorCode.InvalidParameter, /**< Invalid parameter */
NetworkDown = Tizen.Internals.Errors.ErrorCode.Networkdown, /**< Network down(Out of network) */
PermissionDenied = Tizen.Internals.Errors.ErrorCode.PermissionDenied, /**< Permission denied */
InvalidState = ErrorTts | 0x01, /**< Invalid state */
InvalidVoice = ErrorTts | 0x02, /**< Invalid voice */
OperationFailed = ErrorTts | 0x04, /**< Operation failed */
NotSupportedFeature = ErrorTts | 0x06, /**< Not supported feature of current engine */
NotSupported = Tizen.Internals.Errors.ErrorCode.NotSupported, /**< Device or resource busy */
};
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate Error InitializeCb();
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate Error DeinitializeCb();
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate Error ForEachSupportedVoicesCb(SupportedVoice cb, IntPtr userData);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate Error IsValidVoiceCb(string language, int type, out bool isValid);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate Error SetPitchCb(int pitch);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate Error LoadVoiceCb(string langauge, int type);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate Error UnloadVoiceCb(string language, int type);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate Error CheckAppAgreedCb(string appid, out bool isAgreed);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate bool NeedAppCredentialCb();
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate Error StartSynthesisCb(IntPtr language, int type, IntPtr text, int speed, IntPtr appid, IntPtr credential, IntPtr userData);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate Error CancelSynthesisCb();
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate Error GetInfoCb(out IntPtr engineUuid, out IntPtr engineName, out IntPtr engineSetting, out int useNetwork);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate Error PrivateDataSetCb(string key, string data);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate Error PrivateDataRequestedCb(string key, out string data);
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
internal struct RequestCallbackStruct
{
internal int version;
[MarshalAs(UnmanagedType.FunctionPtr)]
internal GetInfoCb getInfo;
[MarshalAs(UnmanagedType.FunctionPtr)]
internal InitializeCb initialize;
[MarshalAs(UnmanagedType.FunctionPtr)]
internal DeinitializeCb deinitialize;
[MarshalAs(UnmanagedType.FunctionPtr)]
internal ForEachSupportedVoicesCb supportedVoice;
[MarshalAs(UnmanagedType.FunctionPtr)]
internal IsValidVoiceCb validVoice;
[MarshalAs(UnmanagedType.FunctionPtr)]
internal SetPitchCb pitch;
[MarshalAs(UnmanagedType.FunctionPtr)]
internal LoadVoiceCb loadVoice;
[MarshalAs(UnmanagedType.FunctionPtr)]
internal UnloadVoiceCb unloadVoice;
[MarshalAs(UnmanagedType.FunctionPtr)]
internal StartSynthesisCb startSynthesis;
[MarshalAs(UnmanagedType.FunctionPtr)]
internal CancelSynthesisCb cancelSynthesis;
[MarshalAs(UnmanagedType.FunctionPtr)]
internal CheckAppAgreedCb checkAppAgreed;
[MarshalAs(UnmanagedType.FunctionPtr)]
internal NeedAppCredentialCb needAppCredential;
};
internal sealed class CallbackStructGCHandle : IDisposable
{
internal RequestCallbackStruct CallbackStruct;
internal GCHandle CallbackStructHandle;
public CallbackStructGCHandle()
{
CallbackStruct = new RequestCallbackStruct();
CallbackStructHandle = GCHandle.Alloc(CallbackStruct);
}
#region IDisposable Support
private bool disposedValue = false;
void Dispose(bool disposing)
{
Tizen.Log.Info(LogTag, "In Dispose");
if (!disposedValue)
{
if (disposing)
{
Tizen.Log.Info(LogTag, "In Dispose free called");
CallbackStructHandle.Free();
}
disposedValue = true;
}
}
public void Dispose()
{
Dispose(true);
}
#endregion
}
[DllImport(Libraries.TtsEngine, EntryPoint = "ttse_main")]
internal static extern Error TTSEMain(int argc, string[] argv, IntPtr callback);
[DllImport(Libraries.TtsEngine, EntryPoint = "ttse_get_speed_range")]
internal static extern Error TTSEGetSpeedRange(out int min, out int normal, out int max);
[DllImport(Libraries.TtsEngine, EntryPoint = "ttse_get_pitch_range")]
internal static extern Error TTSEGetPitchRange(out int min, out int normal, out int max);
[DllImport(Libraries.TtsEngine, EntryPoint = "ttse_send_result")]
internal static extern Error TTSESendResult(ResultEvent resultEvent, IntPtr data, int dataSize, AudioType audioType, int rate, IntPtr userData);
[DllImport(Libraries.TtsEngine, EntryPoint = "ttse_send_error")]
internal static extern Error TTSESendError(Error error, string msg);
[DllImport(Libraries.TtsEngine, EntryPoint = "ttse_set_private_data_set_cb")]
internal static extern Error TTSESetPrivateDataSetCb(PrivateDataSetCb callbackFunc);
[DllImport(Libraries.TtsEngine, EntryPoint = "ttse_set_private_data_requested_cb")]
internal static extern Error TTSESetPrivateDataRequestedCb(PrivateDataRequestedCb callbackFunc);
}
}