Add pulse encoder and usb host to imxrt (not tested)
This commit is contained in:
parent
0fb6a82223
commit
7c151557c3
@ -76,7 +76,17 @@ if GetDepend(['BSP_USING_DMA']):
|
|||||||
src += ['MIMXRT1052/drivers/fsl_edma.c']
|
src += ['MIMXRT1052/drivers/fsl_edma.c']
|
||||||
src += ['MIMXRT1052/drivers/fsl_lpuart_edma.c']
|
src += ['MIMXRT1052/drivers/fsl_lpuart_edma.c']
|
||||||
src += ['MIMXRT1052/drivers/fsl_lpspi_edma.c']
|
src += ['MIMXRT1052/drivers/fsl_lpspi_edma.c']
|
||||||
|
|
||||||
|
if GetDepend(['BSP_USING_PULSE_ENCODER']):
|
||||||
|
src += ['MIMXRT1052/drivers/fsl_enc.c']
|
||||||
|
|
||||||
|
#Adding this as XBAR is used in pin mux
|
||||||
|
src += ['MIMXRT1052/drivers/fsl_xbara.c']
|
||||||
|
src += ['MIMXRT1052/drivers/fsl_xbarb.c']
|
||||||
|
|
||||||
|
#fsl os abstract files
|
||||||
|
src += ['MIMXRT1052/drivers/fsl_os_abstraction_rtthread.c']
|
||||||
|
src += ['MIMXRT1052/drivers/generic_list.c']
|
||||||
|
|
||||||
group = DefineGroup('Libraries', src, depend = [''], CPPPATH = path)
|
group = DefineGroup('Libraries', src, depend = [''], CPPPATH = path)
|
||||||
|
|
||||||
|
@ -54,15 +54,22 @@ if GetDepend('BSP_USING_AUDIO'):
|
|||||||
|
|
||||||
if GetDepend('BSP_USING_SDIO'):
|
if GetDepend('BSP_USING_SDIO'):
|
||||||
src += ['drv_sdio.c']
|
src += ['drv_sdio.c']
|
||||||
|
|
||||||
if GetDepend('BSP_USING_USB_DEVICE'):
|
if GetDepend('BSP_USING_PULSE_ENCODER'):
|
||||||
|
src += ['drv_pulse_encoder.c']
|
||||||
|
|
||||||
|
if GetDepend('RT_USING_USB_DEVICE'):
|
||||||
src += ['drv_usbd.c']
|
src += ['drv_usbd.c']
|
||||||
src += Glob('usb/device/*.c')
|
src += Glob('usb/device/*.c')
|
||||||
|
|
||||||
if GetDepend('BSP_USING_USB_DEVICE'):
|
if GetDepend('RT_USING_USB_DEVICE') or GetDepend('RT_USING_USB_HOST'):
|
||||||
src += Glob('usb/phy/*.c')
|
src += Glob('usb/phy/*.c')
|
||||||
CPPDEFINES += ['ENDIANNESS']
|
CPPDEFINES += ['ENDIANNESS']
|
||||||
|
|
||||||
|
if GetDepend('RT_USING_USB_HOST'):
|
||||||
|
src += ['drv_usbh.c']
|
||||||
|
src += Glob('usb/host/*.c')
|
||||||
|
|
||||||
path = [cwd,cwd + '/config']
|
path = [cwd,cwd + '/config']
|
||||||
|
|
||||||
group = DefineGroup('Drivers', src, depend = [''], CPPPATH = path, CPPDEFINES=CPPDEFINES)
|
group = DefineGroup('Drivers', src, depend = [''], CPPPATH = path, CPPDEFINES=CPPDEFINES)
|
||||||
|
@ -1,31 +1,9 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2015 - 2016, Freescale Semiconductor, Inc.
|
* Copyright (c) 2015 - 2016, Freescale Semiconductor, Inc.
|
||||||
* Copyright 2016 NXP
|
* Copyright 2016 - 2019 NXP
|
||||||
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without modification,
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
* are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* o Redistributions of source code must retain the above copyright notice, this list
|
|
||||||
* of conditions and the following disclaimer.
|
|
||||||
*
|
|
||||||
* o Redistributions in binary form must reproduce the above copyright notice, this
|
|
||||||
* list of conditions and the following disclaimer in the documentation and/or
|
|
||||||
* other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* o Neither the name of the copyright holder nor the names of its
|
|
||||||
* contributors may be used to endorse or promote products derived from this
|
|
||||||
* software without specific prior written permission.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
|
||||||
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _USB_HOST_H_
|
#ifndef _USB_HOST_H_
|
||||||
@ -34,6 +12,7 @@
|
|||||||
#include <usb/include/usb.h>
|
#include <usb/include/usb.h>
|
||||||
#include <usb/include/usb_misc.h>
|
#include <usb/include/usb_misc.h>
|
||||||
#include <usb/include/usb_spec.h>
|
#include <usb/include/usb_spec.h>
|
||||||
|
#include <usb/include/usb_host_config.h>
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Definitions
|
* Definitions
|
||||||
@ -68,6 +47,16 @@ typedef enum _usb_host_event
|
|||||||
kUSB_HostEventDetach, /*!< Device is detached */
|
kUSB_HostEventDetach, /*!< Device is detached */
|
||||||
kUSB_HostEventEnumerationDone, /*!< Device's enumeration is done and the device is supported */
|
kUSB_HostEventEnumerationDone, /*!< Device's enumeration is done and the device is supported */
|
||||||
kUSB_HostEventNotSupported, /*!< Device's enumeration is done and the device is not supported */
|
kUSB_HostEventNotSupported, /*!< Device's enumeration is done and the device is not supported */
|
||||||
|
/*! Device's enumeration failed due to errors
|
||||||
|
* fail reason is put in the high 2 bytes of callback event code.
|
||||||
|
* kStatus_USB_TransferFailed - the transfer failed.
|
||||||
|
* kStatus_USB_TransferCancel - transfer is canceled by application.
|
||||||
|
* kStatus_USB_Error - parsing descriptor failed, the power cannot satisfy device's requirement,
|
||||||
|
* device addresss allocation failed, transfer is not enough
|
||||||
|
* or the transfer API failed.
|
||||||
|
* kStatus_USB_AllocFail - malloc failed.
|
||||||
|
*/
|
||||||
|
kUSB_HostEventEnumerationFail,
|
||||||
#if ((defined(USB_HOST_CONFIG_LOW_POWER_MODE)) && (USB_HOST_CONFIG_LOW_POWER_MODE > 0U))
|
#if ((defined(USB_HOST_CONFIG_LOW_POWER_MODE)) && (USB_HOST_CONFIG_LOW_POWER_MODE > 0U))
|
||||||
kUSB_HostEventNotSuspended, /*!< Suspend failed */
|
kUSB_HostEventNotSuspended, /*!< Suspend failed */
|
||||||
kUSB_HostEventSuspended, /*!< Suspend successful */
|
kUSB_HostEventSuspended, /*!< Suspend successful */
|
||||||
@ -103,7 +92,60 @@ typedef enum _usb_host_dev_info
|
|||||||
kUSB_HostGetConfigurationDes, /*!< Device's configuration descriptor pointer */
|
kUSB_HostGetConfigurationDes, /*!< Device's configuration descriptor pointer */
|
||||||
kUSB_HostGetConfigurationLength, /*!< Device's configuration descriptor pointer */
|
kUSB_HostGetConfigurationLength, /*!< Device's configuration descriptor pointer */
|
||||||
} usb_host_dev_info_t;
|
} usb_host_dev_info_t;
|
||||||
|
/*! @brief Request type */
|
||||||
|
typedef enum _usb_host_request_type
|
||||||
|
{
|
||||||
|
kRequestDevice = 1U, /*!< Control request object is device */
|
||||||
|
kRequestInterface, /*!< Control request object is interface */
|
||||||
|
kRequestEndpoint, /*!< Control request object is endpoint */
|
||||||
|
} usb_host_request_type_t;
|
||||||
|
/*! @brief For USB_REQUEST_STANDARD_GET_DESCRIPTOR and USB_REQUEST_STANDARD_SET_DESCRIPTOR */
|
||||||
|
typedef struct _usb_host_process_descriptor_param
|
||||||
|
{
|
||||||
|
uint8_t descriptorType; /*!< See the usb_spec.h, such as the USB_DESCRIPTOR_TYPE_DEVICE */
|
||||||
|
uint8_t descriptorIndex; /*!< The descriptor index is used to select a specific descriptor (only for configuration
|
||||||
|
and string descriptors) when several descriptors of the same type are implemented in a
|
||||||
|
device */
|
||||||
|
uint8_t languageId; /*!< It specifies the language ID for string descriptors or is reset to zero for other
|
||||||
|
descriptors */
|
||||||
|
uint8_t *descriptorBuffer; /*!< Buffer pointer */
|
||||||
|
uint16_t descriptorLength; /*!< Buffer data length */
|
||||||
|
} usb_host_process_descriptor_param_t;
|
||||||
|
/*! @brief For USB_REQUEST_STANDARD_CLEAR_FEATURE and USB_REQUEST_STANDARD_SET_FEATURE */
|
||||||
|
typedef struct _usb_host_process_feature_param
|
||||||
|
{
|
||||||
|
uint8_t requestType; /*!< See the #usb_host_request_type_t */
|
||||||
|
uint8_t featureSelector; /*!< Set/cleared feature */
|
||||||
|
uint8_t interfaceOrEndpoint; /*!< Interface or end pointer */
|
||||||
|
} usb_host_process_feature_param_t;
|
||||||
|
/*! @brief For USB_REQUEST_STANDARD_GET_INTERFACE */
|
||||||
|
typedef struct _usb_host_get_interface_param
|
||||||
|
{
|
||||||
|
uint8_t interface; /*!< Interface number */
|
||||||
|
uint8_t *alternateInterfaceBuffer; /*!< Save the transfer result */
|
||||||
|
} usb_host_get_interface_param_t;
|
||||||
|
|
||||||
|
/*! @brief For USB_REQUEST_STANDARD_GET_STATUS */
|
||||||
|
typedef struct _usb_host_get_status_param
|
||||||
|
{
|
||||||
|
uint16_t statusSelector; /*!< Interface number, the end pointer number or OTG status selector */
|
||||||
|
uint8_t requestType; /*!< See the #usb_host_request_type_t */
|
||||||
|
uint8_t *statusBuffer; /*!< Save the transfer result */
|
||||||
|
} usb_host_get_status_param_t;
|
||||||
|
|
||||||
|
/*! @brief For USB_REQUEST_STANDARD_SET_INTERFACE */
|
||||||
|
typedef struct _usb_host_set_interface_param
|
||||||
|
{
|
||||||
|
uint8_t alternateSetting; /*!< Alternate setting value */
|
||||||
|
uint8_t interface; /*!< Interface number */
|
||||||
|
} usb_host_set_interface_param_t;
|
||||||
|
|
||||||
|
/*! @brief For USB_REQUEST_STANDARD_SYNCH_FRAME */
|
||||||
|
typedef struct _usb_host_synch_frame_param
|
||||||
|
{
|
||||||
|
uint8_t endpoint; /*!< Endpoint number */
|
||||||
|
uint8_t *frameNumberBuffer; /*!< Frame number data buffer */
|
||||||
|
} usb_host_synch_frame_param_t;
|
||||||
/*!
|
/*!
|
||||||
* @brief Host callback function typedef.
|
* @brief Host callback function typedef.
|
||||||
*
|
*
|
||||||
@ -243,8 +285,8 @@ typedef struct _usb_host_pipe_init
|
|||||||
/*! @brief Cancel transfer parameter structure */
|
/*! @brief Cancel transfer parameter structure */
|
||||||
typedef struct _usb_host_cancel_param
|
typedef struct _usb_host_cancel_param
|
||||||
{
|
{
|
||||||
usb_host_pipe_handle pipeHandle; /*!< Cancelling pipe handle*/
|
usb_host_pipe_handle pipeHandle; /*!< Canceling pipe handle*/
|
||||||
usb_host_transfer_t *transfer; /*!< Cancelling transfer*/
|
usb_host_transfer_t *transfer; /*!< Canceling transfer*/
|
||||||
} usb_host_cancel_param_t;
|
} usb_host_cancel_param_t;
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
@ -342,7 +384,7 @@ extern usb_status_t USB_HostHelperParseAlternateSetting(usb_host_interface_handl
|
|||||||
* @retval kStatus_USB_InvalidParameter The deviceHandle instance don't belong to hostHandle instance.
|
* @retval kStatus_USB_InvalidParameter The deviceHandle instance don't belong to hostHandle instance.
|
||||||
*/
|
*/
|
||||||
extern usb_status_t USB_HostRemoveDevice(usb_host_handle hostHandle, usb_device_handle deviceHandle);
|
extern usb_status_t USB_HostRemoveDevice(usb_host_handle hostHandle, usb_device_handle deviceHandle);
|
||||||
|
#if (defined(USB_HOST_CONFIG_KHCI) && (USB_HOST_CONFIG_KHCI > 0U))
|
||||||
/*!
|
/*!
|
||||||
* @brief KHCI task function.
|
* @brief KHCI task function.
|
||||||
*
|
*
|
||||||
@ -353,7 +395,8 @@ extern usb_status_t USB_HostRemoveDevice(usb_host_handle hostHandle, usb_device_
|
|||||||
* @param[in] hostHandle The host handle.
|
* @param[in] hostHandle The host handle.
|
||||||
*/
|
*/
|
||||||
extern void USB_HostKhciTaskFunction(void *hostHandle);
|
extern void USB_HostKhciTaskFunction(void *hostHandle);
|
||||||
|
#endif
|
||||||
|
#if (defined(USB_HOST_CONFIG_EHCI) && (USB_HOST_CONFIG_EHCI > 0U))
|
||||||
/*!
|
/*!
|
||||||
* @brief EHCI task function.
|
* @brief EHCI task function.
|
||||||
*
|
*
|
||||||
@ -364,7 +407,8 @@ extern void USB_HostKhciTaskFunction(void *hostHandle);
|
|||||||
* @param[in] hostHandle The host handle.
|
* @param[in] hostHandle The host handle.
|
||||||
*/
|
*/
|
||||||
extern void USB_HostEhciTaskFunction(void *hostHandle);
|
extern void USB_HostEhciTaskFunction(void *hostHandle);
|
||||||
|
#endif
|
||||||
|
#if (defined(USB_HOST_CONFIG_OHCI) && (USB_HOST_CONFIG_OHCI > 0U))
|
||||||
/*!
|
/*!
|
||||||
* @brief OHCI task function.
|
* @brief OHCI task function.
|
||||||
*
|
*
|
||||||
@ -375,7 +419,8 @@ extern void USB_HostEhciTaskFunction(void *hostHandle);
|
|||||||
* @param[in] hostHandle The host handle.
|
* @param[in] hostHandle The host handle.
|
||||||
*/
|
*/
|
||||||
extern void USB_HostOhciTaskFunction(void *hostHandle);
|
extern void USB_HostOhciTaskFunction(void *hostHandle);
|
||||||
|
#endif
|
||||||
|
#if (defined(USB_HOST_CONFIG_IP3516HS) && (USB_HOST_CONFIG_IP3516HS > 0U))
|
||||||
/*!
|
/*!
|
||||||
* @brief IP3516HS task function.
|
* @brief IP3516HS task function.
|
||||||
*
|
*
|
||||||
@ -386,7 +431,8 @@ extern void USB_HostOhciTaskFunction(void *hostHandle);
|
|||||||
* @param[in] hostHandle The host handle.
|
* @param[in] hostHandle The host handle.
|
||||||
*/
|
*/
|
||||||
extern void USB_HostIp3516HsTaskFunction(void *hostHandle);
|
extern void USB_HostIp3516HsTaskFunction(void *hostHandle);
|
||||||
|
#endif
|
||||||
|
#if (defined(USB_HOST_CONFIG_KHCI) && (USB_HOST_CONFIG_KHCI > 0U))
|
||||||
/*!
|
/*!
|
||||||
* @brief Device KHCI ISR function.
|
* @brief Device KHCI ISR function.
|
||||||
*
|
*
|
||||||
@ -395,7 +441,8 @@ extern void USB_HostIp3516HsTaskFunction(void *hostHandle);
|
|||||||
* @param[in] hostHandle The host handle.
|
* @param[in] hostHandle The host handle.
|
||||||
*/
|
*/
|
||||||
extern void USB_HostKhciIsrFunction(void *hostHandle);
|
extern void USB_HostKhciIsrFunction(void *hostHandle);
|
||||||
|
#endif
|
||||||
|
#if (defined(USB_HOST_CONFIG_EHCI) && (USB_HOST_CONFIG_EHCI > 0U))
|
||||||
/*!
|
/*!
|
||||||
* @brief Device EHCI ISR function.
|
* @brief Device EHCI ISR function.
|
||||||
*
|
*
|
||||||
@ -404,7 +451,8 @@ extern void USB_HostKhciIsrFunction(void *hostHandle);
|
|||||||
* @param[in] hostHandle The host handle.
|
* @param[in] hostHandle The host handle.
|
||||||
*/
|
*/
|
||||||
extern void USB_HostEhciIsrFunction(void *hostHandle);
|
extern void USB_HostEhciIsrFunction(void *hostHandle);
|
||||||
|
#endif
|
||||||
|
#if (defined(USB_HOST_CONFIG_OHCI) && (USB_HOST_CONFIG_OHCI > 0U))
|
||||||
/*!
|
/*!
|
||||||
* @brief Device OHCI ISR function.
|
* @brief Device OHCI ISR function.
|
||||||
*
|
*
|
||||||
@ -413,7 +461,8 @@ extern void USB_HostEhciIsrFunction(void *hostHandle);
|
|||||||
* @param[in] hostHandle The host handle.
|
* @param[in] hostHandle The host handle.
|
||||||
*/
|
*/
|
||||||
extern void USB_HostOhciIsrFunction(void *hostHandle);
|
extern void USB_HostOhciIsrFunction(void *hostHandle);
|
||||||
|
#endif
|
||||||
|
#if (defined(USB_HOST_CONFIG_IP3516HS) && (USB_HOST_CONFIG_IP3516HS > 0U))
|
||||||
/*!
|
/*!
|
||||||
* @brief Device IP3516HS ISR function.
|
* @brief Device IP3516HS ISR function.
|
||||||
*
|
*
|
||||||
@ -422,7 +471,7 @@ extern void USB_HostOhciIsrFunction(void *hostHandle);
|
|||||||
* @param[in] hostHandle The host handle.
|
* @param[in] hostHandle The host handle.
|
||||||
*/
|
*/
|
||||||
extern void USB_HostIp3516HsIsrFunction(void *hostHandle);
|
extern void USB_HostIp3516HsIsrFunction(void *hostHandle);
|
||||||
|
#endif
|
||||||
/*! @}*/
|
/*! @}*/
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@ -566,7 +615,7 @@ extern usb_status_t USB_HostFreeTransfer(usb_host_handle hostHandle, usb_host_tr
|
|||||||
* This function sends the USB standard request packet.
|
* This function sends the USB standard request packet.
|
||||||
*
|
*
|
||||||
* @param[in] deviceHandle The device handle for control transfer.
|
* @param[in] deviceHandle The device handle for control transfer.
|
||||||
* @param[in] usbRequest A USB standard request code. Se the usb_spec.h.
|
* @param[in] usbRequest A USB standard request code. See the usb_spec.h.
|
||||||
* @param[in] transfer The used transfer.
|
* @param[in] transfer The used transfer.
|
||||||
* @param[in] param The parameter structure is different for different request, see
|
* @param[in] param The parameter structure is different for different request, see
|
||||||
* usb_host_framework.h.
|
* usb_host_framework.h.
|
||||||
@ -694,10 +743,10 @@ extern usb_status_t USB_HostL1ResumeDeviceResquest(usb_host_handle hostHandle,
|
|||||||
/*!
|
/*!
|
||||||
* @brief Update the lpm param.
|
* @brief Update the lpm param.
|
||||||
*
|
*
|
||||||
* The function is used to configuure the lpm token.
|
* The function is used to configure the lpm token.
|
||||||
*
|
*
|
||||||
* @param[in] hostHandle The host handle.
|
* @param[in] hostHandle The host handle.
|
||||||
* @param[in] lpmParam HIRD vaule and whether enable remotewakeup.
|
* @param[in] lpmParam HIRD value and whether enable remotewakeup.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
extern usb_status_t USB_HostL1SleepDeviceResquestConfig(usb_host_handle hostHandle, uint8_t *lpmParam);
|
extern usb_status_t USB_HostL1SleepDeviceResquestConfig(usb_host_handle hostHandle, uint8_t *lpmParam);
|
||||||
@ -715,6 +764,19 @@ extern usb_status_t USB_HostUpdateHwTick(usb_host_handle hostHandle, uint64_t ti
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if ((defined(USB_HOST_CONFIG_BATTERY_CHARGER)) && (USB_HOST_CONFIG_BATTERY_CHARGER > 0U))
|
||||||
|
/*!
|
||||||
|
* @brief Set the charger type. It is only supported on RT600 currently.
|
||||||
|
*
|
||||||
|
* The set charger type becomes valid in next attach.
|
||||||
|
*
|
||||||
|
* @param[in] hostHandle The host handle.
|
||||||
|
* @param[in] type.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
extern usb_status_t USB_HostSetChargerType(usb_host_handle hostHandle, uint8_t type);
|
||||||
|
#endif
|
||||||
|
|
||||||
/*! @}*/
|
/*! @}*/
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,31 +1,9 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2015, Freescale Semiconductor, Inc.
|
* Copyright (c) 2015, Freescale Semiconductor, Inc.
|
||||||
* Copyright 2016 NXP
|
* Copyright 2016 NXP
|
||||||
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without modification,
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
* are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* o Redistributions of source code must retain the above copyright notice, this list
|
|
||||||
* of conditions and the following disclaimer.
|
|
||||||
*
|
|
||||||
* o Redistributions in binary form must reproduce the above copyright notice, this
|
|
||||||
* list of conditions and the following disclaimer in the documentation and/or
|
|
||||||
* other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* o Neither the name of the copyright holder nor the names of its
|
|
||||||
* contributors may be used to endorse or promote products derived from this
|
|
||||||
* software without specific prior written permission.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
|
||||||
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _USB_HOST_DEV_MNG_H_
|
#ifndef _USB_HOST_DEV_MNG_H_
|
||||||
@ -79,11 +57,11 @@ typedef struct _usb_host_device_instance
|
|||||||
usb_descriptor_device_t *deviceDescriptor; /*!< Standard device descriptor */
|
usb_descriptor_device_t *deviceDescriptor; /*!< Standard device descriptor */
|
||||||
usb_host_pipe_handle controlPipe; /*!< Device's control pipe */
|
usb_host_pipe_handle controlPipe; /*!< Device's control pipe */
|
||||||
uint8_t *configurationDesc; /*!< Configuration descriptor pointer */
|
uint8_t *configurationDesc; /*!< Configuration descriptor pointer */
|
||||||
|
uint8_t *enumBuffer; /*!< Buffer for enumeration */
|
||||||
uint16_t configurationLen; /*!< Configuration descriptor length */
|
uint16_t configurationLen; /*!< Configuration descriptor length */
|
||||||
uint16_t configurationValue; /*!< Configuration index */
|
|
||||||
uint8_t interfaceStatus[USB_HOST_CONFIG_CONFIGURATION_MAX_INTERFACE]; /*!< Interfaces' status, please reference to
|
uint8_t interfaceStatus[USB_HOST_CONFIG_CONFIGURATION_MAX_INTERFACE]; /*!< Interfaces' status, please reference to
|
||||||
#usb_host_interface_state_t */
|
#usb_host_interface_state_t */
|
||||||
uint8_t *enumBuffer; /*!< Buffer for enumeration */
|
uint8_t configurationValue; /*!< Configuration index */
|
||||||
uint8_t state; /*!< Device state for enumeration */
|
uint8_t state; /*!< Device state for enumeration */
|
||||||
uint8_t enumRetries; /*!< Re-enumeration when error in control transfer */
|
uint8_t enumRetries; /*!< Re-enumeration when error in control transfer */
|
||||||
uint8_t stallRetries; /*!< Re-transfer when stall */
|
uint8_t stallRetries; /*!< Re-transfer when stall */
|
||||||
@ -104,11 +82,10 @@ typedef struct _usb_host_device_instance
|
|||||||
|
|
||||||
typedef struct _usb_host_enum_process_entry
|
typedef struct _usb_host_enum_process_entry
|
||||||
{
|
{
|
||||||
uint8_t successState; /*!< When the last step is successful, the next state value */
|
usb_host_device_enumeration_status_t successState; /*!< When the last step is successful, the next state value */
|
||||||
uint8_t retryState; /*!< When the last step need retry, the next state value */
|
usb_host_device_enumeration_status_t retryState; /*!< When the last step need retry, the next state value */
|
||||||
usb_status_t (*process)(usb_host_device_instance_t *deviceInstance); /*!< When the last step transfer is done, the
|
/*! When the last step transfer is done, the function is used to process the transfer data */
|
||||||
function is used to process the transfer
|
usb_status_t (*process)(usb_host_device_instance_t *deviceInstance, uint32_t dataLength);
|
||||||
data */
|
|
||||||
} usb_host_enum_process_entry_t;
|
} usb_host_enum_process_entry_t;
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,31 +1,9 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2015, Freescale Semiconductor, Inc.
|
* Copyright (c) 2015, Freescale Semiconductor, Inc.
|
||||||
* Copyright 2016 NXP
|
* Copyright 2016,2019 NXP
|
||||||
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without modification,
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
* are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* o Redistributions of source code must retain the above copyright notice, this list
|
|
||||||
* of conditions and the following disclaimer.
|
|
||||||
*
|
|
||||||
* o Redistributions in binary form must reproduce the above copyright notice, this
|
|
||||||
* list of conditions and the following disclaimer in the documentation and/or
|
|
||||||
* other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* o Neither the name of the copyright holder nor the names of its
|
|
||||||
* contributors may be used to endorse or promote products derived from this
|
|
||||||
* software without specific prior written permission.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
|
||||||
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _USB_HOST_CONTROLLER_EHCI_H_
|
#ifndef _USB_HOST_CONTROLLER_EHCI_H_
|
||||||
@ -39,95 +17,95 @@
|
|||||||
* Definitions
|
* Definitions
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
/* EHCI host macros */
|
/* EHCI host macros */
|
||||||
#define EHCI_HOST_T_INVALID_VALUE (1U)
|
#define EHCI_HOST_T_INVALID_VALUE (1U)
|
||||||
#define EHCI_HOST_POINTER_TYPE_ITD (0x00U)
|
#define EHCI_HOST_POINTER_TYPE_ITD (0x00U)
|
||||||
#define EHCI_HOST_POINTER_TYPE_QH (0x00000002U)
|
#define EHCI_HOST_POINTER_TYPE_QH (0x00000002U)
|
||||||
#define EHCI_HOST_POINTER_TYPE_SITD (0x00000004U)
|
#define EHCI_HOST_POINTER_TYPE_SITD (0x00000004U)
|
||||||
#define EHCI_HOST_POINTER_TYPE_FSTN (0x00000006U)
|
#define EHCI_HOST_POINTER_TYPE_FSTN (0x00000006U)
|
||||||
#define EHCI_HOST_POINTER_TYPE_MASK (0x00000006U)
|
#define EHCI_HOST_POINTER_TYPE_MASK (0x00000006U)
|
||||||
#define EHCI_HOST_POINTER_ADDRESS_MASK (0xFFFFFFE0U)
|
#define EHCI_HOST_POINTER_ADDRESS_MASK (0xFFFFFFE0U)
|
||||||
#define EHCI_HOST_PID_OUT (0U)
|
#define EHCI_HOST_PID_OUT (0UL)
|
||||||
#define EHCI_HOST_PID_IN (1U)
|
#define EHCI_HOST_PID_IN (1UL)
|
||||||
#define EHCI_HOST_PID_SETUP (2U)
|
#define EHCI_HOST_PID_SETUP (2UL)
|
||||||
|
|
||||||
#define EHCI_HOST_QH_RL_SHIFT (28U)
|
#define EHCI_HOST_QH_RL_SHIFT (28U)
|
||||||
#define EHCI_HOST_QH_RL_MASK (0xF0000000U)
|
#define EHCI_HOST_QH_RL_MASK (0xF0000000U)
|
||||||
#define EHCI_HOST_QH_C_SHIFT (27U)
|
#define EHCI_HOST_QH_C_SHIFT (27U)
|
||||||
#define EHCI_HOST_QH_MAX_PACKET_LENGTH_SHIFT (16U)
|
#define EHCI_HOST_QH_MAX_PACKET_LENGTH_SHIFT (16U)
|
||||||
#define EHCI_HOST_QH_MAX_PACKET_LENGTH_MASK (0x07FF0000U)
|
#define EHCI_HOST_QH_MAX_PACKET_LENGTH_MASK (0x07FF0000U)
|
||||||
#define EHCI_HOST_QH_H_SHIFT (15U)
|
#define EHCI_HOST_QH_H_SHIFT (15U)
|
||||||
#define EHCI_HOST_QH_DTC_SHIFT (14U)
|
#define EHCI_HOST_QH_DTC_SHIFT (14U)
|
||||||
#define EHCI_HOST_QH_EPS_SHIFT (12U)
|
#define EHCI_HOST_QH_EPS_SHIFT (12U)
|
||||||
#define EHCI_HOST_QH_ENDPT_SHIFT (8U)
|
#define EHCI_HOST_QH_ENDPT_SHIFT (8U)
|
||||||
#define EHCI_HOST_QH_I_SHIFT (7U)
|
#define EHCI_HOST_QH_I_SHIFT (7U)
|
||||||
#define EHCI_HOST_QH_DEVICE_ADDRESS_SHIFT (0U)
|
#define EHCI_HOST_QH_DEVICE_ADDRESS_SHIFT (0U)
|
||||||
#define EHCI_HOST_QH_MULT_SHIFT (30U)
|
#define EHCI_HOST_QH_MULT_SHIFT (30U)
|
||||||
#define EHCI_HOST_QH_PORT_NUMBER_SHIFT (23U)
|
#define EHCI_HOST_QH_PORT_NUMBER_SHIFT (23U)
|
||||||
#define EHCI_HOST_QH_HUB_ADDR_SHIFT (16U)
|
#define EHCI_HOST_QH_HUB_ADDR_SHIFT (16U)
|
||||||
#define EHCI_HOST_QH_UFRAME_CMASK_SHIFT (8U)
|
#define EHCI_HOST_QH_UFRAME_CMASK_SHIFT (8U)
|
||||||
#define EHCI_HOST_QH_UFRAME_SMASK_SHIFT (0U)
|
#define EHCI_HOST_QH_UFRAME_SMASK_SHIFT (0U)
|
||||||
#define EHCI_HOST_QH_STATUS_ERROR_MASK (0x0000007EU)
|
#define EHCI_HOST_QH_STATUS_ERROR_MASK (0x0000007EU)
|
||||||
#define EHCI_HOST_QH_STATUS_NOSTALL_ERROR_MASK (0x0000003EU)
|
#define EHCI_HOST_QH_STATUS_NOSTALL_ERROR_MASK (0x0000003EU)
|
||||||
|
|
||||||
#define EHCI_HOST_QTD_DT_SHIFT (31U)
|
#define EHCI_HOST_QTD_DT_SHIFT (31U)
|
||||||
#define EHCI_HOST_QTD_DT_MASK (0x80000000U)
|
#define EHCI_HOST_QTD_DT_MASK (0x80000000U)
|
||||||
#define EHCI_HOST_QTD_TOTAL_BYTES_SHIFT (16U)
|
#define EHCI_HOST_QTD_TOTAL_BYTES_SHIFT (16U)
|
||||||
#define EHCI_HOST_QTD_TOTAL_BYTES_MASK (0x7FFF0000U)
|
#define EHCI_HOST_QTD_TOTAL_BYTES_MASK (0x7FFF0000U)
|
||||||
#define EHCI_HOST_QTD_IOC_MASK (0x00008000U)
|
#define EHCI_HOST_QTD_IOC_MASK (0x00008000U)
|
||||||
#define EHCI_HOST_QTD_C_PAGE_SHIFT (12U)
|
#define EHCI_HOST_QTD_C_PAGE_SHIFT (12U)
|
||||||
#define EHCI_HOST_QTD_CERR_SHIFT (10U)
|
#define EHCI_HOST_QTD_CERR_SHIFT (10U)
|
||||||
#define EHCI_HOST_QTD_CERR_MAX_VALUE (0x00000003U)
|
#define EHCI_HOST_QTD_CERR_MAX_VALUE (0x00000003UL)
|
||||||
#define EHCI_HOST_QTD_PID_CODE_SHIFT (8U)
|
#define EHCI_HOST_QTD_PID_CODE_SHIFT (8U)
|
||||||
#define EHCI_HOST_QTD_STATUS_SHIFT (0U)
|
#define EHCI_HOST_QTD_STATUS_SHIFT (0U)
|
||||||
#define EHCI_HOST_QTD_CURRENT_OFFSET_MASK (0x00000FFFU)
|
#define EHCI_HOST_QTD_CURRENT_OFFSET_MASK (0x00000FFFU)
|
||||||
#define EHCI_HOST_QTD_BUFFER_POINTER_SHIFT (12U)
|
#define EHCI_HOST_QTD_BUFFER_POINTER_SHIFT (12U)
|
||||||
#define EHCI_HOST_QTD_STATUS_ACTIVE_MASK (0x00000080U)
|
#define EHCI_HOST_QTD_STATUS_ACTIVE_MASK (0x00000080U)
|
||||||
#define EHCI_HOST_QTD_STATUS_MASK (0x000000ffU)
|
#define EHCI_HOST_QTD_STATUS_MASK (0x000000ffU)
|
||||||
#define EHCI_HOST_QTD_STATUS_ERROR_MASK (0x0000007EU)
|
#define EHCI_HOST_QTD_STATUS_ERROR_MASK (0x0000007EU)
|
||||||
#define EHCI_HOST_QTD_STATUS_STALL_ERROR_MASK (0x00000040U)
|
#define EHCI_HOST_QTD_STATUS_STALL_ERROR_MASK (0x00000040U)
|
||||||
|
|
||||||
#define EHCI_HOST_ITD_STATUS_ACTIVE_MASK (0x80000000U)
|
#define EHCI_HOST_ITD_STATUS_ACTIVE_MASK (0x80000000U)
|
||||||
#define EHCI_HOST_ITD_TRANSACTION_LEN_SHIFT (16U)
|
#define EHCI_HOST_ITD_TRANSACTION_LEN_SHIFT (16U)
|
||||||
#define EHCI_HOST_ITD_TRANSACTION_LEN_MASK (0x0FFF0000U)
|
#define EHCI_HOST_ITD_TRANSACTION_LEN_MASK (0x0FFF0000U)
|
||||||
#define EHCI_HOST_ITD_IOC_SHIFT (15U)
|
#define EHCI_HOST_ITD_IOC_SHIFT (15U)
|
||||||
#define EHCI_HOST_ITD_PG_SHIFT (12U)
|
#define EHCI_HOST_ITD_PG_SHIFT (12U)
|
||||||
#define EHCI_HOST_ITD_TRANSACTION_OFFSET_SHIFT (0U)
|
#define EHCI_HOST_ITD_TRANSACTION_OFFSET_SHIFT (0U)
|
||||||
#define EHCI_HOST_ITD_TRANSACTION_OFFSET_MASK (0x00000FFFU)
|
#define EHCI_HOST_ITD_TRANSACTION_OFFSET_MASK (0x00000FFFU)
|
||||||
#define EHCI_HOST_ITD_BUFFER_POINTER_SHIFT (12U)
|
#define EHCI_HOST_ITD_BUFFER_POINTER_SHIFT (12U)
|
||||||
#define EHCI_HOST_ITD_ENDPT_SHIFT (8U)
|
#define EHCI_HOST_ITD_ENDPT_SHIFT (8U)
|
||||||
#define EHCI_HOST_ITD_DEVICE_ADDRESS_SHIFT (0U)
|
#define EHCI_HOST_ITD_DEVICE_ADDRESS_SHIFT (0U)
|
||||||
#define EHCI_HOST_ITD_MAX_PACKET_SIZE_SHIFT (0U)
|
#define EHCI_HOST_ITD_MAX_PACKET_SIZE_SHIFT (0U)
|
||||||
#define EHCI_HOST_ITD_MULT_SHIFT (0U)
|
#define EHCI_HOST_ITD_MULT_SHIFT (0U)
|
||||||
#define EHCI_HOST_ITD_DIRECTION_SHIFT (11U)
|
#define EHCI_HOST_ITD_DIRECTION_SHIFT (11U)
|
||||||
|
|
||||||
#define EHCI_HOST_SITD_STATUS_ACTIVE_MASK (0x00000080U)
|
#define EHCI_HOST_SITD_STATUS_ACTIVE_MASK (0x00000080U)
|
||||||
#define EHCI_HOST_SITD_DIRECTION_SHIFT (31U)
|
#define EHCI_HOST_SITD_DIRECTION_SHIFT (31U)
|
||||||
#define EHCI_HOST_SITD_PORT_NUMBER_SHIFT (24U)
|
#define EHCI_HOST_SITD_PORT_NUMBER_SHIFT (24U)
|
||||||
#define EHCI_HOST_SITD_HUB_ADDR_SHIFT (16U)
|
#define EHCI_HOST_SITD_HUB_ADDR_SHIFT (16U)
|
||||||
#define EHCI_HOST_SITD_ENDPT_SHIFT (8U)
|
#define EHCI_HOST_SITD_ENDPT_SHIFT (8U)
|
||||||
#define EHCI_HOST_SITD_DEVICE_ADDRESS_SHIFT (0U)
|
#define EHCI_HOST_SITD_DEVICE_ADDRESS_SHIFT (0U)
|
||||||
#define EHCI_HOST_SITD_CMASK_SHIFT (8U)
|
#define EHCI_HOST_SITD_CMASK_SHIFT (8U)
|
||||||
#define EHCI_HOST_SITD_SMASK_SHIFT (0U)
|
#define EHCI_HOST_SITD_SMASK_SHIFT (0U)
|
||||||
#define EHCI_HOST_SITD_TOTAL_BYTES_SHIFT (16U)
|
#define EHCI_HOST_SITD_TOTAL_BYTES_SHIFT (16U)
|
||||||
#define EHCI_HOST_SITD_TOTAL_BYTES_MASK (0x03FF0000U)
|
#define EHCI_HOST_SITD_TOTAL_BYTES_MASK (0x03FF0000U)
|
||||||
#define EHCI_HOST_SITD_TP_SHIFT (3U)
|
#define EHCI_HOST_SITD_TP_SHIFT (3U)
|
||||||
#define EHCI_HOST_SITD_TCOUNT_SHIFT (0U)
|
#define EHCI_HOST_SITD_TCOUNT_SHIFT (0U)
|
||||||
#define EHCI_HOST_SITD_IOC_SHIFT (31U)
|
#define EHCI_HOST_SITD_IOC_SHIFT (31U)
|
||||||
|
|
||||||
/* register related MACROs */
|
/* register related MACROs */
|
||||||
#define EHCI_PORTSC1_W1_BITS (0x0000002AU)
|
#define EHCI_PORTSC1_W1_BITS (0x0000002AU)
|
||||||
#define EHCI_MAX_UFRAME_VALUE (0x00003FFFU)
|
#define EHCI_MAX_UFRAME_VALUE (0x00003FFFU)
|
||||||
|
|
||||||
/* task event */
|
/* task event */
|
||||||
#define EHCI_TASK_EVENT_DEVICE_ATTACH (0x01U)
|
#define EHCI_TASK_EVENT_DEVICE_ATTACH (0x01U)
|
||||||
#define EHCI_TASK_EVENT_TRANSACTION_DONE (0x02U)
|
#define EHCI_TASK_EVENT_TRANSACTION_DONE (0x02U)
|
||||||
#define EHCI_TASK_EVENT_DEVICE_DETACH (0x04U)
|
#define EHCI_TASK_EVENT_DEVICE_DETACH (0x04U)
|
||||||
#define EHCI_TASK_EVENT_PORT_CHANGE (0x08U)
|
#define EHCI_TASK_EVENT_PORT_CHANGE (0x08U)
|
||||||
#define EHCI_TASK_EVENT_TIMER0 (0x10U)
|
#define EHCI_TASK_EVENT_TIMER0 (0x10U)
|
||||||
#define EHCI_TASK_EVENT_TIMER1 (0x20U)
|
#define EHCI_TASK_EVENT_TIMER1 (0x20U)
|
||||||
|
|
||||||
#define USB_HostEhciLock() USB_OsaMutexLock(ehciInstance->ehciMutex)
|
#define USB_HostEhciLock() (void)OSA_MutexLock(ehciInstance->ehciMutex, USB_OSA_WAIT_TIMEOUT)
|
||||||
#define USB_HostEhciUnlock() USB_OsaMutexUnlock(ehciInstance->ehciMutex)
|
#define USB_HostEhciUnlock() (void)OSA_MutexUnlock(ehciInstance->ehciMutex)
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* KHCI driver public structures, enumerations, macros, functions
|
* KHCI driver public structures, enumerations, macros, functions
|
||||||
@ -144,6 +122,8 @@
|
|||||||
#define USB_HOST_EHCI_PORT_CONNECT_DEBOUNCE_DELAY (101U)
|
#define USB_HOST_EHCI_PORT_CONNECT_DEBOUNCE_DELAY (101U)
|
||||||
/*! @brief Delay for port reset */
|
/*! @brief Delay for port reset */
|
||||||
#define USB_HOST_EHCI_PORT_RESET_DELAY (11U)
|
#define USB_HOST_EHCI_PORT_RESET_DELAY (11U)
|
||||||
|
/*! @brief The MAX continuous transfers that application can send. */
|
||||||
|
#define USB_HOST_EHCI_ISO_MAX_CONTINUOUS_TRANSFER (8U)
|
||||||
/*! @brief The SITD inserts a frame interval for putting more SITD continuously.
|
/*! @brief The SITD inserts a frame interval for putting more SITD continuously.
|
||||||
* There is an interval when an application sends two FS/LS ISO transfers.
|
* There is an interval when an application sends two FS/LS ISO transfers.
|
||||||
* When the interval is less than the macro, the two transfers are continuous in the frame list. Otherwise, the two
|
* When the interval is less than the macro, the two transfers are continuous in the frame list. Otherwise, the two
|
||||||
@ -171,7 +151,7 @@
|
|||||||
*/
|
*/
|
||||||
#define USB_HOST_EHCI_ISO_BOUNCE_UFRAME_NUMBER (16U)
|
#define USB_HOST_EHCI_ISO_BOUNCE_UFRAME_NUMBER (16U)
|
||||||
/*! @brief Control or bulk transaction timeout value (unit: 100 ms) */
|
/*! @brief Control or bulk transaction timeout value (unit: 100 ms) */
|
||||||
#define USB_HOST_EHCI_CONTROL_BULK_TIME_OUT_VALUE (20U)
|
#define USB_HOST_EHCI_CONTROL_BULK_TIME_OUT_VALUE (50U)
|
||||||
|
|
||||||
#if ((defined(USB_HOST_CONFIG_LOW_POWER_MODE)) && (USB_HOST_CONFIG_LOW_POWER_MODE > 0U))
|
#if ((defined(USB_HOST_CONFIG_LOW_POWER_MODE)) && (USB_HOST_CONFIG_LOW_POWER_MODE > 0U))
|
||||||
typedef enum _bus_ehci_suspend_request_state
|
typedef enum _bus_ehci_suspend_request_state
|
||||||
@ -323,8 +303,10 @@ typedef struct _usb_host_ehci_instance
|
|||||||
usb_host_ehci_pipe_t *ehciPipeIndexBase; /*!< Pipe buffer's start pointer*/
|
usb_host_ehci_pipe_t *ehciPipeIndexBase; /*!< Pipe buffer's start pointer*/
|
||||||
usb_host_ehci_pipe_t *ehciPipeList; /*!< Idle pipe list pointer*/
|
usb_host_ehci_pipe_t *ehciPipeList; /*!< Idle pipe list pointer*/
|
||||||
usb_host_ehci_pipe_t *ehciRunningPipeList; /*!< Running pipe list pointer*/
|
usb_host_ehci_pipe_t *ehciRunningPipeList; /*!< Running pipe list pointer*/
|
||||||
usb_osa_mutex_handle ehciMutex; /*!< EHCI mutex*/
|
osa_mutex_handle_t ehciMutex; /*!< EHCI mutex*/
|
||||||
usb_osa_event_handle taskEventHandle; /*!< EHCI task event*/
|
uint32_t mutexBuffer[(OSA_MUTEX_HANDLE_SIZE + 3) / 4]; /*!< The mutex buffer. */
|
||||||
|
osa_event_handle_t taskEventHandle; /*!< EHCI task event*/
|
||||||
|
uint32_t taskEventHandleBuffer[(OSA_EVENT_HANDLE_SIZE + 3) / 4]; /*!< EHCI task event handle buffer*/
|
||||||
#if ((defined(USB_HOST_CONFIG_LOW_POWER_MODE)) && (USB_HOST_CONFIG_LOW_POWER_MODE > 0U))
|
#if ((defined(USB_HOST_CONFIG_LOW_POWER_MODE)) && (USB_HOST_CONFIG_LOW_POWER_MODE > 0U))
|
||||||
uint64_t matchTick;
|
uint64_t matchTick;
|
||||||
USBPHY_Type *registerPhyBase; /*!< The base address of the PHY register */
|
USBPHY_Type *registerPhyBase; /*!< The base address of the PHY register */
|
||||||
@ -355,6 +337,10 @@ typedef struct _usb_host_ehci_data
|
|||||||
#endif
|
#endif
|
||||||
#if ((defined(USB_HOST_CONFIG_EHCI_MAX_ITD)) && (USB_HOST_CONFIG_EHCI_MAX_ITD > 0U))
|
#if ((defined(USB_HOST_CONFIG_EHCI_MAX_ITD)) && (USB_HOST_CONFIG_EHCI_MAX_ITD > 0U))
|
||||||
usb_host_ehci_itd_t ehciItd[USB_HOST_CONFIG_EHCI_MAX_ITD]; /*!< Idle ITD list array*/
|
usb_host_ehci_itd_t ehciItd[USB_HOST_CONFIG_EHCI_MAX_ITD]; /*!< Idle ITD list array*/
|
||||||
|
/* add additional 32bytes because the itd cannot cross over 4K boundary,
|
||||||
|
* If one ITD cross over 4K boundary, the code will move 32 bytes for ITD.
|
||||||
|
*/
|
||||||
|
uint32_t reserved[8];
|
||||||
#endif
|
#endif
|
||||||
#if ((defined(USB_HOST_CONFIG_EHCI_MAX_SITD)) && (USB_HOST_CONFIG_EHCI_MAX_SITD > 0U))
|
#if ((defined(USB_HOST_CONFIG_EHCI_MAX_SITD)) && (USB_HOST_CONFIG_EHCI_MAX_SITD > 0U))
|
||||||
usb_host_ehci_sitd_t ehciSitd[USB_HOST_CONFIG_EHCI_MAX_SITD]; /*!< Idle SITD list array*/
|
usb_host_ehci_sitd_t ehciSitd[USB_HOST_CONFIG_EHCI_MAX_SITD]; /*!< Idle SITD list array*/
|
||||||
|
@ -1,34 +1,13 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2015 - 2016, Freescale Semiconductor, Inc.
|
* Copyright (c) 2015 - 2016, Freescale Semiconductor, Inc.
|
||||||
* Copyright 2016 NXP
|
* Copyright 2016 - 2019 NXP
|
||||||
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without modification,
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
* are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* o Redistributions of source code must retain the above copyright notice, this list
|
|
||||||
* of conditions and the following disclaimer.
|
|
||||||
*
|
|
||||||
* o Redistributions in binary form must reproduce the above copyright notice, this
|
|
||||||
* list of conditions and the following disclaimer in the documentation and/or
|
|
||||||
* other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* o Neither the name of the copyright holder nor the names of its
|
|
||||||
* contributors may be used to endorse or promote products derived from this
|
|
||||||
* software without specific prior written permission.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
|
||||||
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <usb/include/usb_device_config.h>
|
#include <usb/include/usb_host_config.h>
|
||||||
|
#include <fsl_os_abstraction.h>
|
||||||
#include "fsl_common.h"
|
#include "fsl_common.h"
|
||||||
#include "usb_host.h"
|
#include "usb_host.h"
|
||||||
#include "usb_host_hci.h"
|
#include "usb_host_hci.h"
|
||||||
@ -42,16 +21,24 @@
|
|||||||
* Definitions
|
* Definitions
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
|
/* Component ID definition, used by tools. */
|
||||||
|
#ifndef FSL_COMPONENT_ID
|
||||||
|
#define FSL_COMPONENT_ID "middleware.usb.host_stack"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined __CORTEX_M && (__CORTEX_M == 7U)
|
||||||
|
#if (defined(USB_HOST_CONFIG_BUFFER_PROPERTY_CACHEABLE) && (USB_HOST_CONFIG_BUFFER_PROPERTY_CACHEABLE > 0U))
|
||||||
|
#warning USB_HOST_CONFIG_BUFFER_PROPERTY_CACHEABLE is not supported.
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Prototypes
|
* Prototypes
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
#if ((defined USB_HOST_CONFIG_HUB) && (USB_HOST_CONFIG_HUB))
|
#if ((defined USB_HOST_CONFIG_HUB) && (USB_HOST_CONFIG_HUB))
|
||||||
|
|
||||||
extern uint32_t USB_HostHubGetTotalThinkTime(usb_host_handle hostHandle, uint8_t parentHubNo);
|
#include "usb_host_hub.h"
|
||||||
|
#include "usb_host_hub_app.h"
|
||||||
extern usb_status_t USB_HostHubSuspendDevice(usb_host_handle hostHandle);
|
|
||||||
|
|
||||||
extern usb_status_t USB_HostHubResumeDevice(usb_host_handle hostHandle);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@ -77,15 +64,6 @@ static void USB_HostReleaseInstance(usb_host_instance_t *hostInstance);
|
|||||||
static void USB_HostGetControllerInterface(uint8_t controllerId,
|
static void USB_HostGetControllerInterface(uint8_t controllerId,
|
||||||
const usb_host_controller_interface_t **controllerTable);
|
const usb_host_controller_interface_t **controllerTable);
|
||||||
|
|
||||||
#if ((defined USB_HOST_CONFIG_COMPLIANCE_TEST) && (USB_HOST_CONFIG_COMPLIANCE_TEST))
|
|
||||||
#if ((defined USB_HOST_CONFIG_EHCI) && (USB_HOST_CONFIG_EHCI))
|
|
||||||
extern void USB_HostEhciTestModeInit(usb_device_handle devHandle);
|
|
||||||
#endif /* USB_HOST_CONFIG_COMPLIANCE_TEST */
|
|
||||||
#if ((defined USB_HOST_CONFIG_IP3516HS) && (USB_HOST_CONFIG_IP3516HS))
|
|
||||||
extern void USB_HostIp3516HsTestModeInit(usb_device_handle devHandle);
|
|
||||||
#endif /* USB_HOST_CONFIG_COMPLIANCE_TEST */
|
|
||||||
#endif /* USB_HOST_CONFIG_EHCI */
|
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Variables
|
* Variables
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
@ -94,8 +72,7 @@ usb_host_instance_t g_UsbHostInstance[USB_HOST_CONFIG_MAX_HOST];
|
|||||||
|
|
||||||
#if ((defined USB_HOST_CONFIG_EHCI) && (USB_HOST_CONFIG_EHCI))
|
#if ((defined USB_HOST_CONFIG_EHCI) && (USB_HOST_CONFIG_EHCI))
|
||||||
#include "usb_host_ehci.h"
|
#include "usb_host_ehci.h"
|
||||||
static const usb_host_controller_interface_t s_EhciInterface = \
|
static const usb_host_controller_interface_t s_EhciInterface = {
|
||||||
{
|
|
||||||
USB_HostEhciCreate, USB_HostEhciDestory, USB_HostEhciOpenPipe, USB_HostEhciClosePipe,
|
USB_HostEhciCreate, USB_HostEhciDestory, USB_HostEhciOpenPipe, USB_HostEhciClosePipe,
|
||||||
USB_HostEhciWritePipe, USB_HostEhciReadpipe, USB_HostEhciIoctl,
|
USB_HostEhciWritePipe, USB_HostEhciReadpipe, USB_HostEhciIoctl,
|
||||||
};
|
};
|
||||||
@ -103,8 +80,7 @@ static const usb_host_controller_interface_t s_EhciInterface = \
|
|||||||
|
|
||||||
#if ((defined USB_HOST_CONFIG_KHCI) && (USB_HOST_CONFIG_KHCI))
|
#if ((defined USB_HOST_CONFIG_KHCI) && (USB_HOST_CONFIG_KHCI))
|
||||||
#include "usb_host_khci.h"
|
#include "usb_host_khci.h"
|
||||||
static const usb_host_controller_interface_t s_KhciInterface = \
|
static const usb_host_controller_interface_t s_KhciInterface = {
|
||||||
{
|
|
||||||
USB_HostKhciCreate, USB_HostKhciDestory, USB_HostKhciOpenPipe, USB_HostKhciClosePipe,
|
USB_HostKhciCreate, USB_HostKhciDestory, USB_HostKhciOpenPipe, USB_HostKhciClosePipe,
|
||||||
USB_HostKhciWritePipe, USB_HostKhciReadpipe, USB_HostKciIoctl,
|
USB_HostKhciWritePipe, USB_HostKhciReadpipe, USB_HostKciIoctl,
|
||||||
};
|
};
|
||||||
@ -112,8 +88,7 @@ static const usb_host_controller_interface_t s_KhciInterface = \
|
|||||||
|
|
||||||
#if ((defined USB_HOST_CONFIG_OHCI) && (USB_HOST_CONFIG_OHCI > 0U))
|
#if ((defined USB_HOST_CONFIG_OHCI) && (USB_HOST_CONFIG_OHCI > 0U))
|
||||||
#include "usb_host_ohci.h"
|
#include "usb_host_ohci.h"
|
||||||
static const usb_host_controller_interface_t s_OhciInterface = \
|
static const usb_host_controller_interface_t s_OhciInterface = {
|
||||||
{
|
|
||||||
USB_HostOhciCreate, USB_HostOhciDestory, USB_HostOhciOpenPipe, USB_HostOhciClosePipe,
|
USB_HostOhciCreate, USB_HostOhciDestory, USB_HostOhciOpenPipe, USB_HostOhciClosePipe,
|
||||||
USB_HostOhciWritePipe, USB_HostOhciReadPipe, USB_HostOhciIoctl,
|
USB_HostOhciWritePipe, USB_HostOhciReadPipe, USB_HostOhciIoctl,
|
||||||
};
|
};
|
||||||
@ -121,65 +96,67 @@ static const usb_host_controller_interface_t s_OhciInterface = \
|
|||||||
|
|
||||||
#if ((defined USB_HOST_CONFIG_IP3516HS) && (USB_HOST_CONFIG_IP3516HS > 0U))
|
#if ((defined USB_HOST_CONFIG_IP3516HS) && (USB_HOST_CONFIG_IP3516HS > 0U))
|
||||||
#include "usb_host_ip3516hs.h"
|
#include "usb_host_ip3516hs.h"
|
||||||
static const usb_host_controller_interface_t s_Ip3516HsInterface = \
|
static const usb_host_controller_interface_t s_Ip3516HsInterface = {
|
||||||
{
|
|
||||||
USB_HostIp3516HsCreate, USB_HostIp3516HsDestory, USB_HostIp3516HsOpenPipe, USB_HostIp3516HsClosePipe,
|
USB_HostIp3516HsCreate, USB_HostIp3516HsDestory, USB_HostIp3516HsOpenPipe, USB_HostIp3516HsClosePipe,
|
||||||
USB_HostIp3516HsWritePipe, USB_HostIp3516HsReadPipe, USB_HostIp3516HsIoctl,
|
USB_HostIp3516HsWritePipe, USB_HostIp3516HsReadPipe, USB_HostIp3516HsIoctl,
|
||||||
};
|
};
|
||||||
#endif /* USB_HOST_CONFIG_IP3516HS */
|
#endif /* USB_HOST_CONFIG_IP3516HS */
|
||||||
|
|
||||||
USB_DMA_NONINIT_DATA_ALIGN(USB_DATA_ALIGN_SIZE) static uint8_t s_Setupbuffer[USB_HOST_CONFIG_MAX_HOST][USB_HOST_CONFIG_MAX_TRANSFERS][USB_DATA_ALIGN_SIZE_MULTIPLE(8)];
|
USB_DMA_NONINIT_DATA_ALIGN(USB_DATA_ALIGN_SIZE)
|
||||||
|
static uint8_t s_Setupbuffer[USB_HOST_CONFIG_MAX_HOST][USB_HOST_CONFIG_MAX_TRANSFERS][USB_DATA_ALIGN_SIZE_MULTIPLE(8)];
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Code
|
* Code
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#if ((defined USB_HOST_CONFIG_COMPLIANCE_TEST) && (USB_HOST_CONFIG_COMPLIANCE_TEST))
|
#if ((defined USB_HOST_CONFIG_COMPLIANCE_TEST) && (USB_HOST_CONFIG_COMPLIANCE_TEST))
|
||||||
/*FUNCTION*----------------------------------------------------------------
|
/*FUNCTION*----------------------------------------------------------------
|
||||||
*
|
*
|
||||||
* Function Name : usb_test_mode_init
|
* Function Name : usb_test_mode_init
|
||||||
* Returned Value : None
|
* Returned Value : None
|
||||||
* Comments :
|
* Comments :
|
||||||
* This function is called by common class to initialize the class driver. It
|
* This function is called by common class to initialize the class driver. It
|
||||||
* is called in response to a select interface call by application
|
* is called in response to a select interface call by application
|
||||||
*
|
*
|
||||||
*END*--------------------------------------------------------------------*/
|
*END*--------------------------------------------------------------------*/
|
||||||
usb_status_t USB_HostTestModeInit(usb_device_handle deviceHandle)
|
usb_status_t USB_HostTestModeInit(usb_device_handle deviceHandle)
|
||||||
{
|
{
|
||||||
#if (((defined USB_HOST_CONFIG_EHCI) && (USB_HOST_CONFIG_EHCI)) || \
|
#if (((defined USB_HOST_CONFIG_EHCI) && (USB_HOST_CONFIG_EHCI)) || \
|
||||||
((defined USB_HOST_CONFIG_IP3516HS) && (USB_HOST_CONFIG_IP3516HS)))
|
((defined USB_HOST_CONFIG_IP3516HS) && (USB_HOST_CONFIG_IP3516HS)))
|
||||||
usb_host_device_instance_t *deviceInstance = (usb_host_device_instance_t *)deviceHandle;
|
usb_host_device_instance_t *deviceInstance = (usb_host_device_instance_t *)deviceHandle;
|
||||||
usb_host_instance_t *hostInstance = (usb_host_instance_t *)deviceInstance->hostHandle;
|
usb_host_instance_t *hostInstance = (usb_host_instance_t *)deviceInstance->hostHandle;
|
||||||
#endif
|
#endif
|
||||||
uint32_t productId;
|
uint32_t productId;
|
||||||
uint32_t vendorId;
|
uint32_t vendorId;
|
||||||
|
|
||||||
usb_echo("usb host test init\r\n");
|
(void)usb_echo("usb host test init\r\n");
|
||||||
USB_HostHelperGetPeripheralInformation(deviceHandle, kUSB_HostGetDevicePID, &productId);
|
(void)USB_HostHelperGetPeripheralInformation(deviceHandle, (uint32_t)kUSB_HostGetDevicePID, &productId);
|
||||||
USB_HostHelperGetPeripheralInformation(deviceHandle, kUSB_HostGetDeviceVID, &vendorId);
|
(void)USB_HostHelperGetPeripheralInformation(deviceHandle, (uint32_t)kUSB_HostGetDeviceVID, &vendorId);
|
||||||
usb_echo(" vendor id :0x%x product id:0x%x \r\n", vendorId, productId);
|
(void)usb_echo(" vendor id :0x%x product id:0x%x \r\n", vendorId, productId);
|
||||||
|
|
||||||
if ((productId != 0x0200U) && (productId != 0x0101) && (productId != 0x0102) && (productId != 0x0103) &&
|
if ((productId != 0x0200U) && (productId != 0x0101U) && (productId != 0x0102U) && (productId != 0x0103U) &&
|
||||||
(productId != 0x0104) && (productId != 0x0105) && (productId != 0x0106) && (productId != 0x0107) &&
|
(productId != 0x0104U) && (productId != 0x0105U) && (productId != 0x0106U) && (productId != 0x0107U) &&
|
||||||
(productId != 0x0108))
|
(productId != 0x0108U))
|
||||||
{
|
{
|
||||||
usb_echo("Unsupported Device\r\n");
|
(void)usb_echo("Unsupported Device\r\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (productId == 0x0200U)
|
if (productId == 0x0200U)
|
||||||
{
|
{
|
||||||
usb_echo("PET test device attached\r\n");
|
(void)usb_echo("PET test device attached\r\n");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
#if ((defined USB_HOST_CONFIG_EHCI) && (USB_HOST_CONFIG_EHCI))
|
#if ((defined USB_HOST_CONFIG_EHCI) && (USB_HOST_CONFIG_EHCI))
|
||||||
if (hostInstance->controllerTable == &s_EhciInterface)
|
if (hostInstance->controllerTable == &s_EhciInterface)
|
||||||
{
|
{
|
||||||
USB_HostEhciTestModeInit(deviceHandle);
|
(void)hostInstance->controllerTable->controllerIoctl(hostInstance->controllerHandle, kUSB_HostTestModeInit,
|
||||||
|
(void *)deviceHandle);
|
||||||
}
|
}
|
||||||
#elif((defined USB_HOST_CONFIG_IP3516HS) && (USB_HOST_CONFIG_IP3516HS))
|
#elif ((defined USB_HOST_CONFIG_IP3516HS) && (USB_HOST_CONFIG_IP3516HS))
|
||||||
if (hostInstance->controllerTable == &s_Ip3516HsInterface)
|
if (hostInstance->controllerTable == &s_Ip3516HsInterface)
|
||||||
{
|
{
|
||||||
USB_HostIp3516HsTestModeInit(deviceHandle);
|
(void)hostInstance->controllerTable->controllerIoctl(hostInstance->controllerHandle, kUSB_HostTestModeInit,
|
||||||
|
(void *)deviceHandle);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@ -190,13 +167,14 @@ usb_status_t USB_HostTestModeInit(usb_device_handle deviceHandle)
|
|||||||
|
|
||||||
static usb_host_instance_t *USB_HostGetInstance(void)
|
static usb_host_instance_t *USB_HostGetInstance(void)
|
||||||
{
|
{
|
||||||
uint8_t i = 0;
|
uint8_t i = 0;
|
||||||
uint32_t index = 0;
|
uint32_t index = 0;
|
||||||
USB_OSA_SR_ALLOC();
|
void *temp;
|
||||||
USB_OSA_ENTER_CRITICAL();
|
OSA_SR_ALLOC();
|
||||||
|
OSA_ENTER_CRITICAL();
|
||||||
for (; i < USB_HOST_CONFIG_MAX_HOST; i++)
|
for (; i < USB_HOST_CONFIG_MAX_HOST; i++)
|
||||||
{
|
{
|
||||||
if (g_UsbHostInstance[i].occupied != 1)
|
if (g_UsbHostInstance[i].occupied != 1U)
|
||||||
{
|
{
|
||||||
uint8_t *buffer = (uint8_t *)&g_UsbHostInstance[i];
|
uint8_t *buffer = (uint8_t *)&g_UsbHostInstance[i];
|
||||||
for (uint32_t j = 0U; j < sizeof(usb_host_instance_t); j++)
|
for (uint32_t j = 0U; j < sizeof(usb_host_instance_t); j++)
|
||||||
@ -204,53 +182,53 @@ static usb_host_instance_t *USB_HostGetInstance(void)
|
|||||||
buffer[j] = 0x00U;
|
buffer[j] = 0x00U;
|
||||||
}
|
}
|
||||||
g_UsbHostInstance[i].occupied = 1;
|
g_UsbHostInstance[i].occupied = 1;
|
||||||
USB_OSA_EXIT_CRITICAL();
|
OSA_EXIT_CRITICAL();
|
||||||
for (index = 0; index < USB_HOST_CONFIG_MAX_TRANSFERS; ++index)
|
for (index = 0; index < USB_HOST_CONFIG_MAX_TRANSFERS; ++index)
|
||||||
{
|
{
|
||||||
g_UsbHostInstance[i].transferList[index].setupPacket =
|
temp = (void *)&(s_Setupbuffer[i][index][0]);
|
||||||
(usb_setup_struct_t *)&(s_Setupbuffer[i][index][0]);
|
g_UsbHostInstance[i].transferList[index].setupPacket = (usb_setup_struct_t *)temp;
|
||||||
}
|
}
|
||||||
return &g_UsbHostInstance[i];
|
return &g_UsbHostInstance[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
USB_OSA_EXIT_CRITICAL();
|
OSA_EXIT_CRITICAL();
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void USB_HostReleaseInstance(usb_host_instance_t *hostInstance)
|
static void USB_HostReleaseInstance(usb_host_instance_t *hostInstance)
|
||||||
{
|
{
|
||||||
USB_OSA_SR_ALLOC();
|
OSA_SR_ALLOC();
|
||||||
USB_OSA_ENTER_CRITICAL();
|
OSA_ENTER_CRITICAL();
|
||||||
hostInstance->occupied = 0;
|
hostInstance->occupied = 0;
|
||||||
USB_OSA_EXIT_CRITICAL();
|
OSA_EXIT_CRITICAL();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void USB_HostGetControllerInterface(uint8_t controllerId,
|
static void USB_HostGetControllerInterface(uint8_t controllerId,
|
||||||
const usb_host_controller_interface_t **controllerTable)
|
const usb_host_controller_interface_t **controllerTable)
|
||||||
{
|
{
|
||||||
#if ((defined USB_HOST_CONFIG_KHCI) && (USB_HOST_CONFIG_KHCI))
|
#if ((defined USB_HOST_CONFIG_KHCI) && (USB_HOST_CONFIG_KHCI))
|
||||||
if (controllerId == kUSB_ControllerKhci0)
|
if (controllerId == (uint8_t)kUSB_ControllerKhci0)
|
||||||
{
|
{
|
||||||
*controllerTable = &s_KhciInterface;
|
*controllerTable = &s_KhciInterface;
|
||||||
}
|
}
|
||||||
#endif /* USB_HOST_CONFIG_KHCI */
|
#endif /* USB_HOST_CONFIG_KHCI */
|
||||||
|
|
||||||
#if ((defined USB_HOST_CONFIG_EHCI) && (USB_HOST_CONFIG_EHCI))
|
#if ((defined USB_HOST_CONFIG_EHCI) && (USB_HOST_CONFIG_EHCI))
|
||||||
if ((controllerId == kUSB_ControllerEhci0) || (controllerId == kUSB_ControllerEhci1))
|
if ((controllerId == (uint8_t)kUSB_ControllerEhci0) || (controllerId == (uint8_t)kUSB_ControllerEhci1))
|
||||||
{
|
{
|
||||||
*controllerTable = &s_EhciInterface;
|
*controllerTable = &s_EhciInterface;
|
||||||
}
|
}
|
||||||
#endif /* USB_HOST_CONFIG_EHCI */
|
#endif /* USB_HOST_CONFIG_EHCI */
|
||||||
|
|
||||||
#if ((defined USB_HOST_CONFIG_OHCI) && (USB_HOST_CONFIG_OHCI > 0U))
|
#if ((defined USB_HOST_CONFIG_OHCI) && (USB_HOST_CONFIG_OHCI > 0U))
|
||||||
if (controllerId == kUSB_ControllerOhci0)
|
if (controllerId == (uint8_t)kUSB_ControllerOhci0)
|
||||||
{
|
{
|
||||||
*controllerTable = &s_OhciInterface;
|
*controllerTable = &s_OhciInterface;
|
||||||
}
|
}
|
||||||
#endif /* USB_HOST_CONFIG_OHCI */
|
#endif /* USB_HOST_CONFIG_OHCI */
|
||||||
|
|
||||||
#if ((defined USB_HOST_CONFIG_IP3516HS) && (USB_HOST_CONFIG_IP3516HS > 0U))
|
#if ((defined USB_HOST_CONFIG_IP3516HS) && (USB_HOST_CONFIG_IP3516HS > 0U))
|
||||||
if (controllerId == kUSB_ControllerIp3516Hs0)
|
if (controllerId == (uint8_t)kUSB_ControllerIp3516Hs0)
|
||||||
{
|
{
|
||||||
*controllerTable = &s_Ip3516HsInterface;
|
*controllerTable = &s_Ip3516HsInterface;
|
||||||
}
|
}
|
||||||
@ -259,10 +237,10 @@ static void USB_HostGetControllerInterface(uint8_t controllerId,
|
|||||||
|
|
||||||
usb_status_t USB_HostInit(uint8_t controllerId, usb_host_handle *hostHandle, host_callback_t callbackFn)
|
usb_status_t USB_HostInit(uint8_t controllerId, usb_host_handle *hostHandle, host_callback_t callbackFn)
|
||||||
{
|
{
|
||||||
usb_status_t status = kStatus_USB_Success;
|
usb_status_t status = kStatus_USB_Success;
|
||||||
usb_host_instance_t *hostInstance = NULL;
|
usb_host_instance_t *hostInstance = NULL;
|
||||||
usb_host_transfer_t *transferPrev = NULL;
|
usb_host_transfer_t *transferPrev = NULL;
|
||||||
uint8_t i = 0;
|
uint8_t i = 0;
|
||||||
|
|
||||||
hostInstance = USB_HostGetInstance(); /* get one host instance */
|
hostInstance = USB_HostGetInstance(); /* get one host instance */
|
||||||
if (hostInstance == NULL)
|
if (hostInstance == NULL)
|
||||||
@ -291,10 +269,11 @@ usb_status_t USB_HostInit(uint8_t controllerId, usb_host_handle *hostHandle, hos
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* HOST instance init*/
|
/* HOST instance init*/
|
||||||
hostInstance->controllerId = controllerId;
|
hostInstance->controllerId = controllerId;
|
||||||
hostInstance->deviceCallback = callbackFn;
|
hostInstance->deviceCallback = callbackFn;
|
||||||
hostInstance->deviceList = NULL;
|
hostInstance->deviceList = NULL;
|
||||||
if (kStatus_USB_OSA_Success != USB_OsaMutexCreate(&hostInstance->hostMutex))
|
hostInstance->hostMutex = (osa_mutex_handle_t)(&hostInstance->mutexBuffer[0]);
|
||||||
|
if (KOSA_StatusSuccess != OSA_MutexCreate(hostInstance->hostMutex))
|
||||||
{
|
{
|
||||||
USB_HostReleaseInstance(hostInstance);
|
USB_HostReleaseInstance(hostInstance);
|
||||||
#ifdef HOST_ECHO
|
#ifdef HOST_ECHO
|
||||||
@ -306,19 +285,19 @@ usb_status_t USB_HostInit(uint8_t controllerId, usb_host_handle *hostHandle, hos
|
|||||||
/* initialize transfer list */
|
/* initialize transfer list */
|
||||||
|
|
||||||
hostInstance->transferHead = &hostInstance->transferList[0];
|
hostInstance->transferHead = &hostInstance->transferList[0];
|
||||||
transferPrev = hostInstance->transferHead;
|
transferPrev = hostInstance->transferHead;
|
||||||
for (i = 1; i < USB_HOST_CONFIG_MAX_TRANSFERS; ++i)
|
for (i = 1; i < USB_HOST_CONFIG_MAX_TRANSFERS; ++i)
|
||||||
{
|
{
|
||||||
transferPrev->next = &hostInstance->transferList[i];
|
transferPrev->next = &hostInstance->transferList[i];
|
||||||
transferPrev = transferPrev->next;
|
transferPrev = transferPrev->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* controller create */
|
/* controller create, the callbackFn is initialized in USB_HostGetControllerInterface */
|
||||||
status =
|
status =
|
||||||
hostInstance->controllerTable->controllerCreate(controllerId, hostInstance, &(hostInstance->controllerHandle));
|
hostInstance->controllerTable->controllerCreate(controllerId, hostInstance, &(hostInstance->controllerHandle));
|
||||||
if ((status != kStatus_USB_Success) || (hostInstance->controllerHandle == NULL))
|
if ((status != kStatus_USB_Success) || (hostInstance->controllerHandle == NULL))
|
||||||
{
|
{
|
||||||
USB_OsaMutexDestroy(hostInstance->hostMutex);
|
(void)OSA_MutexDestroy(hostInstance->hostMutex);
|
||||||
USB_HostReleaseInstance(hostInstance);
|
USB_HostReleaseInstance(hostInstance);
|
||||||
#ifdef HOST_ECHO
|
#ifdef HOST_ECHO
|
||||||
usb_echo("host init: controller init fail\r\n");
|
usb_echo("host init: controller init fail\r\n");
|
||||||
@ -332,8 +311,8 @@ usb_status_t USB_HostInit(uint8_t controllerId, usb_host_handle *hostHandle, hos
|
|||||||
|
|
||||||
usb_status_t USB_HostDeinit(usb_host_handle hostHandle)
|
usb_status_t USB_HostDeinit(usb_host_handle hostHandle)
|
||||||
{
|
{
|
||||||
usb_status_t status = kStatus_USB_Success;
|
usb_status_t status = kStatus_USB_Success;
|
||||||
usb_host_instance_t *hostInstance = (usb_host_instance_t *)hostHandle;
|
usb_host_instance_t *hostInstance = (usb_host_instance_t *)hostHandle;
|
||||||
usb_host_device_instance_t *deviceInstance = NULL;
|
usb_host_device_instance_t *deviceInstance = NULL;
|
||||||
|
|
||||||
if (hostHandle == NULL)
|
if (hostHandle == NULL)
|
||||||
@ -346,23 +325,23 @@ usb_status_t USB_HostDeinit(usb_host_handle hostHandle)
|
|||||||
while (deviceInstance != NULL)
|
while (deviceInstance != NULL)
|
||||||
{
|
{
|
||||||
deviceInstance = (usb_host_device_instance_t *)hostInstance->deviceList;
|
deviceInstance = (usb_host_device_instance_t *)hostInstance->deviceList;
|
||||||
USB_HostDetachDeviceInternal(hostHandle, deviceInstance);
|
(void)USB_HostDetachDeviceInternal(hostHandle, deviceInstance);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* controller instance destory */
|
/* controller instance destroy, the callbackFn is initialized in USB_HostGetControllerInterface */
|
||||||
status = hostInstance->controllerTable->controllerDestory(hostInstance->controllerHandle);
|
status = hostInstance->controllerTable->controllerDestory(hostInstance->controllerHandle);
|
||||||
hostInstance->controllerHandle = NULL;
|
hostInstance->controllerHandle = NULL;
|
||||||
if (status != kStatus_USB_Success)
|
if (status != kStatus_USB_Success)
|
||||||
{
|
{
|
||||||
#ifdef HOST_ECHO
|
#ifdef HOST_ECHO
|
||||||
usb_echo("host controller destory fail\r\n");
|
usb_echo("host controller destroy fail\r\n");
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/* resource release */
|
/* resource release */
|
||||||
if (hostInstance->hostMutex)
|
if (NULL != hostInstance->hostMutex)
|
||||||
{
|
{
|
||||||
USB_OsaMutexDestroy(hostInstance->hostMutex);
|
(void)OSA_MutexDestroy(hostInstance->hostMutex);
|
||||||
hostInstance->hostMutex = NULL;
|
hostInstance->hostMutex = NULL;
|
||||||
}
|
}
|
||||||
USB_HostReleaseInstance(hostInstance);
|
USB_HostReleaseInstance(hostInstance);
|
||||||
@ -374,7 +353,7 @@ usb_status_t USB_HostOpenPipe(usb_host_handle hostHandle,
|
|||||||
usb_host_pipe_handle *pipeHandle,
|
usb_host_pipe_handle *pipeHandle,
|
||||||
usb_host_pipe_init_t *pipeInit)
|
usb_host_pipe_init_t *pipeInit)
|
||||||
{
|
{
|
||||||
usb_status_t status = kStatus_USB_Success;
|
usb_status_t status = kStatus_USB_Success;
|
||||||
usb_host_instance_t *hostInstance = (usb_host_instance_t *)hostHandle;
|
usb_host_instance_t *hostInstance = (usb_host_instance_t *)hostHandle;
|
||||||
|
|
||||||
if ((hostHandle == NULL) || (pipeInit == NULL))
|
if ((hostHandle == NULL) || (pipeInit == NULL))
|
||||||
@ -382,7 +361,7 @@ usb_status_t USB_HostOpenPipe(usb_host_handle hostHandle,
|
|||||||
return kStatus_USB_InvalidHandle;
|
return kStatus_USB_InvalidHandle;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* call controller open pipe interface */
|
/* call controller open pipe interface, the callbackFn is initialized in USB_HostGetControllerInterface */
|
||||||
status = hostInstance->controllerTable->controllerOpenPipe(hostInstance->controllerHandle, pipeHandle, pipeInit);
|
status = hostInstance->controllerTable->controllerOpenPipe(hostInstance->controllerHandle, pipeHandle, pipeInit);
|
||||||
|
|
||||||
return status;
|
return status;
|
||||||
@ -390,7 +369,7 @@ usb_status_t USB_HostOpenPipe(usb_host_handle hostHandle,
|
|||||||
|
|
||||||
usb_status_t USB_HostClosePipe(usb_host_handle hostHandle, usb_host_pipe_handle pipeHandle)
|
usb_status_t USB_HostClosePipe(usb_host_handle hostHandle, usb_host_pipe_handle pipeHandle)
|
||||||
{
|
{
|
||||||
usb_status_t status = kStatus_USB_Success;
|
usb_status_t status = kStatus_USB_Success;
|
||||||
usb_host_instance_t *hostInstance = (usb_host_instance_t *)hostHandle;
|
usb_host_instance_t *hostInstance = (usb_host_instance_t *)hostHandle;
|
||||||
|
|
||||||
if ((hostHandle == NULL) || (pipeHandle == NULL))
|
if ((hostHandle == NULL) || (pipeHandle == NULL))
|
||||||
@ -398,7 +377,7 @@ usb_status_t USB_HostClosePipe(usb_host_handle hostHandle, usb_host_pipe_handle
|
|||||||
return kStatus_USB_InvalidHandle;
|
return kStatus_USB_InvalidHandle;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* call controller close pipe interface */
|
/* call controller close pipe interface, the callbackFn is initialized in USB_HostGetControllerInterface */
|
||||||
status = hostInstance->controllerTable->controllerClosePipe(hostInstance->controllerHandle, pipeHandle);
|
status = hostInstance->controllerTable->controllerClosePipe(hostInstance->controllerHandle, pipeHandle);
|
||||||
|
|
||||||
return status;
|
return status;
|
||||||
@ -406,7 +385,7 @@ usb_status_t USB_HostClosePipe(usb_host_handle hostHandle, usb_host_pipe_handle
|
|||||||
|
|
||||||
usb_status_t USB_HostSend(usb_host_handle hostHandle, usb_host_pipe_handle pipeHandle, usb_host_transfer_t *transfer)
|
usb_status_t USB_HostSend(usb_host_handle hostHandle, usb_host_pipe_handle pipeHandle, usb_host_transfer_t *transfer)
|
||||||
{
|
{
|
||||||
usb_status_t status = kStatus_USB_Success;
|
usb_status_t status = kStatus_USB_Success;
|
||||||
usb_host_instance_t *hostInstance = (usb_host_instance_t *)hostHandle;
|
usb_host_instance_t *hostInstance = (usb_host_instance_t *)hostHandle;
|
||||||
|
|
||||||
if ((hostHandle == NULL) || (pipeHandle == NULL) || (transfer == NULL))
|
if ((hostHandle == NULL) || (pipeHandle == NULL) || (transfer == NULL))
|
||||||
@ -416,9 +395,9 @@ usb_status_t USB_HostSend(usb_host_handle hostHandle, usb_host_pipe_handle pipeH
|
|||||||
|
|
||||||
/* initialize transfer */
|
/* initialize transfer */
|
||||||
transfer->transferSofar = 0;
|
transfer->transferSofar = 0;
|
||||||
transfer->direction = USB_OUT;
|
transfer->direction = USB_OUT;
|
||||||
|
|
||||||
USB_HostLock(); /* This api can be called by host task and app task */
|
(void)USB_HostLock(); /* This api can be called by host task and app task */
|
||||||
/* keep this code: in normal situation application will guarantee the device is attached when call send/receive function
|
/* keep this code: in normal situation application will guarantee the device is attached when call send/receive function
|
||||||
*/
|
*/
|
||||||
#if 0
|
#if 0
|
||||||
@ -435,9 +414,10 @@ usb_status_t USB_HostSend(usb_host_handle hostHandle, usb_host_pipe_handle pipeH
|
|||||||
DCACHE_CleanByRange((uint32_t)transfer->transferBuffer, transfer->transferLength);
|
DCACHE_CleanByRange((uint32_t)transfer->transferBuffer, transfer->transferLength);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
/* the callbackFn is initialized in USB_HostGetControllerInterface */
|
||||||
status = hostInstance->controllerTable->controllerWritePipe(hostInstance->controllerHandle, pipeHandle, transfer);
|
status = hostInstance->controllerTable->controllerWritePipe(hostInstance->controllerHandle, pipeHandle, transfer);
|
||||||
|
|
||||||
USB_HostUnlock();
|
(void)USB_HostUnlock();
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -445,7 +425,7 @@ usb_status_t USB_HostSendSetup(usb_host_handle hostHandle,
|
|||||||
usb_host_pipe_handle pipeHandle,
|
usb_host_pipe_handle pipeHandle,
|
||||||
usb_host_transfer_t *transfer)
|
usb_host_transfer_t *transfer)
|
||||||
{
|
{
|
||||||
usb_status_t status = kStatus_USB_Success;
|
usb_status_t status = kStatus_USB_Success;
|
||||||
usb_host_instance_t *hostInstance = (usb_host_instance_t *)hostHandle;
|
usb_host_instance_t *hostInstance = (usb_host_instance_t *)hostHandle;
|
||||||
|
|
||||||
if ((hostHandle == NULL) || (pipeHandle == NULL) || (transfer == NULL))
|
if ((hostHandle == NULL) || (pipeHandle == NULL) || (transfer == NULL))
|
||||||
@ -455,8 +435,8 @@ usb_status_t USB_HostSendSetup(usb_host_handle hostHandle,
|
|||||||
|
|
||||||
/* initialize transfer */
|
/* initialize transfer */
|
||||||
transfer->transferSofar = 0;
|
transfer->transferSofar = 0;
|
||||||
transfer->next = NULL;
|
transfer->next = NULL;
|
||||||
transfer->setupStatus = 0;
|
transfer->setupStatus = 0;
|
||||||
if ((transfer->setupPacket->bmRequestType & USB_REQUEST_TYPE_DIR_MASK) == USB_REQUEST_TYPE_DIR_IN)
|
if ((transfer->setupPacket->bmRequestType & USB_REQUEST_TYPE_DIR_MASK) == USB_REQUEST_TYPE_DIR_IN)
|
||||||
{
|
{
|
||||||
transfer->direction = USB_IN;
|
transfer->direction = USB_IN;
|
||||||
@ -466,7 +446,7 @@ usb_status_t USB_HostSendSetup(usb_host_handle hostHandle,
|
|||||||
transfer->direction = USB_OUT;
|
transfer->direction = USB_OUT;
|
||||||
}
|
}
|
||||||
|
|
||||||
USB_HostLock(); /* This API can be called by host task and application task */
|
(void)USB_HostLock(); /* This API can be called by host task and application task */
|
||||||
/* keep this code: in normal situation application will guarantee the device is attached when call send/receive function
|
/* keep this code: in normal situation application will guarantee the device is attached when call send/receive function
|
||||||
*/
|
*/
|
||||||
#if 0
|
#if 0
|
||||||
@ -484,15 +464,16 @@ usb_status_t USB_HostSendSetup(usb_host_handle hostHandle,
|
|||||||
DCACHE_CleanInvalidateByRange((uint32_t)transfer->transferBuffer, transfer->transferLength);
|
DCACHE_CleanInvalidateByRange((uint32_t)transfer->transferBuffer, transfer->transferLength);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
/* the callbackFn is initialized in USB_HostGetControllerInterface */
|
||||||
status = hostInstance->controllerTable->controllerWritePipe(hostInstance->controllerHandle, pipeHandle, transfer);
|
status = hostInstance->controllerTable->controllerWritePipe(hostInstance->controllerHandle, pipeHandle, transfer);
|
||||||
|
|
||||||
USB_HostUnlock();
|
(void)USB_HostUnlock();
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
usb_status_t USB_HostRecv(usb_host_handle hostHandle, usb_host_pipe_handle pipeHandle, usb_host_transfer_t *transfer)
|
usb_status_t USB_HostRecv(usb_host_handle hostHandle, usb_host_pipe_handle pipeHandle, usb_host_transfer_t *transfer)
|
||||||
{
|
{
|
||||||
usb_status_t status = kStatus_USB_Success;
|
usb_status_t status = kStatus_USB_Success;
|
||||||
usb_host_instance_t *hostInstance = (usb_host_instance_t *)hostHandle;
|
usb_host_instance_t *hostInstance = (usb_host_instance_t *)hostHandle;
|
||||||
|
|
||||||
if ((hostHandle == NULL) || (pipeHandle == NULL) || (transfer == NULL))
|
if ((hostHandle == NULL) || (pipeHandle == NULL) || (transfer == NULL))
|
||||||
@ -502,9 +483,9 @@ usb_status_t USB_HostRecv(usb_host_handle hostHandle, usb_host_pipe_handle pipeH
|
|||||||
|
|
||||||
/* initialize transfer */
|
/* initialize transfer */
|
||||||
transfer->transferSofar = 0;
|
transfer->transferSofar = 0;
|
||||||
transfer->direction = USB_IN;
|
transfer->direction = USB_IN;
|
||||||
|
|
||||||
USB_HostLock(); /* This API can be called by host task and application task */
|
(void)USB_HostLock(); /* This API can be called by host task and application task */
|
||||||
/* keep this code: in normal situation application will guarantee the device is attached when call send/receive function
|
/* keep this code: in normal situation application will guarantee the device is attached when call send/receive function
|
||||||
*/
|
*/
|
||||||
#if 0
|
#if 0
|
||||||
@ -521,9 +502,10 @@ usb_status_t USB_HostRecv(usb_host_handle hostHandle, usb_host_pipe_handle pipeH
|
|||||||
DCACHE_CleanInvalidateByRange((uint32_t)transfer->transferBuffer, transfer->transferLength);
|
DCACHE_CleanInvalidateByRange((uint32_t)transfer->transferBuffer, transfer->transferLength);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
/* the callbackFn is initialized in USB_HostGetControllerInterface */
|
||||||
status = hostInstance->controllerTable->controllerReadPipe(hostInstance->controllerHandle, pipeHandle, transfer);
|
status = hostInstance->controllerTable->controllerReadPipe(hostInstance->controllerHandle, pipeHandle, transfer);
|
||||||
|
|
||||||
USB_HostUnlock();
|
(void)USB_HostUnlock();
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -531,7 +513,7 @@ usb_status_t USB_HostCancelTransfer(usb_host_handle hostHandle,
|
|||||||
usb_host_pipe_handle pipeHandle,
|
usb_host_pipe_handle pipeHandle,
|
||||||
usb_host_transfer_t *transfer)
|
usb_host_transfer_t *transfer)
|
||||||
{
|
{
|
||||||
usb_status_t status = kStatus_USB_Success;
|
usb_status_t status = kStatus_USB_Success;
|
||||||
usb_host_instance_t *hostInstance = (usb_host_instance_t *)hostHandle;
|
usb_host_instance_t *hostInstance = (usb_host_instance_t *)hostHandle;
|
||||||
usb_host_cancel_param_t cancelParam;
|
usb_host_cancel_param_t cancelParam;
|
||||||
|
|
||||||
@ -542,9 +524,10 @@ usb_status_t USB_HostCancelTransfer(usb_host_handle hostHandle,
|
|||||||
|
|
||||||
/* initialize cancel parameter */
|
/* initialize cancel parameter */
|
||||||
cancelParam.pipeHandle = pipeHandle;
|
cancelParam.pipeHandle = pipeHandle;
|
||||||
cancelParam.transfer = transfer;
|
cancelParam.transfer = transfer;
|
||||||
|
|
||||||
/* USB_HostLock(); This api can be called by host task and app task */
|
/* USB_HostLock(); This api can be called by host task and app task */
|
||||||
|
/* the callbackFn is initialized in USB_HostGetControllerInterface */
|
||||||
status = hostInstance->controllerTable->controllerIoctl(hostInstance->controllerHandle, kUSB_HostCancelTransfer,
|
status = hostInstance->controllerTable->controllerIoctl(hostInstance->controllerHandle, kUSB_HostCancelTransfer,
|
||||||
&cancelParam);
|
&cancelParam);
|
||||||
/* USB_HostUnlock(); */
|
/* USB_HostUnlock(); */
|
||||||
@ -562,18 +545,18 @@ usb_status_t USB_HostMallocTransfer(usb_host_handle hostHandle, usb_host_transfe
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* get one from the transfer_head */
|
/* get one from the transfer_head */
|
||||||
USB_HostLock();
|
(void)USB_HostLock();
|
||||||
if (hostInstance->transferHead != NULL)
|
if (hostInstance->transferHead != NULL)
|
||||||
{
|
{
|
||||||
*transfer = hostInstance->transferHead;
|
*transfer = hostInstance->transferHead;
|
||||||
hostInstance->transferHead = hostInstance->transferHead->next;
|
hostInstance->transferHead = hostInstance->transferHead->next;
|
||||||
USB_HostUnlock();
|
(void)USB_HostUnlock();
|
||||||
return kStatus_USB_Success;
|
return kStatus_USB_Success;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
*transfer = NULL;
|
*transfer = NULL;
|
||||||
USB_HostUnlock();
|
(void)USB_HostUnlock();
|
||||||
return kStatus_USB_Error;
|
return kStatus_USB_Error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -592,10 +575,10 @@ usb_status_t USB_HostFreeTransfer(usb_host_handle hostHandle, usb_host_transfer_
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* release one to the transfer_head */
|
/* release one to the transfer_head */
|
||||||
USB_HostLock();
|
(void)USB_HostLock();
|
||||||
transfer->next = hostInstance->transferHead;
|
transfer->next = hostInstance->transferHead;
|
||||||
hostInstance->transferHead = transfer;
|
hostInstance->transferHead = transfer;
|
||||||
USB_HostUnlock();
|
(void)USB_HostUnlock();
|
||||||
return kStatus_USB_Success;
|
return kStatus_USB_Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -604,23 +587,28 @@ usb_status_t USB_HostHelperGetPeripheralInformation(usb_device_handle deviceHand
|
|||||||
uint32_t *infoValue)
|
uint32_t *infoValue)
|
||||||
{
|
{
|
||||||
usb_host_device_instance_t *deviceInstance = (usb_host_device_instance_t *)deviceHandle;
|
usb_host_device_instance_t *deviceInstance = (usb_host_device_instance_t *)deviceHandle;
|
||||||
|
uint32_t *temp;
|
||||||
|
usb_host_dev_info_t devInfo;
|
||||||
if ((deviceHandle == NULL) || (infoValue == NULL))
|
if ((deviceHandle == NULL) || (infoValue == NULL))
|
||||||
{
|
{
|
||||||
return kStatus_USB_InvalidParameter;
|
return kStatus_USB_InvalidParameter;
|
||||||
}
|
}
|
||||||
|
devInfo = (usb_host_dev_info_t)infoCode;
|
||||||
switch (infoCode)
|
switch (devInfo)
|
||||||
{
|
{
|
||||||
case kUSB_HostGetDeviceAddress: /* device address */
|
case kUSB_HostGetDeviceAddress: /* device address */
|
||||||
|
|
||||||
*infoValue = (uint32_t)deviceInstance->setAddress;
|
*infoValue = (uint32_t)deviceInstance->setAddress;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case kUSB_HostGetDeviceControlPipe: /* device control pipe */
|
case kUSB_HostGetDeviceControlPipe: /* device control pipe */
|
||||||
*infoValue = (uint32_t)deviceInstance->controlPipe;
|
temp = (uint32_t *)deviceInstance->controlPipe;
|
||||||
|
*infoValue = (uint32_t)temp;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case kUSB_HostGetHostHandle: /* device host handle */
|
case kUSB_HostGetHostHandle: /* device host handle */
|
||||||
*infoValue = (uint32_t)deviceInstance->hostHandle;
|
temp = (uint32_t *)deviceInstance->hostHandle;
|
||||||
|
*infoValue = (uint32_t)temp;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#if ((defined USB_HOST_CONFIG_HUB) && (USB_HOST_CONFIG_HUB))
|
#if ((defined USB_HOST_CONFIG_HUB) && (USB_HOST_CONFIG_HUB))
|
||||||
@ -685,7 +673,8 @@ usb_status_t USB_HostHelperGetPeripheralInformation(usb_device_handle deviceHand
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return kStatus_USB_Error;
|
/*no action*/
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return kStatus_USB_Success;
|
return kStatus_USB_Success;
|
||||||
@ -698,26 +687,27 @@ usb_status_t USB_HostHelperParseAlternateSetting(usb_host_interface_handle inter
|
|||||||
uint32_t endPosition;
|
uint32_t endPosition;
|
||||||
usb_descriptor_union_t *unionDes;
|
usb_descriptor_union_t *unionDes;
|
||||||
usb_host_ep_t *epParse;
|
usb_host_ep_t *epParse;
|
||||||
|
void *temp;
|
||||||
if (interfaceHandle == NULL)
|
if (interfaceHandle == NULL)
|
||||||
{
|
{
|
||||||
return kStatus_USB_InvalidHandle;
|
return kStatus_USB_InvalidHandle;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (alternateSetting == 0)
|
if (alternateSetting == 0U)
|
||||||
{
|
{
|
||||||
return kStatus_USB_InvalidParameter;
|
return kStatus_USB_InvalidParameter;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* parse configuration descriptor */
|
/* parse configuration descriptor */
|
||||||
unionDes = (usb_descriptor_union_t *)((usb_host_interface_t *)interfaceHandle)
|
temp = (void *)((usb_host_interface_t *)interfaceHandle)->interfaceDesc;
|
||||||
->interfaceDesc; /* interface extend descriptor start */
|
;
|
||||||
|
unionDes = (usb_descriptor_union_t *)temp; /* interface extend descriptor start */
|
||||||
endPosition =
|
endPosition =
|
||||||
(uint32_t)unionDes +
|
(uint32_t)unionDes +
|
||||||
((usb_host_interface_t *)interfaceHandle)->interfaceExtensionLength; /* interface extend descriptor end */
|
((usb_host_interface_t *)interfaceHandle)->interfaceExtensionLength; /* interface extend descriptor end */
|
||||||
unionDes = (usb_descriptor_union_t *)((uint32_t)unionDes + unionDes->common.bLength);
|
unionDes = (usb_descriptor_union_t *)((uint32_t)unionDes + unionDes->common.bLength);
|
||||||
|
|
||||||
/* search for the alternate setting interface descritpor */
|
/* search for the alternate setting interface descriptor */
|
||||||
while ((uint32_t)unionDes < endPosition)
|
while ((uint32_t)unionDes < endPosition)
|
||||||
{
|
{
|
||||||
if (unionDes->interface.bDescriptorType == USB_DESCRIPTOR_TYPE_INTERFACE)
|
if (unionDes->interface.bDescriptorType == USB_DESCRIPTOR_TYPE_INTERFACE)
|
||||||
@ -742,12 +732,12 @@ usb_status_t USB_HostHelperParseAlternateSetting(usb_host_interface_handle inter
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* initialize interface handle structure instance */
|
/* initialize interface handle structure instance */
|
||||||
interface->interfaceDesc = &unionDes->interface;
|
interface->interfaceDesc = &unionDes->interface;
|
||||||
interface->alternateSettingNumber = 0;
|
interface->alternateSettingNumber = 0U;
|
||||||
interface->epCount = 0;
|
interface->epCount = 0U;
|
||||||
interface->interfaceExtension = NULL;
|
interface->interfaceExtension = NULL;
|
||||||
interface->interfaceExtensionLength = 0;
|
interface->interfaceExtensionLength = 0U;
|
||||||
interface->interfaceIndex = unionDes->interface.bInterfaceNumber;
|
interface->interfaceIndex = unionDes->interface.bInterfaceNumber;
|
||||||
|
|
||||||
/* search for endpoint descriptor start position */
|
/* search for endpoint descriptor start position */
|
||||||
unionDes = (usb_descriptor_union_t *)((uint32_t)unionDes + unionDes->common.bLength);
|
unionDes = (usb_descriptor_union_t *)((uint32_t)unionDes + unionDes->common.bLength);
|
||||||
@ -770,7 +760,7 @@ usb_status_t USB_HostHelperParseAlternateSetting(usb_host_interface_handle inter
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* parse endpoint descriptor */
|
/* parse endpoint descriptor */
|
||||||
if (interface->interfaceDesc->bNumEndpoints != 0)
|
if (interface->interfaceDesc->bNumEndpoints != 0U)
|
||||||
{
|
{
|
||||||
if ((unionDes->common.bDescriptorType != USB_DESCRIPTOR_TYPE_ENDPOINT) ||
|
if ((unionDes->common.bDescriptorType != USB_DESCRIPTOR_TYPE_ENDPOINT) ||
|
||||||
(interface->interfaceDesc->bNumEndpoints > USB_HOST_CONFIG_INTERFACE_MAX_EP))
|
(interface->interfaceDesc->bNumEndpoints > USB_HOST_CONFIG_INTERFACE_MAX_EP))
|
||||||
@ -790,11 +780,12 @@ usb_status_t USB_HostHelperParseAlternateSetting(usb_host_interface_handle inter
|
|||||||
#endif
|
#endif
|
||||||
return kStatus_USB_Error;
|
return kStatus_USB_Error;
|
||||||
}
|
}
|
||||||
epParse = (usb_host_ep_t *)&interface->epList[interface->epCount];
|
epParse = (usb_host_ep_t *)&interface->epList[interface->epCount];
|
||||||
epParse->epDesc = (usb_descriptor_endpoint_t *)unionDes;
|
temp = (void *)unionDes;
|
||||||
|
epParse->epDesc = (usb_descriptor_endpoint_t *)temp;
|
||||||
epParse->epExtensionLength = 0;
|
epParse->epExtensionLength = 0;
|
||||||
epParse->epExtension = NULL;
|
epParse->epExtension = NULL;
|
||||||
unionDes = (usb_descriptor_union_t *)((uint32_t)unionDes + unionDes->common.bLength);
|
unionDes = (usb_descriptor_union_t *)((uint32_t)unionDes + unionDes->common.bLength);
|
||||||
while ((uint32_t)unionDes < endPosition)
|
while ((uint32_t)unionDes < endPosition)
|
||||||
{
|
{
|
||||||
if ((unionDes->common.bDescriptorType != USB_DESCRIPTOR_TYPE_ENDPOINT) &&
|
if ((unionDes->common.bDescriptorType != USB_DESCRIPTOR_TYPE_ENDPOINT) &&
|
||||||
@ -820,7 +811,7 @@ usb_status_t USB_HostHelperParseAlternateSetting(usb_host_interface_handle inter
|
|||||||
|
|
||||||
void USB_HostGetVersion(uint32_t *version)
|
void USB_HostGetVersion(uint32_t *version)
|
||||||
{
|
{
|
||||||
if (version)
|
if (NULL != version)
|
||||||
{
|
{
|
||||||
*version =
|
*version =
|
||||||
(uint32_t)USB_MAKE_VERSION(USB_STACK_VERSION_MAJOR, USB_STACK_VERSION_MINOR, USB_STACK_VERSION_BUGFIX);
|
(uint32_t)USB_MAKE_VERSION(USB_STACK_VERSION_MAJOR, USB_STACK_VERSION_MINOR, USB_STACK_VERSION_BUGFIX);
|
||||||
@ -828,12 +819,12 @@ void USB_HostGetVersion(uint32_t *version)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if ((defined(USB_HOST_CONFIG_LOW_POWER_MODE)) && (USB_HOST_CONFIG_LOW_POWER_MODE > 0U))
|
#if ((defined(USB_HOST_CONFIG_LOW_POWER_MODE)) && (USB_HOST_CONFIG_LOW_POWER_MODE > 0U))
|
||||||
/* Send BUS or specific device suepend request */
|
/* Send BUS or specific device suspend request */
|
||||||
usb_status_t USB_HostSuspendDeviceResquest(usb_host_handle hostHandle, usb_device_handle deviceHandle)
|
usb_status_t USB_HostSuspendDeviceResquest(usb_host_handle hostHandle, usb_device_handle deviceHandle)
|
||||||
{
|
{
|
||||||
usb_host_instance_t *hostInstance;
|
usb_host_instance_t *hostInstance;
|
||||||
usb_host_device_instance_t *deviceInstance;
|
usb_host_device_instance_t *deviceInstance;
|
||||||
usb_status_t status = kStatus_USB_Error;
|
usb_status_t status = kStatus_USB_Error;
|
||||||
usb_host_bus_control_t type = kUSB_HostBusSuspend;
|
usb_host_bus_control_t type = kUSB_HostBusSuspend;
|
||||||
|
|
||||||
if (hostHandle == NULL)
|
if (hostHandle == NULL)
|
||||||
@ -849,6 +840,7 @@ usb_status_t USB_HostSuspendDeviceResquest(usb_host_handle hostHandle, usb_devic
|
|||||||
#if ((defined USB_HOST_CONFIG_HUB) && (USB_HOST_CONFIG_HUB))
|
#if ((defined USB_HOST_CONFIG_HUB) && (USB_HOST_CONFIG_HUB))
|
||||||
status = USB_HostHubSuspendDevice(hostInstance);
|
status = USB_HostHubSuspendDevice(hostInstance);
|
||||||
#else
|
#else
|
||||||
|
/* the callbackFn is initialized in USB_HostGetControllerInterface */
|
||||||
status =
|
status =
|
||||||
hostInstance->controllerTable->controllerIoctl(hostInstance->controllerHandle, kUSB_HostBusControl, &type);
|
hostInstance->controllerTable->controllerIoctl(hostInstance->controllerHandle, kUSB_HostBusControl, &type);
|
||||||
#endif
|
#endif
|
||||||
@ -857,11 +849,12 @@ usb_status_t USB_HostSuspendDeviceResquest(usb_host_handle hostHandle, usb_devic
|
|||||||
{
|
{
|
||||||
#if ((defined USB_HOST_CONFIG_HUB) && (USB_HOST_CONFIG_HUB))
|
#if ((defined USB_HOST_CONFIG_HUB) && (USB_HOST_CONFIG_HUB))
|
||||||
deviceInstance = (usb_host_device_instance_t *)deviceHandle;
|
deviceInstance = (usb_host_device_instance_t *)deviceHandle;
|
||||||
if (0 == deviceInstance->hubNumber)
|
if (0U == deviceInstance->hubNumber)
|
||||||
{
|
{
|
||||||
#endif
|
#endif
|
||||||
if (hostInstance->deviceList == deviceHandle)
|
if (hostInstance->deviceList == deviceHandle)
|
||||||
{
|
{
|
||||||
|
/* the callbackFn is initialized in USB_HostGetControllerInterface */
|
||||||
status = hostInstance->controllerTable->controllerIoctl(hostInstance->controllerHandle,
|
status = hostInstance->controllerTable->controllerIoctl(hostInstance->controllerHandle,
|
||||||
kUSB_HostBusControl, &type);
|
kUSB_HostBusControl, &type);
|
||||||
}
|
}
|
||||||
@ -888,7 +881,7 @@ usb_status_t USB_HostResumeDeviceResquest(usb_host_handle hostHandle, usb_device
|
|||||||
{
|
{
|
||||||
usb_host_instance_t *hostInstance;
|
usb_host_instance_t *hostInstance;
|
||||||
usb_host_device_instance_t *deviceInstance;
|
usb_host_device_instance_t *deviceInstance;
|
||||||
usb_status_t status = kStatus_USB_Error;
|
usb_status_t status = kStatus_USB_Error;
|
||||||
usb_host_bus_control_t type = kUSB_HostBusResume;
|
usb_host_bus_control_t type = kUSB_HostBusResume;
|
||||||
|
|
||||||
if (hostHandle == NULL)
|
if (hostHandle == NULL)
|
||||||
@ -905,6 +898,7 @@ usb_status_t USB_HostResumeDeviceResquest(usb_host_handle hostHandle, usb_device
|
|||||||
|
|
||||||
if (NULL == deviceHandle)
|
if (NULL == deviceHandle)
|
||||||
{
|
{
|
||||||
|
/* the callbackFn is initialized in USB_HostGetControllerInterface */
|
||||||
status =
|
status =
|
||||||
hostInstance->controllerTable->controllerIoctl(hostInstance->controllerHandle, kUSB_HostBusControl, &type);
|
hostInstance->controllerTable->controllerIoctl(hostInstance->controllerHandle, kUSB_HostBusControl, &type);
|
||||||
}
|
}
|
||||||
@ -912,11 +906,12 @@ usb_status_t USB_HostResumeDeviceResquest(usb_host_handle hostHandle, usb_device
|
|||||||
{
|
{
|
||||||
#if ((defined USB_HOST_CONFIG_HUB) && (USB_HOST_CONFIG_HUB))
|
#if ((defined USB_HOST_CONFIG_HUB) && (USB_HOST_CONFIG_HUB))
|
||||||
deviceInstance = (usb_host_device_instance_t *)deviceHandle;
|
deviceInstance = (usb_host_device_instance_t *)deviceHandle;
|
||||||
if (0 == deviceInstance->hubNumber)
|
if (0U == deviceInstance->hubNumber)
|
||||||
{
|
{
|
||||||
#endif
|
#endif
|
||||||
if (hostInstance->deviceList == deviceHandle)
|
if (hostInstance->deviceList == deviceHandle)
|
||||||
{
|
{
|
||||||
|
/* the callbackFn is initialized in USB_HostGetControllerInterface */
|
||||||
status = hostInstance->controllerTable->controllerIoctl(hostInstance->controllerHandle,
|
status = hostInstance->controllerTable->controllerIoctl(hostInstance->controllerHandle,
|
||||||
kUSB_HostBusControl, &type);
|
kUSB_HostBusControl, &type);
|
||||||
}
|
}
|
||||||
@ -935,13 +930,13 @@ usb_status_t USB_HostResumeDeviceResquest(usb_host_handle hostHandle, usb_device
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
#if ((defined(USB_HOST_CONFIG_LPM_L1)) && (USB_HOST_CONFIG_LPM_L1 > 0U))
|
#if ((defined(USB_HOST_CONFIG_LPM_L1)) && (USB_HOST_CONFIG_LPM_L1 > 0U))
|
||||||
/* Send BUS or specific device suepend request */
|
/* Send BUS or specific device suspend request */
|
||||||
usb_status_t USB_HostL1SleepDeviceResquest(usb_host_handle hostHandle,
|
usb_status_t USB_HostL1SleepDeviceResquest(usb_host_handle hostHandle,
|
||||||
usb_device_handle deviceHandle,
|
usb_device_handle deviceHandle,
|
||||||
uint8_t sleepType)
|
uint8_t sleepType)
|
||||||
{
|
{
|
||||||
usb_host_instance_t *hostInstance;
|
usb_host_instance_t *hostInstance;
|
||||||
usb_status_t status = kStatus_USB_Error;
|
usb_status_t status = kStatus_USB_Error;
|
||||||
usb_host_bus_control_t type = kUSB_HostBusL1Sleep;
|
usb_host_bus_control_t type = kUSB_HostBusL1Sleep;
|
||||||
|
|
||||||
if (hostHandle == NULL)
|
if (hostHandle == NULL)
|
||||||
@ -955,8 +950,9 @@ usb_status_t USB_HostL1SleepDeviceResquest(usb_host_handle hostHandle,
|
|||||||
if (1U == sleepType)
|
if (1U == sleepType)
|
||||||
{
|
{
|
||||||
/*#if ((defined USB_HOST_CONFIG_HUB) && (USB_HOST_CONFIG_HUB))*/
|
/*#if ((defined USB_HOST_CONFIG_HUB) && (USB_HOST_CONFIG_HUB))*/
|
||||||
/*To do, implete hub L1 suspend device*/
|
/*To do, incomplete hub L1 suspend device*/
|
||||||
/*#else*/
|
/*#else*/
|
||||||
|
/* the callbackFn is initialized in USB_HostGetControllerInterface */
|
||||||
status =
|
status =
|
||||||
hostInstance->controllerTable->controllerIoctl(hostInstance->controllerHandle, kUSB_HostBusControl, &type);
|
hostInstance->controllerTable->controllerIoctl(hostInstance->controllerHandle, kUSB_HostBusControl, &type);
|
||||||
/*#endif*/
|
/*#endif*/
|
||||||
@ -968,6 +964,7 @@ usb_status_t USB_HostL1SleepDeviceResquest(usb_host_handle hostHandle,
|
|||||||
#endif
|
#endif
|
||||||
if (hostInstance->deviceList == deviceHandle)
|
if (hostInstance->deviceList == deviceHandle)
|
||||||
{
|
{
|
||||||
|
/* the callbackFn is initialized in USB_HostGetControllerInterface */
|
||||||
status = hostInstance->controllerTable->controllerIoctl(hostInstance->controllerHandle, kUSB_HostBusControl,
|
status = hostInstance->controllerTable->controllerIoctl(hostInstance->controllerHandle, kUSB_HostBusControl,
|
||||||
&type);
|
&type);
|
||||||
}
|
}
|
||||||
@ -978,7 +975,7 @@ usb_status_t USB_HostL1SleepDeviceResquest(usb_host_handle hostHandle,
|
|||||||
}
|
}
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
/* Send BUS or specific device suepend request */
|
/* Send BUS or specific device suspend request */
|
||||||
usb_status_t USB_HostL1SleepDeviceResquestConfig(usb_host_handle hostHandle, uint8_t *lpmParam)
|
usb_status_t USB_HostL1SleepDeviceResquestConfig(usb_host_handle hostHandle, uint8_t *lpmParam)
|
||||||
{
|
{
|
||||||
usb_host_instance_t *hostInstance;
|
usb_host_instance_t *hostInstance;
|
||||||
@ -989,7 +986,7 @@ usb_status_t USB_HostL1SleepDeviceResquestConfig(usb_host_handle hostHandle, uin
|
|||||||
return kStatus_USB_InvalidHandle;
|
return kStatus_USB_InvalidHandle;
|
||||||
}
|
}
|
||||||
hostInstance = (usb_host_instance_t *)hostHandle;
|
hostInstance = (usb_host_instance_t *)hostHandle;
|
||||||
|
/* the callbackFn is initialized in USB_HostGetControllerInterface */
|
||||||
status =
|
status =
|
||||||
hostInstance->controllerTable->controllerIoctl(hostInstance->controllerHandle, kUSB_HostL1Config, lpmParam);
|
hostInstance->controllerTable->controllerIoctl(hostInstance->controllerHandle, kUSB_HostL1Config, lpmParam);
|
||||||
|
|
||||||
@ -1003,7 +1000,7 @@ usb_status_t USB_HostL1ResumeDeviceResquest(usb_host_handle hostHandle,
|
|||||||
{
|
{
|
||||||
usb_host_instance_t *hostInstance;
|
usb_host_instance_t *hostInstance;
|
||||||
|
|
||||||
usb_status_t status = kStatus_USB_Error;
|
usb_status_t status = kStatus_USB_Error;
|
||||||
usb_host_bus_control_t type = kUSB_HostBusL1Resume;
|
usb_host_bus_control_t type = kUSB_HostBusL1Resume;
|
||||||
|
|
||||||
if (hostHandle == NULL)
|
if (hostHandle == NULL)
|
||||||
@ -1014,17 +1011,19 @@ usb_status_t USB_HostL1ResumeDeviceResquest(usb_host_handle hostHandle,
|
|||||||
|
|
||||||
if (1U == sleepType)
|
if (1U == sleepType)
|
||||||
{
|
{
|
||||||
|
/* the callbackFn is initialized in USB_HostGetControllerInterface */
|
||||||
status =
|
status =
|
||||||
hostInstance->controllerTable->controllerIoctl(hostInstance->controllerHandle, kUSB_HostBusControl, &type);
|
hostInstance->controllerTable->controllerIoctl(hostInstance->controllerHandle, kUSB_HostBusControl, &type);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
#if ((defined USB_HOST_CONFIG_HUB) && (USB_HOST_CONFIG_HUB))
|
#if ((defined USB_HOST_CONFIG_HUB) && (USB_HOST_CONFIG_HUB))
|
||||||
/*To do, if device hub number is 0, need suspend the bus ,else suspend the corresponding device*/
|
/*To do, if device hub number is 0, need suspend the bus ,else suspend the corresponding device*/
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
if (hostInstance->deviceList == deviceHandle)
|
if (hostInstance->deviceList == deviceHandle)
|
||||||
{
|
{
|
||||||
|
/* the callbackFn is initialized in USB_HostGetControllerInterface */
|
||||||
status = hostInstance->controllerTable->controllerIoctl(hostInstance->controllerHandle, kUSB_HostBusControl,
|
status = hostInstance->controllerTable->controllerIoctl(hostInstance->controllerHandle, kUSB_HostBusControl,
|
||||||
&type);
|
&type);
|
||||||
}
|
}
|
||||||
@ -1050,3 +1049,18 @@ usb_status_t USB_HostUpdateHwTick(usb_host_handle hostHandle, uint64_t tick)
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if ((defined(USB_HOST_CONFIG_BATTERY_CHARGER)) && (USB_HOST_CONFIG_BATTERY_CHARGER > 0U))
|
||||||
|
usb_status_t USB_HostSetChargerType(usb_host_handle hostHandle, uint8_t type)
|
||||||
|
{
|
||||||
|
usb_host_instance_t *hostInstance;
|
||||||
|
|
||||||
|
if (hostHandle == NULL)
|
||||||
|
{
|
||||||
|
return kStatus_USB_InvalidHandle;
|
||||||
|
}
|
||||||
|
hostInstance = (usb_host_instance_t *)hostHandle;
|
||||||
|
return hostInstance->controllerTable->controllerIoctl(hostInstance->controllerHandle, kUSB_HostSetChargerType,
|
||||||
|
&type);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
@ -1,31 +1,9 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2015, Freescale Semiconductor, Inc.
|
* Copyright (c) 2015, Freescale Semiconductor, Inc.
|
||||||
* Copyright 2016 NXP
|
* Copyright 2016 - 2019 NXP
|
||||||
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without modification,
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
* are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* o Redistributions of source code must retain the above copyright notice, this list
|
|
||||||
* of conditions and the following disclaimer.
|
|
||||||
*
|
|
||||||
* o Redistributions in binary form must reproduce the above copyright notice, this
|
|
||||||
* list of conditions and the following disclaimer in the documentation and/or
|
|
||||||
* other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* o Neither the name of the copyright holder nor the names of its
|
|
||||||
* contributors may be used to endorse or promote products derived from this
|
|
||||||
* software without specific prior written permission.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
|
||||||
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _USB_HOST_HCI_H_
|
#ifndef _USB_HOST_HCI_H_
|
||||||
@ -36,9 +14,9 @@
|
|||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
/*! @brief USB host lock */
|
/*! @brief USB host lock */
|
||||||
#define USB_HostLock() USB_OsaMutexLock(hostInstance->hostMutex)
|
#define USB_HostLock() OSA_MutexLock(hostInstance->hostMutex, RT_WAITING_FOREVER)
|
||||||
/*! @brief USB host unlock */
|
/*! @brief USB host unlock */
|
||||||
#define USB_HostUnlock() USB_OsaMutexUnlock(hostInstance->hostMutex)
|
#define USB_HostUnlock() OSA_MutexUnlock(hostInstance->hostMutex)
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @addtogroup usb_host_controller_driver
|
* @addtogroup usb_host_controller_driver
|
||||||
@ -56,6 +34,10 @@ typedef enum _usb_host_controller_control
|
|||||||
kUSB_HostPortAttachDisable, /*!< Disable the port attach event */
|
kUSB_HostPortAttachDisable, /*!< Disable the port attach event */
|
||||||
kUSB_HostPortAttachEnable, /*!< Enable the port attach event */
|
kUSB_HostPortAttachEnable, /*!< Enable the port attach event */
|
||||||
kUSB_HostL1Config, /*!< L1 suspend Bus control code */
|
kUSB_HostL1Config, /*!< L1 suspend Bus control code */
|
||||||
|
kUSB_HostSetChargerType, /*!< set charger type */
|
||||||
|
#if ((defined USB_HOST_CONFIG_COMPLIANCE_TEST) && (USB_HOST_CONFIG_COMPLIANCE_TEST))
|
||||||
|
kUSB_HostTestModeInit, /*!< intialize charger type */
|
||||||
|
#endif
|
||||||
} usb_host_controller_control_t;
|
} usb_host_controller_control_t;
|
||||||
|
|
||||||
/*! @brief USB host controller bus control code */
|
/*! @brief USB host controller bus control code */
|
||||||
@ -97,7 +79,9 @@ typedef struct _usb_host_controller_interface
|
|||||||
uint32_t ioctlEvent,
|
uint32_t ioctlEvent,
|
||||||
void *ioctlParam); /*!< Control a controller function prototype*/
|
void *ioctlParam); /*!< Control a controller function prototype*/
|
||||||
} usb_host_controller_interface_t;
|
} usb_host_controller_interface_t;
|
||||||
|
#if ((defined USB_HOST_CONFIG_COMPLIANCE_TEST) && (USB_HOST_CONFIG_COMPLIANCE_TEST))
|
||||||
|
usb_status_t USB_HostTestModeInit(usb_device_handle deviceHandle);
|
||||||
|
#endif
|
||||||
/*! @}*/
|
/*! @}*/
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@ -110,7 +94,8 @@ typedef struct _usb_host_instance
|
|||||||
{
|
{
|
||||||
void *controllerHandle; /*!< The low level controller handle*/
|
void *controllerHandle; /*!< The low level controller handle*/
|
||||||
host_callback_t deviceCallback; /*!< Device attach/detach callback*/
|
host_callback_t deviceCallback; /*!< Device attach/detach callback*/
|
||||||
usb_osa_mutex_handle hostMutex; /*!< Host layer mutex*/
|
osa_mutex_handle_t hostMutex; /*!< Host layer mutex*/
|
||||||
|
uint32_t mutexBuffer[(OSA_MUTEX_HANDLE_SIZE + 3) / 4]; /*!< Host layer mutex*/
|
||||||
usb_host_transfer_t transferList[USB_HOST_CONFIG_MAX_TRANSFERS]; /*!< Transfer resource*/
|
usb_host_transfer_t transferList[USB_HOST_CONFIG_MAX_TRANSFERS]; /*!< Transfer resource*/
|
||||||
usb_host_transfer_t *transferHead; /*!< Idle transfer head*/
|
usb_host_transfer_t *transferHead; /*!< Idle transfer head*/
|
||||||
const usb_host_controller_interface_t *controllerTable; /*!< KHCI/EHCI interface*/
|
const usb_host_controller_interface_t *controllerTable; /*!< KHCI/EHCI interface*/
|
||||||
@ -126,6 +111,7 @@ typedef struct _usb_host_instance
|
|||||||
uint8_t controllerId; /*!< The controller ID*/
|
uint8_t controllerId; /*!< The controller ID*/
|
||||||
} usb_host_instance_t;
|
} usb_host_instance_t;
|
||||||
|
|
||||||
|
extern usb_host_instance_t g_UsbHostInstance[USB_HOST_CONFIG_MAX_HOST];
|
||||||
/*! @}*/
|
/*! @}*/
|
||||||
|
|
||||||
#endif /* _USB_HOST_HCI_H_ */
|
#endif /* _USB_HOST_HCI_H_ */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user