From ddcc034f34edd3822c6168b410ce8436622fe852 Mon Sep 17 00:00:00 2001 From: 18191865724 Date: Fri, 27 Dec 2024 17:34:52 +0800 Subject: [PATCH] fix:usb passthrought interface Signed-off-by: 18191865724 --- usb/bundle.json | 22 ++ usb/v2_0/BUILD.gn | 38 ++ usb/v2_0/IUsbDeviceInterface.idl | 111 ++++++ usb/v2_0/IUsbHostInterface.idl | 591 +++++++++++++++++++++++++++++ usb/v2_0/IUsbPortInterface.idl | 108 ++++++ usb/v2_0/IUsbdBulkCallback.idl | 47 +++ usb/v2_0/IUsbdSubscriber.idl | 49 +++ usb/v2_0/IUsbdTransferCallback.idl | 48 +++ usb/v2_0/UsbTypes.idl | 161 ++++++++ 9 files changed, 1175 insertions(+) create mode 100644 usb/v2_0/BUILD.gn create mode 100644 usb/v2_0/IUsbDeviceInterface.idl create mode 100644 usb/v2_0/IUsbHostInterface.idl create mode 100644 usb/v2_0/IUsbPortInterface.idl create mode 100644 usb/v2_0/IUsbdBulkCallback.idl create mode 100644 usb/v2_0/IUsbdSubscriber.idl create mode 100644 usb/v2_0/IUsbdTransferCallback.idl create mode 100644 usb/v2_0/UsbTypes.idl diff --git a/usb/bundle.json b/usb/bundle.json index 8fdca89e..95ed9c2a 100644 --- a/usb/bundle.json +++ b/usb/bundle.json @@ -32,6 +32,7 @@ "sub_component": [ "//drivers/interface/usb/v1_0:usb_idl_target", "//drivers/interface/usb/v1_1:usb_idl_target", + "//drivers/interface/usb/v2_0:usb_idl_target", "//drivers/interface/usb/gadget/mtp/v1_0:usbfn_mtp_idl_target", "//drivers/interface/usb/ddk/v1_0:usb_ddk_idl_target" ], @@ -120,6 +121,27 @@ "header_files": [], "header_base": "//drivers/interface/usb" } + }, + { + "name": "//drivers/interface/usb/v2_0:libusb_proxy_2.0", + "header": { + "header_files": [], + "header_base": "//drivers/interface/usb" + } + }, + { + "name": "//drivers/interface/usb/v2_0:libusb_stub_2.0", + "header": { + "header_files": [], + "header_base": "//drivers/interface/usb" + } + }, + { + "name": "//drivers/interface/usb/v2_0:usb_idl_headers_2.0", + "header": { + "header_files": [], + "header_base": "//drivers/interface/usb" + } } ] } diff --git a/usb/v2_0/BUILD.gn b/usb/v2_0/BUILD.gn new file mode 100644 index 00000000..c167863b --- /dev/null +++ b/usb/v2_0/BUILD.gn @@ -0,0 +1,38 @@ +# Copyright (c) 2024 Huawei Device Co., Ltd. +# 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. + +import("//build/config/components/hdi/hdi.gni") +if (defined(ohos_lite)) { + group("libusb_proxy_2.0") { + deps = [] + public_configs = [] + } +} else { + hdi("usb") { + module_name = "usbd" + + sources = [ + "IUsbDeviceInterface.idl", + "IUsbHostInterface.idl", + "IUsbPortInterface.idl", + "IUsbdBulkCallback.idl", + "IUsbdSubscriber.idl", + "IUsbdTransferCallback.idl", + "UsbTypes.idl", + ] + + language = "cpp" + subsystem_name = "hdf" + part_name = "drivers_interface_usb" + } +} diff --git a/usb/v2_0/IUsbDeviceInterface.idl b/usb/v2_0/IUsbDeviceInterface.idl new file mode 100644 index 00000000..b6ad4003 --- /dev/null +++ b/usb/v2_0/IUsbDeviceInterface.idl @@ -0,0 +1,111 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * 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. + */ + + /* * + * @addtogroup HdiUsb + * @{ + * + * @brief Provides unified APIs for usb services to access usb drivers. + * + * A usb service can obtain a usb driver object or agent and then call APIs provided by this object or agent to + * access different types of usb devices based on the usb IDs, thereby obtaining usb information, + * subscribing to or unsubscribing from usb data, enabling or disabling a usb, + * setting the usb data reporting mode, and setting usb options such as the accuracy and measurement range. + * + * @since 5.1 + * @version 1.0 + */ + +package ohos.hdi.usb.v2_0; + +import ohos.hdi.usb.v2_0.IUsbdSubscriber; + +interface IUsbDeviceInterface { + + /* * + * @brief Obtains the list of functions (represented by bit field) supported by the current device. + * + * @param funcs Indicates the list of functions supported by the current device. + * + * @return Returns 0 if the operation is successful; returns a non-0 value if the operation fails. + * @since 5.1 + * @version 1.0 + */ + GetCurrentFunctions([out] int funcs); + + /* * + * @brief Sets the list of functions (represented by bit field) supported by the current device. + * + * @param funcs Indicates the list of functions supported by the current device. + * + * @return Returns 0 if the operation is successful; returns a non-0 value if the operation fails. + * @since 5.1 + * @version 1.0 + */ + SetCurrentFunctions([in] int funcs); + + /* * + * @brief Get Accessory Strings. + * + * @param accessoryInfo Indicates the accessory information. + * + * @return Returns 0 if the operation is successful; returns a non-0 value if the operation fails. + * @since 5.1 + * @version 1.0 + */ + GetAccessoryInfo([out] String[] accessoryInfo); + + /* * + * @brief open the accessory. + * + * @param fd accessory file descriptor + * + * @return Returns 0 if the operation is successful; returns a non-0 value if the operation fails. + * @since 5.1 + * @version 1.0 + */ + OpenAccessory([out] FileDescriptor fd); + + /* * + * @brief close the accessory. + * + * @return Returns 0 if the operation is successful; returns a non-0 value if the operation fails. + * @since 5.1 + * @version 1.0 + */ + CloseAccessory([in] FileDescriptor fd); + + /* * + * @brief Binds a subscriber. + * + * @param subscriber Indicates the subscriber. + * + * @return Returns 0 if the operation is successful; returns a non-0 value if the operation fails. + * @since 5.1 + * @version 1.0 + */ + BindUsbdSubscriber([in] IUsbdSubscriber subscriber); + + /* * + * @brief Unbinds a subscriber. + * + * @param subscriber Indicates the subscriber. + * + * @return Returns 0 if the operation is successful; returns a non-0 value if the operation fails. + * @since 5.1 + * @version 1.0 + */ + UnbindUsbdSubscriber([in] IUsbdSubscriber subscriber); +} \ No newline at end of file diff --git a/usb/v2_0/IUsbHostInterface.idl b/usb/v2_0/IUsbHostInterface.idl new file mode 100644 index 00000000..e21c84a5 --- /dev/null +++ b/usb/v2_0/IUsbHostInterface.idl @@ -0,0 +1,591 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * 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. + */ + +/* * + * @addtogroup HdiUsb + * @{ + * + * @brief Provides unified APIs for usb services to access usb drivers. + * + * A usb service can obtain a usb driver object or agent and then call APIs provided by this object or agent to + * access different types of usb devices based on the usb IDs, thereby obtaining usb information, + * subscribing to or unsubscribing from usb data, enabling or disabling a usb, + * setting the usb data reporting mode, and setting usb options such as the accuracy and measurement range. + * + * @since 5.1 + * @version 1.0 + */ + +/* * + * @file IUsbHostInterface.idl + * + * @brief Declares the APIs provided by the usb module for obtaining usb information, subscribing to or + * unsubscribing from usb data, enabling or disabling a usb, setting the usb data reporting mode, + * and setting usb options such as the accuracy and measurement range. + * + * @since 5.1 + * @version 1.0 + */ + +package ohos.hdi.usb.v2_0; + +import ohos.hdi.usb.v2_0.UsbTypes; +import ohos.hdi.usb.v2_0.IUsbdSubscriber; +import ohos.hdi.usb.v2_0.IUsbdBulkCallback; +import ohos.hdi.usb.v2_0.IUsbdTransferCallback; + +/* * + * @brief Defines the functions for performing basic operations on usb. + * + * The operations include obtaining usb information, subscribing to or unsubscribing from usb data, + * enabling or disabling a usb, setting the usb data reporting mode, and setting usb options such as + * the accuracy and measurement range. + */ +interface IUsbHostInterface { + + /* * + * @brief Opens a USB device to set up a connection. + * + * @param dev Indicates the USB device address. + * + * @return Returns 0 if the operation is successful; returns a non-0 value if the operation fails. + * @since 5.1 + * @version 1.0 + */ + OpenDevice([in] struct UsbDev dev); + + /* * + * @brief Closes a USB device to release all system resources related to the device. + * + * @param dev Indicates the USB device address. + * + * @return Returns 0 if the operation is successful; returns a non-0 value if the operation fails. + * @since 5.1 + * @version 1.0 + */ + CloseDevice([in] struct UsbDev dev); + + /* * + * @brief Reset device. + * + * @param dev Indicates the USB device address. + * + * @return Returns 0 if the operation is successful; returns a non-0 value if the operation fails. + * @since 5.1 + * @version 1.0 + */ + ResetDevice([in] struct UsbDev dev); + + /* * + * @brief Claims a USB interface exclusively. This must be done before data transfer. + * + * @param dev Indicates the USB device address. + * @param interfaceid Indicates the interface ID of the USB device. + * @param force Indicates whether to enable the force mode. The value 1 indicates that the force mode is + * enabled, and value 0 indicates the opposite. + * + * @return Returns 0 if the operation is successful; returns a non-0 value if the operation fails. + * @since 5.1 + * @version 1.0 + */ + ClaimInterface([in] struct UsbDev dev, [in] unsigned char interfaceid, [in] unsigned char force); + + /* * + * @brief Sets the alternate settings for the specified USB interface. This allows you to switch between two + * interfaces with the same ID but different alternate settings. + * + * @param dev Indicates the USB device address. + * @param interfaceid Indicates the interface ID of the USB device. + * @param altIndex Indicates the alternate settings of the USB interface. + * + * @return Returns 0 if the operation is successful; returns a non-0 value if the operation fails. + * @since 5.1 + * @version 1.0 + */ + SetInterface([in] struct UsbDev dev, [in] unsigned char interfaceid, [in] unsigned char altIndex); + + /* * + * @brief Releases a USB interface. This is usually done after data transfer. + * + * @param dev Indicates the USB device address. + * @param interfaceid Indicates the interface ID of the USB device. + * + * @return Returns 0 if the operation is successful; returns a non-0 value if the operation fails. + * @since 5.1 + * @version 1.0 + */ + ReleaseInterface([in] struct UsbDev dev, [in] unsigned char interfaceid); + + /* * + * @brief Sets the configuration information of a USB device. + * + * @param dev Indicates the USB device address. + * @param configIndex Indicates the configuration information of the USB device. + * + * @return Returns 0 if the operation is successful; returns a non-0 value if the operation fails. + * @since 5.1 + * @version 1.0 + */ + SetConfig([in] struct UsbDev dev, [in] unsigned char configIndex); + + /* * + * @brief Manage a USB interface exclusively. Detach or attach the interface. + * + * @param dev Indicates the USB device address. + * @param interfaceid Indicates the interface ID of the USB device. + * @param disable Indicates whether to disable the interface. + * + * @return Returns 0 if the operation is successful; returns a non-0 value if the operation fails. + * @since 5.1 + * @version 1.0 + */ + ManageInterface([in] struct UsbDev dev, [in] unsigned char interfaceid, [in] boolean disable); + + /* * + * @brief Clear the halt status for an endpoint. + * + * @param dev Indicates the USB device address. + * @param pipe Indicates the pipe of the USB device. + * + * @return Returns 0 if the operation is successful; returns a non-0 value if the operation fails. + * @since 5.1 + * @version 1.0 + */ + ClearHalt([in] struct UsbDev dev, [in] struct UsbPipe pipe); + + /* * + * @brief Obtains USB device speed. + * + * @param dev Indicates the USB device address. + * @param speed Indicates the USB device speed. + * + * @return Returns 0 if the operation is successful; returns a non-0 value if the operation fails. + * @since 5.1 + * @version 1.0 + */ + GetDeviceSpeed([in] struct UsbDev dev, [out] unsigned char speed); + + /* * + * @brief Obtains the file descriptor. + * + * @param dev Indicates the USB device address. + * @param fd USB device file descriptor + * + * @return Returns 0 if the operation is successful; returns a non-0 value if the operation fails. + * @since 5.1 + * @version 1.0 + */ + GetDeviceFileDescriptor([in] struct UsbDev dev, [out] FileDescriptor fd); + + /* * + * @brief Obtains the string descriptor of a USB device based on the specified string ID. + * + * @param dev Indicates the USB device address. + * @param descId Indicates string descriptor ID. + * @param descriptor Indicates the configuration descriptor of the USB device. + * + * @return Returns 0 if the operation is successful; returns a non-0 value if the operation fails. + * @since 5.1 + * @version 1.0 + */ + GetStringDescriptor([in] struct UsbDev dev, [in] unsigned char descId, [out] unsigned char[] descriptor); + + /* * + * @brief Obtains the raw descriptor. + * + * @param dev Indicates the USB device address. + * @param descriptor Indicates the raw descriptor of the USB device. + * + * @return Returns 0 if the operation is successful; returns a non-0 value if the operation fails. + * @since 5.1 + * @version 1.0 + */ + GetRawDescriptor([in] struct UsbDev dev, [out] unsigned char[] descriptor); + + /* * + * @brief Obtains the configuration information of a USB device. + * + * @param dev Indicates the USB device address. + * @param configIndex Indicates the configuration information of the USB device. + * + * @return Returns 0 if the operation is successful; returns a non-0 value if the operation fails. + * @since 5.1 + * @version 1.0 + */ + GetConfig([in] struct UsbDev dev, [out] unsigned char configIndex); + + /* * + * @brief Obtain the activation information of the USB device interface. + * + * @param dev Indicates the USB device address. + * @param interfaceid Indicates the interface ID of the USB device. + * @param unactivated Indicates whether the interface unactivated. + * + * @return Returns 0 if the operation is successful; returns a non-0 value if the operation fails. + * @since 5.1 + * @version 1.0 + */ + GetInterfaceActiveStatus([in] struct UsbDev dev, [in] unsigned char interfaceid, [out] boolean unactivated ); + + /* * + * @brief Obtains the USB device descriptor. + * + * @param dev Indicates the USB device address. + * @param descriptor Indicates the USB device descriptor. + * + * @return Returns 0 if the operation is successful; returns a non-0 value if the operation fails. + * @since 5.1 + * @version 1.0 + */ + GetDeviceDescriptor([in] struct UsbDev dev, [out] unsigned char[] descriptor); + + /* * + * @brief Obtains the configuration descriptor of a USB device based on the specified config ID. + * + * @param dev Indicates the USB device address. + * @param descId Indicates configuration descriptor ID. + * @param descriptor Indicates the configuration descriptor of the USB device. + * + * @return Returns 0 if the operation is successful; returns a non-0 value if the operation fails. + * @since 5.1 + * @version 1.0 + */ + GetConfigDescriptor([in] struct UsbDev dev, [in] unsigned char descId, [out] unsigned char[] descriptor); + + /* * + * @brief Obtains the file descriptor. + * + * @param dev Indicates the USB device address. + * @param fd USB device file descriptor + * + * @return Returns 0 if the operation is successful; returns a non-0 value if the operation fails. + * @since 5.1 + * @version 1.0 + * @deprecated since 5.1 + * @useinstead ohos.hdi.usb.v2_0.IUsbInterface.GetDeviceFileDescriptor + */ + GetFileDescriptor([in] struct UsbDev dev, [out] int fd); + + /* * + * @brief Sends or receives requests for isochronous transfer on a specified endpoint. The data transfer direction + * is determined by the endpoint direction. + * + * @param dev Indicates the USB device address. + * @param pipe Indicates the pipe of the USB device. + * @param clientData Indicates the client data. + * @param buffer Indicates the transferred data. + * + * @return Returns 0 if the operation is successful; returns a non-0 value if the operation fails. + * @since 5.1 + * @version 1.0 + */ + RequestQueue([in] struct UsbDev dev, [in] struct UsbPipe pipe, [in] unsigned char[] clientData, [in] unsigned char[] buffer); + + /* * + * @brief Waits for the operation result of the isochronous transfer request in RequestQueue. + * + * @param dev Indicates the USB device address. + * @param clientData Indicates the client data. + * @param buffer Indicates the transferred data. + * @param timeout Indicates the timeout duration. + * + * @return Returns 0 if the operation is successful; returns a non-0 value if the operation fails. + * @since 5.1 + * @version 1.0 + */ + RequestWait([in] struct UsbDev dev, [out] unsigned char[] clientData, [out] unsigned char[] buffer, [in] int timeout); + + /* * + * @brief Cancels the data transfer requests to be processed. + * + * @param dev Indicates the USB device address. + * @param pipe Indicates the pipe of the USB device. + * + * @return Returns 0 if the operation is successful; returns a non-0 value if the operation fails. + * @since 5.1 + * @version 1.0 + */ + RequestCancel([in] struct UsbDev dev, [in] struct UsbPipe pipe); + + /* * + * @brief Reads data on a specified endpoint during bulk transfer. The endpoint must be in the data reading + * direction. You can specify a timeout duration if needed. + * + * @param dev Indicates the USB device address. + * @param pipe Indicates the pipe of the USB device. + * @param timeout Indicates the timeout duration. + * @param data Indicates the read data. + * + * @return Returns 0 if the operation is successful; returns a non-0 value if the operation fails. + * @since 5.1 + * @version 1.0 + * @deprecated since 5.1 + * @useinstead ohos.hdi.usb.v2_0.IUsbInterface.BulkTransferReadwithLength + */ + BulkTransferRead([in] struct UsbDev dev, [in] struct UsbPipe pipe, [in] int timeout, [out] unsigned char[] data); + + /* * + * @brief Writes data on a specified endpoint during bulk transfer. The endpoint must be in the data writing + * direction. + * + * @param dev Indicates the USB device address. + * @param pipe Indicates the pipe of the USB device. + * @param timeout Indicates the timeout duration. + * @param data Indicates the written data. + * + * @return Returns 0 if the operation is successful; returns a non-0 value if the operation fails. + * @since 5.1 + * @version 1.0 + */ + BulkTransferWrite([in] struct UsbDev dev, [in] struct UsbPipe pipe, [in] int timeout, [in] unsigned char[] data); + + /* * + * @brief Reads data on a specified endpoint during bulk transfer. The endpoint must be in the data reading + * direction. You can specify a timeout duration if needed. + * + * @param dev Indicates the USB device address. + * @param pipe Indicates the pipe of the USB device. + * @param timeout Indicates the timeout duration. + * @param length the maximum number of bytes to receive into the data buffer. + * @param data Indicates the read data. + * + * @return Returns 0 if the operation is successful; returns a non-0 value if the operation fails. + * @since 5.1 + * @version 1.0 + */ + BulkTransferReadwithLength([in] struct UsbDev dev, [in] struct UsbPipe pipe, [in] int timeout, [in] int length, [out] unsigned char[] data); + + /* * + * @brief Registers a callback for isochronous bulk transfer. + * + * @param dev Indicates the USB device address. + * @param pipe Indicates the pipe of the USB device. + * @param cb Indicates the reference to the callback. + * + * @return Returns 0 if the operation is successful; returns a non-0 value if the operation fails. + * @since 5.1 + * @version 1.0 + */ + RegBulkCallback([in] struct UsbDev dev, [in] struct UsbPipe pipe, [in] IUsbdBulkCallback cb); + + /* * + * @brief Unregisters the callback for isochronous bulk transfer. + * + * @param dev Indicates the USB device address. + * @param pipe Indicates the pipe of the USB device. + * + * @return Returns 0 if the operation is successful; returns a non-0 value if the operation fails. + * @since 5.1 + * @version 1.0 + */ + UnRegBulkCallback([in] struct UsbDev dev, [in] struct UsbPipe pipe); + + /* * + * @brief Reads data during isochronous bulk transfer. + * + * @param dev Indicates the USB device address. + * @param pipe Indicates the pipe of the USB device. + * @param ashmem Indicates the shared memory, which is used to store the read data. + * + * @return Returns 0 if the operation is successful; returns a non-0 value if the operation fails. + * @since 5.1 + * @version 1.0 + */ + BulkRead([in] struct UsbDev dev, [in] struct UsbPipe pipe, [in] Ashmem ashmem); + + /* * + * @brief Writes data during isochronous bulk transfer. + * + * @param dev Indicates the USB device address. + * @param pipe Indicates the pipe of the USB device. + * @param ashmem Indicates the shared memory, which is used to store the written data. + * + * @return Returns 0 if the operation is successful; returns a non-0 value if the operation fails. + * @since 5.1 + * @version 1.0 + */ + BulkWrite([in] struct UsbDev dev, [in] struct UsbPipe pipe, [in] Ashmem ashmem); + + /* * + * @brief Cancels the isochronous bulk transfer. The read and write operations on the current USB interface will + * be cancelled. + * + * @param dev Indicates the USB device address. + * @param pipe Indicates the pipe of the USB device. + * + * @return Returns 0 if the operation is successful; returns a non-0 value if the operation fails. + * @since 5.1 + * @version 1.0 + */ + BulkCancel([in] struct UsbDev dev, [in] struct UsbPipe pipe); + + /* * + * @brief Performs control transfer for endpoint 0 of the device. The data transfer direction is determined by the + * request type. If the result of requestType& + * USB_ENDPOINT_DIR_MASK is USB_DIR_OUT, the endpoint is in the data writing direction; if the result + * is USB_DIR_IN, the endpoint is in the data reading direction. + * + * @param dev Indicates the USB device address. + * @param ctrl Indicates the control data packet structure. + * @param data Indicates the read data. + * + * @return Returns 0 if the operation is successful; returns a non-0 value if the operation fails. + * @since 5.1 + * @version 1.0 + * @deprecated since 5.1 + * @useinstead ohos.hdi.usb.v2_0.IUsbInterface.ControlTransferReadwithLength + */ + ControlTransferRead([in] struct UsbDev dev, [in] struct UsbCtrlTransfer ctrl, [out] unsigned char[] data); + + /* * + * @brief Performs control transfer for endpoint 0 of the device. The data transfer direction is determined by the + * request type. If the result of requestType& + * USB_ENDPOINT_DIR_MASK is USB_DIR_OUT, the endpoint is in the data writing direction; if the result + * is USB_DIR_IN, the endpoint is in the data writing direction. + * + * @param dev Indicates the USB device address. + * @param ctrl Indicates the control data packet structure. + * @param data Indicates the write data. + * + * @return Returns 0 if the operation is successful; returns a non-0 value if the operation fails. + * @since 5.1 + * @version 1.0 + */ + ControlTransferWrite([in] struct UsbDev dev, [in] struct UsbCtrlTransfer ctrl, [in] unsigned char[] data); + + /* * + * @brief Performs control transfer for endpoint 0 of the device. The data transfer direction is determined by the + * request type. If the result of requestType& + * USB_ENDPOINT_DIR_MASK is USB_DIR_OUT, the endpoint is in the data writing direction; if the result + * is USB_DIR_IN, the endpoint is in the data reading direction. + * + * @param dev Indicates the USB device address. + * @param ctrl Indicates the control data packet structure. + * @param data Indicates the read data. + * + * @return Returns 0 if the operation is successful; returns a non-0 value if the operation fails. + * @since 5.1 + * @version 1.0 + */ + ControlTransferReadwithLength([in] struct UsbDev dev, [in] struct UsbCtrlTransferParams ctrl, [out] unsigned char[] data); + + /* * + * @brief Reads data on a specified endpoint during interrupt transfer. The endpoint must be in the data reading + * direction. + * + * @param dev Indicates the USB device address. + * @param pipe Indicates the pipe of the USB device. + * @param timeout Indicates the timeout duration. + * @param data Indicates the read data. + * + * @return Returns 0 if the operation is successful; returns a non-0 value if the operation fails. + * @since 5.1 + * @version 1.0 + */ + InterruptTransferRead([in] struct UsbDev dev, [in] struct UsbPipe pipe, [in] int timeout, [out] unsigned char[] data); + + /* * + * @brief Writes data on a specified endpoint during interrupt transfer. The endpoint must be in the data writing + * direction. + * + * @param dev Indicates the USB device address. + * @param pipe Indicates the pipe of the USB device. + * @param timeout Indicates the timeout duration. + * @param data Indicates the read data. + * + * @return Returns 0 if the operation is successful; returns a non-0 value if the operation fails. + * @since 5.1 + * @version 1.0 + */ + InterruptTransferWrite([in] struct UsbDev dev, [in] struct UsbPipe pipe, [in] int timeout, [in] unsigned char[] data); + + /* * + * @brief Reads data on a specified endpoint during isochronous transfer. The endpoint must be in the data reading + * direction. + * + * @param dev Indicates the USB device address. + * @param pipe Indicates the pipe of the USB device. + * @param timeout Indicates the timeout duration. + * @param data Indicates the read data. + * + * @return Returns 0 if the operation is successful; returns a non-0 value if the operation fails. + * @since 5.1 + * @version 1.0 + */ + IsoTransferRead([in] struct UsbDev dev, [in] struct UsbPipe pipe, [in] int timeout, [out] unsigned char[] data); + + /* * + * @brief Writes data on a specified endpoint during isochronous transfer. The endpoint must be in the data writing + * direction. + * + * @param dev Indicates the USB device address. + * @param pipe Indicates the pipe of the USB device. + * @param timeout Indicates the timeout duration. + * @param data Indicates the read data. + * + * @return Returns 0 if the operation is successful; returns a non-0 value if the operation fails. + * @since 5.1 + * @version 1.0 + */ + IsoTransferWrite([in] struct UsbDev dev, [in] struct UsbPipe pipe, [in] int timeout, [in] unsigned char[] data); + + /* * + * @brief Binds a subscriber. + * + * @param subscriber Indicates the subscriber. + * + * @return Returns 0 if the operation is successful; returns a non-0 value if the operation fails. + * @since 5.1 + * @version 1.0 + */ + BindUsbdSubscriber([in] IUsbdSubscriber subscriber); + + /* * + * @brief Unbinds a subscriber. + * + * @param subscriber Indicates the subscriber. + * + * @return Returns 0 if the operation is successful; returns a non-0 value if the operation fails. + * @since 5.1 + * @version 1.0 + */ + UnbindUsbdSubscriber([in] IUsbdSubscriber subscriber); + + /* * + * @brief Submit usb async transfer. + * + * @param dev Indicates the USB device address. + * @param info Indicates the param info of the USB transfer. + * @param cb Indicates the callback function of base. + * @param ashmem Indicates the object of share memory + * + * @return Returns 0 if the operation is successful; returns a non-0 value if the operation fails. + * @since 5.1 + * @version 1.0 + */ + UsbSubmitTransfer([in] struct UsbDev dev, [in] USBTransferInfo info, [in] IUsbdTransferCallback cb, [in] Ashmem ashmem); + + /* * + * @brief Cancels the usb async transfer by endpoint. + * + * @param dev Indicates the USB device address. + * @param endpoint Indicates the endpoint address. + * + * @return Returns 0 if the operation is successful; returns a non-0 value if the operation fails. + * @since 5.1 + * @version 1.0 + */ + UsbCancelTransfer([in] struct UsbDev dev, [in] int endpoint); +} \ No newline at end of file diff --git a/usb/v2_0/IUsbPortInterface.idl b/usb/v2_0/IUsbPortInterface.idl new file mode 100644 index 00000000..93006e5c --- /dev/null +++ b/usb/v2_0/IUsbPortInterface.idl @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * 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. + */ + +/* * + * @addtogroup HdiUsb + * @{ + * + * @brief Provides unified APIs for usb services to access usb drivers. + * + * A usb service can obtain a usb driver object or agent and then call APIs provided by this object or agent to + * access different types of usb devices based on the usb IDs, thereby obtaining usb information, + * subscribing to or unsubscribing from usb data, enabling or disabling a usb, + * setting the usb data reporting mode, and setting usb options such as the accuracy and measurement range. + * + * @since 5.1 + * @version 1.0 + */ + +/* * + * @file IUsbPortInterface.idl + * + * @brief Declares the APIs provided by the usb module for obtaining usb information, subscribing to or + * unsubscribing from usb data, enabling or disabling a usb, setting the usb data reporting mode, + * and setting usb options such as the accuracy and measurement range. + * + * @since 5.1 + * @version 1.0 + */ + +package ohos.hdi.usb.v2_0; + +import ohos.hdi.usb.v2_0.UsbTypes; +import ohos.hdi.usb.v2_0.IUsbdSubscriber; + +interface IUsbPortInterface { + + /* * + * @brief Closes a USB device to release all system resources related to the device. + * + * @param portId Indicates the port ID of the USB interface. + * @param powerRole Indicates the power role. + * @param dataRole Indicates the data role. + * + * @return Returns 0 if the operation is successful; returns a non-0 value if the operation fails. + * @since 5.1 + * @version 1.0 + */ + SetPortRole([in] int portId, [in] int powerRole, [in] int dataRole); + + /* * + * @brief Queries the current settings of a port. + * + * @param portId Indicates the port ID of the USB interface. + * @param powerRole Indicates the power role. + * @param dataRole Indicates the data role. + * @param mode Indicates the mode. + * + * @return Returns 0 if the operation is successful; returns a non-0 value if the operation fails. + * @since 5.1 + * @version 1.0 + */ + QueryPort([out] int portId, [out] int powerRole, [out] int dataRole, [out] int mode); + + /* * + * @brief Queries the current settings of a port. + * + * @param portList Indicates the ports ID of the USB interface. + * + * @return Returns 0 if the operation is successful; returns a non-0 value if the operation fails. + * @since 5.1 + * @version 1.0 + */ + QueryPorts([out] struct UsbPort[] portList); + + /* * + * @brief Binds a subscriber. + * + * @param subscriber Indicates the subscriber. + * + * @return Returns 0 if the operation is successful; returns a non-0 value if the operation fails. + * @since 5.1 + * @version 1.0 + */ + BindUsbdSubscriber([in] IUsbdSubscriber subscriber); + + /* * + * @brief Unbinds a subscriber. + * + * @param subscriber Indicates the subscriber. + * + * @return Returns 0 if the operation is successful; returns a non-0 value if the operation fails. + * @since 5.1 + * @version 1.0 + */ + UnbindUsbdSubscriber([in] IUsbdSubscriber subscriber); +} \ No newline at end of file diff --git a/usb/v2_0/IUsbdBulkCallback.idl b/usb/v2_0/IUsbdBulkCallback.idl new file mode 100644 index 00000000..17c6879d --- /dev/null +++ b/usb/v2_0/IUsbdBulkCallback.idl @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * 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. + */ + +/** + * @addtogroup HdiUsb + * @{ + * + * @brief Provides unified APIs for usb services to access usb drivers. + * + * A usb service can obtain a usb driver object or agent and then call APIs provided by this object or agent to + * access different types of usb devices based on the usb IDs, thereby obtaining usb information, + * subscribing to or unsubscribing from usb data, enabling or disabling a usb, + * setting the usb data reporting mode, and setting usb options such as the accuracy and measurement range. + * + * @since 5.1 + * @version 1.0 + */ + +package ohos.hdi.usb.v2_0; + +/** + * @brief Defines the callback for reporting usb data. This callback needs to be registered when + * a usb user subscribes to usb data. Only after the usb is enabled, the usb data subscriber can receive + * usb data. For details, see {@link IUsbHostInterface}. + * + * @since 5.1 + * @version 1.0 + */ +[callback] interface IUsbdBulkCallback { + + OnBulkWriteCallback([in] int status, [in] int actLength); + + OnBulkReadCallback([in] int status, [in] int actLength); + +} \ No newline at end of file diff --git a/usb/v2_0/IUsbdSubscriber.idl b/usb/v2_0/IUsbdSubscriber.idl new file mode 100644 index 00000000..1e27353f --- /dev/null +++ b/usb/v2_0/IUsbdSubscriber.idl @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * 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. + */ + +/** + * @addtogroup HdiUsb + * @{ + * + * @brief Provides unified APIs for usb services to access usb drivers. + * + * A usb service can obtain a usb driver object or agent and then call APIs provided by this object or agent to + * access different types of usb devices based on the usb IDs, thereby obtaining usb information, + * subscribing to or unsubscribing from usb data, enabling or disabling a usb, + * setting the usb data reporting mode, and setting usb options such as the accuracy and measurement range. + * + * @since 5.1 + * @version 1.0 + */ + +package ohos.hdi.usb.v2_0; + +import ohos.hdi.usb.v2_0.UsbTypes; + +/** + * @brief Defines the callback for reporting usb data. This callback needs to be registered when + * a usb user subscribes to usb data. Only after the usb is enabled, the usb data subscriber can receive + * usb data. For details, see {@link IUsbInterface}. + * + * @since 5.1 + * @version 1.0 + */ +[callback] interface IUsbdSubscriber { + + DeviceEvent([in] struct USBDeviceInfo info); + + PortChangedEvent([in] struct PortInfo info); + +} \ No newline at end of file diff --git a/usb/v2_0/IUsbdTransferCallback.idl b/usb/v2_0/IUsbdTransferCallback.idl new file mode 100644 index 00000000..2e91aff5 --- /dev/null +++ b/usb/v2_0/IUsbdTransferCallback.idl @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * 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. + */ + +/** + * @addtogroup HdiUsb + * + * @brief Provides unified APIs for usb services to access usb drivers. + * + * A usb service can obtain a usb driver object or agent and then call APIs provided by this object or agent to + * access different types of usb devices based on the usb IDs, thereby obtaining usb information, + * subscribing to or unsubscribing from usb data, enabling or disabling a usb, + * setting the usb data reporting mode, and setting usb options such as the accuracy and measurement range. + * + * @since 5.1 + * @version 1.0 + */ + +package ohos.hdi.usb.v2_0; + +import ohos.hdi.usb.v2_0.UsbTypes; + +/** + * @brief Defines the callback for reporting usb data. This callback needs to be registered when + * a usb user subscribes to usb data. Only after the usb is enabled, the usb data subscriber can receive + * usb data. For details, see {@link IUsbInterface}. + * + * @since 5.1 + * @version 1.0 + */ +[callback] interface IUsbdTransferCallback { + + OnTransferWriteCallback([in] int status, [in] int actLength, [in] UsbIsoPacketDescriptor[] descs, [in] unsigned long userData); + + OnTransferReadCallback([in] int status, [in] int actLength, [in] UsbIsoPacketDescriptor[] descs, [in] unsigned long userData); + +} \ No newline at end of file diff --git a/usb/v2_0/UsbTypes.idl b/usb/v2_0/UsbTypes.idl new file mode 100644 index 00000000..6f302550 --- /dev/null +++ b/usb/v2_0/UsbTypes.idl @@ -0,0 +1,161 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * 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. + */ + + /** + * @addtogroup HdiUsb + * @ + * + * @brief Provides unified APIs for usb services to access usb drivers. + * + * A usb service can obtain a usb driver object or agent and then call APIs provided by this object or agent to + * access different types of usb devices based on the usb IDs, thereby obtaining usb information, + * subscribing to or unsubscribing from usb data, enabling or disabling a usb, + * setting the usb data reporting mode, and setting usb options such as the accuracy and measurement range. + * + * @since 5.1 + * @version 1.0 + */ + +/** + * @file UsbTypes.idl + * + * @brief Defines the data used by the usb module, including the usb information, + * and reported usb data. + * + * @since 5.1 + * @version 1.0 + */ + +package ohos.hdi.usb.v2_0; + +/** + * @brief Defines the ControlTransfer Params, which is used by {@link IUsbHostInterface::ControlTransferReadwithLength}. + * @since 5.1 + * @version 1.0 + */ +struct UsbCtrlTransferParams { + int requestType; + int requestCmd; + int value; + int index; + int length; + int timeout; +}; + +/** + * @brief Defines the PortInfo Params. + * @since 5.1 + * @version 1.0 + */ +struct PortInfo { + int portId; + int powerRole; + int dataRole; + int mode; +}; + +/** + * @brief Defines the UsbDev Params. + * @since 5.1 + * @version 1.0 + */ +struct UsbDev { + unsigned char busNum; + unsigned char devAddr; +}; + +/** + * @brief Defines the UsbPipe Params. + * @since 5.1 + * @version 1.0 + */ +struct UsbPipe { + unsigned char intfId; + unsigned char endpointId; +}; + +/** + * @brief Defines the UsbCtrlTransfer Params. + * @since 5.1 + * @version 1.0 + */ +struct UsbCtrlTransfer { + int requestType; + int requestCmd; + int value; + int index; + int timeout; +}; + +/** + * @brief Defines the USBDeviceInfo Params. + * @since 5.1 + * @version 1.0 + */ +struct USBDeviceInfo { + int status; + int busNum; + int devNum; +}; + +/** + * @brief Defines the RoleCombinations Params. + * @since 5.1 + * @version 1.0 + */ +struct RoleCombinations { + int powerRole; + int dataRole; +}; + +/** + * @brief Defines the UsbPortStatus Params. + * @since 5.1 + * @version 1.0 + */ +struct UsbPortStatus { + int currentMode; + int currentPowerRole; + int currentDataRole; + int isConnected; + RoleCombinations[] supportedRoleCombinations; +}; + +/** + * @brief Defines the UsbPort Params. + * @since 5.1 + * @version 1.0 + */ +struct UsbPort { + int id; + int supportedModes; + UsbPortStatus usbPortStatus; +}; + +struct UsbIsoPacketDescriptor { + int isoLength; + int isoActualLength; + int isoStatus; +}; + +struct USBTransferInfo { + int endpoint; + int flags; + int type; + int timeOut; + int length; + unsigned long userData; + unsigned int numIsoPackets; +}; -- Gitee