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