williamr@4: // Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
williamr@4: // All rights reserved.
williamr@4: // This component and the accompanying materials are made available
williamr@4: // under the terms of "Eclipse Public License v1.0"
williamr@4: // which accompanies this distribution, and is available
williamr@4: // at the URL "http://www.eclipse.org/legal/epl-v10.html".
williamr@4: //
williamr@4: // Initial Contributors:
williamr@4: // Nokia Corporation - initial contribution.
williamr@4: //
williamr@4: // Contributors:
williamr@4: //
williamr@4: // Description:
williamr@4: //
williamr@4: 
williamr@4: #ifndef BTBASEBAND_H
williamr@4: #define BTBASEBAND_H
williamr@4: 
williamr@4: /** 
williamr@4: @file
williamr@4: @internalTechnology
williamr@4: @released
williamr@4: */
williamr@4: 
williamr@4: #include <e32base.h>
williamr@4: #include <es_sock.h>
williamr@4: #include <btsockaddr.h>
williamr@4: #include <bttypes.h>
williamr@4: #include <btbasebandpolicy.h>
williamr@4: #include <bluetooth/lmoptions.h>
williamr@4: 
williamr@4: NONSHARABLE_CLASS(RBTBaseband)
williamr@4: /** API useful for Bluetooth as seen from a single physical link perspective
williamr@4: @internalTechnology
williamr@4: @released
williamr@4: WARNING: For internal use ONLY. Compatibility is not guaranteed in future releases.
williamr@4: */
williamr@4: 	{
williamr@4: public:
williamr@4: 	RBTBaseband();
williamr@4: 	//API useful for Bluetooth as seen from a single physical link perspective
williamr@4: 	TInt Open(RSocketServ& aSocketServ, RSocket& aSocket);
williamr@4: 	TInt Open(RSocketServ& aSocketServ, const TBTDevAddr& aDevAddr);
williamr@4: 	void Close();
williamr@4: 	TInt PhysicalLinkState(TUint32& aState);
williamr@4: 	TInt BasebandState(TUint32& aState); 
williamr@4: 	TInt PreventRoleSwitch();
williamr@4: 	TInt AllowRoleSwitch();
williamr@4: 	TInt RequestMasterRole();
williamr@4: 	TInt RequestSlaveRole();
williamr@4: 	TInt PreventLowPowerModes(TUint32 aLowPowerModes);
williamr@4: 	TInt AllowLowPowerModes(TUint32 aLowPowerModes);
williamr@4: 	TInt ActivateSniffRequester();
williamr@4: 	TInt ActivateParkRequester();
williamr@4: 	TInt CancelLowPowerModeRequester();
williamr@4: 	TInt RequestExplicitActiveMode(TBool aActive);
williamr@4: 	TInt RequestChangeSupportedPacketTypes(TUint16 aPacketTypes);
williamr@4: 	//THE TWO NOTIFY METHODS BELOW MUST NOT BE CALLED CONCURRENTLY
williamr@4: 	//Method to be used if only the next event should be notified
williamr@4: 	void ActivateNotifierForOneShot(TBTBasebandEvent& aEventNotification, 
williamr@4: 		                            TRequestStatus& aStatus, 
williamr@4: 									TUint32 aEventMask);
williamr@4: 	//Method to be used if it is intended to call it again 
williamr@4: 	//(or call CancelNextBasebandChangeEventNotifier) when it completes 
williamr@4: 	// - this sets up a continuous monitoring of events on the server.
williamr@4: 	//Each time ActivateNotifierForOneShot is called it will either return
williamr@4: 	//the next event in the servers notification queue or if the
williamr@4: 	//queue is empty it will await the next event. 
williamr@4: 	void ActivateNotifierForRecall(TBTBasebandEvent& aEventNotification, 
williamr@4: 		                           TRequestStatus& aStatus, 
williamr@4: 								   TUint32 aEventMask);
williamr@4: 	void ReadNewPhysicalLinkMetricValue(TRequestStatus& aStatus,
williamr@4: 								TDes8& aData,
williamr@4: 								TBTLMIoctls aIoctl);
williamr@4: 	void CancelPhysicalLinkMetricUpdate();
williamr@4: 	void CancelNextBasebandChangeEventNotifier();
williamr@4: 	TInt Authenticate();
williamr@4: 	
williamr@4: 	//API useful for Bluetooth as seen from a device perspective
williamr@4: 	TInt Open(RSocketServ& aSocketServ);
williamr@4: 	void Connect(const TBTDevAddr& aDevAddr, TRequestStatus& aStatus);
williamr@4: 	void Connect(const TPhysicalLinkQuickConnectionToken& aToken, TRequestStatus& aStatus);
williamr@4: 	TInt Broadcast(const TDesC8& aData); // testing broadcast writes
williamr@4: 	TInt ReadRaw(TDes8& aData);
williamr@4: 	TInt Enumerate(RBTDevAddrArray& aBTDevAddrArray, TUint aMaxNumber);
williamr@4: 	void TerminatePhysicalLink(TInt aReason);
williamr@4: 	void TerminatePhysicalLink(TInt aReason, TRequestStatus& aStatus);
williamr@4: 	void TerminatePhysicalLink(TInt aReason, const TBTDevAddr& aDevAddr, TRequestStatus& aStatus);
williamr@4: 	void ShutdownPhysicalLink(TRequestStatus& aStatus);
williamr@4: 	void TerminateAllPhysicalLinks(TInt aReason);
williamr@4: 	void TerminateAllPhysicalLinks(TInt aReason, TRequestStatus& aStatus);
williamr@4: 	TInt SubSessionHandle() const;
williamr@4: 	
williamr@4: private:
williamr@4: 	TInt RequestRole(TBTLMOptions aRole);
williamr@4: 	void LocalComplete(TRequestStatus& aStatus, TInt aErr);
williamr@4: 	void SetClientPending(TRequestStatus& aStatus);
williamr@4: 	void DoConnect(TRequestStatus& aStatus);
williamr@4: 	TInt Enumerate(TDes8& aData);
williamr@4: 	TInt Construct();
williamr@4: 		
williamr@4: private:
williamr@4: 	TAny*					iUnusedPointer;
williamr@4: 	RSocket					iSocket;
williamr@4: 
williamr@4: 	TRequestStatus*							iClientRequestStatus;
williamr@4: 	TBTSockAddr								iSocketAddress;				
williamr@4: 	TPhysicalLinkQuickConnectionTokenBuf	iConnectToken;
williamr@4: 	TBuf8<1>								iConnectInData; // not used yet - needed tho!
williamr@4: 	TBuf8<1>								iDummySCOShutdownDescriptor;
williamr@4: 	
williamr@4: 	// This data padding has been added to help prevent future binary compatibility breaks	
williamr@4: 	// Neither iPadding1 nor iPadding2 have been zero'd because they are currently not used
williamr@4: 	TUint32     iPadding1; 
williamr@4: 	TUint32     iPadding2; 	
williamr@4: 	};
williamr@4: 
williamr@4: #endif // BTBASEBAND_H