usb_plat/usb_shai_api/inc/usb_peripheral_shai.h
author hgs
Wed, 20 Oct 2010 12:04:53 +0800
changeset 59 bbdce6bffaad
parent 48 21625e5de155
permissions -rw-r--r--
201041_02
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
33
089413cdde3c 201028_02
hgs
parents:
diff changeset
     1
/*
089413cdde3c 201028_02
hgs
parents:
diff changeset
     2
* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
089413cdde3c 201028_02
hgs
parents:
diff changeset
     3
* All rights reserved.
089413cdde3c 201028_02
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
089413cdde3c 201028_02
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
089413cdde3c 201028_02
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
089413cdde3c 201028_02
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
089413cdde3c 201028_02
hgs
parents:
diff changeset
     8
*
089413cdde3c 201028_02
hgs
parents:
diff changeset
     9
* Initial Contributors:
089413cdde3c 201028_02
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
089413cdde3c 201028_02
hgs
parents:
diff changeset
    11
*
089413cdde3c 201028_02
hgs
parents:
diff changeset
    12
* Contributors:
089413cdde3c 201028_02
hgs
parents:
diff changeset
    13
*
089413cdde3c 201028_02
hgs
parents:
diff changeset
    14
* Description: 
089413cdde3c 201028_02
hgs
parents:
diff changeset
    15
*
089413cdde3c 201028_02
hgs
parents:
diff changeset
    16
*/
089413cdde3c 201028_02
hgs
parents:
diff changeset
    17
/** @file
089413cdde3c 201028_02
hgs
parents:
diff changeset
    18
    
089413cdde3c 201028_02
hgs
parents:
diff changeset
    19
    @brief USB Peripheral SHAI header
089413cdde3c 201028_02
hgs
parents:
diff changeset
    20
    
48
21625e5de155 201035_01
hgs
parents: 33
diff changeset
    21
    @version 0.4.0
33
089413cdde3c 201028_02
hgs
parents:
diff changeset
    22
 
089413cdde3c 201028_02
hgs
parents:
diff changeset
    23
    Abstract interface for USB Peripheral Controller.
089413cdde3c 201028_02
hgs
parents:
diff changeset
    24
 
089413cdde3c 201028_02
hgs
parents:
diff changeset
    25
    @publishedDeviceAbstraction
089413cdde3c 201028_02
hgs
parents:
diff changeset
    26
  
089413cdde3c 201028_02
hgs
parents:
diff changeset
    27
 */
089413cdde3c 201028_02
hgs
parents:
diff changeset
    28
 
089413cdde3c 201028_02
hgs
parents:
diff changeset
    29
#ifndef USB_PERIPHERAL_SHAI_H
089413cdde3c 201028_02
hgs
parents:
diff changeset
    30
#define USB_PERIPHERAL_SHAI_H
089413cdde3c 201028_02
hgs
parents:
diff changeset
    31
089413cdde3c 201028_02
hgs
parents:
diff changeset
    32
// System includes
089413cdde3c 201028_02
hgs
parents:
diff changeset
    33
#include <kern_priv.h>
089413cdde3c 201028_02
hgs
parents:
diff changeset
    34
#include <usb/usb_common_shai.h> // Common types shared between the USB SHAIs
089413cdde3c 201028_02
hgs
parents:
diff changeset
    35
#include <usb/usb_peripheral_shai_shared.h> // Common types shared with upper layers
089413cdde3c 201028_02
hgs
parents:
diff changeset
    36
089413cdde3c 201028_02
hgs
parents:
diff changeset
    37
/**
089413cdde3c 201028_02
hgs
parents:
diff changeset
    38
 * This macro specifies the version of the USB Peripheral SHAI header
089413cdde3c 201028_02
hgs
parents:
diff changeset
    39
 * in binary coded decimal format. This allows the PSL layer to
089413cdde3c 201028_02
hgs
parents:
diff changeset
    40
 * confirm a certain definition is available, if needed. This can for
089413cdde3c 201028_02
hgs
parents:
diff changeset
    41
 * example make it possible for a new PSL to support compilation in an
089413cdde3c 201028_02
hgs
parents:
diff changeset
    42
 * older environment with old USB SHAI version that is missing some
089413cdde3c 201028_02
hgs
parents:
diff changeset
    43
 * new definitions.
089413cdde3c 201028_02
hgs
parents:
diff changeset
    44
 */
48
21625e5de155 201035_01
hgs
parents: 33
diff changeset
    45
#define USB_PERIPHERAL_SHAI_VERSION 0x040
33
089413cdde3c 201028_02
hgs
parents:
diff changeset
    46
089413cdde3c 201028_02
hgs
parents:
diff changeset
    47
// The namespace is documented in file usb_common_shai.h, so it is not
089413cdde3c 201028_02
hgs
parents:
diff changeset
    48
// repeated here
089413cdde3c 201028_02
hgs
parents:
diff changeset
    49
namespace UsbShai
089413cdde3c 201028_02
hgs
parents:
diff changeset
    50
    {
089413cdde3c 201028_02
hgs
parents:
diff changeset
    51
    /** 
089413cdde3c 201028_02
hgs
parents:
diff changeset
    52
     * Masks defined for TUsbPeripheralEndpointCaps.iSizes.
089413cdde3c 201028_02
hgs
parents:
diff changeset
    53
     *
089413cdde3c 201028_02
hgs
parents:
diff changeset
    54
     * Zero means this endpoint is not available (= no size).
089413cdde3c 201028_02
hgs
parents:
diff changeset
    55
     */
089413cdde3c 201028_02
hgs
parents:
diff changeset
    56
    const TUint KUsbEpNotAvailable = 0x00000000;
089413cdde3c 201028_02
hgs
parents:
diff changeset
    57
    
089413cdde3c 201028_02
hgs
parents:
diff changeset
    58
    /**    
089413cdde3c 201028_02
hgs
parents:
diff changeset
    59
     * Max packet size is continuously variable up to some size specified.
089413cdde3c 201028_02
hgs
parents:
diff changeset
    60
     * (Interrupt and Isochronous endpoints only.)
089413cdde3c 201028_02
hgs
parents:
diff changeset
    61
     */
089413cdde3c 201028_02
hgs
parents:
diff changeset
    62
    const TUint KUsbEpSizeCont     = 0x00000001;
089413cdde3c 201028_02
hgs
parents:
diff changeset
    63
    
089413cdde3c 201028_02
hgs
parents:
diff changeset
    64
    /** Max packet size 8 bytes is supported */
089413cdde3c 201028_02
hgs
parents:
diff changeset
    65
    const TUint KUsbEpSize8        = 0x00000008;
089413cdde3c 201028_02
hgs
parents:
diff changeset
    66
    
089413cdde3c 201028_02
hgs
parents:
diff changeset
    67
    /** Max packet size 16 bytes is supported */
089413cdde3c 201028_02
hgs
parents:
diff changeset
    68
    const TUint KUsbEpSize16       = 0x00000010;
089413cdde3c 201028_02
hgs
parents:
diff changeset
    69
    
089413cdde3c 201028_02
hgs
parents:
diff changeset
    70
    /** Max packet size 32 bytes is supported */
089413cdde3c 201028_02
hgs
parents:
diff changeset
    71
    const TUint KUsbEpSize32       = 0x00000020;
089413cdde3c 201028_02
hgs
parents:
diff changeset
    72
    
089413cdde3c 201028_02
hgs
parents:
diff changeset
    73
    /** Max packet size 64 bytes is supported */
089413cdde3c 201028_02
hgs
parents:
diff changeset
    74
    const TUint KUsbEpSize64       = 0x00000040;
089413cdde3c 201028_02
hgs
parents:
diff changeset
    75
    
089413cdde3c 201028_02
hgs
parents:
diff changeset
    76
    /** Max packet size 128 bytes is supported */
089413cdde3c 201028_02
hgs
parents:
diff changeset
    77
    const TUint KUsbEpSize128      = 0x00000080;
089413cdde3c 201028_02
hgs
parents:
diff changeset
    78
    
089413cdde3c 201028_02
hgs
parents:
diff changeset
    79
    /** Max packet size 256 bytes is supported */
089413cdde3c 201028_02
hgs
parents:
diff changeset
    80
    const TUint KUsbEpSize256      = 0x00000100;
089413cdde3c 201028_02
hgs
parents:
diff changeset
    81
    
089413cdde3c 201028_02
hgs
parents:
diff changeset
    82
    /** Max packet size 512 bytes is supported */
089413cdde3c 201028_02
hgs
parents:
diff changeset
    83
    const TUint KUsbEpSize512      = 0x00000200;
089413cdde3c 201028_02
hgs
parents:
diff changeset
    84
    
089413cdde3c 201028_02
hgs
parents:
diff changeset
    85
    /** Max packet size 1023 bytes is supported */
089413cdde3c 201028_02
hgs
parents:
diff changeset
    86
    const TUint KUsbEpSize1023     = 0x00000400;
089413cdde3c 201028_02
hgs
parents:
diff changeset
    87
    
089413cdde3c 201028_02
hgs
parents:
diff changeset
    88
    /** Max packet size 1024 bytes is supported */
089413cdde3c 201028_02
hgs
parents:
diff changeset
    89
    const TUint KUsbEpSize1024     = 0x00000800;
089413cdde3c 201028_02
hgs
parents:
diff changeset
    90
    
089413cdde3c 201028_02
hgs
parents:
diff changeset
    91
    /** 
089413cdde3c 201028_02
hgs
parents:
diff changeset
    92
     * Test Mode Selectors (Set/ClearFeature)
089413cdde3c 201028_02
hgs
parents:
diff changeset
    93
     * Refer to usb specification 2.0, Chapter 9.4.9, table 9-7
089413cdde3c 201028_02
hgs
parents:
diff changeset
    94
     */
089413cdde3c 201028_02
hgs
parents:
diff changeset
    95
    enum TUsbTestModeSelector
089413cdde3c 201028_02
hgs
parents:
diff changeset
    96
        {
089413cdde3c 201028_02
hgs
parents:
diff changeset
    97
        EUsbTestSelector_Test_J = 0x01,
089413cdde3c 201028_02
hgs
parents:
diff changeset
    98
        EUsbTestSelector_Test_K,
089413cdde3c 201028_02
hgs
parents:
diff changeset
    99
        EUsbTestSelector_Test_SE0_NAK,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   100
        EUsbTestSelector_Test_Packet,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   101
        EUsbTestSelector_Test_Force_Enable
089413cdde3c 201028_02
hgs
parents:
diff changeset
   102
        };
089413cdde3c 201028_02
hgs
parents:
diff changeset
   103
    
089413cdde3c 201028_02
hgs
parents:
diff changeset
   104
    /** 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   105
     * Transfer direction of a USB transfer request.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   106
     * @see TUsbPeripheralRequest
089413cdde3c 201028_02
hgs
parents:
diff changeset
   107
     */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   108
    enum TTransferDirection 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   109
        {
089413cdde3c 201028_02
hgs
parents:
diff changeset
   110
        EControllerNone,        
089413cdde3c 201028_02
hgs
parents:
diff changeset
   111
        EControllerRead,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   112
        EControllerWrite
089413cdde3c 201028_02
hgs
parents:
diff changeset
   113
        };
089413cdde3c 201028_02
hgs
parents:
diff changeset
   114
089413cdde3c 201028_02
hgs
parents:
diff changeset
   115
    /** 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   116
     * Enumeration listing the event codes that are passed from PSL to
089413cdde3c 201028_02
hgs
parents:
diff changeset
   117
     * PIL to indicate peripheral events
089413cdde3c 201028_02
hgs
parents:
diff changeset
   118
     */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   119
    enum TUsbPeripheralEvent
089413cdde3c 201028_02
hgs
parents:
diff changeset
   120
        {
089413cdde3c 201028_02
hgs
parents:
diff changeset
   121
        /** The USB Suspend bus state has been detected.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   122
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   123
         * When the Peripheral Controller PSL is part of an
089413cdde3c 201028_02
hgs
parents:
diff changeset
   124
         * OTG-capable port, the PSL shall report this event also when
089413cdde3c 201028_02
hgs
parents:
diff changeset
   125
         * operating as the A-peripheral, in which case this final
089413cdde3c 201028_02
hgs
parents:
diff changeset
   126
         * suspend event starts the HNP role switch back to A-host.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   127
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   128
        EUsbEventSuspend,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   129
        
089413cdde3c 201028_02
hgs
parents:
diff changeset
   130
        /** USB Resume signaling has been detected. */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   131
        EUsbEventResume,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   132
        
089413cdde3c 201028_02
hgs
parents:
diff changeset
   133
        /** A USB Reset condition has been detected. */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   134
        EUsbEventReset,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   135
        
089413cdde3c 201028_02
hgs
parents:
diff changeset
   136
        /**
089413cdde3c 201028_02
hgs
parents:
diff changeset
   137
         * VBUS level has risen above the B-session valid threshold. This
089413cdde3c 201028_02
hgs
parents:
diff changeset
   138
         * is only relevant for a stand-alone peripheral controllers
089413cdde3c 201028_02
hgs
parents:
diff changeset
   139
         * (those not associated with an OTG port). For an OTG port, the
089413cdde3c 201028_02
hgs
parents:
diff changeset
   140
         * VBUS state is reported to PIL layer by the OTG Controller PSL.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   141
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   142
        EUsbEventVbusRisen,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   143
        
089413cdde3c 201028_02
hgs
parents:
diff changeset
   144
        /**
089413cdde3c 201028_02
hgs
parents:
diff changeset
   145
         * VBUS level has fallen below the B-session valid threshold. This
089413cdde3c 201028_02
hgs
parents:
diff changeset
   146
         * is only relevant for a stand-alone peripheral controllers
089413cdde3c 201028_02
hgs
parents:
diff changeset
   147
         * (those not associated with an OTG port). For an OTG port, the
089413cdde3c 201028_02
hgs
parents:
diff changeset
   148
         * VBUS state is reported to PIL layer by the OTG Controller PSL.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   149
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   150
        EUsbEventVbusFallen
089413cdde3c 201028_02
hgs
parents:
diff changeset
   151
        };   
089413cdde3c 201028_02
hgs
parents:
diff changeset
   152
089413cdde3c 201028_02
hgs
parents:
diff changeset
   153
    typedef TUint32 TUsbPeripheralPacketArray;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   154
089413cdde3c 201028_02
hgs
parents:
diff changeset
   155
    /** 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   156
     * @brief  A USB transfer request.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   157
     * 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   158
     * This class will be constructed in PIL or upper layer, and be
089413cdde3c 201028_02
hgs
parents:
diff changeset
   159
     * passed down to PSL. After the request was done, PSL layer will
089413cdde3c 201028_02
hgs
parents:
diff changeset
   160
     * modify corresponding members (like data length, packet info
089413cdde3c 201028_02
hgs
parents:
diff changeset
   161
     * etc.) and re-pass it back to PIL via interface
089413cdde3c 201028_02
hgs
parents:
diff changeset
   162
     * MUsbPeripheralPilCallbackIf::EndpointRequestComplete().
089413cdde3c 201028_02
hgs
parents:
diff changeset
   163
     * 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   164
     */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   165
    NONSHARABLE_CLASS(TUsbPeripheralRequest)
089413cdde3c 201028_02
hgs
parents:
diff changeset
   166
        {
089413cdde3c 201028_02
hgs
parents:
diff changeset
   167
    public:    
089413cdde3c 201028_02
hgs
parents:
diff changeset
   168
        /**
089413cdde3c 201028_02
hgs
parents:
diff changeset
   169
         * This class doesn't need a destructor because it has nothing to be
089413cdde3c 201028_02
hgs
parents:
diff changeset
   170
         * freed, closed, destroyed. It 'owns' nothing.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   171
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   172
        IMPORT_C TUsbPeripheralRequest(TInt aRealEpNum);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   173
        
089413cdde3c 201028_02
hgs
parents:
diff changeset
   174
    public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   175
        /** The 'real' endpoint number this request to be bind to. */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   176
        TInt iRealEpNum;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   177
        
089413cdde3c 201028_02
hgs
parents:
diff changeset
   178
        /** 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   179
         * Start address of this buffer. Filled-in by PIL.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   180
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   181
         * PSL needs to put received data in this buffer if it's a read request.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   182
         * PSL needs to get data from this buffer if it is a write request.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   183
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   184
        TUint8* iBufferStart;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   185
        
089413cdde3c 201028_02
hgs
parents:
diff changeset
   186
        /** Physical address of buffer start (used for DMA). */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   187
        TUintPtr iBufferAddr;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   188
        
089413cdde3c 201028_02
hgs
parents:
diff changeset
   189
        /** Length in bytes to be read/write. Filled-in by PIL. */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   190
        TInt iLength;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   191
089413cdde3c 201028_02
hgs
parents:
diff changeset
   192
        /** 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   193
         * Number of bytes transmitted (if it is a write);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   194
         * This value need to be updated by PSL. 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   195
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   196
        TUint iTxBytes;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   197
        
089413cdde3c 201028_02
hgs
parents:
diff changeset
   198
        /** 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   199
         * Number of packets received (if it is a read); 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   200
         * This value need to be updated by PSL.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   201
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   202
        TUint iRxPackets;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   203
        
089413cdde3c 201028_02
hgs
parents:
diff changeset
   204
        /** 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   205
         * This is a re-interpretation of what's inside in buffer iBufferStart.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   206
         * It is designed to be that the first packet always contains all the
089413cdde3c 201028_02
hgs
parents:
diff changeset
   207
         * bytes received. So only the following scenario are possible:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   208
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   209
         * 1. Nothing, iRxPackets is zero, no packet received.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   210
         * 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   211
         * 2. 1 data Packet, iRxPackets is one.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   212
         *    iPacketIndex[0] is the offset against iBufferStart of where the
089413cdde3c 201028_02
hgs
parents:
diff changeset
   213
         *    first byte of received data begins.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   214
         *    iPacketSize[0] is the size (in bytes) of the received data.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   215
         * 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   216
         * 3. 1 data packet, and one ZLP packet, iRxPackets is two.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   217
         *    iPacketIndex[0] is the offset against iBufferStart of where the
089413cdde3c 201028_02
hgs
parents:
diff changeset
   218
         *    first byte of received data begins.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   219
         *    iPacketSize[0] is the size (in bytes) of the data packet.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   220
         *    
089413cdde3c 201028_02
hgs
parents:
diff changeset
   221
         *    iPacketIndex[1] is the offset of the ZLP packet.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   222
         *    iPacketSize[1] is always set to zero since ZLP contains no data.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   223
         * 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   224
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   225
        TUsbPeripheralPacketArray* iPacketIndex;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   226
        
089413cdde3c 201028_02
hgs
parents:
diff changeset
   227
        /** Array of packet sizes. Details see iPacketIndex */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   228
        TUsbPeripheralPacketArray* iPacketSize;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   229
        
089413cdde3c 201028_02
hgs
parents:
diff changeset
   230
        /**
089413cdde3c 201028_02
hgs
parents:
diff changeset
   231
         * Indicates the transfer direction of this request.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   232
         * Note, SetupEndpointRead/Write likewise functions already point out 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   233
         * the transfer direction, PSL may select to use it or not.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   234
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   235
        TTransferDirection iTransferDir;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   236
            
089413cdde3c 201028_02
hgs
parents:
diff changeset
   237
        /** 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   238
         * For EControllerWrite (IN) transfers, it is used to Indicates that if 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   239
         * a Zero Length Packet is required at the end of this transfer.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   240
         * It will be set to ETrue if ZLP is needed, EFalse otherwise.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   241
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   242
        TBool iZlpReqd;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   243
        
089413cdde3c 201028_02
hgs
parents:
diff changeset
   244
        /** 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   245
         * The error code upon completion of the request;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   246
         * PSL need to set it to KErrNone if no errors, Set it to other 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   247
         * system error codes otherwise.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   248
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   249
        TInt iError;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   250
        };
089413cdde3c 201028_02
hgs
parents:
diff changeset
   251
        
089413cdde3c 201028_02
hgs
parents:
diff changeset
   252
    /** 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   253
     * Peripheral controller capabilities.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   254
     * 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   255
     * PSL should use those values to fill in data member iControllerCaps in
089413cdde3c 201028_02
hgs
parents:
diff changeset
   256
     * structure TPeripheralControllerProperties.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   257
     *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   258
     * @see TPeripheralControllerProperties.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   259
     */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   260
    typedef TUint32 TDeviceCaps;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   261
    
089413cdde3c 201028_02
hgs
parents:
diff changeset
   262
    /**
089413cdde3c 201028_02
hgs
parents:
diff changeset
   263
     * Indicates whether peripheral controller hardware supports USB High-speed.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   264
     * This capability affects driver functionality and behavior throughout the 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   265
     * implementation.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   266
     * 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   267
     * Set this bit if this peripheral controller supports USB High-speed;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   268
     * Clear it otherwise.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   269
     */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   270
    const TDeviceCaps KDevCapHighSpeed = 0x00000001;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   271
    
089413cdde3c 201028_02
hgs
parents:
diff changeset
   272
    /** 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   273
     * Indicates whether the peripheral controller supports hardware acceleration
089413cdde3c 201028_02
hgs
parents:
diff changeset
   274
     * for setting the device address, i.e. automatically setting device address
089413cdde3c 201028_02
hgs
parents:
diff changeset
   275
     * on conclusion of status phase of SET_ADDRESS.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   276
     *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   277
     * If this capability is supported PIL will call SetDeviceAddress() before
089413cdde3c 201028_02
hgs
parents:
diff changeset
   278
     * sending a zero byte status packet.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   279
     *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   280
     * Set this bit if hardware acceleration is supported.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   281
     * Clear it otherwise.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   282
     */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   283
    const TDeviceCaps KDevCapSetAddressAcceleration = 0x00000002;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   284
    
089413cdde3c 201028_02
hgs
parents:
diff changeset
   285
    /**
089413cdde3c 201028_02
hgs
parents:
diff changeset
   286
     * Indicates whether controller support Session Request Protocol.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   287
     *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   288
     * Set this bit if SRP is supported.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   289
     * Clear it otherwise.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   290
     */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   291
    const TDeviceCaps KDevCapSrpSupport = 0x00000004;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   292
    
089413cdde3c 201028_02
hgs
parents:
diff changeset
   293
    /**
089413cdde3c 201028_02
hgs
parents:
diff changeset
   294
     * Indicates whether controller support Host Negotiation Protocol.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   295
     *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   296
     * Set this bit if HNP is supported.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   297
     * Clear it otherwise.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   298
     */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   299
    const TDeviceCaps KDevCapHnpSupport = 0x00000008;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   300
    
089413cdde3c 201028_02
hgs
parents:
diff changeset
   301
    /**
089413cdde3c 201028_02
hgs
parents:
diff changeset
   302
     * Indicates whether controller support Remote wakeup
089413cdde3c 201028_02
hgs
parents:
diff changeset
   303
     * 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   304
     * Set this bit if remote wakeup is supported.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   305
     * Clear it otherwise.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   306
     */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   307
    const TDeviceCaps KDevCapRemoteWakeupSupport = 0x00000010;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   308
089413cdde3c 201028_02
hgs
parents:
diff changeset
   309
    /** 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   310
     * Configuration data from PSL to PIL when register a controller through
089413cdde3c 201028_02
hgs
parents:
diff changeset
   311
     * interface UsbPeripheralPil::RegisterPeripheralController().
089413cdde3c 201028_02
hgs
parents:
diff changeset
   312
     */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   313
    NONSHARABLE_CLASS(TPeripheralControllerProperties)
089413cdde3c 201028_02
hgs
parents:
diff changeset
   314
        {
089413cdde3c 201028_02
hgs
parents:
diff changeset
   315
        public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   316
        TPeripheralControllerProperties();
089413cdde3c 201028_02
hgs
parents:
diff changeset
   317
        
089413cdde3c 201028_02
hgs
parents:
diff changeset
   318
        public: // Data
089413cdde3c 201028_02
hgs
parents:
diff changeset
   319
        /**
089413cdde3c 201028_02
hgs
parents:
diff changeset
   320
         * A bitmap used to Indicates the capabilities of this controller.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   321
         * PSL should set the corresponding bit to '1' if one capability is
089413cdde3c 201028_02
hgs
parents:
diff changeset
   322
         * supported by this controller.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   323
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   324
        TDeviceCaps iControllerCaps;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   325
089413cdde3c 201028_02
hgs
parents:
diff changeset
   326
        /**
089413cdde3c 201028_02
hgs
parents:
diff changeset
   327
         * Pointer to a DFC queue that will be used for DFCs of this controller.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   328
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   329
         * A stand-alone (one not associated with an OTG-port) peripheral PSL 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   330
         * implementation must supply a pointer to a dedicated DFC queue that 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   331
         * has been created for this controller. Both the PSL itself and the PIL
089413cdde3c 201028_02
hgs
parents:
diff changeset
   332
         * layer must queue their DFCs for this controller in this DFC queue to
089413cdde3c 201028_02
hgs
parents:
diff changeset
   333
         * ensure the code is running in the same context.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   334
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   335
         * A peripheral PSL that is part of an OTG port will be registered by 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   336
         * the OTG PSL. In this case, the DFC queue supplied here must be the 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   337
         * same DFC queue as the one supplied in the properties of the OTG 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   338
         * Controller.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   339
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   340
        TDfcQue* iDfcQueue;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   341
        
089413cdde3c 201028_02
hgs
parents:
diff changeset
   342
        /** 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   343
         * Describe the capabilities of all endpoint owned by this controller.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   344
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   345
         * Note that there might be gaps in the array, because the endpoints 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   346
         * must be numbered by using the 'real endpoint' numbering scheme.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   347
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   348
         * An example of end point capability array:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   349
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   350
         * @code
089413cdde3c 201028_02
hgs
parents:
diff changeset
   351
         * static const TUsbPeripheralEndpointCaps DevEndpointCaps[KTotalEps] =
089413cdde3c 201028_02
hgs
parents:
diff changeset
   352
         * {
089413cdde3c 201028_02
hgs
parents:
diff changeset
   353
         * // MaxSize mask  ,   Types&Dir                      , High  ,Reserved
089413cdde3c 201028_02
hgs
parents:
diff changeset
   354
         *                                                       speed?
089413cdde3c 201028_02
hgs
parents:
diff changeset
   355
         * {KEp0MaxPktSzMask,(KUsbEpTypeControl | KUsbEpDirOut), ETrue ,0 , 0},
089413cdde3c 201028_02
hgs
parents:
diff changeset
   356
         * {KEp0MaxPktSzMask,(KUsbEpTypeControl | KUsbEpDirIn ), ETrue ,0 , 0},
089413cdde3c 201028_02
hgs
parents:
diff changeset
   357
         *      
089413cdde3c 201028_02
hgs
parents:
diff changeset
   358
         * {KUsbEpNotAvailable,KUsbEpNotAvailable              , ETrue ,0 , 0},
089413cdde3c 201028_02
hgs
parents:
diff changeset
   359
         *      
089413cdde3c 201028_02
hgs
parents:
diff changeset
   360
         * {KBlkMaxPktSzMask,(KUsbEpTypeBulk | KUsbEpDirIn )   , ETrue ,0 , 0},
089413cdde3c 201028_02
hgs
parents:
diff changeset
   361
         * {KBlkMaxPktSzMask,(KUsbEpTypeBulk | KUsbEpDirOut)   , ETrue ,0 , 0}
089413cdde3c 201028_02
hgs
parents:
diff changeset
   362
         * };
089413cdde3c 201028_02
hgs
parents:
diff changeset
   363
         * @endcode
089413cdde3c 201028_02
hgs
parents:
diff changeset
   364
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   365
         * For endpoint maxinum packet size on USB2.0 High-speed, PSL should
089413cdde3c 201028_02
hgs
parents:
diff changeset
   366
         * provide the overlaid values for both full speed and high speed, as 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   367
         * PIL can deduce the appropriate values for either speed.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   368
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   369
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   370
        const TUsbPeripheralEndpointCaps* iDeviceEndpointCaps;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   371
        
089413cdde3c 201028_02
hgs
parents:
diff changeset
   372
        /** 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   373
         * Set by the PSL to indicate the number of entries in 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   374
         * iDeviceEndpointCaps array.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   375
         * Be noted that this value include the ones that are marked as 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   376
         * KUsbEpNotAvailable in table iDeviceEndpointCaps.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   377
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   378
        TInt iDeviceTotalEndpoints;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   379
        
089413cdde3c 201028_02
hgs
parents:
diff changeset
   380
        /** 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   381
         * Maximum size of ep0 packet.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   382
         * @see USB spec 2.0, chapter 9, table 9-8.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   383
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   384
        TUint8  iMaxEp0Size;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   385
        
089413cdde3c 201028_02
hgs
parents:
diff changeset
   386
        /** 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   387
         * Device Release number in binary-coded decimal.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   388
         * @see USB spec 2.0, chapter 9, table 9-8.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   389
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   390
        TUint16  iDeviceRelease;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   391
        };
089413cdde3c 201028_02
hgs
parents:
diff changeset
   392
    
089413cdde3c 201028_02
hgs
parents:
diff changeset
   393
    /** 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   394
     * Enumeration of stages within a control transfer
089413cdde3c 201028_02
hgs
parents:
diff changeset
   395
     * 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   396
     * Possible stages defined in USB spec include:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   397
     * 1. setup -> status in
089413cdde3c 201028_02
hgs
parents:
diff changeset
   398
     * 2. setup -> data in -> status out
089413cdde3c 201028_02
hgs
parents:
diff changeset
   399
     * 3. setup -> data out -> status in
089413cdde3c 201028_02
hgs
parents:
diff changeset
   400
     */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   401
    enum TControlStage
089413cdde3c 201028_02
hgs
parents:
diff changeset
   402
        {
089413cdde3c 201028_02
hgs
parents:
diff changeset
   403
        /** 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   404
         * Control transfer always start with a setup stage in which a setup
089413cdde3c 201028_02
hgs
parents:
diff changeset
   405
         * packet is expected.         
089413cdde3c 201028_02
hgs
parents:
diff changeset
   406
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   407
        EControlTransferStageSetup,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   408
        
089413cdde3c 201028_02
hgs
parents:
diff changeset
   409
        /** The stage that a data packet is expected from be received */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   410
        EControlTransferStageDataOut,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   411
        
089413cdde3c 201028_02
hgs
parents:
diff changeset
   412
        /**
089413cdde3c 201028_02
hgs
parents:
diff changeset
   413
         * Status in stage can either following a Setup stage (if no data stage)
089413cdde3c 201028_02
hgs
parents:
diff changeset
   414
         * or following a data out stage.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   415
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   416
        EControlTransferStageStatusIn,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   417
                
089413cdde3c 201028_02
hgs
parents:
diff changeset
   418
        /** 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   419
         * Depends on the request type of a setup packet, a data in stage maybe 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   420
         * followed after a setup packet.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   421
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   422
         * Within this stage we expect upper/ourself to send some data to host.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   423
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   424
        EControlTransferStageDataIn,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   425
        
089413cdde3c 201028_02
hgs
parents:
diff changeset
   426
        /**
089413cdde3c 201028_02
hgs
parents:
diff changeset
   427
         * This is an optional stage, some controller will silently swallow
089413cdde3c 201028_02
hgs
parents:
diff changeset
   428
         * Status out packet and not able to report it.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   429
         * PIL has consider this situation when control transfer state machine
089413cdde3c 201028_02
hgs
parents:
diff changeset
   430
         * is introduced.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   431
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   432
        EControlTransferStageStatusOut,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   433
               
089413cdde3c 201028_02
hgs
parents:
diff changeset
   434
        EControlTransferStageMax
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
     * Packet types in control transfers.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   439
     * 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   440
     * PSL need to tell PIL about the types of each packet it received.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   441
     * @see MUsbPeripheralPilCallbackIf::Ep0RequestComplete().
089413cdde3c 201028_02
hgs
parents:
diff changeset
   442
     */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   443
    enum TControlPacketType
089413cdde3c 201028_02
hgs
parents:
diff changeset
   444
        {
089413cdde3c 201028_02
hgs
parents:
diff changeset
   445
        /** Indicates a setup packet */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   446
        EControlPacketTypeSetup,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   447
        
089413cdde3c 201028_02
hgs
parents:
diff changeset
   448
        /** Indicates a data out packet */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   449
        EControlPacketTypeDataOut,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   450
        
089413cdde3c 201028_02
hgs
parents:
diff changeset
   451
        /** 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   452
         * Indicates a status in packet.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   453
         * optional, PSL can select not to complete this packet.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   454
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   455
        EControlPacketTypeStatusIn,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   456
        
089413cdde3c 201028_02
hgs
parents:
diff changeset
   457
        /** Indicates a data in packet */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   458
        EControlPacketTypeDataIn,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   459
        
089413cdde3c 201028_02
hgs
parents:
diff changeset
   460
        /** 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   461
         * Indicates that a status out packet.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   462
         * optional, PSL can select not to complete this packet.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   463
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   464
        EControlPacketTypeStatusOut,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   465
089413cdde3c 201028_02
hgs
parents:
diff changeset
   466
        };
089413cdde3c 201028_02
hgs
parents:
diff changeset
   467
    
089413cdde3c 201028_02
hgs
parents:
diff changeset
   468
    /** 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   469
     * @brief Interface for PSL to do callback to PIL
089413cdde3c 201028_02
hgs
parents:
diff changeset
   470
     * 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   471
     * This is the interface that a PSL need talk with PIL in order to:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   472
     * 1. Pass device event (reset/suspend/resume/vbus high/vbus low etc) to PIL.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   473
     * 2. Complete a read/write request to PIL.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   474
     * 3. Query control transfer stage from PIL.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   475
     * 3. Other functions like SetAdress/Handle HNP/Get remote wake up etc.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   476
     *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   477
     * This interface already been implemented and exported via library 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   478
     * usbperipheralpil.lib. PSL need to add this library as a dependency in 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   479
     * you PSL .mmp file.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   480
     *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   481
     * @lib  usbperipheralpil.lib
089413cdde3c 201028_02
hgs
parents:
diff changeset
   482
     */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   483
    NONSHARABLE_CLASS(MUsbPeripheralPilCallbackIf)
089413cdde3c 201028_02
hgs
parents:
diff changeset
   484
        {
089413cdde3c 201028_02
hgs
parents:
diff changeset
   485
        public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   486
        /** 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   487
         * Used to synchronize the Ep0 Stage machine between PSL and PIL.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   488
         * Accepts a SETUP packet and returns the next Ep0 Stage.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   489
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   490
         * This function will NOT lead anything to be changed at PIL, it is 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   491
         * functioning by parsing the supplied buffer only.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   492
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   493
         * @param aSetupBuf The SETUP packet received by PSL.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   494
         * @return The next Ep0 Stage at PIL if PIL receive this setup packet.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   495
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   496
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   497
        virtual TControlStage EnquireEp0NextStage(const TUint8* aSetupBuf) const = 0;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   498
        
089413cdde3c 201028_02
hgs
parents:
diff changeset
   499
        /** 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   500
         * This function gets called by PSL upon completion of a pending 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   501
         * endpoint zero data transfer request.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   502
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   503
         * @param aRealEndpoint Either 0 for Ep0 OUT (= Read)
089413cdde3c 201028_02
hgs
parents:
diff changeset
   504
         *                      or 1 for Ep0 IN (= Write).
089413cdde3c 201028_02
hgs
parents:
diff changeset
   505
         * @param aCount The number of bytes received or transmitted.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   506
         * @param aError The error code of the completed transfer request. 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   507
         *               KErrNone if no error.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   508
         *               KErrCancel if transfer was cancelled.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   509
         *               KErrPrematureEnd if a premature end was encountered.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   510
         * @param aPktType The type of the packet that being completed.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   511
         * 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   512
         * @return KErrNone if no error during transfer completion processing;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   513
         *  KErrGeneral if request was a read & a Setup packet was received &
089413cdde3c 201028_02
hgs
parents:
diff changeset
   514
         *  the recipient for that packet couldn't be found (invalid packet: Ep0
089413cdde3c 201028_02
hgs
parents:
diff changeset
   515
         *  has been stalled); KErrNotFound if the request was a read & the 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   516
         *  recipient for that packet (Setup or data) _was_ * found - however no
089413cdde3c 201028_02
hgs
parents:
diff changeset
   517
         *  read had been set up by that recipient (this case should be used by 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   518
         *  PSL to disable Ep0 interrupt at that point and give the upper layer 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   519
         *  software time to set up a new Ep0 read; once the 'missing' read was 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   520
         *  set up either Ep0DataReceiveProceed or Ep0ReadSetupPktProceed of 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   521
         *  MPeripheralControllerIf class  will be called by PIL).
089413cdde3c 201028_02
hgs
parents:
diff changeset
   522
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   523
        virtual TInt Ep0RequestComplete(TInt aRealEndpoint, 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   524
                                        TInt aCount, 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   525
                                        TInt aError, 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   526
                                        TControlPacketType aPktType) = 0;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   527
    
089413cdde3c 201028_02
hgs
parents:
diff changeset
   528
        /** 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   529
         * PSL call this function upon completion of a pending data transfer 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   530
         * request. This function isn't to be used for endpoint zero completions
089413cdde3c 201028_02
hgs
parents:
diff changeset
   531
         * (use Ep0RequestComplete instead).
089413cdde3c 201028_02
hgs
parents:
diff changeset
   532
         * 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   533
         * @param aCallback A pointer to a data transfer request callback 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   534
         *        structure which was previously passed to PSL in a 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   535
         *        SetupEndpointWrite() or SetupEndpointRead() call.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   536
         * 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   537
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   538
        virtual void EndpointRequestComplete(TUsbPeripheralRequest* aCallback) = 0;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   539
        
089413cdde3c 201028_02
hgs
parents:
diff changeset
   540
        /**
089413cdde3c 201028_02
hgs
parents:
diff changeset
   541
         * This function gets called by PSL upon detection of either of the 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   542
         * following events:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   543
         *   - USB Reset,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   544
         *   - USB Suspend event,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   545
         *   - USB Resume signaling,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   546
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   547
         * When the Peripheral Controller PSL is part of an
089413cdde3c 201028_02
hgs
parents:
diff changeset
   548
         * OTG-capable port, the PSL shall report the above events
089413cdde3c 201028_02
hgs
parents:
diff changeset
   549
         * also when operating as the A-peripheral, including
089413cdde3c 201028_02
hgs
parents:
diff changeset
   550
         * reporting the final suspend event that starts the HNP role
089413cdde3c 201028_02
hgs
parents:
diff changeset
   551
         * switch back to A-host.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   552
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   553
         * In addition to the events above, a stand-alone peripheral
089413cdde3c 201028_02
hgs
parents:
diff changeset
   554
         * controller PSL (one not associated with an OTG port) is
089413cdde3c 201028_02
hgs
parents:
diff changeset
   555
         * required to report the following events:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   556
         *   - VBUS rising above the session valid threshold
089413cdde3c 201028_02
hgs
parents:
diff changeset
   557
         *   - VBUS falling below the session valid threshold
089413cdde3c 201028_02
hgs
parents:
diff changeset
   558
         * 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   559
         * When the peripheral controller is part of an OTG port, the
089413cdde3c 201028_02
hgs
parents:
diff changeset
   560
         * PIL layer receives VBUS notifications via the OTG stack,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   561
         * and the peripheral PSL is not expected to report them via
089413cdde3c 201028_02
hgs
parents:
diff changeset
   562
         * this interface.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   563
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   564
         * When USB Battery Charging is supported on the
089413cdde3c 201028_02
hgs
parents:
diff changeset
   565
         * peripheral-only port, there is a dependency between normal
089413cdde3c 201028_02
hgs
parents:
diff changeset
   566
         * USB functionality and USB Battery Charging (see
089413cdde3c 201028_02
hgs
parents:
diff changeset
   567
         * usb_charger_detection_shai.h and specifically the
089413cdde3c 201028_02
hgs
parents:
diff changeset
   568
         * description of class MChargerDetectorIf). In this case it
089413cdde3c 201028_02
hgs
parents:
diff changeset
   569
         * is the responsibility of the Peripheral Controller PSL to
089413cdde3c 201028_02
hgs
parents:
diff changeset
   570
         * communicate with the Charger Detector PSL (which it may
089413cdde3c 201028_02
hgs
parents:
diff changeset
   571
         * implement itself) with respect to VBUS events.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   572
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   573
         * When VBUS rises on the peripheral-only port that fully
089413cdde3c 201028_02
hgs
parents:
diff changeset
   574
         * supports Battery Charging Specification Revision 1.1, the
089413cdde3c 201028_02
hgs
parents:
diff changeset
   575
         * Charger Detector PSL and the Peripheral Controller PSL need
089413cdde3c 201028_02
hgs
parents:
diff changeset
   576
         * to together guarantee that Data Contact Detect is completed
089413cdde3c 201028_02
hgs
parents:
diff changeset
   577
         * and the port type detected before notifying VBUS rising.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   578
         * When the port type is known, the port type needs to be
089413cdde3c 201028_02
hgs
parents:
diff changeset
   579
         * notified to the Charger Detector PSL Observer, followed by
089413cdde3c 201028_02
hgs
parents:
diff changeset
   580
         * notifying a VBUS rising event to the Peripheral Controller
089413cdde3c 201028_02
hgs
parents:
diff changeset
   581
         * PIL callback interface (via this function).
089413cdde3c 201028_02
hgs
parents:
diff changeset
   582
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   583
         * Where Data Contact Detect is not supported, the VBUS rise
089413cdde3c 201028_02
hgs
parents:
diff changeset
   584
         * event needs to be notified to the Peripheral Controller PIL
089413cdde3c 201028_02
hgs
parents:
diff changeset
   585
         * callback interface (via this function) immediately and
089413cdde3c 201028_02
hgs
parents:
diff changeset
   586
         * charger detection needs to proceed in parallel with the
089413cdde3c 201028_02
hgs
parents:
diff changeset
   587
         * upper layers preparing the USB personality. This is
089413cdde3c 201028_02
hgs
parents:
diff changeset
   588
         * necessary in order to ensure that we can fulfill the
089413cdde3c 201028_02
hgs
parents:
diff changeset
   589
         * requirement to connect to the bus within a second, while
089413cdde3c 201028_02
hgs
parents:
diff changeset
   590
         * still making as long as possible charger detection cycle to
089413cdde3c 201028_02
hgs
parents:
diff changeset
   591
         * minimize the changes of false detections due to datalines
089413cdde3c 201028_02
hgs
parents:
diff changeset
   592
         * not making contact yet.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   593
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   594
         * The Peripheral Controller PSL and the Charger Detector PSL
089413cdde3c 201028_02
hgs
parents:
diff changeset
   595
         * need to together guarantee that the peripheral controller
089413cdde3c 201028_02
hgs
parents:
diff changeset
   596
         * does not attempt to connect to the bus while charger
089413cdde3c 201028_02
hgs
parents:
diff changeset
   597
         * detection is still on-going. When detection has been
089413cdde3c 201028_02
hgs
parents:
diff changeset
   598
         * completed and upper layers have indicated readiness to
089413cdde3c 201028_02
hgs
parents:
diff changeset
   599
         * connect to the bus (see MPeripheralControllerIf::PeripheralConnect(),
089413cdde3c 201028_02
hgs
parents:
diff changeset
   600
         * the Peripheral Controller PSL must connect to the bus.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   601
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   602
         * @param aEvent An enum denoting the event that has occurred.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   603
         *        
089413cdde3c 201028_02
hgs
parents:
diff changeset
   604
         * @return KErrArgument if the event is not recognized, KErrNone
089413cdde3c 201028_02
hgs
parents:
diff changeset
   605
         *         otherwise
089413cdde3c 201028_02
hgs
parents:
diff changeset
   606
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   607
        virtual TInt DeviceEventNotification(TUsbPeripheralEvent aEvent) = 0;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   608
        
089413cdde3c 201028_02
hgs
parents:
diff changeset
   609
        /** 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   610
         * This function should be called by PSL once the peripheral 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   611
         * controller (and thus the USB device) is in the Address state.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   612
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   613
        virtual void MoveToAddressState() = 0;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   614
        
089413cdde3c 201028_02
hgs
parents:
diff changeset
   615
        /** 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   616
         * This function should be called by PSL after reception of an Ep0
089413cdde3c 201028_02
hgs
parents:
diff changeset
   617
         * SET_FEATURE request with a feature selector of either {b_hnp_enable,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   618
         * a_hnp_support, a_alt_hnp_support}, but ONLY when that Setup packet is
089413cdde3c 201028_02
hgs
parents:
diff changeset
   619
         * not handed up to PIL (for instance because it is auto-decoded and
089413cdde3c 201028_02
hgs
parents:
diff changeset
   620
         * 'swallowed' by the peripheral controller hardware).
089413cdde3c 201028_02
hgs
parents:
diff changeset
   621
         * 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   622
         * @param aHnpState A bitmask indicating the present state of the three
089413cdde3c 201028_02
hgs
parents:
diff changeset
   623
         * OTG feature selectors as follows:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   624
         * 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   625
         * bit.0 == a_alt_hnp_support
089413cdde3c 201028_02
hgs
parents:
diff changeset
   626
         * bit.1 == a_hnp_support
089413cdde3c 201028_02
hgs
parents:
diff changeset
   627
         * bit.2 == b_hnp_enable
089413cdde3c 201028_02
hgs
parents:
diff changeset
   628
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   629
         * @see TUsbHnpCaps
089413cdde3c 201028_02
hgs
parents:
diff changeset
   630
         * 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   631
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   632
        virtual void HandleHnpRequest(TInt aHnpState) = 0;       
089413cdde3c 201028_02
hgs
parents:
diff changeset
   633
        
089413cdde3c 201028_02
hgs
parents:
diff changeset
   634
        /**
089413cdde3c 201028_02
hgs
parents:
diff changeset
   635
         * Returns the current USB device state.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   636
         * 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   637
         * 'USB device state' here refers to the device states as defined 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   638
         * in chapter 9 of the USB specification.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   639
         * 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   640
         * @return The current USB device state, or EUsbPeripheralStateUndefined
089413cdde3c 201028_02
hgs
parents:
diff changeset
   641
         *         if peripheral stack is disabled.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   642
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   643
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   644
        virtual TUsbPeripheralState DeviceStatus() const = 0;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   645
        
089413cdde3c 201028_02
hgs
parents:
diff changeset
   646
        };
089413cdde3c 201028_02
hgs
parents:
diff changeset
   647
    
089413cdde3c 201028_02
hgs
parents:
diff changeset
   648
    /** 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   649
     * MPeripheralControllerIf
089413cdde3c 201028_02
hgs
parents:
diff changeset
   650
     * @brief Abstract class for USB peripheral Chipset API.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   651
     * @version   0.2.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   652
     *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   653
     * PSL driver need to implement all those virtual functions in this class.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   654
     *    
089413cdde3c 201028_02
hgs
parents:
diff changeset
   655
     * Four Steps to create a vendor specific usb peripheral PDD.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   656
     *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   657
     *    Step 1: Derive a new class from MUsbPeripheralControllerIf and 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   658
     *            implement all interfaces defined. 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   659
     *              
089413cdde3c 201028_02
hgs
parents:
diff changeset
   660
     *    Step 2: Create a new instance (we call it inst_of_psl) of the new class.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   661
     *            Prepare the configuration data defined by structure
089413cdde3c 201028_02
hgs
parents:
diff changeset
   662
     *            TUsbPeripheralControllerProps (let's call it cfg_data )
089413cdde3c 201028_02
hgs
parents:
diff changeset
   663
     *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   664
     *    Step 3: Call UsbPeripheralPil::RegisterPeripheralController(inst_of_psl,cfg_data).
089413cdde3c 201028_02
hgs
parents:
diff changeset
   665
     *                        
089413cdde3c 201028_02
hgs
parents:
diff changeset
   666
     *    Step 4: Member function SetPilCallbackInterface() will be called. 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   667
     *            An instance of MUsbPeripheralPilCallbackIf will be passed to 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   668
     *            PSL via this call. Record it since PSL need to reuse it later 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   669
     *            for any PIL functionality callback.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   670
     *            
089413cdde3c 201028_02
hgs
parents:
diff changeset
   671
     *    That's all.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   672
     *    
089413cdde3c 201028_02
hgs
parents:
diff changeset
   673
     *    dynamic view of PDD creation.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   674
     *            PIL will be compiled and linked alone.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   675
     *            PSL will be compiled alone and linked against a new lib named
089413cdde3c 201028_02
hgs
parents:
diff changeset
   676
     *            usbperipheralpil.lib.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   677
     *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   678
     *    For PSL vendors, the following stuff are provided:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   679
     *            usb_peripheral_shai.h & usb_peripheral_shai_shared.h which is 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   680
     *            used for PSL to implement against.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   681
     *            usbperipheralpil.lib which is used for PSL to link against.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   682
     *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   683
     */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   684
    NONSHARABLE_CLASS(MPeripheralControllerIf)
089413cdde3c 201028_02
hgs
parents:
diff changeset
   685
        {
089413cdde3c 201028_02
hgs
parents:
diff changeset
   686
        public: 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   687
        /** 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   688
         * This function will be called once and only once by PIL when a PSL
089413cdde3c 201028_02
hgs
parents:
diff changeset
   689
         * registered itself to PIL by calling 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   690
         * UsbPeripheralPil::RegisterPeripheralController().
089413cdde3c 201028_02
hgs
parents:
diff changeset
   691
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   692
         * PSL is expected to store the callback interface pointer so that make 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   693
         * it possible to reporting events back to PIL layer.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   694
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   695
         * For stand-alone peripheral controllers (controllers not associated 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   696
         * with an OTG port),the Peripheral Controller PSL is required to report
089413cdde3c 201028_02
hgs
parents:
diff changeset
   697
         * a EUsbEventVbusRisen event by calling MUsbPeripheralPilCallbackIf::
089413cdde3c 201028_02
hgs
parents:
diff changeset
   698
         * DeviceEventNotification() if VBUS is already high at the point this 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   699
         * function is called.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   700
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   701
         * @param aPilCallbackIf A reference to PIL callback interface which
089413cdde3c 201028_02
hgs
parents:
diff changeset
   702
                  a PSL must use to report events.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   703
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   704
        virtual void SetPilCallbackInterface(MUsbPeripheralPilCallbackIf& aPilCallbackIf) = 0;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   705
        
089413cdde3c 201028_02
hgs
parents:
diff changeset
   706
        /**
089413cdde3c 201028_02
hgs
parents:
diff changeset
   707
         * Sets endpoint zero's RX buffer.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   708
         * This buffer is maintains at PIL and always exists.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   709
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   710
         * @param aBuffer the buffer address
089413cdde3c 201028_02
hgs
parents:
diff changeset
   711
         * @param aBufferLen the length of the buffer.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   712
         *        
089413cdde3c 201028_02
hgs
parents:
diff changeset
   713
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   714
        virtual void SetEp0RxBuffer(TUint8* aBuffer, TInt aBufferLen) = 0;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   715
        
089413cdde3c 201028_02
hgs
parents:
diff changeset
   716
        /** 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   717
         * Determines the speed mode that this controller is operating at.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   718
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   719
         * @return one of the speed mode defined by TSpeed.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   720
         * @see TSpeed.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   721
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   722
        virtual TSpeed DeviceOperatingSpeed() = 0;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   723
        
089413cdde3c 201028_02
hgs
parents:
diff changeset
   724
        /** 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   725
         * Forces the peripheral controller into a non-idle state to perform a 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   726
         * USB remote wakeup operation.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   727
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   728
         * PIL layer will make sure the following preconditions are meet before
089413cdde3c 201028_02
hgs
parents:
diff changeset
   729
         * calling this function:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   730
         *   1. we're already in suspended state for at least 5ms (Twtrsm).
089413cdde3c 201028_02
hgs
parents:
diff changeset
   731
         *   2. remote wakeup had been enabled by host.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   732
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   733
         * @return KErrNone if successful, otherwise one of the system-wide 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   734
         *         error codes.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   735
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   736
        virtual TInt SignalRemoteWakeup() = 0;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   737
089413cdde3c 201028_02
hgs
parents:
diff changeset
   738
        /** 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   739
         * This function will be called by PIL upon decoding a SET_ADDRESS
089413cdde3c 201028_02
hgs
parents:
diff changeset
   740
         * request. PIL will make sure that a status packet will be sent before
089413cdde3c 201028_02
hgs
parents:
diff changeset
   741
         * calling this function as USB spec required if capability of 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   742
         * KDevCapSetAddressAcceleration is not support by hardware; Otherwise
089413cdde3c 201028_02
hgs
parents:
diff changeset
   743
         * SetAddress call will go ahead of status packet.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   744
         * @see KDevCapSetAddressAcceleration
089413cdde3c 201028_02
hgs
parents:
diff changeset
   745
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   746
         * @param aAddress A valid USB device address that was received with the
089413cdde3c 201028_02
hgs
parents:
diff changeset
   747
         *        SET_ADDRESS request.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   748
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   749
         * @return KErrNone if address was set successfully or if controller's 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   750
         *         address cannot be set manually. otherwise one of the system-
089413cdde3c 201028_02
hgs
parents:
diff changeset
   751
         *         wide error codes.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   752
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   753
        virtual TInt SetDeviceAddress(TInt aAddress) = 0;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   754
        
089413cdde3c 201028_02
hgs
parents:
diff changeset
   755
        /** 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   756
         * Configures (enables) an endpoint (incl. Ep0) for data transmission or
089413cdde3c 201028_02
hgs
parents:
diff changeset
   757
         * reception.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   758
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   759
         * @param aRealEndpoint The number of the endpoint to be configured.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   760
         * @param aEndpointInfo A properly filled-in endpoint info structure.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   761
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   762
         * @return KErrNone if endpoint successfully configured; KErrArgument if
089413cdde3c 201028_02
hgs
parents:
diff changeset
   763
         *         endpoint number or endpoint info invalid; otherwise one of 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   764
         *         the system-wide error codes.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   765
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   766
        virtual TInt ConfigureEndpoint(TInt aRealEndpoint, 
48
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   767
                                       const TUsbPeripheralEndpointInfo& aEndpointInfo) = 0;
33
089413cdde3c 201028_02
hgs
parents:
diff changeset
   768
        
089413cdde3c 201028_02
hgs
parents:
diff changeset
   769
        /** 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   770
         * De-configures (disables) an endpoint (incl. Ep0).
089413cdde3c 201028_02
hgs
parents:
diff changeset
   771
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   772
         * @param aRealEndpoint The number of the endpoint to be disabled.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   773
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   774
         * @return KErrNone if endpoint successfully de-configured; KErrArgument
089413cdde3c 201028_02
hgs
parents:
diff changeset
   775
         *         if endpoint number invalid; otherwise one of the system-wide 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   776
         *         error codes.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   777
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   778
        virtual TInt DeConfigureEndpoint(TInt aRealEndpoint) = 0;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   779
        
089413cdde3c 201028_02
hgs
parents:
diff changeset
   780
        /** 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   781
         * Queries the use of and endpoint resource.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   782
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   783
         * @param aRealEndpoint The number of the endpoint.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   784
         * @param aResource The endpoint resource to be queried.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   785
         *        they are one of the following currently:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   786
         *           KUsbEndpointInfoFeatureWord1_DMA.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   787
         *           KUsbEndpointInfoFeatureWord1_DoubleBuffering.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   788
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   789
         * @return ETrue if the specified resource is in use at the endpoint, 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   790
         *         EFalse if not.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   791
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   792
        virtual TBool QueryEndpointResource(TInt aRealEndpoint, TUint32 aResource) const = 0;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   793
        
089413cdde3c 201028_02
hgs
parents:
diff changeset
   794
        /** 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   795
         * Sets up a read request on an endpoint (excl. Ep0) for data reception.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   796
         * 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   797
         * PIL will construct a read request as aCallback, and use this function
089413cdde3c 201028_02
hgs
parents:
diff changeset
   798
         * to setup and indicate the readiness for reading data from end point.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   799
         * 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   800
         * PSL need to update related data member of aCallback and complete this
089413cdde3c 201028_02
hgs
parents:
diff changeset
   801
         * request by calling EndpointRequestComplete() when request is done.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   802
         * 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   803
         * @see TUsbPeripheralRequest
089413cdde3c 201028_02
hgs
parents:
diff changeset
   804
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   805
         * @param aRealEndpoint The number of the endpoint to be used.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   806
         * @param aCallback A properly filled-in (by PIL) request callback.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   807
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   808
         * @return KErrNone if read successfully set up; KErrArgument if endpoint
089413cdde3c 201028_02
hgs
parents:
diff changeset
   809
         *         number is invalid. otherwise one of the system-wide error 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   810
         *         codes.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   811
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   812
        virtual TInt SetupEndpointRead(TInt aRealEndpoint, TUsbPeripheralRequest& aCallback) = 0;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   813
        
089413cdde3c 201028_02
hgs
parents:
diff changeset
   814
        /** 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   815
         * Sets up a write request on an endpoint (excl. Ep0) for transmission.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   816
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   817
         * PIL will contruct a write request as aCallback, and use this function
089413cdde3c 201028_02
hgs
parents:
diff changeset
   818
         * to pass down it to PSL.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   819
         * 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   820
         * PSL need to update related data member of aCallback and complete this
089413cdde3c 201028_02
hgs
parents:
diff changeset
   821
         * request by calling EndpointRequestComplete() when data is transmitted
089413cdde3c 201028_02
hgs
parents:
diff changeset
   822
         * or any error found.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   823
         * @see TUsbPeripheralRequest
089413cdde3c 201028_02
hgs
parents:
diff changeset
   824
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   825
         * @param aRealEndpoint The number of the endpoint to be used.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   826
         * @param aCallback A properly filled-in request callback.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   827
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   828
         * @return KErrNone if write successfully set up; KErrArgument if 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   829
         *         endpoint number is invalid; otherwise one of the system-wide 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   830
         *         error codes.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   831
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   832
        virtual TInt SetupEndpointWrite(TInt aRealEndpoint, TUsbPeripheralRequest& aCallback) = 0;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   833
        
089413cdde3c 201028_02
hgs
parents:
diff changeset
   834
        /** 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   835
         * Cancels a read request on an endpoint (excl. Ep0).
089413cdde3c 201028_02
hgs
parents:
diff changeset
   836
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   837
         * Note that endpoint 0 read requests are never cancelled by PIL, so
089413cdde3c 201028_02
hgs
parents:
diff changeset
   838
         * there is also no CancelEndpointZeroRead() function.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   839
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   840
         * @param aRealEndpoint The number of the endpoint to be used.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   841
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   842
         * @return KErrNone if read successfully cancelled; KErrArgument if 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   843
         *         endpoint number is invalid; otherwise one of the system-wide 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   844
         *         error codes.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   845
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   846
        virtual TInt CancelEndpointRead(TInt aRealEndpoint) = 0;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   847
        
089413cdde3c 201028_02
hgs
parents:
diff changeset
   848
        /** 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   849
         * Cancels a write request on an endpoint (incl. Ep0).
089413cdde3c 201028_02
hgs
parents:
diff changeset
   850
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   851
         * PIL calls this function also to cancel endpoint zero write requests.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   852
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   853
         * @param aRealEndpoint The number of the endpoint to be used.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   854
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   855
         * @return KErrNone if write successfully cancelled; KErrArgument if 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   856
         *         endpoint number is invalid; otherwise one of the system-wide 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   857
         *         error codes.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   858
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   859
        virtual TInt CancelEndpointWrite(TInt aRealEndpoint) = 0;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   860
        
089413cdde3c 201028_02
hgs
parents:
diff changeset
   861
        /** 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   862
         * Same as SetupEndpointRead(), but for endpoint zero only.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   863
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   864
         * No callback structure is used here as reading to ep0 (host may at any
089413cdde3c 201028_02
hgs
parents:
diff changeset
   865
         * time send a SETUP packet) must be ready even before upper application
089413cdde3c 201028_02
hgs
parents:
diff changeset
   866
         * is ready. So, a buffer will be passed down to PSL by 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   867
         * MPeripheralControllerIf::SetEp0RxBuffer() during PIL construction,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   868
         * this will benefits the PSL to have a buffer always available for this
089413cdde3c 201028_02
hgs
parents:
diff changeset
   869
         * purpose.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   870
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   871
         * PSL must complete this request by EndpointRequestComplete()
089413cdde3c 201028_02
hgs
parents:
diff changeset
   872
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   873
         * @return KErrNone if read successfully set up; otherwise one of the 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   874
         *         system-wide error codes.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   875
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   876
        virtual TInt SetupEndpointZeroRead() = 0;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   877
        
089413cdde3c 201028_02
hgs
parents:
diff changeset
   878
        /** 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   879
         * Same as SetupEndpointWrite(), but for endpoint zero only.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   880
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   881
         * No callback is used here as this function is only used by
089413cdde3c 201028_02
hgs
parents:
diff changeset
   882
         * PIL layer only and no user side request exists for it.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   883
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   884
         * @param aBuffer This points to the beginning of the data to be sent.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   885
         * @param aLength The number of bytes to be sent.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   886
         * @param aZlpReqd ETrue if a ZLP is must be sent after the data.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   887
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   888
         * PSL must complete this request by EndpointRequestComplete()
089413cdde3c 201028_02
hgs
parents:
diff changeset
   889
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   890
         * @return KErrNone if write successfully set up; otherwise one of the 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   891
         *         system-wide error codes.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   892
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   893
        virtual TInt SetupEndpointZeroWrite(const TUint8* aBuffer, 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   894
                                            TInt aLength, 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   895
                                            TBool aZlpReqd = EFalse) = 0;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   896
        
089413cdde3c 201028_02
hgs
parents:
diff changeset
   897
        /** 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   898
         * Sets up on Ep0 for the transmission of a single zero-length packet.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   899
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   900
         * @return KErrNone if ZLP successfully set up; otherwise one of the 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   901
         *         system-wide error codes.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   902
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   903
        virtual TInt SendEp0ZeroByteStatusPacket() = 0;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   904
        
089413cdde3c 201028_02
hgs
parents:
diff changeset
   905
        /** 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   906
         * Stalls an endpoint (incl. Ep0).
089413cdde3c 201028_02
hgs
parents:
diff changeset
   907
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   908
         * Not applicable to Isochronous endpoints.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   909
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   910
         * @param aRealEndpoint The number of the endpoint to be stalled.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   911
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   912
         * @return KErrNone if endpoint successfully stalled; KErrArgument if 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   913
         *         endpoint number is invalid; otherwise one of the system-wide 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   914
         *         error codes.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   915
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   916
        virtual TInt StallEndpoint(TInt aRealEndpoint) = 0;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   917
        
089413cdde3c 201028_02
hgs
parents:
diff changeset
   918
        /** 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   919
         * Clears the stall condition on an endpoint (incl. Ep0).
089413cdde3c 201028_02
hgs
parents:
diff changeset
   920
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   921
         * Not applicable to Isochronous endpoints.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   922
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   923
         * @param aRealEndpoint The number of the endpoint to be stalled.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   924
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   925
         * @return KErrNone if endpoint successfully de-stalled; KErrArgument if
089413cdde3c 201028_02
hgs
parents:
diff changeset
   926
         *         endpoint number invalid; otherwise one of the system-wide 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   927
         *         error codes.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   928
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   929
        virtual TInt ClearStallEndpoint(TInt aRealEndpoint) = 0;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   930
        
089413cdde3c 201028_02
hgs
parents:
diff changeset
   931
        /**
089413cdde3c 201028_02
hgs
parents:
diff changeset
   932
         * Resets the data toggle bit for an endpoint (incl. Ep0).
089413cdde3c 201028_02
hgs
parents:
diff changeset
   933
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   934
         * Isochronous endpoints don't use data toggles.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   935
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   936
         * @param aRealEndpoint The number of the endpoint to be used.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   937
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   938
         * @return KErrNone if data toggle successfully reset; KErrArgument if 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   939
         *         endpoint number invalid; otherwise one of the system-wide 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   940
         *         error codes.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   941
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   942
        virtual TInt ResetDataToggle(TInt aRealEndpoint) = 0;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   943
        
089413cdde3c 201028_02
hgs
parents:
diff changeset
   944
        /** 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   945
         * Returns the frame number of the last received SOF packet.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   946
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   947
         * @return The (11-bit) frame number of the last received SOF packet.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   948
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   949
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   950
        virtual TInt SynchFrameNumber() const = 0;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   951
        
089413cdde3c 201028_02
hgs
parents:
diff changeset
   952
        /** 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   953
         * Stores the (11-bit) frame number that should be sent in response to
089413cdde3c 201028_02
hgs
parents:
diff changeset
   954
         * the next SYNCH_FRAME request(s).
089413cdde3c 201028_02
hgs
parents:
diff changeset
   955
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   956
         * @param aFrameNumber The (11-bit) frame number to be set
089413cdde3c 201028_02
hgs
parents:
diff changeset
   957
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   958
        virtual void SetSynchFrameNumber(TInt aFrameNumber) = 0;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   959
        
089413cdde3c 201028_02
hgs
parents:
diff changeset
   960
        /** 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   961
         * Starts peripheral controller.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   962
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   963
         * This initializes the device controller hardware before any other 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   964
         * operation can be performed. 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   965
         * Tasks to be carried out here might include:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   966
         *     - resetting the whole peripheral controller design
089413cdde3c 201028_02
hgs
parents:
diff changeset
   967
         *     - enabling the peripheral controller's clock
089413cdde3c 201028_02
hgs
parents:
diff changeset
   968
         *     - binding & enabling the peripheral controller (primary) interrupt
089413cdde3c 201028_02
hgs
parents:
diff changeset
   969
         *     - write meaningful values to some general controller registers
48
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   970
         *     - enabling the USB Reset, Suspend, and Resume interrupts
33
089413cdde3c 201028_02
hgs
parents:
diff changeset
   971
         *     - enabling the peripheral controller proper (for instance by 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   972
         *       setting an Enable bit).
089413cdde3c 201028_02
hgs
parents:
diff changeset
   973
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   974
         * This function is also used in an OTG environment when the
089413cdde3c 201028_02
hgs
parents:
diff changeset
   975
         * peripheral stack becomes enabled and the controller needs
089413cdde3c 201028_02
hgs
parents:
diff changeset
   976
         * to be started and enabled for peripheral use. If the HW
089413cdde3c 201028_02
hgs
parents:
diff changeset
   977
         * platform shares resources such as clocks and power between
089413cdde3c 201028_02
hgs
parents:
diff changeset
   978
         * the host and peripheral HW, it is probably easiest for the
089413cdde3c 201028_02
hgs
parents:
diff changeset
   979
         * PSL to handle the role switch based on the
089413cdde3c 201028_02
hgs
parents:
diff changeset
   980
         * MOtgControllerIf::SetControllerRole() call to the OTG
089413cdde3c 201028_02
hgs
parents:
diff changeset
   981
         * Controller interface.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   982
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   983
         * @return KErrNone if the controller was successfully started;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   984
         *         otherwise one of the system-wide error codes.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   985
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   986
         * @see usb_otg_shai.h, MOtgControllerIf::SetControllerRole()
089413cdde3c 201028_02
hgs
parents:
diff changeset
   987
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   988
        virtual TInt StartPeripheralController() = 0;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   989
    
089413cdde3c 201028_02
hgs
parents:
diff changeset
   990
        /** 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   991
         * Stops the peripheral controller.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   992
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   993
         * This basically makes undone what happened in StartPeripheralController(). 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   994
         * Tasks to be carried out here might include:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   995
         * - disabling peripheral controller proper.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   996
         * - disabling the USB Reset interrupt.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   997
         * - disabling & unbinding the peripheral controller (primary) interrupt.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   998
         * - disabling the peripheral controller's clock.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   999
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1000
         * This function is also used in an OTG environment when the peripheral 
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1001
         * stack becomes disabled and the peripheral hardware resources can be 
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1002
         * released. If the hardware platform shares resources such as clocks 
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1003
         * and power between the host and peripheral hardware, it is probably 
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1004
         * easiest for the PSL to handle the role switch based on the
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1005
         * MOtgControllerIf::SetControllerRole() call to the OTG Controller 
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1006
         * interface.
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1007
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1008
         * @return KErrNone if peripheral controller successfully stopped;
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1009
         *         otherwise one of the system-wide error codes.
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1010
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1011
         * @see usb_otg_shai.h, MOtgControllerIf::SetControllerRole()
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1012
         */         
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1013
        virtual TInt StopPeripheralController() = 0;
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1014
    
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1015
        /** 
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1016
         * This function is used to indicate that upper layers are ready to 
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1017
         * start operating as peripheral and want to connect to the USB bus
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1018
         * if possible.
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1019
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1020
         * Since this functionality is not part of the USB specification it
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1021
         * has to be explicitly supported, either by the peripheral controller
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1022
         * itself or by the hardware platform.
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1023
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1024
         * This call merely reports the upper layer readiness to connect, and
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1025
         * it is the responsiblity of the PSL to assess when all prerequisites
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1026
         * for connection are satisfied and physically connect when they are.
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1027
         * These prerequisites include:
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1028
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1029
         *  1. Upper layer readiness has been indicated by calling 
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1030
         *     PeripheralConnect().
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1031
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1032
         *  2. The peripheral controller has been started and enabled
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1033
         *     by StartPeripheralController().
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1034
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1035
         * The connection readiness assessment responsibility is delegated to the
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1036
         * PSL because the physical connection may sometimes be handled by a HW
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1037
         * state machine, thus making the correct SW-controlled connection time
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1038
         * HW-specific.
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1039
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1040
         * @return KErrNone if peripheral controller successfully connected;
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1041
         *         otherwise one of the system-wide error codes.
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1042
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1043
        virtual TInt PeripheralConnect() = 0;
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1044
    
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1045
        /** 
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1046
         * Called to indicate that upper layers no longer want to operate as the
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1047
         * peripheral and we must disconnect from the USB bus.
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1048
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1049
         * Since this functionality is not part of the USB specification it
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1050
         * has to be explicitly supported, either by the peripheral controller
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1051
         * itself or by the hardware platform.
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1052
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1053
         * @return KErrNone if controller is successfully disconnected;
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1054
         *         otherwise one of the system-wide error codes.
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1055
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1056
        virtual TInt PeripheralDisconnect() = 0;       
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1057
        
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1058
        /**
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1059
         * Implements anything peripheral controller might required by following
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1060
         * bus resume signal.
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1061
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1062
         * This function gets called by PIL after it has been notified (by
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1063
         * PSL) about the Suspend condition.
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1064
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1065
        virtual void Suspend() = 0;
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1066
        
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1067
        /**
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1068
         * Implements anything peripheral controller might required by following
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1069
         * bus resume signal.
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1070
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1071
         * This function gets called by PIL after it has been notified (by
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1072
         * PSL) about the Resume event.
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1073
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1074
        virtual void Resume() = 0;
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1075
        
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1076
        /**          
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1077
         * Implements anything peripheral controller might required by following
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1078
         * bus resume signal.
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1079
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1080
         * This function gets called by PIL after it has been notified (by
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1081
         * PSL) about the Reset event.
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1082
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1083
        virtual void Reset() = 0;
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1084
        
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1085
        /** 
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1086
         * PIL call this function to signal PSL that it has finished processing
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1087
         * a received Setup packet (on Ep0) and that PSL can now prepare 
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1088
         * itself for the next Ep0 reception.
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1089
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1090
         * The reason for having this function is that the situation where no 
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1091
         * Ep0 read has been set up by user and thus a received Setup packet
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1092
         * cannot immediately be delivered to user. Once user however 
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1093
         * sets up an Ep0 read, PIL then completes the request and eventually 
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1094
         * calls this function. We can implement some sort of flow-control by
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1095
         * this way.
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1096
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1097
        virtual void Ep0ReadSetupPktProceed() = 0;
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1098
        
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1099
        /** 
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1100
         * PIL call this function to signal PSL that it has finished processing 
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1101
         * a received Ep0 data packet and that PSL can now prepare itself for 
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1102
         * the next Ep0 reception.
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1103
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1104
         * The reason for having this function is that the situation where no 
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1105
         * Ep0 read has been set up by user and thus a received Setup packet
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1106
         * cannot immediately be delivered to user. Once user however 
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1107
         * sets up an Ep0 read, PIL then completes the request and eventually 
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1108
         * calls this function. We can implement some sort of flow-control by
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1109
         * this way.
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1110
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1111
        virtual void Ep0ReadDataPktProceed() = 0;
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1112
        
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1113
        /** 
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1114
         * Puts controller into a specific test mode (during HS operation only).
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1115
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1116
         * 9.4.9 Set Feature: "The transition to test mode must be complete no
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1117
         * later than 3 ms after the completion of the status stage of the 
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1118
         * request." (The status stage will have been completed immediately 
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1119
         * before this function gets called.)
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1120
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1121
         * @param aTestSelector The specific test mode selector.
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1122
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1123
         * @return KErrNone if the specified test mode was entered successfully;
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1124
         *         otherwise one of the system-wide error codes.
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1125
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1126
        virtual TInt EnterTestMode(TUsbTestModeSelector aTestSelector) = 0;
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1127
        };
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1128
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1129
   
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1130
    /**
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1131
     * This static class provides the interface which PSL implementation shall 
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1132
     * use to register itself to PIL layer.
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1133
     */
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1134
    NONSHARABLE_CLASS(UsbPeripheralPil)
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1135
        {
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1136
        public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1137
        /**
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1138
         * Registration function to be used by a stand-alone (non-OTG
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1139
         * port) Peripheral Controller PSL to register itself to the
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1140
         * PIL layer. Peripheral Controllers that are part of an
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1141
         * OTG-port are registered by the OTG Controller PSL (see
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1142
         * usb_otg_shai.h, function UsbOtgPil::RegisterOtgController).
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1143
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1144
         * The intended usage is that each stand-alone Peripheral
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1145
         * Controller PSL is a kernel extension that registers itself
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1146
         * to the USB Peripheral PIL layer by making this call from
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1147
         * their own kernel extension entry point function (or an
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1148
         * equivalent code that runs during bootup).
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1149
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1150
         * When the PSL makes this call, PIL layer will call 
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1151
         * SetPilCallbackInterface() function of the supplied Peripheral 
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1152
         * Controller interface to supply the PSL a reference to PIL 
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1153
         * callback interface to be used for reporting peripheral events.
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1154
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1155
         * @param aPeripheralControllerIf Reference to the Peripheral
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1156
         *   Controller interface implemented by the registering PSL.
48
21625e5de155 201035_01
hgs
parents: 33
diff changeset
  1157
         *   The PIL layer requires that the supplied reference
21625e5de155 201035_01
hgs
parents: 33
diff changeset
  1158
         *   remains valid indefinitely, as the Peripheral Controller
21625e5de155 201035_01
hgs
parents: 33
diff changeset
  1159
         *   cannot unregister.
33
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1160
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1161
         * @param aProperties Reference to an object describing the
48
21625e5de155 201035_01
hgs
parents: 33
diff changeset
  1162
         *   static properties of the Peripheral Controller. The PIL
21625e5de155 201035_01
hgs
parents: 33
diff changeset
  1163
         *   takes a copy and the PSL is free to release the properties
21625e5de155 201035_01
hgs
parents: 33
diff changeset
  1164
         *   object upon return.
33
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1165
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1166
         * @lib usbperipheralpil.lib
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1167
         */
48
21625e5de155 201035_01
hgs
parents: 33
diff changeset
  1168
        IMPORT_C static void RegisterPeripheralController(
21625e5de155 201035_01
hgs
parents: 33
diff changeset
  1169
            MPeripheralControllerIf& aPeripheralControllerIf, 
21625e5de155 201035_01
hgs
parents: 33
diff changeset
  1170
            const TPeripheralControllerProperties& aProperties );
33
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1171
    
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1172
        private:
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1173
        /**
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1174
         *  No instance of this class need to be created
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1175
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1176
        UsbPeripheralPil();
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1177
        };
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1178
    };
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1179
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1180
#include <usb/usb_peripheral_shai.inl>
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1181
    
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1182
#endif // USB_PERIPHERAL_SHAI_H
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1183
089413cdde3c 201028_02
hgs
parents:
diff changeset
  1184
// End of File