bluetoothengine/btmac/inc/btmac/btmrfcommsock.h
changeset 0 f63038272f30
child 57 5ebadcda06cb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetoothengine/btmac/inc/btmac/btmrfcommsock.h	Mon Jan 18 20:28:57 2010 +0200
@@ -0,0 +1,307 @@
+/*
+* Copyright (c) 2005-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:  BT RFComm socket.
+*
+*/
+
+
+#ifndef C_BTMRFCOMMSOCK_H
+#define C_BTMRFCOMMSOCK_H
+
+#include <bt_sock.h>
+#include "btmdefs.h"
+
+class MBtmSockObserver;
+class CDesC8ArrayFlat;
+
+/**
+ * RFComm socket.
+ *
+ * A RFComm connection.
+ *
+ *  @since S60 v3.1
+ */
+class CBtmRfcommSock : public CBase, public MBluetoothSocketNotifier
+    {
+public:
+
+    static CBtmRfcommSock* NewL(MBtmSockObserver& aObserver, RSocketServ& aServer);
+
+    virtual ~CBtmRfcommSock();
+    
+public:
+    
+    /**
+     * Makes a RFCOMM connection to a BT device
+     *
+     * @since S60 v3.1
+     * @param aAddr the BD address of the BT device
+     */ 
+    void ConnectL(TBTSockAddr& aAddr, TUint aService);
+    
+    /**
+     * Cancel the outstanding connect request
+     *
+     * @since S60 v3.1
+     */
+    void CancelConnect();
+
+    /**
+     * Socket accept operation.
+     * Register a RFComm channel first then register SDP service according the
+     * given service id then starts socket accept operation.
+     *
+     * @since S60 v3.1
+     * @param aService The service (profile)
+     * @param aSec the security requirement of the service
+     */
+    TUint ListenL(TUint aService, const TBTServiceSecurity& aSec, TUint aLastUsedPort);
+
+    /**
+     * cancels the outstanding accept operation.
+     * Th reserved channel will be freed and the registered service will be removed.
+     *
+     * @since S60 v3.1
+     */
+    void CancelListen();
+
+    /**
+     * Disconnects the socket connection
+     *
+     * @since S60 v3.1
+     * @param aHow Information about the reason of shutdown.
+     */
+    void Disconnect(RSocket::TShutdown aHow = RSocket::ENormal);
+    
+    /**
+     * Writes a data packet to the connected BT device
+     *
+     * @since S60 v3.1
+     * @param aDesc the data packet
+     */
+    void WriteL(const TDesC8& aData);
+    
+    /**
+     * Cancel writing
+     *
+     * @since S60 v3.1
+     */
+    void CancelWrite();
+    
+    /**
+     * Get the connected remote BD address 
+     *
+     * @since S60 v3.1
+     * @return the BD address
+     */
+    const TBTDevAddr& Remote() const; 
+
+    /**
+     * Requests for master role
+     *
+     * @since S60 v3.1
+     * @return the completion error code
+     */
+    TInt RequestMasterRole();
+    
+    /**
+     * Activates the notification of baseband events
+     *
+     * @since S60 v3.1
+     * @param aNotification the interested baseband events
+     * @return the completion error code
+     */
+    TInt ActivateBasebandEventNotification(TInt aNotification);
+    
+    /**
+     * Sets the socket observer to the specified.
+     *
+     * @since S60 v3.1
+     * @param aObserver the new observer.
+     */
+    void SetObserver(MBtmSockObserver& aObserver);
+
+    /**
+     * Gets the service (a RFComm profile) that this connection is for.
+     *
+     * @since S60 v3.1
+     * @return the service id.
+     */
+    TUint Service() const;
+    
+    TInt ActivateSniffRequester();
+    
+    void RequestLinkToActiveMode();
+    
+    TBool IsInSniff() const;
+    
+    void SetService(TUint aService);
+    
+    TBool AccessoryInitiatedConnection();
+
+private:  
+
+    // from base class MBluetoothSocketNotifier
+
+    /**
+     * From MBluetoothSocketNotifier
+     * Notification of a RFCOMM socket connect completion event.
+     *
+     * @since S60 v3.1
+     * @param aErr the completion error code
+     * @param aType the type (HF or HS) of the accessory if the connection is successful
+     */
+    void HandleConnectCompleteL(TInt aErr);
+
+    /**
+     * From MBluetoothSocketNotifier
+     * Notification of a RFCOMM socket accpet completion event.
+     *
+     * @since S60 v3.1
+     * @param aType the type (HF or HS) of the accessory if the connection is successful
+     * @param aErr the completion error code
+     */
+    void HandleAcceptCompleteL(TInt aErr);
+
+    /**
+     * From MBluetoothSocketNotifier
+     * Notification of a RFCOMM socket shutdown completion event.
+     *
+     * @since S60 v3.1
+     * @param aErr the completion error code
+     */
+    void HandleShutdownCompleteL(TInt aErr);
+
+    /**
+     * From MBluetoothSocketNotifier
+     * Notification of a RFCOMM socket send completion event.
+     *
+     * @since S60 v3.1
+     * @param aErr the completion error code
+     */
+    void HandleSendCompleteL(TInt aErr);
+
+    /**
+     * From MBluetoothSocketNotifier
+     * Notification of a RFCOMM socket receive completion event.
+     *
+     * @since S60 v3.1
+     * @param aErr the completion error code
+     */
+    void HandleReceiveCompleteL(TInt aErr);
+
+    /** 
+     * From MBluetoothSocketNotifier
+     * Notification of an ioctl complete event.
+     * 
+     * @since S60 v3.1
+     * @param aErr the returned error
+     */
+    void HandleIoctlCompleteL(TInt aErr);
+
+    /**
+     * From MBluetoothSocketNotifier
+     * Notification of a baseband event.
+     *
+     * @since S60 v3.1
+     * @param aErr the completion error code
+     * @param TBTBasebandEventNotification Bit(s) set indicate what event has taken place.
+     */        
+    void HandleActivateBasebandEventNotifierCompleteL(
+        TInt aErr, TBTBasebandEventNotification& aEventNotification);
+
+    // From base class CBtmActive
+
+private:
+
+    void ConstructL();
+
+    CBtmRfcommSock(MBtmSockObserver& aObserver, RSocketServ& aServer);
+
+    void SendPacketL();
+
+    /**
+     * Reads data from the connected BT device
+     *
+     * @since S60 v3.1
+     * @param aData Contains the received data on completion
+     */
+    void ReceiveL();
+    
+    /**
+     * Cancel reading
+     *
+     * @since S60 v3.1
+     */
+    void CancelReceive();
+
+private:
+    
+    /**
+     * socket event observer.
+     * Not own.
+     */
+    MBtmSockObserver* iObserver;
+    
+    /**
+     * The socket server session
+     * Not own.
+     */
+    RSocketServ& iServer;
+    
+    /**
+     * The RFComm connection socket
+     */
+    CBluetoothSocket* iDataSocket;
+
+    /**
+     * The listening socket 
+     */
+    CBluetoothSocket* iListenSocket;
+
+    /**
+     * the length of data read and written
+     */
+    TSockXfrLength iXfrLength;
+    
+    /**
+     * the baseband event notification
+     */
+    TBTBasebandEvent iEventNotification;
+
+    TInt iBBNotificationMode;
+    
+    TBool iInSniff;
+    
+    /**
+     * The service for which the socket connection is served
+     */
+    TUint iService;
+    
+    /** 
+     * The remote BD address
+     */
+    TBTDevAddr iRemote;
+    
+    TBool iRemoteHasConnected; // who initiated connection
+    RBuf8 iInData; // owned
+    RBuf8 iOutData; // owned
+    CDesC8ArrayFlat* iOutDataQueue; // owned
+    
+    TBool iWriting;
+    
+    RBTPhysicalLinkAdapter iAda;
+    };
+
+#endif    // C_BTMRFCOMMSOCK_H