From: Priya Kohli Date: Wed, 17 Oct 2018 06:25:58 +0000 (+0530) Subject: [ITC][multi-assistant][ACR-1294][Added new APIs for supporting multi-assistant] X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e40a3af6a014cbaaef7e53f5b8b84f8c289d6385;p=test%2Ftct%2Fnative%2Fapi.git [ITC][multi-assistant][ACR-1294][Added new APIs for supporting multi-assistant] Change-Id: Ief740d4c13c3a66f3d7cbbf617cb80d45d274ec7 Signed-off-by: Priya Kohli --- diff --git a/packaging/TCT.spec b/packaging/TCT.spec index 61f42f2a0..6ff91b746 100755 --- a/packaging/TCT.spec +++ b/packaging/TCT.spec @@ -543,6 +543,12 @@ Group: Development/Tools %description -n native-wifi-itc Native API Integration TC for wifi +%package -n native-multi-assistant-itc +Summary: Native API Integration TC for multi-assistant +Group: Development/Tools + +%description -n native-multi-assistant-itc +Native API Integration TC for multi-assistant #************End Adding ITC****************************** %package -n core-accounts-svc-tests @@ -1578,6 +1584,12 @@ mkdir -p %{buildroot}/opt/usr/apps/native-wifi-itc/data/ cp src/itc/wifi/cert.crt %{buildroot}/opt/usr/apps/native-wifi-itc/data/cert.crt cp src/itc/wifi/testing.pem %{buildroot}/opt/usr/apps/native-wifi-itc/data/testing.pem +#native-multi-assistant-itc +cp LICENSE %{buildroot}/opt/usr/share/license/native-multi-assistant-itc +cp packaging/itc/native-multi-assistant-itc.xml %{buildroot}/opt/share/packages/ +mkdir -p %{buildroot}/opt/usr/apps/native-multi-assistant-itc/bin +#cp templates/external_wrapper.sh %{buildroot}/opt/usr/apps/native-multi-assistant-itc/bin + #*********End Adding ITC********* #core-accounts-svc-tests @@ -2461,6 +2473,10 @@ pkgcmd -un org.tizen.testapp & /opt/share/packages/native-wifi-itc.xml /opt/usr/share/license/native-wifi-itc +%files -n native-multi-assistant-itc +/opt/usr/apps/native-multi-assistant-itc/* +/opt/share/packages/native-multi-assistant-itc.xml +/opt/usr/share/license/native-multi-assistant-itc #******************End Adding ITC****************** diff --git a/packaging/itc/native-multi-assistant-itc.spec b/packaging/itc/native-multi-assistant-itc.spec new file mode 100755 index 000000000..913c6ac95 --- /dev/null +++ b/packaging/itc/native-multi-assistant-itc.spec @@ -0,0 +1,71 @@ +%define MODULE_NAME multi-assistant +%define MODULE_LIBNAME multi-assistant +Name: native-%{MODULE_NAME}-tests +Summary: Native API Integration TC (%{name}) +Version: 0.1 +Release: 0 +Group: Development/Tools +License: Apache License, Version 2.0 +Source0: %{name}-%{version}.tar.gz +BuildRequires: pkgconfig(%{MODULE_LIBNAME}) +BuildRequires: cmake +%description +Native API Integration TC (%{name}) + +%prep +%setup -q + +%build + +%define PREFIX "%{_libdir}/%{name}" + +export LDFLAGS+="-Wl,--rpath=%{PREFIX} -Wl,--as-needed" + +%if %{?ASAN_BUILD:1}0 + %if %{?DEVICE_BUILD_TYPE_MOBILE:1}0 + cmake . -DMODULE="%{MODULE_NAME}" -DBUILDTCTYPE="itc" -DDEVICE_BUILD_TYPE="mobile" -DASANBUILD="true" -DCMAKE_INSTALL_PREFIX=%{_prefix} + %endif + %if %{?DEVICE_BUILD_TYPE_WEARABLE:1}0 + cmake . -DMODULE="%{MODULE_NAME}" -DBUILDTCTYPE="itc" -DDEVICE_BUILD_TYPE="wearable" -DASANBUILD="true" -DCMAKE_INSTALL_PREFIX=%{_prefix} + %endif + %if %{?DEVICE_BUILD_TYPE_TV:1}0 + cmake . -DMODULE="%{MODULE_NAME}" -DBUILDTCTYPE="itc" -DDEVICE_BUILD_TYPE="tv" -DASANBUILD="true" -DCMAKE_INSTALL_PREFIX=%{_prefix} + %endif + %if %{?DEVICE_BUILD_TYPE_TIZENIOT:1}0 + cmake . -DMODULE="%{MODULE_NAME}" -DBUILDTCTYPE="itc" -DDEVICE_BUILD_TYPE="tizeniot" -DASANBUILD="true" -DCMAKE_INSTALL_PREFIX=%{_prefix} + %endif +%else + %if %{?DEVICE_BUILD_TYPE_MOBILE:1}0 + cmake . -DMODULE="%{MODULE_NAME}" -DBUILDTCTYPE="itc" -DDEVICE_BUILD_TYPE="mobile" -DASANBUILD="false" -DCMAKE_INSTALL_PREFIX=%{_prefix} + %endif + %if %{?DEVICE_BUILD_TYPE_WEARABLE:1}0 + cmake . -DMODULE="%{MODULE_NAME}" -DBUILDTCTYPE="itc" -DDEVICE_BUILD_TYPE="wearable" -DASANBUILD="false" -DCMAKE_INSTALL_PREFIX=%{_prefix} + %endif + %if %{?DEVICE_BUILD_TYPE_TV:1}0 + cmake . -DMODULE="%{MODULE_NAME}" -DBUILDTCTYPE="itc" -DDEVICE_BUILD_TYPE="tv" -DASANBUILD="false" -DCMAKE_INSTALL_PREFIX=%{_prefix} + %endif + %if %{?DEVICE_BUILD_TYPE_TIZENIOT:1}0 + cmake . -DMODULE="%{MODULE_NAME}" -DBUILDTCTYPE="itc" -DDEVICE_BUILD_TYPE="tizeniot" -DASANBUILD="false" -DCMAKE_INSTALL_PREFIX=%{_prefix} + %endif +%endif + +make %{?jobs:-j%jobs} + +%install +rm -rf %{buildroot} +%make_install +mkdir -p %{buildroot}/usr/share/license +cp LICENSE %{buildroot}/usr/share/license/%{name} +mkdir -p %{buildroot}/usr/share/packages/ +cp packaging/itc/native-%{MODULE_NAME}-itc.xml %{buildroot}/usr/share/packages/ +mkdir -p %{buildroot}/usr/apps/%{name}/bin +#cp templates/external_wrapper.sh %{buildroot}/usr/apps/%{name}/bin +%post + +%postun + + +%files +%{APP_PATH}%{name}/* +/usr/share/packages/native-%{MODULE_NAME}-itc.xml +/usr/share/license/%{name} diff --git a/packaging/itc/native-multi-assistant-itc.xml b/packaging/itc/native-multi-assistant-itc.xml new file mode 100755 index 000000000..dbc500ae0 --- /dev/null +++ b/packaging/itc/native-multi-assistant-itc.xml @@ -0,0 +1,17 @@ + + + + test + native API test Application + + + + + + + + + + http://tizen.org/privilege/recorder + + diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 3068673dc..addcc7dd7 100755 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -318,6 +318,8 @@ ELSE( DEFINED MODULE ) ADD_SUBDIRECTORY(itc/wifi-direct) MESSAGE(STATUS "Building: ${CMAKE_CURRENT_SOURCE_DIR}/itc/wifi") ADD_SUBDIRECTORY(itc/wifi) + MESSAGE(STATUS "Building: ${CMAKE_CURRENT_SOURCE_DIR}/itc/multi-assistant") + ADD_SUBDIRECTORY(itc/multi-assistant) MESSAGE(STATUS "Building: ${CMAKE_CURRENT_SOURCE_DIR}/ctc/audio-io") ADD_SUBDIRECTORY(ctc/audio-io) MESSAGE(STATUS "Building: ${CMAKE_CURRENT_SOURCE_DIR}/ctc/camera") diff --git a/src/itc/multi-assistant/CMakeLists.txt b/src/itc/multi-assistant/CMakeLists.txt new file mode 100755 index 000000000..ffea2cf51 --- /dev/null +++ b/src/itc/multi-assistant/CMakeLists.txt @@ -0,0 +1,35 @@ +SET(PKG_NAME "multi-assistant") + +SET(EXEC_NAME "tct-${PKG_NAME}-native") +SET(RPM_NAME "native-${PKG_NAME}-itc") + +SET(CAPI_LIB "multi-assistant") +SET(TC_SOURCES + ITs-multi-assistant-common.c + ITs-multi-assistant.c +) + +PKG_CHECK_MODULES(${CAPI_LIB} REQUIRED + ${CAPI_LIB} +) + +INCLUDE_DIRECTORIES( + ${${CAPI_LIB}_INCLUDE_DIRS} +) + +ADD_EXECUTABLE(${EXEC_NAME} ${EXEC_NAME}.c ${TC_SOURCES} ${COMMON_FILE}) +TARGET_LINK_LIBRARIES(${EXEC_NAME} + ${${CAPI_LIB}_LIBRARIES} +) + +INSTALL(PROGRAMS ${EXEC_NAME} + DESTINATION ${BIN_DIR}/${RPM_NAME}/bin +) + +IF( DEFINED ASAN ) +SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC -Wall -pie -g -fsanitize=address -fsanitize-recover=address -U_FORTIFY_SOURCE -fno-omit-frame-pointer") +SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed -Wl,--rpath=/usr/lib -Wl,-fsanitize=address") +ELSE() +SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0 -g -fPIE -Wall") +SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed -Wl,--rpath=/usr/lib -pie") +ENDIF() diff --git a/src/itc/multi-assistant/ITs-multi-assistant-common.c b/src/itc/multi-assistant/ITs-multi-assistant-common.c new file mode 100755 index 000000000..34d862a9d --- /dev/null +++ b/src/itc/multi-assistant/ITs-multi-assistant-common.c @@ -0,0 +1,71 @@ +// +// Copyright (c) 2018 Samsung Electronics Co., Ltd. +// +// 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. +// +#include +#include +#include "tct_common.h" +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "ITs-multi-assistant-common.h" + +/** @addtogroup itc-multi-assistant +* @ingroup itc +* @{ +*/ + +//Add helper function definitions here + +/** +* @function MaGetError +* @description Maps error enumerators to string values +* @parameter nRet : error code returned +* @return error string +*/ +char *MaGetError(int nRet) +{ + char *szErrorVal = NULL; + + switch ( nRet ) + { + case MA_ERROR_NONE: szErrorVal = "MA_ERROR_NONE"; break; + case MA_ERROR_OUT_OF_MEMORY: szErrorVal = "MA_ERROR_OUT_OF_MEMORY"; break; + case MA_ERROR_IO_ERROR: szErrorVal = "MA_ERROR_IO_ERROR"; break; + case MA_ERROR_INVALID_PARAMETER: szErrorVal = "MA_ERROR_INVALID_PARAMETER"; break; + case MA_ERROR_TIMED_OUT: szErrorVal = "MA_ERROR_TIMED_OUT"; break; + case MA_ERROR_RECORDER_BUSY: szErrorVal = "MA_ERROR_RECORDER_BUSY"; break; + case MA_ERROR_PERMISSION_DENIED: szErrorVal = "MA_ERROR_PERMISSION_DENIED"; break; + case MA_ERROR_NOT_SUPPORTED: szErrorVal = "MA_ERROR_NOT_SUPPORTED"; break; + case MA_ERROR_INVALID_STATE: szErrorVal = "MA_ERROR_INVALID_STATE"; break; + case MA_ERROR_INVALID_LANGUAGE: szErrorVal = "MA_ERROR_INVALID_LANGUAGE"; break; + case MA_ERROR_ENGINE_NOT_FOUND: szErrorVal = "MA_ERROR_ENGINE_NOT_FOUND"; break; + case MA_ERROR_OPERATION_FAILED: szErrorVal = "MA_ERROR_OPERATION_FAILED"; break; + case MA_ERROR_SERVICE_RESET: szErrorVal = "MA_ERROR_SERVICE_RESET"; break; + case MA_ERROR_NOT_SUPPORTED_FEATURE: szErrorVal = "MA_ERROR_NOT_SUPPORTED_FEATURE"; break; + default: szErrorVal = "Unknown Error"; break; + } + return szErrorVal; +} + +/** @} */ diff --git a/src/itc/multi-assistant/ITs-multi-assistant-common.h b/src/itc/multi-assistant/ITs-multi-assistant-common.h new file mode 100755 index 000000000..d05146b28 --- /dev/null +++ b/src/itc/multi-assistant/ITs-multi-assistant-common.h @@ -0,0 +1,95 @@ +// +// Copyright (c) 2014 Samsung Electronics Co., Ltd. +// +// 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. +// + +#ifndef _MULTI_ASSISTANT_COMMON_H_ +#define _MULTI_ASSISTANT_H_ + +#include +#include +#include "tct_common.h" +#include +#include +#include + +/** @addtogroup itc-dlog +* @ingroup itc +* @{ +*/ + +#define API_NAMESPACE "MULTI_ASSISTANT_ITC" +#define FEATURE_MULTI_ASSISTANT "http://tizen.org/feature/multi_assistant" +#define FEATURE_MICROPHONE "http://tizen.org/feature/microphone" +#define TIME_LIMIT 20 + +static bool g_CallBackHit = false; +static bool g_bMultiAssistant = false; +static bool g_bMicrophone = false; +static bool g_bIsFeatureMismatched = false; +static bool g_bFeatureNotSupported = false; +static bool g_bMAInit = false; +static ma_state_e g_nCurrentState = MA_STATE_NONE; + +void MaLanguageChangedCb(const char* previous, const char* current, void* user_data); +void MaAudioStreamingCb(ma_audio_streaming_event_e event, char* buffer, int len, void* user_data); +void MaStateChangedCb(ma_state_e previous, ma_state_e current, void* user_data); +void MaErrorCb(ma_error_e reason, void* user_data); +char *MaGetError(int error); + +#define START_TEST {\ + if(g_bFeatureNotSupported)\ + {\ + FPRINTF("[Line:%d][%s] Feature Multi-Assistant not supported\\n", __LINE__, API_NAMESPACE);\ + return 0;\ + }\ +\ + if( g_bIsFeatureMismatched )\ + {\ + FPRINTF("[Line:%d][%s] Feature Mismatch Error\\n", __LINE__, API_NAMESPACE);\ + return 1;\ + }\ +\ + if ( !g_bMAInit )\ + {\ + FPRINTF("[Line : %d] [API_NAMESPACE] Precondition of multi-assistant failed\\n", __LINE__);\ + return 1;\ + }\ +} + +#define CHECK_HANDLE_CLEANUP(Handle, API, FreeResource) {\ + if ( Handle == NULL )\ + {\ + FPRINTF("[Line : %d][%s] %s failed, error returned = Handle returned is NULL\\n", __LINE__, API_NAMESPACE, API);\ + FreeResource;\ + return 1;\ + }\ +} + +#define WAIT_FOR_CALLBACK(state) {\ + time_t time1 = time(NULL);\ + while(state != g_nCurrentState)\ + {\ + time_t time2 = time(NULL);\ + int diff = (int)difftime(time2, time1);\ + if ( diff > TIME_LIMIT )\ + {\ + break;\ + }\ + ecore_main_loop_iterate();\ + }\ +}\ + +/** @} */ +#endif //_ITS_MULTI_ASSISTANT_COMMON_H_ diff --git a/src/itc/multi-assistant/ITs-multi-assistant.c b/src/itc/multi-assistant/ITs-multi-assistant.c new file mode 100755 index 000000000..b86246230 --- /dev/null +++ b/src/itc/multi-assistant/ITs-multi-assistant.c @@ -0,0 +1,550 @@ +// +// Copyright (c) 2014 Samsung Electronics Co., Ltd. +// +// 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. +// +#include "assert.h" +#include +#include +#include +#include + +#include "ITs-multi-assistant-common.h" + +/** @addtogroup itc-multi-assistant +* @ingroup itc +* @{ +*/ + +//& set: multi-assistant + + +/****************************************************Callback Start****************************************************/ + +/** +* @function MaLanguageChangedCb +* @description Callback Function +* @parameters const char* previous, const char* current, void* user_data +* @return NA +*/ +void MaLanguageChangedCb(const char* previous, const char* current, void* user_data) +{ + FPRINTF("[Line : %d][%s] %s Callback Invoked\\n", __LINE__, API_NAMESPACE, "MaLanguageChangedCb"); + g_CallBackHit = true; + return; +} + +/** +* @function MaAudioStreamingCb +* @description Callback Function +* @parameters ma_audio_streaming_event_e event, char* buffer, int len, void* user_data +* @return NA +*/ +void MaAudioStreamingCb(ma_audio_streaming_event_e event, char* buffer, int len, void* user_data) +{ + FPRINTF("[Line : %d][%s] %s Callback Invoked\\n", __LINE__, API_NAMESPACE, "MaAudioStreamingCb"); + g_CallBackHit = true; + return; +} + +/** +* @function MaStateChangedCb +* @description Callback Function +* @parameters ma_state_e previous, ma_state_e current, void* user_data +* @return NA +*/ +void MaStateChangedCb(ma_state_e previous, ma_state_e current, void* user_data) +{ + FPRINTF("[Line : %d][%s] %s Callback Invoked\\n", __LINE__, API_NAMESPACE, "MaStateChangedCb"); + g_CallBackHit = true; + g_nCurrentState = current; + return; +} + +/** +* @function MaErrorCb +* @description Callback Function +* @parameters ma_error_e reason, void* user_data +* @return NA +*/ +void MaErrorCb(ma_error_e reason, void* user_data) +{ + FPRINTF("[Line : %d][%s] %s Callback Invoked\\n", __LINE__, API_NAMESPACE, "MaErrorCb"); + g_CallBackHit = true; + return; +} + +/*****************************************************Callback End*****************************************************/ + +/** +* @testcase ITs_ma_startup +* @author SRID(priya.kohli) +* @reviewer SRID(awadhesh1.s) +* @type auto +* @since_tizen 5.0 +* @description NA +* @scenario Called before each test, creates connection to push service +* @apicovered NA +* @passcase NA +* @failcase NA +* @precondition NA +* @postcondition NA +*/ +void ITs_ma_startup(void) +{ + int nRet = -1; + g_bMAInit = true; + g_bFeatureNotSupported = false; + g_bIsFeatureMismatched = false; + struct stat stBuff; + if ( stat(ERR_LOG, &stBuff) == 0 ) + { + remove(ERR_LOG); + } + +#if DEBUG + FPRINTF("[Line : %d][%s] TEST SUIT start-up: ITs_Multi_Assistant_p\\n", __LINE__, API_NAMESPACE); +#endif + + g_bMultiAssistant = TCTCheckSystemInfoFeatureSupported(FEATURE_MULTI_ASSISTANT, API_NAMESPACE); + g_bMicrophone = TCTCheckSystemInfoFeatureSupported(FEATURE_MICROPHONE, API_NAMESPACE); + + nRet = ma_initialize(); + if(!g_bMultiAssistant || !g_bMicrophone) + { + if(nRet != MA_ERROR_NOT_SUPPORTED) + { + FPRINTF("[Line : %d][%s] Feature mismatch.\\n", __LINE__, API_NAMESPACE); + g_bIsFeatureMismatched = true; + return; + } + else + { + g_bFeatureNotSupported = true; + return; + } + } + if (nRet != MA_ERROR_NONE) + g_bMAInit = false; + + return; +} + +/** +* @testcase ITs_ma_cleanup +* @author SRID(priya.kohli) +* @reviewer SRID(awadhesh1.s) +* @type auto +* @since_tizen 5.0 +* @description NA +* @scenario Called after each test, Closes the connection and releases all its resources +* @apicovered NA +* @passcase NA +* @failcase NA +* @precondition NA +* @postcondition NA +*/ +void ITs_ma_cleanup(void) +{ +#if DEBUG + FPRINTF("[Line : %d][%s] TEST SUIT clean-up: ITs_Multi_Assistant_p\\n", __LINE__, API_NAMESPACE); +#endif + + int nRet = -1; + if(g_bMAInit) + { + nRet = ma_deinitialize(); + PRINT_RESULT_NORETURN(nRet, MA_ERROR_NONE, "ma_deinitialize", MaGetError(nRet)); + } +} + +/** +* @testcase ITc_ma_initialize_deinitialize_p +* @since_tizen 5.0 +* @author SRID(priya.kohli) +* @reviewer SRID(awadhesh1.s) +* @type auto +* @description Initializes and deinitializes multi-assistant client. +* @scenario Initializes and deinitializes multi-assistant client. +* @apicovered ma_initialize, ma_deinitialize +* @passcase ma_initialize, ma_deinitialize returns 0 +* @failcase ma_initialize, ma_deinitialize returns 1 +* @precondition N/A +* @postcondition If this function is called, the state will be #MA_STATE_INITIALIZED. +* */ +int ITc_ma_initialize_deinitialize_p(void) +{ + START_TEST; + int nRet = -1; + + nRet = ma_deinitialize(); + PRINT_RESULT(nRet, MA_ERROR_NONE, "ma_deinitialize", MaGetError(nRet)); + + nRet = ma_initialize(); + PRINT_RESULT(nRet, MA_ERROR_NONE, "ma_initialize", MaGetError(nRet)); + + return 0; +} + +/** +* @testcase ITc_ma_get_state_p +* @since_tizen 5.0 +* @author SRID(priya.kohli) +* @reviewer SRID(awadhesh1.s) +* @type auto +* @description Gets the current state of the multi-assistant client. +* @scenario Gets the current state of the multi-assistant client. +* @apicovered ma_get_state +* @passcase ma_get_state returns 0 +* @failcase ma_get_state returns 1 +* @precondition N/A +* @postcondition N/A +* */ +int ITc_ma_get_state_p(void) +{ + START_TEST; + int nRet = -1; + ma_state_e eState = -1; + + nRet = ma_get_state(&eState); + PRINT_RESULT(nRet, MA_ERROR_NONE, "ma_get_state", MaGetError(nRet)); + if( eState < MA_STATE_NONE || eState > MA_STATE_READY ) + { + FPRINTF("[Line : %d][%s] %s failed. eState = %d\\n", __LINE__, API_NAMESPACE, "ma_get_state", eState); + return 1; + } + + return 0; +} + +/** +* @testcase ITc_ma_get_current_language_p +* @since_tizen 5.0 +* @author SRID(priya.kohli) +* @reviewer SRID(awadhesh1.s) +* @type auto +* @description Gets the current language of multi-assistant client. +* @scenario Gets the current language of multi-assistant client. +* @apicovered ma_get_current_language +* @passcase ma_get_current_language returns 0 +* @failcase ma_get_current_language returns 1 +* @precondition N/A +* @postcondition N/A +* */ +int ITc_ma_get_current_language_p(void) +{ + START_TEST; + char *pszGetCurrentLanguage = NULL; + int nRet = -1; + + nRet = ma_get_current_language(&pszGetCurrentLanguage); + PRINT_RESULT(nRet, MA_ERROR_NONE, "ma_get_current_language", MaGetError(nRet)); + CHECK_HANDLE(pszGetCurrentLanguage, "ma_get_current_language"); + + FREE_MEMORY(pszGetCurrentLanguage); + + return 0; +} + +/** +* @testcase ITc_ma_get_recording_audio_format_p +* @since_tizen 5.0 +* @author SRID(priya.kohli) +* @reviewer SRID(awadhesh1.s) +* @type auto +* @description Gets the recording audio format. +* @scenario Gets the recording audio format. +* @apicovered ma_get_recording_audio_format +* @passcase ma_get_recording_audio_format returns 0 +* @failcase ma_get_recording_audio_format returns 1 +* @precondition N/A +* @postcondition N/A +* */ +int ITc_ma_get_recording_audio_format_p(void) +{ + START_TEST; + + int nRate = -1; + int nRet = -1; + ma_audio_channel_e eChannel = -1; + ma_audio_type_e eAudioType = -1; + void* user_data = NULL; + g_CallBackHit = false; + + nRet = ma_set_state_changed_cb(MaStateChangedCb, user_data); + PRINT_RESULT(nRet, MA_ERROR_NONE, "ma_set_state_changed_cb", MaGetError(nRet)); + + nRet = ma_prepare(); + PRINT_RESULT_CLEANUP(nRet, MA_ERROR_NONE, "ma_prepare", MaGetError(nRet), ma_unset_state_changed_cb()); + WAIT_FOR_CALLBACK(MA_STATE_READY); + PRINT_RESULT_CLEANUP(g_CallBackHit, true, "MaStateChangedCb", "Callback not invoked", ma_unprepare(); ma_unset_state_changed_cb()); + + nRet = ma_get_recording_audio_format(&nRate, &eChannel, &eAudioType); + PRINT_RESULT_CLEANUP(nRet, MA_ERROR_NONE, "ma_get_recording_audio_format", MaGetError(nRet), ma_unprepare(); ma_unset_state_changed_cb()); + if( nRate < 0 ) + { + FPRINTF("[Line : %d][%s] %s failed. nRate = %d\\n", __LINE__, API_NAMESPACE, "ma_get_recording_audio_format", nRate); + ma_unprepare(); + ma_unset_state_changed_cb(); + return 1; + } + if( eChannel < MA_AUDIO_CHANNEL_MONO || eChannel > MA_AUDIO_CHANNEL_STEREO ) + { + FPRINTF("[Line : %d][%s] %s failed. eChannel = %d\\n", __LINE__, API_NAMESPACE, "ma_get_recording_audio_format", eChannel); + ma_unprepare(); + ma_unset_state_changed_cb(); + return 1; + } + if( eAudioType < MA_AUDIO_TYPE_PCM_S16_LE || eAudioType > MA_AUDIO_TYPE_PCM_U8 ) + { + FPRINTF("[Line : %d][%s] %s failed. eAudioType = %d\\n", __LINE__, API_NAMESPACE, "ma_get_recording_audio_format", eAudioType); + ma_unprepare(); + ma_unset_state_changed_cb(); + return 1; + } + + nRet = ma_unprepare(); + PRINT_RESULT_NORETURN(nRet, MA_ERROR_NONE, "ma_unprepare", MaGetError(nRet)); + + nRet = ma_unset_state_changed_cb(); + PRINT_RESULT_NORETURN(nRet, MA_ERROR_NONE, "ma_unset_state_changed_cb", MaGetError(nRet)); + + return 0; +} + +/** +* @testcase ITc_ma_prepare_unprepare_set_unset_state_changed_cb_p +* @since_tizen 5.0 +* @author SRID(priya.kohli) +* @reviewer SRID(awadhesh1.s) +* @type auto +* @description Prepares/unprepares multi-assistant client and sets and unsets a state changed callback. +* @scenario Prepares/unprepares multi-assistant client and sets and unsets a state changed callback. +* @apicovered ma_set_state_changed_cb, ma_unset_state_changed_cb, ma_prepare, ma_unprepare +* @passcase ma_set_state_changed_cb, ma_unset_state_changed_cb returns, ma_prepare, ma_unprepare 0 +* @failcase either of ma_set_state_changed_cb, ma_unset_state_changed_cb, ma_prepare, ma_unprepare returns 1 +* @precondition N/A +* @postcondition N/A +* */ +int ITc_ma_prepare_unprepare_set_unset_state_changed_cb_p(void) +{ + START_TEST; + + int nRet = -1; + void* user_data = NULL; + g_CallBackHit = false; + + nRet = ma_set_state_changed_cb(MaStateChangedCb, user_data); + PRINT_RESULT(nRet, MA_ERROR_NONE, "ma_set_state_changed_cb", MaGetError(nRet)); + + nRet = ma_prepare(); + PRINT_RESULT_CLEANUP(nRet, MA_ERROR_NONE, "ma_prepare", MaGetError(nRet), ma_unset_state_changed_cb()); + WAIT_FOR_CALLBACK(MA_STATE_READY); + PRINT_RESULT_CLEANUP(g_CallBackHit, true, "MaStateChangedCb", "Callback not invoked", ma_unprepare();ma_unset_state_changed_cb()); + + nRet = ma_unprepare(); + PRINT_RESULT_CLEANUP(nRet, MA_ERROR_NONE, "ma_unprepare", MaGetError(nRet), ma_unset_state_changed_cb()); + + nRet = ma_unset_state_changed_cb(); + PRINT_RESULT(nRet, MA_ERROR_NONE, "ma_unset_state_changed_cb", MaGetError(nRet)); + + return 0; +} + +/** +* @testcase ITc_ma_set_unset_error_cb_p +* @since_tizen 5.0 +* @author SRID(priya.kohli) +* @reviewer SRID(awadhesh1.s) +* @type auto +* @description Sets and unsets an error callback. +* @scenario Sets and unsets an error callback. +* @apicovered ma_set_error_cb, ma_unset_error_cb +* @passcase ma_set_error_cb, ma_unset_error_cb returns 0 +* @failcase ma_set_error_cb, ma_unset_error_cb returns 1 +* @precondition The state should be #MA_STATE_INITIALIZED. +* @postcondition N/A +* */ +int ITc_ma_set_unset_error_cb_p(void) +{ + START_TEST; + + int nRet = -1; + void* user_data = NULL; + + nRet = ma_set_error_cb(MaErrorCb, user_data); + PRINT_RESULT(nRet, MA_ERROR_NONE, "ma_set_error_cb", MaGetError(nRet)); + + nRet = ma_unset_error_cb(); + PRINT_RESULT(nRet, MA_ERROR_NONE, "ma_unset_error_cb", MaGetError(nRet)); + + return 0; +} + +/** +* @testcase ITc_ma_set_unset_language_changed_cb_p +* @since_tizen 5.0 +* @author SRID(priya.kohli) +* @reviewer SRID(awadhesh1.s) +* @type auto +* @description Sets and unsets a language changed callback. +* @scenario Sets and unsets a language changed callback. +* @apicovered ma_set_language_changed_cb, ma_unset_language_changed_cb +* @passcase ma_set_language_changed_cb, ma_unset_language_changed_cb returns 0 +* @failcase ma_set_language_changed_cb, ma_unset_language_changed_cb returns 1 +* @precondition The state should be #MA_STATE_INITIALIZED. +* @postcondition N/A +* */ +int ITc_ma_set_unset_language_changed_cb_p(void) +{ + START_TEST; + + int nRet = -1; + void* user_data = NULL; + + nRet = ma_set_language_changed_cb(MaLanguageChangedCb, user_data); + PRINT_RESULT(nRet, MA_ERROR_NONE, "ma_set_language_changed_cb", MaGetError(nRet)); + + nRet = ma_unset_language_changed_cb(); + PRINT_RESULT(nRet, MA_ERROR_NONE, "ma_unset_language_changed_cb", MaGetError(nRet)); + + return 0; +} + +/** +* @testcase ITc_ma_set_unset_audio_streaming_cb_p +* @since_tizen 5.0 +* @author SRID(priya.kohli) +* @reviewer SRID(awadhesh1.s) +* @type auto +* @description Sets and unsets an audio streaming callback. +* @scenario Sets and unsets an audio streaming callback. +* @apicovered ma_set_audio_streaming_cb, ma_unset_audio_streaming_cb +* @passcase ma_set_audio_streaming_cb, ma_unset_audio_streaming_cb returns 0 +* @failcase ma_set_audio_streaming_cb, ma_unset_audio_streaming_cb returns 1 +* @precondition The state should be #MA_STATE_INITIALIZED. +* @postcondition N/A +* */ +int ITc_ma_set_unset_audio_streaming_cb_p(void) +{ + START_TEST; + + int nRet = -1; + void* user_data = NULL; + + nRet = ma_set_audio_streaming_cb(MaAudioStreamingCb, user_data); + PRINT_RESULT(nRet, MA_ERROR_NONE, "ma_set_audio_streaming_cb", MaGetError(nRet)); + + nRet = ma_unset_audio_streaming_cb(); + PRINT_RESULT(nRet, MA_ERROR_NONE, "ma_unset_audio_streaming_cb", MaGetError(nRet)); + + return 0; +} + +/** +* @testcase ITc_ma_send_asr_result_p +* @since_tizen 5.0 +* @author SRID(priya.kohli) +* @reviewer SRID(awadhesh1.s) +* @type auto +* @description Sends ASR(auto speech recognition) results to the multi-assistant service. +* @scenario Sends ASR(auto speech recognition) results to the multi-assistant service. +* @apicovered ma_send_asr_result +* @passcase ma_send_asr_result returns 0 +* @failcase ma_send_asr_result returns 1 +* @precondition N/A +* @postcondition N/A +* */ +int ITc_ma_send_asr_result_p(void) +{ + START_TEST; + + char *pszAsrResult = "Hello"; + int nRet = -1; + void* user_data = NULL; + g_CallBackHit = false; + + ma_asr_result_event_e eEvent[] = { + MA_ASR_RESULT_EVENT_PARTIAL_RESULT, + MA_ASR_RESULT_EVENT_FINAL_RESULT, + MA_ASR_RESULT_EVENT_ERROR, + }; + + nRet = ma_set_state_changed_cb(MaStateChangedCb, user_data); + PRINT_RESULT(nRet, MA_ERROR_NONE, "ma_set_state_changed_cb", MaGetError(nRet)); + + nRet = ma_prepare(); + PRINT_RESULT_CLEANUP(nRet, MA_ERROR_NONE, "ma_prepare", MaGetError(nRet), ma_unset_state_changed_cb()); + WAIT_FOR_CALLBACK(MA_STATE_READY); + PRINT_RESULT_CLEANUP(g_CallBackHit, true, "MaStateChangedCb", "Callback not invoked", ma_unprepare(); ma_unset_state_changed_cb()); + + int nEventSize = sizeof(eEvent)/sizeof(eEvent[0]); + for(int nEvent = 0; nEvent +#include +#include "tct_common.h" +#include + +#ifdef MOBILE +#include "tct-multi-assistant-native_mobile.h" +#endif + +#ifdef WEARABLE +#include "tct-multi-assistant-native_wearable.h" +#endif + +#ifdef TV +#include "tct-multi-assistant-native_tv.h" +#endif + +#ifdef TIZENIOT +#include "tct-multi-assistant-native_tizeniot.h" +#endif //TIZENIOT + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static bool app_create(void *data) +{ + return true; +} + +static void app_control(app_control_h app_control, void *data) +{ + char* pszGetTCName = NULL; + int i=0, result=0, nRet=0; + nRet = app_control_get_extra_data(app_control, "testcase_name", &pszGetTCName); + if(nRet != APP_CONTROL_ERROR_NONE) + { + dlog_print(DLOG_ERROR, "NativeTCT", "[%s:%d] app_control_get_extra_data returns error = %d", __FUNCTION__, __LINE__, nRet); + PRINT_UTC_LOG("\\n[%s][Line : %d]Unable to fetch test case name: app_control_get_extra_data API call fails\\n", __FILE__, __LINE__); + PRINT_TC_RESULT("%d",1); + FREE_MEMORY_TC(pszGetTCName); + return; + } + + dlog_print(DLOG_INFO, "NativeTCT", "[%s:%d] Executing TC Name = %s", __FUNCTION__, __LINE__, pszGetTCName); + for ( i = 0; tc_array[i].name; i++ ) + { + if ( 0 == strncmp(pszGetTCName, tc_array[i].name, strlen(pszGetTCName)) ) + { + dlog_print(DLOG_INFO, "NativeTCT", "%s : Startup begin", pszGetTCName); + if ( tc_array[i].startup ) + { + tc_array[i].startup(); + } + dlog_print(DLOG_INFO, "NativeTCT", "%s : Startup end", pszGetTCName); + + dlog_print(DLOG_INFO, "NativeTCT", "%s : Body begin", pszGetTCName); + result = tc_array[i].function(); + dlog_print(DLOG_INFO, "NativeTCT", "%s returns value = %d", pszGetTCName, result); + dlog_print(DLOG_INFO, "NativeTCT", "%s : Body end", pszGetTCName); + + dlog_print(DLOG_INFO, "NativeTCT", "%s : Cleanup begin", pszGetTCName); + if ( tc_array[i].cleanup ) + { + tc_array[i].cleanup(); + } + dlog_print(DLOG_INFO, "NativeTCT", "%s : Cleanup end", pszGetTCName); + PRINT_TC_RESULT("%d",result); + FREE_MEMORY_TC(pszGetTCName); + return; + } + } + + dlog_print(DLOG_ERROR, "NativeTCT", "[%s:%d] Unable to execute %s : Unknown Test Case Name", __FUNCTION__, __LINE__, pszGetTCName); + PRINT_UTC_LOG("\\n[%s][Line : %d]Unable to execute %s : Unknown Test Case Name\\n", __FILE__, __LINE__, pszGetTCName); + PRINT_TC_RESULT("%d",1); + FREE_MEMORY_TC(pszGetTCName); + return; +} + +static void app_terminate(void *data) +{ + dlog_print(DLOG_INFO, "NativeTCT", "[%s:%d] Application Package is now Terminating", __FUNCTION__, __LINE__); +} + +int main(int argc, char *argv[]) +{ + int ret = 0; + + ui_app_lifecycle_callback_s event_callback = {0,}; + event_callback.create = app_create; + event_callback.terminate = app_terminate; + event_callback.app_control = app_control; + + //setting gcda file location for coverage + setenv("GCOV_PREFIX","/tmp",1); + dlog_print(DLOG_INFO, "NativeTCT", "[%s:%d] Coverage *.gcda File location set to /tmp/home/abuild/rpmbuild/BUILD/ ", __FUNCTION__, __LINE__); + + dlog_print(DLOG_INFO, "NativeTCT", "[%s:%d] Application Main Function is Invoked", __FUNCTION__, __LINE__); + ret = ui_app_main(argc, argv, &event_callback, NULL); + if (ret != APP_ERROR_NONE) + { + dlog_print(DLOG_ERROR, "NativeTCT", "Application ui_app_main call gets failed. err = %d", ret); + PRINT_UTC_LOG("\\n[%s][Line : %d]Application ui_app_main call gets failed. err = %d\\n", __FILE__, __LINE__, ret); + PRINT_TC_RESULT("%d",1); + return ret; + } + + dlog_print(DLOG_INFO, "NativeTCT", "[%s:%d] Application Package is Terminated", __FUNCTION__, __LINE__); + return ret; +} diff --git a/src/itc/multi-assistant/tct-multi-assistant-native_mobile.h b/src/itc/multi-assistant/tct-multi-assistant-native_mobile.h new file mode 100644 index 000000000..b63abf9aa --- /dev/null +++ b/src/itc/multi-assistant/tct-multi-assistant-native_mobile.h @@ -0,0 +1,50 @@ +// +// Copyright (c) 2014 Samsung Electronics Co., Ltd. +// +// 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. +// +#ifndef __TCT_MULTI-ASSISTANT-NATIVE_H__ +#define __TCT_MULTI-ASSISTANT-NATIVE_H__ + +#include "testcase.h" +#include "tct_common.h" + +extern void ITs_ma_startup(void); +extern void ITs_ma_cleanup(void); + +extern int ITc_ma_initialize_deinitialize_p(void); +extern int ITc_ma_get_state_p(void); +extern int ITc_ma_get_current_language_p(void); +extern int ITc_ma_get_recording_audio_format_p(void); +extern int ITc_ma_prepare_unprepare_set_unset_state_changed_cb_p(void); +extern int ITc_ma_set_unset_error_cb_p(void); +extern int ITc_ma_set_unset_language_changed_cb_p(void); +extern int ITc_ma_set_unset_audio_streaming_cb_p(void); +extern int ITc_ma_send_asr_result_p(void); +extern int ITc_ma_send_result_p(void); + +testcase tc_array[] = { + {"ITc_ma_initialize_deinitialize_p",ITc_ma_initialize_deinitialize_p,ITs_ma_startup,ITs_ma_cleanup}, + {"ITc_ma_get_state_p",ITc_ma_get_state_p,ITs_ma_startup,ITs_ma_cleanup}, + {"ITc_ma_get_current_language_p",ITc_ma_get_current_language_p,ITs_ma_startup,ITs_ma_cleanup}, + {"ITc_ma_get_recording_audio_format_p",ITc_ma_get_recording_audio_format_p,ITs_ma_startup,ITs_ma_cleanup}, + {"ITc_ma_prepare_unprepare_set_unset_state_changed_cb_p",ITc_ma_prepare_unprepare_set_unset_state_changed_cb_p,ITs_ma_startup,ITs_ma_cleanup}, + {"ITc_ma_set_unset_error_cb_p",ITc_ma_set_unset_error_cb_p,ITs_ma_startup,ITs_ma_cleanup}, + {"ITc_ma_set_unset_language_changed_cb_p",ITc_ma_set_unset_language_changed_cb_p,ITs_ma_startup,ITs_ma_cleanup}, + {"ITc_ma_set_unset_audio_streaming_cb_p",ITc_ma_set_unset_audio_streaming_cb_p,ITs_ma_startup,ITs_ma_cleanup}, + {"ITc_ma_send_asr_result_p",ITc_ma_send_asr_result_p,ITs_ma_startup,ITs_ma_cleanup}, + {"ITc_ma_send_result_p",ITc_ma_send_result_p,ITs_ma_startup,ITs_ma_cleanup}, + {NULL, NULL} +}; + +#endif // __TCT_MULTI-ASSISTANT-NATIVE_H__ diff --git a/src/itc/multi-assistant/tct-multi-assistant-native_tizeniot.h b/src/itc/multi-assistant/tct-multi-assistant-native_tizeniot.h new file mode 100644 index 000000000..b63abf9aa --- /dev/null +++ b/src/itc/multi-assistant/tct-multi-assistant-native_tizeniot.h @@ -0,0 +1,50 @@ +// +// Copyright (c) 2014 Samsung Electronics Co., Ltd. +// +// 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. +// +#ifndef __TCT_MULTI-ASSISTANT-NATIVE_H__ +#define __TCT_MULTI-ASSISTANT-NATIVE_H__ + +#include "testcase.h" +#include "tct_common.h" + +extern void ITs_ma_startup(void); +extern void ITs_ma_cleanup(void); + +extern int ITc_ma_initialize_deinitialize_p(void); +extern int ITc_ma_get_state_p(void); +extern int ITc_ma_get_current_language_p(void); +extern int ITc_ma_get_recording_audio_format_p(void); +extern int ITc_ma_prepare_unprepare_set_unset_state_changed_cb_p(void); +extern int ITc_ma_set_unset_error_cb_p(void); +extern int ITc_ma_set_unset_language_changed_cb_p(void); +extern int ITc_ma_set_unset_audio_streaming_cb_p(void); +extern int ITc_ma_send_asr_result_p(void); +extern int ITc_ma_send_result_p(void); + +testcase tc_array[] = { + {"ITc_ma_initialize_deinitialize_p",ITc_ma_initialize_deinitialize_p,ITs_ma_startup,ITs_ma_cleanup}, + {"ITc_ma_get_state_p",ITc_ma_get_state_p,ITs_ma_startup,ITs_ma_cleanup}, + {"ITc_ma_get_current_language_p",ITc_ma_get_current_language_p,ITs_ma_startup,ITs_ma_cleanup}, + {"ITc_ma_get_recording_audio_format_p",ITc_ma_get_recording_audio_format_p,ITs_ma_startup,ITs_ma_cleanup}, + {"ITc_ma_prepare_unprepare_set_unset_state_changed_cb_p",ITc_ma_prepare_unprepare_set_unset_state_changed_cb_p,ITs_ma_startup,ITs_ma_cleanup}, + {"ITc_ma_set_unset_error_cb_p",ITc_ma_set_unset_error_cb_p,ITs_ma_startup,ITs_ma_cleanup}, + {"ITc_ma_set_unset_language_changed_cb_p",ITc_ma_set_unset_language_changed_cb_p,ITs_ma_startup,ITs_ma_cleanup}, + {"ITc_ma_set_unset_audio_streaming_cb_p",ITc_ma_set_unset_audio_streaming_cb_p,ITs_ma_startup,ITs_ma_cleanup}, + {"ITc_ma_send_asr_result_p",ITc_ma_send_asr_result_p,ITs_ma_startup,ITs_ma_cleanup}, + {"ITc_ma_send_result_p",ITc_ma_send_result_p,ITs_ma_startup,ITs_ma_cleanup}, + {NULL, NULL} +}; + +#endif // __TCT_MULTI-ASSISTANT-NATIVE_H__ diff --git a/src/itc/multi-assistant/tct-multi-assistant-native_wearable.h b/src/itc/multi-assistant/tct-multi-assistant-native_wearable.h new file mode 100644 index 000000000..b63abf9aa --- /dev/null +++ b/src/itc/multi-assistant/tct-multi-assistant-native_wearable.h @@ -0,0 +1,50 @@ +// +// Copyright (c) 2014 Samsung Electronics Co., Ltd. +// +// 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. +// +#ifndef __TCT_MULTI-ASSISTANT-NATIVE_H__ +#define __TCT_MULTI-ASSISTANT-NATIVE_H__ + +#include "testcase.h" +#include "tct_common.h" + +extern void ITs_ma_startup(void); +extern void ITs_ma_cleanup(void); + +extern int ITc_ma_initialize_deinitialize_p(void); +extern int ITc_ma_get_state_p(void); +extern int ITc_ma_get_current_language_p(void); +extern int ITc_ma_get_recording_audio_format_p(void); +extern int ITc_ma_prepare_unprepare_set_unset_state_changed_cb_p(void); +extern int ITc_ma_set_unset_error_cb_p(void); +extern int ITc_ma_set_unset_language_changed_cb_p(void); +extern int ITc_ma_set_unset_audio_streaming_cb_p(void); +extern int ITc_ma_send_asr_result_p(void); +extern int ITc_ma_send_result_p(void); + +testcase tc_array[] = { + {"ITc_ma_initialize_deinitialize_p",ITc_ma_initialize_deinitialize_p,ITs_ma_startup,ITs_ma_cleanup}, + {"ITc_ma_get_state_p",ITc_ma_get_state_p,ITs_ma_startup,ITs_ma_cleanup}, + {"ITc_ma_get_current_language_p",ITc_ma_get_current_language_p,ITs_ma_startup,ITs_ma_cleanup}, + {"ITc_ma_get_recording_audio_format_p",ITc_ma_get_recording_audio_format_p,ITs_ma_startup,ITs_ma_cleanup}, + {"ITc_ma_prepare_unprepare_set_unset_state_changed_cb_p",ITc_ma_prepare_unprepare_set_unset_state_changed_cb_p,ITs_ma_startup,ITs_ma_cleanup}, + {"ITc_ma_set_unset_error_cb_p",ITc_ma_set_unset_error_cb_p,ITs_ma_startup,ITs_ma_cleanup}, + {"ITc_ma_set_unset_language_changed_cb_p",ITc_ma_set_unset_language_changed_cb_p,ITs_ma_startup,ITs_ma_cleanup}, + {"ITc_ma_set_unset_audio_streaming_cb_p",ITc_ma_set_unset_audio_streaming_cb_p,ITs_ma_startup,ITs_ma_cleanup}, + {"ITc_ma_send_asr_result_p",ITc_ma_send_asr_result_p,ITs_ma_startup,ITs_ma_cleanup}, + {"ITc_ma_send_result_p",ITc_ma_send_result_p,ITs_ma_startup,ITs_ma_cleanup}, + {NULL, NULL} +}; + +#endif // __TCT_MULTI-ASSISTANT-NATIVE_H__