mmdevicefw/speechrecogsupport/ASR/src/SpeechRecognitionCustomCommands.cpp
changeset 0 40261b775718
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmdevicefw/speechrecogsupport/ASR/src/SpeechRecognitionCustomCommands.cpp	Tue Feb 02 01:56:55 2010 +0200
@@ -0,0 +1,771 @@
+// Copyright (c) 2003-2009 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:
+//
+
+//  INCLUDES
+#include <mmf/common/speechrecognitioncustomcommands.h>
+#include "SpeechRecognitionCustomCommandCommon.h"
+
+const TInt KExpandSize = 10;
+
+
+EXPORT_C RSpeechRecognitionCustomCommands::RSpeechRecognitionCustomCommands(RMMFController& aController)
+	:RMMFCustomCommandsBase(aController, KUidInterfaceSpeechRecognition)
+	{
+	}
+
+EXPORT_C TInt RSpeechRecognitionCustomCommands::AddPronunciation(TLexiconID aLexiconID, 
+			TModelBankID aModelBankID, TModelID aModelID,
+			TPronunciationID& aPronunciationID)
+	{
+	TSrsAddPronunciationPckg pckg(TSrsAddPronunciation(aLexiconID,aModelBankID,aModelID,&aPronunciationID));
+	TInt err =  iController.CustomCommandSync(iDestinationPckg, 
+												ESrAddPronunciation, 
+												pckg,
+												KNullDesC8);
+												
+	return err;
+	}
+	
+EXPORT_C TInt RSpeechRecognitionCustomCommands::SetClientUid(TUid aClientUid)
+	{
+	TSrsUidPckg pckg(aClientUid);
+	
+	TInt err =  iController.CustomCommandSync(iDestinationPckg, 
+												ESrSetClientUid, 
+												pckg,
+												KNullDesC8);
+	return err;
+	}
+
+EXPORT_C TInt RSpeechRecognitionCustomCommands::AddRule(TGrammarID aGrammarID, TLexiconID aLexiconID,
+				TPronunciationID aPronunciationID, TRuleID& aRuleID)
+				
+	{
+	TSrsAddRulePckg pckg(TSrsAddRule(aGrammarID, aLexiconID, aPronunciationID, &aRuleID));
+	TInt err =  iController.CustomCommandSync(iDestinationPckg, 
+												ESrAddRule, 
+												pckg,
+												KNullDesC8);
+												
+	return err;
+	}
+
+EXPORT_C void RSpeechRecognitionCustomCommands::Cancel()
+	{
+	iController.CustomCommandSync(iDestinationPckg, 
+									ESrCancel, 
+									KNullDesC8,
+									KNullDesC8);
+												
+	}
+
+EXPORT_C TInt RSpeechRecognitionCustomCommands::CommitChanges()
+	{
+	TInt err =  iController.CustomCommandSync(iDestinationPckg, 
+												ESrCommitChanges, 
+												KNullDesC8,
+												KNullDesC8);
+												
+	return err;
+
+	}
+
+EXPORT_C TInt RSpeechRecognitionCustomCommands::CreateGrammar(TGrammarID& aGrammarID)
+	{
+	TSrsGrammarIDPtrPckg pckg(&aGrammarID);
+	TInt err =  iController.CustomCommandSync(iDestinationPckg, 
+												ESrCreateGrammar, 
+												pckg,
+												KNullDesC8);
+												
+	return err;
+	}
+
+EXPORT_C TInt RSpeechRecognitionCustomCommands::CreateLexicon(TLexiconID& aLexiconID)
+	{
+	TSrsLexiconIDPtrPckg pckg(&aLexiconID);
+	
+	TInt err =  iController.CustomCommandSync(iDestinationPckg, 
+												ESrCreateLexicon, 
+												pckg,
+												KNullDesC8);
+												
+	return err;
+
+
+	}
+
+EXPORT_C TInt RSpeechRecognitionCustomCommands::CreateModelBank(TModelBankID& aModelBankID)
+	{
+	TSrsModelBankIDPtrPckg pckg(&aModelBankID);
+	TInt err =  iController.CustomCommandSync(iDestinationPckg, 
+												ESrCreateModelBank, 
+												pckg,
+												KNullDesC8);
+												
+	return err;
+
+
+	}
+
+EXPORT_C TInt RSpeechRecognitionCustomCommands::EndRecSession()
+
+	{
+	TInt err =  iController.CustomCommandSync(iDestinationPckg, 
+												ESrEndRecSession, 
+												KNullDesC8,
+												KNullDesC8);
+												
+	return err;
+
+
+	}
+EXPORT_C TInt RSpeechRecognitionCustomCommands::GetAllModelIDs(TModelBankID aModelBankID)
+	{
+	TSrsModelBankIDPckg pckg(aModelBankID);
+	TInt err =  iController.CustomCommandSync(iDestinationPckg, 
+												ESrGetAllModelIDs, 
+												pckg,
+												KNullDesC8);
+												
+	return err;
+	}
+
+EXPORT_C TInt RSpeechRecognitionCustomCommands::GetAllPronunciationIDs(TLexiconID aLexiconID)
+	{
+	TSrsLexiconIDPckg pckg(aLexiconID);
+	TInt err = iController.CustomCommandSync(iDestinationPckg, 
+												ESrGetAllPronunciationIDs, 
+												pckg,
+												KNullDesC8);
+	return err;
+												
+	}
+
+EXPORT_C TInt RSpeechRecognitionCustomCommands::GetAllRuleIDs(TGrammarID aGrammarID)
+	{
+	TSrsGrammarIDPckg pckg(aGrammarID);
+	TInt err =  iController.CustomCommandSync(iDestinationPckg, 
+												ESrGetAllRuleIDs, 
+												pckg,
+												KNullDesC8);
+												
+	return err;
+	}
+
+EXPORT_C TInt RSpeechRecognitionCustomCommands::GetAvailableStorage(TInt& aAvailableStorage)
+
+	{
+	TSrsIntPtrPckg pckg(&aAvailableStorage);
+	TInt err =  iController.CustomCommandSync(iDestinationPckg, 
+												ESrGetAvailableStorage, 
+												pckg,
+												KNullDesC8);
+		
+	return err;	
+
+	}
+EXPORT_C TInt RSpeechRecognitionCustomCommands::GetEngineProperties(const RArray<TInt>& aPropertyId, 
+				RArray<TInt>& aPropertyValue)
+	{
+	
+	TRAPD(err, DoGetEnginePropertiesL(aPropertyId, aPropertyValue));
+	return err;	
+	}
+
+EXPORT_C TInt RSpeechRecognitionCustomCommands::GetModelCount(TModelBankID aModelBankID, 
+				TInt& aModelCount)
+	{
+	TSrsModelBankIDPckg pckg(aModelBankID);
+	TSrsIntPtrPckg resultpckg(&aModelCount);
+	TInt err =  iController.CustomCommandSync(iDestinationPckg, 
+												ESrGetModelCount, 
+												pckg,
+												resultpckg);
+												
+	return err;
+	}
+
+EXPORT_C TInt RSpeechRecognitionCustomCommands::GetRuleValidity(TGrammarID aGrammarID, TRuleID aRuleID, 
+				TBool& aValid)
+	{
+	TSrsRuleValidityPckg pckg(TSrsRuleValidity(aGrammarID, aRuleID, &aValid));
+	
+	TInt err =  iController.CustomCommandSync(iDestinationPckg, 
+												ESrGetRuleValidity, 
+												pckg,
+												KNullDesC8);
+	return err;	
+
+	}
+EXPORT_C TInt RSpeechRecognitionCustomCommands::GetUtteranceDuration(TModelBankID aModelBankID, 
+			TModelID aModelID, TTimeIntervalMicroSeconds32& aDuration)
+	{
+	TSrsGetUtteranceDurationPckg pckg(TSrsGetUtteranceDuration(aModelBankID, aModelID, &aDuration));
+	
+	TInt err =  iController.CustomCommandSync(iDestinationPckg, 
+												ESrUtteranceDuration, 
+												pckg,
+												KNullDesC8);
+	return err;	
+
+	}
+
+EXPORT_C TInt RSpeechRecognitionCustomCommands::LoadGrammar(TGrammarID aGrammarID)
+	{
+	TSrsGrammarIDPckg pckg(aGrammarID);
+	TInt err =  iController.CustomCommandSync(iDestinationPckg, 
+												ESrLoadGrammar, 
+												pckg,
+												KNullDesC8);
+												
+	return err;
+	}
+
+EXPORT_C TInt RSpeechRecognitionCustomCommands::LoadLexicon(TLexiconID aLexiconID)
+	{
+	TSrsLexiconIDPckg pckg(aLexiconID);
+	TInt err =  iController.CustomCommandSync(iDestinationPckg, 
+												ESrLoadLexicon, 
+												pckg,
+												KNullDesC8);
+												
+	return err;
+	}
+
+EXPORT_C TInt RSpeechRecognitionCustomCommands::LoadModels(TModelBankID aModelBankID)
+	{
+	TSrsModelBankIDPckg pckg(aModelBankID);
+	TInt err =  iController.CustomCommandSync(iDestinationPckg, 
+												ESrLoadModels, 
+												pckg,
+												KNullDesC8);
+												
+	return err;
+	}
+
+EXPORT_C TInt RSpeechRecognitionCustomCommands::PlayUtterance(TModelBankID aModelBankID, 
+				TModelID aModelID)
+	{
+	TSrsPlayUtterancePckg pckg(TSrsPlayUtterance(aModelBankID, aModelID));
+	
+	TInt err =  iController.CustomCommandSync(iDestinationPckg, 
+												ESrPlayUtterance, 
+												pckg,
+												KNullDesC8);
+	return err;	
+
+	}
+
+EXPORT_C TInt RSpeechRecognitionCustomCommands::Recognize(CSDClientResultSet& aResultSet)
+	{
+	TRAPD(err, DoRecognizeL(aResultSet));
+	return err;
+	}
+
+
+EXPORT_C TInt RSpeechRecognitionCustomCommands::Record(TTimeIntervalMicroSeconds32 aRecordTime)
+	{
+	TSrsTimeIntervalMicroSeconds32Pckg pckg(aRecordTime);
+	
+	TInt err =  iController.CustomCommandSync(iDestinationPckg,
+												ESrRecord,
+												pckg,
+												KNullDesC8);
+	return err;	
+	}
+
+EXPORT_C TInt RSpeechRecognitionCustomCommands::RemoveGrammar(TGrammarID aGrammarID)
+	{
+	TSrsGrammarIDPckg pckg(aGrammarID);
+	TInt err =  iController.CustomCommandSync(iDestinationPckg, 
+												ESrRemoveGrammar, 
+												pckg,
+												KNullDesC8);
+												
+	return err;
+	}
+
+EXPORT_C TInt RSpeechRecognitionCustomCommands::RemoveLexicon(TLexiconID aLexiconID)
+	{
+	TSrsLexiconIDPckg pckg(aLexiconID);
+	TInt err =  iController.CustomCommandSync(iDestinationPckg, 
+												ESrRemoveLexicon, 
+												pckg,
+												KNullDesC8);
+												
+	return err;
+	}
+
+EXPORT_C TInt RSpeechRecognitionCustomCommands::RemoveModelBank(TModelBankID aModelBankID)
+	{
+	TSrsModelBankIDPckg pckg(aModelBankID);
+	TInt err =  iController.CustomCommandSync(iDestinationPckg, 
+												ESrRemoveModelBank, 
+												pckg,
+												KNullDesC8);
+												
+	return err;
+	}
+
+EXPORT_C TInt RSpeechRecognitionCustomCommands::RemoveModel(TModelBankID aModelBankID, 
+							TModelID aModelID)
+	{
+	TSrsModelBankIDPckg pckgModelBankID(aModelBankID);
+	TSrsModelIDPckg pckgModelID(aModelID);
+	TInt err =  iController.CustomCommandSync(iDestinationPckg, 
+												ESrRemoveModel, 
+												pckgModelBankID,
+												pckgModelID);
+												
+	return err;
+	}
+EXPORT_C TInt RSpeechRecognitionCustomCommands::RemovePronunciation(TLexiconID aLexiconID, 
+							TPronunciationID aPronunciationID)
+	{
+	TSrsLexiconIDPckg pckgLexiconID(aLexiconID);
+	TSrsPronunciationIDPckg pckgPronunciationID(aPronunciationID);
+	TInt err =  iController.CustomCommandSync(iDestinationPckg, 
+												ESrRemovePronunciation, 
+												pckgLexiconID,
+												pckgPronunciationID);
+												
+	return err;
+	}
+
+EXPORT_C TInt RSpeechRecognitionCustomCommands::RemoveRule(TGrammarID aGrammarID, TRuleID aRuleID)
+	{
+	TSrsGrammarIDPckg pckgGrammarID(aGrammarID);
+	TSrsRuleIDPckg pckgRuleID(aRuleID);
+	TInt err =  iController.CustomCommandSync(iDestinationPckg, 
+												ESrRemoveRule, 
+												pckgGrammarID,
+												pckgRuleID);
+												
+	return err;
+	}
+
+EXPORT_C TInt RSpeechRecognitionCustomCommands::StartRecSession(TRecognitionMode aMode)
+	{
+	TSrsRecognitionModePckg pckg(aMode);
+	TInt err =  iController.CustomCommandSync(iDestinationPckg, 
+												ESrStartRecSession, 
+												pckg,
+												KNullDesC8);
+												
+	return err;
+	
+	}
+
+
+EXPORT_C TInt RSpeechRecognitionCustomCommands::Train(TModelBankID aModelBankID, TModelID& aModelID)
+	{
+	TSrsModelBankIDPckg pckgModelBankID(aModelBankID);
+	TSrsModelIDPtrPckg pckgModelID(&aModelID);
+	TInt err =  iController.CustomCommandSync(iDestinationPckg, 
+												ESrTrain, 
+												pckgModelBankID,
+												pckgModelID);
+												
+	return err;
+	}
+EXPORT_C TInt RSpeechRecognitionCustomCommands::UnloadRule(TGrammarID aGrammarID, TRuleID aRuleID)
+	{
+	TSrsGrammarIDPckg pckgGrammarID(aGrammarID);
+	TSrsRuleIDPckg pckgRuleID(aRuleID);
+	TInt err =  iController.CustomCommandSync(iDestinationPckg, 
+												ESrUnloadRule, 
+												pckgGrammarID,
+												pckgRuleID);
+												
+	return err;
+	}
+
+EXPORT_C TInt RSpeechRecognitionCustomCommands::LoadEngineParameters(const RArray<TInt>& aParameterId, 
+		const RArray<TInt>& aParameterValue)
+	{
+	TRAPD(err, DoLoadEngineParametersL(aParameterId, aParameterValue));
+	return err;	
+	}
+	
+void RSpeechRecognitionCustomCommands::DoLoadEngineParametersL(const RArray<TInt>& aParameterId, 
+		const RArray<TInt>& 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,param1); //param1, param2	
+	}
+
+	
+	
+EXPORT_C void RSpeechRecognitionCustomCommands::GetPronunciationIDArrayL(RArray<TPronunciationID>& aPronunciationIDs)
+	{
+	TPckgBuf<TInt> pckgSize;
+	
+	User::LeaveIfError(iController.CustomCommandSync(iDestinationPckg, 
+												ESrGetPronunciationIDArraySize, 
+												KNullDesC8,
+												KNullDesC8,
+												pckgSize));
+												
+	HBufC8* buf = HBufC8::NewLC(pckgSize()*sizeof(TPronunciationID));
+	TPtr8 ptr = buf->Des();
+
+	User::LeaveIfError(iController.CustomCommandSync(iDestinationPckg, 
+													 ESrGetPronunciationIDArrayContents,
+													 KNullDesC8,
+													 KNullDesC8,
+													 ptr));
+													 
+	RDesReadStream stream(ptr);
+	CleanupClosePushL(stream);
+
+	for (TInt i=0; i<pckgSize(); i++)
+		{
+		User::LeaveIfError(aPronunciationIDs.Append(stream.ReadInt32L()));
+		}
+
+	CleanupStack::PopAndDestroy(2);//stream, buf
+		
+	}
+	
+	
+EXPORT_C void RSpeechRecognitionCustomCommands::GetRuleIDArrayL(RArray<TRuleID>& aRuleIDs)
+	{
+	TPckgBuf<TInt> pckgSize;
+	
+	User::LeaveIfError(iController.CustomCommandSync(iDestinationPckg, 
+												ESrGetRuleIDArraySize, 
+												KNullDesC8,
+												KNullDesC8,
+												pckgSize));
+												
+	HBufC8* buf = HBufC8::NewLC(pckgSize()*sizeof(TRuleID));
+	TPtr8 ptr = buf->Des();
+
+	User::LeaveIfError(iController.CustomCommandSync(iDestinationPckg, 
+													 ESrGetRuleIDArrayContents,
+													 KNullDesC8,
+													 KNullDesC8,
+													 ptr));
+													 
+	RDesReadStream stream(ptr);
+	CleanupClosePushL(stream);
+
+	for (TInt i=0; i<pckgSize(); i++)
+		{
+		User::LeaveIfError(aRuleIDs.Append(stream.ReadInt32L()));
+		}
+
+	CleanupStack::PopAndDestroy(2);//stream, buf
+	}
+
+	
+EXPORT_C void RSpeechRecognitionCustomCommands::GetModelIDArrayL(RArray<TModelID>& aModelIDs)
+	{
+	TPckgBuf<TInt> pckgSize;
+	
+	User::LeaveIfError(iController.CustomCommandSync(iDestinationPckg, 
+												ESrGetModelIDArraySize, 
+												KNullDesC8,
+												KNullDesC8,
+												pckgSize));
+												
+	HBufC8* buf = HBufC8::NewLC(pckgSize()*sizeof(TModelID));
+	TPtr8 ptr = buf->Des();
+
+	User::LeaveIfError(iController.CustomCommandSync(iDestinationPckg, 
+													 ESrGetModelIDArrayContents,
+													 KNullDesC8,
+													 KNullDesC8,
+													 ptr));
+													 
+	RDesReadStream stream(ptr);
+	CleanupClosePushL(stream);
+
+	for (TInt i=0; i<pckgSize(); i++)
+		{
+		User::LeaveIfError(aModelIDs.Append(stream.ReadInt32L()));
+		}
+
+	CleanupStack::PopAndDestroy(2);//stream, buf
+	}
+	
+	
+EXPORT_C void RSpeechRecognitionCustomCommands::GetResultSetL(CSDClientResultSet& aResultSet)
+	{
+	TPckgBuf<TInt> pckgSize;
+	
+	User::LeaveIfError(iController.CustomCommandSync(iDestinationPckg, 
+												ESrGetClientResultSetSize, 
+												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, buf);//buf, stream
+	}
+	
+void RSpeechRecognitionCustomCommands::DoRecognizeL(CSDClientResultSet& aResultSet)
+	{
+	CBufFlat* dataCopyBuffer = CBufFlat::NewL(KExpandSize);
+	CleanupStack::PushL(dataCopyBuffer);
+	RBufWriteStream stream;
+	stream.Open(*dataCopyBuffer);
+	CleanupClosePushL(stream);
+	
+	aResultSet.ExternalizeL(stream);
+	
+	User::LeaveIfError(iController.CustomCommandSync(iDestinationPckg,
+												ESrRecognize,
+												dataCopyBuffer->Ptr(0),
+												KNullDesC8));
+											
+	CleanupStack::PopAndDestroy(2); //stream,dataCopyBuffer
+	}
+
+	
+void RSpeechRecognitionCustomCommands::DoGetEnginePropertiesL(const RArray<TInt>& aPropertyId, 
+				RArray<TInt>& 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,param1);//param1, buf
+	}
+
+CBufFlat* RSpeechRecognitionCustomCommands::ExternalizeIntArrayL(const RArray<TInt>& 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.Count();i++)
+		stream.WriteUint32L(aArray[i]);
+
+	CleanupStack::PopAndDestroy(1); //stream
+	CleanupStack::Pop(); //dataCopyBuffer;
+	return dataCopyBuffer;	
+	}
+	
+void RSpeechRecognitionCustomCommands::InternalizeIntArrayL(TDes8& aDes, TInt aNumberElements, RArray<TInt>& aArray)
+	{
+	RDesReadStream stream(aDes);
+	CleanupClosePushL(stream);
+
+	for (TInt i=0; i<aNumberElements; i++)
+		{
+		User::LeaveIfError(aArray.Append(stream.ReadInt32L()));
+		}
+
+	CleanupStack::PopAndDestroy();//stream
+	}
+	
+EXPORT_C TInt RSpeechRecognitionCustomCommands::GetAllModelBankIDs()
+	{
+	TInt err =  iController.CustomCommandSync(iDestinationPckg, 
+												ESrGetAllModelBankIDs, 
+												KNullDesC8,
+												KNullDesC8);
+												
+	return err;
+	}
+
+EXPORT_C TInt RSpeechRecognitionCustomCommands::GetAllLexiconIDs()
+	{
+	TInt err = iController.CustomCommandSync(iDestinationPckg, 
+												ESrGetAllLexiconIDs, 
+												KNullDesC8,
+												KNullDesC8);
+	return err;
+												
+	}
+
+EXPORT_C TInt RSpeechRecognitionCustomCommands::GetAllGrammarIDs()
+	{
+	TInt err =  iController.CustomCommandSync(iDestinationPckg, 
+												ESrGetAllGrammarIDs, 
+												KNullDesC8,
+												KNullDesC8);
+												
+	return err;
+	}
+	
+EXPORT_C TInt RSpeechRecognitionCustomCommands::GetAllClientModelBankIDs()
+	{
+	TInt err =  iController.CustomCommandSync(iDestinationPckg, 
+												ESrGetAllClientModelBankIDs, 
+												KNullDesC8,
+												KNullDesC8);
+												
+	return err;
+	}
+
+EXPORT_C TInt RSpeechRecognitionCustomCommands::GetAllClientLexiconIDs()
+	{
+	TInt err = iController.CustomCommandSync(iDestinationPckg, 
+												ESrGetAllClientLexiconIDs, 
+												KNullDesC8,
+												KNullDesC8);
+	return err;
+												
+	}
+
+EXPORT_C TInt RSpeechRecognitionCustomCommands::GetAllClientGrammarIDs()
+	{
+	TInt err =  iController.CustomCommandSync(iDestinationPckg, 
+												ESrGetAllClientGrammarIDs, 
+												KNullDesC8,
+												KNullDesC8);
+												
+	return err;
+	}
+	
+	
+EXPORT_C void RSpeechRecognitionCustomCommands::GetModelBankIDArrayL(RArray<TModelBankID>& aModelBankIDs)
+	{
+	TPckgBuf<TInt> pckgSize;
+	
+	User::LeaveIfError(iController.CustomCommandSync(iDestinationPckg, 
+												ESrGetModelBankIDArraySize, 
+												KNullDesC8,
+												KNullDesC8,
+												pckgSize));
+												
+	HBufC8* buf = HBufC8::NewLC(pckgSize()*sizeof(TModelID));
+	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(stream.ReadInt32L()));
+		}
+
+	CleanupStack::PopAndDestroy(2);//stream, buf
+	}
+
+
+EXPORT_C void RSpeechRecognitionCustomCommands::GetGrammarIDArrayL(RArray<TGrammarID>& aGrammarIDs)
+	{
+	TPckgBuf<TInt> pckgSize;
+	
+	User::LeaveIfError(iController.CustomCommandSync(iDestinationPckg, 
+												ESrGetGrammarIDArraySize, 
+												KNullDesC8,
+												KNullDesC8,
+												pckgSize));
+												
+	HBufC8* buf = HBufC8::NewLC(pckgSize()*sizeof(TGrammarID));
+	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(stream.ReadInt32L()));
+		}
+
+	CleanupStack::PopAndDestroy(2);//stream, buf
+	}
+
+
+EXPORT_C void RSpeechRecognitionCustomCommands::GetLexiconIDArrayL(RArray<TLexiconID>& aLexiconIDs)
+	{
+	TPckgBuf<TInt> pckgSize;
+	
+	User::LeaveIfError(iController.CustomCommandSync(iDestinationPckg, 
+												ESrGetLexiconIDArraySize, 
+												KNullDesC8,
+												KNullDesC8,
+												pckgSize));
+												
+	HBufC8* buf = HBufC8::NewLC(pckgSize()*sizeof(TLexiconID));
+	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(stream.ReadInt32L()));
+		}
+
+	CleanupStack::PopAndDestroy(2);//stream, buf
+	}
+
+
+enum TDllReason {};
+EXPORT_C TInt E32Dll(TDllReason /* aReason */)	
+	{
+	return (KErrNone);
+	}
+