localconnectivityservice/headset/hidremconbearer/inc/hidremconbearerimplementation.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 31 Aug 2010 16:03:15 +0300
branchRCL_3
changeset 19 0aa8cc770c8a
permissions -rw-r--r--
Revision: 201032 Kit: 201035

/*
* Copyright (c) 2005-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:  Declaration of class CHidRemconBearer.
 *
*/


#ifndef C_HIDREMCONBEARER_H
#define C_HIDREMCONBEARER_H

#include <e32base.h>
#include <c32comm.h>
#include <e32property.h>
#include <remcon/remconbearerplugin.h>
#include <remcon/remconbearerinterface.h>
#include <remcon/messagetype.h>
#include <AknCapServerClient.h>

#include "hidremconbearerobserver.h"

//CONSTANTS
const TInt KDataBufferSize = 10;

/**
 *  CHidRemconBearer
 *  Implementation of the Rem Con Bearer Plugin
 * 
 */
class CHidRemconBearer : public CRemConBearerPlugin,
        public MRemConBearerInterface,
        public MCallBackReceiver
    {
public:

    /**
     * Two-phased constructor.
     * @param  aParams required for the CRemConBearerPlugin
     * @return hidremconbearer plugin
     */
    static CHidRemconBearer* NewL( TBearerParams& aParams );

    /**
     * Destructor.
     */
    virtual ~CHidRemconBearer();

private:

    /**
     * Constructor
     * @param  aParams bearer parameters
     */
    CHidRemconBearer( TBearerParams& aParams );

    /**
     * Two - phase construction.
     */
    void ConstructL();

private:
    // from CRemConBearerPlugin

    /** 
     * From class CRemConBearerPlugin
     * Called by RemCon server to get a pointer to an object which implements
     * the bearer API with UID aUid. This is a mechanism for allowing future 
     * change to the bearer API without breaking BC in existing (non-updated) 
     * bearer plugins.
     *         
     * @param aUid Inteface uid
     * @return  Return pointer to interface
     */
    TAny* GetInterface( TUid aUid );

private:
    // from MRemConBearerInterface

    /** 
     * From class MRemConBearerInterface
     * Called by RemCon to retrieve a response on a connection.
     *         
     * @param  aInterfaceUid Inteface uid
     * @param  aTransactionId Transaction id
     * @param  aOperationId operation ID
     * @param  aData API-specific message data.
     * @param  aAddr The connection.
     * @return Error code
     */
    TInt GetResponse( TUid& aInterfaceUid, TUint& aTransactionId,
            TUint& aOperationId, RBuf8& aData, TRemConAddress& aAddr );

    /** 
     * From class MRemConBearerInterface
     * Send Remcon command
     *         
     * @param  aInterfaceUid Inteface uid
     * @param  aCommand command id
     * @param  aTransactionId Transaction id         
     * @param  aData API-specific message data.
     * @param  aAddr The connection.
     * @return Error code
     */
    TInt SendCommand( TUid aInterfaceUid, TUint aCommand,
            TUint aTransactionId, RBuf8& aData, const TRemConAddress& aAddr );

    /** 
     * From class MRemConBearerInterface
     * Get Remcon command
     *
     * @param  aInterfaceUid Inteface uid
     * @param  aTransactionId Transaction id                  
     * @param  aCommand command id
     * @param  aData API-specific message data.
     * @param  aAddr The connection.
     * @return Error code
     */
    TInt GetCommand( TUid& aInterfaceUid, TUint& aTransactionId,
            TUint& aCommand, RBuf8& aData, TRemConAddress& aAddr );

    /** 
     * From class MRemConBearerInterface
     * Send Response
     *         
     * @param  aInterfaceUid Inteface uid
     * @param  aOperationID operation id
     * @param  aTransactionId Transaction id                  
     * @param  aData API-specific message data.
     * @param  aAddr The connection.
     * @return Error code
     */
    TInt SendResponse( TUid aInterfaceUid, TUint aOperationId,
            TUint aTransactionId, RBuf8& aData, const TRemConAddress& aAddr );

    /** 
     * From class MRemConBearerInterface
     * Connect request
     *         
     * @param  aAddr The connection.         
     */
    void ConnectRequest( const TRemConAddress& aAddr );

    /** 
     * From class MRemConBearerInterface
     * Disconnect request
     *         
     * @param  aAddr The connection.         
     */
    void DisconnectRequest( const TRemConAddress& aAddr );

    /** 
     * From class MRemConBearerInterface
     * Clientstatus
     *
     * @param  aControllerPresent Controllerpresent status
     * @param  aTargetPresent Target present status         
     */
    void ClientStatus( TBool aControllerPresent, TBool aTargetPresent );

    /** 
     * From class MRemConBearerInterface
     * Return security policy
     *
     * @return Security policy
     */
    TSecurityPolicy SecurityPolicy() const;

private:
    // from MCallBackReceiver    

    /** 
     * From class MCallBackReceiver
     * Return security policy
     *
     * @param aScanCode a scancode
     * @param aKeyType a Keytype         
     */
    void ReceivedKeyEvent( TInt aScanCode, TInt aKeyType );

private:
    /** 
     * From class MCallBackReceiver
     * Set SVK Operation ID and Data
     *
     * @param aEnumValue OperationID and data field
     */
    void SetSVKOperationIdAndData( TInt aEnumValue );

    /** 
     * From class MCallBackReceiver
     * Set Mute Operation ID and Data
     *
     * @param aEnumValue OperationID and data field         
     */
    void SetMuteKeyOperationIdAndData( TInt aEnumValue );

    /** 
     * From class MCallBackReceiver
     * Set Media key Operation ID and Data
     *
     * @param aEnumValue OperationID and data field         
     */
    void SetMediaKeyOperationIdAndData( TInt aEnumValue );

    /** 
     * From class MCallBackReceiver
     * Set Media key Operation ID and Data
     *         
     * @param aEnumValue OperationID and data field         
     */
    void SetPhoneKeyOperationIdAndData( TInt aEnumValue );

    /**
     * RestartExpired observer
     *
     * @param aKeyType type of key         
     */
    void RestartKeyObeserver( TInt aKeyType );

    /**
     * Restart Expired observer
     *         
     * @param aEnumValue a value of key
     * @param aKeyType  A type of key         
     */
    void HandleKeyOperation( TInt aEnumValue, TInt aKeyType );

private:
    // Data

    /**
     * Interface uid of last correct-decoded message
     */
    TUid iInterfaceUid;

    /**
     * Operation uid of last correct-decoded message
     */
    TUint iOperationId;

    /**
     * Data of last correct-decoded message
     */
    TBuf8<KDataBufferSize> iData;

    /**
     * Transactionid uid of last correct-decoded message
     */
    TUint iTransactionId;

    /**
     * Media key observer
     * Own.
     */
    CHidRemconBearerObserver* iMediaKeyObserver;

    /**
     * Accessory volume key observer
     * Own.
     */
    CHidRemconBearerObserver* iAccessoryVolKeyObserver;

    /**
     * Mute key observer
     * Own.
     */
    CHidRemconBearerObserver* iMuteKeyObserver;

    /**
     * Phone key observer
     * Own.
     */
    CHidRemconBearerObserver* iHookKeyObserver;

    };

#endif // HIDREMCONBEARERIMPLEMENTATION_H