userlibandfileserver/fileserver/smassstorage/cbulkonlytransportusbcldd.cpp
author hgs
Mon, 11 Oct 2010 17:54:41 +0100
changeset 286 48e57fb1237e
parent 271 dc268b18d709
permissions -rw-r--r--
201039_11
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
     1
/*
269
d57b86b1867a 201035_03
hgs
parents: 39
diff changeset
     2
* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
     3
* All rights reserved.
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
     4
* This component and the accompanying materials are made available
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
     5
* under the terms of the License "Eclipse Public License v1.0"
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
     6
* which accompanies this distribution, and is available
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
     8
*
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
     9
* Initial Contributors:
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    11
*
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    12
* Contributors:
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    13
*
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    14
* Description:
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    15
*
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    16
*/
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    17
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    18
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    19
/**
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    20
 @file
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    21
 @internalTechnology
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    22
*/
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    23
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
    24
#include <e32std.h>
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
    25
#include "mtransport.h"
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
    26
#include "mprotocol.h"
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
    27
#include "mldddevicestatenotification.h"
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
    28
#include "tbulkmm.h"
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
    29
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
    30
#include "drivemanager.h"
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
    31
#include "cusbmassstoragecontroller.h"
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
    32
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    33
#include "cbulkonlytransport.h"
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    34
#include "cbulkonlytransportusbcldd.h"
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
    35
#include "smassstorage.h"
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
    36
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
    37
#include "OstTraceDefinitions.h"
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
    38
#ifdef OST_TRACE_COMPILER_IN_USE
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
    39
#include "cbulkonlytransportusbclddTraces.h"
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
    40
#endif
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
    41
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
    42
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    43
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    44
#define InEndpoint EEndpoint1
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    45
#define OutEndpoint EEndpoint2
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    46
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    47
//This value defined in USB Mass Storage Bulk Only Transrt spec and not supposed to be changed
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
    48
static const TInt KRequiredNumberOfEndpoints = 2; // in addition to endpoint 0.
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    49
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
    50
static const TInt KUsbNumInterfacesOffset = 4;
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    51
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    52
////////////////////////////////////
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    53
/**
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    54
Called by CBulkOnlyTransportUsbcLdd to create an instance of CControlInterfaceUsbcLdd
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    55
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    56
@param aParent reference to the CBulkOnlyTransportUsbcLdd
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    57
*/
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    58
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    59
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    60
CControlInterfaceUsbcLdd* CControlInterfaceUsbcLdd::NewL(CBulkOnlyTransportUsbcLdd& aParent)
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
    61
    {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
    62
    CControlInterfaceUsbcLdd* self = new(ELeave) CControlInterfaceUsbcLdd(aParent);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
    63
    CleanupStack::PushL(self);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
    64
    self->ConstructL();
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
    65
    CActiveScheduler::Add(self);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
    66
    CleanupStack::Pop();
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
    67
    return self;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
    68
    }
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    69
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    70
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    71
void CControlInterfaceUsbcLdd::ConstructL()
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
    72
    {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
    73
    }
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    74
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    75
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    76
/**
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    77
c'tor
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    78
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    79
@param aParent reference to the CBulkOnlyTransportUsbcLdd
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    80
*/
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    81
CControlInterfaceUsbcLdd::CControlInterfaceUsbcLdd(CBulkOnlyTransportUsbcLdd& aParent)
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
    82
    :CActive(EPriorityStandard),
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
    83
     iParent(aParent),
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
    84
     iCurrentState(ENone)
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
    85
    {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
    86
    }
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    87
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    88
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    89
/**
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    90
d'tor
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    91
*/
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    92
CControlInterfaceUsbcLdd::~CControlInterfaceUsbcLdd()
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
    93
    {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
    94
    Cancel();
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
    95
    }
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    96
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    97
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    98
/**
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    99
Called by CBulkOnlyTransport HwStart to start control interface
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   100
*/
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   101
TInt CControlInterfaceUsbcLdd::Start()
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   102
    {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   103
    TInt res = ReadEp0Data();
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   104
    return (res);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   105
    }
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   106
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   107
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   108
/**
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   109
Called by desctructor of CBulkOnlyTransportUsbcLdd to stop control interface
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   110
*/
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   111
void CControlInterfaceUsbcLdd::Stop()
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   112
    {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   113
    if (!IsActive())
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   114
        {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   115
        return;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   116
        }
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   117
    iCurrentState = ENone;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   118
    Cancel();
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   119
    }
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   120
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   121
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   122
/**
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   123
Cancel outstanding request (if any)
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   124
*/
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   125
void CControlInterfaceUsbcLdd::DoCancel()
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   126
    {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   127
    switch(iCurrentState)
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   128
        {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   129
        case EReadEp0Data:
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   130
            iParent.Ldd().ReadCancel(EEndpoint0);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   131
            break;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   132
        case ESendMaxLun:
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   133
            iParent.Ldd().WriteCancel(EEndpoint0);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   134
            break;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   135
        default:
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   136
            __ASSERT_DEBUG(EFalse, User::Panic(KUsbMsSvrPncCat, EMsControlInterfaceBadState));
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   137
            break;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   138
        }
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   139
    }
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   140
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   141
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   142
/**
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   143
Implement CControlInterfaceUsbcLdd state machine
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   144
*/
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   145
void CControlInterfaceUsbcLdd::RunL()
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   146
    {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   147
    if (iStatus != KErrNone)
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   148
        {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   149
        OstTrace1(TRACE_SMASSSTORAGE_BOT, CCONTROLINTERFACEUSBCLDD,
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   150
                  "ERROR %d in RunL", iStatus.Int());
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   151
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   152
        //read EP0  again
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   153
        ReadEp0Data();
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   154
        return;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   155
        }
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   156
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   157
    switch (iCurrentState)
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   158
        {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   159
        case ESendMaxLun:
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   160
            ReadEp0Data();
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   161
            break;
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   162
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   163
        case EReadEp0Data:
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   164
            DecodeEp0Data();
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   165
            break;
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   166
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   167
        default:
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   168
            __ASSERT_DEBUG(EFalse, User::Panic(KUsbMsSvrPncCat, EMsControlInterfaceBadState));
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   169
            break;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   170
        }
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   171
    return;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   172
    }
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   173
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   174
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   175
/**
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   176
Post a read request to EEndpoint0 to read request header
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   177
*/
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   178
TInt CControlInterfaceUsbcLdd::ReadEp0Data()
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   179
    {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   180
    if (IsActive())
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   181
        {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   182
        OstTrace0(TRACE_SMASSSTORAGE_BOT, READEP0DATA, "Still active");
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   183
        return KErrServerBusy;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   184
        }
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   185
    iParent.Ldd().Read(iStatus, EEndpoint0, iData, KRequestHdrSize);
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   186
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   187
    iCurrentState = EReadEp0Data;
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   188
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   189
    SetActive();
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   190
    return KErrNone;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   191
    }
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   192
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   193
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   194
/**
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   195
Decode request header and do appropriate action - get max LUN info or post a reset request
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   196
*/
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   197
void CControlInterfaceUsbcLdd::DecodeEp0Data()
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   198
    {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   199
    if (IsActive())
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   200
        {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   201
        __ASSERT_DEBUG(EFalse, User::Panic(KUsbMsSvrPncCat, EMsControlInterfaceStillActive));
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   202
        return;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   203
        }
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   204
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   205
    TInt err = iRequestHeader.Decode(iData);
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   206
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   207
    if(err != KErrNone)
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   208
        return;
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   209
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   210
    switch(iRequestHeader.iRequest)
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   211
        {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   212
        //
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   213
        // GET MAX LUN (0xFE)
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   214
        //
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   215
        case TUsbRequestHdr::EReqGetMaxLun:
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   216
            {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   217
            OstTrace1(TRACE_SMASSSTORAGE_BOT, DECODEEP0DATA, ">>> EP0 GetMaxLun = %d", iParent.MaxLun());
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   218
            if (   iRequestHeader.iRequestType != 0xA1 //value from USB MS BOT spec
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   219
                || iRequestHeader.iIndex > 15
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   220
                || iRequestHeader.iValue != 0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   221
                || iRequestHeader.iLength != 1)
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   222
                {
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   223
                OstTrace0(TRACE_SMASSSTORAGE_BOT, DECODEEP0DATA1, "ERROR: GetMaxLun command packet check error");
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   224
                iParent.Ldd().EndpointZeroRequestError();
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   225
                break;
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   226
                }
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   227
            iData.FillZ(1);  //Return only 1 byte to host
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   228
            iData[0] = static_cast<TUint8>(iParent.MaxLun());   // Supported Units
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   229
            iParent.Ldd().Write(iStatus, EEndpoint0, iData, 1);
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   230
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   231
            iCurrentState = ESendMaxLun;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   232
            SetActive();
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   233
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   234
            return;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   235
            }
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   236
        //
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   237
        // RESET (0xFF)
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   238
        //
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   239
        case TUsbRequestHdr::EReqReset:
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   240
            {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   241
            OstTrace0(TRACE_SMASSSTORAGE_BOT, DECODEEP0DATA2, ">>> EP0 BulkOnlyMassStorageReset");
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   242
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   243
            if (   iRequestHeader.iRequestType != 0x21 //value from USB MS BOT spec
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   244
                || iRequestHeader.iIndex > 15
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   245
                || iRequestHeader.iValue != 0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   246
                || iRequestHeader.iLength != 0)
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   247
                {
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   248
                OstTrace0(TRACE_SMASSSTORAGE_BOT, DECODEEP0DATA3, "BulkOnlyMassStorageReset command packet check error");
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   249
                iParent.Ldd().EndpointZeroRequestError();
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   250
                break;
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   251
                }
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   252
            iParent.HwStop();
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   253
            iParent.Controller().Reset();
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   254
            iParent.HwStart(ETrue);
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   255
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   256
            err = iParent.Ldd().SendEp0StatusPacket();
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   257
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   258
            return;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   259
            }
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   260
        //
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   261
        // Unknown?
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   262
        //
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   263
        default:
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   264
            {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   265
            OstTrace0(TRACE_SMASSSTORAGE_BOT, DECODEEP0DATA4, ">>> EP0 DecodeEp0Data : Unknown Request");
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   266
            }
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   267
        }
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   268
        ReadEp0Data();  //try to get another request
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   269
    }
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   270
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   271
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   272
//
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   273
// --- class CBulkOnlyTransportUsbcLdd ---------------------------------------------------------
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   274
//
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   275
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   276
CBulkOnlyTransportUsbcLdd::CBulkOnlyTransportUsbcLdd(TInt aNumDrives,CUsbMassStorageController& aController)
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   277
    :CBulkOnlyTransport(aNumDrives, aController)
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   278
    {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   279
    }
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   280
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   281
/**
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   282
Constructs the CBulkOnlyTransportUsbcLdd object
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   283
*/
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   284
void CBulkOnlyTransportUsbcLdd::ConstructL()
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   285
    {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   286
    iControlInterface = CControlInterfaceUsbcLdd::NewL(*this);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   287
    iDeviceStateNotifier = CActiveDeviceStateNotifierBase::NewL(*this, *this);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   288
    CActiveScheduler::Add(this);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   289
    }
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   290
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   291
CBulkOnlyTransportUsbcLdd::~CBulkOnlyTransportUsbcLdd()
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   292
    {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   293
    if (iInterfaceConfigured)
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   294
        {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   295
        Stop();
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   296
        delete iControlInterface ;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   297
        delete iDeviceStateNotifier;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   298
        }
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   299
    }
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   300
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   301
RDevUsbcClient& CBulkOnlyTransportUsbcLdd::Ldd()
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   302
    {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   303
    return iLdd;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   304
    }
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   305
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   306
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   307
/**
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   308
Set or unset configuration descriptor for USB MassStorage Bulk Only transport
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   309
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   310
@param aUnset indicate whether set or unset descriptor
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   311
@return KErrNone if operation was completed successfully, errorcode otherwise
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   312
*/
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   313
TInt CBulkOnlyTransportUsbcLdd::SetupConfigurationDescriptor(TBool aUnset)
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   314
    {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   315
    TInt ret(KErrNone);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   316
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   317
        if ((ret = iLdd.Open(0)) != KErrNone)
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   318
            return ret;
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   319
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   320
    TInt configDescriptorSize(0);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   321
    iLdd.GetConfigurationDescriptorSize(configDescriptorSize);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   322
    if (static_cast<TUint>(configDescriptorSize) != KUsbDescSize_Config)
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   323
        {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   324
        return KErrCorrupt;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   325
        }
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   326
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   327
    TBuf8<KUsbDescSize_Config> configDescriptor;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   328
    ret = iLdd.GetConfigurationDescriptor(configDescriptor);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   329
    if (ret != KErrNone)
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   330
        {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   331
        return ret;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   332
        }
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   333
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   334
    // I beleive that other fields setted up during LDD initialisation
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   335
    if (aUnset)
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   336
        {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   337
        --configDescriptor[KUsbNumInterfacesOffset];
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   338
        }
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   339
    else
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   340
        {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   341
        ++configDescriptor[KUsbNumInterfacesOffset];
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   342
        }
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   343
    ret = iLdd.SetConfigurationDescriptor(configDescriptor);
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   344
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   345
    if (aUnset)
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   346
        {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   347
        iLdd.Close();
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   348
        }
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   349
    return ret;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   350
    }
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   351
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   352
/**
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   353
Set up interface descriptor
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   354
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   355
@return KErrNone if operation was completed successfully, errorcode otherwise
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   356
*/
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   357
TInt CBulkOnlyTransportUsbcLdd::SetupInterfaceDescriptors()
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   358
    {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   359
    // Device caps
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   360
    TUsbDeviceCaps d_caps;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   361
    TInt ret = iLdd.DeviceCaps(d_caps);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   362
    if (ret != KErrNone)
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   363
        {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   364
        return ret;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   365
        }
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   366
    TInt totalEndpoints = d_caps().iTotalEndpoints;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   367
    if (totalEndpoints  < KRequiredNumberOfEndpoints)
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   368
        {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   369
        return KErrHardwareNotAvailable;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   370
        }
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   371
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   372
    // Endpoint caps
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   373
    TUsbcEndpointData data[KUsbcMaxEndpoints];
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   374
    TPtr8 dataptr(reinterpret_cast<TUint8*>(data), sizeof(data), sizeof(data));
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   375
    ret = iLdd.EndpointCaps(dataptr);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   376
    if (ret != KErrNone)
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   377
        {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   378
        return ret;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   379
        }
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   380
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   381
    // Set the active interface
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   382
    TUsbcInterfaceInfoBuf ifc;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   383
    TInt ep_found = 0;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   384
    TBool foundBulkIN = EFalse;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   385
    TBool foundBulkOUT = EFalse;
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   386
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   387
    for (TInt i = 0; i < totalEndpoints ; i++)
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   388
        {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   389
        const TUsbcEndpointCaps* caps = &data[i].iCaps;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   390
        const TInt maxPacketSize = caps->MaxPacketSize();
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   391
        if (!foundBulkIN &&
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   392
            (caps->iTypesAndDir & (KUsbEpTypeBulk | KUsbEpDirIn)) == (KUsbEpTypeBulk | KUsbEpDirIn))
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   393
            {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   394
            // InEndpoint is going to be our TX (IN, write) endpoint
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   395
            ifc().iEndpointData[0].iType = KUsbEpTypeBulk;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   396
            if((d_caps().iFeatureWord1 & KUsbDevCapsFeatureWord1_EndpointResourceAllocV2) == KUsbDevCapsFeatureWord1_EndpointResourceAllocV2)
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   397
                ifc().iEndpointData[0].iFeatureWord1  = KUsbcEndpointInfoFeatureWord1_DMA|KUsbcEndpointInfoFeatureWord1_DoubleBuffering;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   398
            ifc().iEndpointData[0].iDir  = KUsbEpDirIn;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   399
            ifc().iEndpointData[0].iSize = maxPacketSize;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   400
            ifc().iEndpointData[0].iInterval_Hs = 0;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   401
            foundBulkIN = ETrue;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   402
            if (++ep_found == KRequiredNumberOfEndpoints)
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   403
                {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   404
                break;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   405
                }
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   406
            continue;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   407
            }
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   408
        if (!foundBulkOUT &&
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   409
            (caps->iTypesAndDir & (KUsbEpTypeBulk | KUsbEpDirOut)) == (KUsbEpTypeBulk | KUsbEpDirOut))
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   410
            {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   411
            // OutEndpoint is going to be our RX (OUT, read) endpoint
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   412
            ifc().iEndpointData[1].iType = KUsbEpTypeBulk;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   413
            if((d_caps().iFeatureWord1 & KUsbDevCapsFeatureWord1_EndpointResourceAllocV2) == KUsbDevCapsFeatureWord1_EndpointResourceAllocV2)
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   414
                ifc().iEndpointData[1].iFeatureWord1  = KUsbcEndpointInfoFeatureWord1_DMA|KUsbcEndpointInfoFeatureWord1_DoubleBuffering;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   415
            ifc().iEndpointData[1].iDir  = KUsbEpDirOut;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   416
            ifc().iEndpointData[1].iSize = maxPacketSize;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   417
            ifc().iEndpointData[1].iInterval_Hs = 0;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   418
            foundBulkOUT = ETrue;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   419
            if (++ep_found == KRequiredNumberOfEndpoints)
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   420
                {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   421
                break;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   422
                }
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   423
            continue;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   424
            }
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   425
        }
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   426
    if (ep_found != KRequiredNumberOfEndpoints)
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   427
        {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   428
        return KErrHardwareNotAvailable;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   429
        }
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   430
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   431
    _LIT16(string, "USB Mass Storage Interface");
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   432
    ifc().iString = const_cast<TDesC16*>(&string);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   433
    ifc().iTotalEndpointsUsed = KRequiredNumberOfEndpoints;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   434
    ifc().iClass.iClassNum    = 0x08;   // Mass Storage
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   435
    ifc().iClass.iSubClassNum = 0x06;   // SCSI Transparent Command Set
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   436
    ifc().iClass.iProtocolNum = 0x50;   // Bulk Only Transport
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   437
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   438
    TUint bandwidth_priority = (EUsbcBandwidthOUTDefault | EUsbcBandwidthINDefault);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   439
    if (d_caps().iHighSpeed)
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   440
        {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   441
        // If this device supports USB High-speed, then we request 64KB buffers
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   442
        // (otherwise the default 4KB ones will do).
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   443
        bandwidth_priority = (EUsbcBandwidthOUTPlus2 | EUsbcBandwidthINPlus2);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   444
        // Also, tell the Protocol about it, because it might want to do some
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   445
        // optimizing too.
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   446
        iProtocol->ReportHighSpeedDevice();
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   447
        }
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   448
    ret = iLdd.SetInterface(0, ifc, bandwidth_priority);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   449
    return ret;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   450
    }
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   451
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   452
void CBulkOnlyTransportUsbcLdd::ReleaseInterface()
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   453
    {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   454
    iLdd.ReleaseInterface(0);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   455
    }
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   456
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   457
TInt CBulkOnlyTransportUsbcLdd::StartControlInterface()
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   458
    {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   459
    return iControlInterface->Start();
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   460
    }
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   461
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   462
void CBulkOnlyTransportUsbcLdd::CancelControlInterface()
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   463
    {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   464
    iControlInterface->Cancel();
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   465
    }
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   466
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   467
void CBulkOnlyTransportUsbcLdd::ActivateDeviceStateNotifier()
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   468
    {
271
dc268b18d709 201037_07
hgs
parents: 269
diff changeset
   469
    __ASSERT_DEBUG(iDeviceStateNotifier, User::Panic(KUsbMsSvrPncCat, EMsCDeviceStateNotifierNull));
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   470
    iDeviceStateNotifier->Activate();
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   471
    }
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   472
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   473
void CBulkOnlyTransportUsbcLdd::CancelDeviceStateNotifier()
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   474
    {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   475
    iDeviceStateNotifier->Cancel();
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   476
    }
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   477
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   478
void CBulkOnlyTransportUsbcLdd::CancelReadWriteRequests()
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   479
    {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   480
    iLdd.WriteCancel(InEndpoint);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   481
    iLdd.ReadCancel(OutEndpoint);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   482
    }
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   483
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   484
void CBulkOnlyTransportUsbcLdd::AllocateEndpointResources()
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   485
    {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   486
    TUsbDeviceCaps d_caps;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   487
    TInt ret = iLdd.DeviceCaps(d_caps);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   488
    if (ret == KErrNone)
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   489
        {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   490
        if((d_caps().iFeatureWord1 & KUsbDevCapsFeatureWord1_EndpointResourceAllocV2) != KUsbDevCapsFeatureWord1_EndpointResourceAllocV2)
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   491
            {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   492
            // Set up DMA if possible (errors are non-critical)
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   493
            TInt err = iLdd.AllocateEndpointResource(OutEndpoint, EUsbcEndpointResourceDMA);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   494
            if (err != KErrNone)
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   495
                {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   496
                OstTrace1(TRACE_SMASSSTORAGE_BOT, A1, "Set DMA on OUT endpoint failed with error code: %d", err);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   497
                }
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   498
            err = iLdd.AllocateEndpointResource(InEndpoint, EUsbcEndpointResourceDMA);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   499
            if (err != KErrNone)
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   500
                {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   501
                OstTrace1(TRACE_SMASSSTORAGE_BOT, A2, "Set DMA on IN endpoint failed with error code: %d", err);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   502
                }
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   503
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   504
                // Set up Double Buffering if possible (errors are non-critical)
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   505
            err = iLdd.AllocateEndpointResource(OutEndpoint, EUsbcEndpointResourceDoubleBuffering);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   506
            if (err != KErrNone)
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   507
                {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   508
                OstTrace1(TRACE_SMASSSTORAGE_BOT, A3, "Set Double Buffering on OUT endpoint failed with error code: %d", err);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   509
                }
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   510
            err = iLdd.AllocateEndpointResource(InEndpoint, EUsbcEndpointResourceDoubleBuffering);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   511
            if (err != KErrNone)
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   512
                {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   513
                OstTrace1(TRACE_SMASSSTORAGE_BOT, A4, "Set Double Buffering on IN endpoint failed with error code: %d", err);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   514
                }
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   515
            }
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   516
        }
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   517
    }
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   518
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   519
TInt CBulkOnlyTransportUsbcLdd::GetDeviceStatus(TUsbcDeviceState& deviceStatus)
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   520
    {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   521
    return iLdd.DeviceStatus(deviceStatus);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   522
    }
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   523
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   524
void CBulkOnlyTransportUsbcLdd::FlushData()
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   525
    {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   526
    TInt bytes;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   527
    const TInt err = iLdd.QueryReceiveBuffer(OutEndpoint, bytes);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   528
    if (err != KErrNone || bytes <= 0)
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   529
        {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   530
        OstTraceExt2(TRACE_SMASSSTORAGE_BOT, B1, "ERROR: err=%d bytes=0x%x", err, bytes);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   531
        }
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   532
    else
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   533
        {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   534
        OstTrace1(TRACE_SMASSSTORAGE_BOT1, B2, "RxBuffer has %d bytes", bytes);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   535
        ReadAndDiscardData(bytes);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   536
        }
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   537
    }
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   538
/**
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   539
 * Read out rest data from OutEndpoint and discard them
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   540
 */
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   541
void CBulkOnlyTransportUsbcLdd::ReadAndDiscardData(TInt aBytes)
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   542
    {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   543
    iDiscardBuf.SetMax();
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   544
    const TUint bufsize = static_cast<TUint>(iDiscardBuf.Length());
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   545
    TRequestStatus status;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   546
    while (aBytes > 0)
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   547
        {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   548
        OstTrace1(TRACE_SMASSSTORAGE_BOT1, C1, "Bytes still to be read: 0x%x", aBytes);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   549
        iLdd.ReadOneOrMore(status, OutEndpoint, iDiscardBuf, bufsize);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   550
        User::WaitForRequest(status);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   551
        TInt err = status.Int();
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   552
        if (err != KErrNone)
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   553
            {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   554
            // Bad.
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   555
            break;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   556
            }
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   557
        aBytes -= iDiscardBuf.Length();
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   558
        }
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   559
    }
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   560
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   561
/**
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   562
Called by the protocol to determine how many bytes of data are available in the read buffer.
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   563
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   564
@return The number of bytes available in the read buffer
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   565
*/
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   566
TInt CBulkOnlyTransportUsbcLdd::BytesAvailable()
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   567
    {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   568
    TInt bytes = 0;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   569
    TInt err = iLdd.QueryReceiveBuffer(OutEndpoint, bytes);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   570
    if (err != KErrNone)
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   571
        bytes = 0;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   572
    return bytes;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   573
    }
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   574
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   575
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   576
void CBulkOnlyTransportUsbcLdd::StallEndpointAndWaitForClear()
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   577
    {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   578
    // Now stall this endpoint
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   579
    OstTrace1(TRACE_SMASSSTORAGE_BOT, D1, "Stalling endpoint %d", InEndpoint);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   580
    TInt r = iLdd.HaltEndpoint(InEndpoint);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   581
    if (r != KErrNone)
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   582
        {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   583
        OstTraceExt2(TRACE_SMASSSTORAGE_BOT, D2, "Error: stalling ep %d failed: %d", InEndpoint, r);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   584
        }
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   585
    TEndpointState ep_state;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   586
    TInt i = 0;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   587
    do
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   588
        {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   589
        // Wait for 10ms before checking the ep status
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   590
        User::After(10000);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   591
        iLdd.EndpointStatus(InEndpoint, ep_state);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   592
        if (++i >= 550)
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   593
            {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   594
            // 5.5 secs should be enough (see 9.2.6.1 Request Processing Timing)
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   595
            OstTrace1(TRACE_SMASSSTORAGE_BOT, D3, "Error: Checked for ep %d de-stall for 5.5s - giving up now", InEndpoint);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   596
            // We can now only hope for a Reset Recovery
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   597
            return;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   598
            }
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   599
        } while ((ep_state == EEndpointStateStalled) && iStarted);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   600
    OstTraceExt2(TRACE_SMASSSTORAGE_BOT, D4, "Checked for ep %d de-stall: %d time(s)", InEndpoint, i);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   601
    }
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   602
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   603
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   604
/**
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   605
Read CBW data (KCbwLength) from the host into the read buffer.
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   606
*/
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   607
void CBulkOnlyTransportUsbcLdd::ReadCBW()
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   608
    {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   609
    if (IsActive())
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   610
        {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   611
        __ASSERT_DEBUG(EFalse, User::Panic(KUsbMsSvrPncCat, EMsBulkOnlyStillActive));
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   612
        return;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   613
        }
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   614
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   615
    iCbwBuf.SetMax();
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   616
    iLdd.ReadUntilShort(iStatus, OutEndpoint, iCbwBuf, KCbwLength);
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   617
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   618
    iCurrentState = EWaitForCBW;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   619
    SetActive();
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   620
    }
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   621
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   622
void CBulkOnlyTransportUsbcLdd::ExpireData(TAny* /*aAddress*/)
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   623
    {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   624
    // Intentionally left blank
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   625
    }
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   626
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   627
void CBulkOnlyTransportUsbcLdd::ProcessCbwEvent()
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   628
    {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   629
    DecodeCBW();
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   630
    }
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   631
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   632
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   633
/**
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   634
Request data form the host for the protocol
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   635
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   636
@param aLength amount of data (in bytes) to be received from the host
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   637
*/
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   638
void CBulkOnlyTransportUsbcLdd::ReadData(TUint aLength)
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   639
    {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   640
    if (IsActive())
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   641
        {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   642
        __ASSERT_DEBUG(EFalse, User::Panic(KUsbMsSvrPncCat, EMsBulkOnlyStillActive));
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   643
        return;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   644
        }
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   645
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   646
    SetReadDataBufPtr(aLength);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   647
    iLdd.Read(iStatus, OutEndpoint, iReadBufPtr, aLength);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   648
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   649
    iCurrentState = EReadingData;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   650
    SetActive();
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   651
    }
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   652
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   653
void CBulkOnlyTransportUsbcLdd::WriteUsb(TRequestStatus& aStatus, TPtrC8& aDes, TUint aLength, TBool aZlpRequired)
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   654
    {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   655
    iLdd.Write(aStatus, InEndpoint, aDes, aLength, aZlpRequired);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   656
    }
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   657
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   658
void CBulkOnlyTransportUsbcLdd::SetCbwPtr()
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   659
    {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   660
    iCbwBufPtr.Set(iCbwBuf.Ptr(), iCbwBuf.Length());
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   661
    }
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   662
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   663
TPtr8& CBulkOnlyTransportUsbcLdd::SetCommandBufPtr(TUint aLength)
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   664
    {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   665
    iCommandBufPtr.Set((TUint8*) iCommandBuf.Ptr(), aLength, aLength );
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   666
    return iCommandBufPtr;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   667
    }
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   668
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   669
void CBulkOnlyTransportUsbcLdd::SetReadDataBufPtr(TUint aLength) //Write10(Host->Device
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   670
    {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   671
    iBulkMm.GetNextTransferBuffer(aLength, iReadBufPtr);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   672
        }
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   673
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   674
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   675
TPtr8& CBulkOnlyTransportUsbcLdd::SetDataBufPtr() //Read10(Device->Host)
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   676
    {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   677
    iBulkMm.GetNextTransferBuffer(iDataBufPtr);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   678
    return iDataBufPtr;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   679
    }
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   680
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   681
void CBulkOnlyTransportUsbcLdd::SetPaddingBufPtr(TUint aLength)
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   682
    {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   683
    iPaddingBufPtr.Set((TUint8*) iBuf.Ptr(), aLength, aLength );
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   684
    }
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   685
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   686
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   687
void CBulkOnlyTransportUsbcLdd::SetCswBufPtr(TUint aLength)
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   688
    {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   689
    iCswBufPtr.Set((TUint8*) iCswBuf.Ptr(), aLength, aLength );
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   690
    }
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   691
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   692
void CBulkOnlyTransportUsbcLdd::ProcessReadingDataEvent()
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   693
    {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   694
    TInt ret = KErrNone;
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   695
    FOREVER
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   696
        {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   697
        if (iReadSetUp)
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   698
            {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   699
            ret = iProtocol->ReadComplete(KErrNone);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   700
            }
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   701
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   702
        TUint deviceDataLength = iBufSize; // This is the amount (maximum in case of SC Ldd) to be read next.
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   703
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   704
        if(ret == KErrCompletion)
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   705
            {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   706
            // The protocol has indicated with KErrCompletion that sufficient
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   707
            // data is available in the buffer to process the transfer immediately.
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   708
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   709
            iDataResidue -= iReadBufPtr.Length();
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   710
            SetReadDataBufPtr(deviceDataLength);
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   711
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   712
            iLdd.Read(iStatus, OutEndpoint, iReadBufPtr, deviceDataLength);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   713
            User::WaitForRequest(iStatus);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   714
            if (iStatus != KErrNone)
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   715
                {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   716
                // An error occurred - halt endpoints for reset recovery
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   717
                OstTrace1(TRACE_SMASSSTORAGE_BOT, E1, "Error %d in EReadingData, halt endpoints", iStatus.Int());
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   718
                SetPermError();
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   719
                return;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   720
                }
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   721
            }
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   722
        else if(ret == KErrNotReady)
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   723
            {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   724
            // The protocol has indicated with KErrNotReady that insufficient
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   725
            // data is available in the buffer, so should wait for it to arrive
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   726
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   727
            iDataResidue -= iReadBufPtr.Length();
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   728
            ReadData(deviceDataLength);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   729
            break;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   730
            }
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   731
        else
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   732
            {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   733
            // The protocol has indicated that transfer is
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   734
            // complete, so send the CSW response to the host.
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   735
            iDataResidue -= iReadBufPtr.Length();
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   736
            iReadSetUp = EFalse;
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   737
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   738
            if (ret != KErrNone)
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   739
                {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   740
                iCmdStatus = ECommandFailed;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   741
                }
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   742
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   743
            if (iDataResidue)
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   744
                {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   745
                OstTrace0(TRACE_SMASSSTORAGE_BOT, E2, "Discarding residue");
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   746
                // we have to read as much data as available that host PC sends;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   747
                // otherwise, bulk-out endpoint will need to keep sending NAK back.
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   748
                ReadAndDiscardData(iDataResidue);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   749
                }
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   750
            SendCSW(iCbwTag, iDataResidue, iCmdStatus);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   751
            break;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   752
            }
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   753
        }
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   754
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   755
    }
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   756
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   757
void CBulkOnlyTransportUsbcLdd::DiscardData(TUint aLength)
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   758
    {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   759
    iBuf.SetLength(KBOTMaxBufSize);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   760
    TUint c = 0;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   761
    TRequestStatus status;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   762
    while (c < aLength)
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   763
        {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   764
        TInt len;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   765
        if (aLength - c >  KBOTMaxBufSize)
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   766
            {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   767
            len = KBOTMaxBufSize;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   768
            }
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   769
        else
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   770
            {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   771
            len = aLength - c;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   772
            }
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   773
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   774
        iLdd.Read(status, OutEndpoint, iBuf, len);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   775
        User::WaitForRequest(status);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   776
        c +=  KBOTMaxBufSize;
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   777
        }
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   778
    }
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   779
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   780
void CBulkOnlyTransportUsbcLdd::WriteToClient(TUint aLength)
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   781
    {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   782
    SetDataBufPtr();
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   783
    iLdd.Read(iStatus, OutEndpoint, iDataBufPtr, aLength);
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   784
    User::WaitForRequest(iStatus);
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   785
    iProtocol->ReadComplete(KErrGeneral);
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   786
    }
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   787
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   788
#ifdef MSDC_MULTITHREADED
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   789
void CBulkOnlyTransportUsbcLdd::GetBufferPointers(TPtr8& aDes1, TPtr8& aDes2)
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   790
    {
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   791
    aDes1.Set(iBulkMm.Buf1(), KMaxBufSize, KMaxBufSize);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   792
    aDes2.Set(iBulkMm.Buf2(), KMaxBufSize, KMaxBufSize);
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   793
    }
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   794
#endif
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   795
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   796
void CBulkOnlyTransportUsbcLdd::Activate(TRequestStatus& aStatus, TUint& aDeviceState)
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   797
    {
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   798
    iLdd.AlternateDeviceStatusNotify(aStatus, aDeviceState);
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   799
    }
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   800
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   801
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   802
void CBulkOnlyTransportUsbcLdd::Cancel()
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   803
    {
286
48e57fb1237e 201039_11
hgs
parents: 271
diff changeset
   804
    iLdd.AlternateDeviceStatusNotifyCancel();
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   805
    }
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   806
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   807
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   808
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   809