usb_plat/usb_shai_api/inc/usb_otg_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
089413cdde3c 201028_02
hgs
parents:
diff changeset
    18
/** @file
089413cdde3c 201028_02
hgs
parents:
diff changeset
    19
    @brief USB OTG SHAI header
48
21625e5de155 201035_01
hgs
parents: 33
diff changeset
    20
    @version 0.3.0
33
089413cdde3c 201028_02
hgs
parents:
diff changeset
    21
089413cdde3c 201028_02
hgs
parents:
diff changeset
    22
    This header specifies the USB OTG SHAI.
089413cdde3c 201028_02
hgs
parents:
diff changeset
    23
089413cdde3c 201028_02
hgs
parents:
diff changeset
    24
    @publishedDeviceAbstraction
089413cdde3c 201028_02
hgs
parents:
diff changeset
    25
*/
089413cdde3c 201028_02
hgs
parents:
diff changeset
    26
089413cdde3c 201028_02
hgs
parents:
diff changeset
    27
#ifndef USB_OTG_SHAI_H
089413cdde3c 201028_02
hgs
parents:
diff changeset
    28
#define USB_OTG_SHAI_H
089413cdde3c 201028_02
hgs
parents:
diff changeset
    29
089413cdde3c 201028_02
hgs
parents:
diff changeset
    30
// System includes
089413cdde3c 201028_02
hgs
parents:
diff changeset
    31
#include <kern_priv.h>
089413cdde3c 201028_02
hgs
parents:
diff changeset
    32
#include <usb/usb_common_shai.h> // Common types shared between the USB SHAIs
089413cdde3c 201028_02
hgs
parents:
diff changeset
    33
089413cdde3c 201028_02
hgs
parents:
diff changeset
    34
/**
089413cdde3c 201028_02
hgs
parents:
diff changeset
    35
 * This macro specifies the version of the USB OTG SHAI header in
089413cdde3c 201028_02
hgs
parents:
diff changeset
    36
 * binary coded decimal format. This allows the PSL layer to confirm a
089413cdde3c 201028_02
hgs
parents:
diff changeset
    37
 * certain definition is available, if needed. This can for example
089413cdde3c 201028_02
hgs
parents:
diff changeset
    38
 * make it possible for a new PSL to support compilation in an older
089413cdde3c 201028_02
hgs
parents:
diff changeset
    39
 * environment with old USB SHAI version that is missing some new
089413cdde3c 201028_02
hgs
parents:
diff changeset
    40
 * definitions.
089413cdde3c 201028_02
hgs
parents:
diff changeset
    41
 */
48
21625e5de155 201035_01
hgs
parents: 33
diff changeset
    42
#define USB_OTG_SHAI_VERSION 0x030
33
089413cdde3c 201028_02
hgs
parents:
diff changeset
    43
089413cdde3c 201028_02
hgs
parents:
diff changeset
    44
// The namespace is documented in file usb_common_shai.h, so it is not
089413cdde3c 201028_02
hgs
parents:
diff changeset
    45
// repeated here
089413cdde3c 201028_02
hgs
parents:
diff changeset
    46
namespace UsbShai
089413cdde3c 201028_02
hgs
parents:
diff changeset
    47
    {
089413cdde3c 201028_02
hgs
parents:
diff changeset
    48
    // Forward declarations
089413cdde3c 201028_02
hgs
parents:
diff changeset
    49
089413cdde3c 201028_02
hgs
parents:
diff changeset
    50
    class MOtgControllerIf;
089413cdde3c 201028_02
hgs
parents:
diff changeset
    51
    class MOtgObserverIf;
089413cdde3c 201028_02
hgs
parents:
diff changeset
    52
    class MPeripheralControllerIf;
089413cdde3c 201028_02
hgs
parents:
diff changeset
    53
    class TPeripheralControllerProperties;
089413cdde3c 201028_02
hgs
parents:
diff changeset
    54
    class MHostControllerIf;
089413cdde3c 201028_02
hgs
parents:
diff changeset
    55
    class THostControllerProperties;
089413cdde3c 201028_02
hgs
parents:
diff changeset
    56
089413cdde3c 201028_02
hgs
parents:
diff changeset
    57
    // Data types
089413cdde3c 201028_02
hgs
parents:
diff changeset
    58
089413cdde3c 201028_02
hgs
parents:
diff changeset
    59
    /**
089413cdde3c 201028_02
hgs
parents:
diff changeset
    60
     * Enumeration listing the possible states of the ID pin. Due to a
089413cdde3c 201028_02
hgs
parents:
diff changeset
    61
     * dependency between OTG and USB Battery Charging, this
089413cdde3c 201028_02
hgs
parents:
diff changeset
    62
     * enumeration lists also the special states introduced as part of
089413cdde3c 201028_02
hgs
parents:
diff changeset
    63
     * the Battery Charging Specification version 1.1.
089413cdde3c 201028_02
hgs
parents:
diff changeset
    64
     *
089413cdde3c 201028_02
hgs
parents:
diff changeset
    65
     * An OTG Controller PSL for a system that does not support
089413cdde3c 201028_02
hgs
parents:
diff changeset
    66
     * Accessory Charger Adapter (ACA) will always report only
089413cdde3c 201028_02
hgs
parents:
diff changeset
    67
     * EIdStateRidFloat or EIdStateRidGnd. An OTG Controller PSL that
089413cdde3c 201028_02
hgs
parents:
diff changeset
    68
     * supports ACA is required to report the ID pin state accurately
089413cdde3c 201028_02
hgs
parents:
diff changeset
    69
     * in order for the OTG State Machine to understand why VBUS
089413cdde3c 201028_02
hgs
parents:
diff changeset
    70
     * appears high even though we should default to the host role and
089413cdde3c 201028_02
hgs
parents:
diff changeset
    71
     * should normally drive VBUS ourselves (in case of RID_A).
089413cdde3c 201028_02
hgs
parents:
diff changeset
    72
     *
089413cdde3c 201028_02
hgs
parents:
diff changeset
    73
     * Reporting an ACA state via the ID pin notification mechanism is
089413cdde3c 201028_02
hgs
parents:
diff changeset
    74
     * not a substitute for reporting port type detection via the USB
089413cdde3c 201028_02
hgs
parents:
diff changeset
    75
     * Charger Detection SHAI that is documented separately in
48
21625e5de155 201035_01
hgs
parents: 33
diff changeset
    76
     * usb_charger_detection_shai.h. See documentation of
21625e5de155 201035_01
hgs
parents: 33
diff changeset
    77
     * MOtgObserverIf::NotifyIdPinAndVbusState() for more details.
33
089413cdde3c 201028_02
hgs
parents:
diff changeset
    78
     *
089413cdde3c 201028_02
hgs
parents:
diff changeset
    79
     * @see usb_charger_detection_shai.h
089413cdde3c 201028_02
hgs
parents:
diff changeset
    80
     */
089413cdde3c 201028_02
hgs
parents:
diff changeset
    81
    enum TIdPinState
089413cdde3c 201028_02
hgs
parents:
diff changeset
    82
        {
089413cdde3c 201028_02
hgs
parents:
diff changeset
    83
        /** ID pin is grounded */
089413cdde3c 201028_02
hgs
parents:
diff changeset
    84
        EIdStateRidGnd = 0,
089413cdde3c 201028_02
hgs
parents:
diff changeset
    85
089413cdde3c 201028_02
hgs
parents:
diff changeset
    86
        /** ID pin is floating */
089413cdde3c 201028_02
hgs
parents:
diff changeset
    87
        EIdStateRidFloat,
089413cdde3c 201028_02
hgs
parents:
diff changeset
    88
089413cdde3c 201028_02
hgs
parents:
diff changeset
    89
        /**
089413cdde3c 201028_02
hgs
parents:
diff changeset
    90
         * ID pin is in the RID_A range, as specified in Battery
089413cdde3c 201028_02
hgs
parents:
diff changeset
    91
         * Charging 1.1 specification
089413cdde3c 201028_02
hgs
parents:
diff changeset
    92
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
    93
        EIdStateRidA,
089413cdde3c 201028_02
hgs
parents:
diff changeset
    94
089413cdde3c 201028_02
hgs
parents:
diff changeset
    95
        /**
089413cdde3c 201028_02
hgs
parents:
diff changeset
    96
         * ID pin is in the RID_B range, as specified in Battery
089413cdde3c 201028_02
hgs
parents:
diff changeset
    97
         * Charging 1.1 specification
089413cdde3c 201028_02
hgs
parents:
diff changeset
    98
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
    99
        EIdStateRidB,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   100
089413cdde3c 201028_02
hgs
parents:
diff changeset
   101
        /**
089413cdde3c 201028_02
hgs
parents:
diff changeset
   102
         * ID pin is in the RID_C range, as specified in Battery
089413cdde3c 201028_02
hgs
parents:
diff changeset
   103
         * Charging 1.1 specification
089413cdde3c 201028_02
hgs
parents:
diff changeset
   104
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   105
        EIdStateRidC
089413cdde3c 201028_02
hgs
parents:
diff changeset
   106
        };
089413cdde3c 201028_02
hgs
parents:
diff changeset
   107
089413cdde3c 201028_02
hgs
parents:
diff changeset
   108
    /**
089413cdde3c 201028_02
hgs
parents:
diff changeset
   109
     * Enumeration listing the reported states of VBUS on the OTG
089413cdde3c 201028_02
hgs
parents:
diff changeset
   110
     * port.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   111
     *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   112
     * The threshold for Session Valid comparison is VOTG_SESS_VLD as
089413cdde3c 201028_02
hgs
parents:
diff changeset
   113
     * defined in the "On-The-Go and Embedded Host Supplement to the
089413cdde3c 201028_02
hgs
parents:
diff changeset
   114
     * USB Revision 2.0 Specification", Table 4-1 Electrical
089413cdde3c 201028_02
hgs
parents:
diff changeset
   115
     * Characteristics. The voltage level for a compliant
089413cdde3c 201028_02
hgs
parents:
diff changeset
   116
     * implementation can be anywhere between 0.8 V and 4.0 V.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   117
     */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   118
    enum TVbusState
089413cdde3c 201028_02
hgs
parents:
diff changeset
   119
        {
089413cdde3c 201028_02
hgs
parents:
diff changeset
   120
        /** VBUS is below the OTG Session Valid threshold */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   121
        EVbusStateNoSession = 0,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   122
089413cdde3c 201028_02
hgs
parents:
diff changeset
   123
        /**
089413cdde3c 201028_02
hgs
parents:
diff changeset
   124
         * VBUS is above the OTG Session Valid threshold, but below
089413cdde3c 201028_02
hgs
parents:
diff changeset
   125
         * the requirements of AVbusValid.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   126
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   127
        EVbusStateSessionValid,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   128
089413cdde3c 201028_02
hgs
parents:
diff changeset
   129
        /**
089413cdde3c 201028_02
hgs
parents:
diff changeset
   130
         * When operating as the A-device and driving VBUS, indicates
089413cdde3c 201028_02
hgs
parents:
diff changeset
   131
         * that the VBUS is in regulation, as defined in "On-The-Go
089413cdde3c 201028_02
hgs
parents:
diff changeset
   132
         * and Embedded Host Supplement to the USB Revision 2.0
089413cdde3c 201028_02
hgs
parents:
diff changeset
   133
         * Specification" Section 4.2.1, "VBUS Output Voltage and
089413cdde3c 201028_02
hgs
parents:
diff changeset
   134
         * Current".
089413cdde3c 201028_02
hgs
parents:
diff changeset
   135
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   136
         * When a VBUS session has been started as the A-device, the
089413cdde3c 201028_02
hgs
parents:
diff changeset
   137
         * OTG Controller PSL is required to report a VBUS level of
089413cdde3c 201028_02
hgs
parents:
diff changeset
   138
         * EVbusStateAVbusValid when VBUS has successfully risen to
089413cdde3c 201028_02
hgs
parents:
diff changeset
   139
         * allow the OTG State Machine to transition out of the
089413cdde3c 201028_02
hgs
parents:
diff changeset
   140
         * a_wait_vrise state.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   141
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   142
         * After VBUS has been successfully raised when operating as
089413cdde3c 201028_02
hgs
parents:
diff changeset
   143
         * the A-device, the PSL reporting a VBUS level less than
089413cdde3c 201028_02
hgs
parents:
diff changeset
   144
         * EVbusStateAVbusValid is considered as a report of a VBUS
089413cdde3c 201028_02
hgs
parents:
diff changeset
   145
         * error (over-current) situation and will result in ending
089413cdde3c 201028_02
hgs
parents:
diff changeset
   146
         * the session immediately.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   147
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   148
        EVbusStateAVbusValid
089413cdde3c 201028_02
hgs
parents:
diff changeset
   149
        };
089413cdde3c 201028_02
hgs
parents:
diff changeset
   150
089413cdde3c 201028_02
hgs
parents:
diff changeset
   151
    /**
089413cdde3c 201028_02
hgs
parents:
diff changeset
   152
     * Enumeration listing the state of the OTG 2.0 state machine.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   153
     *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   154
     * The states match those defined in the "On-The-Go and Embedded
089413cdde3c 201028_02
hgs
parents:
diff changeset
   155
     * Host Supplement to the USB Revision 2.0 Specification" for the
089413cdde3c 201028_02
hgs
parents:
diff changeset
   156
     * OTG A-device and B-device states.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   157
     */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   158
    enum TOtgState
089413cdde3c 201028_02
hgs
parents:
diff changeset
   159
        {
089413cdde3c 201028_02
hgs
parents:
diff changeset
   160
        /** The OTG state is b_idle */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   161
        EOtgStateBIdle = 0,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   162
089413cdde3c 201028_02
hgs
parents:
diff changeset
   163
        /** The OTG state is b_peripheral */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   164
        EOtgStateBPeripheral,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   165
089413cdde3c 201028_02
hgs
parents:
diff changeset
   166
        /** The OTG state is b_wait_acon */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   167
        EOtgStateBWaitAcon,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   168
089413cdde3c 201028_02
hgs
parents:
diff changeset
   169
        /** The OTG state is b_host */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   170
        EOtgStateBHost,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   171
089413cdde3c 201028_02
hgs
parents:
diff changeset
   172
        /** The OTG state is a_idle */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   173
        EOtgStateAIdle,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   174
089413cdde3c 201028_02
hgs
parents:
diff changeset
   175
        /** The OTG state is a_wait_vrise */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   176
        EOtgStateAWaitVrise,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   177
089413cdde3c 201028_02
hgs
parents:
diff changeset
   178
        /** The OTG state is a_wait_bcon */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   179
        EOtgStateAWaitBcon,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   180
089413cdde3c 201028_02
hgs
parents:
diff changeset
   181
        /** The OTG state is a_host */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   182
        EOtgStateAHost,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   183
089413cdde3c 201028_02
hgs
parents:
diff changeset
   184
        /** The OTG state is a_suspend */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   185
        EOtgStateASuspend,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   186
089413cdde3c 201028_02
hgs
parents:
diff changeset
   187
        /** The OTG state is a_peripheral */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   188
        EOtgStateAPeripheral,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   189
089413cdde3c 201028_02
hgs
parents:
diff changeset
   190
        /** The OTG state is a_wait_vfall */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   191
        EOtgStateAWaitVfall,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   192
089413cdde3c 201028_02
hgs
parents:
diff changeset
   193
        /** The OTG state is a_vbus_err */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   194
        EOtgStateAVbusErr
089413cdde3c 201028_02
hgs
parents:
diff changeset
   195
        };
089413cdde3c 201028_02
hgs
parents:
diff changeset
   196
089413cdde3c 201028_02
hgs
parents:
diff changeset
   197
    /**
089413cdde3c 201028_02
hgs
parents:
diff changeset
   198
     * Enumeration listing the roles that our device can be in.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   199
     */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   200
    enum TOtgRole
089413cdde3c 201028_02
hgs
parents:
diff changeset
   201
        {
089413cdde3c 201028_02
hgs
parents:
diff changeset
   202
        /**
089413cdde3c 201028_02
hgs
parents:
diff changeset
   203
         * Our device is idle, i.e. we are not operating in either the
089413cdde3c 201028_02
hgs
parents:
diff changeset
   204
         * peripheral or the host role. This role indicates that
089413cdde3c 201028_02
hgs
parents:
diff changeset
   205
         * neither the host controller nor the peripheral controller
089413cdde3c 201028_02
hgs
parents:
diff changeset
   206
         * needs to be activated and the PSL is free to power down the
089413cdde3c 201028_02
hgs
parents:
diff changeset
   207
         * controllers.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   208
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   209
        EOtgRoleIdle = 0,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   210
089413cdde3c 201028_02
hgs
parents:
diff changeset
   211
        /** Our device is operating in the peripheral role */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   212
        EOtgRolePeripheral,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   213
    
089413cdde3c 201028_02
hgs
parents:
diff changeset
   214
        /** Our device is operating in the host role */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   215
        EOtgRoleHost
089413cdde3c 201028_02
hgs
parents:
diff changeset
   216
        };
089413cdde3c 201028_02
hgs
parents:
diff changeset
   217
089413cdde3c 201028_02
hgs
parents:
diff changeset
   218
    // Class declaration
089413cdde3c 201028_02
hgs
parents:
diff changeset
   219
089413cdde3c 201028_02
hgs
parents:
diff changeset
   220
    /**
089413cdde3c 201028_02
hgs
parents:
diff changeset
   221
     * An interface class that needs to be implemented by each OTG
089413cdde3c 201028_02
hgs
parents:
diff changeset
   222
     * Controller PSL that registers to the USB stack.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   223
     *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   224
     * The USB OTG Stack will call the functions of this interface
089413cdde3c 201028_02
hgs
parents:
diff changeset
   225
     * from a DFC queued on the DFC queue supplied by the OTG
089413cdde3c 201028_02
hgs
parents:
diff changeset
   226
     * Controller PSL in TOtgControllerProperties::iControllerDfcQueue
089413cdde3c 201028_02
hgs
parents:
diff changeset
   227
     * when the OTG Controller PSL registered.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   228
     */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   229
    NONSHARABLE_CLASS( MOtgControllerIf )
089413cdde3c 201028_02
hgs
parents:
diff changeset
   230
        {
089413cdde3c 201028_02
hgs
parents:
diff changeset
   231
        public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   232
        /**
089413cdde3c 201028_02
hgs
parents:
diff changeset
   233
         * Called by the OTG stack to set the observer callback
089413cdde3c 201028_02
hgs
parents:
diff changeset
   234
         * interface to be used by the OTG Controller PSL to report
089413cdde3c 201028_02
hgs
parents:
diff changeset
   235
         * events.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   236
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   237
         * When the observer pointer is set to non-NULL value, the OTG
089413cdde3c 201028_02
hgs
parents:
diff changeset
   238
         * Controller PSL is required to immediately report the
089413cdde3c 201028_02
hgs
parents:
diff changeset
   239
         * current VBUS and ID states to the observer to get the
089413cdde3c 201028_02
hgs
parents:
diff changeset
   240
         * status of the OTG stack up to date.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   241
         *
48
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   242
         * If the OTG Controller PSL has detected that we are attached
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   243
         * to a bad device already before the OTG Observer was set by
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   244
         * this function, the PSL needs to immediately report ID
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   245
         * floating and VBUS low, and report the bad device by calling
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   246
         * MOtgObserverIf::NotifyBadDeviceAttached(). See the
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   247
         * documentation of MOtgObserverIf::NotifyBadDeviceAttached()
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   248
         * for more information on the detection of bad devices.
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   249
         *
33
089413cdde3c 201028_02
hgs
parents:
diff changeset
   250
         * @param aObserver Pointer to the observer interface to use,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   251
         *   or NULL when the OTG stack is being unloaded.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   252
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   253
        virtual void SetOtgObserver( MOtgObserverIf* aObserver ) = 0;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   254
089413cdde3c 201028_02
hgs
parents:
diff changeset
   255
        /**
089413cdde3c 201028_02
hgs
parents:
diff changeset
   256
         * When operating as the B-peripheral, the OTG stack calls
089413cdde3c 201028_02
hgs
parents:
diff changeset
   257
         * this function to indicate that the upper layers are
089413cdde3c 201028_02
hgs
parents:
diff changeset
   258
         * requesting our device to become the B-host. This means that
089413cdde3c 201028_02
hgs
parents:
diff changeset
   259
         * our OTG device will need start the HNP signalling by
089413cdde3c 201028_02
hgs
parents:
diff changeset
   260
         * disconnecting from the bus and allowing the A-device to
089413cdde3c 201028_02
hgs
parents:
diff changeset
   261
         * connect as the peripheral. The signalling shall be started
089413cdde3c 201028_02
hgs
parents:
diff changeset
   262
         * when the host has suspended the bus, which may already be
089413cdde3c 201028_02
hgs
parents:
diff changeset
   263
         * the case or happen later.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   264
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   265
         * This function call is only relevant for OTG controllers
089413cdde3c 201028_02
hgs
parents:
diff changeset
   266
         * that implement the HNP signalling in hardware and require
089413cdde3c 201028_02
hgs
parents:
diff changeset
   267
         * an explicit request from SW to start the HNP role switch.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   268
         * If the OTG controller is under SW control by the Host and
089413cdde3c 201028_02
hgs
parents:
diff changeset
   269
         * Peripheral Controller PSLs, the OTG Controller PSL should
089413cdde3c 201028_02
hgs
parents:
diff changeset
   270
         * ignore this call. The HNP signalling in the SW-controlled
089413cdde3c 201028_02
hgs
parents:
diff changeset
   271
         * case will be handled as normal calls to disconnect as
089413cdde3c 201028_02
hgs
parents:
diff changeset
   272
         * peripheral and then start the host controller.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   273
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   274
         * For all controller types, the Host Controller PSL and the
089413cdde3c 201028_02
hgs
parents:
diff changeset
   275
         * Peripheral Controller PSL associated with the OTG port are
089413cdde3c 201028_02
hgs
parents:
diff changeset
   276
         * required to report events as they normally would when
089413cdde3c 201028_02
hgs
parents:
diff changeset
   277
         * operating as the default role. For the Host Controller PSL,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   278
         * this includes notifying device connection, disconnection,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   279
         * and other relevant events via MRootHubCallbackIf. For the
089413cdde3c 201028_02
hgs
parents:
diff changeset
   280
         * Peripheral Controller PSL, this includes notifying bus
089413cdde3c 201028_02
hgs
parents:
diff changeset
   281
         * state events such as reset, suspend, and resume via
089413cdde3c 201028_02
hgs
parents:
diff changeset
   282
         * MUsbPeripheralPilCallbackIf::DeviceEventNotification.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   283
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   284
         * The OTG Controller PSL is not required to perform any
089413cdde3c 201028_02
hgs
parents:
diff changeset
   285
         * monitoring of HNP success or failure, or report that to the
089413cdde3c 201028_02
hgs
parents:
diff changeset
   286
         * PIL layer. The PSL is only responsible for making the
089413cdde3c 201028_02
hgs
parents:
diff changeset
   287
         * normal host and peripheral notifications mentioned above,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   288
         * and the PIL can see the HNP success or failure from those
089413cdde3c 201028_02
hgs
parents:
diff changeset
   289
         * notifications.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   290
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   291
        virtual void SetBHnpRequest() = 0;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   292
089413cdde3c 201028_02
hgs
parents:
diff changeset
   293
        /**
089413cdde3c 201028_02
hgs
parents:
diff changeset
   294
         * When operating as the B-device, the OTG stack calls this
089413cdde3c 201028_02
hgs
parents:
diff changeset
   295
         * function to request the PSL to drive SRP signalling on the
089413cdde3c 201028_02
hgs
parents:
diff changeset
   296
         * bus by pulsing the D+ dataline. The OTG Controller PSL may
089413cdde3c 201028_02
hgs
parents:
diff changeset
   297
         * synchronously drive the 5..10 millisecond pulse before
089413cdde3c 201028_02
hgs
parents:
diff changeset
   298
         * returning, but it may also do it asynchronously.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   299
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   300
         * The OTG PIL layer guarantees that the initial conditions
089413cdde3c 201028_02
hgs
parents:
diff changeset
   301
         * for driving SRP are satisfied before the PIL calls this
089413cdde3c 201028_02
hgs
parents:
diff changeset
   302
         * function. That is, the PIL guarantees that sufficient time
089413cdde3c 201028_02
hgs
parents:
diff changeset
   303
         * has elapsed since the end of the previous VBUS session (if
089413cdde3c 201028_02
hgs
parents:
diff changeset
   304
         * any) and the bus has been idle long enough.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   305
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   306
         * No special report from the OTG Controller PSL is required
089413cdde3c 201028_02
hgs
parents:
diff changeset
   307
         * in either success or fail case. In a success case, the
089413cdde3c 201028_02
hgs
parents:
diff changeset
   308
         * A-device will raise VBUS and the OTG state machine gets
089413cdde3c 201028_02
hgs
parents:
diff changeset
   309
         * this as a normal VBUS notifications from the OTG Controller
089413cdde3c 201028_02
hgs
parents:
diff changeset
   310
         * PSL. In a fail case, a timer in the upper layers will
089413cdde3c 201028_02
hgs
parents:
diff changeset
   311
         * expire, indicating to upper layers that the SRP was not
089413cdde3c 201028_02
hgs
parents:
diff changeset
   312
         * successful.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   313
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   314
        virtual void SignalBSrp() = 0;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   315
089413cdde3c 201028_02
hgs
parents:
diff changeset
   316
        /**
089413cdde3c 201028_02
hgs
parents:
diff changeset
   317
         * Called by the OTG state machine to indicate a change in the
089413cdde3c 201028_02
hgs
parents:
diff changeset
   318
         * required controller role.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   319
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   320
         * Whether the PSL needs to do any actions depends on the HW.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   321
         * For controllers that require special configuration in
089413cdde3c 201028_02
hgs
parents:
diff changeset
   322
         * changing a role (other than just starting the peripheral
089413cdde3c 201028_02
hgs
parents:
diff changeset
   323
         * controller or the host controller normally), the OTG
089413cdde3c 201028_02
hgs
parents:
diff changeset
   324
         * Controller should do that special configuration when it
089413cdde3c 201028_02
hgs
parents:
diff changeset
   325
         * gets this call.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   326
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   327
         * When changing a role, the OTG state machine will first
089413cdde3c 201028_02
hgs
parents:
diff changeset
   328
         * disable the stack for the previous role, causing that stack
089413cdde3c 201028_02
hgs
parents:
diff changeset
   329
         * to issue a stop request to the respective controller
089413cdde3c 201028_02
hgs
parents:
diff changeset
   330
         * PSL. The OTG state machine will then call this function
089413cdde3c 201028_02
hgs
parents:
diff changeset
   331
         * SetControllerRole() to set the controller role to the
089413cdde3c 201028_02
hgs
parents:
diff changeset
   332
         * target role. Following this, the OTG state machine will
089413cdde3c 201028_02
hgs
parents:
diff changeset
   333
         * enable the stack for the target role, causing that stack to
089413cdde3c 201028_02
hgs
parents:
diff changeset
   334
         * issue a start request to the respective controller PSL.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   335
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   336
         * @param aControllerRole The OTG role to set our device to
089413cdde3c 201028_02
hgs
parents:
diff changeset
   337
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   338
         * @return KErrNone if the OTG Controller successfully set the
089413cdde3c 201028_02
hgs
parents:
diff changeset
   339
         *   role or required no actions. Otherwise a system-wide
089413cdde3c 201028_02
hgs
parents:
diff changeset
   340
         *   error code.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   341
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   342
        virtual TInt SetControllerRole( TOtgRole aControllerRole ) = 0;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   343
        };
089413cdde3c 201028_02
hgs
parents:
diff changeset
   344
089413cdde3c 201028_02
hgs
parents:
diff changeset
   345
089413cdde3c 201028_02
hgs
parents:
diff changeset
   346
    /**
089413cdde3c 201028_02
hgs
parents:
diff changeset
   347
     * An interface class implemented by the USB stack to allow the
089413cdde3c 201028_02
hgs
parents:
diff changeset
   348
     * OTG controller to report events to the USB stack. This includes
089413cdde3c 201028_02
hgs
parents:
diff changeset
   349
     * events like VBUS rising and falling, ID pin becoming grounded
089413cdde3c 201028_02
hgs
parents:
diff changeset
   350
     * or floating, and SRP being detected.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   351
     *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   352
     * It is required that the OTG Controller PSL calls these
089413cdde3c 201028_02
hgs
parents:
diff changeset
   353
     * functions in the context of the DFC queue supplied by the OTG
089413cdde3c 201028_02
hgs
parents:
diff changeset
   354
     * Controller PSL in TOtgControllerProperties::iControllerDfcQueue
089413cdde3c 201028_02
hgs
parents:
diff changeset
   355
     * when the OTG Controller PSL registered.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   356
     */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   357
    NONSHARABLE_CLASS( MOtgObserverIf )
089413cdde3c 201028_02
hgs
parents:
diff changeset
   358
        {
089413cdde3c 201028_02
hgs
parents:
diff changeset
   359
        public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   360
        /**
48
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   361
         * Notify the current ID-pin and VBUS state to the OTG
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   362
         * stack. This needs to be called by the OTG Controller PSL
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   363
         * everytime there is a change in the ID pin or VBUS
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   364
         * level. Redundant notifications that don't change the
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   365
         * previously reported state are silently ignored, so the
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   366
         * function is safe to call without worrying about extra
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   367
         * calls.
33
089413cdde3c 201028_02
hgs
parents:
diff changeset
   368
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   369
         * When USB Battery Charging is supported on the OTG-capable
089413cdde3c 201028_02
hgs
parents:
diff changeset
   370
         * port, there is a dependency between normal USB
089413cdde3c 201028_02
hgs
parents:
diff changeset
   371
         * functionality and USB Battery Charging (see
089413cdde3c 201028_02
hgs
parents:
diff changeset
   372
         * usb_charger_detection_shai.h and specifically the
089413cdde3c 201028_02
hgs
parents:
diff changeset
   373
         * description of class MChargerDetectorIf). In this case it
089413cdde3c 201028_02
hgs
parents:
diff changeset
   374
         * is the responsibility of the OTG Controller PSL to
089413cdde3c 201028_02
hgs
parents:
diff changeset
   375
         * communicate with the Charger Detector PSL (which it may
089413cdde3c 201028_02
hgs
parents:
diff changeset
   376
         * implement itself) with respect to VBUS and ID pin events.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   377
         *
48
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   378
         * Due to Accessory Charger Adapter specified in Battery
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   379
         * Charging 1.1, the ID pin state is relevant for both
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   380
         * charging and OTG. The USB OTG SHAI and the USB Charger
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   381
         * Detection SHAI receive the ID pin notifications from the
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   382
         * PSL independently. For ID and VBUS events that indicate
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   383
         * connection to an Accessory Charger Adapter, it is required
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   384
         * that a BC 1.1 capable PSL reports the state to both the
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   385
         * Charger Detector PSL Observer (via
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   386
         * MChargerDetectorObserverIf::NotifyPortType), and the OTG
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   387
         * Observer (via this function). The reporting order is not
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   388
         * significant and can be freely chosen by the PSL.
33
089413cdde3c 201028_02
hgs
parents:
diff changeset
   389
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   390
         * When VBUS rises on the OTG-capable port that is currently
089413cdde3c 201028_02
hgs
parents:
diff changeset
   391
         * the B-device and fully supports Battery Charging
089413cdde3c 201028_02
hgs
parents:
diff changeset
   392
         * Specification Revision 1.1, the Charger Detector PSL and
089413cdde3c 201028_02
hgs
parents:
diff changeset
   393
         * the OTG Controller PSL need to together guarantee that Data
089413cdde3c 201028_02
hgs
parents:
diff changeset
   394
         * Contact Detect is completed and the port type detected
48
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   395
         * before reporting the ID and VBUS state. When the port type
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   396
         * is known, the port type needs to be notified to the Charger
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   397
         * Detector PSL Observer, followed by notifying the ID and
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   398
         * VBUS state to the OTG Observer (via this function).
33
089413cdde3c 201028_02
hgs
parents:
diff changeset
   399
         *
48
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   400
         * Where Data Contact Detect is not supported, the initial
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   401
         * B-device VBUS rise event needs to be notified to the OTG
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   402
         * Observer (via this function) immediately and charger
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   403
         * detection needs to proceed in parallel with the upper
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   404
         * layers preparing the USB personality. This is necessary in
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   405
         * order to ensure that we can fulfill the requirement to
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   406
         * connect to the bus within a second, while still making as
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   407
         * long as possible charger detection cycle to minimize the
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   408
         * chances of false detections due to datalines not making
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   409
         * contact yet.
33
089413cdde3c 201028_02
hgs
parents:
diff changeset
   410
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   411
         * The OTG Controller PSL, the Peripheral Controller PSL and
089413cdde3c 201028_02
hgs
parents:
diff changeset
   412
         * the Charger Detector PSL need to together guarantee that
089413cdde3c 201028_02
hgs
parents:
diff changeset
   413
         * the peripheral controller does not attempt to connect to
089413cdde3c 201028_02
hgs
parents:
diff changeset
   414
         * the bus while charger detection is still on-going. When
089413cdde3c 201028_02
hgs
parents:
diff changeset
   415
         * detection has been completed and upper layers have
089413cdde3c 201028_02
hgs
parents:
diff changeset
   416
         * indicated readiness to connect to the bus (see
089413cdde3c 201028_02
hgs
parents:
diff changeset
   417
         * MPeripheralControllerIf::PeripheralConnect(), the
089413cdde3c 201028_02
hgs
parents:
diff changeset
   418
         * Peripheral Controller PSL must connect to the bus.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   419
         *
48
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   420
         * @param aIdPinState The current ID-pin state
33
089413cdde3c 201028_02
hgs
parents:
diff changeset
   421
         * @param aVbusState The current VBUS state
089413cdde3c 201028_02
hgs
parents:
diff changeset
   422
         */
48
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   423
        virtual void NotifyIdPinAndVbusState( TIdPinState aIdPinState,
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   424
                                              TVbusState  aVbusState ) = 0;
33
089413cdde3c 201028_02
hgs
parents:
diff changeset
   425
089413cdde3c 201028_02
hgs
parents:
diff changeset
   426
        /**
089413cdde3c 201028_02
hgs
parents:
diff changeset
   427
         * When operating as the A-device with VBUS low, notify the
089413cdde3c 201028_02
hgs
parents:
diff changeset
   428
         * OTG stack that SRP signalling has been detected on the
089413cdde3c 201028_02
hgs
parents:
diff changeset
   429
         * bus. The OTG Controller must detect the SRP signalling from
089413cdde3c 201028_02
hgs
parents:
diff changeset
   430
         * dataline pulsing, as specified in the "On-The-Go and
089413cdde3c 201028_02
hgs
parents:
diff changeset
   431
         * Embedded Host Supplement to the USB Revision 2.0
089413cdde3c 201028_02
hgs
parents:
diff changeset
   432
         * Specification".
089413cdde3c 201028_02
hgs
parents:
diff changeset
   433
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   434
        virtual void NotifySrpDetected() = 0;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   435
089413cdde3c 201028_02
hgs
parents:
diff changeset
   436
        /**
089413cdde3c 201028_02
hgs
parents:
diff changeset
   437
         * This function is called by the OTG Controller PSL to report
089413cdde3c 201028_02
hgs
parents:
diff changeset
   438
         * that it has detected the attachment of a device (A or B)
089413cdde3c 201028_02
hgs
parents:
diff changeset
   439
         * that is malfunctioning in a low-level way that prevents
089413cdde3c 201028_02
hgs
parents:
diff changeset
   440
         * attempting communication with the connected device. Such
089413cdde3c 201028_02
hgs
parents:
diff changeset
   441
         * cases may include but are not necessarily limited to:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   442
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   443
         * 1. A B-device that drives its upstream VBUS. To prevent
089413cdde3c 201028_02
hgs
parents:
diff changeset
   444
         * damage to the VBUS charge pump in our A-device, it may be
089413cdde3c 201028_02
hgs
parents:
diff changeset
   445
         * necessary to prevent VBUS from being raised by our device.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   446
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   447
         * 2. A B-device that presents a single-ended one (both
089413cdde3c 201028_02
hgs
parents:
diff changeset
   448
         * datalines high) on the bus.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   449
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   450
         * The detection of such malfunctioning devices is left to the
089413cdde3c 201028_02
hgs
parents:
diff changeset
   451
         * OTG Controller PSL, as this type of malfunctions are
089413cdde3c 201028_02
hgs
parents:
diff changeset
   452
         * low-level problems not necessarily detectable with the
089413cdde3c 201028_02
hgs
parents:
diff changeset
   453
         * standard inputs available to the OTG state machine.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   454
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   455
         * To ensure that the OTG state machine stays in an idle
089413cdde3c 201028_02
hgs
parents:
diff changeset
   456
         * state, the OTG Controller PSL should report ID floating and
089413cdde3c 201028_02
hgs
parents:
diff changeset
   457
         * VBUS low prior to reporting the bad device attachment by
089413cdde3c 201028_02
hgs
parents:
diff changeset
   458
         * calling this function. When the bad device is detached, the
089413cdde3c 201028_02
hgs
parents:
diff changeset
   459
         * OTG Controller PSL can resume reporting ID and VBUS state
089413cdde3c 201028_02
hgs
parents:
diff changeset
   460
         * truthfully, and must call NotifyBadDeviceDetached() to
089413cdde3c 201028_02
hgs
parents:
diff changeset
   461
         * allow the upper layers to see the error condition has been
089413cdde3c 201028_02
hgs
parents:
diff changeset
   462
         * cleared.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   463
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   464
         * @see NotifyBadDeviceDetached()
089413cdde3c 201028_02
hgs
parents:
diff changeset
   465
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   466
        virtual void NotifyBadDeviceAttached() = 0;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   467
089413cdde3c 201028_02
hgs
parents:
diff changeset
   468
        /**
089413cdde3c 201028_02
hgs
parents:
diff changeset
   469
         * This function is called by the OTG Controller PSL to report
089413cdde3c 201028_02
hgs
parents:
diff changeset
   470
         * that a previously detected bad device has been detached.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   471
         * See NotifyBadDeviceAttached() for description of this
089413cdde3c 201028_02
hgs
parents:
diff changeset
   472
         * functionality.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   473
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   474
         * @see NotifyBadDeviceAttached()
089413cdde3c 201028_02
hgs
parents:
diff changeset
   475
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   476
        virtual void NotifyBadDeviceDetached() = 0;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   477
        };
089413cdde3c 201028_02
hgs
parents:
diff changeset
   478
089413cdde3c 201028_02
hgs
parents:
diff changeset
   479
089413cdde3c 201028_02
hgs
parents:
diff changeset
   480
    /**
089413cdde3c 201028_02
hgs
parents:
diff changeset
   481
     * This class specifies the information provided by an OTG
089413cdde3c 201028_02
hgs
parents:
diff changeset
   482
     * Controller PSL when registering to the USB OTG stack.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   483
     *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   484
     * The PSL should prepare for the possibility that members may be
089413cdde3c 201028_02
hgs
parents:
diff changeset
   485
     * added to the end of this class in later SHAI versions if new
089413cdde3c 201028_02
hgs
parents:
diff changeset
   486
     * information is needed to support new features. The PSL should
089413cdde3c 201028_02
hgs
parents:
diff changeset
   487
     * not use this class as a direct member in an object that is not
089413cdde3c 201028_02
hgs
parents:
diff changeset
   488
     * allowed to grow in size due to binary compatibility reasons.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   489
     *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   490
     * @see UsbOtgPil::RegisterOtgController()
089413cdde3c 201028_02
hgs
parents:
diff changeset
   491
     */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   492
    NONSHARABLE_CLASS( TOtgControllerProperties )
089413cdde3c 201028_02
hgs
parents:
diff changeset
   493
        {
089413cdde3c 201028_02
hgs
parents:
diff changeset
   494
        public: // Types and constants
089413cdde3c 201028_02
hgs
parents:
diff changeset
   495
        /**
089413cdde3c 201028_02
hgs
parents:
diff changeset
   496
         * A bitmask type used to indicate the static capabilities of
089413cdde3c 201028_02
hgs
parents:
diff changeset
   497
         * the OTG Controller.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   498
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   499
        typedef TUint32 TOtgCaps;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   500
089413cdde3c 201028_02
hgs
parents:
diff changeset
   501
        public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   502
        /**
089413cdde3c 201028_02
hgs
parents:
diff changeset
   503
         * Inline constructor for the OTG Controller properties
089413cdde3c 201028_02
hgs
parents:
diff changeset
   504
         * object. This is inline rather than an exported function to
089413cdde3c 201028_02
hgs
parents:
diff changeset
   505
         * prevent a binary break in a case where an older PSL binary
089413cdde3c 201028_02
hgs
parents:
diff changeset
   506
         * might provide the constructor a smaller object due to the
089413cdde3c 201028_02
hgs
parents:
diff changeset
   507
         * PSL being compiled against an older version of the SHAI
089413cdde3c 201028_02
hgs
parents:
diff changeset
   508
         * header. When it's inline, the function is always in sync
089413cdde3c 201028_02
hgs
parents:
diff changeset
   509
         * with the object size.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   510
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   511
         * We slightly violate the coding conventions which say that
089413cdde3c 201028_02
hgs
parents:
diff changeset
   512
         * inline functions should be in their own file. We don't want
089413cdde3c 201028_02
hgs
parents:
diff changeset
   513
         * to double the number of USB SHAI headers just for sake of a
089413cdde3c 201028_02
hgs
parents:
diff changeset
   514
         * trivial constructor.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   515
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   516
        inline TOtgControllerProperties() :
089413cdde3c 201028_02
hgs
parents:
diff changeset
   517
            iCapabilities(0),
089413cdde3c 201028_02
hgs
parents:
diff changeset
   518
            iControllerDfcQueue(NULL)
089413cdde3c 201028_02
hgs
parents:
diff changeset
   519
            {
089413cdde3c 201028_02
hgs
parents:
diff changeset
   520
            };
089413cdde3c 201028_02
hgs
parents:
diff changeset
   521
089413cdde3c 201028_02
hgs
parents:
diff changeset
   522
        public: // Data
089413cdde3c 201028_02
hgs
parents:
diff changeset
   523
        /**
089413cdde3c 201028_02
hgs
parents:
diff changeset
   524
         * A bitmask specifying the static capabilities of this OTG
089413cdde3c 201028_02
hgs
parents:
diff changeset
   525
         * Controller. No capabilities are specified at the moment and
089413cdde3c 201028_02
hgs
parents:
diff changeset
   526
         * the PSL shall fill this field with a zero value.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   527
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   528
         * The field is added for sake of future proofing the binary
089413cdde3c 201028_02
hgs
parents:
diff changeset
   529
         * compatibility of the OTG SHAI. By having a field reserved
089413cdde3c 201028_02
hgs
parents:
diff changeset
   530
         * for capability bits, we can later specify bits to indicate
089413cdde3c 201028_02
hgs
parents:
diff changeset
   531
         * added virtual functions or extension to this controller
089413cdde3c 201028_02
hgs
parents:
diff changeset
   532
         * properties structure. The PIL layer can then at runtime
089413cdde3c 201028_02
hgs
parents:
diff changeset
   533
         * confirm the existence of the new functions or fields and
089413cdde3c 201028_02
hgs
parents:
diff changeset
   534
         * safely support an older binary, if we choose to.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   535
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   536
        TOtgCaps iCapabilities;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   537
089413cdde3c 201028_02
hgs
parents:
diff changeset
   538
        /**
089413cdde3c 201028_02
hgs
parents:
diff changeset
   539
         * Pointer to a DFC queue that will be used for DFCs of this
089413cdde3c 201028_02
hgs
parents:
diff changeset
   540
         * controller and the associated peripheral and host
089413cdde3c 201028_02
hgs
parents:
diff changeset
   541
         * controllers.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   542
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   543
         * The OTG Controller must supply a pointer to a dedicated DFC
089413cdde3c 201028_02
hgs
parents:
diff changeset
   544
         * queue that has been created for this OTG Controller PSL.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   545
         * Both the OTG Controller PSL itself and the OTG stack must
089413cdde3c 201028_02
hgs
parents:
diff changeset
   546
         * queue their DFCs for this controller in this DFC queue to
089413cdde3c 201028_02
hgs
parents:
diff changeset
   547
         * ensure the code is running in the same context.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   548
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   549
         * Furthermore, it is the responsibility of the OTG Controller
089413cdde3c 201028_02
hgs
parents:
diff changeset
   550
         * PSL that registers to ensure that the Peripheral and Host
089413cdde3c 201028_02
hgs
parents:
diff changeset
   551
         * Controller PSLs that are registered at the same time use
089413cdde3c 201028_02
hgs
parents:
diff changeset
   552
         * the same DFC Queue in their respective properties object.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   553
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   554
        TDfcQue* iControllerDfcQueue;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   555
        };
089413cdde3c 201028_02
hgs
parents:
diff changeset
   556
089413cdde3c 201028_02
hgs
parents:
diff changeset
   557
089413cdde3c 201028_02
hgs
parents:
diff changeset
   558
    /**
089413cdde3c 201028_02
hgs
parents:
diff changeset
   559
     * A static class implemented by the USB OTG PIL layer to allow
089413cdde3c 201028_02
hgs
parents:
diff changeset
   560
     * the OTG controller PSL to register to the PIL layer.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   561
     */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   562
    NONSHARABLE_CLASS( UsbOtgPil )
089413cdde3c 201028_02
hgs
parents:
diff changeset
   563
        {
089413cdde3c 201028_02
hgs
parents:
diff changeset
   564
        public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   565
        /**
089413cdde3c 201028_02
hgs
parents:
diff changeset
   566
         * Registration function to be used by the OTG Controller PSL
089413cdde3c 201028_02
hgs
parents:
diff changeset
   567
         * to register itself and the associated peripheral and host
089413cdde3c 201028_02
hgs
parents:
diff changeset
   568
         * controller PSLs to the PIL layer.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   569
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   570
         * The intended usage is that OTG Controller PSL (of which
089413cdde3c 201028_02
hgs
parents:
diff changeset
   571
         * only one can exists in a given system) is a kernel
089413cdde3c 201028_02
hgs
parents:
diff changeset
   572
         * extension that registers itself and the associated
089413cdde3c 201028_02
hgs
parents:
diff changeset
   573
         * peripheral and host controller PSLs to the USB PIL layer by
089413cdde3c 201028_02
hgs
parents:
diff changeset
   574
         * making this call from its kernel extension entry point
089413cdde3c 201028_02
hgs
parents:
diff changeset
   575
         * function (or an equivalent code that runs during bootup).
089413cdde3c 201028_02
hgs
parents:
diff changeset
   576
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   577
         * @param aOtgControllerIf Reference to the OTG Controller
48
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   578
         *   interface implemented by the registering PSL. The PIL
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   579
         *   layer requires that the supplied reference remains valid
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   580
         *   indefinitely, as the OTG Controller cannot unregister.
33
089413cdde3c 201028_02
hgs
parents:
diff changeset
   581
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   582
         * @param aOtgProperties Reference to an object describing the
48
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   583
         *   static properties of the OTG Controller. The PIL takes a
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   584
         *   copy and the PSL is free to release the properties object
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   585
         *   upon return.
33
089413cdde3c 201028_02
hgs
parents:
diff changeset
   586
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   587
         * @param aPeripheralControllerIf Reference to the Peripheral
089413cdde3c 201028_02
hgs
parents:
diff changeset
   588
         *   Controller interface implemented by the PSL controlling the
089413cdde3c 201028_02
hgs
parents:
diff changeset
   589
         *   Peripheral Controller associated with the registering OTG
48
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   590
         *   port. The PIL layer requires that the supplied reference
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   591
         *   remains valid indefinitely, as the OTG Controller cannot
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   592
         *   unregister.
33
089413cdde3c 201028_02
hgs
parents:
diff changeset
   593
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   594
         * @param aPeripheralProperties Reference to an object
089413cdde3c 201028_02
hgs
parents:
diff changeset
   595
         *   describing the static properties of the Peripheral
48
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   596
         *   Controller. The PIL takes a copy and the PSL is free to
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   597
         *   release the properties object upon return.
33
089413cdde3c 201028_02
hgs
parents:
diff changeset
   598
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   599
         * @param aHostControllerIf Reference to the Host Controller
089413cdde3c 201028_02
hgs
parents:
diff changeset
   600
         *   interface implemented by the PSL controlling the Host
48
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   601
         *   Controller associated with the registering OTG port. The
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   602
         *   PIL layer requires that the supplied reference remains
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   603
         *   valid indefinitely, as the OTG Controller cannot
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   604
         *   unregister.
33
089413cdde3c 201028_02
hgs
parents:
diff changeset
   605
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   606
         * @param aHostProperties Reference to an object describing the
48
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   607
         *   static properties of the Host Controller. The PIL takes a
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   608
         *   copy and the PSL is free to release the properties object
21625e5de155 201035_01
hgs
parents: 33
diff changeset
   609
         *   upon return.
33
089413cdde3c 201028_02
hgs
parents:
diff changeset
   610
         *
089413cdde3c 201028_02
hgs
parents:
diff changeset
   611
         * @lib usbotghostpil.lib
089413cdde3c 201028_02
hgs
parents:
diff changeset
   612
         */
089413cdde3c 201028_02
hgs
parents:
diff changeset
   613
        IMPORT_C static void RegisterOtgController(
089413cdde3c 201028_02
hgs
parents:
diff changeset
   614
            MOtgControllerIf&                      aOtgControllerIf,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   615
            const TOtgControllerProperties&        aOtgProperties,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   616
            MPeripheralControllerIf&               aPeripheralControllerIf, 
089413cdde3c 201028_02
hgs
parents:
diff changeset
   617
            const TPeripheralControllerProperties& aPeripheralProperties,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   618
            MHostControllerIf&                     aHostControllerIf,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   619
            const THostControllerProperties&       aHostProperties );
089413cdde3c 201028_02
hgs
parents:
diff changeset
   620
        };
089413cdde3c 201028_02
hgs
parents:
diff changeset
   621
    };
089413cdde3c 201028_02
hgs
parents:
diff changeset
   622
089413cdde3c 201028_02
hgs
parents:
diff changeset
   623
#endif // USB_OTG_SHAI_H
089413cdde3c 201028_02
hgs
parents:
diff changeset
   624
089413cdde3c 201028_02
hgs
parents:
diff changeset
   625
/* End of File */