bthci/hci2implementations/corehcis/symbian/src/hciserverrequestmgr.cpp
author jontanne
Thu, 14 Oct 2010 11:30:12 +0100
changeset 27 83036355c0f3
parent 0 29b1cd4cb562
permissions -rw-r--r--
Add USB HCTL to bt package
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
27
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
     1
// Copyright (c) 2006-2010 Nokia Corporation and/or its subsidiary(-ies).
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
     2
// All rights reserved.
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
     3
// This component and the accompanying materials are made available
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
     4
// under the terms of "Eclipse Public License v1.0"
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
     5
// which accompanies this distribution, and is available
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
     7
//
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
     8
// Initial Contributors:
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
     9
// Nokia Corporation - initial contribution.
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    10
//
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    11
// Contributors:
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    12
//
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    13
// Description:
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    14
//
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    15
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    16
/**
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    17
 @file
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    18
 @internalComponent
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    19
*/
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    20
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    21
#include "hciserverrequestmgr.h"
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    22
#include "HciCorePluginImpl.h"
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    23
#include "corehciutil.h"
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    24
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    25
#include <bluetooth/hci/hciipc.h>
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    26
#include <bluetooth/hci/vendordebugcommand.h>
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    27
#include <bluetooth/hci/vendordebugcompleteevent.h>
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    28
#include <bluetooth/hci/vendordebugevent.h>
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    29
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    30
#include <bluetooth/hcicommandqueueclient.h>
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    31
#include <bluetooth/hcicommandqueue.h>
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    32
#include <bluetooth/btpowercontrol.h>
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    33
#include <bluetooth/dutmode.h>
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    34
#include <bluetooth/a2dpoptimisation.h>
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    35
#include <bluetooth/a2dpoptimisationparams.h>
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    36
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    37
#include <bluetooth/logger.h>
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    38
#include <bluetooth/btpowercontrolmessages.h>
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    39
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    40
#include <es_sock.h>
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    41
#include <bt_sock.h>
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    42
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    43
#ifdef __FLOG_ACTIVE
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    44
_LIT8(KLogComponent, LOG_COMPONENT_HCISERVER);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    45
#endif
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    46
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    47
const TInt KHCIServerIpcDesOutParam = 2;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    48
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    49
void CHCIServerRequestManager::BlockAsync(CHCISession& aSession, const RMessage2& aMessage)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    50
	{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    51
	LOG_FUNC
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    52
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    53
	iAsyncTaskMessage = aMessage;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    54
	iAsyncTaskSession = &aSession;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    55
	iBlockMask |= MaskBit();
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    56
	}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    57
	
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    58
void CHCIServerRequestManager::CompleteAsyncTask(TInt aError)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    59
	{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    60
	LOG_FUNC
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    61
	
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    62
	//check message is not already complete
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    63
	if(iAsyncTaskMessage.Handle())
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    64
		{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    65
		iAsyncTaskMessage.Complete(aError);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    66
		}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    67
	else
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    68
		{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    69
		__ASSERT_DEBUG(EFalse, PANIC(KHciServerPanicCat, EMessageAlreadyCompleted));
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    70
		}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    71
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    72
	// Remove Async block		
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    73
	iAsyncTaskSession = 0;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    74
	iBlockMask &= ~MaskBit();
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    75
	}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    76
	
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    77
TBool CHCIServerRequestManager::IsAsyncBlocked()
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    78
	{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    79
	LOG_FUNC
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    80
	
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    81
	return (iBlockMask & MaskBit());
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    82
	}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    83
	
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    84
CHCIServerRequestManager::CHCIServerRequestManager(CCoreHCIPluginImpl& aHCI)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    85
 :	iHCI(aHCI)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    86
	{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    87
	LOG_FUNC
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    88
	}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    89
	
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    90
void CHCIServerRequestManager::ConstructL()
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    91
	{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    92
	LOG_FUNC
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    93
	}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    94
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    95
void CHCIServerRequestManager::ServiceL(CHCISession& aSession, const RMessage2& aMessage)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    96
	{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    97
	if(aMessage.Function() == EServiceSpecificRequest)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    98
		{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
    99
		if(HasCapabilities(aMessage))
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   100
			{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   101
			DoServiceL(aSession, aMessage);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   102
			}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   103
		// else HasCapabilities failed (and has dealt with aMessage).
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   104
		}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   105
	else
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   106
		{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   107
		// The client has issued a bad HCI Server request, we only expect a server specific
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   108
		// request to be made (the specific request being encoded in the TIpcArgs).
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   109
		PanicClient(aMessage, EUnknownHciServerFunction);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   110
		}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   111
	}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   112
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   113
//
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   114
// HCI Direct Access Service
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   115
//
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   116
CHCIDirectAccessManager* CHCIDirectAccessManager::NewL(CCoreHCIPluginImpl& aHCI)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   117
	{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   118
	LOG_STATIC_FUNC
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   119
	
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   120
	CHCIDirectAccessManager* self = new (ELeave) CHCIDirectAccessManager(aHCI);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   121
	CleanupStack::PushL(self);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   122
	self->ConstructL();
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   123
	CleanupStack::Pop(self);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   124
	return self;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   125
	}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   126
	
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   127
void CHCIDirectAccessManager::SetHCICommandQueue(MHCICommandQueue& aHCICommandQueue)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   128
	{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   129
	LOG_FUNC
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   130
	
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   131
	__ASSERT_ALWAYS(!iHCICommandQueue, PANIC(KCoreHciPanicCat, EInterfaceAlreadyInitialised));
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   132
	iHCICommandQueue = &aHCICommandQueue;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   133
	}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   134
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   135
/*virtual*/ TBool CHCIDirectAccessManager::HasCapabilities(const RMessage2& aMessage)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   136
	{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   137
	LOG_FUNC
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   138
	
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   139
	TBool allowed = EFalse;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   140
	
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   141
	switch (aMessage.Int0())
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   142
		{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   143
	case KHCIDirectAccessVendorCommand:
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   144
		// Drop through
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   145
	case KHCIDirectAccessCancel: // requires Network Control + Local Services
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   146
		allowed = aMessage.HasCapability(ECapabilityNetworkControl) && aMessage.HasCapability(ECapabilityLocalServices);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   147
		break;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   148
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   149
	default:
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   150
		PanicClient(aMessage, EUnknownDirectAccessFunction);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   151
		return EFalse;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   152
		}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   153
	
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   154
	if(!allowed)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   155
		{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   156
		aMessage.Complete(KErrPermissionDenied);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   157
		}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   158
		
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   159
	return allowed;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   160
	}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   161
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   162
/*virtual*/ void CHCIDirectAccessManager::DoServiceL(CHCISession& aSession, const RMessage2& aMessage)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   163
	{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   164
	LOG_FUNC
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   165
	
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   166
	TInt request = aMessage.Int0();
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   167
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   168
	switch (request)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   169
		{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   170
	case KHCIDirectAccessCancel:
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   171
		if (iAsyncTaskSession != &aSession)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   172
			{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   173
			return; //drop - not for current async task
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   174
			}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   175
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   176
		// clear cache
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   177
		iMessage = NULL;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   178
		
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   179
		// perform cancellation procedure
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   180
		CompleteAsyncTask(KErrCancel);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   181
		break;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   182
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   183
	case KHCIDirectAccessVendorCommand:
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   184
		{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   185
		if (IsAsyncBlocked())
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   186
			{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   187
			aMessage.Complete(KErrInUse);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   188
			return;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   189
			}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   190
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   191
		const TInt len = User::LeaveIfError(aMessage.GetDesLength(1));
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   192
		
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   193
		// Check the Vendor Command is at least 3 bytes long for the opcode
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   194
		// and the length
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   195
		if (len < 3)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   196
			{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   197
			PanicClient(aMessage, EInvalidVendorCommand);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   198
			break;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   199
			}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   200
		
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   201
		HBufC8* buf = HBufC8::NewLC(len);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   202
		TPtr8 params(buf->Des());
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   203
		aMessage.ReadL(1, params);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   204
		
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   205
		// Extract the opcode and create the new command
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   206
		TUint16 opcode = LittleEndian::Get16(params.Ptr());
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   207
		
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   208
		if (iHCICommandQueue)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   209
			{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   210
			CVendorDebugCommand* cmd = CVendorDebugCommand::NewL(opcode);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   211
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   212
			// Remove the opcode and length from the Vendor Command parameters,
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   213
			// these will be added again to the command frame once it has been
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   214
			// formatted
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   215
			cmd->Command() = params.RightTPtr(params.Length() - 3);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   216
			
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   217
			// cmd will be deleted in MhcqAddCommandL if Leaves.
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   218
			TUint qid = iHCICommandQueue->MhcqAddCommandL(cmd, *this);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   219
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   220
			// Block only after we succeed in adding a command.
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   221
			BlockAsync(aSession, aMessage);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   222
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   223
			// Cache to return completion data to client
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   224
			iMessage = &aMessage;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   225
			}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   226
		else
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   227
			{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   228
			// Slight possible race that a request is made before we have been
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   229
			// given the command queue to work with - so don't panic just error.
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   230
			aMessage.Complete(KErrNotReady);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   231
			}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   232
		CleanupStack::PopAndDestroy(buf);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   233
		}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   234
		break;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   235
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   236
	default:
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   237
		// Unknown message, panic client
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   238
		PanicClient(aMessage, EUnknownDirectAccessFunction);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   239
		break;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   240
		}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   241
	}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   242
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   243
/*virtual*/ void CHCIDirectAccessManager::MhcqcCommandErrored(TInt aErrorCode, const CHCICommandBase* /*aCommand*/)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   244
	{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   245
	LOG_FUNC
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   246
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   247
	// clear cache
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   248
	iMessage = NULL;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   249
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   250
	CompleteAsyncTask(aErrorCode);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   251
	}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   252
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   253
/*virtual*/ void CHCIDirectAccessManager::MhcqcCommandEventReceived(const THCIEventBase& aEvent, const CHCICommandBase* aCommand)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   254
	{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   255
	LOG_FUNC
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   256
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   257
	// We are not the unmatched event observer therefore we must always get a
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   258
	// command
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   259
	__ASSERT_DEBUG(aCommand, PANIC(KCoreHciPanicCat, EReceivedUnmatchedEvent));
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   260
	
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   261
	// It is possible to receive an event but not have a message to complete. This
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   262
	// could happen if a request was cancelled after a Vendor Specific command was
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   263
	// sent, in this case we do nothing.
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   264
	if (iMessage)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   265
		{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   266
		TInt err = KErrNone;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   267
		
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   268
		const THCIEventCode eventcode(aEvent.EventCode());
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   269
		switch(eventcode)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   270
			{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   271
		case ECommandCompleteEvent:
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   272
			{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   273
			if ((aCommand->Opcode() & KVendorDebugOGF) == KVendorDebugOGF)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   274
				{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   275
				const TVendorDebugCompleteEvent& event = TVendorDebugCompleteEvent::Cast(aEvent);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   276
				
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   277
				// Return the event
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   278
				err = iMessage->Write(KHCIServerIpcDesOutParam, event.VendorDebugData());
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   279
				}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   280
			else
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   281
				{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   282
				__ASSERT_DEBUG(EFalse, PANIC(KHciServerPanicCat, ENonVendorOpcodeCompleted));
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   283
				}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   284
			}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   285
			break;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   286
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   287
		case EVendorDebugEvent:
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   288
			{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   289
			const TVendorDebugEvent& event = TVendorDebugEvent::Cast(aEvent);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   290
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   291
			// Return the event
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   292
			err = iMessage->Write(KHCIServerIpcDesOutParam, event.VendorDebugData());
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   293
			}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   294
			break;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   295
			
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   296
		default:
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   297
			__ASSERT_DEBUG(EFalse, PANIC(KCoreHciPanicCat, EReceivedUnknownEvent));
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   298
			break;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   299
			}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   300
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   301
		CompleteAsyncTask(err);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   302
		}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   303
	}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   304
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   305
/*virtual*/ void CHCIDirectAccessManager::CompleteAsyncTask(TInt aError)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   306
	{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   307
	LOG_FUNC
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   308
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   309
	if (!IsAsyncBlocked())
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   310
		{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   311
		return; //drop
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   312
		}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   313
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   314
	CHCIServerRequestManager::CompleteAsyncTask(aError);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   315
	}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   316
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   317
CHCIDirectAccessManager::CHCIDirectAccessManager(CCoreHCIPluginImpl& aHCI)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   318
:	CHCIServerRequestManager(aHCI)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   319
	{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   320
	LOG_FUNC
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   321
	}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   322
	
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   323
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   324
TUint CHCIDirectAccessManager::MaskBit() const
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   325
	{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   326
	LOG_FUNC
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   327
	
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   328
	return EHCIDirectAccessMaskBit;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   329
	}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   330
			
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   331
//
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   332
// Power Control Service
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   333
//
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   334
CBTPowerControlManager* CBTPowerControlManager::NewL(CCoreHCIPluginImpl& aHCI)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   335
	{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   336
	LOG_STATIC_FUNC
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   337
	
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   338
	CBTPowerControlManager* self = new (ELeave) CBTPowerControlManager(aHCI);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   339
	CleanupStack::PushL(self);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   340
	self->ConstructL();
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   341
	CleanupStack::Pop(self);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   342
	return self;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   343
	}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   344
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   345
TBool CBTPowerControlManager::HasCapabilities(const RMessage2& aMessage)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   346
	{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   347
	LOG_FUNC
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   348
	
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   349
	TBool allowed(EFalse);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   350
	
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   351
	switch (aMessage.Int0())
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   352
		{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   353
	case KHCICancelPower:
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   354
		// fall through
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   355
	case EHCISetPower: // requires Network Control + Local Services
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   356
		allowed = aMessage.HasCapability(ECapabilityNetworkControl) && aMessage.HasCapability(ECapabilityLocalServices);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   357
		break;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   358
	
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   359
	case EHCIGetPower: // requires Local Services
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   360
		allowed = aMessage.HasCapability(ECapabilityLocalServices);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   361
		break;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   362
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   363
	default:
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   364
		PanicClient(aMessage, EUnknownPowerControlFunction);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   365
		return EFalse;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   366
		}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   367
		
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   368
	if(!allowed)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   369
		{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   370
		aMessage.Complete(KErrPermissionDenied);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   371
		}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   372
		
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   373
	return allowed;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   374
	}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   375
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   376
/*virtual*/ void CBTPowerControlManager::DoServiceL(CHCISession& aSession, const RMessage2& aMessage)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   377
	{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   378
	LOG_FUNC
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   379
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   380
	TInt request = aMessage.Int0();
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   381
	TInt err;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   382
	TBTPowerState state;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   383
	
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   384
	switch (request)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   385
		{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   386
	case KHCICancelPower:
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   387
		if(iAsyncTaskSession!=&aSession)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   388
			{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   389
			return; //drop - not for current async task
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   390
			}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   391
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   392
		//perform cancellation procedure
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   393
		CompleteAsyncTask(KErrCancel);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   394
		break;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   395
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   396
	case EHCISetPower:
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   397
		if(IsAsyncBlocked())
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   398
			{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   399
			aMessage.Complete(KErrInUse);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   400
			return;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   401
			}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   402
		
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   403
		//Should be called before set power because it could complete synchronously
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   404
		BlockAsync(aSession, aMessage);		
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   405
		state = static_cast<TBTPowerState>(aMessage.Int3());
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   406
		err = iHCI.SetPower(state, NULL);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   407
		if(err != KErrNone)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   408
			{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   409
			CompleteAsyncTask(err);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   410
			return;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   411
			}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   412
		break;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   413
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   414
	case EHCIGetPower:
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   415
		{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   416
		err = iHCI.GetPower(state, NULL);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   417
		if(err != KErrNone)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   418
			{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   419
			aMessage.Complete(err);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   420
			return;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   421
			}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   422
		
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   423
		TPckg<TBTPowerState> pckg(state);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   424
		TRAP(err, aMessage.WriteL(EPSStateReturnSlot, pckg));
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   425
		aMessage.Complete(err);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   426
		}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   427
		break; //synchronous so do not block
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   428
	
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   429
	default:
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   430
		// Unknown message
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   431
		PanicClient(aMessage, EUnknownPowerControlFunction);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   432
		break;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   433
		}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   434
	}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   435
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   436
/*virtual*/ void CBTPowerControlManager::CompleteAsyncTask(TInt aError)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   437
	{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   438
	LOG_FUNC
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   439
	
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   440
	if(!IsAsyncBlocked())
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   441
		{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   442
		return; //drop
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   443
		}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   444
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   445
	CHCIServerRequestManager::CompleteAsyncTask(aError);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   446
	}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   447
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   448
void CBTPowerControlManager::CompleteRequest(TInt aError)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   449
	{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   450
	CompleteAsyncTask(aError);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   451
	}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   452
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   453
CBTPowerControlManager::CBTPowerControlManager(CCoreHCIPluginImpl& aHCI)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   454
:	CHCIServerRequestManager(aHCI)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   455
	{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   456
	LOG_FUNC
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   457
	}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   458
	
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   459
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   460
TUint CBTPowerControlManager::MaskBit() const
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   461
	{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   462
	LOG_FUNC
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   463
	
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   464
	return EBTPowerControlMaskBit;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   465
	}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   466
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   467
//
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   468
// Bluetooth HCI Utils Service
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   469
//
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   470
CBluetoothDutModeManager* CBluetoothDutModeManager::NewL(CCoreHCIPluginImpl& aHCI)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   471
	{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   472
	LOG_STATIC_FUNC
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   473
	
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   474
	CBluetoothDutModeManager* self = new (ELeave) CBluetoothDutModeManager(aHCI);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   475
	CleanupStack::PushL(self);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   476
	self->ConstructL();
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   477
	CleanupStack::Pop(self);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   478
	return self;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   479
	}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   480
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   481
TBool CBluetoothDutModeManager::HasCapabilities(const RMessage2& aMessage)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   482
	{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   483
	LOG_FUNC
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   484
	
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   485
	TBool allowed(EFalse);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   486
	
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   487
	switch (aMessage.Int0())
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   488
		{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   489
	case RBluetoothDutMode::EHCIActivateDutMode:
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   490
		// fall through
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   491
	case RBluetoothDutMode::EHCIDeactivateDutMode: // requires Network Control + Local Services
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   492
		allowed = aMessage.HasCapability(ECapabilityNetworkControl) && aMessage.HasCapability(ECapabilityLocalServices);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   493
		break;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   494
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   495
	default:
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   496
		PanicClient(aMessage, EUnknownBluetoothDutModeFunction);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   497
		return EFalse;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   498
		}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   499
		
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   500
	if(!allowed)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   501
		{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   502
		aMessage.Complete(KErrPermissionDenied);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   503
		}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   504
		
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   505
	return allowed;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   506
	}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   507
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   508
/*virtual*/ void CBluetoothDutModeManager::DoServiceL(CHCISession& /*aSession*/, const RMessage2& aMessage)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   509
	{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   510
	LOG_FUNC
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   511
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   512
	TInt request = aMessage.Int0();
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   513
	TInt err = KErrNotSupported;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   514
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   515
	switch (request)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   516
		{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   517
	case RBluetoothDutMode::EHCIActivateDutMode:
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   518
		// Implementation is adaptation specific and therefore not supported in our reference HCI Server
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   519
		LOG(_L("EHCIActivateDutMode"));
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   520
		aMessage.Complete(err);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   521
		break;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   522
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   523
	case RBluetoothDutMode::EHCIDeactivateDutMode:
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   524
		// Implementation is adaptation specific and therefore not supported in our reference HCI Server
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   525
		LOG(_L("EHCIDeactivateDutMode"));
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   526
		aMessage.Complete(err);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   527
		break;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   528
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   529
	default:
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   530
		// Unknown message
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   531
		PanicClient(aMessage, EUnknownBluetoothDutModeFunction);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   532
		break;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   533
		}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   534
	}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   535
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   536
CBluetoothDutModeManager::CBluetoothDutModeManager(CCoreHCIPluginImpl& aHCI)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   537
:	CHCIServerRequestManager(aHCI)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   538
	{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   539
	LOG_FUNC
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   540
	}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   541
	
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   542
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   543
TUint CBluetoothDutModeManager::MaskBit() const
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   544
	{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   545
	LOG_FUNC
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   546
	
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   547
	return EBluetoothDutModeMaskBit;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   548
	}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   549
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   550
//
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   551
// A2DP Optimiser Service
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   552
//
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   553
CA2dpOptimiserManager* CA2dpOptimiserManager::NewL(CCoreHCIPluginImpl& aHCI)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   554
	{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   555
	LOG_STATIC_FUNC
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   556
	
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   557
	CA2dpOptimiserManager* self = new (ELeave) CA2dpOptimiserManager(aHCI);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   558
	CleanupStack::PushL(self);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   559
	self->ConstructL();
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   560
	CleanupStack::Pop(self);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   561
	return self;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   562
	}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   563
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   564
TBool CA2dpOptimiserManager::HasCapabilities(const RMessage2& aMessage)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   565
	{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   566
	LOG_FUNC
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   567
	
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   568
	TBool allowed(EFalse);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   569
	
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   570
	switch (aMessage.Int0())
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   571
		{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   572
	case RA2dpOptimiser::EHCIA2dpOptimiseAcl:
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   573
		// fall through
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   574
	case RA2dpOptimiser::EHCIA2dpRemoveAclOptimisation: // requires Network Control + Local Services
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   575
		allowed = aMessage.HasCapability(ECapabilityNetworkControl) && aMessage.HasCapability(ECapabilityLocalServices);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   576
		break;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   577
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   578
	default:
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   579
		PanicClient(aMessage, EUnknownA2dpOptimiserFunction);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   580
		return EFalse;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   581
		}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   582
		
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   583
	if(!allowed)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   584
		{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   585
		aMessage.Complete(KErrPermissionDenied);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   586
		}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   587
		
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   588
	return allowed;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   589
	}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   590
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   591
/*virtual*/ void CA2dpOptimiserManager::DoServiceL(CHCISession& /*aSession*/, const RMessage2& aMessage)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   592
	{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   593
	LOG_FUNC
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   594
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   595
	TInt request = aMessage.Int0();
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   596
	TInt err = KErrNotSupported;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   597
	TBuf<20> targetAddrBuf;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   598
	
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   599
	switch (request)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   600
		{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   601
	case RA2dpOptimiser::EHCIA2dpOptimiseAcl:
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   602
		// Implementation is adaptation specific and therefore not supported in our reference HCI Server
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   603
		if (aMessage.GetDesLength(1) == sizeof(TA2dpOptimisationParams))
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   604
			{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   605
			TPckgBuf<TA2dpOptimisationParams> args;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   606
	
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   607
			aMessage.ReadL(1, args);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   608
			args().RemoteDeviceAddress().GetReadable(targetAddrBuf);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   609
			LOG3(_L("EHCIA2dpOptimiseAcl BT Addr: %S, Peak Bandwidth: %d, Access Latency: %d\n"), 
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   610
						&targetAddrBuf, args().PeakBandwidth(), args().AccessLatency());
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   611
	
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   612
			aMessage.Complete(err);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   613
			}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   614
		else
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   615
			{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   616
			PanicClient(aMessage, EInvalidArgument);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   617
			}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   618
		break;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   619
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   620
	case RA2dpOptimiser::EHCIA2dpRemoveAclOptimisation:
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   621
		// Implementation is adaptation specific and therefore not supported in our reference HCI Server
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   622
		if (aMessage.GetDesLength(1) == sizeof(TBTDevAddr))
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   623
			{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   624
			TPckgBuf<TBTDevAddr> addrBuf;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   625
	
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   626
			aMessage.ReadL(1, addrBuf);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   627
			addrBuf().GetReadable(targetAddrBuf);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   628
			LOG1(_L("EHCIA2dpRemoveAclOptimisation BT Addr: %S\n"), &targetAddrBuf);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   629
	
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   630
			aMessage.Complete(err);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   631
			}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   632
		else
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   633
			{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   634
			PanicClient(aMessage, EInvalidArgument);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   635
			}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   636
		break;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   637
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   638
	default:
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   639
		// Unknown message
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   640
		PanicClient(aMessage, EUnknownA2dpOptimiserFunction);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   641
		break;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   642
		}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   643
	}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   644
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   645
CA2dpOptimiserManager::CA2dpOptimiserManager(CCoreHCIPluginImpl& aHCI)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   646
:	CHCIServerRequestManager(aHCI)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   647
	{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   648
	LOG_FUNC
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   649
	}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   650
	
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   651
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   652
TUint CA2dpOptimiserManager::MaskBit() const
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   653
	{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   654
	LOG_FUNC
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   655
	
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   656
	return EA2dpOptimiserMaskBit;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   657
	}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents: 0
diff changeset
   658