epoc32/include/drivers/usbcshared.inl
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:33:34 +0100
branchSymbian3
changeset 4 837f303aceeb
permissions -rw-r--r--
Current Symbian^3 public API header files (from PDK 3.0.h)
This is the epoc32/include tree with the "platform" subtrees removed, and
all but a selected few mbg and rsg files removed.
williamr@4
     1
// Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
williamr@4
     2
// All rights reserved.
williamr@4
     3
// This component and the accompanying materials are made available
williamr@4
     4
// under the terms of the License "Eclipse Public License v1.0"
williamr@4
     5
// which accompanies this distribution, and is available
williamr@4
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
williamr@4
     7
//
williamr@4
     8
// Initial Contributors:
williamr@4
     9
// Nokia Corporation - initial contribution.
williamr@4
    10
//
williamr@4
    11
// Contributors:
williamr@4
    12
//
williamr@4
    13
// Description:
williamr@4
    14
// e32\include\drivers\usbcshared.inl
williamr@4
    15
// Kernel side definitions for the USB Device driver stack (PIL + LDD).
williamr@4
    16
// 
williamr@4
    17
//
williamr@4
    18
williamr@4
    19
/**
williamr@4
    20
 @file usbcshared.inl
williamr@4
    21
 @internalTechnology
williamr@4
    22
*/
williamr@4
    23
williamr@4
    24
#ifndef __USBCSHARED_INL__
williamr@4
    25
#define __USBCSHARED_INL__
williamr@4
    26
williamr@4
    27
//
williamr@4
    28
// --- DUsbClientController (USB PDD) ---
williamr@4
    29
//
williamr@4
    30
williamr@4
    31
// --- Private member functions, used by controller itself ---
williamr@4
    32
williamr@4
    33
const DBase* DUsbClientController::PEndpoint2ClientId(TInt aRealEndpoint) const
williamr@4
    34
	{
williamr@4
    35
	if (iRealEndpoints[aRealEndpoint].iLEndpoint)
williamr@4
    36
		return iRealEndpoints[aRealEndpoint].iLEndpoint->iInterface->iInterfaceSet->iClientId;
williamr@4
    37
	else
williamr@4
    38
		return NULL;
williamr@4
    39
	}
williamr@4
    40
williamr@4
    41
williamr@4
    42
TInt DUsbClientController::PEndpoint2LEndpoint(TInt aRealEndpoint) const
williamr@4
    43
	{
williamr@4
    44
	if (iRealEndpoints[aRealEndpoint].iLEndpoint)
williamr@4
    45
		return iRealEndpoints[aRealEndpoint].iLEndpoint->iLEndpointNum;
williamr@4
    46
	else
williamr@4
    47
		return -1;
williamr@4
    48
	}
williamr@4
    49
williamr@4
    50
williamr@4
    51
const TUsbcConfiguration* DUsbClientController::CurrentConfig() const
williamr@4
    52
	{
williamr@4
    53
	return (iCurrentConfig ? iConfigs[iCurrentConfig - 1] : NULL);
williamr@4
    54
	}
williamr@4
    55
williamr@4
    56
williamr@4
    57
TUsbcConfiguration* DUsbClientController::CurrentConfig()
williamr@4
    58
	{
williamr@4
    59
	return (iCurrentConfig ? iConfigs[iCurrentConfig - 1] : NULL);
williamr@4
    60
	}
williamr@4
    61
williamr@4
    62
williamr@4
    63
TBool DUsbClientController::InterfaceExists(TInt aNumber) const
williamr@4
    64
	{
williamr@4
    65
	const TInt num_ifcsets = iConfigs[0]->iInterfaceSets.Count();
williamr@4
    66
	RPointerArray<TUsbcInterfaceSet>& ifcsets = iConfigs[0]->iInterfaceSets;
williamr@4
    67
	for (TInt i = 0; i < num_ifcsets; i++)
williamr@4
    68
		{
williamr@4
    69
		if (ifcsets[i]->iInterfaceNumber == aNumber)
williamr@4
    70
			{
williamr@4
    71
			return ETrue;
williamr@4
    72
			}
williamr@4
    73
		}
williamr@4
    74
	return EFalse;
williamr@4
    75
	}
williamr@4
    76
williamr@4
    77
williamr@4
    78
TBool DUsbClientController::EndpointExists(TUint aAddress) const
williamr@4
    79
	{
williamr@4
    80
	// Ep0 doesn't have a "logical ep" pointer (there's no virtual endpoint zero);
williamr@4
    81
	// that's why this pointer being non-NULL is not a sufficient criterion for
williamr@4
    82
	// endpoint-existence. (Apart from that, ep0 always exists.)
williamr@4
    83
	const TInt idx = EpAddr2Idx(aAddress);
williamr@4
    84
	return ((idx < iDeviceTotalEndpoints) &&
williamr@4
    85
			((iRealEndpoints[idx].iLEndpoint != NULL) ||
williamr@4
    86
			 ((aAddress & KUsbEpAddress_Portmask) == 0)));
williamr@4
    87
	}
williamr@4
    88
williamr@4
    89
williamr@4
    90
void DUsbClientController::Buffer2Setup(const TAny* aBuf, TUsbcSetup& aSetup) const
williamr@4
    91
	{
williamr@4
    92
	// TUint8 index
williamr@4
    93
	aSetup.iRequestType = static_cast<const TUint8*>(aBuf)[0];
williamr@4
    94
	aSetup.iRequest		= static_cast<const TUint8*>(aBuf)[1];
williamr@4
    95
	// TUint16 index from here!
williamr@4
    96
	aSetup.iValue  = SWAP_BYTES_16((static_cast<const TUint16*>(aBuf))[1]);
williamr@4
    97
	aSetup.iIndex  = SWAP_BYTES_16((static_cast<const TUint16*>(aBuf))[2]);
williamr@4
    98
	aSetup.iLength = SWAP_BYTES_16((static_cast<const TUint16*>(aBuf))[3]);
williamr@4
    99
	}
williamr@4
   100
williamr@4
   101
williamr@4
   102
TUint DUsbClientController::EpIdx2Addr(TUint aRealEndpoint) const
williamr@4
   103
	{
williamr@4
   104
	return ((aRealEndpoint << 7) & 0x80) | ((aRealEndpoint >> 1) & 0x0f);
williamr@4
   105
	}
williamr@4
   106
williamr@4
   107
williamr@4
   108
TUint DUsbClientController::EpAddr2Idx(TUint aAddress) const
williamr@4
   109
	{
williamr@4
   110
	return ((aAddress & 0x80) >> 7) | ((aAddress & 0x0f) << 1);
williamr@4
   111
	}
williamr@4
   112
williamr@4
   113
williamr@4
   114
void DUsbClientController::SetEp0DataOutVars(const TUsbcSetup& aPacket, const DBase* aClientId)
williamr@4
   115
	{
williamr@4
   116
	__KTRACE_OPT(KUSB, Kern::Printf("DUsbClientController::SetEp0DataOutVars()"));
williamr@4
   117
	iSetup = aPacket;
williamr@4
   118
	iEp0DataReceiving = ETrue;
williamr@4
   119
	iEp0DataReceived = 0;
williamr@4
   120
	iEp0ClientId = aClientId;
williamr@4
   121
	}
williamr@4
   122
williamr@4
   123
williamr@4
   124
void DUsbClientController::ResetEp0DataOutVars()
williamr@4
   125
	{
williamr@4
   126
	__KTRACE_OPT(KUSB, Kern::Printf("DUsbClientController::ResetEp0DataOutVars()"));
williamr@4
   127
	iEp0DataReceiving = EFalse;
williamr@4
   128
	iEp0DataReceived = 0;
williamr@4
   129
	iEp0ClientId = NULL;
williamr@4
   130
	}
williamr@4
   131
williamr@4
   132
williamr@4
   133
TBool DUsbClientController::IsInTheRequestList(const TUsbcRequestCallback& aCallback)
williamr@4
   134
	{
williamr@4
   135
    	const TInt irq = __SPIN_LOCK_IRQSAVE(iUsbLock);
williamr@4
   136
	TSglQueIter<TUsbcRequestCallback> iter(iEp0ReadRequestCallbacks);
williamr@4
   137
	TUsbcRequestCallback* p;
williamr@4
   138
	while ((p = iter++) != NULL)
williamr@4
   139
		{
williamr@4
   140
		if (p == &aCallback)
williamr@4
   141
			{
williamr@4
   142
			__SPIN_UNLOCK_IRQRESTORE(iUsbLock, irq);
williamr@4
   143
			return ETrue;
williamr@4
   144
			}
williamr@4
   145
		}
williamr@4
   146
    	__SPIN_UNLOCK_IRQRESTORE(iUsbLock, irq);
williamr@4
   147
	return EFalse;
williamr@4
   148
	}
williamr@4
   149
williamr@4
   150
williamr@4
   151
TBool DUsbClientController::IsInTheStatusList(const TUsbcStatusCallback& aCallback)
williamr@4
   152
	{
williamr@4
   153
    	const TInt irq = __SPIN_LOCK_IRQSAVE(iUsbLock);
williamr@4
   154
	TSglQueIter<TUsbcStatusCallback> iter(iStatusCallbacks);
williamr@4
   155
	TUsbcStatusCallback* p;
williamr@4
   156
	while ((p = iter++) != NULL)
williamr@4
   157
		{
williamr@4
   158
		if (p == &aCallback)
williamr@4
   159
			{
williamr@4
   160
            		__SPIN_UNLOCK_IRQRESTORE(iUsbLock, irq);
williamr@4
   161
			return ETrue;
williamr@4
   162
			}
williamr@4
   163
		}
williamr@4
   164
    	__SPIN_UNLOCK_IRQRESTORE(iUsbLock, irq);
williamr@4
   165
	return EFalse;
williamr@4
   166
	}
williamr@4
   167
williamr@4
   168
williamr@4
   169
TBool DUsbClientController::IsInTheEpStatusList(const TUsbcEndpointStatusCallback& aCallback)
williamr@4
   170
	{
williamr@4
   171
    	const TInt irq = __SPIN_LOCK_IRQSAVE(iUsbLock);
williamr@4
   172
	TSglQueIter<TUsbcEndpointStatusCallback> iter(iEpStatusCallbacks);
williamr@4
   173
	TUsbcEndpointStatusCallback* p;
williamr@4
   174
	while ((p = iter++) != NULL)
williamr@4
   175
		{
williamr@4
   176
		if (p == &aCallback)
williamr@4
   177
			{
williamr@4
   178
		    	__SPIN_UNLOCK_IRQRESTORE(iUsbLock, irq);
williamr@4
   179
			return ETrue;
williamr@4
   180
			}
williamr@4
   181
		}
williamr@4
   182
    	__SPIN_UNLOCK_IRQRESTORE(iUsbLock, irq);
williamr@4
   183
	return EFalse;
williamr@4
   184
	}
williamr@4
   185
williamr@4
   186
williamr@4
   187
TBool DUsbClientController::IsInTheOtgFeatureList(const TUsbcOtgFeatureCallback& aCallback)
williamr@4
   188
	{
williamr@4
   189
    	const TInt irq = __SPIN_LOCK_IRQSAVE(iUsbLock);
williamr@4
   190
	TSglQueIter<TUsbcOtgFeatureCallback> iter(iOtgCallbacks);
williamr@4
   191
	TUsbcOtgFeatureCallback* p;
williamr@4
   192
	while ((p = iter++) != NULL)
williamr@4
   193
		{
williamr@4
   194
		if (p == &aCallback)
williamr@4
   195
			{
williamr@4
   196
		    	__SPIN_UNLOCK_IRQRESTORE(iUsbLock, irq);
williamr@4
   197
			return ETrue;
williamr@4
   198
			}
williamr@4
   199
		}
williamr@4
   200
    	__SPIN_UNLOCK_IRQRESTORE(iUsbLock, irq);
williamr@4
   201
	return EFalse;
williamr@4
   202
	}
williamr@4
   203
williamr@4
   204
//
williamr@4
   205
// --- Misc classes ---
williamr@4
   206
//
williamr@4
   207
williamr@4
   208
// --- TUsbcClientCallback
williamr@4
   209
williamr@4
   210
/** Constructor.
williamr@4
   211
 */
williamr@4
   212
TUsbcClientCallback::TUsbcClientCallback(DBase* aOwner, TDfcFn aCallback, TInt aPriority)
williamr@4
   213
	: iOwner(aOwner),
williamr@4
   214
	  iDfc(aCallback, aOwner, aPriority)
williamr@4
   215
	{}
williamr@4
   216
williamr@4
   217
williamr@4
   218
/** Returns a pointer to the owner of this request.
williamr@4
   219
williamr@4
   220
	@return A pointer to the owner of this request.
williamr@4
   221
*/
williamr@4
   222
DBase* TUsbcClientCallback::Owner() const
williamr@4
   223
	{
williamr@4
   224
	return iOwner;
williamr@4
   225
	}
williamr@4
   226
williamr@4
   227
williamr@4
   228
/** Executes the callback function set by the owner of this request.
williamr@4
   229
williamr@4
   230
	@return KErrNone.
williamr@4
   231
*/
williamr@4
   232
TInt TUsbcClientCallback::DoCallback()
williamr@4
   233
	{
williamr@4
   234
	__ASSERT_DEBUG((NKern::CurrentContext() == EThread), Kern::Fault(KUsbPILPanicCat, __LINE__));
williamr@4
   235
	iDfc.Enque();
williamr@4
   236
	return KErrNone;
williamr@4
   237
	}
williamr@4
   238
williamr@4
   239
williamr@4
   240
/** Cancels the callback function set by the owner of this request.
williamr@4
   241
 */
williamr@4
   242
void TUsbcClientCallback::Cancel()
williamr@4
   243
	{
williamr@4
   244
	iDfc.Cancel();
williamr@4
   245
	}
williamr@4
   246
williamr@4
   247
williamr@4
   248
/** Sets the DFC queue used by the callback function.
williamr@4
   249
	@param aDfcQ DFC queue to be set
williamr@4
   250
 */
williamr@4
   251
void TUsbcClientCallback::SetDfcQ(TDfcQue* aDfcQ)
williamr@4
   252
	{
williamr@4
   253
	iDfc.SetDfcQ(aDfcQ);
williamr@4
   254
	}
williamr@4
   255
williamr@4
   256
williamr@4
   257
// --- TUsbcEndpointStatusCallback
williamr@4
   258
williamr@4
   259
/** Constructor.
williamr@4
   260
 */
williamr@4
   261
TUsbcEndpointStatusCallback::TUsbcEndpointStatusCallback(DBase* aOwner, TDfcFn aCallback,
williamr@4
   262
														 TInt aPriority)
williamr@4
   263
	: iOwner(aOwner),
williamr@4
   264
	  iDfc(aCallback, aOwner, aPriority),
williamr@4
   265
	  iState(0)
williamr@4
   266
	{}
williamr@4
   267
williamr@4
   268
williamr@4
   269
/** Sets the state of this request to aState.
williamr@4
   270
williamr@4
   271
	@param aState The new state to be set.
williamr@4
   272
*/
williamr@4
   273
void TUsbcEndpointStatusCallback::SetState(TUint aState)
williamr@4
   274
	{
williamr@4
   275
	iState = aState;
williamr@4
   276
	}
williamr@4
   277
williamr@4
   278
williamr@4
   279
/** Returns the state value of this request.
williamr@4
   280
williamr@4
   281
	@return The state value of this request.
williamr@4
   282
*/
williamr@4
   283
TUint TUsbcEndpointStatusCallback::State() const
williamr@4
   284
	{
williamr@4
   285
	return iState;
williamr@4
   286
	}
williamr@4
   287
williamr@4
   288
williamr@4
   289
/** Returns a pointer to the owner of this request.
williamr@4
   290
williamr@4
   291
	@return A pointer to the owner of this request.
williamr@4
   292
*/
williamr@4
   293
DBase* TUsbcEndpointStatusCallback::Owner() const
williamr@4
   294
	{
williamr@4
   295
	return iOwner;
williamr@4
   296
	}
williamr@4
   297
williamr@4
   298
williamr@4
   299
/** Executes the callback function set by the owner of this request.
williamr@4
   300
williamr@4
   301
	@return KErrNone.
williamr@4
   302
*/
williamr@4
   303
TInt TUsbcEndpointStatusCallback::DoCallback()
williamr@4
   304
	{
williamr@4
   305
	if (NKern::CurrentContext() == EThread)
williamr@4
   306
		iDfc.Enque();
williamr@4
   307
	else
williamr@4
   308
		iDfc.Add();
williamr@4
   309
	return KErrNone;
williamr@4
   310
	}
williamr@4
   311
williamr@4
   312
williamr@4
   313
/** Cancels the callback function set by the owner of this request.
williamr@4
   314
*/
williamr@4
   315
void TUsbcEndpointStatusCallback::Cancel()
williamr@4
   316
	{
williamr@4
   317
	iDfc.Cancel();
williamr@4
   318
	}
williamr@4
   319
williamr@4
   320
williamr@4
   321
/** Sets the DFC queue used by the callback function.
williamr@4
   322
*/
williamr@4
   323
void TUsbcEndpointStatusCallback::SetDfcQ(TDfcQue* aDfcQ)
williamr@4
   324
	{
williamr@4
   325
	iDfc.SetDfcQ(aDfcQ);
williamr@4
   326
	}
williamr@4
   327
williamr@4
   328
williamr@4
   329
// --- TUsbcStatusCallback
williamr@4
   330
williamr@4
   331
/** Constructor.
williamr@4
   332
 */
williamr@4
   333
TUsbcStatusCallback::TUsbcStatusCallback(DBase* aOwner, TDfcFn aCallback, TInt aPriority)
williamr@4
   334
	: iOwner(aOwner),
williamr@4
   335
	  iDfc(aCallback, aOwner, aPriority)
williamr@4
   336
	{
williamr@4
   337
 	ResetState();
williamr@4
   338
	}
williamr@4
   339
williamr@4
   340
williamr@4
   341
/** Sets the state of this request to aState (at the first available position
williamr@4
   342
	in the state value array).
williamr@4
   343
williamr@4
   344
	@param aState The new state to be set.
williamr@4
   345
*/
williamr@4
   346
void TUsbcStatusCallback::SetState(TUsbcDeviceState aState)
williamr@4
   347
	{
williamr@4
   348
	for (TInt i = 0; i < KUsbcDeviceStateRequests; i++)
williamr@4
   349
		{
williamr@4
   350
		if (iState[i] == EUsbcNoState)
williamr@4
   351
			{
williamr@4
   352
			iState[i] = aState;
williamr@4
   353
			return;
williamr@4
   354
			}
williamr@4
   355
		}
williamr@4
   356
	__KTRACE_OPT(KPANIC, Kern::Printf("  Error: KUsbcDeviceStateRequests too small (%d)!",
williamr@4
   357
									  KUsbcDeviceStateRequests));
williamr@4
   358
	}
williamr@4
   359
williamr@4
   360
williamr@4
   361
/** Returns the state value of this request at a certain index.
williamr@4
   362
williamr@4
   363
	@param aIndex The index to be used for referencing the state array.
williamr@4
   364
williamr@4
   365
	@return The state value of this request at aIndex.
williamr@4
   366
*/
williamr@4
   367
TUsbcDeviceState TUsbcStatusCallback::State(TInt aIndex) const
williamr@4
   368
	{
williamr@4
   369
	if (aIndex >= 0 && aIndex < KUsbcDeviceStateRequests)
williamr@4
   370
		{
williamr@4
   371
		return iState[aIndex];
williamr@4
   372
		}
williamr@4
   373
	else
williamr@4
   374
		{
williamr@4
   375
		__KTRACE_OPT(KPANIC, Kern::Printf("  Error: aIndex too large (%d)!", aIndex));
williamr@4
   376
		return EUsbcNoState;
williamr@4
   377
		}
williamr@4
   378
	}
williamr@4
   379
williamr@4
   380
williamr@4
   381
/** Resets the entire state value array of this request.
williamr@4
   382
*/
williamr@4
   383
void TUsbcStatusCallback::ResetState()
williamr@4
   384
	{
williamr@4
   385
	for (TInt i = 0; i < KUsbcDeviceStateRequests; ++i)
williamr@4
   386
		{
williamr@4
   387
		iState[i] = EUsbcNoState;
williamr@4
   388
		}
williamr@4
   389
	}
williamr@4
   390
williamr@4
   391
williamr@4
   392
/** Returns a pointer to the owner of this request.
williamr@4
   393
williamr@4
   394
	@return A pointer to the owner of this request.
williamr@4
   395
*/
williamr@4
   396
DBase* TUsbcStatusCallback::Owner() const
williamr@4
   397
	{
williamr@4
   398
	return iOwner;
williamr@4
   399
	}
williamr@4
   400
williamr@4
   401
williamr@4
   402
/** Executes the callback function set by the owner of this request.
williamr@4
   403
williamr@4
   404
	@return KErrNone.
williamr@4
   405
*/
williamr@4
   406
TInt TUsbcStatusCallback::DoCallback()
williamr@4
   407
	{
williamr@4
   408
	if (NKern::CurrentContext() == EThread)
williamr@4
   409
		iDfc.Enque();
williamr@4
   410
	else
williamr@4
   411
		iDfc.Add();
williamr@4
   412
	return KErrNone;
williamr@4
   413
	}
williamr@4
   414
williamr@4
   415
williamr@4
   416
/** Cancels the callback function set by the owner of this request.
williamr@4
   417
*/
williamr@4
   418
void TUsbcStatusCallback::Cancel()
williamr@4
   419
	{
williamr@4
   420
	iDfc.Cancel();
williamr@4
   421
	}
williamr@4
   422
williamr@4
   423
williamr@4
   424
/** Sets the DFC queue used by the callback function.
williamr@4
   425
*/
williamr@4
   426
void TUsbcStatusCallback::SetDfcQ(TDfcQue* aDfcQ)
williamr@4
   427
	{
williamr@4
   428
	iDfc.SetDfcQ(aDfcQ);
williamr@4
   429
	}
williamr@4
   430
williamr@4
   431
// --- TUsbcRequestCallback
williamr@4
   432
williamr@4
   433
/** Constructor.
williamr@4
   434
 */
williamr@4
   435
TUsbcRequestCallback::TUsbcRequestCallback(const DBase* aOwner, TInt aEndpointNum, TDfcFn aDfcFunc,
williamr@4
   436
										   TAny* aEndpoint, TDfcQue* aDfcQ, TInt aPriority)
williamr@4
   437
	: iEndpointNum(aEndpointNum),
williamr@4
   438
	  iRealEpNum(-1),
williamr@4
   439
	  iOwner(aOwner),
williamr@4
   440
	  iDfc(aDfcFunc, aEndpoint, aDfcQ, aPriority),
williamr@4
   441
	  iTransferDir(EControllerNone),
williamr@4
   442
	  iBufferStart(NULL),
williamr@4
   443
	  iPacketIndex(NULL),							  // actually TUint16 (*)[]
williamr@4
   444
	  iPacketSize(NULL),							  // actually TUint16 (*)[]
williamr@4
   445
	  iLength(0),
williamr@4
   446
	  iZlpReqd(EFalse),
williamr@4
   447
	  iTxBytes(0),
williamr@4
   448
	  iRxPackets(0),
williamr@4
   449
	  iError(KErrNone)
williamr@4
   450
	{
williamr@4
   451
	}
williamr@4
   452
williamr@4
   453
williamr@4
   454
/** Destructor.
williamr@4
   455
 */
williamr@4
   456
TUsbcRequestCallback::~TUsbcRequestCallback()
williamr@4
   457
	{
williamr@4
   458
	__KTRACE_OPT(KUSB, Kern::Printf("TUsbcRequestCallback::~TUsbcRequestCallback()"));
williamr@4
   459
	iDfc.Cancel();
williamr@4
   460
	}
williamr@4
   461
williamr@4
   462
williamr@4
   463
/** Sets some data members of this request for a read request.
williamr@4
   464
williamr@4
   465
	@param aBufferStart The start of the data buffer to be filled.
williamr@4
   466
	@param aBufferAddr The physical address of the buffer (used for DMA).
williamr@4
   467
	@param aPacketIndex A pointer to the packet index values array.
williamr@4
   468
	@param aPacketSize A pointer to the packet size values array.
williamr@4
   469
	@param aLength The number of bytes to be received.
williamr@4
   470
*/
williamr@4
   471
void TUsbcRequestCallback::SetRxBufferInfo(TUint8* aBufferStart, TPhysAddr aBufferAddr,
williamr@4
   472
										   TUsbcPacketArray* aPacketIndex,
williamr@4
   473
										   TUsbcPacketArray* aPacketSize,
williamr@4
   474
										   TInt aLength)
williamr@4
   475
	{
williamr@4
   476
	iTransferDir = EControllerRead;
williamr@4
   477
	iBufferStart = aBufferStart;
williamr@4
   478
	iBufferAddr = aBufferAddr;
williamr@4
   479
	iPacketIndex = aPacketIndex;
williamr@4
   480
	iPacketSize = aPacketSize;
williamr@4
   481
	iLength = aLength;
williamr@4
   482
	}
williamr@4
   483
williamr@4
   484
williamr@4
   485
/** Sets some data members of this request for a write request.
williamr@4
   486
williamr@4
   487
	@param aBufferStart The start of the buffer that contains the data to be sent.
williamr@4
   488
	@param aBufferAddr The physical address of the buffer (used for DMA).
williamr@4
   489
	@param aLength The number of bytes to be transmitted.
williamr@4
   490
*/
williamr@4
   491
void TUsbcRequestCallback::SetTxBufferInfo(TUint8* aBufferStart, TPhysAddr aBufferAddr, TInt aLength)
williamr@4
   492
	{
williamr@4
   493
	iTransferDir = EControllerWrite;
williamr@4
   494
	iBufferStart = aBufferStart;
williamr@4
   495
	iBufferAddr = aBufferAddr;
williamr@4
   496
	iLength = aLength;
williamr@4
   497
	}
williamr@4
   498
williamr@4
   499
williamr@4
   500
/** Sets the transfer direction for this request.
williamr@4
   501
williamr@4
   502
	@param aTransferDir The new transfer direction.
williamr@4
   503
*/
williamr@4
   504
void TUsbcRequestCallback::SetTransferDirection(TTransferDirection aTransferDir)
williamr@4
   505
	{
williamr@4
   506
	iTransferDir = aTransferDir;
williamr@4
   507
	}
williamr@4
   508
williamr@4
   509
williamr@4
   510
/** Returns a pointer to the owner of this request.
williamr@4
   511
williamr@4
   512
	@return A pointer to the owner of this request.
williamr@4
   513
*/
williamr@4
   514
const DBase* TUsbcRequestCallback::Owner() const
williamr@4
   515
	{
williamr@4
   516
	return iOwner;
williamr@4
   517
	}
williamr@4
   518
williamr@4
   519
williamr@4
   520
/** Executes the callback function set by the owner of this request.
williamr@4
   521
williamr@4
   522
	@return KErrNone.
williamr@4
   523
*/
williamr@4
   524
TInt TUsbcRequestCallback::DoCallback()
williamr@4
   525
	{
williamr@4
   526
	if (NKern::CurrentContext() == NKern::EThread)
williamr@4
   527
		iDfc.Enque();
williamr@4
   528
	else
williamr@4
   529
		iDfc.Add();
williamr@4
   530
	return KErrNone;
williamr@4
   531
	}
williamr@4
   532
williamr@4
   533
williamr@4
   534
/** Cancels the callback function set by the owner of this request.
williamr@4
   535
*/
williamr@4
   536
void TUsbcRequestCallback::Cancel()
williamr@4
   537
	{
williamr@4
   538
	iDfc.Cancel();
williamr@4
   539
	}
williamr@4
   540
williamr@4
   541
// --- TUsbcOtgFeatureCallback
williamr@4
   542
williamr@4
   543
/** Constructor.
williamr@4
   544
 */
williamr@4
   545
TUsbcOtgFeatureCallback::TUsbcOtgFeatureCallback(DBase* aOwner, TDfcFn aCallback,
williamr@4
   546
												 TInt aPriority)
williamr@4
   547
	: iOwner(aOwner),
williamr@4
   548
	  iDfc(aCallback, aOwner, aPriority),
williamr@4
   549
	  iValue(0)
williamr@4
   550
	{}
williamr@4
   551
williamr@4
   552
williamr@4
   553
/** Returns a pointer to the owner of this request.
williamr@4
   554
	@return A pointer to the owner of this request.
williamr@4
   555
*/
williamr@4
   556
DBase* TUsbcOtgFeatureCallback::Owner() const
williamr@4
   557
	{
williamr@4
   558
	return iOwner;
williamr@4
   559
	}
williamr@4
   560
williamr@4
   561
williamr@4
   562
/** Set feature value which is to be notified to client.
williamr@4
   563
	@param OTG feature value to be set
williamr@4
   564
*/
williamr@4
   565
void TUsbcOtgFeatureCallback::SetFeatures(TUint8 aFeatures)
williamr@4
   566
	{
williamr@4
   567
	iValue = aFeatures;
williamr@4
   568
	}
williamr@4
   569
williamr@4
   570
williamr@4
   571
/** Set feature value which is to be notified to client.
williamr@4
   572
	@return Value of OTG features
williamr@4
   573
*/
williamr@4
   574
TUint8 TUsbcOtgFeatureCallback::Features() const
williamr@4
   575
	{
williamr@4
   576
	return iValue;
williamr@4
   577
	}
williamr@4
   578
williamr@4
   579
williamr@4
   580
/** Set DFC queue.
williamr@4
   581
	@param aDfcQ  DFC queue to be set
williamr@4
   582
*/ 
williamr@4
   583
void TUsbcOtgFeatureCallback::SetDfcQ(TDfcQue* aDfcQ)
williamr@4
   584
	{
williamr@4
   585
	iDfc.SetDfcQ(aDfcQ);
williamr@4
   586
	}
williamr@4
   587
williamr@4
   588
williamr@4
   589
/** Executes the callback function set by the owner of this request.
williamr@4
   590
	@return KErrNone.
williamr@4
   591
*/
williamr@4
   592
TInt TUsbcOtgFeatureCallback::DoCallback()
williamr@4
   593
	{
williamr@4
   594
	if (NKern::CurrentContext() == EThread)
williamr@4
   595
		iDfc.Enque();
williamr@4
   596
	else
williamr@4
   597
		iDfc.Add();
williamr@4
   598
	return KErrNone;
williamr@4
   599
	}
williamr@4
   600
williamr@4
   601
williamr@4
   602
/** Cancels the callback function set by the owner of this request.
williamr@4
   603
 */
williamr@4
   604
void TUsbcOtgFeatureCallback::Cancel()
williamr@4
   605
	{
williamr@4
   606
	iDfc.Cancel();
williamr@4
   607
	}
williamr@4
   608
williamr@4
   609
williamr@4
   610
/** Returns a pointer to the currently selected (active) setting of this interface.
williamr@4
   611
williamr@4
   612
	@return A pointer to the currently selected (active) setting of this interface.
williamr@4
   613
*/
williamr@4
   614
const TUsbcInterface* TUsbcInterfaceSet::CurrentInterface() const
williamr@4
   615
	{
williamr@4
   616
	return iInterfaces[iCurrentInterface];
williamr@4
   617
	}
williamr@4
   618
williamr@4
   619
williamr@4
   620
/** Returns a pointer to the currently selected (active) setting of this interface.
williamr@4
   621
williamr@4
   622
	@return A pointer to the currently selected (active) setting of this interface.
williamr@4
   623
*/
williamr@4
   624
williamr@4
   625
TUsbcInterface* TUsbcInterfaceSet::CurrentInterface()
williamr@4
   626
	{
williamr@4
   627
	return iInterfaces[iCurrentInterface];
williamr@4
   628
	}
williamr@4
   629
williamr@4
   630
williamr@4
   631
#endif // __USBCSHARED_INL__
williamr@4
   632
williamr@4
   633
williamr@4
   634