253 lines
6.5 KiB
C
Executable File
253 lines
6.5 KiB
C
Executable File
// Copyright 2020-2021 Beken
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
#pragma once
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#include "usb_types.h"
|
|
#include "uvc_uac_api_common.h"
|
|
|
|
/*******************************************************************************
|
|
* Function Declarations
|
|
*******************************************************************************/
|
|
|
|
/**
|
|
* @brief USB Driver initialization
|
|
*
|
|
* Register the adaptation layer and pass the function pointers used by
|
|
* the closed source library. Register the current USB Class type to be
|
|
* supported, and it can be uninstalled and reinitialized during execution.
|
|
* But be sure to do so before calling other interfaces.
|
|
*
|
|
* - Configure Interrupt handling function registration
|
|
* - Configure Class Driver Registration
|
|
*
|
|
* This API should be called before any other USB APIs.
|
|
*
|
|
* @return
|
|
* - BK_OK: succeed
|
|
* - others: other errors.
|
|
*/
|
|
bk_err_t bk_usb_driver_init(void);
|
|
|
|
/**
|
|
* @brief USB Driver uninstallation
|
|
*
|
|
* Turn off the USB main interrupt switch
|
|
* Unregister Total Interrupt Handling Function
|
|
* Unregistered Class Driver
|
|
*
|
|
* This API should be called after any other USB APIs.
|
|
*
|
|
* @return
|
|
* - BK_OK: succeed
|
|
* - others: other errors.
|
|
*/
|
|
bk_err_t bk_usb_driver_deinit(void);
|
|
|
|
/**
|
|
* @brief Pin controlled USB Vbus
|
|
*
|
|
* This API controls VBUS for USB:
|
|
* - Determine whether to output voltage through the
|
|
* high and low levels of a GPIO output
|
|
* parameter: gpio_id
|
|
* Select the corresponding pin number
|
|
* ops
|
|
* Choose to power on or off
|
|
*
|
|
* - Configure whether USB is power on
|
|
*
|
|
* When the fusion device is working, if there is a device voting for use,
|
|
* it cannot be directly turned off.
|
|
*
|
|
* @return
|
|
* - BK_OK: succeed
|
|
* - others: other errors.
|
|
*/
|
|
bk_err_t bk_usb_power_ops(uint32_t gpio_id, bool ops);
|
|
|
|
/**
|
|
* @brief open the USB
|
|
*
|
|
* This API configure the resoure common to USB:
|
|
* - Select the identity as host or slave
|
|
* parameter: usb_mode
|
|
* USB_HOST_MODE = 0
|
|
* USB_DEVICE_MODE = 1
|
|
*
|
|
* - Configure USB common clock
|
|
* - Configure USB common registers
|
|
*
|
|
* This API should be called before any other USB APIs.
|
|
*
|
|
* @return
|
|
* - BK_OK: succeed
|
|
* - others: other errors.
|
|
*/
|
|
bk_err_t bk_usb_open (uint32_t usb_mode);
|
|
|
|
/**
|
|
* @brief close the USB
|
|
*
|
|
* This API release USB resources:
|
|
* - Restore register
|
|
* - Turn off the power and clock
|
|
*
|
|
* This API should be called after any other USB APIs.
|
|
*
|
|
* @return
|
|
* - BK_OK: succeed
|
|
* - others: other errors.
|
|
*/
|
|
bk_err_t bk_usb_close (void);
|
|
|
|
/**
|
|
* @brief Initializes the control transfer request resource
|
|
*
|
|
*
|
|
* @return
|
|
* - BK_OK: succeed
|
|
* - others: other errors.
|
|
*/
|
|
bk_err_t bk_usb_control_transfer_init(void);
|
|
|
|
/**
|
|
* @brief Unmount control transfer to release resource
|
|
*
|
|
*
|
|
* @return
|
|
* - BK_OK: succeed
|
|
* - others: other errors.
|
|
*/
|
|
bk_err_t bk_usb_control_transfer_deinit(void);
|
|
|
|
/**
|
|
* @brief Control command and data interface fucntion to be passed
|
|
*
|
|
* This API is used to send commands and transfer data:
|
|
* - Two parameters pSetup/buffer_info.
|
|
* - s_usb_device_request:
|
|
* The command format is specified by the USB protocol
|
|
* - s_usb_transfer_buffer_info:
|
|
* Buffer informataion for sending and receiving data.
|
|
*
|
|
* example: Reference UVC_OTA demo
|
|
*
|
|
*
|
|
* @return
|
|
* - BK_OK: succeed
|
|
* - others: other errors.
|
|
*/
|
|
bk_err_t bk_usb_control_transfer(s_usb_device_request *pSetup, s_usb_transfer_buffer_info *buffer_info);
|
|
|
|
/**
|
|
* @brief A voting function is currently in use
|
|
*
|
|
* This API requires two parameters to be filled in for voting to prevent
|
|
* it from being closed
|
|
* parameter: use_or_no
|
|
* TRUE USBING
|
|
* FALSE NOT used
|
|
* dev
|
|
* USB_UVC_DEVICE
|
|
* USB_UAC_MIC_DEVICE
|
|
* USB_UAC_SPEAKER_DEVICE
|
|
* USB_MSD_DEVICE
|
|
* USB_OTA_DEVICE
|
|
* USB_USER_CHECK_DEVICE
|
|
*
|
|
*
|
|
* @return
|
|
* - BK_OK: succeed
|
|
* - others: other errors.
|
|
*/
|
|
void bk_usb_device_set_using_status(bool use_or_no, E_USB_DEVICE_T dev);
|
|
|
|
/**
|
|
* @brief Obtain whether there is currently a device connection
|
|
*
|
|
*
|
|
* @return
|
|
* - TRUE: connect
|
|
* - FALSE: disconnect
|
|
*/
|
|
bool bk_usb_get_device_connect_status(void);
|
|
|
|
/**
|
|
* @brief Check if the corresponding device class is supported
|
|
*
|
|
*
|
|
* @return
|
|
* - BK_OK: succeed
|
|
* - others: other errors.
|
|
*/
|
|
bk_err_t bk_usb_check_device_supported(E_USB_DEVICE_T usb_dev);
|
|
|
|
/**
|
|
* @brief Obtain device descriptor
|
|
*
|
|
* dev_descriptor:
|
|
* uint8_t bLength; Descriptor size in bytes = 18
|
|
* uint8_t bDescriptorType; DEVICE descriptor type = 1
|
|
* uint16_t bcdUSB; USB spec in BCD, e.g. 0x0200
|
|
* uint8_t bDeviceClass; Class code, if 0 see interface
|
|
* uint8_t bDeviceSubClass; Sub-Class code, 0 if class = 0
|
|
* uint8_t bDeviceProtocol; Protocol, if 0 see interface
|
|
* uint8_t bMaxPacketSize0; Endpoint 0 max. size
|
|
* uint16_t idVendor; Vendor ID per USB-IF
|
|
* uint16_t idProduct; Product ID per manufacture
|
|
* uint16_t bcdDevice; Device release # in BCD
|
|
* uint8_t iManufacturer; Index to manufacturer string
|
|
* uint8_t iProduct; Index to product string
|
|
* uint8_t iSerialNumber; Index to serial number string
|
|
* uint8_t bNumConfigurations; Number of possible configurations
|
|
*
|
|
*/
|
|
bk_err_t bk_usb_get_device_descriptor(struct usb_device_descriptor_t *dev_descriptor);
|
|
|
|
/**
|
|
* @brief Initialize the USB master mailbox software
|
|
*
|
|
*
|
|
*/
|
|
void bk_usb_mailbox_sw_master_init(void);
|
|
|
|
/**
|
|
* @brief Initialize the USB slave mailbox software
|
|
*
|
|
*
|
|
*/
|
|
void bk_usb_mailbox_sw_slave_init(void);
|
|
|
|
/**
|
|
* @brief Uninstall the USB master mailbox software
|
|
*
|
|
*
|
|
*/
|
|
void bk_usb_mailbox_sw_master_deinit(void);
|
|
|
|
/**
|
|
* @brief Uninstall the USB slave mailbox software
|
|
*
|
|
*
|
|
*/
|
|
void bk_usb_mailbox_sw_slave_deinit(void);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif |