diff --git a/hgdriver/hgdev/scanner_manager.cpp b/hgdriver/hgdev/scanner_manager.cpp index 9694dd4..3fad6fb 100644 --- a/hgdriver/hgdev/scanner_manager.cpp +++ b/hgdriver/hgdev/scanner_manager.cpp @@ -743,6 +743,11 @@ scanner_err hg_scanner_mgr::hg_scanner_open(scanner_handle* h, const char* name, ret = (scanner_err)usb_manager::instance()->open(it->dev, &io, &hg_scanner_mgr::last_open_msg_); if (ret == SCANNER_ERR_OK) { + if (io->get_ver() > 1) + { + // new version ... + } + hg_scanner* scanner = g_supporting_devices[it->ind].create_scanner(it->display_name.c_str(), io, h); if (!scanner) { diff --git a/hgdriver/hgdev/usb_manager.cpp b/hgdriver/hgdev/usb_manager.cpp index 887fd76..804e290 100644 --- a/hgdriver/hgdev/usb_manager.cpp +++ b/hgdriver/hgdev/usb_manager.cpp @@ -769,6 +769,24 @@ void usb_io::init_after_open(void) close(); last_err_ = err; } + else + { + char str[128] = { 0 }, *ver = nullptr; + libusb_device_descriptor dd = { 0 }; + + libusb_get_device_descriptor(dev_info_.device, &dd); + libusb_get_string_descriptor_ascii(handle_, dd.iProduct, (unsigned char*)str, _countof(str) - 1); + VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "Device Product: '%s'\n", str); + ver = strstr(str, "(V"); + if (ver) + { + ver_ = (int)atof(ver + 2); + } + else + { + ver_ = 1; + } + } } void usb_io::open(void) { @@ -1107,6 +1125,10 @@ int usb_io::get_pid(void) { return dev_info_.pid; } +int usb_io::get_ver(void) +{ + return ver_; +} void usb_io::on_disconnected(void) { diff --git a/hgdriver/hgdev/usb_manager.h b/hgdriver/hgdev/usb_manager.h index 915bd5b..3602c48 100644 --- a/hgdriver/hgdev/usb_manager.h +++ b/hgdriver/hgdev/usb_manager.h @@ -152,6 +152,7 @@ class usb_io int last_err_; std::string init_err_msg_; libusb_device *ref_device_; + unsigned int ver_ = 1; // endpoint ports usb_manager::USBTRANSENDP endpoints_; @@ -191,6 +192,7 @@ public: libusb_device* get_usb_device(void); // 获取该USB对象 int get_vid(void); // 获取连接到该USB端口上的设备VID int get_pid(void); // 获取连接到该USB端口上的设备PID + int get_ver(void); void on_disconnected(void); std::string init_error_msg(void);