diff -r cad71a31b7fc -r e36f3802f733 srsf/sicc/src/nsssispeechrecognitioncustomcommands.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/srsf/sicc/src/nsssispeechrecognitioncustomcommands.cpp Wed Sep 01 12:29:17 2010 +0100 @@ -0,0 +1,1308 @@ +/* +* Copyright (c) 2004-2006 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: This is the implementation of the client interface for the +* speaker independent custom commands. +* +*/ + + +// INCLUDE FILES +#include "srsfbldvariant.hrh" +#include "nsssispeechrecognitioncustomcommands.h" +#include +#include +#include "nsssispeechrecognitioncustomcommandcommon.h" +#include "nsssicustomcommanddata.h" +#include "rubydebug.h" + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// RSISpeechRecognitionCustomCommands::RSISpeechRecognitionCustomCommands +// C++ constructor. +// ----------------------------------------------------------------------------- + +EXPORT_C RSISpeechRecognitionCustomCommands::RSISpeechRecognitionCustomCommands( + RMMFController& aController) : + RMMFCustomCommandsBase(aController, + KUidInterfaceSpeakerIndependent) + { + + } + +// ----------------------------------------------------------------------------- +// RSISpeechRecognitionCustomCommands::AddRule +// Sends a command to the controller to add a rule. +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt RSISpeechRecognitionCustomCommands::AddRule( + TSIGrammarID aGrammarID, + TSILexiconID aLexiconID, + TSIPronunciationID aPronunciationID, + TSIRuleID& aRuleID) + { + + TSrsAddRule srsAddRule(aGrammarID, aLexiconID, aPronunciationID, &aRuleID); + TSrsAddRulePckg pckg(srsAddRule); + return iController.CustomCommandSync(iDestinationPckg, ESrAddRule, + pckg, KNullDesC8); // Async + + } + +// ----------------------------------------------------------------------------- +// RSISpeechRecognitionCustomCommands::Cancel +// Sends a command to the controller to cancel the currect asynchronous +// operation. +// ----------------------------------------------------------------------------- +// +EXPORT_C void RSISpeechRecognitionCustomCommands::Cancel() + { + + iController.CustomCommandSync(iDestinationPckg, ESrCancel, + KNullDesC8, KNullDesC8); + + } + +// ----------------------------------------------------------------------------- +// RSISpeechRecognitionCustomCommands::CommitChanges +// Sends a command to the controller to commit the current changes. +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt RSISpeechRecognitionCustomCommands::CommitChanges() + { + + return iController.CustomCommandSync(iDestinationPckg, ESrCommitChanges, + KNullDesC8, KNullDesC8); // Async + + } + +// ----------------------------------------------------------------------------- +// RSISpeechRecognitionCustomCommands::CreateGrammar +// Sends a command to the controller to create a grammar. +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt RSISpeechRecognitionCustomCommands::CreateGrammar( + TSIGrammarID& aGrammarID) + { + + TSrsGrammarIDPtrPckg srsGrammarIDPtrPckg = &aGrammarID; + return iController.CustomCommandSync(iDestinationPckg, ESrCreateGrammar, + srsGrammarIDPtrPckg, KNullDesC8); + + } + +// ----------------------------------------------------------------------------- +// RSISpeechRecognitionCustomCommands::CreateLexicon +// Sends a command to the controller to create a lexicon. +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt RSISpeechRecognitionCustomCommands::CreateLexicon( + TSILexiconID& aLexiconID) + { + + TSrsLexiconIDPtrPckg srsLexiconIDPtrPckg = &aLexiconID; + return iController.CustomCommandSync(iDestinationPckg, ESrCreateLexicon, + srsLexiconIDPtrPckg, KNullDesC8); + + } + +// ----------------------------------------------------------------------------- +// RSISpeechRecognitionCustomCommands::CreateModelBank +// Sends a command to the controller to create a model bank. +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt RSISpeechRecognitionCustomCommands::CreateModelBank( + TSIModelBankID& aModelBankID) + { + + TSrsModelBankIDPtrPckg modelBankIDPtrPckg = &aModelBankID; + return iController.CustomCommandSync(iDestinationPckg, ESrCreateModelBank, + modelBankIDPtrPckg, KNullDesC8); + + } + +// ----------------------------------------------------------------------------- +// RSISpeechRecognitionCustomCommands::EndRecSession +// Sends a command to the controller to end the current recognition session and +// free the allocated resources. +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt RSISpeechRecognitionCustomCommands::EndRecSession() + { + + TInt err = iController.CustomCommandSync(iDestinationPckg, ESrEndRecSession, + KNullDesC8, KNullDesC8); + return err; + + } + +// ----------------------------------------------------------------------------- +// RSISpeechRecognitionCustomCommands::GetAllClientGrammarIDs +// Calls the controller plugin to get all client grammar IDs. +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt RSISpeechRecognitionCustomCommands::GetAllClientGrammarIDs() + { + + return iController.CustomCommandSync(iDestinationPckg, + ESrGetAllClientGrammarIDs, KNullDesC8, KNullDesC8); // Async + + } + +// ----------------------------------------------------------------------------- +// RSISpeechRecognitionCustomCommands::GetAllClientLexiconIDs +// Calls the controller plugin to get all client lexicon IDs. +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt RSISpeechRecognitionCustomCommands::GetAllClientLexiconIDs() + { + + return iController.CustomCommandSync(iDestinationPckg, + ESrGetAllClientLexiconIDs, KNullDesC8, KNullDesC8); // Async + + } + +// ----------------------------------------------------------------------------- +// RSISpeechRecognitionCustomCommands::GetAllClientModelBankIDs +// Calls the controller plugin to get all client model bank IDs. +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt RSISpeechRecognitionCustomCommands::GetAllClientModelBankIDs() + { + + return iController.CustomCommandSync(iDestinationPckg, ESrGetAllClientModelBankIDs, + KNullDesC8, KNullDesC8); // Async + + } + +// ----------------------------------------------------------------------------- +// RSISpeechRecognitionCustomCommands::GetAllGrammarIDs +// Calls the controller plugin to get all grammar IDs for all clients. +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt RSISpeechRecognitionCustomCommands::GetAllGrammarIDs() + { + + return iController.CustomCommandSync(iDestinationPckg, ESrGetAllGrammarIDs, + KNullDesC8, KNullDesC8); // Async + + } + +// ----------------------------------------------------------------------------- +// RSISpeechRecognitionCustomCommands::GetAllLexiconIDs +// Calls the controller plugin to get all lexicon IDs for all clients. +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt RSISpeechRecognitionCustomCommands::GetAllLexiconIDs() + { + + return iController.CustomCommandSync(iDestinationPckg, ESrGetAllLexiconIDs, + KNullDesC8, KNullDesC8); // Async + + } + +// ----------------------------------------------------------------------------- +// RSISpeechRecognitionCustomCommands::GetAllModelBankIDs +// Calls the controller plugin to get all model bank IDs. +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt RSISpeechRecognitionCustomCommands::GetAllModelBankIDs() + { + + return iController.CustomCommandSync(iDestinationPckg, ESrGetAllModelBankIDs, + KNullDesC8, KNullDesC8); // Async + + } + +// ----------------------------------------------------------------------------- +// RSISpeechRecognitionCustomCommands::GetAllModelIDs +// Sends a command to the controller to get all model IDs from a model bank. +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt RSISpeechRecognitionCustomCommands::GetAllModelIDs( + TSIModelBankID aModelBankID) + { + + TSrsModelBankIDPckg modelBankIDPckg = aModelBankID; + + return iController.CustomCommandSync(iDestinationPckg, ESrGetAllModelIDs, + modelBankIDPckg, KNullDesC8); // Async + + } + +// ----------------------------------------------------------------------------- +// RSISpeechRecognitionCustomCommands::GetAllPronunciationIDs +// Sends a command to the controller to get all pronunciation IDs from a lexicon. +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt RSISpeechRecognitionCustomCommands::GetAllPronunciationIDs( + TSILexiconID aLexiconID) + { + + TSrsLexiconIDPckg lexiconIDPckg = aLexiconID; + return iController.CustomCommandSync(iDestinationPckg, + ESrGetAllPronunciationIDs, + lexiconIDPckg, KNullDesC8); // Async + + } + +// ----------------------------------------------------------------------------- +// RSISpeechRecognitionCustomCommands::GetAllRuleIDs +// Sends a command to the controller to get all rule IDs from a grammar. +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt RSISpeechRecognitionCustomCommands::GetAllRuleIDs( + TSIGrammarID aGrammarID) + { + + TSrsGrammarIDPckg grammarIDPckg = aGrammarID; + + return iController.CustomCommandSync(iDestinationPckg, ESrGetAllRuleIDs, + grammarIDPckg, KNullDesC8); // Async + + } + +// ----------------------------------------------------------------------------- +// RSISpeechRecognitionCustomCommands::GetEngineProperties +// Sends a command to the controller to get the engine properties. +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt RSISpeechRecognitionCustomCommands::GetEngineProperties( + const RArray& aPropertyId, + RArray& aPropertyValue) + { + + TRAPD(err, DoGetEnginePropertiesL(aPropertyId, aPropertyValue)); + return err; + + } + +// ----------------------------------------------------------------------------- +// RSISpeechRecognitionCustomCommands::GetModelCount +// Sends a command to the controller to get the number of models in a model bank. +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt RSISpeechRecognitionCustomCommands::GetModelCount( + TSIModelBankID aModelBankID, TInt& aModelCount) + { + + TSrsModelBankIDPckg modelBankPckg = aModelBankID; + TSrsIntPtrPckg modelCountPtrPckg = &aModelCount; + + return iController.CustomCommandSync(iDestinationPckg, ESrGetModelCount, + modelBankPckg, modelCountPtrPckg); + + } + + +// ----------------------------------------------------------------------------- +// RSISpeechRecognitionCustomCommands::GetRuleValidity +// Sends a command to the controller to determine if a rule is valid. +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt RSISpeechRecognitionCustomCommands::GetRuleValidity( + TSIGrammarID aGrammarID, + TSIRuleID aRuleID, TBool& aValid) + { + + TSrsRuleValidity srsRuleValidity(aGrammarID, aRuleID, &aValid); + TSrsRuleValidityPckg srsRuleValidityPckg(srsRuleValidity); + + return iController.CustomCommandSync(iDestinationPckg, ESrGetRuleValidity, + srsRuleValidityPckg, KNullDesC8); + + } + +// ----------------------------------------------------------------------------- +// RSISpeechRecognitionCustomCommands::LoadGrammar +// Sends a command to the controller to load the specified grammar. +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt RSISpeechRecognitionCustomCommands::LoadGrammar( + TSIGrammarID aGrammarID) + { + + TSrsGrammarIDPckg pckg = aGrammarID; + return iController.CustomCommandSync(iDestinationPckg, ESrLoadGrammar, + pckg, KNullDesC8); // Async + + } + +// ----------------------------------------------------------------------------- +// RSISpeechRecognitionCustomCommands::ActivateGrammar +// Sends a command to the controller to activate a grammar +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt RSISpeechRecognitionCustomCommands::ActivateGrammar( + TSIGrammarID aGrammarID) + { + TSrsGrammarIDPckg pckg = aGrammarID; + return iController.CustomCommandSync( iDestinationPckg, ESrActivateGrammar, + pckg, KNullDesC8 ); // Async + + } + +// ----------------------------------------------------------------------------- +// RSISpeechRecognitionCustomCommands::DeactivateGrammar +// Sends a command to the controller to deactivate a gramamr +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt RSISpeechRecognitionCustomCommands::DeactivateGrammar( + TSIGrammarID aGrammarID) + { + TSrsGrammarIDPckg pckg = aGrammarID; + return iController.CustomCommandSync( iDestinationPckg, ESrDeactivateGrammar, + pckg, KNullDesC8); // Async + + } + +// ----------------------------------------------------------------------------- +// RSISpeechRecognitionCustomCommands::LoadLexicon +// Sends a command to the controller to load the specified lexican. +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt RSISpeechRecognitionCustomCommands::LoadLexicon( + TSILexiconID aLexiconID) + { + + TSrsLexiconIDPckg pckg = aLexiconID; + return iController.CustomCommandSync(iDestinationPckg, ESrLoadLexicon, + pckg, KNullDesC8); // Async + + } + +// ----------------------------------------------------------------------------- +// RSISpeechRecognitionCustomCommands::LoadModels +// Sends a command to the controller to load all models from a model bank. +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt RSISpeechRecognitionCustomCommands::LoadModels( + TSIModelBankID aModelBankID) + { + + TSrsModelIDPckg pckg = aModelBankID; + return iController.CustomCommandSync(iDestinationPckg, ESrLoadModels, + pckg, KNullDesC8); // Async + + } + +// ----------------------------------------------------------------------------- +// RSISpeechRecognitionCustomCommands::Record +// Sends a command to the controller to start recording an utterance for either +// training or recognition +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt RSISpeechRecognitionCustomCommands::Record( + TTimeIntervalMicroSeconds32 aRecordTime) + { + + TSrsTimeIntervalMicroSeconds32Pckg pckg = aRecordTime; + return iController.CustomCommandSync(iDestinationPckg, ESrRecord, + pckg, KNullDesC8); // Async + + } + +// ----------------------------------------------------------------------------- +// RSISpeechRecognitionCustomCommands::RemoveGrammar +// Sends a command to the controller to remove a grammar. +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt RSISpeechRecognitionCustomCommands::RemoveGrammar( + TSIGrammarID aGrammarID) + { + + TSrsGrammarIDPckg pckg = aGrammarID; + return iController.CustomCommandSync(iDestinationPckg, ESrRemoveGrammar, + pckg, KNullDesC8); + + } + +// ----------------------------------------------------------------------------- +// RSISpeechRecognitionCustomCommands::RemoveLexicon +// Sends a command to the controller to remove a lexicon. +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt RSISpeechRecognitionCustomCommands::RemoveLexicon( + TSILexiconID aLexiconID) + { + + TSrsLexiconIDPckg pckg = aLexiconID; + return iController.CustomCommandSync(iDestinationPckg, ESrRemoveLexicon, + pckg, KNullDesC8); + + } + +// ----------------------------------------------------------------------------- +// RSISpeechRecognitionCustomCommands::RemoveModelBank +// Sends a command to the controller to remove a model bank and all associated +// models. +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt RSISpeechRecognitionCustomCommands::RemoveModelBank( + TSIModelBankID aModelBankID) + { + + TSrsModelBankIDPckg modelBankIDPckg = aModelBankID; + return iController.CustomCommandSync(iDestinationPckg, ESrRemoveModelBank, + modelBankIDPckg, KNullDesC8); + + } + +// ----------------------------------------------------------------------------- +// RSISpeechRecognitionCustomCommands::RemoveModel +// Sends a command to the controller to remove a model from a model bank. +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt RSISpeechRecognitionCustomCommands::RemoveModel( + TSIModelBankID aModelBankID, + TSIModelID aModelID) + { + + TSrsModelBankIDPckg modelBankIDPckg = aModelBankID; + TSrsModelIDPckg modelIDPckg = aModelID; + + return iController.CustomCommandSync(iDestinationPckg, ESrRemoveModel, + modelBankIDPckg, modelIDPckg); // Async + + } + +// ----------------------------------------------------------------------------- +// RSISpeechRecognitionCustomCommands::RemovePronunciation +// Sends a command to the controller to remove a pronunciation. +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt RSISpeechRecognitionCustomCommands::RemovePronunciation( + TSILexiconID aLexiconID, + TSIPronunciationID aPronunciationID) + { + + TSrsLexiconIDPckg lexiconIDPckg = aLexiconID; + TSrsPronunciationIDPckg pronunciationIDPckg = aPronunciationID; + + return iController.CustomCommandSync(iDestinationPckg, ESrRemovePronunciation, + lexiconIDPckg, pronunciationIDPckg); // Async + + } + +// ----------------------------------------------------------------------------- +// RSISpeechRecognitionCustomCommands::RemoveRule +// Sends a command to the controller to remove a rule. +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt RSISpeechRecognitionCustomCommands::RemoveRule( + TSIGrammarID aGrammarID, + TSIRuleID aRuleID) + { + + TSrsGrammarIDPckg grammarIDPckg = aGrammarID; + TSrsRuleIDPckg ruleIDPckg = aRuleID; + + return iController.CustomCommandSync(iDestinationPckg, ESrRemoveRule, + grammarIDPckg, ruleIDPckg); // Async + + } + +// ----------------------------------------------------------------------------- +// RSISpeechRecognitionCustomCommands::RemoveRules +// Sends a command to the controller to remove a rule. +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt RSISpeechRecognitionCustomCommands::RemoveRules( + TSIGrammarID aGrammarID, + RArray& aRuleIDs) + { + RUBY_DEBUG1( "RSISpeechRecognitionCustomCommands::RemoveRules GrammarID [%d]", aGrammarID ); + + TSrsGrammarIDPckg grammarIDPckg = aGrammarID; + + CBufFlat* flatBuf = 0; + + /** @todo Implement externalize, that takes arrays of Uint32? */ + TRAPD( err, flatBuf + = ExternalizeIntArrayL( reinterpret_cast&> ( aRuleIDs ) ) ); + + if ( err != KErrNone ) + { + delete flatBuf; + return err; + } + // SRS will signal, when the rule IDs are ready. + TInt ret = iController.CustomCommandSync(iDestinationPckg, ESrRemoveRules, + grammarIDPckg, flatBuf->Ptr(0) ); // Async + delete flatBuf; + + return( ret ); + } + +// ----------------------------------------------------------------------------- +// RSISpeechRecognitionCustomCommands::SetClientUid +// Sends a command to the controller to set the client UID. +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt RSISpeechRecognitionCustomCommands::SetClientUid( TUid aClientUid ) +{ + + TSrsUidPckg uidPckg = aClientUid; + return iController.CustomCommandSync(iDestinationPckg, + ESrSetClientUid, uidPckg, KNullDesC8); + +} + + +// ----------------------------------------------------------------------------- +// RSISpeechRecognitionCustomCommands::StartRecSession +// Sends a command to the controller to begin a recognition session. +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt RSISpeechRecognitionCustomCommands::StartRecSession( + TNSSRecognitionMode aMode) + { + + TSrsRecognitionModePckg recognitionModePckg = aMode; + TInt err = iController.CustomCommandSync(iDestinationPckg, + ESrStartRecSession, recognitionModePckg, KNullDesC8); + + return err; + + } + +// ----------------------------------------------------------------------------- +// RSISpeechRecognitionCustomCommands::UnloadRule +// Sends a command to the controller to add a rule. +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt RSISpeechRecognitionCustomCommands::UnloadRule( + TSIGrammarID aGrammarID, + TSIRuleID aRuleID) + { + + TSrsGrammarIDPckg grammarIDPckg = aGrammarID; + TSrsRuleIDPckg ruleIDPtrPckg = aRuleID; + + return iController.CustomCommandSync(iDestinationPckg, ESrUnloadRule, + grammarIDPckg, ruleIDPtrPckg); + + } + +// ----------------------------------------------------------------------------- +// RSISpeechRecognitionCustomCommands::LoadEngineParameters +// Sends a command to the controller to load the parameters into +// the engine. +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt RSISpeechRecognitionCustomCommands::LoadEngineParameters( + const RArray& aParameterId, + const RArray& aParameterValue) + { + + TRAPD(error, DoLoadEngineParametersL(aParameterId, aParameterValue)); + return error; + + } + + +// ----------------------------------------------------------------------------- +// RSISpeechRecognitionCustomCommands::GetPronunciationIDArrayL +// Sends a command to get the pronunciation ID array. +// ----------------------------------------------------------------------------- +// +EXPORT_C void RSISpeechRecognitionCustomCommands::GetPronunciationIDArrayL( + RArray& aPronunciationIDs) + { + CleanupClosePushL( aPronunciationIDs ); + + TPckgBuf pckgSize; + + User::LeaveIfError(iController.CustomCommandSync(iDestinationPckg, + ESrGetPronunciationIDArraySize, + KNullDesC8, + KNullDesC8, + pckgSize)); + + + HBufC8* buf = HBufC8::NewLC(pckgSize()*sizeof(TUint32)); + TPtr8 ptr = buf->Des(); + + User::LeaveIfError(iController.CustomCommandSync(iDestinationPckg, + ESrGetPronunciationIDArrayContents, + KNullDesC8, + KNullDesC8, + ptr)); + + RDesReadStream stream(ptr); + CleanupClosePushL(stream); + + for (TInt i=0; i& aRuleIDs) + { + CleanupClosePushL( aRuleIDs ); + + TPckgBuf pckgSize; + + User::LeaveIfError(iController.CustomCommandSync(iDestinationPckg, + ESrGetRuleIDArraySize, + KNullDesC8, + KNullDesC8, + pckgSize)); + + HBufC8* buf = HBufC8::NewLC(pckgSize()*sizeof(TUint32)); + TPtr8 ptr = buf->Des(); + + User::LeaveIfError(iController.CustomCommandSync(iDestinationPckg, + ESrGetRuleIDArrayContents, + KNullDesC8, + KNullDesC8, + ptr)); + + RDesReadStream stream(ptr); + CleanupClosePushL(stream); + + for (TInt i=0; i& aModelIDs) + { + CleanupClosePushL( aModelIDs ); + + TPckgBuf pckgSize; + + User::LeaveIfError(iController.CustomCommandSync(iDestinationPckg, + ESrGetModelIDArraySize, + KNullDesC8, + KNullDesC8, + pckgSize)); + + HBufC8* buf = HBufC8::NewLC(pckgSize()*sizeof(TUint32)); + TPtr8 ptr = buf->Des(); + + User::LeaveIfError(iController.CustomCommandSync(iDestinationPckg, + ESrGetModelIDArrayContents, + KNullDesC8, + KNullDesC8, + ptr)); + + RDesReadStream stream(ptr); + CleanupClosePushL(stream); + + for (TInt i=0; i& aGrammarIDs) + { + CleanupClosePushL( aGrammarIDs ); + + TPckgBuf pckgSize; + + User::LeaveIfError(iController.CustomCommandSync(iDestinationPckg, + ESrGetGrammarIDArraySize, + KNullDesC8, + KNullDesC8, + pckgSize)); + + HBufC8* buf = HBufC8::NewLC(pckgSize()*sizeof(TUint32)); + TPtr8 ptr = buf->Des(); + + User::LeaveIfError(iController.CustomCommandSync(iDestinationPckg, + ESrGetGrammarIDArrayContents, + KNullDesC8, + KNullDesC8, + ptr)); + + RDesReadStream stream(ptr); + CleanupClosePushL(stream); + + for ( TInt i = 0; i < pckgSize(); i++ ) + { + User::LeaveIfError( aGrammarIDs.Append( (TSIGrammarID)stream.ReadUint32L() ) ); + } + + CleanupStack::PopAndDestroy( 2 );//stream, buf + CleanupStack::Pop();//aGrammarIDs + } + +// ----------------------------------------------------------------------------- +// RSISpeechRecognitionCustomCommands::GetLexiconIDArrayL +// Sends a command to get the lexicon ID array. +// ----------------------------------------------------------------------------- +// +EXPORT_C void RSISpeechRecognitionCustomCommands::GetLexiconIDArrayL( + RArray& aLexiconIDs) + { + CleanupClosePushL( aLexiconIDs ); + + TPckgBuf pckgSize; + + User::LeaveIfError(iController.CustomCommandSync(iDestinationPckg, + ESrGetLexiconIDArraySize, + KNullDesC8, + KNullDesC8, + pckgSize)); + + TInt size = pckgSize(); + HBufC8* buf = HBufC8::NewLC(size*sizeof(TUint32)); + TPtr8 ptr = buf->Des(); + + User::LeaveIfError(iController.CustomCommandSync(iDestinationPckg, + ESrGetLexiconIDArrayContents, + KNullDesC8, + KNullDesC8, + ptr)); + + RDesReadStream stream(ptr); + CleanupClosePushL(stream); + + for ( TInt i = 0; i < pckgSize(); i++ ) + { + User::LeaveIfError( aLexiconIDs.Append( (TSILexiconID)stream.ReadUint32L() ) ); + } + + CleanupStack::PopAndDestroy(2);//stream, buf + CleanupStack::Pop(); + } + +// ----------------------------------------------------------------------------- +// RSISpeechRecognitionCustomCommands::GetLexiconIDArrayL +// Sends a command to get the lexicon ID array. +// ----------------------------------------------------------------------------- +// +EXPORT_C void RSISpeechRecognitionCustomCommands::GetModelBankIDArrayL( + RArray& aModelBankIDs) + { + CleanupClosePushL( aModelBankIDs ); + + TPckgBuf pckgSize; + + User::LeaveIfError(iController.CustomCommandSync(iDestinationPckg, + ESrGetModelBankIDArraySize, + KNullDesC8, + KNullDesC8, + pckgSize)); + + HBufC8* buf = HBufC8::NewLC(pckgSize()*sizeof(TUint32)); + TPtr8 ptr = buf->Des(); + + User::LeaveIfError(iController.CustomCommandSync(iDestinationPckg, + ESrGetModelBankIDArrayContents, + KNullDesC8, + KNullDesC8, + ptr)); + + RDesReadStream stream(ptr); + CleanupClosePushL(stream); + + for ( TInt i = 0; i < pckgSize(); i++ ) + { + User::LeaveIfError( aModelBankIDs.Append( (TSIModelBankID)stream.ReadUint32L() ) ); + } + + CleanupStack::PopAndDestroy(2);//stream, buf + CleanupStack::Pop(); + } + +// ----------------------------------------------------------------------------- +// RSISpeechRecognitionCustomCommands::GetSIResultSetL +// Sends a command to get the speaker independent recognition result set. +// ----------------------------------------------------------------------------- +// +EXPORT_C void RSISpeechRecognitionCustomCommands::GetSIResultSetL( + CSIClientResultSet& aResultSet) + { + + TPckgBuf pckgSize; + + User::LeaveIfError(iController.CustomCommandSync(iDestinationPckg, + ESrGetClientResultSetSizeSI, + KNullDesC8, + KNullDesC8, + pckgSize)); + + HBufC8* buf = HBufC8::NewLC( pckgSize() ); + TPtr8 ptr = buf->Des(); + + User::LeaveIfError(iController.CustomCommandSync(iDestinationPckg, + ESrGetClientResultSet, + KNullDesC8, + KNullDesC8, + ptr)); + + RDesReadStream stream(ptr); + CleanupClosePushL(stream); + + aResultSet.InternalizeL(stream); + CleanupStack::PopAndDestroy(2);//stream, buf + + } + +// ----------------------------------------------------------------------------- +// RSISpeechRecognitionCustomCommands::DoRecognizeL +// Sends a command to get the recognition result set. +// ----------------------------------------------------------------------------- +// +void RSISpeechRecognitionCustomCommands::DoRecognizeL(CSDClientResultSet& /*aResultSet*/) + { + RUBY_DEBUG0( "RSISpeechRecognitionCustomCommands::DoRecognizeL is NOT supported" ); + User::Leave( KErrNotSupported ); + } + +// ----------------------------------------------------------------------------- +// RSISpeechRecognitionCustomCommands::DoRecognizeSIL +// Sends a command to get the recognition result set. +// ----------------------------------------------------------------------------- +// +void RSISpeechRecognitionCustomCommands::DoRecognizeSIL(CSIClientResultSet& aResultSet) + { + CBufFlat* dataCopyBuffer = CBufFlat::NewL(KExpandSize); + CleanupStack::PushL(dataCopyBuffer); + + RBufWriteStream stream; + stream.Open(*dataCopyBuffer); + CleanupClosePushL(stream); + + aResultSet.ExternalizeL(stream); + + User::LeaveIfError(iController.CustomCommandSync(iDestinationPckg, + ESrRecognizeSI, + dataCopyBuffer->Ptr(0), + KNullDesC8)); + + CleanupStack::PopAndDestroy(2); //stream,dataCopyBuffer + } + +// ----------------------------------------------------------------------------- +// RSISpeechRecognitionCustomCommands::DoGetEnginePropertiesL +// Sends a command to get the engine properties. +// ----------------------------------------------------------------------------- +// +void RSISpeechRecognitionCustomCommands::DoGetEnginePropertiesL( + const RArray& aPropertyId, + RArray& aPropertyValue) + { + + CBufFlat* param1 = ExternalizeIntArrayL(aPropertyId); + CleanupStack::PushL(param1); + + TInt aNumberResults = aPropertyId.Count(); // same number of values as properties + + HBufC8* buf = HBufC8::NewLC(aNumberResults *sizeof(TInt)); + TPtr8 ptr = buf->Des(); + + User::LeaveIfError(iController.CustomCommandSync(iDestinationPckg, + ESrGetEngineProperties, + param1->Ptr(0), + KNullDesC8, + ptr)); + + + InternalizeIntArrayL(ptr,aNumberResults,aPropertyValue); + CleanupStack::PopAndDestroy(2);//buf,param1 + + } + +// ----------------------------------------------------------------------------- +// RSISpeechRecognitionCustomCommands::DoLoadEngineParametersL +// Sends a command to load the engine parameters. +// ----------------------------------------------------------------------------- +// +void RSISpeechRecognitionCustomCommands::DoLoadEngineParametersL( + const RArray& aParameterId, + const RArray& aParameterValue) + { + + CBufFlat* param1 = ExternalizeIntArrayL(aParameterId); + CleanupStack::PushL(param1); + CBufFlat* param2 = ExternalizeIntArrayL(aParameterValue); + CleanupStack::PushL(param2); + User::LeaveIfError(iController.CustomCommandSync(iDestinationPckg, + ESrLoadEngineParameters, + param1->Ptr(0), + param2->Ptr(0))); + + CleanupStack::PopAndDestroy(2); //param2, param1 + + } + +// ----------------------------------------------------------------------------- +// RSISpeechRecognitionCustomCommands::ExternalizeIntArrayL +// Externalizes an interger array. +// ----------------------------------------------------------------------------- +// +CBufFlat* RSISpeechRecognitionCustomCommands::ExternalizeIntArrayL( + const RArray& aArray) + { + + CBufFlat* dataCopyBuffer = CBufFlat::NewL(KExpandSize); + CleanupStack::PushL(dataCopyBuffer); + RBufWriteStream stream; + stream.Open(*dataCopyBuffer); + CleanupClosePushL(stream); + + stream.WriteInt32L(aArray.Count()); + + for (TInt i=0;i& aArray) + { + CleanupClosePushL( aArray ); + + RDesReadStream stream(aDes); + CleanupClosePushL(stream); + + for (TInt i=0; i correctPckg( aCorrect ); + + while(forever) + { +// Poor man's exception handling: while and break +#define BREAK( error ) if ( error != KErrNone ) { break; } + + // Allocate buffer for storing CSIClientResultSet + TRAP ( ret, dataBuf = CBufFlat::NewL( KExpandSize ) ); + BREAK( ret ); + + // Open a stream to the buffer + dataStream.Open( *dataBuf ); + + // Pack the data + TRAP ( ret, aResultSet.ExternalizeL( dataStream ) ); + BREAK( ret ); + + // Send through MMF + ret = iController.CustomCommandSync( + iDestinationPckg, + ESrAdapt, + dataBuf->Ptr( 0 ), + correctPckg ); + + break; + } + + dataStream.Close(); + delete dataBuf; + + return ret; + } + +// ----------------------------------------------------------------------------- +// Adds a pronunciation to the given lexicon. +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt RSISpeechRecognitionCustomCommands::AddPronunciation( + TSILexiconID aLexiconID, + const TDesC& aTrainText, + TLanguage aLanguage, + TSIPronunciationID& aPronunciationID) + { + TSrsAddPronunciationSI srsAddPronunciation( aLexiconID, aTrainText.Length(), + aLanguage, aPronunciationID ); + TSrsAddPronunciationSIPckg pckg( srsAddPronunciation ); + + TInt trainTextSize( aTrainText.Size() ); + TUint8* trainTextPtr = (TUint8*)aTrainText.Ptr(); + TPtrC8 trainTextDes( trainTextPtr, trainTextSize ); + + return iController.CustomCommandSync(iDestinationPckg, ESrAddPronunciationSI, + pckg, trainTextDes ); + } + +// ----------------------------------------------------------------------------- +// Adds a rule variant to a rule in a grammar. +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt RSISpeechRecognitionCustomCommands::AddRuleVariant( + TSIGrammarID aGrammarID, + TSILexiconID aLexiconID, + const RArray& aPronunciationIDs, + TSIRuleID aRuleID, + TSIRuleVariantID& aRuleVariantID ) + { + TSrsAddRuleVariant srsAddRuleVariant( aGrammarID, + aLexiconID, + aPronunciationIDs.Count(), + aRuleID, + &aRuleVariantID ); + TSrsAddRuleVariantPckg pckg( srsAddRuleVariant ); + + TUint8* pronunIdPtr = (TUint8*)&(aPronunciationIDs[0]); + TPtrC8 pronunIdDes( pronunIdPtr, + sizeof( TSIPronunciationID ) * aPronunciationIDs.Count() + ); + + return iController.CustomCommandSync(iDestinationPckg, ESrAddRuleVariant, + pckg, pronunIdDes ); + } + +// ----------------------------------------------------------------------------- +// Trains a voice tag. Adds the text to the lexicon, and creates the required +// rules and rule variants. +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt RSISpeechRecognitionCustomCommands::AddVoiceTag( + const MDesCArray& aTrainArray, + const RArray& aLanguageArray, + TSILexiconID aLexiconID, + TSIGrammarID aGrammarID, + TSIRuleID& aRuleID) + { + TSrsAddVoiceTag srsAddVoiceTagData( aLexiconID, aGrammarID, &aRuleID, aLanguageArray ); + TSrsAddVoiceTagPckg pckg( srsAddVoiceTagData ); + + CBufFlat* flatBuf = 0; + TRAPD( err, flatBuf + = SICustomCommandData::ExternalizeDesCArrayL( aTrainArray ) ); + + if ( err != KErrNone ) + return( err ); + + // SRS will signal, when the rule IDs are ready. + TInt ret = iController.CustomCommandSync( iDestinationPckg, ESrAddVoiceTag, + pckg, flatBuf->Ptr( 0 ) ); // Async + + delete flatBuf; + + return( ret ); + } + +// ----------------------------------------------------------------------------- +// Trains voice tags. If the training fails for some of the names (but not all), +// it is signaled by setting the Rule ID to KInvalidRuleID. +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt RSISpeechRecognitionCustomCommands::AddVoiceTags( + const RPointerArray& aTrainArray, + const RArray& aLanguageArray, + TSILexiconID aLexiconID, + TSIGrammarID aGrammarID, + RArray& /*aRuleID*/) + { + TSrsAddVoiceTag srsAddVoiceTagData( aLexiconID, aGrammarID, NULL, aLanguageArray ); + TSrsAddVoiceTagPckg pckg( srsAddVoiceTagData ); + + CBufFlat* flatBuf = 0; + TRAPD( err, flatBuf + = SICustomCommandData::ExternalizeDesCArrayArrayL( aTrainArray ) ); + + if ( err != KErrNone ) + { + delete flatBuf; + return err; + } + + // SRS will signal, when the rule IDs are ready. + TInt ret = iController.CustomCommandSync( iDestinationPckg, ESrAddVoiceTags, + pckg, flatBuf->Ptr( 0 ) ); // Async + delete flatBuf; + + return( ret ); + } + +#ifdef __SINDE_TRAINING +// ----------------------------------------------------------------------------- +// Trains a voice tag. Adds the text to the lexicon, and creates the required +// rules and rule variants. +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt RSISpeechRecognitionCustomCommands::AddVoiceTag( const MDesCArray& aTrainArray, + const RArray& aLanguageArray, + TSILexiconID aLexiconID, + TSIGrammarID aGrammarID, + TSIRuleID& aRuleID ) + { + TSrsAddSindeVoiceTag srsAddVoiceTagData( aLexiconID, aGrammarID, &aRuleID, aLanguageArray ); + TSrsAddSindeVoiceTagPckg pckg( srsAddVoiceTagData ); + + CBufFlat* flatBuf( NULL ); + TRAPD( err, flatBuf = SICustomCommandData::ExternalizeDesCArrayL( aTrainArray ) ); + + if ( err != KErrNone ) + { + return err; + } + + // SRS plugin will signal, when the rule IDs are ready. + TInt ret = iController.CustomCommandSync( iDestinationPckg, ESrAddSindeVoiceTag, + pckg, flatBuf->Ptr( 0 ) ); // Async + + delete flatBuf; + + return ret; + } + +// ----------------------------------------------------------------------------- +// Trains voice tags. If the training fails for some of the names (but not all), +// it is signaled by setting the Rule ID to KInvalidRuleID. +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt RSISpeechRecognitionCustomCommands::AddVoiceTags( const RPointerArray& aTrainArray, + const RArray& aLanguageArray, + TSILexiconID aLexiconID, + TSIGrammarID aGrammarID, + RArray& /*aRuleID*/) + { + TSrsAddSindeVoiceTag srsAddVoiceTagData( aLexiconID, aGrammarID, NULL, aLanguageArray ); + TSrsAddSindeVoiceTagPckg pckg( srsAddVoiceTagData ); + + CBufFlat* flatBuf( NULL ); + TRAPD( err, flatBuf = SICustomCommandData::ExternalizeDesCArrayArrayL( aTrainArray ) ); + + if ( err != KErrNone ) + { + delete flatBuf; + return err; + } + + // SRS plugin will signal, when the rule IDs are ready. + TInt ret = iController.CustomCommandSync( iDestinationPckg, ESrAddSindeVoiceTags, + pckg, flatBuf->Ptr( 0 ) ); // Async + delete flatBuf; + + return ret; + } + +// ----------------------------------------------------------------------------- +// Pre-starts sampling before Record() call +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt RSISpeechRecognitionCustomCommands::PreStartSampling() + { + return iController.CustomCommandSync( iDestinationPckg, ESrPreStartSampling, + KNullDesC8, KNullDesC8 ); // Async + } + +#endif // SINDE_TRAINING + +// ----------------------------------------------------------------------------- +// Creates a new rule. +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt RSISpeechRecognitionCustomCommands::CreateRule(TSIGrammarID aGrammarID, TSIRuleID& aRuleID) + { + TSrsAddRule srsCreateRule( aGrammarID, KInvalidLexiconID, KInvalidPronunciationID, &aRuleID ); + TSrsAddRulePckg pckg( srsCreateRule ); + + return iController.CustomCommandSync(iDestinationPckg, ESrCreateRule, + pckg, KNullDesC8 ); // Async + } + +// ----------------------------------------------------------------------------- +// Starts recognition +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt RSISpeechRecognitionCustomCommands::Recognize( CSIClientResultSet& aResultSet ) + { + TRAPD( err, DoRecognizeSIL( aResultSet ) ); + return err; + } + +// ----------------------------------------------------------------------------- +// Stops recognition. Unlike Cancel(), this function gives +// the recognition result, if it can be guessed. +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt RSISpeechRecognitionCustomCommands::EndRecord() + { + return iController.CustomCommandSync( iDestinationPckg, ESrEndRecord, + KNullDesC8, KNullDesC8 ); // Async + } + +// ----------------------------------------------------------------------------- +// Deactivates a grammar. +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt RSISpeechRecognitionCustomCommands::UnloadGrammar( TSIGrammarID aGrammarID ) + { + TSrsGrammarIDPckg pckg( aGrammarID ); + + return iController.CustomCommandSync(iDestinationPckg, ESrUnloadGrammar, + pckg, KNullDesC8 ); // Async + } + + +/************************** New SI functions stop here ************************/ + +// End of file