usbdrv/peripheral/public/usbcsc.h
author hgs
Wed, 03 Nov 2010 10:49:35 +0800
changeset 63 705964cc7132
parent 59 bbdce6bffaad
permissions -rw-r--r--
201043_01
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
59
bbdce6bffaad 201041_02
hgs
parents: 48
diff changeset
     1
/*
bbdce6bffaad 201041_02
hgs
parents: 48
diff changeset
     2
* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
bbdce6bffaad 201041_02
hgs
parents: 48
diff changeset
     3
* All rights reserved.
bbdce6bffaad 201041_02
hgs
parents: 48
diff changeset
     4
* This component and the accompanying materials are made available
bbdce6bffaad 201041_02
hgs
parents: 48
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
bbdce6bffaad 201041_02
hgs
parents: 48
diff changeset
     6
* which accompanies this distribution, and is available
bbdce6bffaad 201041_02
hgs
parents: 48
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
bbdce6bffaad 201041_02
hgs
parents: 48
diff changeset
     8
*
bbdce6bffaad 201041_02
hgs
parents: 48
diff changeset
     9
* Initial Contributors:
bbdce6bffaad 201041_02
hgs
parents: 48
diff changeset
    10
* Nokia Corporation - initial contribution.
bbdce6bffaad 201041_02
hgs
parents: 48
diff changeset
    11
*
bbdce6bffaad 201041_02
hgs
parents: 48
diff changeset
    12
* Contributors:
bbdce6bffaad 201041_02
hgs
parents: 48
diff changeset
    13
*
bbdce6bffaad 201041_02
hgs
parents: 48
diff changeset
    14
* Description:
bbdce6bffaad 201041_02
hgs
parents: 48
diff changeset
    15
* e32\include\drivers\usbcsc.h
bbdce6bffaad 201041_02
hgs
parents: 48
diff changeset
    16
* Kernel side definitions for the USB Device driver stack (PIL + LDD).
bbdce6bffaad 201041_02
hgs
parents: 48
diff changeset
    17
*
bbdce6bffaad 201041_02
hgs
parents: 48
diff changeset
    18
*/
33
089413cdde3c 201028_02
hgs
parents:
diff changeset
    19
089413cdde3c 201028_02
hgs
parents:
diff changeset
    20
/**
089413cdde3c 201028_02
hgs
parents:
diff changeset
    21
 @file usbcsc.h
089413cdde3c 201028_02
hgs
parents:
diff changeset
    22
 @internalTechnology
089413cdde3c 201028_02
hgs
parents:
diff changeset
    23
*/
089413cdde3c 201028_02
hgs
parents:
diff changeset
    24
089413cdde3c 201028_02
hgs
parents:
diff changeset
    25
#ifndef __USBCSC_H__
089413cdde3c 201028_02
hgs
parents:
diff changeset
    26
#define __USBCSC_H__
089413cdde3c 201028_02
hgs
parents:
diff changeset
    27
089413cdde3c 201028_02
hgs
parents:
diff changeset
    28
#include <kernel/kernel.h>
089413cdde3c 201028_02
hgs
parents:
diff changeset
    29
#include <kernel/kern_priv.h>
089413cdde3c 201028_02
hgs
parents:
diff changeset
    30
#include <kernel/kpower.h>
089413cdde3c 201028_02
hgs
parents:
diff changeset
    31
#include <platform.h>
089413cdde3c 201028_02
hgs
parents:
diff changeset
    32
089413cdde3c 201028_02
hgs
parents:
diff changeset
    33
#include <usb/d32usbcsc.h>
089413cdde3c 201028_02
hgs
parents:
diff changeset
    34
089413cdde3c 201028_02
hgs
parents:
diff changeset
    35
// #include <drivers/usbcshared.h>
089413cdde3c 201028_02
hgs
parents:
diff changeset
    36
#include <usb/usbcshared.h>
089413cdde3c 201028_02
hgs
parents:
diff changeset
    37
089413cdde3c 201028_02
hgs
parents:
diff changeset
    38
/** LDD Major version, This should agree with the information in RDevUsbcClient::TVer.
089413cdde3c 201028_02
hgs
parents:
diff changeset
    39
*/
089413cdde3c 201028_02
hgs
parents:
diff changeset
    40
const TInt KUsbcScMajorVersion = 0;
089413cdde3c 201028_02
hgs
parents:
diff changeset
    41
089413cdde3c 201028_02
hgs
parents:
diff changeset
    42
/** LDD Minor version, This should agree with the information in RDevUsbcClient::TVer.
089413cdde3c 201028_02
hgs
parents:
diff changeset
    43
*/
089413cdde3c 201028_02
hgs
parents:
diff changeset
    44
const TInt KUsbcScMinorVersion = 1;
089413cdde3c 201028_02
hgs
parents:
diff changeset
    45
089413cdde3c 201028_02
hgs
parents:
diff changeset
    46
/** LDD Build version, This should agree with the information in RDevUsbcClient::TVer.
089413cdde3c 201028_02
hgs
parents:
diff changeset
    47
*/
089413cdde3c 201028_02
hgs
parents:
diff changeset
    48
const TInt KUsbcScBuildVersion = KE32BuildVersionNumber;
089413cdde3c 201028_02
hgs
parents:
diff changeset
    49
089413cdde3c 201028_02
hgs
parents:
diff changeset
    50
/** Must correspond to the max enum of TRequest + 1;
089413cdde3c 201028_02
hgs
parents:
diff changeset
    51
    currently this is ERequestOtgFeaturesNotify = 10.
089413cdde3c 201028_02
hgs
parents:
diff changeset
    52
*/
089413cdde3c 201028_02
hgs
parents:
diff changeset
    53
const TInt KUsbcScMaxRequests = 11;
089413cdde3c 201028_02
hgs
parents:
diff changeset
    54
089413cdde3c 201028_02
hgs
parents:
diff changeset
    55
// Request queue sizes need to be power of 2.
089413cdde3c 201028_02
hgs
parents:
diff changeset
    56
089413cdde3c 201028_02
hgs
parents:
diff changeset
    57
/** The number of requests that can be queued on any IN endpoint */
089413cdde3c 201028_02
hgs
parents:
diff changeset
    58
const TInt KUsbcScInRequests = 4;
089413cdde3c 201028_02
hgs
parents:
diff changeset
    59
/** The number of requests that can be queued on any OUT endpoint */
089413cdde3c 201028_02
hgs
parents:
diff changeset
    60
const TInt KUsbcScOutRequests = 2;
089413cdde3c 201028_02
hgs
parents:
diff changeset
    61
089413cdde3c 201028_02
hgs
parents:
diff changeset
    62
/** In TUsbcScBuffer.iDirection, this indicates that the endpoint is an IN endpoint */
089413cdde3c 201028_02
hgs
parents:
diff changeset
    63
const TInt KUsbcScIn =  0;
089413cdde3c 201028_02
hgs
parents:
diff changeset
    64
/** In TUsbcScBuffer.iDirection, this indicates that the endpoint is an OUT endpoint */
089413cdde3c 201028_02
hgs
parents:
diff changeset
    65
const TInt KUsbcScOut = 1;
089413cdde3c 201028_02
hgs
parents:
diff changeset
    66
089413cdde3c 201028_02
hgs
parents:
diff changeset
    67
089413cdde3c 201028_02
hgs
parents:
diff changeset
    68
/** In TUsbcScBuffer.iDirection, this indicates that the endpoint is an Bidirectional endpoint
089413cdde3c 201028_02
hgs
parents:
diff changeset
    69
currently operating as an IN endpoint */
089413cdde3c 201028_02
hgs
parents:
diff changeset
    70
const TInt KUsbcScBiIn = 2;
089413cdde3c 201028_02
hgs
parents:
diff changeset
    71
/** In TUsbcScBuffer.iDirection, this indicates that the endpoint is an Bidirectional endpoint
089413cdde3c 201028_02
hgs
parents:
diff changeset
    72
currently operating as an OUT endpoint */
089413cdde3c 201028_02
hgs
parents:
diff changeset
    73
const TInt KUsbcScBiOut = 3;
089413cdde3c 201028_02
hgs
parents:
diff changeset
    74
089413cdde3c 201028_02
hgs
parents:
diff changeset
    75
/** The number of directions supported for endpoints, other then EP0.  Currently 2, IN and OUT. */
089413cdde3c 201028_02
hgs
parents:
diff changeset
    76
const TInt KUsbcScDirections = 2;
089413cdde3c 201028_02
hgs
parents:
diff changeset
    77
089413cdde3c 201028_02
hgs
parents:
diff changeset
    78
/** In TUsbcScBuffer::iDirection, this indicates that the endpoint direction is Unknown. */
089413cdde3c 201028_02
hgs
parents:
diff changeset
    79
const TInt KUsbcScUnknown = 4;
089413cdde3c 201028_02
hgs
parents:
diff changeset
    80
089413cdde3c 201028_02
hgs
parents:
diff changeset
    81
const TInt KPageSize = 0x1000;
089413cdde3c 201028_02
hgs
parents:
diff changeset
    82
089413cdde3c 201028_02
hgs
parents:
diff changeset
    83
/** The default buffer size requested for a endpoint, if the user app does not specify a size.*/
089413cdde3c 201028_02
hgs
parents:
diff changeset
    84
const TInt KUsbcScDefaultBufferSize = 0x10000; // 64k
089413cdde3c 201028_02
hgs
parents:
diff changeset
    85
089413cdde3c 201028_02
hgs
parents:
diff changeset
    86
/** The size of the unmapped region of memory between endpoint buffers.
089413cdde3c 201028_02
hgs
parents:
diff changeset
    87
This serves as a guard region, making memory over/under runs more obviose.*/
089413cdde3c 201028_02
hgs
parents:
diff changeset
    88
const TInt KGuardSize = KPageSize;
089413cdde3c 201028_02
hgs
parents:
diff changeset
    89
089413cdde3c 201028_02
hgs
parents:
diff changeset
    90
/** The size put aside for the chunk header structre.*/
089413cdde3c 201028_02
hgs
parents:
diff changeset
    91
const TInt KHeaderSize = KPageSize;
089413cdde3c 201028_02
hgs
parents:
diff changeset
    92
089413cdde3c 201028_02
hgs
parents:
diff changeset
    93
/** For buffers of size >= KUsbScBigBuffIs, The smallest unit of continiouse memory that will be used.
089413cdde3c 201028_02
hgs
parents:
diff changeset
    94
No read will be set up smaller then this, to avoid overly fragmenting the data.
089413cdde3c 201028_02
hgs
parents:
diff changeset
    95
*/
089413cdde3c 201028_02
hgs
parents:
diff changeset
    96
const TInt KUsbSc_BigBuff_MinimumRamRun = KPageSize;
089413cdde3c 201028_02
hgs
parents:
diff changeset
    97
089413cdde3c 201028_02
hgs
parents:
diff changeset
    98
/** For buffers of size < KUsbScBigBuffIs, The smallest unit of continiouse memory that will be used.
089413cdde3c 201028_02
hgs
parents:
diff changeset
    99
No read will be set up smaller then this, to avoid overly fragmenting the data.*/
089413cdde3c 201028_02
hgs
parents:
diff changeset
   100
const TInt KUsbSc_SmallBuff_MinimumRamRun = 1024;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   101
089413cdde3c 201028_02
hgs
parents:
diff changeset
   102
/** The size a buffer request has to be to switch to using KUsbSc_BigBuff_MinimumRamRun.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   103
If the requested buffer is smaller, then the smallest memory allocated to a buffer is KPageSize*/
089413cdde3c 201028_02
hgs
parents:
diff changeset
   104
const TInt KUsbScBigBuffIs = KPageSize*6;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   105
089413cdde3c 201028_02
hgs
parents:
diff changeset
   106
089413cdde3c 201028_02
hgs
parents:
diff changeset
   107
089413cdde3c 201028_02
hgs
parents:
diff changeset
   108
// EP0 is mapped manually, unlike the other endpoints.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   109
089413cdde3c 201028_02
hgs
parents:
diff changeset
   110
/** The position, within the chunk, that the EP0 IN buffer appears*/
089413cdde3c 201028_02
hgs
parents:
diff changeset
   111
const TInt KUsbScEP0InBufPos = 0x800;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   112
/** The position, within the chunk, that the EP0 IN buffer ends*/
089413cdde3c 201028_02
hgs
parents:
diff changeset
   113
const TInt KUsbScEP0InBufEnd = KUsbScEP0InBufPos + 0x400;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   114
089413cdde3c 201028_02
hgs
parents:
diff changeset
   115
// Its better for Out to go 2nd, so gaurd page after it.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   116
/** The position, within the chunk, that the EP0 OUT buffer appears*/
089413cdde3c 201028_02
hgs
parents:
diff changeset
   117
const TInt KUsbScEP0OutBufPos = 0xc00;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   118
/** The position, within the chunk, that the EP0 OUT buffer ends*/
089413cdde3c 201028_02
hgs
parents:
diff changeset
   119
const TInt KUsbScEP0OutBufEnd = KUsbScEP0OutBufPos + 0x400;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   120
089413cdde3c 201028_02
hgs
parents:
diff changeset
   121
/** The number of the entry within the chunk BufferRecord table, for the OUT ep0 buffer.*/
089413cdde3c 201028_02
hgs
parents:
diff changeset
   122
const TInt KUsbcScEp0OutBuff = 0;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   123
/** The number of the entry within the chunk BufferRecord table, for the IN ep0 buffer.*/
089413cdde3c 201028_02
hgs
parents:
diff changeset
   124
const TInt KUsbcScEp0InBuff = 1;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   125
089413cdde3c 201028_02
hgs
parents:
diff changeset
   126
089413cdde3c 201028_02
hgs
parents:
diff changeset
   127
//
089413cdde3c 201028_02
hgs
parents:
diff changeset
   128
//########################### Logical Device Driver (LDD) #############################
089413cdde3c 201028_02
hgs
parents:
diff changeset
   129
//
089413cdde3c 201028_02
hgs
parents:
diff changeset
   130
089413cdde3c 201028_02
hgs
parents:
diff changeset
   131
/** USB LDD factory class.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   132
*/
089413cdde3c 201028_02
hgs
parents:
diff changeset
   133
class DUsbcScLogDevice : public DLogicalDevice
089413cdde3c 201028_02
hgs
parents:
diff changeset
   134
    {
089413cdde3c 201028_02
hgs
parents:
diff changeset
   135
public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   136
    DUsbcScLogDevice();
089413cdde3c 201028_02
hgs
parents:
diff changeset
   137
    virtual TInt Install();
089413cdde3c 201028_02
hgs
parents:
diff changeset
   138
    virtual void GetCaps(TDes8& aDes) const;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   139
    virtual TInt Create(DLogicalChannelBase*& aChannel);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   140
    };
089413cdde3c 201028_02
hgs
parents:
diff changeset
   141
089413cdde3c 201028_02
hgs
parents:
diff changeset
   142
089413cdde3c 201028_02
hgs
parents:
diff changeset
   143
class DLddUsbcScChannel;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   144
class TUsbcScBuffer;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   145
/** Endpoint tracking for the LDD buffering etc.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   146
*/
089413cdde3c 201028_02
hgs
parents:
diff changeset
   147
class TUsbcScEndpoint
089413cdde3c 201028_02
hgs
parents:
diff changeset
   148
    {
089413cdde3c 201028_02
hgs
parents:
diff changeset
   149
public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   150
    TUsbcScEndpoint(DLddUsbcScChannel* aLDD, DUsbClientController* aController,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   151
                  const TUsbcScEndpointInfo* aEndpointInfo, TInt aEndpointNum
089413cdde3c 201028_02
hgs
parents:
diff changeset
   152
                  );
089413cdde3c 201028_02
hgs
parents:
diff changeset
   153
    ~TUsbcScEndpoint();
089413cdde3c 201028_02
hgs
parents:
diff changeset
   154
    TInt Construct();
089413cdde3c 201028_02
hgs
parents:
diff changeset
   155
    void CancelTransfer(DThread* aThread);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   156
    void AbortTransfer();
089413cdde3c 201028_02
hgs
parents:
diff changeset
   157
    inline TUsbcScEndpointInfo* EndpointInfo();
089413cdde3c 201028_02
hgs
parents:
diff changeset
   158
    inline TInt RxBytesAvailable() const;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   159
    inline void ResetTransferInfo();
089413cdde3c 201028_02
hgs
parents:
diff changeset
   160
    inline void SetClientReadPending(TBool aVal);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   161
    inline void SetClientWritePending(TBool aVal);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   162
    inline TBool ClientWritePending();
089413cdde3c 201028_02
hgs
parents:
diff changeset
   163
    inline TBool ClientReadPending();
089413cdde3c 201028_02
hgs
parents:
diff changeset
   164
    inline void SetRealEpNumber(TInt aRealEpNumber);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   165
    inline TInt RealEpNumber() const;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   166
    inline TInt EpNumber() const;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   167
    inline void StartBuffer();
089413cdde3c 201028_02
hgs
parents:
diff changeset
   168
    inline void SetBuffer(TUsbcScBuffer* aBuffer);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   169
    inline TUsbcScBuffer* GetBuffer();
089413cdde3c 201028_02
hgs
parents:
diff changeset
   170
089413cdde3c 201028_02
hgs
parents:
diff changeset
   171
089413cdde3c 201028_02
hgs
parents:
diff changeset
   172
private:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   173
    static void RequestCallback(TAny* aTUsbcScEndpoint);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   174
    void TxComplete();
089413cdde3c 201028_02
hgs
parents:
diff changeset
   175
    TInt RxComplete(TBool aReEntrant);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   176
    void RxCompleteNow();
089413cdde3c 201028_02
hgs
parents:
diff changeset
   177
089413cdde3c 201028_02
hgs
parents:
diff changeset
   178
089413cdde3c 201028_02
hgs
parents:
diff changeset
   179
089413cdde3c 201028_02
hgs
parents:
diff changeset
   180
public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   181
    TUsbcRequestCallback* iRequestCallbackInfo;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   182
089413cdde3c 201028_02
hgs
parents:
diff changeset
   183
private:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   184
    DUsbClientController* iController;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   185
    TUsbcScEndpointInfo iEndpointInfo;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   186
    TBool iClientReadPending;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   187
    TBool iClientWritePending;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   188
    TInt iEndpointNumber;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   189
    TInt iRealEpNumber;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   190
    DLddUsbcScChannel* iLdd;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   191
    TInt iError;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   192
    TUint32 iBytesTransferred;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   193
    TInt iBandwidthPriority;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   194
    TUsbcScBuffer* iBuffer;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   195
089413cdde3c 201028_02
hgs
parents:
diff changeset
   196
    };
089413cdde3c 201028_02
hgs
parents:
diff changeset
   197
089413cdde3c 201028_02
hgs
parents:
diff changeset
   198
089413cdde3c 201028_02
hgs
parents:
diff changeset
   199
/** Linked list of 'alternate setting' info for use by the LDD.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   200
*/
089413cdde3c 201028_02
hgs
parents:
diff changeset
   201
class TUsbcScAlternateSetting
089413cdde3c 201028_02
hgs
parents:
diff changeset
   202
    {
089413cdde3c 201028_02
hgs
parents:
diff changeset
   203
public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   204
    TUsbcScAlternateSetting();
089413cdde3c 201028_02
hgs
parents:
diff changeset
   205
    ~TUsbcScAlternateSetting();
089413cdde3c 201028_02
hgs
parents:
diff changeset
   206
089413cdde3c 201028_02
hgs
parents:
diff changeset
   207
public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   208
    TUsbcScAlternateSetting* iNext;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   209
    TUsbcScAlternateSetting* iPrevious;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   210
    TInt iNumberOfEndpoints;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   211
    TUint iSetting;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   212
    TUsbcScEndpoint* iEndpoint[KMaxEndpointsPerClient + 1];
089413cdde3c 201028_02
hgs
parents:
diff changeset
   213
    };
089413cdde3c 201028_02
hgs
parents:
diff changeset
   214
089413cdde3c 201028_02
hgs
parents:
diff changeset
   215
class TUsbcScAlternateSettingList
089413cdde3c 201028_02
hgs
parents:
diff changeset
   216
    {
089413cdde3c 201028_02
hgs
parents:
diff changeset
   217
public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   218
    TUsbcScAlternateSettingList();
089413cdde3c 201028_02
hgs
parents:
diff changeset
   219
    ~TUsbcScAlternateSettingList();
089413cdde3c 201028_02
hgs
parents:
diff changeset
   220
089413cdde3c 201028_02
hgs
parents:
diff changeset
   221
public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   222
    TUsbcScAlternateSetting* iHead;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   223
    TUsbcScAlternateSetting* iTail;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   224
    };
089413cdde3c 201028_02
hgs
parents:
diff changeset
   225
089413cdde3c 201028_02
hgs
parents:
diff changeset
   226
class TUsbcScChunkInfo
089413cdde3c 201028_02
hgs
parents:
diff changeset
   227
    {
089413cdde3c 201028_02
hgs
parents:
diff changeset
   228
public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   229
    TUsbcScChunkInfo(DLogicalDevice* aLdd);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   230
    TInt CreateChunk(TInt aTotalSize);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   231
    void Close();
089413cdde3c 201028_02
hgs
parents:
diff changeset
   232
    TInt ChunkAlloc(TInt aOffset, TInt aSize);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   233
    void ChunkCleanup();
089413cdde3c 201028_02
hgs
parents:
diff changeset
   234
    TInt GetPhysical(TInt aOffset, TPhysAddr* aPhysical);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   235
    static TInt New(TUsbcScChunkInfo*& aChunk, TInt aSize, DLogicalDevice* aLdd);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   236
private:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   237
    TUint* iPhysicalMap;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   238
public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   239
    DChunk* iChunk;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   240
    TDfc iCleanup;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   241
089413cdde3c 201028_02
hgs
parents:
diff changeset
   242
    TInt8 iPageNtz; // Number of trailing zeros for a page. (Eg 4k page has 12 t.z.)
089413cdde3c 201028_02
hgs
parents:
diff changeset
   243
    TInt iAllocatedSize;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   244
    TInt8* iChunkMem;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   245
    TUint32 iChunkMapAttr;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   246
    DLogicalDevice* iLdd;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   247
    };
089413cdde3c 201028_02
hgs
parents:
diff changeset
   248
089413cdde3c 201028_02
hgs
parents:
diff changeset
   249
089413cdde3c 201028_02
hgs
parents:
diff changeset
   250
// Used to represent a matrix of endpoints with a column of sizes.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   251
// Used by TRealizeInfo
089413cdde3c 201028_02
hgs
parents:
diff changeset
   252
089413cdde3c 201028_02
hgs
parents:
diff changeset
   253
class TEndpointSortBufs
089413cdde3c 201028_02
hgs
parents:
diff changeset
   254
    {
089413cdde3c 201028_02
hgs
parents:
diff changeset
   255
    public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   256
        TUsbcScEndpoint** iEp;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   257
        TInt* iSizes;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   258
        TInt iEps;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   259
    };
089413cdde3c 201028_02
hgs
parents:
diff changeset
   260
089413cdde3c 201028_02
hgs
parents:
diff changeset
   261
// This is used to calculate the layout of the shared chunk
089413cdde3c 201028_02
hgs
parents:
diff changeset
   262
// based on a list of alternative settings / endpoints provided.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   263
 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   264
class TRealizeInfo
089413cdde3c 201028_02
hgs
parents:
diff changeset
   265
    {
089413cdde3c 201028_02
hgs
parents:
diff changeset
   266
    public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   267
        void Init(TUsbcScAlternateSettingList* aAlternateSettingList);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   268
        TInt CopyAndSortEndpoints();
089413cdde3c 201028_02
hgs
parents:
diff changeset
   269
        void CalcBuffSizes();
089413cdde3c 201028_02
hgs
parents:
diff changeset
   270
        void Free();
089413cdde3c 201028_02
hgs
parents:
diff changeset
   271
089413cdde3c 201028_02
hgs
parents:
diff changeset
   272
        void LayoutChunkHeader(TUsbcScChunkInfo* aChunkInfo);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   273
    public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   274
        TInt iMaxEndpoints;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   275
        TInt iTotalSize;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   276
        TInt iTotalBuffers;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   277
        TInt iAltSettings;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   278
        TEndpointSortBufs iBufs[KUsbcScDirections];
089413cdde3c 201028_02
hgs
parents:
diff changeset
   279
        TUsbcScAlternateSettingList* iAlternateSettingList;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   280
089413cdde3c 201028_02
hgs
parents:
diff changeset
   281
        // Chunk layout info.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   282
        TUsbcScChunkBuffersHeader* iChunkStuct;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   283
        TUsbcScChunkAltSettingHeader* iAltSettingsTbl;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   284
    };
089413cdde3c 201028_02
hgs
parents:
diff changeset
   285
089413cdde3c 201028_02
hgs
parents:
diff changeset
   286
089413cdde3c 201028_02
hgs
parents:
diff changeset
   287
089413cdde3c 201028_02
hgs
parents:
diff changeset
   288
/** The channel class - the actual USB LDD.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   289
*/
089413cdde3c 201028_02
hgs
parents:
diff changeset
   290
class DLddUsbcScChannel : public DLogicalChannel
089413cdde3c 201028_02
hgs
parents:
diff changeset
   291
    {
089413cdde3c 201028_02
hgs
parents:
diff changeset
   292
public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   293
    DLddUsbcScChannel();
089413cdde3c 201028_02
hgs
parents:
diff changeset
   294
    ~DLddUsbcScChannel();
089413cdde3c 201028_02
hgs
parents:
diff changeset
   295
    virtual void HandleMsg(TMessageBase* aMsg);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   296
    virtual TInt DoCreate(TInt aUnit, const TDesC8* aInfo, const TVersion& aVer);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   297
    virtual TInt RequestUserHandle(DThread* aThread, TOwnerType aType);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   298
    inline DThread* Client() const {return iClient;}
089413cdde3c 201028_02
hgs
parents:
diff changeset
   299
    inline TBool ChannelClosing() const {return iChannelClosing;}
089413cdde3c 201028_02
hgs
parents:
diff changeset
   300
    inline TUint AlternateSetting() const {return iAlternateSetting;}
089413cdde3c 201028_02
hgs
parents:
diff changeset
   301
    
089413cdde3c 201028_02
hgs
parents:
diff changeset
   302
    static void RequestCallbackEp0(TAny* aTUsbcScChannel);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   303
089413cdde3c 201028_02
hgs
parents:
diff changeset
   304
private:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   305
089413cdde3c 201028_02
hgs
parents:
diff changeset
   306
    TInt DoCancel(TInt aReqNo, TUint aMask, TUint a1);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   307
    TInt DoRequest(TInt aReqNo, TRequestStatus* aStatus, TAny* a1, TAny* a2);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   308
    TInt DoControl(TInt aFunction, TAny* a1, TAny* a2);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   309
    TInt DoReadDataNotify(TRequestStatus* aStatus, TInt aBufferNum, TInt aLength);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   310
    void StartDataRead(TInt aBufferNum);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   311
    TInt DoWriteData(TRequestStatus* aStatus,TInt aBufferNum, TUint aStart, TUint aLength, TUint aFlags);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   312
    TBool AlternateDeviceStateTestComplete();
089413cdde3c 201028_02
hgs
parents:
diff changeset
   313
    TInt SetInterface(TInt aInterfaceNum, TUsbcScIfcInfo* aUserInterfaceInfoBuf);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   314
    void StartEpReads();
089413cdde3c 201028_02
hgs
parents:
diff changeset
   315
    void DestroyAllInterfaces();
089413cdde3c 201028_02
hgs
parents:
diff changeset
   316
    void DestroyInterface(TUint aInterface);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   317
    void DestroyEp0();
089413cdde3c 201028_02
hgs
parents:
diff changeset
   318
    inline TBool ValidEndpoint(TInt aEndpoint);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   319
    TInt GetRealEpForEpResource(TInt aEndpoint, TInt& aRealEp);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   320
    inline TBool Configured();
089413cdde3c 201028_02
hgs
parents:
diff changeset
   321
    TInt DoEmergencyComplete();
089413cdde3c 201028_02
hgs
parents:
diff changeset
   322
    void ReadDes8(const TAny* aPtr, TDes8& aDes);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   323
    TInt SetupEp0();
089413cdde3c 201028_02
hgs
parents:
diff changeset
   324
    void CancelNotifyEndpointStatus();
089413cdde3c 201028_02
hgs
parents:
diff changeset
   325
    void CancelNotifyOtgFeatures();
48
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   326
    void CancelNotifyChargerType();
33
089413cdde3c 201028_02
hgs
parents:
diff changeset
   327
    static void StatusChangeCallback(TAny* aDLddUsbcChannel);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   328
    static void EndpointStatusChangeCallback(TAny* aDLddUsbcChannel);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   329
    static void OtgFeatureChangeCallback(TAny* aDLddUsbcChannel);
48
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   330
    static void ChargerTypeChangeCallback(TAny* aDLddUsbcChannel);	
33
089413cdde3c 201028_02
hgs
parents:
diff changeset
   331
    static void EmergencyCompleteDfc(TAny* aDLddUsbcChannel);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   332
    void DeConfigure(TInt aErrorCode);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   333
    TInt SelectAlternateSetting(TUint aAlternateSetting);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   334
    TInt EpFromAlternateSetting(TUint aAlternateSetting, TInt aEndpoint);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   335
    TInt ProcessAlternateSetting(TUint aAlternateSetting);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   336
    TInt32 StartNextInAlternateSetting();
089413cdde3c 201028_02
hgs
parents:
diff changeset
   337
    TInt ProcessDeviceState(TUsbcDeviceState aDeviceState);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   338
    void ResetInterface(TInt aErrorCode);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   339
    void PanicClientThread(TInt aReason);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   340
089413cdde3c 201028_02
hgs
parents:
diff changeset
   341
    TInt RealizeInterface(void);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   342
089413cdde3c 201028_02
hgs
parents:
diff changeset
   343
private:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   344
    DUsbClientController* iController;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   345
    DThread* iClient;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   346
    TBool iValidInterface;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   347
    
089413cdde3c 201028_02
hgs
parents:
diff changeset
   348
    TUsbcScAlternateSettingList* iAlternateSettingList;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   349
    TUsbcScEndpoint** iEndpoint;  // Pointer to the current endpoint set.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   350
089413cdde3c 201028_02
hgs
parents:
diff changeset
   351
    static const TInt KUsbcMaxRequests = RDevUsbcScClient::ERequestMaxRequests;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   352
    TRequestStatus* iRequestStatus[KUsbcMaxRequests];
089413cdde3c 201028_02
hgs
parents:
diff changeset
   353
    TUsbcClientCallback iCompleteAllCallbackInfo;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   354
    TAny* iStatusChangePtr;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   355
    TUsbcStatusCallback iStatusCallbackInfo;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   356
    TAny* iEndpointStatusChangePtr;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   357
    TUsbcEndpointStatusCallback iEndpointStatusCallbackInfo;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   358
    TAny* iOtgFeatureChangePtr;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   359
    TUsbcOtgFeatureCallback iOtgFeatureCallbackInfo;
48
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   360
    TAny* iChargerTypeChangePtr;
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   361
    TUsbcChargerTypeCallback iChargerTypeCallbackInfo;
33
089413cdde3c 201028_02
hgs
parents:
diff changeset
   362
    TUint8* iBufferBaseEp0;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   363
    TInt iBufferSizeEp0;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   364
    TInt iNumberOfEndpoints;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   365
    TUsbcDeviceState iDeviceState;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   366
    TUsbcDeviceState iOldDeviceState;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   367
    TBool iOwnsDeviceControl;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   368
    TUint16 iAlternateSetting;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   369
    TUint16 iAsSeq;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   370
089413cdde3c 201028_02
hgs
parents:
diff changeset
   371
    TUsbcDeviceStatusQueue* iStatusFifo;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   372
    TBool iUserKnowsAltSetting;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   373
    TBool iDeviceStatusNeeded;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   374
    TBool iChannelClosing;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   375
    TBool iRealizeCalled;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   376
089413cdde3c 201028_02
hgs
parents:
diff changeset
   377
    TUsbcScChunkInfo* iChunkInfo;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   378
    TInt iNumBuffers;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   379
    TUsbcScBuffer *iBuffers;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   380
089413cdde3c 201028_02
hgs
parents:
diff changeset
   381
    TUsbcScEndpoint* iEp0Endpoint;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   382
    TInt iEP0InBuff;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   383
    TInt iEP0OutBuff;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   384
089413cdde3c 201028_02
hgs
parents:
diff changeset
   385
    friend class TUsbcScBuffer;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   386
    friend void TUsbcScEndpoint::AbortTransfer();
089413cdde3c 201028_02
hgs
parents:
diff changeset
   387
    };
089413cdde3c 201028_02
hgs
parents:
diff changeset
   388
089413cdde3c 201028_02
hgs
parents:
diff changeset
   389
/**
089413cdde3c 201028_02
hgs
parents:
diff changeset
   390
This class is used by TUsbcScStatusList to form a queue of status requests.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   391
These requests are on a buffer basis, so that all buffers can have at least two requests
089413cdde3c 201028_02
hgs
parents:
diff changeset
   392
pending, at the same time. (i.e. buffer 1 could have two requests outstanding, as well as 2 on buffer 2.)
089413cdde3c 201028_02
hgs
parents:
diff changeset
   393
*/
089413cdde3c 201028_02
hgs
parents:
diff changeset
   394
089413cdde3c 201028_02
hgs
parents:
diff changeset
   395
class TUsbcScStatusElement
089413cdde3c 201028_02
hgs
parents:
diff changeset
   396
{
089413cdde3c 201028_02
hgs
parents:
diff changeset
   397
public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   398
    TRequestStatus* iStatus;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   399
    TInt iLength;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   400
    TUint iStart;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   401
    TUint iFlags;    
089413cdde3c 201028_02
hgs
parents:
diff changeset
   402
};
089413cdde3c 201028_02
hgs
parents:
diff changeset
   403
089413cdde3c 201028_02
hgs
parents:
diff changeset
   404
enum TUsbcScStatusState
089413cdde3c 201028_02
hgs
parents:
diff changeset
   405
{
089413cdde3c 201028_02
hgs
parents:
diff changeset
   406
    ENotRunning,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   407
    EInProgress,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   408
    EReadingAhead,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   409
    EFramgementInProgress
089413cdde3c 201028_02
hgs
parents:
diff changeset
   410
};
089413cdde3c 201028_02
hgs
parents:
diff changeset
   411
089413cdde3c 201028_02
hgs
parents:
diff changeset
   412
class TUsbcScStatusList
089413cdde3c 201028_02
hgs
parents:
diff changeset
   413
{
089413cdde3c 201028_02
hgs
parents:
diff changeset
   414
public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   415
    TInt Construct(TInt aSize, DThread* aThread);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   416
    void Destroy();
089413cdde3c 201028_02
hgs
parents:
diff changeset
   417
089413cdde3c 201028_02
hgs
parents:
diff changeset
   418
    TUsbcScStatusElement* Next();
089413cdde3c 201028_02
hgs
parents:
diff changeset
   419
    void Pop();
089413cdde3c 201028_02
hgs
parents:
diff changeset
   420
    TInt Add(TRequestStatus* aStatus, TInt aLength, TUint aStart, TUint aFlags);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   421
    void CancelQueued(TInt aErrorCode=KErrCancel);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   422
    TInt Complete(TInt aError);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   423
    void Complete();
089413cdde3c 201028_02
hgs
parents:
diff changeset
   424
public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   425
    TUsbcScStatusState iState;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   426
089413cdde3c 201028_02
hgs
parents:
diff changeset
   427
private:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   428
    DThread* iClient;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   429
    TInt iHead;   // The element at the head of the queue, ie, the earliest added, and next to be removed.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   430
    TInt iLength; // Length of queue, ie number of elements within
089413cdde3c 201028_02
hgs
parents:
diff changeset
   431
    TInt iSize;   // size of array, ie, max # of requests at a time.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   432
    TUsbcScStatusElement* iElements;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   433
089413cdde3c 201028_02
hgs
parents:
diff changeset
   434
};
089413cdde3c 201028_02
hgs
parents:
diff changeset
   435
089413cdde3c 201028_02
hgs
parents:
diff changeset
   436
089413cdde3c 201028_02
hgs
parents:
diff changeset
   437
089413cdde3c 201028_02
hgs
parents:
diff changeset
   438
/**
089413cdde3c 201028_02
hgs
parents:
diff changeset
   439
This class holds the kernel's copy of all the details related to a shared endpoint buffer,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   440
and provides methods for the LDD to manipulate it.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   441
*/
089413cdde3c 201028_02
hgs
parents:
diff changeset
   442
class TUsbcScBuffer
089413cdde3c 201028_02
hgs
parents:
diff changeset
   443
{
089413cdde3c 201028_02
hgs
parents:
diff changeset
   444
public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   445
    static const TInt8 KNoEpAssigned=0;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   446
    static const TInt8 KEpIsEnding=1;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   447
    static const TInt8 KEpIsStarting=2;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   448
089413cdde3c 201028_02
hgs
parents:
diff changeset
   449
public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   450
    TInt Construct(TInt aDirection, DLddUsbcScChannel* aLdd, TInt aBufferOffset, TInt aBufferEndOffset, TInt aMinReadSize, TInt aMaxPacketSize, TInt aMaxReadSize);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   451
    void CreateChunkBufferHeader();
089413cdde3c 201028_02
hgs
parents:
diff changeset
   452
    void StartEndpoint(TUsbcRequestCallback* iRequestInfo, TUint iFlags);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   453
089413cdde3c 201028_02
hgs
parents:
diff changeset
   454
    void Destroy();
089413cdde3c 201028_02
hgs
parents:
diff changeset
   455
089413cdde3c 201028_02
hgs
parents:
diff changeset
   456
    TInt StartDataRead();
089413cdde3c 201028_02
hgs
parents:
diff changeset
   457
    void CompleteRead(TBool aStartNextRead=ETrue);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   458
    void PopStall();
089413cdde3c 201028_02
hgs
parents:
diff changeset
   459
    void StartDataWrite();
089413cdde3c 201028_02
hgs
parents:
diff changeset
   460
    void CompleteWrite();
089413cdde3c 201028_02
hgs
parents:
diff changeset
   461
    void Cancel(TInt aErrorCode);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   462
089413cdde3c 201028_02
hgs
parents:
diff changeset
   463
    void UpdateBufferList(TInt aByteCount,TUint aFlags, TBool aStartNextRead=ETrue);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   464
    void Ep0CancelLddRead();
089413cdde3c 201028_02
hgs
parents:
diff changeset
   465
    void SendEp0StatusPacket(TInt aState);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   466
089413cdde3c 201028_02
hgs
parents:
diff changeset
   467
public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   468
    
089413cdde3c 201028_02
hgs
parents:
diff changeset
   469
    TInt8 iDirection;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   470
    TInt8 iMode;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   471
    TInt8 iNeedsPacket;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   472
    TInt8 iReserved;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   473
    DLddUsbcScChannel* iLdd;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   474
    TLinAddr iChunkAddr;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   475
    SUsbcScBufferHeader* iBufferStart;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   476
    TUint iBufferEnd; // One word on from the last word in the buffer.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   477
    TUint iAlignMask;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   478
    TUsbcScStatusList iStatusList;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   479
    TUsbcRequestCallback* iCallback;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   480
    union 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   481
    {
089413cdde3c 201028_02
hgs
parents:
diff changeset
   482
        TInt iHead; // Out endpoints only;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   483
        TUint iSent; // In endpoints only
089413cdde3c 201028_02
hgs
parents:
diff changeset
   484
    };
089413cdde3c 201028_02
hgs
parents:
diff changeset
   485
    TUsbcScChunkInfo* iChunkInfo;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   486
    TInt iMinReadSize;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   487
    TInt iMaxReadSize;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   488
    TInt iMaxPacketSize;  // 0 indicates unconfiured.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   489
    TInt iFirstPacket;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   490
    TInt iStalled;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   491
089413cdde3c 201028_02
hgs
parents:
diff changeset
   492
    // needed for backwards compatibility
089413cdde3c 201028_02
hgs
parents:
diff changeset
   493
    TUsbcPacketArray iIndexArray[KUsbcDmaBufNumMax]; // Has 2 elements
089413cdde3c 201028_02
hgs
parents:
diff changeset
   494
    TUsbcPacketArray iSizeArray[KUsbcDmaBufNumMax];  // Has 2 elements
089413cdde3c 201028_02
hgs
parents:
diff changeset
   495
#ifdef _DEBUG
089413cdde3c 201028_02
hgs
parents:
diff changeset
   496
    TUint iSequence;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   497
#endif
089413cdde3c 201028_02
hgs
parents:
diff changeset
   498
089413cdde3c 201028_02
hgs
parents:
diff changeset
   499
};
089413cdde3c 201028_02
hgs
parents:
diff changeset
   500
089413cdde3c 201028_02
hgs
parents:
diff changeset
   501
089413cdde3c 201028_02
hgs
parents:
diff changeset
   502
089413cdde3c 201028_02
hgs
parents:
diff changeset
   503
#include <usb/usbcsc.inl>
089413cdde3c 201028_02
hgs
parents:
diff changeset
   504
089413cdde3c 201028_02
hgs
parents:
diff changeset
   505
#endif    // __USBCSC_H__