diff --git a/usb/bundle.json b/usb/bundle.json
index 8fdca89e462c86820fdfaabe810191152b625471..95ed9c2a2a2f6639e30a719e3596891e010fc0d5 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 0000000000000000000000000000000000000000..eca2648a7d276f00eb51e9cad9d3bab2fe9f067a
--- /dev/null
+++ b/usb/v2_0/BUILD.gn
@@ -0,0 +1,37 @@
+# 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",
+ "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 0000000000000000000000000000000000000000..929944abb5921a72e5af52cb3b9f8ed1c6bc88d7
--- /dev/null
+++ b/usb/v2_0/IUsbDeviceInterface.idl
@@ -0,0 +1,110 @@
+/*
+ * 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
+ */
+
+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 2.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 2.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 2.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 2.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 2.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 2.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 2.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 0000000000000000000000000000000000000000..1913338b0231b949597733ffc75a2f195a652fa9
--- /dev/null
+++ b/usb/v2_0/IUsbHostInterface.idl
@@ -0,0 +1,600 @@
+/*
+ * 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
+ */
+
+/* *
+ * @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 2.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;
+
+/* *
+ * @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 2.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 2.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 2.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 2.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 2.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 2.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 2.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 2.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 2.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 2.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 2.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 2.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 2.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 2.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 2.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 2.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 2.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 2.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 2.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 2.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 2.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 2.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 2.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 2.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 2.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 2.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 2.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 2.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 2.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 2.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 2.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 2.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 2.0
+ * @deprecated since 5.1
+ * @useinstead ohos.hdi.usb.v2_0.IUsbInterface.InterruptTransferReadwithLength
+ */
+ InterruptTransferRead([in] struct UsbDev dev, [in] struct UsbPipe pipe, [in] int timeout, [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 length Indicates the data length.
+ * @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 2.0
+ */
+ InterruptTransferReadwithLength([in] struct UsbDev dev, [in] struct UsbPipe pipe, [in] int timeout, [in] int length, [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 2.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 2.0
+ * @deprecated since 5.1
+ * @useinstead ohos.hdi.usb.v2_0.IUsbInterface.IsoTransferReadwithLength
+ */
+ IsoTransferRead([in] struct UsbDev dev, [in] struct UsbPipe pipe, [in] int timeout, [out] 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 length Indicates the data length.
+ * @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 2.0
+ */
+ IsoTransferReadwithLength([in] struct UsbDev dev, [in] struct UsbPipe pipe, [in] int timeout, [in] int length, [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 2.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 2.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 2.0
+ */
+ UnbindUsbdSubscriber([in] IUsbdSubscriber subscriber);
+}
\ 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 0000000000000000000000000000000000000000..d4fa164ff40c020ffbe47140494643af3c7b383c
--- /dev/null
+++ b/usb/v2_0/IUsbPortInterface.idl
@@ -0,0 +1,96 @@
+/*
+ * 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
+ */
+
+/* *
+ * @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 2.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 2.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 2.0
+ */
+ QueryPort([out] int portId, [out] int powerRole, [out] int dataRole, [out] int mode);
+
+ /* *
+ * @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 2.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 2.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 0000000000000000000000000000000000000000..42dc2d5ff7a1286e396cbf784796d83b1d0747b7
--- /dev/null
+++ b/usb/v2_0/IUsbdBulkCallback.idl
@@ -0,0 +1,46 @@
+/*
+ * 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.
+ *
+ * @version 2.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 2.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 0000000000000000000000000000000000000000..eb9a64151ede91fad5b5865784a634d50293c36a
--- /dev/null
+++ b/usb/v2_0/IUsbdSubscriber.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.
+ *
+ * @version 2.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 2.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/UsbTypes.idl b/usb/v2_0/UsbTypes.idl
new file mode 100644
index 0000000000000000000000000000000000000000..22c876212f3dcc769fd3d2930c79fb53394057b7
--- /dev/null
+++ b/usb/v2_0/UsbTypes.idl
@@ -0,0 +1,110 @@
+/*
+ * 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
+ */
+
+/**
+ * @file UsbTypes.idl
+ *
+ * @brief Defines the data used by the usb module, including the usb information,
+ * and reported usb data.
+ *
+ * @since 5.1
+ * @version 2.0
+ */
+
+package ohos.hdi.usb.v2_0;
+
+/**
+ * @brief Defines the ControlTransfer Params, which is used by {@link IUsbHostInterface::ControlTransferReadwithLength}.
+ * @since 5.1
+ * @version 2.0
+ */
+struct UsbCtrlTransferParams {
+ int requestType;
+ int requestCmd;
+ int value;
+ int index;
+ int length;
+ int timeout;
+};
+
+/**
+ * @brief Defines the PortInfo Params.
+ * @since 5.1
+ * @version 2.0
+ */
+struct PortInfo {
+ int portId;
+ int powerRole;
+ int dataRole;
+ int mode;
+};
+
+/**
+ * @brief Defines the UsbDev Params.
+ * @since 5.1
+ * @version 2.0
+ */
+struct UsbDev {
+ unsigned char busNum;
+ unsigned char devAddr;
+};
+
+/**
+ * @brief Defines the UsbPipe Params.
+ * @since 5.1
+ * @version 2.0
+ */
+struct UsbPipe {
+ unsigned char intfId;
+ unsigned char endpointId;
+};
+
+/**
+ * @brief Defines the UsbCtrlTransfer Params.
+ * @since 5.1
+ * @version 2.0
+ */
+struct UsbCtrlTransfer {
+ int requestType;
+ int requestCmd;
+ int value;
+ int index;
+ int timeout;
+};
+
+/**
+ * @brief Defines the USBDeviceInfo Params.
+ * @since 5.1
+ * @version 2.0
+ */
+struct USBDeviceInfo {
+ int status;
+ int busNum;
+ int devNum;
+};