qt 使用hid开源库 ,搜索所有的hid设备

效果:

 

 cmakeLists.txt :

cmake_minimum_required(VERSION 3.5)

project(TF_Hid_UseANDTest VERSION 0.1 LANGUAGES CXX)

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

file(GLOB include ${CMAKE_CURRENT_SOURCE_DIR}/*.h)
file(GLOB source ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp ${CMAKE_CURRENT_SOURCE_DIR}/*.ui)

find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)

include_directories("${CMAKE_CURRENT_SOURCE_DIR}/include")
link_directories("${CMAKE_CURRENT_SOURCE_DIR}/lib")
set(PROJECT_SOURCES
        ${include}
        ${source}
)

if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
    qt_add_executable(TF_Hid_UseANDTest
        MANUAL_FINALIZATION
        ${PROJECT_SOURCES}
    )
# Define target properties for Android with Qt 6 as:
#    set_property(TARGET TF_Hid_UseANDTest APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR
#                 ${CMAKE_CURRENT_SOURCE_DIR}/android)
# For more information, see https://doc.qt.io/qt-6/qt-add-executable.html#target-creation
else()
    if(ANDROID)
        add_library(TF_Hid_UseANDTest SHARED
            ${PROJECT_SOURCES}
        )
# Define properties for Android with Qt 5 after find_package() calls as:
#    set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")
    else()
        add_executable(TF_Hid_UseANDTest
                ${PROJECT_SOURCES}
        )
    endif()
endif()

target_link_libraries(TF_Hid_UseANDTest PRIVATE Qt${QT_VERSION_MAJOR}::Widgets hidapi)

# Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1.
# If you are developing for iOS or macOS you should consider setting an
# explicit, fixed bundle identifier manually though.
if(${QT_VERSION} VERSION_LESS 6.1.0)
  set(BUNDLE_ID_OPTION MACOSX_BUNDLE_GUI_IDENTIFIER com.example.TF_Hid_UseANDTest)
endif()
set_target_properties(TF_Hid_UseANDTest PROPERTIES
    ${BUNDLE_ID_OPTION}
    MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
    MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
    MACOSX_BUNDLE TRUE
    WIN32_EXECUTABLE TRUE
)

include(GNUInstallDirs)
install(TARGETS TF_Hid_UseANDTest
    BUNDLE DESTINATION .
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)

if(QT_VERSION_MAJOR EQUAL 6)
    qt_finalize_executable(TF_Hid_UseANDTest)
endif()

cpp代码:

#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QWidget(parent)
    , m_mainLayout(new QVBoxLayout())
    , m_hidDeviceGroupHLayout(new QHBoxLayout)
    , m_hidDeviceGroup(new QGroupBox())
    , m_hidDeviceList(new QComboBox(m_hidDeviceGroup))
    , m_hidRefreshBt(new QPushButton(m_hidDeviceGroup))
{
    connect(m_hidRefreshBt, SIGNAL(clicked(bool)),this, SLOT(onRefreshHidDevice()));
    initLayout();
    this->resize(800,800);
}

void MainWindow::initLayout()
{
    // hid设备组
    m_hidDeviceGroupHLayout->addWidget(m_hidDeviceList);
    m_hidDeviceGroupHLayout->addWidget(m_hidRefreshBt);
    m_hidDeviceGroup->setLayout(m_hidDeviceGroupHLayout);
    m_hidDeviceGroup->setTitle("hid设备");
    m_hidDeviceList->addItems(QStringList()<<"1"<<"2"<<"3");
    m_hidRefreshBt->setText("刷新");


    // 主布局
    m_mainLayout->addWidget(m_hidDeviceGroup);
    this->setLayout(m_mainLayout);
}

// 刷新hid设备
void MainWindow::onRefreshHidDevice()
{
    struct hid_device_info * P_device; // <- 是一个hid设备列表
    int m_vid{0};
    int m_pid{0};
    P_device = hid_enumerate(m_vid, m_pid);

    if(P_device != nullptr)
    {
        recursionAllHidDevice(P_device->next);
    }
}

// 递归每个hid设备的信息
void MainWindow::recursionAllHidDevice(hid_device_info * device)
{
    int m_vid{0};
    int m_pid{0};
    int usage_page{0};
    int usage{0};

    if(device != nullptr)
    {
        m_vid = device->vendor_id;
        m_pid = device->product_id;
        usage_page = device->usage_page;
        usage = device->usage;
        qDebug("vid = %02X  pid = %02X  usage_page = %02X  usage = %02X", m_vid , m_pid,usage_page,usage);
        recursionAllHidDevice(device->next);

    }

}

 

posted @ 2024-04-26 21:24  雾枫  阅读(10)  评论(0编辑  收藏  举报