This commit is contained in:
lumos 2025-05-14 21:36:17 +08:00
commit 11c0e2347a
16 changed files with 2024 additions and 0 deletions

76
CMakeLists.txt Normal file
View File

@ -0,0 +1,76 @@
cmake_minimum_required(VERSION 3.16)
project(uppper_LibUSB 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)
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)
find_package(PkgConfig REQUIRED)
pkg_check_modules(LIBUSB REQUIRED libusb-1.0) # "libusb-1.0"
set(PROJECT_SOURCES
main.cpp
mainwindow.cpp
mainwindow.h
mainwindow.ui
)
if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
qt_add_executable(uppper_LibUSB
MANUAL_FINALIZATION
${PROJECT_SOURCES}
log.h
usbhandler.h usbhandler.cpp
)
# Define target properties for Android with Qt 6 as:
# set_property(TARGET uppper_LibUSB 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(uppper_LibUSB 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(uppper_LibUSB
${PROJECT_SOURCES}
)
endif()
endif()
target_link_libraries(uppper_LibUSB PRIVATE Qt${QT_VERSION_MAJOR}::Widgets
${LIBUSB_LIBRARIES}
)
# 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.uppper_LibUSB)
endif()
set_target_properties(uppper_LibUSB 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 uppper_LibUSB
BUNDLE DESTINATION .
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
if(QT_VERSION_MAJOR EQUAL 6)
qt_finalize_executable(uppper_LibUSB)
endif()

463
CMakeLists.txt.user Normal file
View File

@ -0,0 +1,463 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 16.0.1, 2025-05-14T21:31:38. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
<value type="QByteArray">{1ef3ffc4-a5a8-4c60-8a81-af3ba8bbb143}</value>
</data>
<data>
<variable>ProjectExplorer.Project.ActiveTarget</variable>
<value type="qlonglong">0</value>
</data>
<data>
<variable>ProjectExplorer.Project.EditorSettings</variable>
<valuemap type="QVariantMap">
<value type="bool" key="EditorConfiguration.AutoDetect">true</value>
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
<value type="QString" key="language">Cpp</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
</valuemap>
</valuemap>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
<value type="QString" key="language">QmlJS</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
</valuemap>
</valuemap>
<value type="qlonglong" key="EditorConfiguration.CodeStyle.Count">2</value>
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
<value type="int" key="EditorConfiguration.IndentSize">4</value>
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
<value type="int" key="EditorConfiguration.LineEndingBehavior">0</value>
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
<value type="int" key="EditorConfiguration.PreferAfterWhitespaceComments">0</value>
<value type="bool" key="EditorConfiguration.PreferSingleLineComments">false</value>
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">2</value>
<value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
<value type="int" key="EditorConfiguration.TabSize">8</value>
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
<value type="bool" key="EditorConfiguration.UseIndenter">false</value>
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
<value type="QString" key="EditorConfiguration.ignoreFileTypes">*.md, *.MD, Makefile</value>
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
<value type="bool" key="EditorConfiguration.skipTrailingWhitespace">true</value>
<value type="bool" key="EditorConfiguration.tintMarginArea">true</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.PluginSettings</variable>
<valuemap type="QVariantMap">
<valuemap type="QVariantMap" key="AutoTest.ActiveFrameworks">
<value type="bool" key="AutoTest.Framework.Boost">true</value>
<value type="bool" key="AutoTest.Framework.CTest">false</value>
<value type="bool" key="AutoTest.Framework.Catch">true</value>
<value type="bool" key="AutoTest.Framework.GTest">true</value>
<value type="bool" key="AutoTest.Framework.QtQuickTest">true</value>
<value type="bool" key="AutoTest.Framework.QtTest">true</value>
</valuemap>
<value type="bool" key="AutoTest.ApplyFilter">false</value>
<valuemap type="QVariantMap" key="AutoTest.CheckStates"/>
<valuelist type="QVariantList" key="AutoTest.PathFilters"/>
<value type="int" key="AutoTest.RunAfterBuild">0</value>
<value type="bool" key="AutoTest.UseGlobal">true</value>
<valuemap type="QVariantMap" key="ClangTools">
<value type="bool" key="ClangTools.AnalyzeOpenFiles">true</value>
<value type="bool" key="ClangTools.BuildBeforeAnalysis">true</value>
<value type="QString" key="ClangTools.DiagnosticConfig">Builtin.DefaultTidyAndClazy</value>
<value type="int" key="ClangTools.ParallelJobs">4</value>
<value type="bool" key="ClangTools.PreferConfigFile">true</value>
<valuelist type="QVariantList" key="ClangTools.SelectedDirs"/>
<valuelist type="QVariantList" key="ClangTools.SelectedFiles"/>
<valuelist type="QVariantList" key="ClangTools.SuppressedDiagnostics"/>
<value type="bool" key="ClangTools.UseGlobalSettings">true</value>
</valuemap>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.Target.0</variable>
<valuemap type="QVariantMap">
<value type="QString" key="DeviceType">Desktop</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 6.6.3 GCC 64bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 6.6.3 GCC 64bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.qt6.663.gcc_64_kit</value>
<value type="qlonglong" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
<value type="qlonglong" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="qlonglong" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<value type="QString" key="CMake.Build.Type">Debug</value>
<value type="int" key="CMake.Configure.BaseEnvironment">2</value>
<value type="bool" key="CMake.Configure.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="CMake.Configure.UserEnvironmentChanges"/>
<value type="QString" key="CMake.Initial.Parameters">-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake
-DCMAKE_COLOR_DIAGNOSTICS:BOOL=ON
-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX}
-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG}
-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable}
-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C}
-DCMAKE_GENERATOR:STRING=Ninja
-DCMAKE_BUILD_TYPE:STRING=Debug
-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx}</value>
<value type="int" key="EnableQmlDebugging">0</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/leo/devCode/outer/USBFilter_30/uppper_LibUSB/build/Desktop_Qt_6_6_3_GCC_64bit-Debug</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.BuildPreset"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="CMakeProjectManager.MakeStep.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.UserEnvironmentChanges"/>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.BuildPreset"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="CMakeProjectManager.MakeStep.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.UserEnvironmentChanges"/>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Debug</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
<value type="QString" key="CMake.Build.Type">Release</value>
<value type="int" key="CMake.Configure.BaseEnvironment">2</value>
<value type="bool" key="CMake.Configure.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="CMake.Configure.UserEnvironmentChanges"/>
<value type="QString" key="CMake.Initial.Parameters">-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake
-DCMAKE_COLOR_DIAGNOSTICS:BOOL=ON
-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX}
-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG}
-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable}
-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C}
-DCMAKE_GENERATOR:STRING=Ninja
-DCMAKE_BUILD_TYPE:STRING=Release
-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx}</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/leo/devCode/outer/USBFilter_30/uppper_LibUSB/build/Desktop_Qt_6_6_3_GCC_64bit-Release</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.BuildPreset"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="CMakeProjectManager.MakeStep.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.UserEnvironmentChanges"/>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.BuildPreset"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="CMakeProjectManager.MakeStep.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.UserEnvironmentChanges"/>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
<value type="QString" key="CMake.Build.Type">RelWithDebInfo</value>
<value type="int" key="CMake.Configure.BaseEnvironment">2</value>
<value type="bool" key="CMake.Configure.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="CMake.Configure.UserEnvironmentChanges"/>
<value type="QString" key="CMake.Initial.Parameters">-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake
-DCMAKE_COLOR_DIAGNOSTICS:BOOL=ON
-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX}
-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG}
-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable}
-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C}
-DCMAKE_GENERATOR:STRING=Ninja
-DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo
-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx}</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/leo/devCode/outer/USBFilter_30/uppper_LibUSB/build/Desktop_Qt_6_6_3_GCC_64bit-RelWithDebInfo</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.BuildPreset"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="CMakeProjectManager.MakeStep.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.UserEnvironmentChanges"/>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.BuildPreset"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="CMakeProjectManager.MakeStep.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.UserEnvironmentChanges"/>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release with Debug Information</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.3">
<value type="QString" key="CMake.Build.Type">RelWithDebInfo</value>
<value type="int" key="CMake.Configure.BaseEnvironment">2</value>
<value type="bool" key="CMake.Configure.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="CMake.Configure.UserEnvironmentChanges"/>
<value type="QString" key="CMake.Initial.Parameters">-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake
-DCMAKE_COLOR_DIAGNOSTICS:BOOL=ON
-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX}
-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG}
-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable}
-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C}
-DCMAKE_GENERATOR:STRING=Ninja
-DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo
-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx}</value>
<value type="int" key="EnableQmlDebugging">0</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/leo/devCode/outer/USBFilter_30/uppper_LibUSB/build/Desktop_Qt_6_6_3_GCC_64bit-Profile</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.BuildPreset"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="CMakeProjectManager.MakeStep.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.UserEnvironmentChanges"/>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.BuildPreset"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="CMakeProjectManager.MakeStep.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.UserEnvironmentChanges"/>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Profile</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.4">
<value type="QString" key="CMake.Build.Type">MinSizeRel</value>
<value type="int" key="CMake.Configure.BaseEnvironment">2</value>
<value type="bool" key="CMake.Configure.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="CMake.Configure.UserEnvironmentChanges"/>
<value type="QString" key="CMake.Initial.Parameters">-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake
-DCMAKE_COLOR_DIAGNOSTICS:BOOL=ON
-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX}
-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG}
-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable}
-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C}
-DCMAKE_GENERATOR:STRING=Ninja
-DCMAKE_BUILD_TYPE:STRING=MinSizeRel
-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx}</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/leo/devCode/outer/USBFilter_30/uppper_LibUSB/build/Desktop_Qt_6_6_3_GCC_64bit-MinSizeRel</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.BuildPreset"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="CMakeProjectManager.MakeStep.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.UserEnvironmentChanges"/>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.BuildPreset"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="CMakeProjectManager.MakeStep.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.UserEnvironmentChanges"/>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Minimum Size Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.Target.BuildConfigurationCount">5</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.DeployConfiguration.CustomData"/>
<value type="bool" key="ProjectExplorer.DeployConfiguration.CustomDataEnabled">false</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.BuildPreset"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString"></value>
</valuelist>
<value type="bool" key="CMakeProjectManager.MakeStep.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.UserEnvironmentChanges"/>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ApplicationManagerPlugin.Deploy.CMakePackageStep</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="QString" key="ApplicationManagerPlugin.Deploy.InstallPackageStep.Arguments">install-package --acknowledge</value>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Install Application Manager package</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ApplicationManagerPlugin.Deploy.InstallPackageStep</value>
<valuelist type="QVariantList" key="ProjectExplorer.RunConfiguration.LastDeployedFiles"/>
<valuelist type="QVariantList" key="ProjectExplorer.RunConfiguration.LastDeployedHosts"/>
<valuelist type="QVariantList" key="ProjectExplorer.RunConfiguration.LastDeployedRemotePaths"/>
<valuelist type="QVariantList" key="ProjectExplorer.RunConfiguration.LastDeployedSysroots"/>
<valuelist type="QVariantList" key="RemoteLinux.LastDeployedLocalTimes"/>
<valuelist type="QVariantList" key="RemoteLinux.LastDeployedRemoteTimes"/>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.DeployConfiguration.CustomData"/>
<value type="bool" key="ProjectExplorer.DeployConfiguration.CustomDataEnabled">false</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ApplicationManagerPlugin.Deploy.Configuration</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.Target.DeployConfigurationCount">2</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<value type="int" key="Analyzer.Valgrind.Callgrind.CostFormat">0</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="CustomOutputParsers"/>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="bool" key="PE.EnvironmentAspect.PrintOnRun">false</value>
<value type="QString" key="PerfRecordArgsId">-e cpu-cycles --call-graph dwarf,4096 -F 250</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">uppper_LibUSB</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeRunConfiguration.</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">uppper_LibUSB</value>
<value type="bool" key="ProjectExplorer.RunConfiguration.Customized">true</value>
<value type="bool" key="RunConfiguration.RunAsRoot">true</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
<value type="QString" key="RunConfiguration.WorkingDirectory.default">/home/leo/devCode/outer/USBFilter_30/uppper_LibUSB/build/Desktop_Qt_6_6_3_GCC_64bit-Debug</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.TargetCount</variable>
<value type="qlonglong">1</value>
</data>
<data>
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
<value type="int">22</value>
</data>
<data>
<variable>Version</variable>
<value type="int">22</value>
</data>
</qtcreator>

View File

@ -0,0 +1,354 @@
#
# Internal Qt Creator variable reference
#
foreach(qtcreator_var
QT_QMAKE_EXECUTABLE CMAKE_PREFIX_PATH CMAKE_C_COMPILER CMAKE_CXX_COMPILER
CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELWITHDEBINFO)
set(__just_reference_${qtcreator_var} ${${qtcreator_var}})
endforeach()
option(QT_CREATOR_SOURCE_GROUPS "Qt Creator source groups extensions" ON)
if (QT_CREATOR_SOURCE_GROUPS)
source_group("Resources" REGULAR_EXPRESSION "\\.(pdf|plist|png|jpeg|jpg|storyboard|xcassets|qrc|svg|gif|ico|webp)$")
source_group("Forms" REGULAR_EXPRESSION "\\.(ui)$")
source_group("State charts" REGULAR_EXPRESSION "\\.(scxml)$")
endif()
#
# Set a better default value for CMAKE_INSTALL_PREFIX
#
function(qtc_modify_default_install_prefix)
# If at configure time the user didn't specify a CMAKE_INSTALL_PREFIX variable
# Modules/CMakeGenericSystem.cmake will set a default value
# to CMAKE_INSTALL_PREFIX and set CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT to ON
# In practice there are cases when CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT is
# set to ON and a custom CMAKE_INSTALL_PREFIX is set
# Do the original CMAKE_INSTALL_PREFIX detection
if(CMAKE_HOST_UNIX)
set(original_cmake_install_prefix "/usr/local")
else()
GetDefaultWindowsPrefixBase(CMAKE_GENERIC_PROGRAM_FILES)
set(original_cmake_install_prefix
"${CMAKE_GENERIC_PROGRAM_FILES}/${PROJECT_NAME}")
unset(CMAKE_GENERIC_PROGRAM_FILES)
endif()
# When the user code didn't modify the CMake set CMAKE_INSTALL_PREFIX
# then set the "/tmp" better value for CMAKE_INSTALL_PREFIX
if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT AND
CMAKE_INSTALL_PREFIX STREQUAL "${original_cmake_install_prefix}")
set_property(CACHE CMAKE_INSTALL_PREFIX PROPERTY VALUE "/tmp")
endif()
endfunction()
if (CMAKE_VERSION GREATER_EQUAL "3.19")
cmake_language(DEFER CALL qtc_modify_default_install_prefix)
endif()
if (EXISTS "${CMAKE_SOURCE_DIR}/QtCreatorPackageManager.cmake")
include("${CMAKE_SOURCE_DIR}/QtCreatorPackageManager.cmake")
endif()
if (QT_CREATOR_SKIP_PACKAGE_MANAGER_SETUP)
return()
endif()
option(QT_CREATOR_SKIP_PACKAGE_MANAGER_SETUP "Skip Qt Creator's package manager auto-setup" OFF)
# Store the C/C++ object output extension
if (CMAKE_VERSION GREATER_EQUAL "3.19")
cmake_language(DEFER CALL set CMAKE_C_OUTPUT_EXTENSION "${CMAKE_C_OUTPUT_EXTENSION}" CACHE STRING "" FORCE)
cmake_language(DEFER CALL set CMAKE_CXX_OUTPUT_EXTENSION "${CMAKE_CXX_OUTPUT_EXTENSION}" CACHE STRING "" FORCE)
endif()
macro(qtc_auto_setup_compiler_standard toolchainFile)
foreach(lang_var C CXX CUDA OBJC OBJCXX)
foreach(prop_var STANDARD STANDARD_REQUIRED EXTENSIONS)
if (CMAKE_${lang_var}_${prop_var})
file(APPEND "${toolchainFile}"
"set(CMAKE_${lang_var}_${prop_var} ${CMAKE_${lang_var}_${prop_var}})\n")
endif()
endforeach()
endforeach()
# Forward important CMake variables to the package manager in the toolchain file
foreach(fwd_var CMAKE_MSVC_RUNTIME_LIBRARY CMAKE_SYSROOT CMAKE_OSX_SYSROOT CMAKE_OSX_ARCHITECTURES)
if (${fwd_var})
file(APPEND "${toolchainFile}"
"set(${fwd_var} ${${fwd_var}})\n")
endif()
endforeach()
endmacro()
#
# conan
#
macro(qtc_auto_setup_conan)
foreach(file conanfile.txt conanfile.py)
if (EXISTS "${CMAKE_SOURCE_DIR}/${file}")
set(conanfile_txt "${CMAKE_SOURCE_DIR}/${file}")
break()
endif()
endforeach()
if (conanfile_txt AND NOT QT_CREATOR_SKIP_CONAN_SETUP)
option(QT_CREATOR_SKIP_CONAN_SETUP "Skip Qt Creator's conan package manager auto-setup" OFF)
set(QT_CREATOR_CONAN_BUILD_POLICY "missing" CACHE STRING "Qt Creator's conan package manager auto-setup build policy. This is used for the BUILD property of cmake_conan_run")
set_property(
DIRECTORY "${CMAKE_SOURCE_DIR}"
APPEND
PROPERTY CMAKE_CONFIGURE_DEPENDS "${conanfile_txt}")
find_program(conan_program conan)
if (NOT conan_program)
message(WARNING "Qt Creator: conan executable not found. "
"Package manager auto-setup will be skipped. "
"To disable this warning set QT_CREATOR_SKIP_CONAN_SETUP to ON.")
return()
endif()
execute_process(COMMAND ${conan_program} --version
RESULT_VARIABLE result_code
OUTPUT_VARIABLE conan_version_output
ERROR_VARIABLE conan_version_output)
if (NOT result_code EQUAL 0)
message(FATAL_ERROR "conan --version failed='${result_code}: ${conan_version_output}")
endif()
string(REGEX REPLACE ".*Conan version ([0-9].[0-9]).*" "\\1" conan_version "${conan_version_output}")
set(conanfile_timestamp_file "${CMAKE_BINARY_DIR}/conan-dependencies/conanfile.timestamp")
file(TIMESTAMP "${conanfile_txt}" conanfile_timestamp)
set(do_conan_installation ON)
if (EXISTS "${conanfile_timestamp_file}")
file(READ "${conanfile_timestamp_file}" old_conanfile_timestamp)
if ("${conanfile_timestamp}" STREQUAL "${old_conanfile_timestamp}")
set(do_conan_installation OFF)
endif()
endif()
set(conanfile_build_policy_file "${CMAKE_BINARY_DIR}/conan-dependencies/conanfile.buildpolicy")
if (EXISTS "${conanfile_build_policy_file}")
file(READ "${conanfile_build_policy_file}" build_policy)
if (NOT "${build_policy}" STREQUAL "${QT_CREATOR_CONAN_BUILD_POLICY}")
set(do_conan_installation ON)
endif()
endif()
if (do_conan_installation)
message(STATUS "Qt Creator: conan package manager auto-setup. "
"Skip this step by setting QT_CREATOR_SKIP_CONAN_SETUP to ON.")
file(COPY "${conanfile_txt}" DESTINATION "${CMAKE_BINARY_DIR}/conan-dependencies/")
# conanfile should have a generator specified, when both file and conan_install
# specifcy the CMakeDeps generator, conan_install will issue an error
file(READ "${conanfile_txt}" conanfile_text_content)
unset(conan_generator)
if (NOT "${conanfile_text_content}" MATCHES ".*CMakeDeps.*")
set(conan_generator "-g CMakeDeps")
endif()
file(WRITE "${CMAKE_BINARY_DIR}/conan-dependencies/toolchain.cmake" "
set(CMAKE_C_COMPILER \"${CMAKE_C_COMPILER}\")
set(CMAKE_CXX_COMPILER \"${CMAKE_CXX_COMPILER}\")
")
qtc_auto_setup_compiler_standard("${CMAKE_BINARY_DIR}/conan-dependencies/toolchain.cmake")
if (CMAKE_TOOLCHAIN_FILE)
file(APPEND "${CMAKE_BINARY_DIR}/conan-dependencies/toolchain.cmake"
"include(\"${CMAKE_TOOLCHAIN_FILE}\")\n")
endif()
file(WRITE "${CMAKE_BINARY_DIR}/conan-dependencies/CMakeLists.txt" "
cmake_minimum_required(VERSION 3.15)
unset(CMAKE_PROJECT_INCLUDE_BEFORE CACHE)
project(conan-setup)
if (${conan_version} VERSION_GREATER_EQUAL 2.0)
set(CONAN_COMMAND \"${conan_program}\")
include(\"${CMAKE_CURRENT_LIST_DIR}/conan_provider.cmake\")
conan_profile_detect_default()
detect_host_profile(\"${CMAKE_BINARY_DIR}/conan-dependencies/conan_host_profile\")
set(build_types \${CMAKE_BUILD_TYPE})
if (CMAKE_CONFIGURATION_TYPES)
set(build_types \${CMAKE_CONFIGURATION_TYPES})
endif()
foreach(type \${build_types})
conan_install(
-pr \"${CMAKE_BINARY_DIR}/conan-dependencies/conan_host_profile\"
--build=${QT_CREATOR_CONAN_BUILD_POLICY}
-s build_type=\${type}
${conan_generator})
endforeach()
get_property(CONAN_INSTALL_SUCCESS GLOBAL PROPERTY CONAN_INSTALL_SUCCESS)
if (CONAN_INSTALL_SUCCESS)
get_property(CONAN_GENERATORS_FOLDER GLOBAL PROPERTY CONAN_GENERATORS_FOLDER)
file(TO_CMAKE_PATH \"\${CONAN_GENERATORS_FOLDER}\" CONAN_GENERATORS_FOLDER)
file(WRITE \"${CMAKE_BINARY_DIR}/conan-dependencies/conan_paths.cmake\" \"
list(PREPEND CMAKE_PREFIX_PATH \\\"\${CONAN_GENERATORS_FOLDER}\\\")
list(PREPEND CMAKE_MODULE_PATH \\\"\${CONAN_GENERATORS_FOLDER}\\\")
list(PREPEND CMAKE_FIND_ROOT_PATH \\\"\${CONAN_GENERATORS_FOLDER}\\\")
list(REMOVE_DUPLICATES CMAKE_PREFIX_PATH)
list(REMOVE_DUPLICATES CMAKE_MODULE_PATH)
list(REMOVE_DUPLICATES CMAKE_FIND_ROOT_PATH)
set(CMAKE_PREFIX_PATH \\\"\\\${CMAKE_PREFIX_PATH}\\\" CACHE STRING \\\"\\\" FORCE)
set(CMAKE_MODULE_PATH \\\"\\\${CMAKE_MODULE_PATH}\\\" CACHE STRING \\\"\\\" FORCE)
set(CMAKE_FIND_ROOT_PATH \\\"\\\${CMAKE_FIND_ROOT_PATH}\\\" CACHE STRING \\\"\\\" FORCE)
\")
endif()
else()
include(\"${CMAKE_CURRENT_LIST_DIR}/conan.cmake\")
conan_cmake_run(
CONANFILE \"${conanfile_txt}\"
INSTALL_FOLDER \"${CMAKE_BINARY_DIR}/conan-dependencies\"
GENERATORS cmake_paths cmake_find_package json
BUILD ${QT_CREATOR_CONAN_BUILD_POLICY}
ENV CONAN_CMAKE_TOOLCHAIN_FILE=\"${CMAKE_BINARY_DIR}/conan-dependencies/toolchain.cmake\"
)
endif()
")
if (NOT DEFINED CMAKE_BUILD_TYPE AND NOT DEFINED CMAKE_CONFIGURATION_TYPES)
set(CMAKE_CONFIGURATION_TYPES "Debug;Release")
endif()
execute_process(COMMAND ${CMAKE_COMMAND}
-S "${CMAKE_BINARY_DIR}/conan-dependencies/"
-B "${CMAKE_BINARY_DIR}/conan-dependencies/build"
-C "${CMAKE_BINARY_DIR}/qtcsettings.cmake"
-D "CMAKE_TOOLCHAIN_FILE=${CMAKE_BINARY_DIR}/conan-dependencies/toolchain.cmake"
-G ${CMAKE_GENERATOR}
-D CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
-D "CMAKE_CONFIGURATION_TYPES=${CMAKE_CONFIGURATION_TYPES}"
RESULT_VARIABLE result
)
if (result EQUAL 0)
file(WRITE "${conanfile_timestamp_file}" "${conanfile_timestamp}")
file(WRITE "${conanfile_build_policy_file}" ${QT_CREATOR_CONAN_BUILD_POLICY})
else()
message(WARNING "Qt Creator's conan package manager auto-setup failed. Consider setting "
"QT_CREATOR_SKIP_CONAN_SETUP to ON and reconfigure to skip this step.")
return()
endif()
endif()
include("${CMAKE_BINARY_DIR}/conan-dependencies/conan_paths.cmake")
endif()
unset(conanfile_txt)
endmacro()
qtc_auto_setup_conan()
#
# vcpkg
#
macro(qtc_auto_setup_vcpkg)
if (EXISTS "${CMAKE_SOURCE_DIR}/vcpkg.json" AND NOT QT_CREATOR_SKIP_VCPKG_SETUP)
option(QT_CREATOR_SKIP_VCPKG_SETUP "Skip Qt Creator's vcpkg package manager auto-setup" OFF)
set_property(
DIRECTORY "${CMAKE_SOURCE_DIR}"
APPEND
PROPERTY CMAKE_CONFIGURE_DEPENDS "${CMAKE_SOURCE_DIR}/vcpkg.json")
find_program(vcpkg_program vcpkg
PATHS $ENV{VCPKG_ROOT} ${CMAKE_SOURCE_DIR}/vcpkg ${CMAKE_SOURCE_DIR}/3rdparty/vcpkg
NO_DEFAULT_PATH
)
if (NOT vcpkg_program)
message(WARNING "Qt Creator: vcpkg executable not found. "
"Package manager auto-setup will be skipped. "
"To disable this warning set QT_CREATOR_SKIP_VCPKG_SETUP to ON.")
return()
endif()
execute_process(COMMAND ${vcpkg_program} version
RESULT_VARIABLE result_code
OUTPUT_VARIABLE vcpkg_version_output
ERROR_VARIABLE vcpkg_version_output)
if (NOT result_code EQUAL 0)
message(FATAL_ERROR "vcpkg version failed='${result_code}: ${vcpkg_version_output}")
endif()
# Resolve any symlinks
get_filename_component(vpkg_program_real_path ${vcpkg_program} REALPATH)
get_filename_component(vpkg_root ${vpkg_program_real_path} DIRECTORY)
if (NOT EXISTS "${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake")
message(STATUS "Qt Creator: vcpkg package manager auto-setup. "
"Skip this step by setting QT_CREATOR_SKIP_VCPKG_SETUP to ON.")
file(WRITE "${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake" "
set(CMAKE_C_COMPILER \"${CMAKE_C_COMPILER}\")
set(CMAKE_CXX_COMPILER \"${CMAKE_CXX_COMPILER}\")
")
qtc_auto_setup_compiler_standard("${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake")
if (CMAKE_TOOLCHAIN_FILE AND NOT
CMAKE_TOOLCHAIN_FILE STREQUAL "${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake")
file(APPEND "${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake"
"include(\"${CMAKE_TOOLCHAIN_FILE}\")\n")
endif()
if (VCPKG_TARGET_TRIPLET)
set(vcpkg_triplet ${VCPKG_TARGET_TRIPLET})
else()
if (ANDROID_ABI)
if (ANDROID_ABI STREQUAL "armeabi-v7a")
set(vcpkg_triplet arm-neon-android)
elseif (ANDROID_ABI STREQUAL "arm64-v8a")
set(vcpkg_triplet arm64-android)
elseif (ANDROID_ABI STREQUAL "x86")
set(vcpkg_triplet x86-android)
elseif (ANDROID_ABI STREQUAL "x86_64")
set(vcpkg_triplet x64-android)
else()
message(FATAL_ERROR "Unsupported Android ABI: ${ANDROID_ABI}")
endif()
# Needed by vcpkg/scripts/toolchains/android.cmake
file(APPEND "${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake" "
set(ENV{ANDROID_NDK_HOME} \"${ANDROID_NDK}\")
")
elseif (WIN32)
set(vcpkg_triplet x64-mingw-static)
if (CMAKE_CXX_COMPILER MATCHES ".*/(.*)/cl.exe")
set(vcpkg_triplet ${CMAKE_MATCH_1}-windows)
endif()
elseif(APPLE)
# We're too early to use CMAKE_HOST_SYSTEM_PROCESSOR
execute_process(
COMMAND uname -m
OUTPUT_VARIABLE __apple_host_system_processor
OUTPUT_STRIP_TRAILING_WHITESPACE)
if (__apple_host_system_processor MATCHES "arm64")
set(vcpkg_triplet arm64-osx)
else()
set(vcpkg_triplet x64-osx)
endif()
else()
set(vcpkg_triplet x64-linux)
endif()
endif()
file(APPEND "${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake" "
set(VCPKG_TARGET_TRIPLET ${vcpkg_triplet})
include(\"${vpkg_root}/scripts/buildsystems/vcpkg.cmake\")
")
endif()
set(CMAKE_TOOLCHAIN_FILE "${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake" CACHE PATH "" FORCE)
# Save CMAKE_PREFIX_PATH and CMAKE_MODULE_PATH as cache variables
if (CMAKE_VERSION GREATER_EQUAL "3.19")
cmake_language(DEFER CALL list REMOVE_DUPLICATES CMAKE_PREFIX_PATH)
cmake_language(DEFER CALL list REMOVE_DUPLICATES CMAKE_MODULE_PATH)
cmake_language(DEFER CALL set CMAKE_PREFIX_PATH "${CMAKE_PREFIX_PATH}" CACHE STRING "" FORCE)
cmake_language(DEFER CALL set CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH}" CACHE STRING "" FORCE)
endif()
endif()
endmacro()
qtc_auto_setup_vcpkg()

View File

@ -0,0 +1,101 @@
set(CMAKE_CXX_COMPILER "/bin/g++-12")
set(CMAKE_CXX_COMPILER_ARG1 "")
set(CMAKE_CXX_COMPILER_ID "GNU")
set(CMAKE_CXX_COMPILER_VERSION "12.3.0")
set(CMAKE_CXX_COMPILER_VERSION_INTERNAL "")
set(CMAKE_CXX_COMPILER_WRAPPER "")
set(CMAKE_CXX_STANDARD_COMPUTED_DEFAULT "17")
set(CMAKE_CXX_EXTENSIONS_COMPUTED_DEFAULT "ON")
set(CMAKE_CXX_STANDARD_LATEST "23")
set(CMAKE_CXX_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters;cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates;cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates;cxx_std_17;cxx_std_20;cxx_std_23")
set(CMAKE_CXX98_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters")
set(CMAKE_CXX11_COMPILE_FEATURES "cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates")
set(CMAKE_CXX14_COMPILE_FEATURES "cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates")
set(CMAKE_CXX17_COMPILE_FEATURES "cxx_std_17")
set(CMAKE_CXX20_COMPILE_FEATURES "cxx_std_20")
set(CMAKE_CXX23_COMPILE_FEATURES "cxx_std_23")
set(CMAKE_CXX26_COMPILE_FEATURES "")
set(CMAKE_CXX_PLATFORM_ID "Linux")
set(CMAKE_CXX_SIMULATE_ID "")
set(CMAKE_CXX_COMPILER_FRONTEND_VARIANT "GNU")
set(CMAKE_CXX_SIMULATE_VERSION "")
set(CMAKE_AR "/bin/ar")
set(CMAKE_CXX_COMPILER_AR "/bin/gcc-ar-12")
set(CMAKE_RANLIB "/bin/ranlib")
set(CMAKE_CXX_COMPILER_RANLIB "/bin/gcc-ranlib-12")
set(CMAKE_LINKER "/bin/ld")
set(CMAKE_LINKER_LINK "")
set(CMAKE_LINKER_LLD "")
set(CMAKE_CXX_COMPILER_LINKER "/usr/bin/ld")
set(CMAKE_CXX_COMPILER_LINKER_ID "GNU")
set(CMAKE_CXX_COMPILER_LINKER_VERSION 2.38)
set(CMAKE_CXX_COMPILER_LINKER_FRONTEND_VARIANT GNU)
set(CMAKE_MT "")
set(CMAKE_TAPI "CMAKE_TAPI-NOTFOUND")
set(CMAKE_COMPILER_IS_GNUCXX 1)
set(CMAKE_CXX_COMPILER_LOADED 1)
set(CMAKE_CXX_COMPILER_WORKS TRUE)
set(CMAKE_CXX_ABI_COMPILED TRUE)
set(CMAKE_CXX_COMPILER_ENV_VAR "CXX")
set(CMAKE_CXX_COMPILER_ID_RUN 1)
set(CMAKE_CXX_SOURCE_FILE_EXTENSIONS C;M;c++;cc;cpp;cxx;m;mm;mpp;CPP;ixx;cppm;ccm;cxxm;c++m)
set(CMAKE_CXX_IGNORE_EXTENSIONS inl;h;hpp;HPP;H;o;O;obj;OBJ;def;DEF;rc;RC)
foreach (lang IN ITEMS C OBJC OBJCXX)
if (CMAKE_${lang}_COMPILER_ID_RUN)
foreach(extension IN LISTS CMAKE_${lang}_SOURCE_FILE_EXTENSIONS)
list(REMOVE_ITEM CMAKE_CXX_SOURCE_FILE_EXTENSIONS ${extension})
endforeach()
endif()
endforeach()
set(CMAKE_CXX_LINKER_PREFERENCE 30)
set(CMAKE_CXX_LINKER_PREFERENCE_PROPAGATES 1)
set(CMAKE_CXX_LINKER_DEPFILE_SUPPORTED FALSE)
# Save compiler ABI information.
set(CMAKE_CXX_SIZEOF_DATA_PTR "8")
set(CMAKE_CXX_COMPILER_ABI "ELF")
set(CMAKE_CXX_BYTE_ORDER "LITTLE_ENDIAN")
set(CMAKE_CXX_LIBRARY_ARCHITECTURE "x86_64-linux-gnu")
if(CMAKE_CXX_SIZEOF_DATA_PTR)
set(CMAKE_SIZEOF_VOID_P "${CMAKE_CXX_SIZEOF_DATA_PTR}")
endif()
if(CMAKE_CXX_COMPILER_ABI)
set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_CXX_COMPILER_ABI}")
endif()
if(CMAKE_CXX_LIBRARY_ARCHITECTURE)
set(CMAKE_LIBRARY_ARCHITECTURE "x86_64-linux-gnu")
endif()
set(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX "")
if(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX)
set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_CXX_CL_SHOWINCLUDES_PREFIX}")
endif()
set(CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES "/usr/include/c++/12;/usr/include/x86_64-linux-gnu/c++/12;/usr/include/c++/12/backward;/usr/lib/gcc/x86_64-linux-gnu/12/include;/usr/local/include;/usr/include/x86_64-linux-gnu;/usr/include")
set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "stdc++;m;gcc_s;gcc;c;gcc_s;gcc")
set(CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "/usr/lib/gcc/x86_64-linux-gnu/12;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib")
set(CMAKE_CXX_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "")
set(CMAKE_CXX_COMPILER_CLANG_RESOURCE_DIR "")
set(CMAKE_CXX_COMPILER_IMPORT_STD "")
### Imported target for C++23 standard library
set(CMAKE_CXX23_COMPILER_IMPORT_STD_NOT_FOUND_MESSAGE "Toolchain does not support discovering `import std` support")

View File

@ -0,0 +1,15 @@
set(CMAKE_HOST_SYSTEM "Linux-6.8.0-57-generic")
set(CMAKE_HOST_SYSTEM_NAME "Linux")
set(CMAKE_HOST_SYSTEM_VERSION "6.8.0-57-generic")
set(CMAKE_HOST_SYSTEM_PROCESSOR "x86_64")
set(CMAKE_SYSTEM "Linux-6.8.0-57-generic")
set(CMAKE_SYSTEM_NAME "Linux")
set(CMAKE_SYSTEM_VERSION "6.8.0-57-generic")
set(CMAKE_SYSTEM_PROCESSOR "x86_64")
set(CMAKE_CROSSCOMPILING "FALSE")
set(CMAKE_SYSTEM_LOADED 1)

Binary file not shown.

View File

@ -0,0 +1,200 @@
/********************************************************************************
** Form generated from reading UI file 'mainwindow.ui'
**
** Created by: Qt User Interface Compiler version 6.6.3
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef UI_MAINWINDOW_H
#define UI_MAINWINDOW_H
#include <QtCore/QVariant>
#include <QtWidgets/QApplication>
#include <QtWidgets/QComboBox>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QLabel>
#include <QtWidgets/QMainWindow>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QSpacerItem>
#include <QtWidgets/QStatusBar>
#include <QtWidgets/QTextBrowser>
#include <QtWidgets/QTextEdit>
#include <QtWidgets/QWidget>
QT_BEGIN_NAMESPACE
class Ui_MainWindow
{
public:
QWidget *centralwidget;
QGridLayout *gridLayout;
QComboBox *comboBox;
QTextBrowser *textBrowser;
QPushButton *pushButton;
QPushButton *pushButton_4;
QPushButton *pushButton_2;
QPushButton *pushButton_3;
QComboBox *comboBox_3;
QSpacerItem *verticalSpacer;
QLabel *label;
QPushButton *pushButton_8;
QTextEdit *textEdit;
QPushButton *pushButton_7;
QPushButton *pushButton_6;
QLabel *label_2;
QLabel *label_4;
QComboBox *comboBox_2;
QLabel *label_3;
QPushButton *pushButton_5;
QSpacerItem *verticalSpacer_2;
QStatusBar *statusbar;
void setupUi(QMainWindow *MainWindow)
{
if (MainWindow->objectName().isEmpty())
MainWindow->setObjectName("MainWindow");
MainWindow->resize(814, 613);
QSizePolicy sizePolicy(QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Expanding);
sizePolicy.setHorizontalStretch(0);
sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(MainWindow->sizePolicy().hasHeightForWidth());
MainWindow->setSizePolicy(sizePolicy);
centralwidget = new QWidget(MainWindow);
centralwidget->setObjectName("centralwidget");
gridLayout = new QGridLayout(centralwidget);
gridLayout->setObjectName("gridLayout");
comboBox = new QComboBox(centralwidget);
comboBox->setObjectName("comboBox");
gridLayout->addWidget(comboBox, 1, 1, 1, 1);
textBrowser = new QTextBrowser(centralwidget);
textBrowser->setObjectName("textBrowser");
gridLayout->addWidget(textBrowser, 12, 0, 1, 4);
pushButton = new QPushButton(centralwidget);
pushButton->setObjectName("pushButton");
gridLayout->addWidget(pushButton, 0, 0, 1, 4);
pushButton_4 = new QPushButton(centralwidget);
pushButton_4->setObjectName("pushButton_4");
gridLayout->addWidget(pushButton_4, 8, 2, 1, 2);
pushButton_2 = new QPushButton(centralwidget);
pushButton_2->setObjectName("pushButton_2");
gridLayout->addWidget(pushButton_2, 5, 2, 1, 2);
pushButton_3 = new QPushButton(centralwidget);
pushButton_3->setObjectName("pushButton_3");
gridLayout->addWidget(pushButton_3, 10, 2, 1, 2);
comboBox_3 = new QComboBox(centralwidget);
comboBox_3->setObjectName("comboBox_3");
gridLayout->addWidget(comboBox_3, 4, 1, 1, 1);
verticalSpacer = new QSpacerItem(20, 40, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Expanding);
gridLayout->addItem(verticalSpacer, 9, 2, 1, 1);
label = new QLabel(centralwidget);
label->setObjectName("label");
gridLayout->addWidget(label, 1, 0, 1, 1);
pushButton_8 = new QPushButton(centralwidget);
pushButton_8->setObjectName("pushButton_8");
gridLayout->addWidget(pushButton_8, 3, 2, 1, 2);
textEdit = new QTextEdit(centralwidget);
textEdit->setObjectName("textEdit");
gridLayout->addWidget(textEdit, 5, 0, 6, 2);
pushButton_7 = new QPushButton(centralwidget);
pushButton_7->setObjectName("pushButton_7");
gridLayout->addWidget(pushButton_7, 4, 2, 1, 2);
pushButton_6 = new QPushButton(centralwidget);
pushButton_6->setObjectName("pushButton_6");
gridLayout->addWidget(pushButton_6, 1, 2, 1, 2);
label_2 = new QLabel(centralwidget);
label_2->setObjectName("label_2");
gridLayout->addWidget(label_2, 11, 1, 1, 1);
label_4 = new QLabel(centralwidget);
label_4->setObjectName("label_4");
gridLayout->addWidget(label_4, 4, 0, 1, 1);
comboBox_2 = new QComboBox(centralwidget);
comboBox_2->setObjectName("comboBox_2");
QSizePolicy sizePolicy1(QSizePolicy::Policy::Preferred, QSizePolicy::Policy::Fixed);
sizePolicy1.setHorizontalStretch(0);
sizePolicy1.setVerticalStretch(0);
sizePolicy1.setHeightForWidth(comboBox_2->sizePolicy().hasHeightForWidth());
comboBox_2->setSizePolicy(sizePolicy1);
gridLayout->addWidget(comboBox_2, 3, 1, 1, 1);
label_3 = new QLabel(centralwidget);
label_3->setObjectName("label_3");
gridLayout->addWidget(label_3, 3, 0, 1, 1);
pushButton_5 = new QPushButton(centralwidget);
pushButton_5->setObjectName("pushButton_5");
gridLayout->addWidget(pushButton_5, 13, 3, 1, 1);
verticalSpacer_2 = new QSpacerItem(20, 40, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Expanding);
gridLayout->addItem(verticalSpacer_2, 6, 3, 1, 1);
MainWindow->setCentralWidget(centralwidget);
statusbar = new QStatusBar(MainWindow);
statusbar->setObjectName("statusbar");
MainWindow->setStatusBar(statusbar);
retranslateUi(MainWindow);
QMetaObject::connectSlotsByName(MainWindow);
} // setupUi
void retranslateUi(QMainWindow *MainWindow)
{
MainWindow->setWindowTitle(QCoreApplication::translate("MainWindow", "MainWindow", nullptr));
pushButton->setText(QCoreApplication::translate("MainWindow", "Refresh", nullptr));
pushButton_4->setText(QCoreApplication::translate("MainWindow", "Send ViaBulkTrans", nullptr));
pushButton_2->setText(QCoreApplication::translate("MainWindow", "Send ViaControlTrans", nullptr));
pushButton_3->setText(QCoreApplication::translate("MainWindow", "send ViaAsyncTrans", nullptr));
label->setText(QCoreApplication::translate("MainWindow", "Device List:", nullptr));
pushButton_8->setText(QCoreApplication::translate("MainWindow", "Check", nullptr));
pushButton_7->setText(QCoreApplication::translate("MainWindow", "Close", nullptr));
pushButton_6->setText(QCoreApplication::translate("MainWindow", "Open", nullptr));
label_2->setText(QCoreApplication::translate("MainWindow", "LOG", nullptr));
label_4->setText(QCoreApplication::translate("MainWindow", "EndPoint List:", nullptr));
label_3->setText(QCoreApplication::translate("MainWindow", "Interface List:", nullptr));
pushButton_5->setText(QCoreApplication::translate("MainWindow", "Clear", nullptr));
} // retranslateUi
};
namespace Ui {
class MainWindow: public Ui_MainWindow {};
} // namespace Ui
QT_END_NAMESPACE
#endif // UI_MAINWINDOW_H

View File

@ -0,0 +1,3 @@
// This file is autogenerated. Changes will be overwritten.
#include "EWIEGA46WW/moc_mainwindow.cpp"
#include "EWIEGA46WW/moc_usbhandler.cpp"

80
log.h Normal file
View File

@ -0,0 +1,80 @@
#ifndef LOG_H
#define LOG_H
#include <ctime> // 使用 std::time 和 std::strftime
#include <cstdio> // 使用 printf
#include <cstdarg> // 使用 va_list 和 va_start
#include <mutex> // 使用 std::mutex
// 定义打印等级
#define LOG_LEVEL_DEBUG 0
#define LOG_LEVEL_INFO 1
#define LOG_LEVEL_WARN 2
#define LOG_LEVEL_ERROR 3
// 默认日志等级为INFO
#ifndef LOG_LEVEL
#define LOG_LEVEL LOG_LEVEL_DEBUG
#endif
// 颜色配置:用户空间启用颜色
#define LOG_COLOR true
// 颜色宏定义
#if LOG_COLOR
#define RESET_COLOR "\033[0m"
#define COLOR_DEBUG "\033[34m" // 蓝色
#define COLOR_INFO "\033[32m" // 绿色
#define COLOR_WARN "\033[33m" // 黄色
#define COLOR_ERROR "\033[31m" // 红色
#else
#define RESET_COLOR ""
#define COLOR_DEBUG ""
#define COLOR_INFO ""
#define COLOR_WARN ""
#define COLOR_ERROR ""
#endif
// 获取当前时间的字符串(用户空间实现)
inline const char* current_time() {
static char buffer[64];
std::time_t now = std::time(nullptr);
std::tm* tm_now = std::localtime(&now);
std::strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", tm_now);
return buffer;
}
// 定义一个静态互斥锁,保证线程安全
static std::mutex log_mutex;
// 定义一个外部 FILE 变量,可以用来切换输出目标
extern FILE* log_output; // 默认为 stdout
// 用户空间打印日志
#define LOG(level, format, ...) do {\
if (level >= LOG_LEVEL) {\
std::lock_guard<std::mutex> lock(log_mutex); /* 自动锁住互斥锁 */\
const char *level_str;\
const char *color;\
switch (level) {\
case LOG_LEVEL_DEBUG: level_str = "[DEBUG]"; color = COLOR_DEBUG; break;\
case LOG_LEVEL_INFO: level_str = "[INFO]"; color = COLOR_INFO; break;\
case LOG_LEVEL_WARN: level_str = "[WARN]"; color = COLOR_WARN; break;\
case LOG_LEVEL_ERROR: level_str = "[ERROR]"; color = COLOR_ERROR; break;\
default: level_str = "[UNKNOWN]"; color = ""; break;\
}\
fprintf(log_output, "%s%s %s %s:%d - ", color, current_time(), level_str, __FILE__, __LINE__);\
fprintf(log_output, format, ##__VA_ARGS__); /* 打印日志信息 */\
fprintf(log_output, "%s\n", RESET_COLOR);\
fflush(log_output); /* 强制刷新到指定输出目标 */\
}\
} while (0)
// 简便宏,用于各个等级的日志
#define LOG_DEBUG(format, ...) LOG(LOG_LEVEL_DEBUG, format, ##__VA_ARGS__)
#define LOG_INFO(format, ...) LOG(LOG_LEVEL_INFO, format, ##__VA_ARGS__)
#define LOG_WARN(format, ...) LOG(LOG_LEVEL_WARN, format, ##__VA_ARGS__)
#define LOG_ERROR(format, ...) LOG(LOG_LEVEL_ERROR, format, ##__VA_ARGS__)
#endif // LOG_H

13
main.cpp Normal file
View File

@ -0,0 +1,13 @@
#include "mainwindow.h"
#include <QApplication>
FILE* log_output =stdout;
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}

139
mainwindow.cpp Normal file
View File

@ -0,0 +1,139 @@
#include "mainwindow.h"
#include "./ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
uh = new UsbHandler(this);
connect(uh,&UsbHandler::productListUpdate,this,&MainWindow::comboxUpdate);
connect(uh,&UsbHandler::errorOccurred,this,&MainWindow::onLogPrint);
connect(uh,&UsbHandler::interfaceListUpdate,this,&MainWindow::comboxUpdate_interface);
connect(uh,&UsbHandler::endPointListUpdate,this,&MainWindow::comboxUpdate_endpoint);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
uh->listDevices();
}
void MainWindow::comboxUpdate(QMap<int, QString> *__productList){
ui->comboBox->clear();;
LOG_DEBUG("list length is %d",__productList->size());
QMap<int,QString>::iterator it;
for(it=__productList->begin();it!=__productList->end();it++){
ui->comboBox->addItem(QString::number(it.key())+":"+it.value());
}
}
void MainWindow::on_pushButton_6_clicked()
{
QString tmp = ui->comboBox->currentText();
uh->openDevice(tmp.at(0).digitValue());
LOG_DEBUG("try to open device,index is %d",tmp.at(0).digitValue());
uh->listInterfaces(tmp.at(0).digitValue());
}
void MainWindow::onLogPrint(QString err){
QDateTime cur = QDateTime::currentDateTime();
QString tmp =cur.toString("yyyy-MM-dd HH:mm:ss");
ui->textBrowser->append(tmp+" --> "+err);
}
void MainWindow::on_pushButton_7_clicked()
{
uh->closeDevice();
}
void MainWindow::comboxUpdate_interface(QMap<int, QString> *__interfaceList){
ui->comboBox_2->clear();
LOG_DEBUG("list length is %d",__interfaceList->size());
QMap<int,QString>::iterator it;
for(it=__interfaceList->begin();it!=__interfaceList->end();it++){
ui->comboBox_2->addItem(QString::number(it.key())+":"+it.value());
}
}
void MainWindow::on_pushButton_2_clicked()
{
LOG_DEBUG("Defalut: Acquire device description");
unsigned char *data =new unsigned char [18];
memset(data,0,18);
uh->sendControlTransfer(0x80,0x06,0x0100,0x0000,data,18);
for(int i=0;i<18;i++){
LOG_DEBUG("data[%d] is 0x%x",i,data[i]);
}
}
void MainWindow::comboxUpdate_endpoint(QMap<int, QString> *__endPointList){
ui->comboBox_3->clear();
LOG_DEBUG("list length is %d",__endPointList->size());
QMap<int,QString>::iterator it;
for(it=__endPointList->begin();it!=__endPointList->end();it++){
ui->comboBox_3->addItem(QString::number(it.key())+":"+it.value());
}
}
void MainWindow::on_pushButton_8_clicked()
{
QString tmp = ui->comboBox->currentText();
int deviceIdx = tmp.at(0).digitValue();
tmp = ui->comboBox_2->currentText();
int interfaceIdx = tmp.at(0).digitValue();
uh->listInterfaceEndpoints(deviceIdx,interfaceIdx);
}
void MainWindow::on_pushButton_4_clicked()
{
QString tmp = ui->comboBox_3->currentText();
QRegularExpression regex("0x[0-9A-Fa-f]+"); // 匹配以 "0x" 开头的16进制数
QRegularExpressionMatch match = regex.match(tmp);
QString endpointAddress = match.captured(0); // 获取第一个匹配的结果
uint8_t endpointValue = endpointAddress.mid(2).toUInt(NULL, 16); // 16 表示十六进制
uint8_t data=ui->textEdit->toPlainText().toUInt();
int len = ui->textEdit->toPlainText().length();
if(uh->sendBulkTransfer(endpointValue,&data,len)){
LOG_DEBUG("Send endPoint 0x%x via BulkTransfer success.",endpointValue);
}
}
void MainWindow::on_pushButton_3_clicked()
{
QString tmp = ui->comboBox_3->currentText();
QRegularExpression regex("0x[0-9A-Fa-f]+"); // 匹配以 "0x" 开头的16进制数
QRegularExpressionMatch match = regex.match(tmp);
QString endpointAddress = match.captured(0); // 获取第一个匹配的结果
uint8_t endpointValue = endpointAddress.mid(2).toUInt(NULL, 16); // 16 表示十六进制
uint8_t data=ui->textEdit->toPlainText().toUInt();
int len = ui->textEdit->toPlainText().length();
if(uh->sendAsyncTransfer(endpointValue,&data,len)){
LOG_DEBUG("Send endPoint 0x%x via AsyncTransfer success.",endpointValue);
}
}
void MainWindow::on_pushButton_5_clicked()
{
ui->textBrowser->clear();
}

51
mainwindow.h Normal file
View File

@ -0,0 +1,51 @@
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include "usbhandler.h"
#include <QRegularExpression>
#include "QDateTime"
QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void on_pushButton_clicked();
void comboxUpdate(QMap<int,QString> *__productList);
void comboxUpdate_interface(QMap<int,QString> *__interfaceList);
void comboxUpdate_endpoint(QMap<int,QString> *__endPointList);
void onLogPrint(QString err);
void on_pushButton_6_clicked();
void on_pushButton_7_clicked();
void on_pushButton_2_clicked();
void on_pushButton_8_clicked();
void on_pushButton_4_clicked();
void on_pushButton_3_clicked();
void on_pushButton_5_clicked();
private:
Ui::MainWindow *ui;
UsbHandler *uh;
};
#endif // MAINWINDOW_H

162
mainwindow.ui Normal file
View File

@ -0,0 +1,162 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>814</width>
<height>613</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralwidget">
<layout class="QGridLayout" name="gridLayout">
<item row="1" column="1">
<widget class="QComboBox" name="comboBox"/>
</item>
<item row="12" column="0" colspan="4">
<widget class="QTextBrowser" name="textBrowser"/>
</item>
<item row="0" column="0" colspan="4">
<widget class="QPushButton" name="pushButton">
<property name="text">
<string>Refresh</string>
</property>
</widget>
</item>
<item row="8" column="2" colspan="2">
<widget class="QPushButton" name="pushButton_4">
<property name="text">
<string>Send ViaBulkTrans</string>
</property>
</widget>
</item>
<item row="5" column="2" colspan="2">
<widget class="QPushButton" name="pushButton_2">
<property name="text">
<string>Send ViaControlTrans</string>
</property>
</widget>
</item>
<item row="10" column="2" colspan="2">
<widget class="QPushButton" name="pushButton_3">
<property name="text">
<string>send ViaAsyncTrans</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QComboBox" name="comboBox_3"/>
</item>
<item row="9" column="2">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Orientation::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Device List:</string>
</property>
</widget>
</item>
<item row="3" column="2" colspan="2">
<widget class="QPushButton" name="pushButton_8">
<property name="text">
<string>Check</string>
</property>
</widget>
</item>
<item row="5" column="0" rowspan="6" colspan="2">
<widget class="QTextEdit" name="textEdit"/>
</item>
<item row="4" column="2" colspan="2">
<widget class="QPushButton" name="pushButton_7">
<property name="text">
<string>Close</string>
</property>
</widget>
</item>
<item row="1" column="2" colspan="2">
<widget class="QPushButton" name="pushButton_6">
<property name="text">
<string>Open</string>
</property>
</widget>
</item>
<item row="11" column="1">
<widget class="QLabel" name="label_2">
<property name="text">
<string>LOG</string>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>EndPoint List:</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QComboBox" name="comboBox_2">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Interface List:</string>
</property>
</widget>
</item>
<item row="13" column="3">
<widget class="QPushButton" name="pushButton_5">
<property name="text">
<string>Clear</string>
</property>
</widget>
</item>
<item row="6" column="3">
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Orientation::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<widget class="QStatusBar" name="statusbar"/>
</widget>
<resources/>
<connections/>
</ui>

300
usbhandler.cpp Normal file
View File

@ -0,0 +1,300 @@
#include "usbhandler.h"
UsbHandler::UsbHandler(QObject *parent) : QObject(parent), context(nullptr), deviceList(nullptr), deviceCount(0), handle(nullptr)
{
// Initialize libusb context
if (libusb_init(&context) < 0) {
emit errorOccurred("Failed to initialize libusb.");
}
}
UsbHandler::~UsbHandler()
{
if (handle) {
libusb_close(handle);
}
if (deviceList) {
libusb_free_device_list(deviceList, 1);
}
libusb_exit(context);
}
bool UsbHandler::initialize()
{
// Initialize the libusb context and check for errors
if (libusb_init(&context) < 0) {
emit errorOccurred("Failed to initialize libusb.");
return false;
}
return true;
}
void UsbHandler::listDevices()
{
// Retrieve the list of connected USB devices
deviceCount = libusb_get_device_list(context, &deviceList);
if (deviceCount < 0) {
emit errorOccurred("Failed to get USB device list.");
return;
}else{
productList = new QMap<int,QString>[deviceCount];
}
for (ssize_t i = 0; i < deviceCount; ++i) {
productList->insert(i,printDeviceInfo(deviceList[i]));
// Optionally add more detailed device information here
}
emit productListUpdate(productList);
}
bool UsbHandler::openDevice(int deviceIndex)
{
if (deviceIndex < 0 || deviceIndex >= deviceCount) {
emit errorOccurred("Invalid device index.");
return false;
}
// Open the selected device
libusb_device_handle *devHandle;
int status = libusb_open(deviceList[deviceIndex], &devHandle);
if (status < 0) {
emit errorOccurred("Failed to open USB device.");
return false;
}
// Store the device handle for further operations
handle = devHandle;
LOG_DEBUG("open deviceindex %d success",deviceIndex);
return true;
}
bool UsbHandler::sendControlTransfer(uint8_t bmRequestType, uint8_t bRequest, uint16_t wValue, uint16_t wIndex, uint8_t *data, uint16_t length)
{
if (handle == nullptr) {
emit errorOccurred("No device handle.");
return false;
}
int status = libusb_control_transfer(handle, bmRequestType, bRequest, wValue, wIndex, data, length, 1000);
if (status < 0) {
emit errorOccurred("Control transfer failed.");
return false;
}
return true;
}
bool UsbHandler::sendBulkTransfer(uint8_t endpoint, uint8_t *data, int length)
{
if (handle == nullptr) {
emit errorOccurred("No device handle.");
return false;
}
int actualLength;
int status = libusb_bulk_transfer(handle, endpoint, data, length, &actualLength, 1000);
if (status < 0) {
emit errorOccurred("Bulk transfer failed.");
return false;
}
return true;
}
//主要用在数据读,从设备到主机
// bool UsbHandler::sendInterruptTransfer(uint8_t endpoint, uint8_t *data, int length)
// {
// if (handle == nullptr) {
// emit errorOccurred("No device handle.");
// return false;
// }
// int actualLength;
// int status = libusb_interrupt_transfer(handle, endpoint, data, length, &actualLength, 1000);
// if (status < 0) {
// emit errorOccurred("Interrupt transfer failed.");
// return false;
// }
// return true;
// }
bool UsbHandler::sendAsyncTransfer(uint8_t endpoint, uint8_t *data, int length)
{
if (handle == nullptr) {
emit errorOccurred("No device handle.");
return false;
}
// 1. 创建 libusb_transfer 对象
libusb_transfer *transfer = libusb_alloc_transfer(0); // 0 表示默认的最大传输包大小
if (transfer == nullptr) {
emit errorOccurred("Failed to allocate transfer.");
return false;
}
// 2. 设置传输类型和参数
if (endpoint & LIBUSB_ENDPOINT_IN) { // 如果是输入端点 (IN)
libusb_fill_bulk_transfer(transfer, handle, endpoint, data, length,
[](libusb_transfer *transfer) {
// 回调函数,当传输完成时调用
if (transfer->status == LIBUSB_TRANSFER_COMPLETED) {
LOG_DEBUG("Async Transfer completed successfully.");
} else {
LOG_ERROR("Async Transfer failed with status:0x%x",transfer->status);
}
libusb_free_transfer(transfer); // 释放传输资源
}, nullptr, 0);
} else { // 如果是输出端点 (OUT)
libusb_fill_bulk_transfer(transfer, handle, endpoint, data, length,
[](libusb_transfer *transfer) {
// 回调函数,当传输完成时调用
if (transfer->status == LIBUSB_TRANSFER_COMPLETED) {
LOG_DEBUG("Async Transfer completed successfully.");
} else {
LOG_ERROR("Async Transfer failed with status:0x%x",transfer->status);
}
libusb_free_transfer(transfer); // 释放传输资源
}, nullptr, 0);
}
// 3. 提交传输
int status = libusb_submit_transfer(transfer);
if (status < 0) {
emit errorOccurred("Failed to submit async transfer.");
libusb_free_transfer(transfer);
return false;
}
libusb_handle_events(context); // 确保事件循环能处理异步传输
return true;
}
QString UsbHandler::printDeviceInfo(libusb_device *device)
{
libusb_device_descriptor desc;
QString tmp={};
if (libusb_get_device_descriptor(device, &desc) == 0) {
tmp= "Vendor ID: 0x"+QString::number(desc.idVendor,16)+",Product ID: 0x"+QString::number(desc.idProduct,16);
LOG_DEBUG("Vendor ID: 0x%x, Product ID: 0x%x", desc.idVendor, desc.idProduct);
} else {
LOG_ERROR("Failed to retrieve device descriptor.");
}
return tmp;
}
void UsbHandler::listInterfaces(int deviceIndex) {
if (deviceIndex < 0 || deviceIndex >= deviceCount) {
emit errorOccurred("无效的设备索引");
return;
}
libusb_device *device = deviceList[deviceIndex];
libusb_config_descriptor *config = nullptr;
if (libusb_get_active_config_descriptor(device, &config) != 0) {
emit errorOccurred("获取配置描述符失败");
return;
}
LOG_DEBUG("接口总数: %d",config->bNumInterfaces);
interfaceList = new QMap<int,QString>[config->bNumInterfaces];
for (int i = 0; i < config->bNumInterfaces; ++i) {
const libusb_interface &interface = config->interface[i];
QString tmp;
for (int j = 0; j < interface.num_altsetting; ++j) {
const libusb_interface_descriptor &alt = interface.altsetting[j];
tmp += QString("Interface #[%1]: %2, Class: %3, SubClass: %4, Protocol: %5")
.arg(i)
.arg(alt.bInterfaceNumber)
.arg(alt.bInterfaceClass)
.arg(alt.bInterfaceSubClass)
.arg(alt.bInterfaceProtocol);
}
interfaceList->insert(i, tmp);
}
libusb_free_config_descriptor(config);
emit interfaceListUpdate(interfaceList);
}
void UsbHandler::listInterfaceEndpoints(int deviceIndex, int interfaceNumber) {
LOG_DEBUG("devivceIdx is %d,interfaceiIdx is %d",deviceIndex,interfaceNumber);
if (deviceIndex < 0 || deviceIndex >= deviceCount) {
qDebug() << "无效的设备索引";
return;
}
libusb_device *device = deviceList[deviceIndex];
libusb_config_descriptor *config = nullptr;
if (libusb_get_active_config_descriptor(device, &config) != 0) {
qDebug() << "获取配置描述符失败";
return;
}
if (interfaceNumber < 0 || interfaceNumber >= config->bNumInterfaces) {
qDebug() << "无效的接口编号";
libusb_free_config_descriptor(config);
return;
}
const libusb_interface &interface = config->interface[interfaceNumber];
if (interface.num_altsetting < 1) {
qDebug() << "接口无 altsetting";
libusb_free_config_descriptor(config);
return;
}
endPointList = new QMap<int, QString>;
for(int j=0;j<interface.num_altsetting;j++){
const libusb_interface_descriptor &alt = interface.altsetting[j];
for (int k = 0; k < alt.bNumEndpoints; ++k) {
const libusb_endpoint_descriptor &ep = alt.endpoint[k];
QString epTypeStr;
switch (ep.bmAttributes & LIBUSB_TRANSFER_TYPE_MASK) {
case LIBUSB_TRANSFER_TYPE_CONTROL: epTypeStr = "Control"; break;
case LIBUSB_TRANSFER_TYPE_ISOCHRONOUS: epTypeStr = "Isochronous"; break;
case LIBUSB_TRANSFER_TYPE_BULK: epTypeStr = "Bulk"; break;
case LIBUSB_TRANSFER_TYPE_INTERRUPT: epTypeStr = "Interrupt"; break;
default: epTypeStr = "Unknown"; break;
}
QString direction = (ep.bEndpointAddress & LIBUSB_ENDPOINT_IN) ? "IN" : "OUT";
QString info= QString("Endpoint 0x%1 (%2, %3), MaxPacketSize: %4")
.arg(ep.bEndpointAddress, 2, 16, QChar('0'))
.arg(direction)
.arg(epTypeStr)
.arg(ep.wMaxPacketSize);
endPointList->insert(k, info);
}
}
libusb_free_config_descriptor(config);
emit endPointListUpdate(endPointList);
}
bool UsbHandler::closeDevice() {
if (handle) {
libusb_close(handle);
handle = nullptr;
LOG_DEBUG("设备关闭成功");
return true;
} else {
LOG_DEBUG("无打开的设备");
return false;
}
}

67
usbhandler.h Normal file
View File

@ -0,0 +1,67 @@
#ifndef USBHANDLER_H
#define USBHANDLER_H
#include <libusb-1.0/libusb.h>
#include <QByteArray>
#include <QString>
#include <QObject>
#include <QDebug>
#include "log.h"
#include "QMap"
class UsbHandler : public QObject
{
Q_OBJECT
public:
explicit UsbHandler(QObject *parent = nullptr);
~UsbHandler();
bool initialize();
void listDevices();
bool openDevice(int deviceIndex); // New function to open a device by index
//控制传输使用的是 endpoint 0默认控制端点
bool sendControlTransfer(
uint8_t bmRequestType, // 请求类型
uint8_t bRequest, // 请求编号
uint16_t wValue, // 请求参数值(根据请求定义而定)
uint16_t wIndex, // 接口号或端点号
uint8_t *data, // 数据缓冲区(发送或接收)
uint16_t length // 数据长度
);
bool sendBulkTransfer(uint8_t endpoint, uint8_t *data, int length);
bool sendAsyncTransfer(uint8_t endpoint, uint8_t *data, int length);
void listInterfaces(int deviceIndex);
// bool sendInterruptTransfer(uint8_t endpoint, uint8_t *data, int length);
bool closeDevice();
void listInterfaceEndpoints(int deviceIndex, int interfaceNumber);
signals:
void errorOccurred(const QString &errorMessage);
void productListUpdate(QMap<int,QString> *_productList);
void interfaceListUpdate(QMap<int,QString> *_interfaceList);
void endPointListUpdate(QMap<int,QString> *_endPointList);
private:
libusb_context *context;
libusb_device **deviceList;
ssize_t deviceCount;
libusb_device_handle *handle;
QMap<int,QString> *productList;
QMap<int,QString> *interfaceList;
QMap<int,QString> *endPointList;
QString printDeviceInfo(libusb_device *device);
};
#endif // USBHANDLER_H