From ca3545b8b00436458c9735a61391440dfd6bf387 Mon Sep 17 00:00:00 2001 From: Lenn Date: Mon, 2 Feb 2026 22:18:38 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E4=B8=8A=E4=B9=8B=E5=89=8D=E7=BC=BA?= =?UTF-8?q?=E5=A4=B1=E7=9A=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CMakeLists.txt | 11 ++++++---- docs/ARCHITECTURE.md | 1 + .../piezoresistive_a_plugin.cpp | 11 ++++++++++ .../piezoresistive_a_plugin.h | 20 +++++++++++++++++ src/glwidget.h | 3 +++ src/serial/protocol_bundle.h | 16 ++++++++++++++ src/serial/protocol_plugin.h | 22 +++++++++++++++++++ 7 files changed, 80 insertions(+), 4 deletions(-) create mode 100644 plugins/piezoresistive_a/piezoresistive_a_plugin.cpp create mode 100644 plugins/piezoresistive_a/piezoresistive_a_plugin.h create mode 100644 src/serial/protocol_bundle.h create mode 100644 src/serial/protocol_plugin.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 266dda4..e49afc6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -90,10 +90,10 @@ target_include_directories(PiezoresistiveAPlugin PRIVATE target_link_libraries(PiezoresistiveAPlugin PRIVATE Qt6::Core ) -target_include_directories(TactileIpc3D PRIVATE - ${CMAKE_CURRENT_SOURCE_DIR}/3rdpart/OpenCV/include -) if (WIN32) + target_include_directories(TactileIpc3D PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR}/3rdpart/OpenCV/include + ) target_link_directories(TactileIpc3D PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/3rdpart/OpenCV/x64/mingw/lib ) @@ -101,6 +101,10 @@ if (WIN32) opencv_core4140 opencv_imgproc4140 ) +else() + find_package(OpenCV REQUIRED COMPONENTS core imgproc) + target_include_directories(TactileIpc3D PRIVATE ${OpenCV_INCLUDE_DIRS}) + target_link_libraries(TactileIpc3D PRIVATE ${OpenCV_LIBS}) endif() set(TS_FILES ${CMAKE_CURRENT_SOURCE_DIR}/i18n/app_zh_CN.ts @@ -164,4 +168,3 @@ install(TARGETS PiezoresistiveAPlugin RUNTIME DESTINATION bin/plugins/decoders LIBRARY DESTINATION bin/plugins/decoders ) - diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md index 86cfc74..7049b1f 100644 --- a/docs/ARCHITECTURE.md +++ b/docs/ARCHITECTURE.md @@ -671,6 +671,7 @@ classDiagram ## 更新记录 +- 2026-02-02:补齐协议插件接口(`protocol_bundle.h` / `protocol_plugin.h`)并补充压阻 A 插件实现(`plugins/piezoresistive_a`)。 - 2026-01-20:协议解码插件化(DLL),SerialBackend 启动时动态加载 `plugins/decoders`,安装器支持按组件选择协议插件。 - 2026-01-11:新增 `QtSerialTransport`(`QSerialPort` 传输实现)并设为默认传输;补齐点选拾取逻辑;新增数据流/时序图并补充可视化 TODO 说明。 - 2026-01-12:`LeftPanel` 新增颜色映射参数;`AppBackend`/`GLWidget` 增加颜色与范围接口,shader 使用三色渐变映射数据值。 diff --git a/plugins/piezoresistive_a/piezoresistive_a_plugin.cpp b/plugins/piezoresistive_a/piezoresistive_a_plugin.cpp new file mode 100644 index 0000000..6b14874 --- /dev/null +++ b/plugins/piezoresistive_a/piezoresistive_a_plugin.cpp @@ -0,0 +1,11 @@ +#include "piezoresistive_a_plugin.h" + +#include + +ProtocolBundle PiezoresistiveAPlugin::createBundle() { + ProtocolBundle bundle; + bundle.codec = std::make_shared(); + bundle.decoder = std::make_shared(); + bundle.format = std::make_shared(); + return bundle; +} diff --git a/plugins/piezoresistive_a/piezoresistive_a_plugin.h b/plugins/piezoresistive_a/piezoresistive_a_plugin.h new file mode 100644 index 0000000..a2a667b --- /dev/null +++ b/plugins/piezoresistive_a/piezoresistive_a_plugin.h @@ -0,0 +1,20 @@ +#ifndef TACTILEIPC3D_PIEZORESISTIVE_A_PLUGIN_H +#define TACTILEIPC3D_PIEZORESISTIVE_A_PLUGIN_H + +#include + +#include "serial/protocol_plugin.h" +#include "serial/piezoresistive_a_protocol.h" + +class PiezoresistiveAPlugin final : public QObject, public IProtocolPlugin { + Q_OBJECT + Q_PLUGIN_METADATA(IID PROTOCOL_PLUGIN_IID) + Q_INTERFACES(IProtocolPlugin) + +public: + QString protocolName() const override { return QStringLiteral("piezoresistive_a"); } + int apiVersion() const override { return kProtocolPluginApiVersion; } + ProtocolBundle createBundle() override; +}; + +#endif // TACTILEIPC3D_PIEZORESISTIVE_A_PLUGIN_H diff --git a/src/glwidget.h b/src/glwidget.h index 6e63109..ef8c6de 100644 --- a/src/glwidget.h +++ b/src/glwidget.h @@ -76,8 +76,10 @@ public slots: void setLightMode(bool on); void setShowBg(bool on); void setShowGrid(bool on); + void setUseHeatmap(bool on); void setCol(int col); void setRow(int row); + void setColorZero(const QColor& color); void setColorLow(const QColor& color); void setColorMid(const QColor& color); void setColorHigh(const QColor& color); @@ -213,6 +215,7 @@ private: unsigned int m_bgVbo = 0; bool m_lightMode = true; bool m_showBg = true; + QVector3D m_colorZero{0.10f, 0.75f, 1.00f}; QVector3D m_colorLow{0.10f, 0.75f, 1.00f}; QVector3D m_colorMid{0.10f, 0.95f, 0.35f}; QVector3D m_colorHigh{1.00f, 0.22f, 0.10f}; diff --git a/src/serial/protocol_bundle.h b/src/serial/protocol_bundle.h new file mode 100644 index 0000000..e2a6bc3 --- /dev/null +++ b/src/serial/protocol_bundle.h @@ -0,0 +1,16 @@ +#ifndef TACTILEIPC3D_PROTOCOL_BUNDLE_H +#define TACTILEIPC3D_PROTOCOL_BUNDLE_H + +#include + +#include "serial_codec.h" +#include "serial_decoder.h" +#include "serial_format.h" + +struct ProtocolBundle { + std::shared_ptr codec; + std::shared_ptr decoder; + std::shared_ptr format; +}; + +#endif // TACTILEIPC3D_PROTOCOL_BUNDLE_H diff --git a/src/serial/protocol_plugin.h b/src/serial/protocol_plugin.h new file mode 100644 index 0000000..bc56d5a --- /dev/null +++ b/src/serial/protocol_plugin.h @@ -0,0 +1,22 @@ +#ifndef TACTILEIPC3D_PROTOCOL_PLUGIN_H +#define TACTILEIPC3D_PROTOCOL_PLUGIN_H + +#include +#include + +#include "protocol_bundle.h" + +constexpr int kProtocolPluginApiVersion = 1; +#define PROTOCOL_PLUGIN_IID "com.tactileipc3d.ProtocolPlugin" + +class IProtocolPlugin { +public: + virtual ~IProtocolPlugin() = default; + virtual QString protocolName() const = 0; + virtual int apiVersion() const = 0; + virtual ProtocolBundle createBundle() = 0; +}; + +Q_DECLARE_INTERFACE(IProtocolPlugin, PROTOCOL_PLUGIN_IID) + +#endif // TACTILEIPC3D_PROTOCOL_PLUGIN_H