diff --git a/bundle.json b/bundle.json index 75df836a587976fb1e5e0007ff57dfd64c0e63fc..dd10fea32d5350f0bbdc9932151ee8c9b678f391 100644 --- a/bundle.json +++ b/bundle.json @@ -1,7 +1,7 @@ { "name": "@ohos/backends", "description": "backends(Scanner Access Now Easy) is a framework for standardized access to any raster scanner", - "version": "1.1.1", + "version": "1.2.1", "license": "GPL v2", "publishAs": "code-segment", "segment": { diff --git a/sanei/usb_manager.cpp b/sanei/usb_manager.cpp index 4129483f8250611432b2227c3368e512e3521044..b35b0808b30dcb2f4819f747be97783d2a3feb19 100644 --- a/sanei/usb_manager.cpp +++ b/sanei/usb_manager.cpp @@ -61,6 +61,7 @@ static std::vector g_deviceList; static ssize_t g_deviceCount = 0; static uint8_t g_interfaceNumber = 0; static usb_manager_config_descriptor* g_deviceConfig = nullptr; +static std::vector g_refDevices; constexpr int maxUsbInterfaceNum = 1000; constexpr int maxUsbEndpointNum = 1000; @@ -241,6 +242,12 @@ int usb_manager_exit(usb_manager_context *ctx) } delete ctx; ctx = nullptr; + for (const auto& refDevice : g_refDevices) { + if (refDevice != nullptr) { + delete refDevice; + } + } + g_refDevices.clear(); SANE_HILOG_INFO("%s: end successful", __func__); return USB_MANAGER_SUCCESS; } @@ -620,21 +627,31 @@ int usb_manager_set_interface_alt_setting(usb_manager_device_handle *dev_handle, return USB_MANAGER_SUCCESS; } -// stub -int usb_manager_interrupt_transfer(usb_manager_device_handle *dev_handle, unsigned char endpoint, - unsigned char *data, int length, int *actual_length, unsigned int timeout) +usb_manager_device* usb_manager_ref_device(usb_manager_device *dev) { SANE_HILOG_INFO("%s: start", __func__); + if (dev == nullptr) { + SANE_HILOG_ERROR("%s: dev is a nullptr!", __func__); + return nullptr; + } + usb_manager_device* refDevice = new (std::nothrow) usb_manager_device(); + if (refDevice == nullptr) { + SANE_HILOG_ERROR("%s: create refDevice error!", __func__); + return nullptr; + } + refDevice->device = dev->device; + g_refDevices.push_back(refDevice); SANE_HILOG_INFO("%s: end successful", __func__); - return USB_MANAGER_SUCCESS; + return refDevice; } // stub -usb_manager_device* usb_manager_ref_device(usb_manager_device *dev) +int usb_manager_interrupt_transfer(usb_manager_device_handle *dev_handle, unsigned char endpoint, + unsigned char *data, int length, int *actual_length, unsigned int timeout) { SANE_HILOG_INFO("%s: start", __func__); SANE_HILOG_INFO("%s: end successful", __func__); - return nullptr; + return USB_MANAGER_SUCCESS; } // stub