--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/srsf/nssvasapi/nssvasrecognition/inc/nssvascrecognitionhandler.h Wed Sep 01 12:29:17 2010 +0100
@@ -0,0 +1,504 @@
+/*
+* Copyright (c) 2003-2007 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: The CNssRecognitionHandler class performs the recognition function.
+*
+*/
+
+
+#ifndef NSSVASCRECOGNITIONHANDLER_H
+#define NSSVASCRECOGNITIONHANDLER_H
+
+// INCLUDES
+#include <nsssispeechrecognitionutilityobserver.h>
+#include "nssvasmrecognitionhandler.h"
+#include "nssvasccontextmgr.h"
+#include "nssvasmadaptationeventhandler.h"
+
+// FORWARD DECLARATIONS
+
+class CNssSiUtilityWrapper;
+class CNssTagMgr;
+class CNssVASDBBuilder;
+class CNssAdaptationItem;
+
+// CLASS DECLARATION
+
+/**
+*
+* The CNssRecognitionHandler class performs the recognition function.
+*
+* @lib NssVASApi.lib
+* @since 2.8
+*/
+
+class CNssRecognitionHandler :public CBase,
+ public MNssRecognitionHandler,
+ public MSISpeechRecognitionUtilityObserver
+{
+
+ public: //enum
+
+ enum TNssRState
+ {
+ EVasIdle,
+ EVasWaitingForLoadModelsComplete,
+ EVasWaitingForLoadLexiconComplete,
+ EVasWaitingForLoadGrammarComplete,
+ EVasWaitingForRecognitionReadyRecognitionInit,
+ EVasWaitingForRecognize,
+ EVasWaitingForRecordStarted,
+ EVasWaitingForEouDetected,
+ EVasWaitingForRecognitionComplete,
+ EVasWaitingForSelectTag,
+ EVasWaitingForUnloadRuleComplete,
+ EVasWaitingForRecognitionReadyRejectTag,
+ EVasDirectAdaptation,
+ EVasIdleAdaptation,
+ EVasCorrectingPluginDatabase
+ };
+
+
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ static CNssRecognitionHandler* NewL();
+
+ /**
+ * Two-phased constructor.
+ */
+ static CNssRecognitionHandler* NewLC();
+
+ /**
+ * Destructor.
+ */
+ virtual ~CNssRecognitionHandler();
+
+ public: // Functions from base classes
+
+ /**
+ * Perform initialization for the recognize funtion.
+ * @since 2.0
+ * @param aInitCompleteHandler The event call back to receive recognize
+ * init events.
+ * @param aRecognitionVocabulary List of context, which are active in recognition.
+ * @param aMaxResults The maximum number of voice tags to be recognized.
+ * @return TNssRecognitionResult Return indicating request is valid.
+ */
+ TNssRecognitionResult RecognizeInitL(
+ MNssRecognizeInitCompleteHandler* aInitCompleteHandler,
+ const CArrayPtrFlat<MNssContext>& aRecognitionVocabulary,
+ TInt aMaxResults);
+ /**
+ * Perform initialization for the recognize funtion. Automatically loads
+ * the commands and the names as recognition vocabulary.
+ * @since 2.0
+ * @param aInitCompleteHandler The event call back to receive recognize
+ * init events.
+ * @param aMaxResults The maximum number of voice tags to be recognized.
+ * @return TNssRecognitionResult Return indicating request is valid.
+ */
+ TNssRecognitionResult RecognizeInitL(
+ MNssRecognizeInitCompleteHandler* aInitCompleteHandler,
+ TInt aMaxResults );
+ /**
+ * From MNssRecognitionHandler Interface
+ * Perform the recognize function.
+ * @since 2.0
+ * @param aEventHandler The event call back to receive recognize events.
+ * @return TNssRecognitionResult Return indicating request is valid.
+ */
+ TNssRecognitionResult Recognize( MNssRecognizeEventHandler* aEventHandler );
+
+ /**
+ * From MNssRecognitionHandler
+ * Starts sampling already before RecognizeInitL and Recognize calls.
+ * This is used to ensure that there is no delay between user notification
+ * and sampling start.
+ *
+ * @since 3.2
+ * @param aInitCompleteHandler Callback handler
+ * @return Return indicating request is valid.
+ */
+ TNssRecognitionResult PreStartSampling( MNssRecognizeInitCompleteHandler* aInitCompleteHandler );
+
+ /**
+ * From MNssRecognitionHandler Interface
+ * Initiate the Select Tag event.
+ * @since 2.0
+ * @param aClientTag The voice tag which was selected. The tag is owned
+ * by the client.
+ * @return TNssRecognitionResult Return indicating request is valid.
+ */
+ TNssRecognitionResult SelectTagL( MNssTag* aClientTag );
+
+ /**
+ * From MNssRecognitionHandler Interface
+ * Initiate the Select Tag event.
+ * @since 2.0
+ * @param aClientTag The voice tag which was selected. The tag is owned
+ * by the client.
+ * @param aNotifyHandlers If false, the global context handlers won't be notified.
+ * @return TNssRecognitionResult Return indicating request is valid.
+ */
+ TNssRecognitionResult SelectTagL( MNssTag* aClientTag, TBool aNotifyHandlers );
+
+ /**
+ * Request Reject Tag, i.e. blacklisting.
+ * @since 2.0
+ * @param aClientTagList The list of voice tags which is to be rejected, i.e.
+ * blacklisted. The tag list is owned by the client.
+ * @return TNssRecognitionResult Return indicating request is valid.
+ */
+ TNssRecognitionResult RejectTagL(
+ MNssRejectTagCompleteHandler* aRejectTagCompleteHandler,
+ CArrayPtrFlat<MNssTag>* aClientTagList );
+
+ /**
+ * From MNssRecognitionHandler Interface
+ * Cancel the last recognition function.
+ * @since 2.0
+ * @param -
+ * @return TNssRecognitionResult Return indicating request is valid.
+ */
+ TNssRecognitionResult Cancel();
+
+ /**
+ * From MNssRecognitionHandler Interface
+ * Get the adaptation item to adapt, when you know whether
+ * the result was correct or not.
+ * @since 2.0
+ * @param -
+ * @return MNssAdaptationItem The adaptation item.
+ */
+ MNssAdaptationItem* GetAdaptationItemL();
+
+ /**
+ * From MSpeechRecognitionEvent Interface
+ * Handle Speech Recognition Utility event
+ * @since 2.0
+ * @param aEvent The event callback to receive Speech Recognition Utility
+ * events.
+ * @param aResult The result value associated with aEvent.
+ * @return -
+ */
+ void MsruoEvent( TUid aEvent, TInt aResult );
+
+ public: // New functions
+
+ /**
+ * AdaptL - called by adaptation item. Adapts the acoustic models.
+ * @since 2.0
+ * @return None
+ */
+ void AdaptL( MNssAdaptationEventHandler* aCallback,
+ CSIClientResultSet* aResultSet,
+ TInt aCorrect );
+
+ /**
+ * RemoveAdaptationItem - When an adaptation item is destroyed,
+ * it signals to its "host" recognition handler. This way, the host
+ * knows to remove it from the list of active adaptation items.
+ */
+ void RemoveAdaptationItem( CNssAdaptationItem* anItem );
+
+ private:
+
+ /**
+ * Constructor.
+ */
+ CNssRecognitionHandler();
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL();
+
+ /**
+ * Perform required cleanup to get back to the EIdle state and issue the
+ * HandleRecognizeInitError event with RecognizeInitFailed error code
+ * @return void
+ */
+ void CleanupRecognizeInitFailed();
+
+ /**
+ * Perform required cleanup to get back to the EIdle state and issue the
+ * HandleRecognizeError event with RecognizeFailed error code
+ * @return void
+ */
+ void CleanupRecognizeFailed();
+
+ /**
+ * Perform required cleanup to get back to the EIdle state and issue the
+ * HandleRejectTagError event with RejectTagFailed error code
+ * @return void
+ */
+ void CleanupRejectTagFailed();
+
+ /**
+ * Perform required cleanup to get back to the EIdle state
+ * @return void
+ */
+ void Cleanup();
+
+ /**
+ * Gracefully terminate and delete the SRF object, iSrsApi.
+ * @return void
+ */
+ void DeleteSrf();
+
+ /**
+ * Delete context objects from iContextList
+ * @return void
+ */
+ void ClearContextList();
+
+ /**
+ * Delete the tag objects from iTagList
+ * @return void
+ */
+ void ClearTagList();
+
+ /**
+ * Delete the TRuleEntry objects from iRuleList
+ * @return void
+ */
+ void ClearRuleList();
+
+ /**
+ * Delete entries from iContextStatus
+ * @return void
+ */
+ void ClearContextStatus();
+
+ /**
+ * Cleanup and determine the correct event handler
+ * @return void
+ */
+ void UnexpectedEvent();
+
+ /**
+ * Handle LoadModelsComplete SRF event
+ * @return void
+ */
+ void DoLoadModelsComplete();
+
+ /**
+ * Handle LoadModelsFailed SRF event
+ * @return void
+ */
+ void DoLoadModelsFailed();
+
+ /**
+ * Handle LoadLexiconComplete SRF event
+ * @return void
+ */
+ void DoLoadLexiconComplete();
+
+ /**
+ * Handle LoadLexiconFailed SRF event
+ * @return void
+ */
+ void DoLoadLexiconFailed();
+
+ /**
+ * Handle LoadGrammarComplete SRF event
+ * @return void
+ */
+ void DoLoadGrammarComplete();
+
+ /**
+ * Handle LoadGrammarFailed SRF event
+ * @return void
+ */
+ void DoLoadGrammarFailed();
+
+ /**
+ * Handle RecognitionReady SRF event
+ * @return void
+ */
+ void DoRecognitionReady();
+
+ /**
+ * Handle RecognitionComplete SRF event
+ * @return void
+ */
+ void DoRecognitionComplete();
+
+ /**
+ * Handle RecognitionFailedNoSpeech, RecognitionFailedTooEarly,
+ * RecognitionFailedTooLong, and RecognitionFailedTooShort SRF events
+ * @param aResult The Msruo event Result code.
+ * @return void
+ */
+ void DoRecognitionFailedNoSpeech( TInt aResult );
+
+ /**
+ * Handle RecognitionFailedNoMatch SRF event
+ * @return void
+ */
+ void DoRecognitionFailedNoMatch();
+
+ /**
+ * Handle RecognitionFailed SRF event
+ * @return void
+ */
+ void DoRecognitionFailed();
+
+ /**
+ * Handle RecordStarted SRF event
+ * @return void
+ */
+ void DoRecordStarted();
+
+ /**
+ * Handle RecordFailed SRF event
+ * @param aResult The Msruo event Result code.
+ * @return void
+ */
+ void DoRecordFailed( TInt aResult );
+
+ /**
+ * Handle EouDetected SRF event
+ * @return void
+ */
+ void DoEouDetected();
+
+ /**
+ * Handle UnloadRuleComplete SRF event
+ * @return void
+ */
+ void DoUnloadRuleComplete();
+
+ /**
+ * Handle UnloadRuleFailed SRF event
+ * @return void
+ */
+ void DoUnloadRuleFailed();
+
+ /**
+ * Handle PreStartSampling SRSF event
+ */
+ void DoPreStartSamplingComplete( TInt aError );
+
+ /**
+ * Handle Tag Check for contexts
+ * @return void
+ */
+ void HandleTagCheckL();
+
+ /**
+ * Create the SRF object, iSrsApi.
+ * @return void
+ */
+ void CreateSrfL();
+
+ /**
+ * Perform those RecognizeInitL tasks,
+ * which do not depend on vocabulary.
+ */
+ MNssRecognitionHandler::TNssRecognitionResult CommonRecognizeInitL(
+ MNssRecognizeInitCompleteHandler* aInitCompleteHandler,
+ TInt aMaxResults );
+
+
+ struct TRuleEntry
+ {
+ TUint32 ruleId;
+ TUint32 grammarId;
+ };
+
+
+ private: // Data
+
+ // Pointer to SRS Utility object.
+ CNssSiUtilityWrapper* iSrsApi;
+
+ // Pointer to SRS to ClientResultSet object, i.e. returned SRS data.
+ CSIClientResultSet* iSIClientResultSet;
+
+ // Pointer to RecognizeInit Complete Event Handler object.
+ MNssRecognizeInitCompleteHandler* iInitCompleteHandler;
+
+ // Pointer to Recognize Complete Event Handler object.
+ MNssRecognizeEventHandler* iEventHandler;
+
+ // Pointer to RejectTag Complete Event Handler object.
+ MNssRejectTagCompleteHandler* iRejectTagCompleteHandler;
+
+ // Pointer to VAS Database Builder object.
+ CNssVASDBBuilder* iVasDBBuilder;
+
+ // Pointer to Context Manager object.
+ CNssContextMgr* iContextMgr;
+
+ // Pointer to Context List object.
+ TMNssContextList* iContextList;
+
+ // Pointer to Tag Manager object.
+ CNssTagMgr* iTagMgr;
+
+ // Pointer to Tag List object.
+ CArrayPtrFlat<CNssTag>* iTagList;
+
+ // Pointer to Rule List object - used during RejectTag
+ CArrayFixFlat<TRuleEntry>* iRuleList;
+
+ // Context Status Array - True indicates tags for context exist
+ // False indicates there are not tags in the context
+ CArrayFixFlat<TBool>* iContextStatus;
+
+ // Current Loop Counter used across asynch Context logic
+ // during RecognizeInit
+ TInt iContextCurrentLoopCount;
+
+ // Number of contexts - used across asynch Context logic
+ // during RecognizeInit
+ TInt iContextCount;
+
+ // Current Loop Counter used across asynch Result (tag) logic
+ // during Recognize
+ TInt iTagCurrentLoopCount;
+
+ // Number of returned Results (tags) - used across asynch tag logic
+ // during Recognize
+ TInt iTagCount;
+
+ // Current Loop Counter used across asynch RejectTag logic
+ TInt iRejectTagCurrentLoopCount;
+
+ // Number of rejected tags - used across asynch RejectTag logic
+ TInt iRejectTagCount;
+
+ // Maximum number of voice tags to be recognized, requested by client
+ TInt iMaxResults;
+
+ // The current recognition state.
+ TNssRState iRState;
+
+ // Array of adaptation items. Each MNssAdaptationItem is
+ // internally linked to some "host" CNssRecognitionHandler.
+ RPointerArray<CNssAdaptationItem> iAdaptItemArray;
+
+ // Callback after adaptation
+ MNssAdaptationEventHandler* iAdaptationHandler;
+
+ // Wait loop
+ CActiveSchedulerWait iWait;
+};
+
+#endif // NSSVASCRECOGNITIONHANDLER_H
+
+// End of File