bthci/hci2implementations/hctls/usb_original/fdc/src/fdchctloriginal.cpp
author jontanne
Thu, 14 Oct 2010 11:30:12 +0100
changeset 27 83036355c0f3
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:
diff changeset
     1
// Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
     2
// All rights reserved.
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
     3
// This component and the accompanying materials are made available
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
     4
// under the terms of "Eclipse Public License v1.0"
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
     5
// which accompanies this distribution, and is available
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
     7
//
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
     8
// Initial Contributors:
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
     9
// Nokia Corporation - initial contribution.
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    10
//
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    11
// Contributors:
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    12
//
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    13
// Description:
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    14
// 
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    15
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    16
/**
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    17
@file
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    18
@internalComponent
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    19
*/
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    20
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    21
#include "fdchctloriginal.h"
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    22
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    23
#include <d32usbdescriptors.h>
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    24
#include <usbhost/internal/fdcpluginobserver.h>
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    25
#include <usbhosterrors.h>
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    26
#include <bluetooth/logger.h>
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    27
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    28
#include "fdchctloriginalserver.h"
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    29
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    30
#include <bluetooth/logger.h>
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    31
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    32
#ifdef __FLOG_ACTIVE
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    33
_LIT8(KLogComponent, "fdchctloriginal");
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    34
#endif
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    35
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    36
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    37
CFdcHctlOriginal* CFdcHctlOriginal::NewL(MFdcPluginObserver& aObserver)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    38
	{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    39
	LOG_STATIC_FUNC
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    40
	CFdcHctlOriginal* self = new(ELeave) CFdcHctlOriginal(aObserver);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    41
	CleanupStack::PushL(self);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    42
	self->ConstructL();
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    43
	CleanupStack::Pop();
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    44
	return self;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    45
	}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    46
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    47
CFdcHctlOriginal::CFdcHctlOriginal(MFdcPluginObserver& aObserver)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    48
	: CFdcPlugin(aObserver)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    49
	{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    50
	LOG_FUNC
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    51
	}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    52
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    53
CFdcHctlOriginal::~CFdcHctlOriginal()
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    54
	{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    55
	LOG_FUNC
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    56
	iHctlSession.Close();
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    57
	delete iServer;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    58
	}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    59
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    60
void CFdcHctlOriginal::ConstructL()
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    61
	{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    62
	LOG_FUNC
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    63
	iServer = CFdcHctlOriginalServer::NewL(*this);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    64
	}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    65
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    66
TAny* CFdcHctlOriginal::GetInterface(TUid aUid)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    67
	{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    68
	LOG_FUNC
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    69
	LOG1(_L8("\taUid = 0x%08x"), aUid);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    70
	
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    71
	TAny* ret = NULL;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    72
	if(aUid == TUid::Uid(KFdcInterfaceV1))
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    73
		{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    74
		ret = reinterpret_cast<TAny*>(static_cast<MFdcInterfaceV1*>(this));
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    75
		}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    76
	
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    77
	LOG1(_L8("\tret = [0x%08x]"), ret);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    78
	return ret;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    79
	}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    80
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    81
TInt CFdcHctlOriginal::Mfi1NewFunction(TUint aDeviceId,
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    82
		const TArray<TUint>& aInterfaces,
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    83
		const TUsbDeviceDescriptor& aDeviceDescriptor,
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    84
		const TUsbConfigurationDescriptor& aConfigurationDescriptor)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    85
	{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    86
	LOG_FUNC
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    87
	
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    88
	// Normally an FDC is required to claim it's interfaces first.  In this
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    89
	// case we need to parse the descriptor tree to determine if the device
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    90
	// firmware update interface is present. (We don't do firmware updates but
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    91
	// we claim it until to provide successful device attachments. If a
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    92
	// firmware update FDC is provided this should be removed.)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    93
#ifdef SYMBIAN_FDC_HCTL_ORIGINAL_ACCEPT_FIRMWARE_UPDATE
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    94
	TBool firmwareIntFound = EFalse;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    95
	TUint8 firmwareIntNum = 0xff;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    96
	
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    97
	TUint8 KDfuInterfaceClass = 0xfe;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    98
	TUint8 KDfuInterfaceSubClass = 0x01;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
    99
	
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   100
	// Drop down a level from the configuration descriptor.
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   101
	TUsbGenericDescriptor* descriptor = aConfigurationDescriptor.iFirstChild;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   102
	// Search across the interface tier (note doesn't handle DFU in IAD).
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   103
	while(descriptor)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   104
		{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   105
		TUsbInterfaceDescriptor* interface;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   106
		if (interface = TUsbInterfaceDescriptor::Cast(descriptor), interface)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   107
			{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   108
			if(	interface->InterfaceClass() == KDfuInterfaceClass &&
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   109
				interface->InterfaceSubClass() == KDfuInterfaceSubClass)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   110
				{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   111
				firmwareIntNum = interface->InterfaceNumber();
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   112
				firmwareIntFound = ETrue;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   113
				break;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   114
				}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   115
			}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   116
		descriptor = descriptor->iNextPeer;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   117
		}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   118
#endif // SYMBIAN_FDC_HCTL_ORIGINAL_ACCEPT_FIRMWARE_UPDATE
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   119
	
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   120
	// We claim the interfaces we are to represent, we must claim the
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   121
	// first interface given to us as FDF has already determined that
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   122
	// we are to use it.
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   123
	const TUint KNumOfHctlInterfaces = 2;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   124
	const TUint8 KAclInterfaceNum = 0x00, KScoInterfaceNum = 0x01;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   125
	TBool gotAcl = EFalse, gotSco = EFalse, fatalError = EFalse;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   126
	
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   127
	for(TInt i=0; i<aInterfaces.Count(); ++i)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   128
		{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   129
		TUint intNum = aInterfaces[i];
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   130
		if(intNum == KAclInterfaceNum)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   131
			{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   132
			fatalError = (fatalError || gotAcl); // The USB device should only report one ACL interface
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   133
			iAclToken = Observer().TokenForInterface(intNum);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   134
			gotAcl = ETrue;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   135
			}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   136
		else if(intNum == KScoInterfaceNum)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   137
			{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   138
			fatalError = (fatalError || gotSco); // The USB device should only report one ACL interface
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   139
			iScoToken = Observer().TokenForInterface(intNum);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   140
			gotSco = ETrue;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   141
			}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   142
		else if(i == 0)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   143
			{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   144
			// We always need to claim the first interface, this should have
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   145
			// been claimed already, but if we have a funny device then this
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   146
			// might not be the case.  We will need to error.
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   147
			TUint32 unknownToken = Observer().TokenForInterface(intNum);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   148
			return KErrCorrupt;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   149
			}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   150
#ifdef SYMBIAN_FDC_HCTL_ORIGINAL_ACCEPT_FIRMWARE_UPDATE
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   151
		else if(firmwareIntFound && intNum == firmwareIntNum)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   152
			{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   153
			TUint32 dfuToken = Observer().TokenForInterface(intNum);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   154
			}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   155
#endif // SYMBIAN_FDC_HCTL_ORIGINAL_ACCEPT_FIRMWARE_UPDATE
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   156
		}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   157
	// At this point we will have claimed to the interface mandated by FDF and
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   158
	// so we are at liberty to return an error.
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   159
	
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   160
	// firstly, check to see if a fatal error occured.
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   161
	if(fatalError)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   162
		{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   163
		LOG(_L8("\tFatal error when retrieving interfaces for driver instance..."));
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   164
		return KErrGeneral;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   165
		}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   166
	
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   167
	// Now we perform some validation that the function is what we expect.
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   168
	// There should be two interfaces as part of the function. One is
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   169
	// the standard data and control planes.  The other for the sync-
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   170
	// chronous connections.
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   171
	if(aConfigurationDescriptor.NumInterfaces() < KNumOfHctlInterfaces)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   172
		{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   173
		LOG(_L8("\tInsufficent interfaces in USB config. descriptor..."));
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   174
		return KErrUsbBadDescriptor;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   175
		}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   176
	if(aInterfaces.Count() < KNumOfHctlInterfaces)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   177
		{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   178
		LOG(_L8("\tInsufficient interfaces provided to FDC..."));
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   179
		return KErrUnderflow;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   180
		}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   181
	
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   182
	// Ensure that we got both interfaces, otherwise the device is malformed.
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   183
	if(!gotAcl || !gotSco)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   184
		{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   185
		LOG2(_L8("\tMissing Token [ACL=%d] [SCO=%d]"), gotAcl, gotSco);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   186
		return KErrNotFound;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   187
		}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   188
	
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   189
	// At this point we are set-up to use the device.
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   190
	iReady = ETrue;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   191
	
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   192
	// We try our best; the Bluetooth stack may not be running, it may not be even using
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   193
	// the USB HCTL.  So we accept the tokens and try the best to set-up the HCTL.
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   194
	// If we fail now the HCTL should later inform us to try again.
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   195
	RequestConnection();
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   196
	
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   197
	return KErrNone;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   198
	}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   199
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   200
void CFdcHctlOriginal::Mfi1DeviceDetached(TUint aDeviceId)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   201
	{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   202
	LOG_FUNC
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   203
	
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   204
	iReady = EFalse;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   205
	
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   206
	if(iHctlSession.Handle())
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   207
		{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   208
		// Inform of disconnection.
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   209
		iHctlSession.DeviceDetached();
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   210
		}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   211
	// Close Hctl Handle
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   212
	iHctlSession.Close();
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   213
	}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   214
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   215
void CFdcHctlOriginal::RequestConnection()
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   216
	{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   217
	LOG_FUNC
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   218
	// Trigger the attempt to connect to the USB HCTL Server.
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   219
	
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   220
	if(!iReady)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   221
		{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   222
		// For whatever reason, we have not got the tokens for the USB interfaces.
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   223
		LOG(_L8("\tFDC is not ready"));
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   224
		return;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   225
		}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   226
	
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   227
	// Note that this will error if, the bt thread or usb hctl is not running;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   228
	// or if there is another FDC already connected to it.
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   229
	TInt err = iHctlSession.Connect();
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   230
	if(err != KErrNone)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   231
		{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   232
		LOG1(_L8("\tRHCTLUsbOriginal::Connect error = %d"), err);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   233
		return;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   234
		}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   235
	
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   236
	// Now inform the stack that we have a connected device.
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   237
	err = iHctlSession.DeviceAttached(iAclToken, iScoToken);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   238
	if(err != KErrNone)
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   239
		{
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   240
		LOG1(_L8("\tRHCTLUsbOriginal::DeviceAttached error = %d"), err);
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   241
		iHctlSession.Close();
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   242
		return;
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   243
		}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   244
	}
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   245
	
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   246
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   247
83036355c0f3 Add USB HCTL to bt package
jontanne
parents:
diff changeset
   248