diff -r 000000000000 -r 29b1cd4cb562 bluetooth/btexample/testui/BTTextNotifiers/inc/BTTextNotifiers.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetooth/btexample/testui/BTTextNotifiers/inc/BTTextNotifiers.h Fri Jan 15 08:13:17 2010 +0200 @@ -0,0 +1,913 @@ +// Copyright (c) 2000-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: +// + +/** + @file + @internalComponent +*/ + +#ifndef BTTEXTNOTIFIERS_H +#define BTTEXTNOTIFIERS_H + +#include +#include +#include +#include // contains definitions of standard Bluetooth notifiers +#include +#include +#include +#include // contains definitions of standard Bluetooth secuirty notfiers (pre-SSP) +#include // for KBTPanDeviceSelectionNotifierUid + +const TUid KScreenOutputChannel ={0x00000666}; + +/** +The maximum number of devices to show on screen at once +@internalComponent +*/ +const TInt KMaxDeviceRows=12; + +typedef RPointerArray RBTDevices; + +enum TRegistryState +/** +The state of the registry lookup to get info about a device +@internalComponent +*/ + { + EFinding, //< finding device details in registry + EGetting, //< getting PIN from console + }; + +/** +Class for containing console utility methods used by BTTextNotifiers. +*/ +class BTTextNotifiersConsole + { +public: + static CConsoleBase* AutoSizeNewL(const TDesC& aTitle, TSize aSize); + }; + + + +// ----------------- +// PIN Code Entry UI +// ----------------- + +/** +Mixing for receiving notifications about PIN code entry from the UI. +*/ +class MBTPinCodeEntryObserver + { +public: + virtual void MbpceoPinInputComplete(const TBTPinCode& aPin, TInt aReason) = 0; + }; + + +class CBTManPinNotifierEngine; + +/** +Notifier to get a PIN for pairing - This is the legacy version (i.e. not SSP aware). +@internalTechnology +*/ +NONSHARABLE_CLASS(CBTManPinNotifier) + : public CBase + , public MNotifierBase2 + , public MBTPinCodeEntryObserver + { +public: + static CBTManPinNotifier* NewLC(); + +private: // from MNotifierBase2 + void Release(); + TNotifierInfo RegisterL(); + TNotifierInfo Info() const; + TPtrC8 StartL(const TDesC8& aBuffer); + void StartL(const TDesC8& aBuffer, TInt aReplySlot, const RMessagePtr2& aMessage); + void Cancel(); + TPtrC8 UpdateL(const TDesC8& aBuffer); + +private: // from MBTPinCodeEntryObserver + void MbpceoPinInputComplete(const TBTPinCode& aPin, TInt aReason); + +private: + CBTManPinNotifier(); + void ConstructL(); + ~CBTManPinNotifier(); + +private: + TNotifierInfo iInfo; + RMessage2 iMessage; + TInt iReplySlot; + TBool iNeedToCompleteMessage; + CBTManPinNotifierEngine* iEngine; + }; + + +#ifndef __BT_TEXT_NOTIFIERS_NO_SSP__ +/** +Notifier to get a PIN for pairing - This is the SSP aware version. +@internalTechnology +*/ +NONSHARABLE_CLASS(CBTUIPinCodeEntry) + : public CBase + , public MNotifierBase2 + , public MBTPinCodeEntryObserver + { +public: + static CBTUIPinCodeEntry* NewLC(); + +private: // from MNotifierBase2 + void Release(); + TNotifierInfo RegisterL(); + TNotifierInfo Info() const; + TPtrC8 StartL(const TDesC8& aBuffer); + void StartL(const TDesC8& aBuffer, TInt aReplySlot, const RMessagePtr2& aMessage); + void Cancel(); + TPtrC8 UpdateL(const TDesC8& aBuffer); + +private: // from MBTPinCodeEntryObserver + void MbpceoPinInputComplete(const TBTPinCode& aPin, TInt aReason); + +private: + CBTUIPinCodeEntry(); + void ConstructL(); + ~CBTUIPinCodeEntry(); + +private: + TNotifierInfo iInfo; + RMessage2 iMessage; + TInt iReplySlot; + TBool iNeedToCompleteMessage; + CBTManPinNotifierEngine* iEngine; + }; + +#endif // __BT_TEXT_NOTIFIERS_NO_SSP__ + + +class CHostResolverCacheProdder; +class CBTGetPinFromConsole; + +NONSHARABLE_CLASS(CBTManPinNotifierEngine) : public CActive + { +public: + static CBTManPinNotifierEngine* NewL(MBTPinCodeEntryObserver& aObserver); + ~CBTManPinNotifierEngine(); + + void StartLegacyPinEntryL(const TDesC8& aBuffer); + void StartPinEntryL(const TDesC8& aBuffer); + void Stop(); + + TPtrC8 LegacyUpdateL(const TDesC8& aBuffer); + TPtrC8 UpdateL(const TDesC8& aBuffer); + + void HostResolverCacheInfoReceived(const TNameEntry& aResult); + void PinInputComplete(const TBTPinCode& aPin, TInt aReason); + +private: + CBTManPinNotifierEngine(MBTPinCodeEntryObserver& aObserver); + void DoStartPinEntryL(); + void StoreNameUpdateL(const TDesC8& aBuffer); + void PerformNameUpdateL(TInt aResult); + +private: // from CActive + void RunL(); + void DoCancel(); + void ConstructL(); + +private: + MBTPinCodeEntryObserver& iObserver; // the notifier to signal when we have a PIN + + CHostResolverCacheProdder* iHostResolverCacheProdder; + CBTDevice* iDevice; // the device for which we're prompting for a PIN + CBTGetPinFromConsole* iGetPinFromConsole; // responsible for getting the PIN from the user + RBTRegServ iRegistry; + RBTRegistry iRegistryView; + TBTRegistrySearch iRegistrySearch; + TRegistryState iRegistryState; + CBTRegistryResponse* iResponse; + + TBTDevAddr iDeviceAddress; + TBTDeviceName iDeviceName; + TUint iPasskeyMinLength; + TBool iLocallyInitiated; + TBool iStrongKeyRequired; + TUint iRecommendedPasskeyMinLength; + }; + +NONSHARABLE_CLASS(CHostResolverCacheProdder): public CActive +/** +Get CoD from HostResolver class +@internalComponent +*/ + { +public: + static CHostResolverCacheProdder* NewL(CBTManPinNotifierEngine* aParent); + static CHostResolverCacheProdder* NewLC(CBTManPinNotifierEngine* aParent); + ~CHostResolverCacheProdder(); + TInt Start(const TBTDevAddr& aBDAddr); + +private: + CHostResolverCacheProdder(CBTManPinNotifierEngine* aParent); + void DoCancel(){iHostResolver.Cancel();}; + void RunL(); + +private: + CBTManPinNotifierEngine* iParent; + RHostResolver iHostResolver; + TNameEntry iResult; + TInquirySockAddr iAddr; + }; + +/** +Display a console and get a PIN response +@internalComponent +*/ +NONSHARABLE_CLASS(CBTGetPinFromConsole) + : public CActive + { +public: + static CBTGetPinFromConsole* NewL(CBTManPinNotifierEngine* aParent, const CBTDevice& aDevice, + TUint aPasskeyMinLength, TBool aInternallyInitiated, TBool aStringKeyRequired, + TUint aRecommendedPasskeyMinLength); + ~CBTGetPinFromConsole(); + + void GetPinL(); + void DeviceNameRetrieved(const TPtrC aName, TInt aResult); + void CoDRetrieved(TBTDeviceClass& aCoD); + +private: // from CActive + void RunL(); + void DoCancel(); + +#ifdef __BT_TEXT_NOTIFIERS_AUTO__ + static TInt AutoNotifierCallBack(TAny *aConsolePin); +#endif + +protected: + CBTGetPinFromConsole(CBTManPinNotifierEngine* aPtr, TUint aPasskeyMinLength, TBool aInternallyInitiated, TBool aStrongKeyRequired, TUint aRecommendedPasskeyMinLength); + +private: + void ConstructL(const CBTDevice& aDevice); + void IssueRequestL(); + +private: + const CBTDevice* iDevice; + CBTManPinNotifierEngine* iParent; // the class to notify when we have a PIN code + CConsoleBase* iConsole; // console for interaction with the user + TBTPinCode iPin; + TInt iInsert; + TUint iPasskeyMinLength; + TBool iInternallyInitiated; + TBool iStrongKeyRequired; + TUint iRecommendedPasskeyMinLength; + +#ifdef __BT_TEXT_NOTIFIERS_AUTO__ + CAsyncCallBack* iAutoNotifierCallback; +#endif + }; + +class CBTManAuthNotifierEngine; +NONSHARABLE_CLASS(CBTManAuthNotifier): public CBase, public MNotifierBase2 + { +public: + static CBTManAuthNotifier* NewLC(); + ~CBTManAuthNotifier(); + void Release(); + TNotifierInfo RegisterL(); + TNotifierInfo Info() const; + TPtrC8 StartL(const TDesC8& aBuffer); + void StartL(const TDesC8& aBuffer, TInt aReplySlot, const RMessagePtr2& aMessage); + void Cancel(); + TPtrC8 UpdateL(const TDesC8& aBuffer); + void AuthorisationComplete(TBool aDecision, TInt aReason); + +private: + void ConstructL(); + +private: + TNotifierInfo iInfo; + CBTManAuthNotifierEngine* iEngine; + RMessage2 iMessage; + TInt iReplySlot; + TBool iNeedToCompleteMessage; + }; + +class CBTGetAuthFromConsole; +NONSHARABLE_CLASS(CBTManAuthNotifierEngine) : public CActive +/** +The implementation of authorisation notifier plugin. +@note Separate class to avoid CActive and MNotifyBase Cancel name clash. +*/ + { +public: + static CBTManAuthNotifierEngine* NewL(CBTManAuthNotifier& aParent); + void StartAuthorisationL(const TDesC8& aBuffer); + void AuthorisationComplete(TBool aDecision, TInt aReason); + TPtrC8 UpdateL(const TDesC8& aBuffer); + ~CBTManAuthNotifierEngine(); + void Stop(); + +private: + CBTManAuthNotifierEngine(CBTManAuthNotifier& aParent); + void RunL(); + void DoCancel(); + +private: + CBTGetAuthFromConsole* iGetAuthFromConsole; + RBTRegServ iRegistry; + RBTRegistry iRegistryView; + TBTRegistrySearch iRegistrySearch; + TRegistryState iRegistryState; + CBTRegistryResponse* iResponse; + CBTDevice* iDevice; + TBTAuthorisationParamsPckg iAuthPckg; + CBTManAuthNotifier& iParent; + }; + +NONSHARABLE_CLASS(CBTGetAuthFromConsole) : public CActive +/** +Display a console and get a Y/N response +@internalComponent +*/ + { +public: + static CBTGetAuthFromConsole* NewL(CBTManAuthNotifierEngine* aParent, const CBTDevice& aDevice, TUid aUid); + static CBTGetAuthFromConsole* NewLC(CBTManAuthNotifierEngine* aParent, const CBTDevice& aDevice, TUid aUid); + ~CBTGetAuthFromConsole(); + void AuthoriseL(); + void RunL(); + void DoCancel(); + void DeviceNameRetrieved(const TDesC& aName, TInt aResult); + +#ifdef __BT_TEXT_NOTIFIERS_AUTO__ + static TInt AutoNotifierCallBack(TAny *aConsoleAuth); +#endif + +protected: + CBTGetAuthFromConsole(CBTManAuthNotifierEngine* aParent); + +private: + TInt GetDeviceName(const TBTDevAddr& aBDAddr, TDes& aName); + void ConstructL(const CBTDevice& aDevice, TUid aUid); + void IssueRequest(); + +private: + TUid iServiceUid; + const CBTDevice* iDevice; + CBTManAuthNotifierEngine* iParent; + CConsoleBase* iConsole; + +#ifdef __BT_TEXT_NOTIFIERS_AUTO__ + CAsyncCallBack* iAutoNotifierCallback; +#endif + }; + +NONSHARABLE_CLASS(CBTManDeviceSelectionNotifier) + : public CBase + , public MNotifierBase2 + { +public: + enum TUserResult + { + EScanStateSelected, + EScanStateContinue, + EScanStateCancelled + }; +public: + static CBTManDeviceSelectionNotifier* NewLC(); + ~CBTManDeviceSelectionNotifier(); + TKeyCode GetResponseL(TRefByValue aPrompt, TInt aWidth, TInt aHeight); + void GetAddressL(TBTDevAddr& aBDAddr); + void GetNameL(TBTDeviceName& aName); + //void GetClassL(TBTDeviceClass& aClass); + void DisplayErrorMessageL(); + +private: // from MNotifierBase2 + void Release(); + TNotifierInfo RegisterL(); + TNotifierInfo Info() const; + TPtrC8 StartL(const TDesC8& aBuffer); + void StartL(const TDesC8& aBuffer, TInt aReplySlot, const RMessagePtr2& aMessage); + void Cancel(); + TPtrC8 UpdateL(const TDesC8& aBuffer); + +private: + CBTManDeviceSelectionNotifier(); + void ConstructL(); + TNotifierInfo iInfo; + TBTDevAddr iBDAddr; + TBTDeviceName iName; + TBTDeviceClass iClass; + }; + +NONSHARABLE_CLASS(CBTManDeviceScanner): public CBase + { +public: + enum TScanState + { + EScanStateUnfinished, + EScanStateCancelled, + EScanStateSelected + }; +public: + static CBTManDeviceScanner* NewL(); + ~CBTManDeviceScanner(); + TBool GetByScanL(TBTDevAddr& aBDAddr, TBTDeviceName& aName, TBTDeviceClass& aClass); +private: + CBTManDeviceScanner(); + void ConstructL(); + + void NotifyErrorL(TRefByValue aErrorNotification); + void ResetDeviceLists(); + void EnsureConsoleExistsL(); + void StartWaitMessageL(); + void StopWaitMessage(); + void AddDiscoveredDeviceL(RBTDevices& aDeviceArray, const TNameEntry& aNameEntry); +// void AddDiscoveredDeviceL(CBTDevInfoArray& aDevInfoArray, TNameEntry aNameEntry); + void SetupDeviceParams(RHostResolver aHr, TBTNamelessDevice& aDevInfo); + void SetupDeviceParams(const THostName& aName, TBTNamelessDevice& aDevInfo); + void PrintDiscoveredDevice(TUint aCount, CBTDevice& aDevice); + void RubOutWaitMessage(); + void PrintDiscoveredDevice(); + TBool DeviceNumberFromUserL(TBool allowMore); + void DisplayNoDeviceMessageL(TBool isMore); + void CheckUnfinishedL(); + +private: + CConsoleBase* iConsole; + CConsoleBase* iWaitConsole; + TPtrC iWaitMessage; + RBTDevices iDevices; + RPointerArray iNoNameDevices; +// CBTDevInfoArray* iDevsWithName; + + TUint iPrintedCounter; + TUint iChosenDeviceIndex; + TUint iResultCountWithName; + TUint iResultCountNoName; + TBTDeviceResponseParams iDevPms; + + TScanState iScanState; + }; + +// +// BT PAN profile device discovery notifier classes +// + +class MBTPanDeviceSelectionNotify +/** +Notification interface from PAN device selection engine to the notifier +@internalComponent +*/ + { +public: + /** + Remote device(s) have been selected + */ + virtual void DeviceSelectionComplete(TBTDeviceList& aDevices) = 0; + virtual void DeviceSelectionError(TInt aError) = 0; + +protected: + ~MBTPanDeviceSelectionNotify() {}; + }; + +class CBTPanDeviceSelectionNotifierEngine; +class CBTPanDeviceSelectionNotifier + : public CBase + , public MNotifierBase2 + , private MBTPanDeviceSelectionNotify +/** +An example notifier for Bluetooth PAN profile device selection. This allows the selection of +multiple devices. +@internalTechnology +*/ + { +public: + static CBTPanDeviceSelectionNotifier* NewLC(); + ~CBTPanDeviceSelectionNotifier(); + + // MNotifierBase2 methods + virtual void Release(); + virtual TNotifierInfo RegisterL(); + virtual TNotifierInfo Info() const; + virtual TPtrC8 StartL(const TDesC8& aBuffer); + virtual void StartL(const TDesC8& aBuffer, TInt aReplySlot, const RMessagePtr2& aMessage); + virtual void Cancel(); + virtual TPtrC8 UpdateL(const TDesC8& aBuffer); + + // MBTPanDeviceSelectionNotify methods + virtual void DeviceSelectionComplete(TBTDeviceList& aDevices); + virtual void DeviceSelectionError(TInt aError); + +private: + CBTPanDeviceSelectionNotifier(); + void ConstructL(); + +public: + +private: + TNotifierInfo iInfo; //< Info about this notifier + RMessage2 iMessage; //< Client message to signal when device selection is complete + TBool iMessageOutstanding; //< Have we got a message outstanding that needs to be completed? + TInt iReplySlot; //< The slot in the message that contains the reply buffer + + CBTPanDeviceSelectionNotifierEngine* iEngine; //< Engine to do the actual device scanning and selection + }; + +class MBTPanDeviceDiscoveryNotify +/** +Notification interface for when new devices are discovered +@internalComponent +*/ + { +public: + /** + A new device has been found + @param aNewDevice Information about the new device + @note aNewDevice must be copied if you want to use it after this method completes + */ + virtual void NewDeviceFoundL(TNameRecord& aNewDevice) = 0; + + /** + The search for devices has completed + */ + virtual void DeviceSearchComplete(TInt aError) = 0; + +protected: + ~MBTPanDeviceDiscoveryNotify() {}; + }; + +class CBTPanDeviceSelectionNotifierDeviceDiscoverer; +class CBTPanDeviceSelectionNotifierEngine : public CActive, private MBTPanDeviceDiscoveryNotify +/** +Engine to display discovered devices to the user and get them to select some +@internalComponent +*/ + { +public: + static CBTPanDeviceSelectionNotifierEngine* NewL(MBTPanDeviceSelectionNotify& aNotify); + ~CBTPanDeviceSelectionNotifierEngine(); + + void PromptForDevicesL(const TDesC8& aBuffer); + void Stop(); + + // CActive methods + virtual void RunL(); + virtual void DoCancel(); + + // MBTPanDeviceDiscoveryNotify methods + virtual void NewDeviceFoundL(TNameRecord& aNewDevice); + virtual void DeviceSearchComplete(TInt aError); + +private: + CBTPanDeviceSelectionNotifierEngine(MBTPanDeviceSelectionNotify& aNotify); + void ConstructL(); + + void DisplayInstructions(TPtr& aDisplayBuf); + TInt DisplayDevice(TUint aDeviceNumber, TPtr& aDisplayBuf); + void Redraw(); + void PackageSelectedDevicesAndCompleteNotifier(); + void CompleteNotifierWithError(TInt aError); + void AbortEverything(); + + TInt NumberOfDevicesSelected(); + +public: + +private: + class TBTDeviceSelectionInfo + { + public: + TBool iSelected; + TNameRecord iNameRecord; + }; + + RPointerArray iDevices; + + CConsoleBase* iConsole; + HBufC* iDisplayBuf; //< Buffer into which to put text for display + TPtr iDisplayPtr; + TUint iCurrentlySelectedDevice; //< The index of the device to which the cursor is currently pointing + TUint iPositionOfTopDeviceInList; //< The index of the device which is at the top of the list currently being displayed to the user + TBool iDeviceSearchComplete; //< Has the device search completed? + + TBool iAborting; //< Flag to stop us going round in circles as AOs complete with KErrCancel and signal us + + CBTPanDeviceSelectionNotifierDeviceDiscoverer* iDeviceDiscoverer; + MBTPanDeviceSelectionNotify& iNotify; //< the class to be notified when the devices have been selected + }; + +class CBTPanDeviceSelectionNotifierDeviceDiscoverer : public CActive +/** +Discovers remote devices and notifies the engine about them +@internalComponent +*/ + { +public: + static CBTPanDeviceSelectionNotifierDeviceDiscoverer* NewL(MBTPanDeviceDiscoveryNotify& iNotify); + ~CBTPanDeviceSelectionNotifierDeviceDiscoverer(); + + void StartDeviceDiscovery(); + + // CActive methods + virtual void RunL(); + virtual void DoCancel(); + +private: + CBTPanDeviceSelectionNotifierDeviceDiscoverer(MBTPanDeviceDiscoveryNotify& iNotify); + void ConstructL(); + +public: + +private: + RSocketServ iSockServ; //< Socket server session + RHostResolver iHostResolver; //< Host resolver to discover devices + TNameEntry iNameEntry; //< Name entry into which to return results + TInquirySockAddr iInquiryAddr; //< The inquiry address to use to discover devices + + MBTPanDeviceDiscoveryNotify& iNotify; //< The class to notify when a new device is found + }; + +// forward declarations +class CPbapAuthNotifierConsole; +class CPbapAuthNotifierEngine; + +/** +Console utility class +@internalTechnology +*/ +class PbapTextNotifiersConsole + { +public: + static CConsoleBase* AutoSizeNewL(const TDesC& aTitle, TSize aSize); + }; + +/** +PBAP OBEX authentication notifier. +Handles notification of a PBAP client challenge when attempting to connect to the server. +@internalTechnology +*/ +NONSHARABLE_CLASS(CPbapAuthNotifier): public CBase, public MNotifierBase2 + { +public: + static CPbapAuthNotifier* NewLC(); + ~CPbapAuthNotifier(); + + void PasswordInputComplete(const TDesC& aPassword, TInt aReason); + +public: + // from MNotifierBase2 + void Release(); + TNotifierInfo RegisterL(); + TNotifierInfo Info() const; + TPtrC8 StartL(const TDesC8& aBuffer); + void StartL(const TDesC8& aBuffer, TInt aReplySlot, const RMessagePtr2& aMessage); + void Cancel(); + TPtrC8 UpdateL(const TDesC8& aBuffer); + +private: + CPbapAuthNotifier(); + void ConstructL(); + +private: + TNotifierInfo iInfo; + RMessage2 iMessage; + TInt iReplySlot; + TBool iNeedToCompleteMessage; + CPbapAuthNotifierEngine* iEngine; + }; + +NONSHARABLE_CLASS(CPbapAuthNotifierEngine) : public CActive + { +public: + static CPbapAuthNotifierEngine* NewL(CPbapAuthNotifier& aParent); + ~CPbapAuthNotifierEngine(); + + void StartPasswordEntryL(const TDesC8& aBuffer); + void Stop(); + void PasswordInputComplete(const TDesC& aPassword, TInt aReason); + +private: + CPbapAuthNotifierEngine(CPbapAuthNotifier& aParent); + void ConstructL(); + + // from CActive + void RunL(); + void DoCancel(); + +private: + enum TRegistryState + { + EFinding, + EGetting + }; +private: + CPbapAuthNotifier& iParent; + CBTDevice* iDevice; + CPbapAuthNotifierConsole* iAuthConsole; + RBTRegServ iRegistry; + RBTRegistry iRegistryView; + TBTRegistrySearch iRegistrySearch; + TRegistryState iRegistryState; + CBTRegistryResponse* iResponse; + TPbapAuthNotifierParamsPckg iParamsPckg; + }; + +/** +Display a console and get a password response +@internalComponent +*/ +NONSHARABLE_CLASS(CPbapAuthNotifierConsole) : public CActive + { +public: + static CPbapAuthNotifierConsole* NewL(CPbapAuthNotifierEngine* aParent, const CBTDevice& aDevice, const TDesC& aRealm, TBool aRealmTruncated); + ~CPbapAuthNotifierConsole(); + + void GetPasswordL(); + +#ifdef __PBAP_TEXT_NOTIFIERS_AUTO__ + static TInt AutoNotifierCallBack(TAny *aConsolePin); +#endif + +protected: + CPbapAuthNotifierConsole(CPbapAuthNotifierEngine* aParent, const TDesC& aRealm, TBool aRealmTruncated); + +private: + void ConstructL(const CBTDevice& aDevice); + void IssueRequestL(); + + // from CActive + void RunL(); + void DoCancel(); + +private: + CPbapAuthNotifierEngine* iParent; + const CBTDevice* iDevice; + TBufC iRealm; + TBool iRealmTruncated; + CConsoleBase* iConsole; + TBuf iPassword; + +#ifdef __PBAP_TEXT_NOTIFIERS_AUTO__ + CAsyncCallBack* iAutoNotifierCallback; +#endif + }; + + +#ifndef __BT_TEXT_NOTIFIERS_NO_SSP__ + +class MBTGetNCResultFromConsoleObserver + { +public: + virtual void NumericComparisonComplete(TBool aDecision, TInt aReason)=0; + }; + +class CBTUINumericComparisonEngine; +NONSHARABLE_CLASS(CBTUINumericComparison): public CBase, + public MNotifierBase2, + public MBTGetNCResultFromConsoleObserver + { +public: + static CBTUINumericComparison* NewLC(); + ~CBTUINumericComparison(); + void Release(); + TNotifierInfo RegisterL(); + TNotifierInfo Info() const; + TPtrC8 StartL(const TDesC8& aBuffer); + void StartL(const TDesC8& aBuffer, TInt aReplySlot, const RMessagePtr2& aMessage); + void Cancel(); + TPtrC8 UpdateL(const TDesC8& aBuffer); + + // MBTGetNCResultFromConsoleObserver + void NumericComparisonComplete(TBool aDecision, TInt aReason); + +private: + void ConstructL(); + +private: + TNotifierInfo iInfo; + CBTUINumericComparisonEngine* iEngine; + RMessage2 iMessage; + TInt iReplySlot; + TBTNumericComparisonParamsPckg iNumericComparisonParamsPckg; + TBool iNeedToCompleteMessage; + }; + +NONSHARABLE_CLASS(CBTUINumericComparisonEngine) : public CActive + { +public: + static CBTUINumericComparisonEngine* NewL(MBTGetNCResultFromConsoleObserver& aObserver); + static CBTUINumericComparisonEngine* NewLC(MBTGetNCResultFromConsoleObserver& aObserver); + ~CBTUINumericComparisonEngine(); + + void DoComparisonL(TBTNumericComparisonParams& aNumericComparisonParams); + TPtrC8 UpdateL(const TDesC8& aBuffer); + void Stop(); + void RunL(); + void DoCancel(); + +protected: + CBTUINumericComparisonEngine(MBTGetNCResultFromConsoleObserver& aObserver); + +private: + void ConstructL(); + void IssueRequest(); + +private: + MBTGetNCResultFromConsoleObserver& iObserver; + CConsoleBase* iConsole; + }; + + +// ---------------------- +// Passkey Entry UI (SSP) +// ---------------------- + +class MBTGetPasskeyResultFromConsoleObserver + { +public: + virtual void PasskeyComplete(TInt aReason)=0; + }; + + +class CBTUIPasskeyEntryEngine; + +NONSHARABLE_CLASS(CBTUIPasskeyEntry) + : public CBase + , public MNotifierBase2 + , public MBTGetPasskeyResultFromConsoleObserver + { +public: + static CBTUIPasskeyEntry* NewLC(); + +private: // from MNotifierBase2 + void Release(); + TNotifierInfo RegisterL(); + TNotifierInfo Info() const; + TPtrC8 StartL(const TDesC8& aBuffer); + void StartL(const TDesC8& aBuffer, TInt aReplySlot, const RMessagePtr2& aMessage); + void Cancel(); + TPtrC8 UpdateL(const TDesC8& aBuffer); + +private: // from MBTGetPasskeyResultFromConsoleObserver + void PasskeyComplete(TInt aReason); + +private: + void ConstructL(); + ~CBTUIPasskeyEntry(); + +private: + TNotifierInfo iInfo; + CBTUIPasskeyEntryEngine* iEngine; + RMessage2 iMessage; + TInt iReplySlot; + TBTPasskeyDisplayParamsPckg iPasskeyDisplayParamsPckg; + TBTDevAddr iAddr; + TBTDeviceName iName; + TUint32 iNumericValue; + TBool iNeedToCompleteMessage; + }; + +NONSHARABLE_CLASS(CBTUIPasskeyEntryEngine) + : public CActive + { +public: + static CBTUIPasskeyEntryEngine* NewL(MBTGetPasskeyResultFromConsoleObserver& aObserver); + static CBTUIPasskeyEntryEngine* NewLC(MBTGetPasskeyResultFromConsoleObserver& aObserver); + ~CBTUIPasskeyEntryEngine(); + + void DoPasskeyL(TBTPasskeyDisplayParams& aPasskeyParams); + TPtrC8 UpdateL(const TDesC8& aBuffer); + void Stop(); + void RunL(); + void DoCancel(); + +private: + CBTUIPasskeyEntryEngine(MBTGetPasskeyResultFromConsoleObserver& aObserver); + void ConstructL(); + void IssueRequest(); + +private: + MBTGetPasskeyResultFromConsoleObserver& iObserver; + CConsoleBase* iConsole; + }; + + +#endif // __BT_TEXT_NOTIFIERS_NO_SSP__ + + + +#endif // BTTEXTNOTIFIERS_H