0
+ − 1
// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ − 2
// All rights reserved.
+ − 3
// This component and the accompanying materials are made available
+ − 4
// under the terms of the License "Eclipse Public License v1.0"
+ − 5
// which accompanies this distribution, and is available
+ − 6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ − 7
//
+ − 8
// Initial Contributors:
+ − 9
// Nokia Corporation - initial contribution.
+ − 10
//
+ − 11
// Contributors:
+ − 12
//
+ − 13
// Description:
+ − 14
// e32\include\d32usbcsc.h
+ − 15
// User side class definitions for USB Device support.
+ − 16
//
+ − 17
//
+ − 18
+ − 19
/**
+ − 20
@file d32usbcsc.h
+ − 21
@publishedPartner
+ − 22
@released
+ − 23
*/
+ − 24
+ − 25
#ifndef __D32USBCSC_H__
+ − 26
#define __D32USBCSC_H__
+ − 27
+ − 28
#include <e32ver.h>
+ − 29
#include <usb.h>
+ − 30
#include <d32usbcshared.h>
+ − 31
+ − 32
+ − 33
/** This means that SetInterface was called after RealizeInterface had been called.
+ − 34
RealizeInterface is meant to signal that all interfaces have been set.
+ − 35
*/
+ − 36
const TInt KErrUsbAlreadyRealized = -6813; //Changed from -6713 for future compatibility with the d32usbcshared.h file
+ − 37
+ − 38
const TInt KErrAlternateSettingChanged = -6814;
+ − 39
+ − 40
+ − 41
const TUint KChunkCellSize = 1; //1 32 bit integer
+ − 42
const TInt KEpDescPacketSizeOffset = 4;
+ − 43
+ − 44
/** The user side enpoint number of Endpoint Zero. */
+ − 45
const TInt KEp0Number = 0;
+ − 46
+ − 47
/* Used in TUsbcScHdrEndpointRecord to describe the endpoint type
+ − 48
*/
+ − 49
+ − 50
const TUint8 KUsbScHdrEpDirectionIn=1;
+ − 51
const TUint8 KUsbScHdrEpDirectionOut=2;
+ − 52
const TUint8 KUsbScHdrEpDirectionBiDir=3;
+ − 53
+ − 54
+ − 55
const TUint8 KUsbScHdrEpTypeControl = 0;
+ − 56
const TUint8 KUsbScHdrEpTypeIsochronous =1;
+ − 57
const TUint8 KUsbScHdrEpTypeBulk = 2;
+ − 58
const TUint8 KUsbScHdrEpTypeInterrupt = 3;
+ − 59
const TUint8 KUsbScHdrEpTypeUnknown = ~0;
+ − 60
/** Used in the the Shared Chunk Header, to represent an endpoint.
+ − 61
*/
+ − 62
class TUsbcScHdrEndpointRecord
+ − 63
{
+ − 64
public:
+ − 65
inline TUsbcScHdrEndpointRecord(TInt aBufferNo, TUint8 aType);
+ − 66
inline TUint Direction() const;
+ − 67
inline TUint Type() const;
+ − 68
public:
+ − 69
TUint8 iBufferNo;
+ − 70
TUint8 iType;
+ − 71
TUint16 iReserved;
+ − 72
};
+ − 73
+ − 74
+ − 75
// This is used to hold the geometry of the shared buffers
+ − 76
class TUsbcScBufferRecord
+ − 77
{
+ − 78
friend class DLddUsbcScChannel;
+ − 79
+ − 80
public:
+ − 81
inline TUint Offset() const;
+ − 82
inline TUint Size() const;
+ − 83
private:
+ − 84
inline void Set(TUint aOffset, TUint aEndOffset);
+ − 85
TUint iOffset;
+ − 86
TUint iSize;
+ − 87
};
+ − 88
+ − 89
struct SUsbcScBufferHeader
+ − 90
{
+ − 91
TInt iHead; // Where the LDD will next write a transfer
+ − 92
TInt iTail; // Indicates the fist packet that user side is processing (anything prior is disposable)
+ − 93
TInt iBilTail; // This is not used by LDD at all, but just for the BIL's benifit.
+ − 94
};
+ − 95
+ − 96
+ − 97
struct SUsbcScAlternateSetting
+ − 98
{
+ − 99
TUint16 iSetting;
+ − 100
TUint16 iSequence;
+ − 101
};
+ − 102
+ − 103
/** Endpoint pair information. This can be used to control pairing of endpoint
+ − 104
for classes that require explicit pairing of endpoint, such as ADC.
+ − 105
+ − 106
This is currently not used.
+ − 107
*/
+ − 108
+ − 109
class TEndpointPairInfo
+ − 110
{
+ − 111
public:
+ − 112
TEndpointPairInfo(TUint8 aType=0, TUint16 aPair=0, TUint8 aSpare=0);
+ − 113
public:
+ − 114
TUint8 iType;
+ − 115
TUint8 iSpare;
+ − 116
TUint16 iPair;
+ − 117
};
+ − 118
+ − 119
/**
+ − 120
This is the buffer number reserved for use with endpoint zero with the ReadDataNotify and WriteData methods.
+ − 121
*/
+ − 122
const TInt KUsbcScEndpointZero = -1;
+ − 123
+ − 124
/**
+ − 125
This flag is reserved in TUsbcscEndpointInfo::iFlags, to indicate that the client driver's client wishes reads to operate in a coupled fashion.
+ − 126
This behaviour is not currently supported.
+ − 127
*/
+ − 128
const TUint KUsbScCoupledRead = 0x1;
+ − 129
+ − 130
/**
+ − 131
This flag, used in parameter aFlag of WriteData, is used to indicate that a ZLP should be sent.
+ − 132
*/
+ − 133
const TUint KUsbcScWriteFlagsZlp = 0x0001;
+ − 134
+ − 135
+ − 136
// Bit fields used in iFlags of TUsbcScTransferHeader
+ − 137
+ − 138
const TUint KUsbcScShortPacket = 0x0001;
+ − 139
const TUint KUsbcScStateChange = 0x0004;
+ − 140
+ − 141
class TUsbcScTransferHeader
+ − 142
{
+ − 143
public:
+ − 144
#ifdef _DEBUG
+ − 145
TUint iHashId;
+ − 146
TUint iSequence;
+ − 147
#endif
+ − 148
TUint iBytes;
+ − 149
TUint iFlags;
+ − 150
TUint iNext;
+ − 151
TUint16 iAltSettingSeq;
+ − 152
TInt16 iAltSetting;
+ − 153
union
+ − 154
{
+ − 155
TUint i[1]; // Extends
+ − 156
TUint8 b[4]; // Extends
+ − 157
} iData;
+ − 158
};
+ − 159
+ − 160
/** The desired endpoint capabilities used in RDevUsbcScClient::SetInterface().
+ − 161
+ − 162
This derived class has additional fields used in the shared chunk USB driver.
+ − 163
*/
+ − 164
class TUsbcScEndpointInfo: public TUsbcEndpointInfo
+ − 165
{
+ − 166
public:
+ − 167
TUsbcScEndpointInfo(TUint aType=KUsbEpTypeBulk, TUint aDir=KUsbEpDirOut, TInt aInterval=0, TInt aExtra=0,
+ − 168
TUint aBufferSize=0, TUint aReadSize=0);
+ − 169
+ − 170
+ − 171
public:
+ − 172
/** This indicates the requested size of the endpoint buffer and must be at
+ − 173
least as large as iReadSize.
+ − 174
*/
+ − 175
TUint iBufferSize;
+ − 176
+ − 177
/** This is the amount of data that the LDD reads from the bus before it sets
+ − 178
up another read and is normally intended to read many packets.
+ − 179
*/
+ − 180
TUint iReadSize;
+ − 181
+ − 182
/** TEndpointPairInfo represents pairing information for isochronous endpoints.
+ − 183
Should be zero in other cases. If this specifies paired endpoints then
+ − 184
iExtra (in the base class TUsbcEndpointInfo) also needs to be set to the
+ − 185
class specific size for this endpoint descriptor (This is here only for future use).
+ − 186
*/
+ − 187
TEndpointPairInfo iPairing;
+ − 188
+ − 189
/** The necessary alignment, in bytes, that needs to be applied to the transfer start points
+ − 190
of the data. This is only observed on OUT endpoints. Zero can be specified to indicate
+ − 191
there are no class side requirements for alignment. The alignment for OUT endpoints is
+ − 192
which ever is greater of this field or the USB hardware requirements.
+ − 193
*/
+ − 194
TUint iAlignment;
+ − 195
+ − 196
/** Flags to indicate how the endpoint should function. None currently defined,
+ − 197
but could be used to allow support for direct read.
+ − 198
*/
+ − 199
TUint iFlags;
+ − 200
+ − 201
/** Reserved for future use. */
+ − 202
TUint32 iReserved2[2];
+ − 203
};
+ − 204
+ − 205
/** This must be filled in prior to a call to RDevUsbcClient::SetInterface().
+ − 206
*/
+ − 207
class TUsbcScInterfaceInfo
+ − 208
{
+ − 209
public:
+ − 210
TUsbcScInterfaceInfo(TInt aClass=0, TInt aSubClass=0, TInt aProtocol=0,
+ − 211
TDesC16* aString=NULL, TUint aTotalEndpoints=0);
+ − 212
public:
+ − 213
/** The class, subclass and protocol that this interface supports. */
+ − 214
TUsbcClassInfo iClass;
+ − 215
/** The description string for the interface. Used to construct the interface string descriptor. */
+ − 216
const TDesC16* iString;
+ − 217
/** Total number of endpoints being requested (0-5). Endpoint 0 should not be included in this number. */
+ − 218
TUint iTotalEndpointsUsed;
+ − 219
/** Desired properties of the endpoints requested.
+ − 220
Do NOT include endpoint 0.
+ − 221
APIs use endpoint numbers that are offsets into this array.
+ − 222
*/
+ − 223
TUsbcScEndpointInfo iEndpointData[KMaxEndpointsPerClient];
+ − 224
/** 32 flag bits used for specifying miscellaneous Interface features.
+ − 225
Currently defined are:
+ − 226
- KUsbcInterfaceInfo_NoEp0RequestsPlease = 0x00000001
+ − 227
*/
+ − 228
TUint32 iFeatureWord;
+ − 229
};
+ − 230
+ − 231
/** Package buffer for a TUsbcInterfaceInfo object.
+ − 232
+ − 233
@see TUsbcInterfaceInfo
+ − 234
*/
+ − 235
typedef TPckgBuf<TUsbcScInterfaceInfo> TUsbcScInterfaceInfoBuf;
+ − 236
+ − 237
struct TUsbcScChunkHdrOffs
+ − 238
{
+ − 239
TUint iBuffers;
+ − 240
TUint iAltSettings;
+ − 241
};
+ − 242
+ − 243
+ − 244
class TUsbcScChunkBuffersHeader // Not instantiable
+ − 245
{
+ − 246
friend class DLddUsbcScChannel;
+ − 247
friend class TRealizeInfo;
+ − 248
+ − 249
public:
+ − 250
inline TUsbcScBufferRecord* Ep0Out() const;
+ − 251
inline TUsbcScBufferRecord* Ep0In() const;
+ − 252
inline TUsbcScBufferRecord* Buffers(TInt aBuffer) const;
+ − 253
inline TInt NumberOfBuffers() const;
+ − 254
+ − 255
private:
+ − 256
TUsbcScChunkBuffersHeader();
+ − 257
private:
+ − 258
TInt iRecordSize;
+ − 259
TInt iNumOfBufs;
+ − 260
TUint8 iBufferOffset[8]; // Extends
+ − 261
};
+ − 262
+ − 263
struct TUsbcScChunkAltSettingHeader // Not instantiable
+ − 264
{
+ − 265
TInt iEpRecordSize;
+ − 266
TInt iNumOfAltSettings;
+ − 267
TUint iAltTableOffset[1]; // Extends
+ − 268
};
+ − 269
+ − 270
class TEndpointBuffer;
+ − 271
+ − 272
+ − 273
/** The user side handle to the USB client driver.
+ − 274
*/
+ − 275
class RDevUsbcScClient : public RBusLogicalChannel
+ − 276
{
+ − 277
public:
+ − 278
/** @internalComponent */
+ − 279
enum TVer
+ − 280
{
+ − 281
EMajorVersionNumber = 0,
+ − 282
EMinorVersionNumber = 1,
+ − 283
EBuildVersionNumber = KE32BuildVersionNumber
+ − 284
};
+ − 285
+ − 286
// Bit pattern. s = Request/Control. c = Cancel, m = mode bits, B = Buffer number, R = request number.
+ − 287
// scmm mmmm | mmmm mmmm | mmBB BBBB |RRRR RRRR
+ − 288
+ − 289
enum TRequest
+ − 290
{
+ − 291
ERequestWriteData = 1,
+ − 292
ERequestReadDataNotify = 2,
+ − 293
ERequestAlternateDeviceStatusNotify = 3,
+ − 294
ERequestReEnumerate = 4,
+ − 295
ERequestEndpointStatusNotify = 5,
+ − 296
ERequestOtgFeaturesNotify = 6,
+ − 297
ERequestMaxRequests, // 7
+ − 298
+ − 299
ERequestCancel = 0x40000000,
+ − 300
+ − 301
ERequestWriteDataCancel = ERequestWriteData | ERequestCancel,
+ − 302
ERequestReadDataNotifyCancel = ERequestReadDataNotify | ERequestCancel,
+ − 303
ERequestAlternateDeviceStatusNotifyCancel = ERequestAlternateDeviceStatusNotify | ERequestCancel,
+ − 304
ERequestReEnumerateCancel = ERequestReEnumerate | ERequestCancel,
+ − 305
ERequestEndpointStatusNotifyCancel = ERequestEndpointStatusNotify | ERequestCancel,
+ − 306
ERequestOtgFeaturesNotifyCancel = ERequestOtgFeaturesNotify | ERequestCancel
+ − 307
};
+ − 308
+ − 309
enum TControl
+ − 310
{
+ − 311
// Changing the order of these enums will break BC.
+ − 312
EControlEndpointZeroRequestError, // 00
+ − 313
EControlEndpointCaps,
+ − 314
EControlDeviceCaps,
+ − 315
EControlGetAlternateSetting,
+ − 316
EControlDeviceStatus,
+ − 317
EControlEndpointStatus,
+ − 318
EControlSetInterface,
+ − 319
EControlReleaseInterface,
+ − 320
EControlSendEp0StatusPacket,
+ − 321
EControlHaltEndpoint, // 09
+ − 322
//
+ − 323
EControlClearHaltEndpoint, // 10
+ − 324
EControlSetDeviceControl,
+ − 325
EControlReleaseDeviceControl,
+ − 326
EControlEndpointZeroMaxPacketSizes,
+ − 327
EControlSetEndpointZeroMaxPacketSize,
+ − 328
EControlGetDeviceDescriptor,
+ − 329
EControlSetDeviceDescriptor,
+ − 330
EControlGetDeviceDescriptorSize,
+ − 331
EControlGetConfigurationDescriptor,
+ − 332
EControlSetConfigurationDescriptor, // 19
+ − 333
//
+ − 334
EControlGetConfigurationDescriptorSize, // 20
+ − 335
EControlGetInterfaceDescriptor,
+ − 336
EControlSetInterfaceDescriptor,
+ − 337
EControlGetInterfaceDescriptorSize,
+ − 338
EControlGetEndpointDescriptor,
+ − 339
EControlSetEndpointDescriptor,
+ − 340
EControlGetEndpointDescriptorSize,
+ − 341
EControlGetCSInterfaceDescriptor,
+ − 342
EControlSetCSInterfaceDescriptor,
+ − 343
EControlGetCSInterfaceDescriptorSize, // 29
+ − 344
//
+ − 345
EControlGetCSEndpointDescriptor, // 30
+ − 346
EControlSetCSEndpointDescriptor,
+ − 347
EControlGetCSEndpointDescriptorSize,
+ − 348
EControlSignalRemoteWakeup,
+ − 349
EControlGetStringDescriptorLangId,
+ − 350
EControlSetStringDescriptorLangId,
+ − 351
EControlGetManufacturerStringDescriptor,
+ − 352
EControlSetManufacturerStringDescriptor,
+ − 353
EControlRemoveManufacturerStringDescriptor,
+ − 354
EControlGetProductStringDescriptor, // 39
+ − 355
//
+ − 356
EControlSetProductStringDescriptor, // 40
+ − 357
EControlRemoveProductStringDescriptor,
+ − 358
EControlGetSerialNumberStringDescriptor,
+ − 359
EControlSetSerialNumberStringDescriptor,
+ − 360
EControlRemoveSerialNumberStringDescriptor,
+ − 361
EControlGetConfigurationStringDescriptor,
+ − 362
EControlSetConfigurationStringDescriptor,
+ − 363
EControlRemoveConfigurationStringDescriptor,
+ − 364
EControlDeviceDisconnectFromHost,
+ − 365
EControlDeviceConnectToHost, // 49
+ − 366
//
+ − 367
EControlDevicePowerUpUdc, // 50
+ − 368
EControlDumpRegisters,
+ − 369
EControlAllocateEndpointResource,
+ − 370
EControlDeAllocateEndpointResource,
+ − 371
EControlQueryEndpointResourceUse,
+ − 372
EControlGetEndpointZeroMaxPacketSize,
+ − 373
EControlGetDeviceQualifierDescriptor,
+ − 374
EControlSetDeviceQualifierDescriptor,
+ − 375
EControlGetOtherSpeedConfigurationDescriptor,
+ − 376
EControlSetOtherSpeedConfigurationDescriptor, // 59
+ − 377
//
+ − 378
EControlCurrentlyUsingHighSpeed, // 60
+ − 379
EControlSetStringDescriptor,
+ − 380
EControlGetStringDescriptor,
+ − 381
EControlRemoveStringDescriptor,
+ − 382
EControlSetOtgDescriptor,
+ − 383
EControlGetOtgDescriptor,
+ − 384
EControlGetOtgFeatures,
+ − 385
EControlRealizeInterface,
+ − 386
EControlStartNextInAlternateSetting
+ − 387
};
+ − 388
+ − 389
+ − 390
// const static TUint KFieldIdPos = 0;
+ − 391
const static TUint KFieldIdMask = 0xFF;
+ − 392
const static TUint KFieldBuffPos = 8;
+ − 393
const static TUint KFieldBuffMask = 0x3F;
+ − 394
const static TUint KFieldFlagsPos = 14;
+ − 395
const static TUint KFieldFlagsMask = 0xFFFF;
+ − 396
+ − 397
+ − 398
public:
+ − 399
+ − 400
#ifndef __KERNEL_MODE__
+ − 401
+ − 402
/** Opens a channel.
+ − 403
+ − 404
@param aUnit This should be 0 (zero).
+ − 405
+ − 406
@return KErrNone if successful.
+ − 407
*/
+ − 408
inline TInt Open(TInt aUnit);
+ − 409
+ − 410
inline TVersion VersionRequired() const;
+ − 411
+ − 412
/** Stalls ep0 to signal command fault to the host.
+ − 413
+ − 414
@return KErrNone if successful.
+ − 415
*/
+ − 416
inline TInt EndpointZeroRequestError();
+ − 417
+ − 418
/** Retrieves the capabilities of all the endpoints on the device.
+ − 419
+ − 420
Suggested use is as follows:
+ − 421
+ − 422
@code
+ − 423
TUsbcEndpointData data[KUsbcMaxEndpoints];
+ − 424
TPtr8 dataPtr(reinterpret_cast<TUint8*>(data), sizeof(data), sizeof(data));
+ − 425
ret = usbPort.EndpointCaps(dataPtr);
+ − 426
@endcode
+ − 427
+ − 428
@param aEpCapsBuf A descriptor encapsulating an array of TUsbcEndpointData.
+ − 429
+ − 430
@return KErrNone if successful.
+ − 431
*/
+ − 432
inline TInt EndpointCaps(TDes8& aEpCapsBuf);
+ − 433
+ − 434
/** Retrieves the capabilities of the USB device.
+ − 435
+ − 436
@see TUsbDeviceCaps
+ − 437
+ − 438
@param aDevCapsBuf A TUsbDeviceCaps object.
+ − 439
+ − 440
@return KErrNone if successful.
+ − 441
*/
+ − 442
inline TInt DeviceCaps(TUsbDeviceCaps& aDevCapsBuf);
+ − 443
+ − 444
/** Copies the current alternate setting for this interface into aInterfaceNumber
+ − 445
For USB Interfaces whose main interface is active, this will be 0 (zero).
+ − 446
+ − 447
@param aInterfaceNumber Current alternate setting for this interface is copied into this.
+ − 448
+ − 449
@return KErrNone if successful.
+ − 450
*/
+ − 451
inline TInt GetAlternateSetting(TInt& aInterfaceNumber);
+ − 452
+ − 453
/** Copies the current device status into aDeviceStatus.
+ − 454
+ − 455
@param aDeviceStatus Current device status is copied into this.
+ − 456
+ − 457
@return KErrNone if successful
+ − 458
*/
+ − 459
inline TInt DeviceStatus(TUsbcDeviceState& aDeviceStatus);
+ − 460
+ − 461
/** Copies the current endpoint status into aEndpointStatus.
+ − 462
+ − 463
@param aEndpoint Endpoint number valid for the current alternate setting.
+ − 464
@param aEndpointStatus The current endpoint status, might be stalled, not stalled or unknown.
+ − 465
+ − 466
@return KErrNone if successful.
+ − 467
*/
+ − 468
inline TInt EndpointStatus(TInt aEndpoint, TEndpointState& aEndpointStatus);
+ − 469
+ − 470
+ − 471
/** Requests that a zero length status packet be sent to the host in response
+ − 472
to a class or vendor specific ep0 SETUP packet.
+ − 473
+ − 474
@return KErrNone if successful.
+ − 475
*/
+ − 476
inline TInt SendEp0StatusPacket();
+ − 477
+ − 478
/** Stalls endpoint aEndpoint, usually to indicate an error condition with a previous command.
+ − 479
The host will normally send a SET_FEATURE command on ep0 to acknowledge and clear the stall.
+ − 480
+ − 481
@return KErrNone if successful.
+ − 482
*/
+ − 483
inline TInt HaltEndpoint(TInt aEndpoint);
+ − 484
+ − 485
/** Clears the stall condition on endpoint aEndpoint. This is inluded for symmetry and test purposes.
+ − 486
+ − 487
@return KErrNone if successful.
+ − 488
*/
+ − 489
inline TInt ClearHaltEndpoint(TInt aEndpoint);
+ − 490
+ − 491
/** Requests that device control be allocated to this channel.
+ − 492
+ − 493
@return KErrNone if successful.
+ − 494
*/
+ − 495
inline TInt SetDeviceControl();
+ − 496
+ − 497
/** Relinquishes device control previously allocated to this channel.
+ − 498
+ − 499
@return KErrNone if successful.
+ − 500
*/
+ − 501
inline TInt ReleaseDeviceControl();
+ − 502
+ − 503
/** Returns a bitmap of available ep0 maximum packet sizes.
+ − 504
+ − 505
@return bitmap of available ep0 maximum packet sizes.
+ − 506
*/
+ − 507
inline TUint EndpointZeroMaxPacketSizes();
+ − 508
+ − 509
/** Requests that a maximum packet size of aMaxPacketSize be set on ep0.
+ − 510
+ − 511
@param aMaxPacketSize The maximum packet size.
+ − 512
+ − 513
@return KErrNone if successful.
+ − 514
*/
+ − 515
inline TInt SetEndpointZeroMaxPacketSize(TInt aMaxPacketSize);
+ − 516
+ − 517
/** Queries the current maximum packet size on ep0.
+ − 518
+ − 519
@return The currently set maximum packet size on ep0.
+ − 520
*/
+ − 521
inline TInt GetEndpointZeroMaxPacketSize();
+ − 522
+ − 523
/** Copies the current device descriptor into aDeviceDescriptor.
+ − 524
+ − 525
@param aDeviceDescriptor Receives the current device descriptor.
+ − 526
+ − 527
@return KErrNone if successful.
+ − 528
*/
+ − 529
inline TInt GetDeviceDescriptor(TDes8& aDeviceDescriptor);
+ − 530
+ − 531
/** Sets the contents of aDeviceDescriptor to be the current device descriptor.
+ − 532
+ − 533
@param aDeviceDescriptor Contains the device descriptor.
+ − 534
+ − 535
@return KErrNone if successful.
+ − 536
*/
+ − 537
inline TInt SetDeviceDescriptor(const TDesC8& aDeviceDescriptor);
+ − 538
+ − 539
/** Gets the size of the current device descriptor. This is unlikely to be anything other than 9.
+ − 540
+ − 541
@param aSize Receives the size of the current device descriptor.
+ − 542
+ − 543
@return KErrNone if successful.
+ − 544
*/
+ − 545
inline TInt GetDeviceDescriptorSize(TInt& aSize);
+ − 546
+ − 547
/** Copies the current configuration descriptor into aConfigurationDescriptor.
+ − 548
+ − 549
@param aConfigurationDescriptor Receives the current configuration descriptor.
+ − 550
+ − 551
@return KErrNone if successful.
+ − 552
*/
+ − 553
inline TInt GetConfigurationDescriptor(TDes8& aConfigurationDescriptor);
+ − 554
+ − 555
/** Sets the contents of aConfigurationDescriptor to be the current configuration descriptor.
+ − 556
+ − 557
@param aConfigurationDescriptor Contains the configuration descriptor.
+ − 558
+ − 559
@return KErrNone if successful.
+ − 560
*/
+ − 561
inline TInt SetConfigurationDescriptor(const TDesC8& aConfigurationDescriptor);
+ − 562
+ − 563
/** Gets the size of the current configuration descriptor.
+ − 564
+ − 565
@param aSize Receives the size of the current configuration descriptor.
+ − 566
+ − 567
@return KErrNone if successful.
+ − 568
*/
+ − 569
inline TInt GetConfigurationDescriptorSize(TInt& aSize);
+ − 570
+ − 571
/** Copies the interface descriptor into aInterfaceDescriptor for the interface with alternate
+ − 572
setting aSettingNumber, 0 for the main interface.
+ − 573
+ − 574
@param aSettingNumber Alternate setting number on the interface, 0 for the main interface.
+ − 575
@param aInterfaceDescriptor Receives the interface descriptor.
+ − 576
+ − 577
@return KErrNone if successful.
+ − 578
*/
+ − 579
inline TInt GetInterfaceDescriptor(TInt aSettingNumber, TDes8& aInterfaceDescriptor);
+ − 580
+ − 581
/** Sets the interface descriptor contained in aInterfaceDescriptor for the interface with
+ − 582
alternate setting aSettingNumber, 0 for the main interface, for transmission to the host
+ − 583
during enumeration.
+ − 584
+ − 585
@param aSettingNumber Alternate setting number on the interface, 0 for the main interface.
+ − 586
@param aInterfaceDescriptor Contains the interface descriptor to be set.
+ − 587
+ − 588
@return KErrNone if successful.
+ − 589
*/
+ − 590
inline TInt SetInterfaceDescriptor(TInt aSettingNumber, const TDesC8& aInterfaceDescriptor);
+ − 591
+ − 592
/** Copies the size of the interface descriptor for the interface with alternate
+ − 593
setting aSettingNumber, 0 for the main interface, into aSize.
+ − 594
+ − 595
@param aSettingNumber The alternate setting.
+ − 596
@param aSize receives the size of the interface descriptor.
+ − 597
+ − 598
@return KErrNone if successful.
+ − 599
*/
+ − 600
inline TInt GetInterfaceDescriptorSize(TInt aSettingNumber, TInt& aSize);
+ − 601
+ − 602
/** Copies the endpoint descriptor for logical endpoint number aEndpointNumber into aEndpointDescriptor
+ − 603
for the interface with alternate setting aSettingNumber, 0 for the main interface.
+ − 604
+ − 605
@param aSettingNumber Alternate setting number on the interface, 0 for the main interface.
+ − 606
@param aEndpointNumber The endpoint number of the endpoint.
+ − 607
@param aEndpointDescriptor Receives the endpoint descriptor.
+ − 608
+ − 609
@return KErrNone if successful.
+ − 610
*/
+ − 611
inline TInt GetEndpointDescriptor(TInt aSettingNumber, TInt aEndpointNumber, TDes8& aEndpointDescriptor);
+ − 612
+ − 613
/** Sets the endpoint descriptor for logical endpoint number aEndpointNumber contained in
+ − 614
aEndpointDescriptor for the interface with alternate setting aSettingNumber, 0 for the main interface,
+ − 615
for transmission to the host during enumeration.
+ − 616
+ − 617
@param aSettingNumber Alternate setting number on the interface, 0 for the main interface.
+ − 618
@param aEndpointNumber Valid endpoint number on this interface.
+ − 619
@param aEndpointDescriptor Contains the endpoint descriptor to be set.
+ − 620
+ − 621
@return KErrNone if successful.
+ − 622
*/
+ − 623
inline TInt SetEndpointDescriptor(TInt aSettingNumber, TInt aEndpointNumber,
+ − 624
const TDesC8& aEndpointDescriptor);
+ − 625
+ − 626
/** Copies the size of the endpoint descriptor for logical endpoint number aEndpointNumber for the
+ − 627
interface with alternate setting aSettingNumber, 0 for the main interface, into aSize.
+ − 628
+ − 629
@param aSettingNumber Alternate setting number on the interface, 0 for the main interface.
+ − 630
@param aEndpointNumber Valid endpoint number on this interface.
+ − 631
@param aSize Receives the size of the endpoint descriptor.
+ − 632
+ − 633
@return KErrNone if successful.
+ − 634
*/
+ − 635
inline TInt GetEndpointDescriptorSize(TInt aSettingNumber, TInt aEndpointNumber, TInt& aSize);
+ − 636
+ − 637
/** Get OTG descriptor size
+ − 638
+ − 639
@param aSize TInt Reference which contains OTG descriptor size on return.
+ − 640
*/
+ − 641
inline void GetOtgDescriptorSize(TInt& aSize);
+ − 642
+ − 643
/** Get OTG descriptor of USB on-the-go feature.
+ − 644
+ − 645
@param aOtgDesc User-side buffer to store copy of descriptor.
+ − 646
+ − 647
@return KErrNone if successful.
+ − 648
*/
+ − 649
inline TInt GetOtgDescriptor(TDes8& aOtgDesc);
+ − 650
+ − 651
/** Set OTG descriptor by user to enable/disable USB on-the-go feature.
+ − 652
+ − 653
@param aOtgDesc Descriptor buffer containing OTG features.
+ − 654
+ − 655
@return KErrNone if successful.
+ − 656
*/
+ − 657
inline TInt SetOtgDescriptor(const TDesC8& aOtgDesc);
+ − 658
+ − 659
/** Copies the current device_qualifier descriptor into aDescriptor.
+ − 660
+ − 661
@param aDescriptor Receives the current device_qualifier descriptor.
+ − 662
+ − 663
@return KErrNone if successful.
+ − 664
*/
+ − 665
inline TInt GetDeviceQualifierDescriptor(TDes8& aDescriptor);
+ − 666
+ − 667
/** Sets the device_qualifier descriptor to the contents of aDescriptor.
+ − 668
+ − 669
@param aDescriptor Contains the new device_qualifier descriptor.
+ − 670
+ − 671
@return KErrNone if successful.
+ − 672
*/
+ − 673
inline TInt SetDeviceQualifierDescriptor(const TDesC8& aDescriptor);
+ − 674
+ − 675
/** Copies the current other_speed_configuration descriptor into aDescriptor.
+ − 676
+ − 677
@param aDescriptor Receives the current other_speed_configuration descriptor.
+ − 678
+ − 679
@return KErrNone if successful.
+ − 680
*/
+ − 681
inline TInt GetOtherSpeedConfigurationDescriptor(TDes8& aDescriptor);
+ − 682
+ − 683
/** Sets the other_speed_configuration descriptor to the contents of aDescriptor.
+ − 684
+ − 685
@param aDescriptor Contains the new other_speed_configuration descriptor.
+ − 686
+ − 687
@return KErrNone if successful.
+ − 688
*/
+ − 689
inline TInt SetOtherSpeedConfigurationDescriptor(const TDesC8& aDescriptor);
+ − 690
+ − 691
/** Copies the class specific interface descriptor block into aInterfaceDescriptor for the interface
+ − 692
with alternate setting aSettingNumber, 0 for the main interface.
+ − 693
+ − 694
@param aSettingNumber Alternate setting number on the interface, 0 for the main interface.
+ − 695
@param aInterfaceDescriptor Contains the interface descriptor to be set.
+ − 696
+ − 697
@return KErrNone if successful.
+ − 698
*/
+ − 699
inline TInt GetCSInterfaceDescriptorBlock(TInt aSettingNumber, TDes8& aInterfaceDescriptor);
+ − 700
+ − 701
/** aSettingNumber is the alternate interface setting, 0 for the main interface, that the descriptor block
+ − 702
aDes should be attached to. aDes is a block of data containing at least one class specific descriptor
+ − 703
for transmission during enumeration after the class interface descriptor (or alternate interface
+ − 704
descriptor) has been sent, but before the endpoint descriptors belonging to this interface are sent.
+ − 705
aDes may contain as many descriptors as are necessary or only one. SetCSInterfaceDescriptorBlock()
+ − 706
should be called at any time after SetInterface() has been called to establish a main interface or an
+ − 707
alternate interface. More than one call may be made - the data blocks will be concatenated prior to
+ − 708
sending. No checking or validation of the contents of aDes will be made and it is the caller's
+ − 709
responsibility to ensure that the data supplied is correct and appropriate to the interface identified
+ − 710
by aSettingNumber.
+ − 711
+ − 712
@param aSettingNumber Alternate setting number on the interface, 0 for the main interface.
+ − 713
@param aInterfaceDescriptor Contains the interface descriptor to be set.
+ − 714
+ − 715
@return KErrNone if successful.
+ − 716
*/
+ − 717
inline TInt SetCSInterfaceDescriptorBlock(TInt aSettingNumber, const TDesC8& aInterfaceDescriptor);
+ − 718
+ − 719
/** Copies the size of the class specific interface descriptor block for the interface with alternate
+ − 720
setting aSettingNumber, 0 for the main interface, into aSize.
+ − 721
+ − 722
@param aSettingNumber The alternate setting number.
+ − 723
@param aSize receives the size of the interface descriptor.
+ − 724
+ − 725
@return KErrNone if successful.
+ − 726
*/
+ − 727
inline TInt GetCSInterfaceDescriptorBlockSize(TInt aSettingNumber, TInt& aSize);
+ − 728
+ − 729
/** Copies the class specific endpoint descriptor for logical endpoint number aEndpointNumber
+ − 730
into aEndpointDescriptor for the interface with alternate setting aSettingNumber, 0 for the main
+ − 731
interface.
+ − 732
+ − 733
@param aSettingNumber Alternate setting number on the interface, 0 for the main interface.
+ − 734
@param aEndpointNumber Valid endpoint number on this interface.
+ − 735
@param aEndpointDescriptor Receives the endpoint descriptor.
+ − 736
+ − 737
@return KErrNone if successful.
+ − 738
*/
+ − 739
inline TInt GetCSEndpointDescriptorBlock(TInt aSettingNumber, TInt aEndpointNumber,
+ − 740
TDes8& aEndpointDescriptor);
+ − 741
+ − 742
/** Sets the class specific endpoint descriptor for logical endpoint number aEndpointNumber contained in
+ − 743
aEndpointDescriptor for the interface with alternate setting aSettingNumber, 0 for the main interface,
+ − 744
for transmission to the host during enumeration.
+ − 745
+ − 746
@param aSettingNumber Alternate setting number on the interface, 0 for the main interface.
+ − 747
@param aEndpointNumber Valid endpoint number on this interface.
+ − 748
@param aEndpointDescriptor Contains the endpoint descriptor to be set.
+ − 749
+ − 750
@return KErrNone if successful.
+ − 751
*/
+ − 752
inline TInt SetCSEndpointDescriptorBlock(TInt aSettingNumber, TInt aEndpointNumber,
+ − 753
const TDesC8& aEndpointDescriptor);
+ − 754
+ − 755
/** Copies the size of the class specific endpoint descriptor block for logical endpoint number
+ − 756
aEndpointNumber for the interface with alternate setting aSettingNumber, 0 for the main interface,
+ − 757
into aSize.
+ − 758
+ − 759
@param aSettingNumber Alternate setting number on the interface, 0 for the main interface.
+ − 760
@param aEndpointNumber Valid endpoint number on this interface.
+ − 761
@param aSize On return, contains the size of the class specific endpoint descriptor block.
+ − 762
+ − 763
@return KErrNone if successful.
+ − 764
*/
+ − 765
inline TInt GetCSEndpointDescriptorBlockSize(TInt aSettingNumber, TInt aEndpointNumber, TInt& aSize);
+ − 766
+ − 767
/** Generates a Remote Wakeup bus condition.
+ − 768
The capability of the device to generate Remote Wakeup signalling is enquired in
+ − 769
RDevUsbcClient::DeviceCaps.
+ − 770
+ − 771
@return KErrNone if this signalling is possible and the signal has been generated.
+ − 772
*/
+ − 773
inline TInt SignalRemoteWakeup();
+ − 774
+ − 775
/** Simulates a physical removal of the USB cable by disabling the D+/- pull-ups.The iConnect member of
+ − 776
TUsbDeviceCapsV01, returned by RDevUsbcClient::DeviceCaps(), indicates whether this functionality is
+ − 777
supported.
+ − 778
+ − 779
@return KErrNone if successful.
+ − 780
*/
+ − 781
inline TInt DeviceDisconnectFromHost();
+ − 782
+ − 783
/** Simulates a physical insertion of the USB cable by enabling the D+/- pull-ups.The iConnect member
+ − 784
of TUsbDeviceCapsV01, returned by RDevUsbcClient::DeviceCaps(), indicates whether this functionality
+ − 785
is supported.
+ − 786
+ − 787
@return KErrNone if successful.
+ − 788
*/
+ − 789
inline TInt DeviceConnectToHost();
+ − 790
+ − 791
/** Powers up the UDC and connects it to the bus if one or more interfaces exist.
+ − 792
+ − 793
@return KErrNone if UDC successfully powered up, KErrNotReady if no
+ − 794
interfaces have been registered yet, KErrHardwareNotAvailable if UDC
+ − 795
couldn't be activated.
+ − 796
*/
+ − 797
inline TInt PowerUpUdc();
+ − 798
+ − 799
/** Enquires about the current operating speed of the UDC.
+ − 800
+ − 801
@return ETrue if the UDC is currently operating at High speed, EFalse otherwise.
+ − 802
*/
+ − 803
inline TBool CurrentlyUsingHighSpeed();
+ − 804
+ − 805
/** Allocates the use of aResource to aEndpoint. It will be used from when the current bus transfer has been
+ − 806
completed.
+ − 807
+ − 808
@param aResource is typically some rationed hardware resource or possibly specifies a type of endpoint
+ − 809
behaviour. aResource is not a bitmap and TEndpointResource values should not be combined.
+ − 810
@param aEndpoint The endpoint number to which the resource is to be allocated.
+ − 811
+ − 812
@return KErrNone if successful, KErrInUse if the resource is already consumed and cannot be allocated,
+ − 813
KErrNotSupported if the endpoint does not support the resource requested.
+ − 814
+ − 815
@publishedPartner @deprecated
+ − 816
*/
+ − 817
inline TInt AllocateEndpointResource(TInt aEndpoint, TUsbcEndpointResource aResource);
+ − 818
+ − 819
/** Deallocates the use of aResource aEndpoint or ends a specified endpoint behaviour.
+ − 820
+ − 821
@param aResource is typically some rationed hardware resource or possibly specifies a type of endpoint
+ − 822
behaviour. aResource is not a bitmap and TEndpointResource values should not be combined.
+ − 823
@param aEndpoint The endpoint number from which the resource is to be removed.
+ − 824
+ − 825
@return KErrNone if the resource has been successfully deallocated, KErrNotSupported if the endpoint
+ − 826
does not support the resource requested.
+ − 827
+ − 828
@publishedPartner @deprecated
+ − 829
*/
+ − 830
inline TInt DeAllocateEndpointResource(TInt aEndpoint, TUsbcEndpointResource aResource);
+ − 831
+ − 832
/** Queries endpoint resource use.
+ − 833
+ − 834
@param aResource is typically some rationed hardware resource or possibly specifies a type of endpoint
+ − 835
behaviour. aResource is not a bitmap and TEndpointResource values should not be combined.
+ − 836
@param aEndpoint The endpoint number at which the resource is to be queried.
+ − 837
+ − 838
@return ETrue is the specified resource is in use at the endpoint and EFalse if not.
+ − 839
*/
+ − 840
inline TBool QueryEndpointResourceUse(TInt aEndpoint, TUsbcEndpointResource aResource);
+ − 841
+ − 842
/** Request (i.e. claim for this channel) up to five endpoints and set the class type for this USB
+ − 843
interface. 'aInterfaceData' is a package buffer which describes the interface and all the endpoints
+ − 844
being requested by the driver for this interface.
+ − 845
+ − 846
@param aInterfaceNumber Distinguishes between alternate interfaces. If these are not be used then this
+ − 847
should always be zero. If this parameter is used, then its value must be one more than that of the
+ − 848
proceeding alternate interface.
+ − 849
@param aInterfaceData A package buffer which describes the interface and all the endpoints being
+ − 850
requested by the driver for this interface.
+ − 851
+ − 852
+ − 853
@return KErrInUse if any of the endpoints being requested have already been claimed by another channel.
+ − 854
KErrNotSupported if an endpoint with all of the specified properties is not supported on this
+ − 855
platform. KErrNoMemory if insufficient memory is available to complete the operation.
+ − 856
*/
+ − 857
inline TInt SetInterface(TInt aInterfaceNumber, TUsbcScInterfaceInfoBuf& aInterfaceData);
+ − 858
+ − 859
+ − 860
/**
+ − 861
This method should be called after SetInterface has been called for all possible alternative settings.
+ − 862
Calling this invalidates further calls to SetInterface. On success, a chunk handle is created and
+ − 863
passed back though aChunk. This is needed for the user side to access the shared chunk where the
+ − 864
data is stored. Note that if you are using the BIL (described later), then FinalizeInterface (...)
+ − 865
should be used instead, which will call this method.
+ − 866
+ − 867
@return KErrNone on successful completion, or one of the system wide error codes.
+ − 868
*/
+ − 869
inline TInt RealizeInterface(RChunk& aChunk);
+ − 870
+ − 871
+ − 872
/** Release an interface previously claimed by this channel. Alternate interfaces need to be released
+ − 873
in strict descending order, starting with the last (i.e. highest numbered) one.
+ − 874
It is not necessary to release an interface that wasn't successfully requested.
+ − 875
+ − 876
@param aInterfaceNumber Specifies the alternate setting number 'aInterfaceNum' of the interface to be
+ − 877
released.
+ − 878
+ − 879
@return KErrNone if successful. KErrArgument if the alternate setting doesn't exist or is released out
+ − 880
of order.
+ − 881
*/
+ − 882
inline TInt ReleaseInterface(TInt aInterfaceNumber);
+ − 883
+ − 884
/** Copies the current string descriptor language ID (LANGID) code into the aLangId argument. Even though
+ − 885
the USB spec allows for the existence of a whole array of LANGID codes, we only support one.
+ − 886
+ − 887
@param aLangId Receives the LANGID code.
+ − 888
+ − 889
@return KErrNone if successful, KErrArgument if problem with argument (memory cannot be written to, etc.).
+ − 890
*/
+ − 891
inline TInt GetStringDescriptorLangId(TUint16& aLangId);
+ − 892
+ − 893
/** Sets the string descriptor language ID (LANGID). Even though the USB spec allows for the existence of
+ − 894
a whole array of LANGID codes, we only support one.
+ − 895
+ − 896
@param aLangId The LANGID code to be set.
+ − 897
+ − 898
@return KErrNone if successful.
+ − 899
*/
+ − 900
inline TInt SetStringDescriptorLangId(TUint16 aLangId);
+ − 901
+ − 902
/** Copies the string descriptor identified by the iManufacturer index field of the Standard Device
+ − 903
Descriptor into the aString argument.
+ − 904
+ − 905
@param aString Receives manufacturer string.
+ − 906
+ − 907
@return KErrNone if successful, KErrArgument if MaxLength of aString is too small to hold the entire
+ − 908
descriptor, KErrNotFound if the string descriptor couldn't be found.
+ − 909
*/
+ − 910
inline TInt GetManufacturerStringDescriptor(TDes16& aString);
+ − 911
+ − 912
/** Sets the string descriptor identified by the iManufacturer index field of the Standard Device
+ − 913
Descriptor to the aString argument.
+ − 914
+ − 915
@param aString Contains the new manufacturer string descriptor.
+ − 916
+ − 917
@return KErrNone if successful, KErrNoMemory if no memory is available to store the new string from
+ − 918
aString (in which case the old string descriptor will be preserved).
+ − 919
*/
+ − 920
inline TInt SetManufacturerStringDescriptor(const TDesC16& aString);
+ − 921
+ − 922
/** Removes (deletes) the string descriptor identified by the iManufacturer index field of the Standard
+ − 923
Device Descriptor and sets that field to zero.
+ − 924
+ − 925
@return KErrNone if successful, KErrNotFound if the string descriptor couldn't be found.
+ − 926
*/
+ − 927
inline TInt RemoveManufacturerStringDescriptor();
+ − 928
+ − 929
/** Retrieves the string descriptor identified by the iProduct index field of the Standard Device
+ − 930
Descriptor into the aString argument.
+ − 931
+ − 932
@param aString Receives product string.
+ − 933
+ − 934
@return KErrNone if successful, KErrArgument if MaxLength of aString is too small to hold the entire
+ − 935
descriptor, KErrNotFound if the string descriptor couldn't be found.
+ − 936
*/
+ − 937
inline TInt GetProductStringDescriptor(TDes16& aString);
+ − 938
+ − 939
/** Sets the string descriptor identified by the iProduct index field of the Standard Device Descriptor to
+ − 940
the aString argument.
+ − 941
+ − 942
@param aString Contains the new product string descriptor.
+ − 943
+ − 944
@return KErrNone if successful, KErrNoMemory if no memory is available to store the new string from
+ − 945
aString (in which case the old string descriptor will be preserved).
+ − 946
*/
+ − 947
inline TInt SetProductStringDescriptor(const TDesC16& aString);
+ − 948
+ − 949
/** Removes (deletes) the string descriptor identified by the iProduct index field of the Standard Device
+ − 950
Descriptor and sets that field to zero.
+ − 951
+ − 952
@return KErrNone if successful, KErrNotFound if the string descriptor couldn't be found.
+ − 953
*/
+ − 954
inline TInt RemoveProductStringDescriptor();
+ − 955
+ − 956
/** Retrieves the string descriptor identified by the iSerialNumber index field of the Standard Device
+ − 957
Descriptor into the aString argument.
+ − 958
+ − 959
@param aString Receives product string.
+ − 960
+ − 961
@return KErrNone if successful, KErrArgument if MaxLength of aString is too small to hold the entire
+ − 962
descriptor, KErrNotFound if the string descriptor couldn't be found.
+ − 963
*/
+ − 964
inline TInt GetSerialNumberStringDescriptor(TDes16& aString);
+ − 965
+ − 966
/** Sets the string descriptor identified by the iSerialNumber index field of the Standard Device
+ − 967
Descriptor to the aString argument.
+ − 968
+ − 969
@param aString Contains the new serial number string descriptor.
+ − 970
+ − 971
@return KErrNone if successful, KErrNoMemory if no memory is available to store the new string from
+ − 972
aString (in which case the old string descriptor will be preserved).
+ − 973
*/
+ − 974
inline TInt SetSerialNumberStringDescriptor(const TDesC16& aString);
+ − 975
+ − 976
/** Removes (deletes) the string descriptor identified by the iSerialNumber index field of the Standard
+ − 977
Device Descriptor and sets that field to zero.
+ − 978
+ − 979
@return KErrNone if successful, KErrNotFound if the string descriptor couldn't be found.
+ − 980
*/
+ − 981
inline TInt RemoveSerialNumberStringDescriptor();
+ − 982
+ − 983
/** Retrieves the string descriptor identified by the iConfiguration index field of the (first) Standard
+ − 984
Configuration Descriptor into the aString argument.
+ − 985
+ − 986
@param aString Receives configuration string.
+ − 987
+ − 988
@return KErrNone if successful, KErrArgument if MaxLength of aString is too small to hold the entire
+ − 989
descriptor, KErrNotFound if the string descriptor couldn't be found.
+ − 990
*/
+ − 991
inline TInt GetConfigurationStringDescriptor(TDes16& aString);
+ − 992
+ − 993
/** Sets the string descriptor identified by the iConfiguration index field of the Standard Configuration
+ − 994
Descriptor to the aString argument.
+ − 995
+ − 996
@param aString Contains the new serial number string descriptor.
+ − 997
+ − 998
@return KErrNone if successful, KErrNoMemory if no memory is available to store the new string from
+ − 999
aString (in which case the old string descriptor will be preserved).
+ − 1000
*/
+ − 1001
inline TInt SetConfigurationStringDescriptor(const TDesC16& aString);
+ − 1002
+ − 1003
/** Removes (deletes) the string descriptor identified by the iConfiguration index field of the Standard
+ − 1004
Configuration Descriptor and sets that field to zero.
+ − 1005
+ − 1006
@return KErrNone if successful, KErrNotFound if the string descriptor couldn't be found.
+ − 1007
*/
+ − 1008
inline TInt RemoveConfigurationStringDescriptor();
+ − 1009
+ − 1010
/** Copies the string of the USB string descriptor at the specified index in the string descriptor array
+ − 1011
into the aString argument.
+ − 1012
+ − 1013
Although this function can also be used for it, for querying most standard string descriptors
+ − 1014
there exists a set of dedicated access functions.
+ − 1015
+ − 1016
@see RDevUsbcClient::GetStringDescriptorLangId
+ − 1017
@see RDevUsbcClient::GetManufacturerStringDescriptor
+ − 1018
@see RDevUsbcClient::GetProductStringDescriptor
+ − 1019
@see RDevUsbcClient::GetSerialNumberStringDescriptor
+ − 1020
@see RDevUsbcClient::GetConfigurationStringDescriptor
+ − 1021
+ − 1022
@param aIndex The position of the string descriptor in the string descriptor array.
+ − 1023
@param aString The target location for the string descriptor copy.
+ − 1024
+ − 1025
@return KErrNone if successful, KErrNotFound if no string descriptor exists at the specified index,
+ − 1026
KErrArgument if MaxLength() of aString is too small to hold the entire descriptor.
+ − 1027
*/
+ − 1028
inline TInt GetStringDescriptor(TUint8 aIndex, TDes16& aString);
+ − 1029
+ − 1030
/** Sets the aString argument to be the string of a USB string descriptor at the specified index in the
+ − 1031
string descriptor array. If a string descriptor already exists at that position then its string will
+ − 1032
be replaced.
+ − 1033
+ − 1034
Care should be taken, when choosing aIndex, not to inadvertently overwrite one of the standard
+ − 1035
string descriptors. For their manipulation there exists a set of dedicated access functions.
+ − 1036
+ − 1037
@see RDevUsbcClient::SetStringDescriptorLangId
+ − 1038
@see RDevUsbcClient::SetManufacturerStringDescriptor
+ − 1039
@see RDevUsbcClient::SetProductStringDescriptor
+ − 1040
@see RDevUsbcClient::SetSerialNumberStringDescriptor
+ − 1041
@see RDevUsbcClient::SetConfigurationStringDescriptor
+ − 1042
+ − 1043
@param aIndex The position of the string descriptor in the string descriptor array.
+ − 1044
@param aString Contains the string descriptor to be set.
+ − 1045
+ − 1046
@return KErrNone if successful, KErrArgument if aIndex is invalid, KErrNoMemory if no memory
+ − 1047
is available to store the new string (an existing descriptor at that index will be preserved).
+ − 1048
*/
+ − 1049
inline TInt SetStringDescriptor(TUint8 aIndex, const TDesC16& aString);
+ − 1050
+ − 1051
/** Removes (deletes) the USB string descriptor at the specified index in the string descriptor array.
+ − 1052
The position in the array of other string descriptors is not affected.
+ − 1053
+ − 1054
Care should be taken, when choosing aIndex, not to inadvertently delete a standard string descriptor
+ − 1055
(also because index references from non-string descriptors would be invalidated). For the deletion
+ − 1056
of most standard string descriptors there exists a set of dedicated functions.
+ − 1057
+ − 1058
@see RDevUsbcClient::RemoveManufacturerStringDescriptor
+ − 1059
@see RDevUsbcClient::RemoveProductStringDescriptor
+ − 1060
@see RDevUsbcClient::RemoveSerialNumberStringDescriptor
+ − 1061
@see RDevUsbcClient::RemoveConfigurationStringDescriptor
+ − 1062
+ − 1063
@param aIndex The position of the string descriptor in the string descriptor array.
+ − 1064
+ − 1065
@return KErrNone if successful, KErrNotFound if no string descriptor exists at the specified index.
+ − 1066
*/
+ − 1067
inline TInt RemoveStringDescriptor(TUint8 aIndex);
+ − 1068
+ − 1069
+ − 1070
+ − 1071
/** Requests notification for when there is data available on the buffer indicated. If the buffer
+ − 1072
already has data in it, it will return immediately, otherwise it will block until there is.
+ − 1073
+ − 1074
If the BIL methods are being used (recommended), then this method should not be called directly,
+ − 1075
using TEndpointBuffer::GetBuffer instead.
+ − 1076
+ − 1077
@param aBufferNumber Indicates the buffer for which the caller wishes to know about data
+ − 1078
additions. The buffer needed of any given endpoint can be found by inspecting the alternative
+ − 1079
setting table, in the chunk header. The location of the buffer can be found by looking at the
+ − 1080
buffer offset table, also in the chunk header.
+ − 1081
+ − 1082
@param aStatus The request status where notification of completion is directed. KErrCancel is
+ − 1083
returned if the asynchronous operation was cancelled.
+ − 1084
+ − 1085
@param aLength A preference for the quantity of data to be read. This value is only a
+ − 1086
suggestion and my be ignored. The default value of 0 indicates no preference.
+ − 1087
+ − 1088
@return KErrNone on success, or KErrArgument if the buffer number is invalid.
+ − 1089
*/
+ − 1090
inline TInt ReadDataNotify(TInt aBufferNumber, TRequestStatus& aStatus, TInt aLength=0);
+ − 1091
+ − 1092
+ − 1093
/** Requests the LDD to write the contents of the given buffer to the USB hardware. Notification is
+ − 1094
given when this is complete. More then one write request can be queued on any one endpoint, to allow
+ − 1095
for less Hardware idling between buffers.
+ − 1096
+ − 1097
If the BIL methods are being used (recommended), then this method should not be called directly,
+ − 1098
using TEndpointBuffer::WriteBuffer instead.
+ − 1099
+ − 1100
@param aBufferNumber represents the buffer number of the buffer of which the caller has placed the
+ − 1101
data. As described with ReadDataNotify(...), details of the buffers can be found in the chunk header.
+ − 1102
+ − 1103
@param aStart Represents the start offset of the data within the chunk. This start location must be
+ − 1104
aligned to a multiple of the maximum packet size for the endpoint, so that the data can be DMAed
+ − 1105
straight out of the buffer.
+ − 1106
+ − 1107
@param aLength Represents the amount of data to be sent to the host in bytes.
+ − 1108
+ − 1109
@param aFlags Is a bitfield, where bit 0 should be set if a ZLP is to be sent to the host after the
+ − 1110
current transaction. All other bits are reserved for future use.
+ − 1111
*/
+ − 1112
inline void WriteData(TInt aBufferNumber, TUint aStart, TUint aLength, TUint aFlags, TRequestStatus& aStatus);
+ − 1113
+ − 1114
+ − 1115
+ − 1116
/** Cancels an outstanding read request on endpoint buffer aBufferNumber.
+ − 1117
+ − 1118
@param aBufferNumber The endpoint buffer number whose read is to be cancelled.
+ − 1119
*/
+ − 1120
inline void ReadCancel(TInt aBufferNumber);
+ − 1121
+ − 1122
+ − 1123
/** Cancels an outstanding write request on endpoint buffer aBufferNumber.
+ − 1124
+ − 1125
@param aBufferNumber The endpoint buffer number whose write is to be cancelled.
+ − 1126
*/
+ − 1127
inline void WriteCancel(TInt aBufferNumber);
+ − 1128
+ − 1129
/** Cancels any transfer on any endpoint buffer specified in aBufferMask.
+ − 1130
+ − 1131
@code
+ − 1132
// Cancel transfer requests on buffers 1, 2, 3 & 4
+ − 1133
usbPort.EndpointTransferCancel(1 | 2 | 4 | 8);
+ − 1134
@endcode
+ − 1135
+ − 1136
@param aBufferMask bitmap of the endpoint buffer numbers.
+ − 1137
*/
+ − 1138
inline void EndpointTransferCancel(TUint aBufferMask);
+ − 1139
+ − 1140
/** Register for notification when a change of the Interface alternate setting or the USB Controller's
+ − 1141
current state occurs. When the alternate setting or the Controller state changes, then the
+ − 1142
asynchronous function completes and the current alternate setting number or Controller state is
+ − 1143
written back to aValue. If the KUsbAlternateSetting bit is set then the remaining bits are the
+ − 1144
alternate setting number. Otherwise aValue is interpreted as a TUsbcDeviceState.
+ − 1145
+ − 1146
@see TUsbcDeviceState
+ − 1147
+ − 1148
@param aStatus The request status.
+ − 1149
@param aValue Receives the alternate setting number or Controller state.
+ − 1150
*/
+ − 1151
inline void AlternateDeviceStatusNotify(TRequestStatus& aStatus, TUint& aValue);
+ − 1152
+ − 1153
/** Completes an AlternateDeviceStatusNotify request. If a request has previously been made then the
+ − 1154
status variable is updated with the current device state.
+ − 1155
*/
+ − 1156
inline void AlternateDeviceStatusNotifyCancel();
+ − 1157
+ − 1158
/** If the channel has changed the grouping of endpoints between interfaces or changed the interface class
+ − 1159
type from the defaults then it is necessary to force a re-enumeration. This will typically involve the
+ − 1160
Symbian OS device initiating a disconnection and re-connection. This is an asynchronous operation
+ − 1161
which will complete when the Controller is successfully configured by the host, i.e. has achieved
+ − 1162
EUsbcDeviceStateConfigured. Since it is not known if the operation has failed, at the same time that
+ − 1163
a ReEnumerate request is made, a timer should be set up to complete after approximately 5 seconds. It
+ − 1164
can be assumed that if the operation has not completed after this time interval then it will not
+ − 1165
complete.
+ − 1166
+ − 1167
@param aStatus The request status.
+ − 1168
*/
+ − 1169
inline void ReEnumerate(TRequestStatus& aStatus);
+ − 1170
+ − 1171
/** Cancels an outstanding ReEnumerate() request.
+ − 1172
*/
+ − 1173
inline void ReEnumerateCancel();
+ − 1174
+ − 1175
/** Register for notification when a change in stall status of any of the interface's endpoints occurs,
+ − 1176
but not ep0. When a change in stall status occurs, then the asynchronous function completes and the
+ − 1177
current stall state is written back to 'aEndpointStatus' as a bit map: Only stall state changes caused
+ − 1178
by SET_FEATURE and CLEAR_FEATURE standard commands on ep0 will be notified when this function
+ − 1179
completes. After this request completes the request should be re-issued to obtain future
+ − 1180
notifications.
+ − 1181
+ − 1182
@param aStatus The request status.
+ − 1183
@param aEndpointMask A bitmap of the endpoints' stall status. This is filled in when the call completes.
+ − 1184
bit 1 represents the interface's virtual endpoint 1, (KUsbcEndpoint1Bit)
+ − 1185
bit 2 represents the interface's virtual endpoint 2, (KUsbcEndpoint2Bit) etc.
+ − 1186
bit value 0 - not stalled,
+ − 1187
bit value 1 - stalled.
+ − 1188
*/
+ − 1189
inline void EndpointStatusNotify(TRequestStatus& aStatus, TUint& aEndpointMask);
+ − 1190
+ − 1191
/** Completes an endpoint status notify request.
+ − 1192
*/
+ − 1193
inline void EndpointStatusNotifyCancel();
+ − 1194
+ − 1195
/** Get current on-the-go features relating to the ability of device/host pair to
+ − 1196
perform OTG role swap.
+ − 1197
+ − 1198
@param aFeatures On return it contains features the device currently has.
+ − 1199
bit 2 represents b_hnp_enable, (KUsbOtgAttr_B_HnpEnable)
+ − 1200
bit 3 represents a_hnp_support, (KUsbOtgAttr_A_HnpSupport)
+ − 1201
bit 4 represents a_alt_hnp_support, (KUsbOtgAttr_A_AltHnpSupport)
+ − 1202
@return KErrNone if successful, KErrNotSupported if OTG is not supported by
+ − 1203
this device, otherwise system-wide error returns.
+ − 1204
*/
+ − 1205
inline TInt GetOtgFeatures(TUint8& aFeatures);
+ − 1206
+ − 1207
/** Register for notification on USB on-the-go features' change. If any OTG feature
+ − 1208
is changed, request completes and current feature value is filled in aValue.
+ − 1209
+ − 1210
@param aStatus Request status object.
+ − 1211
@param aValue On request completion, contains current OTG feature value.
+ − 1212
*/
+ − 1213
inline void OtgFeaturesNotify(TRequestStatus& aStatus, TUint8& aValue);
+ − 1214
+ − 1215
/** Cancel pending OTG feature request.
+ − 1216
*/
+ − 1217
inline void OtgFeaturesNotifyCancel();
+ − 1218
+ − 1219
/** This function retrieves the alternate setting that the WriteData function can
+ − 1220
write to. After a host sets the alternate setting, writes to the IN endpoint
+ − 1221
are not permitted by the LDD until this method has been called.
+ − 1222
This function is not asynchronous nor blocking, and should not be used to
+ − 1223
detect that an alternate setting has happened.
+ − 1224
+ − 1225
If the BIL methods are being used (recommended), then this method should not be called directly.
+ − 1226
+ − 1227
@return The alternative setting number or KErrInUse if the current alternative
+ − 1228
setting is already in use, that is to say that the alternative setting has not changed.
+ − 1229
*/
+ − 1230
inline TInt StartNextInAlternateSetting();
+ − 1231
+ − 1232
+ − 1233
/*******************************\
+ − 1234
* Buffer Interface Layer (BIL) *
+ − 1235
\*******************************/
+ − 1236
+ − 1237
// This following functions, as well as the ones in TEndpointBuffer (below),
+ − 1238
// can be considered the BIL.
+ − 1239
+ − 1240
+ − 1241
/**
+ − 1242
Finalize the interface, creating a chunk for use with reading/writing to endpoints.
+ − 1243
FinalizeInterface should be called after all alternate interfaces have been set up with SetInteface.
+ − 1244
Any attempt to call SetInterface after this stage will fail.
+ − 1245
+ − 1246
@return KErrNone if operation is successfull
+ − 1247
System wide error codes if chunk creation failed
+ − 1248
*/
+ − 1249
IMPORT_C TInt FinalizeInterface();
+ − 1250
+ − 1251
/**
+ − 1252
Finalize the interface, creating a chunk for use with reading/writing to endpoints. This
+ − 1253
version of the method provides a handle to the chunk, which is needed if the
+ − 1254
buffer is to be passed and used by other processes.
+ − 1255
FinalizeInterface should be called after all alternate interfaces have been set up with SetInteface.
+ − 1256
Any attempt to call SetInterface after this stage will fail.
+ − 1257
+ − 1258
@param aChunk On success aChunk points to the created chunk.
+ − 1259
@return KErrNone if operation is successfull
+ − 1260
System wide error codes if chunk creation failed
+ − 1261
*/
+ − 1262
IMPORT_C TInt FinalizeInterface(RChunk*& aChunk);
+ − 1263
+ − 1264
/**
+ − 1265
Opens an endpoint, an endpoint should be opened before any operations are attempted on it.
+ − 1266
+ − 1267
@param aEpB On success aEpB will be filled with the relevant details for that endpoint
+ − 1268
@param aEpI endpoint number to be opened
+ − 1269
@return KErrNone if operation is successfull
+ − 1270
KErrNotFound if endpoint number is not valid for current alternate setting
+ − 1271
KErrInUse if endpoint is already opened
+ − 1272
KErrArgument if endpoint buffer argument passed is already in existence and being used
+ − 1273
*/
+ − 1274
IMPORT_C TInt OpenEndpoint(TEndpointBuffer & aEpB, TInt aEpI);
+ − 1275
+ − 1276
/**
+ − 1277
Switches to processing from one Alternate setting to the next. All open endpoints (except EP0) must
+ − 1278
be close before this can be called.
+ − 1279
+ − 1280
@param aFlush If ETrue, the method will purge the buffers of any data unread for the old setting.
+ − 1281
If each endpoint was not read up until KErrEof was reached, then this should be set.
+ − 1282
+ − 1283
@return the alternate Setting if operation is successful
+ − 1284
KErrInUse if any endpoints in present alternate setting is still open (except Ep0)
+ − 1285
KErrNotReady if there is no change in alternate setting
+ − 1286
KErrInUse if StartNextInAlternateSetting detects no change in alternate setting.
+ − 1287
KErrCorrupt if the buffer structure becomes corrupt.
+ − 1288
*/
+ − 1289
IMPORT_C TInt StartNextOutAlternateSetting(TBool aFlush);
+ − 1290
+ − 1291
/**
+ − 1292
Sets aChunk to RChunk currently in use by BIL.
+ − 1293
+ − 1294
@param aChunk aChunk will point to RChunk currently in use by BIL
+ − 1295
@return KErrNone on success otherwise a system wide error code, if an error has occurred.
+ − 1296
*/
+ − 1297
IMPORT_C TInt GetDataTransferChunk(RChunk*& aChunk);
+ − 1298
+ − 1299
private:
+ − 1300
/** @internalTechnology */
+ − 1301
TInt Drain(TUint aBuffer);
+ − 1302
/** @internalTechnology */
+ − 1303
TInt Peek(TUint aBuffer);
+ − 1304
/** @internalTechnology */
+ − 1305
TInt FindNextAlternateSetting();
+ − 1306
+ − 1307
private:
+ − 1308
TUint8 iEndpointStatus; /** @internalTechnology Each bit corresponds to each endpoint's open/close status. */
+ − 1309
RChunk iSharedChunk; /** @internalTechnology The shared chunk in use. */
+ − 1310
TInt iAltSettingSeq; /** @internalTechnology Used to track alternate setting changes. */
+ − 1311
TInt iAlternateSetting; /** @internalTechnology The alternate setting used by OUT endpoints, which may lag that of IN endpoints. */
+ − 1312
TInt iNewAltSetting; /** @internalTechnology Used to track the next alternate setting change on OUT endpoints,
+ − 1313
during transition from one to the next. */
+ − 1314
TInt iInAltSetting; /** @internalTechnology The alternate setting used by IN endpoints, which may be ahead of OUT endpoints. */
+ − 1315
+ − 1316
+ − 1317
friend class TEndpointBuffer;
+ − 1318
#endif // #ifndef __KERNEL_MODE__
+ − 1319
};
+ − 1320
+ − 1321
#ifndef __KERNEL_MODE__
+ − 1322
+ − 1323
+ − 1324
/**
+ − 1325
This class forms part of the Buffer Interface Layer (BIL), which forms the
+ − 1326
user side component of the USB Shared Chunk Client. Objects of this type
+ − 1327
represent the shared chunk buffer, for a given endpoint.
+ − 1328
The method RDevUsbcScClient::OpenEndpoint() should be used to initialise
+ − 1329
objects of this type.
+ − 1330
*/
+ − 1331
class TEndpointBuffer
+ − 1332
{
+ − 1333
public:
+ − 1334
+ − 1335
/**
+ − 1336
This return value used by GetBuffer indicates that the item pointed to by
+ − 1337
aBuffer/aOffset represents a state change, instead of endpoint data.
+ − 1338
*/
+ − 1339
const static TInt KStateChange = 0x01;
+ − 1340
+ − 1341
public:
+ − 1342
IMPORT_C TEndpointBuffer();
+ − 1343
+ − 1344
/**
+ − 1345
Read the next block of data from the Shared chunk buffer. This method should be used if the user wishes to process one block of data at a time.
+ − 1346
This method also expires the previously read block, meaning that the memory used by the block of data may be re-used by the system, overwriting it
+ − 1347
with new data.
+ − 1348
@param aBuffer aBuffer will point to data location in shared chunk
+ − 1349
@param aSize aSize will hold the number of valid bytes that can be read
+ − 1350
@param aZLP aZLP will indicate whether its a short packet or not
+ − 1351
@param aStatus In case of no data available to be read, aStatus will be passed on to LDD, and user side should wait for
+ − 1352
asynchronous call ReadDataNotify to return
+ − 1353
@param aLength Not used at the moment
+ − 1354
@return KErrCompletion if operation is successfull and data is available in the buffer
+ − 1355
KErrNone if no data is available to be read
+ − 1356
KErrEof if alternate setting has changed
+ − 1357
KErrAccessDenied if endpoint is not opened
+ − 1358
KErrNotSupported if its an IN endpoint
+ − 1359
TEndpointBuffer::KStateChange if the returned data represents a state change (Ep0 only)
+ − 1360
*/
+ − 1361
IMPORT_C TInt GetBuffer(TAny*& aBuffer,TUint& aSize,TBool& aZLP,TRequestStatus& aStatus,TUint aLength=0);
+ − 1362
+ − 1363
/**
+ − 1364
Read the next block of data from the Shared chunk buffer. This method should be used if the user wishes to process one block of data at a time.
+ − 1365
This method also expires the previously read block, meaning that the memory used by the block of data may be re-used by the system, overwriting it
+ − 1366
with new data.
+ − 1367
@param aOffset aOffset will point to data offset in shared chunk
+ − 1368
@param aSize aSize will hold the number of valid bytes that can be read
+ − 1369
@param aZLP aZLP will indicate whether its a short packet or not
+ − 1370
@param aStatus In case of no data available to be read, aStatus will be passed on to LDD, and user side should wait for
+ − 1371
asynchronous call ReadDataNotify to return
+ − 1372
@param aLength Not used at the moment
+ − 1373
@return KErrCompletion if operation is successfull and data is available in the buffer
+ − 1374
KErrNone if no data is available to be read
+ − 1375
KErrEof if alternate setting has changed
+ − 1376
KErrAccessDenied if endpoint is not opened
+ − 1377
KErrNotSupported if its an IN endpoint
+ − 1378
TEndpointBuffer::KStateChange if the returned data represents a state change (Ep0 only)
+ − 1379
*/
+ − 1380
inline TInt GetBuffer(TUint& aOffset,TUint& aSize,TBool& aZLP,TRequestStatus& aStatus,TUint aLength=0);
+ − 1381
+ − 1382
/**
+ − 1383
Read the next block of data from the Shared chunk buffer. This method should be used if the user wishes to process more than one block of data
+ − 1384
simultaneously. The user must call one of the Expire() methods to free the memory used by the block of data, and make it available for new data.
+ − 1385
@param aBuffer aBuffer will point to data location in shared chunk
+ − 1386
@param aSize aSize will hold the number of valid bytes that can be read
+ − 1387
@param aZLP aZLP will indicate whether its a short packet or not
+ − 1388
@param aStatus In case of no data available to be read, aStatus will be passed on to LDD, and user side should wait for
+ − 1389
asynchronous call ReadDataNotify to return
+ − 1390
@param aLength Not used at the moment
+ − 1391
@return KErrCompletion if operation is successfull and data is available in the buffer
+ − 1392
KErrNone if no data is available to be read
+ − 1393
KErrEof if alternate setting has changed
+ − 1394
KErrAccessDenied if endpoint is not opened
+ − 1395
KErrNotSupported if its an IN endpoint
+ − 1396
TEndpointBuffer::KStateChange if the returned data represents a state change (Ep0 only)
+ − 1397
*/
+ − 1398
IMPORT_C TInt TakeBuffer(TAny*& aBuffer,TUint& aSize,TBool& aZLP,TRequestStatus& aStatus,TUint aLength=0);
+ − 1399
+ − 1400
/**
+ − 1401
Used in conjunction with TakeBuffer method. This will make the 'oldest' block of data previously read out using the TakeBuffer method, but not
+ − 1402
already expired, to be released back to the system. This block can then be overwritten with new data, when it becomes available.
+ − 1403
@return KErrNotSupported if its an IN endpoint
+ − 1404
KErrNone if iTail is successfully bumped to the next transfer to be read
+ − 1405
*/
+ − 1406
+ − 1407
IMPORT_C TInt Expire();
+ − 1408
+ − 1409
/**
+ − 1410
Used in conjunction with TakeBuffer method. This function allows blocks to be expired in a different order from which the user read the data out
+ − 1411
of the buffer. Note that the system will only reuse blocks up to the point of the oldest non-expired block read. This means that the user must
+ − 1412
ensure to expire all blocks in a timely manner to prevent the system from running out of usable memory.
+ − 1413
@param aAddress aAddress is the start address of the block of data previously read by the user which can be overwritten.
+ − 1414
@return KErrNotSupported if its an IN endpoint
+ − 1415
KErrNone if iTail is successfully bumped to the next transfer to be read
+ − 1416
KErrNotFound if a 'transfer' with start address of the data block is aAddress is not found
+ − 1417
*/
+ − 1418
+ − 1419
IMPORT_C TInt Expire(TAny* aAddress);
+ − 1420
+ − 1421
/**
+ − 1422
Initiates write operation.
+ − 1423
@param aBuffer aBuffer will point to data in shared chunk to be written out. aBuffer should be aligned
+ − 1424
@param aSize aSize will hold the number of valid bytes to be written out
+ − 1425
@param aZLP aZLP will indicate whether a ZLP should be transmitted after writing the data out
+ − 1426
@param aStatus This is an asynchronous function and user side should wait on status to know the end of write operation
+ − 1427
@return KErrNone if a write is successfully queued
+ − 1428
KErrEof if an alternate setting change has occurred, ending this endpoint.
+ − 1429
KErrNotSupported if its an OUT endpoint
+ − 1430
KErrAccessDenied if endpoint is not opened, or if buffer is out of range
+ − 1431
*/
+ − 1432
IMPORT_C TInt WriteBuffer(TAny* aBuffer,TUint aSize,TBool aZLP,TRequestStatus& aStatus);
+ − 1433
+ − 1434
/**
+ − 1435
Initiates write operation.
+ − 1436
@param aOffset aOffset will point to offset of data in shared chunk to be written out.
+ − 1437
@param aSize aSize will hold the number of valid bytes to be written out
+ − 1438
@param aZLP aZLP will indicate whether a ZLP should be transmitted after writing the data out
+ − 1439
@param aStatus This is an asynchronous function and user side should wait on status to know the end of write operation
+ − 1440
@return KErrNone if a write is successfully queued
+ − 1441
KErrEof if an alternate setting change has occurred, ending this endpoint.
+ − 1442
KErrNotSupported if its an OUT endpoint
+ − 1443
KErrAccessDenied if endpoint is not opened, or if buffer is out of range
+ − 1444
*/
+ − 1445
IMPORT_C TInt WriteBuffer(TUint aOffset,TUint aSize,TBool aZLP,TRequestStatus& aStatus);
+ − 1446
/**
+ − 1447
For IN endpoints, this method retrieves the geometry for the buffer, for which the
+ − 1448
caller should stay within, when using the WriteBuffer method.
+ − 1449
+ − 1450
@param aStart A pointer, which is set to point to the start of the buffer.
+ − 1451
@param aSize An TUint for which the size (in bytes) of buffer, is written into.
+ − 1452
+ − 1453
@returns KErrNotSupported if the object is on an open IN endpoint,
+ − 1454
otherwise it KErrNone is returned on success.
+ − 1455
*/
+ − 1456
IMPORT_C TInt GetInBufferRange(TAny*& aStart, TUint& aSize);
+ − 1457
+ − 1458
/**
+ − 1459
For IN endpoints, this method retrieves the geometry for the buffer, for which the
+ − 1460
caller should stay within, when using the WriteBuffer method.
+ − 1461
+ − 1462
@param aStart A TUint for which the buffer's start offset from the start of the chunk,
+ − 1463
in written into.
+ − 1464
@param aSize An TUint for which the size (in bytes) of buffer, is written into.
+ − 1465
+ − 1466
@returns KErrNotSupported if the object is on an open IN endpoint,
+ − 1467
otherwise it KErrNone is returned on success.
+ − 1468
*/
+ − 1469
IMPORT_C TInt GetInBufferRange(TUint& aStart, TUint& aSize);
+ − 1470
+ − 1471
/**
+ − 1472
This method closes the endpoint, after it was opened with
+ − 1473
RDevUsbcScClient::OpenEndpoint(...).
+ − 1474
No method of this object can be used after this call, until
+ − 1475
RDevUsbcScClient::OpenEndpoint(...) is called on it again.
+ − 1476
+ − 1477
@return KErrNone on success, otherwise KErrNotFound, if the current object is not open.
+ − 1478
*/
+ − 1479
IMPORT_C TInt Close();
+ − 1480
+ − 1481
IMPORT_C void Dump();
+ − 1482
+ − 1483
/**
+ − 1484
Used to retrieve the endpoint number for which this object was open on.
+ − 1485
+ − 1486
@returns the endpoint number opened by this object.
+ − 1487
*/
+ − 1488
inline TInt GetEndpointNumber();
+ − 1489
+ − 1490
private:
+ − 1491
/** @internalTechnology */
+ − 1492
void Construct(RDevUsbcScClient* aClient, TUint8* aBaseAddr, const TUsbcScHdrEndpointRecord* aEpType,
+ − 1493
TInt aEndpointNumber, SUsbcScBufferHeader* aEndpointHdr=NULL);
+ − 1494
+ − 1495
private:
+ − 1496
enum TDir {EValid = KErrNone, ENotValid = KErrNotSupported, EEOF = KErrEof};
+ − 1497
TDir iInState; /** @internalTechnology describes state of endpoint, KErrNone if IN endpoint and ready to use, KErrNotSupportd if not an IN endpoint, KErrEof on alternate setting change */
+ − 1498
TDir iOutState; /** @internalTechnology describes state of endpoint, KErrNone if OUT endpoint and ready to use, KErrNotSupportd if not an OUT endpoint, KErrEoF on alternate setting change */
+ − 1499
TInt iEndpointNumber; /** @internalTechnology associated endpoint number */
+ − 1500
TInt iBufferNum; /** @internalTechnology buffer number within shared chunk */
+ − 1501
RDevUsbcScClient *iClient; /** @internalTechnology Parent RDevUsbcScClient object */
+ − 1502
TUint iBaseAddr; /** @internalTechnology The address of the beginning of the Ldd's chunk */
+ − 1503
+ − 1504
SUsbcScBufferHeader* iEndpointHdr; /** @internalTechnology Pointer to the buffer Header for OUT/BI endpoints */
+ − 1505
TUint8* iBufferStartAddr; /** @internalTechnology IN/BI endpoint buffer start address within shared chunk */
+ − 1506
TUint iSize; /** @internalTechnology IN/BI endpoint buffer size within shared chunk */
+ − 1507
friend class RDevUsbcScClient;
+ − 1508
};
+ − 1509
+ − 1510
/**
+ − 1511
This class can be used to retrieve the geometry of the structures
+ − 1512
within a shared chunk, as used by RDevUsbcScClient.
+ − 1513
+ − 1514
@see RDevUsbcScClient
+ − 1515
*/
+ − 1516
+ − 1517
class TUsbcScChunkHeader
+ − 1518
{
+ − 1519
public:
+ − 1520
/**
+ − 1521
The constructor for the TUsbcScChunkHeader class takes a RChunk object,
+ − 1522
containing USBcSc data structures, and initialises itself, so that
+ − 1523
GetNumberOfEndpoints & GetBuffer can be used to interpret the chunk structures.
+ − 1524
+ − 1525
@param An RChunk object, which represents an shared chunk, containing the
+ − 1526
USBcSc data structures to be retrieved.
+ − 1527
*/
+ − 1528
IMPORT_C TUsbcScChunkHeader(RChunk aChunk);
+ − 1529
/**
+ − 1530
Retrieves the available information in the chunk, about the given endpoint,
+ − 1531
on the given alternate setting. The returned TUsbcScBufferRecord,
+ − 1532
represents the buffer geometry, used for for the endpoint, while
+ − 1533
the filled in TUsbcScHdrEndpointRecord represents additional endpoint
+ − 1534
information.
+ − 1535
+ − 1536
@param aAltSetting The alternate setting, for which the provided endpoint number, is a member of.
+ − 1537
@param aEndpoint The endpoint, who's buffer geometry is required.
+ − 1538
@param aEndpointInf The provided record is filled in with details of the endpoint, who's number was given.
+ − 1539
*/
+ − 1540
IMPORT_C TUsbcScBufferRecord* GetBuffer(TInt aAltSetting, TInt aEndpoint, TUsbcScHdrEndpointRecord*& aEndpointInf);
+ − 1541
/**
+ − 1542
Retrieves the number of endpoints found in a given alternate setting.
+ − 1543
@param aAltSetting The alternate setting number, for which the number of endpoints contained within, is needed.
+ − 1544
*/
+ − 1545
IMPORT_C TInt GetNumberOfEndpoints(TInt aAltSetting);
+ − 1546
+ − 1547
public:
+ − 1548
TUsbcScChunkBuffersHeader* iBuffers; /** A pointer to the TUsbcScChunkBuffersHeader object, within the chunk header */
+ − 1549
TUsbcScChunkAltSettingHeader* iAltSettings; /** A pointer to the TUsbcScChunkAltSettingHeader object, within the chunk header */
+ − 1550
private:
+ − 1551
RChunk iChunk;
+ − 1552
};
+ − 1553
+ − 1554
#endif
+ − 1555
+ − 1556
#include <d32usbcsc.inl>
+ − 1557
+ − 1558
#endif // __D32USBCSC_H__