From 62fe1bd9bced394f71d8228b04e916a169a6da1a Mon Sep 17 00:00:00 2001 From: gb <741021719@qq.com> Date: Tue, 11 Oct 2022 14:43:29 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0USB=E7=AB=AF=E5=8F=A3?= =?UTF-8?q?=E4=BB=A5=E5=AE=9A=E4=BD=8D=E8=AE=BE=E5=A4=87=EF=BC=8C=E9=81=BF?= =?UTF-8?q?=E5=85=8D=E5=A4=9A=E5=8F=B0=E5=90=8CVID/PID=E8=AE=BE=E5=A4=87?= =?UTF-8?q?=E8=A2=AB=E8=AF=86=E5=88=AB=E4=B8=BA=E4=B8=80=E5=8F=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- device/win_usb/win_usb.cpp | 9 ++++++++- device/win_usb/win_usb.h | 7 ++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/device/win_usb/win_usb.cpp b/device/win_usb/win_usb.cpp index 3b76690..e789d18 100644 --- a/device/win_usb/win_usb.cpp +++ b/device/win_usb/win_usb.cpp @@ -150,6 +150,10 @@ usb_device::usb_device(const char* name) : ref_(1), name_(name ? name : ""), is_ { bzero(&guid_, sizeof(guid_)); id_ = usb_device::vid_pid_from_name(name); + + GUID guid; + UuidFromStringA((RPC_CSTR)HG_SCANNER_GUID, &guid); + id_.addr = usb_device::get_device_address(name_.c_str(), &guid); } usb_device::~usb_device() { @@ -200,7 +204,7 @@ int usb_device::set_timeout(HANDLE h) DEVID usb_device::vid_pid_from_name(const char* name) { // name: \\?\usb#vid_3072&pid_0239#01234567aabbccddee#{a5dcbf10-6530-11d2-901f-00c04fb951ed} - DEVID id = { 0 }; + DEVID id; std::string s(name ? name : ""); size_t pos = 0; @@ -639,6 +643,7 @@ bool usb_device::init(void) free_usb_device_info(info); } + id_.addr = port_; return is_ok_; } @@ -1010,6 +1015,8 @@ void usb_monitor::notify_usb_event(usb_device*& dev, bool arrive) int ev = arrive ? LIBUSB_HOTPLUG_EVENT_DEVICE_ARRIVED : LIBUSB_HOTPLUG_EVENT_DEVICE_LEFT; DEVID id = dev->id(); + VLOG_MINI_4(LOG_LEVEL_DEBUG_INFO, "WINUSB %04X:%04X(%d) %s\r\n", dev->id().vid, dev->id().pid, dev->id().addr, + arrive ? "Connected" : "Left"); if (arrive) { bool found = false; diff --git a/device/win_usb/win_usb.h b/device/win_usb/win_usb.h index abb35c3..f834a94 100644 --- a/device/win_usb/win_usb.h +++ b/device/win_usb/win_usb.h @@ -23,10 +23,15 @@ typedef struct _dev_id { int vid; int pid; + int addr; + struct _dev_id() + { + memset(this, 0, sizeof(struct _dev_id)); + } bool operator==(const struct _dev_id& r) { - return vid == r.vid && pid == r.pid; + return vid == r.vid && pid == r.pid && r.addr == addr; } }DEVID;