2025-02-27 17:59:18 +08:00

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