增加从设备描述符iProduct域中判断通信协议版本的接口

This commit is contained in:
gb 2023-12-02 17:53:25 +08:00
parent 7de2077960
commit d5325e9a4c
3 changed files with 29 additions and 0 deletions

View File

@ -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)
{

View File

@ -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)
{

View File

@ -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);