From 40c60193d15de51fe1e110aba0b5f8110c5acbf5 Mon Sep 17 00:00:00 2001 From: luocai Date: Mon, 14 Oct 2024 14:20:45 +0800 Subject: [PATCH] =?UTF-8?q?=E7=B2=BE=E7=AE=80=E4=BB=A3=E7=A0=81=EF=BC=8C?= =?UTF-8?q?=E4=BE=BF=E4=BA=8E=E5=90=8C=E6=AD=A5=E5=AE=A2=E6=88=B7=E5=AF=B9?= =?UTF-8?q?=E6=8E=A5=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Analyser/Application.cpp | 37 ++++--------- Analyser/Application.h | 10 ++-- Analyser/ModuleCommunication.cpp | 71 +++---------------------- Analyser/ModuleCommunication.h | 21 +++----- Analyser/qml/EnrollVerifyOperations.qml | 46 +--------------- Analyser/qml/ExtendedOperations.qml | 51 ------------------ 6 files changed, 29 insertions(+), 207 deletions(-) diff --git a/Analyser/Application.cpp b/Analyser/Application.cpp index e468508..fa7d627 100644 --- a/Analyser/Application.cpp +++ b/Analyser/Application.cpp @@ -58,13 +58,12 @@ void Application::onNewEnrollResult(uint16_t userid) { }); } -void Application::onNewVerifyResult(uint16_t userid, const QString &username, uint16_t elapsed) { +void Application::onNewVerifyResult(uint16_t userid, const QString &username) { m_palmUsername = username; m_palmId = userid; - QTimer::singleShot(0, this, [this, userid, username, elapsed]() { - emit newStatusTip(Info, QString("%1,识别耗时: %2ms") - .arg(userid == ModuleCommunication::InvalidUserId ? "未录入用户" : username) - .arg(elapsed)); + QTimer::singleShot(0, this, [this, userid, username]() { + emit newStatusTip(Info, + QString("%1").arg(userid == ModuleCommunication::InvalidUserId ? "未录入用户" : username)); }); } @@ -192,24 +191,19 @@ void Application::closeUVC() { emit uvcOpenedChanged(); } -void Application::verify(bool captureImage, uint8_t timeout) { +void Application::verify(uint8_t timeout) { if (m_communication->currentMessageId() != ModuleCommunication::Idle) { m_communication->reset(); } - if (captureImage) { - m_communication->verifyExtended(captureImage, timeout); - } else { + m_communication->verify(timeout); - } - m_verifyExtendedMode = captureImage; } -void Application::enroll(const QString &username, bool strictMode, uint8_t excludeMode, bool persistence, - uint8_t timeout) { +void Application::enroll(const QString &username, uint8_t timeout) { if (m_communication->currentMessageId() != ModuleCommunication::Idle) { m_communication->reset(); } - m_communication->enroll(username.toStdString(), strictMode, excludeMode, persistence, timeout); + m_communication->enroll(username.toStdString(), timeout); m_palmUsername = username; } @@ -227,15 +221,6 @@ void Application::deleteAll() { m_communication->deleteAll(); } -void Application::enrollExtended(const QString &username, bool strictMode, uint8_t excludeMode, bool persistence, - uint8_t timeout) { - if (m_communication->currentMessageId() != ModuleCommunication::Idle) { - m_communication->reset(); - } - m_communication->enrollExtended(username.toStdString(), strictMode, excludeMode, persistence, timeout); - m_palmUsername = username; -} - void Application::uploadImage(const QString &path, const QString &username, int operation) { m_uploadImageSendedSize = 0; ModuleCommunication::UploadImageInformation request; @@ -453,11 +438,7 @@ void Application::onCommandFinished(ModuleCommunication::MessageId messageId, } void Application::onVerifyTimeout() { - if (m_verifyExtendedMode) { - m_communication->verifyExtended(m_verifyExtendedMode, 120); - } else { - m_communication->verify(120); - } + m_communication->verify(120); } bool Application::startOta(const QString &path) { diff --git a/Analyser/Application.h b/Analyser/Application.h index bc502b9..119191b 100644 --- a/Analyser/Application.h +++ b/Analyser/Application.h @@ -51,11 +51,8 @@ public: Q_INVOKABLE void close(); Q_INVOKABLE void closeUVC(); Q_INVOKABLE bool startOta(const QString &path); - Q_INVOKABLE void verify(bool captureImage, uint8_t timeout); - Q_INVOKABLE void enroll(const QString &username, bool strictMode, uint8_t excludeMode, bool persistence, - uint8_t timeout); - Q_INVOKABLE void enrollExtended(const QString &username, bool strictMode, uint8_t excludeMode, bool persistence, - uint8_t timeout); + Q_INVOKABLE void verify(uint8_t timeout); + Q_INVOKABLE void enroll(const QString &username, uint8_t timeout); Q_INVOKABLE void deleteUser(uint16_t userid); Q_INVOKABLE void deleteAll(); Q_INVOKABLE void uploadImage(const QString &path, const QString &username, int operation); @@ -88,7 +85,7 @@ signals: protected: Application(int &argc, char **argv); void onNewEnrollResult(uint16_t userid); - void onNewVerifyResult(uint16_t userid, const QString &username, uint16_t elapsed); + void onNewVerifyResult(uint16_t userid, const QString &username); void onNewPalmFeature(const PalmFeature &feature); void onErrorOccurred(ModuleCommunication::NoteId note, const QString &error, const QString &detailMessage); void onNewImageInfo(ModuleCommunication::MessageId messageId, uint32_t size, const uint8_t *md5); @@ -106,7 +103,6 @@ private: std::shared_ptr m_database; bool m_persistenceMode = true; // 模组持续识别 - bool m_verifyExtendedMode = false; bool m_persistenceModeStarted = false; int m_persistenceVerifyInterval = 1; QTimer *m_verifyTimer = nullptr; diff --git a/Analyser/ModuleCommunication.cpp b/Analyser/ModuleCommunication.cpp index fa604cd..f24b360 100644 --- a/Analyser/ModuleCommunication.cpp +++ b/Analyser/ModuleCommunication.cpp @@ -52,18 +52,6 @@ void ModuleCommunication::verify(uint8_t timeout) { LOG_CAT(info, GUI) << Separator; } -void ModuleCommunication::verifyExtended(bool captureImage, uint8_t timeout) { - VerifyRequest data = {0}; - data.timeout = timeout; - data.save_image = captureImage ? 0x01 : 0x00; - auto [frameData, frameSize] = generateFrame(VerifyExtended, reinterpret_cast(&data), sizeof(data)); - m_serialPort->write(reinterpret_cast(frameData), frameSize); - setCurrentMessageIdStatus(VerifyExtended); - - LOG_CAT(info, GUI) << "发送扩展识别指令: " << protocolDataFormatString(frameData, frameSize); - LOG_CAT(info, GUI) << Separator; -} - void ModuleCommunication::reset() { auto [frameData, frameSize] = generateFrame(Reset); m_serialPort->write(reinterpret_cast(frameData), frameSize); @@ -72,13 +60,9 @@ void ModuleCommunication::reset() { LOG_CAT(info, GUI) << Separator; } -void ModuleCommunication::enroll(const std::string &username, bool strictMode, uint8_t excludeMode, bool persistence, - uint8_t timeout) { +void ModuleCommunication::enroll(const std::string &username, uint8_t timeout) { EnrollRequest data = {0}; - data.strictMode = strictMode ? 1 : 0; - data.excludeMode = excludeMode; data.timeout = timeout; - data.skipSave = persistence ? 0 : 1; strncpy(reinterpret_cast(data.username), username.c_str(), sizeof(data.username)); auto [frameData, frameSize] = generateFrame(EnrollSingle, reinterpret_cast(&data), sizeof(data)); m_serialPort->write(reinterpret_cast(frameData), frameSize); @@ -89,22 +73,6 @@ void ModuleCommunication::enroll(const std::string &username, bool strictMode, u LOG_CAT(info, GUI) << Separator; } -void ModuleCommunication::enrollExtended(const std::string &username, bool strictMode, uint8_t excludeMode, - bool persistence, uint8_t timeout) { - EnrollRequest data = {}; - data.strictMode = strictMode ? 1 : 0; - data.excludeMode = excludeMode; - data.timeout = timeout; - data.skipSave = persistence ? 0 : 1; - strncpy(reinterpret_cast(data.username), username.c_str(), sizeof(data.username)); - auto [frameData, frameSize] = generateFrame(EnrollExtended, reinterpret_cast(&data), sizeof(data)); - m_serialPort->write(reinterpret_cast(frameData), frameSize); - setCurrentMessageIdStatus(EnrollExtended); - LOG_CAT(info, GUI) << "发送获取注册照片指令: " << protocolDataFormatString(frameData, frameSize); - LOG_CAT(info, GUI) << "用户名: " << username << ", 超时时间: " << static_cast(timeout) << "s"; - LOG_CAT(info, GUI) << Separator; -} - void ModuleCommunication::deleteUser(uint16_t userid) { uint16_t n = htons(userid); auto [frameData, frameSize] = generateFrame(DeleteUser, reinterpret_cast(&n), sizeof(n)); @@ -216,25 +184,21 @@ void ModuleCommunication::processPackage(const uint8_t *data, uint16_t size) { if (result == Success) { auto info = reinterpret_cast(data + 7); uint16_t userid = ntohs(info->userid); - uint16_t elapsed = ntohs(info->elapsed); LOG_CAT(info, GUI) << "用户ID: " << userid - << ", 用户名: " << std::string_view(reinterpret_cast(info->username)) - << ", 耗时: " << elapsed << "ms"; - emit newVerifyResult(userid, reinterpret_cast(info->username), elapsed); + << ", 用户名: " << std::string_view(reinterpret_cast(info->username)); + emit newVerifyResult(userid, reinterpret_cast(info->username)); } else if (result == Failed4Timeout) { LOG_CAT(info, GUI) << "识别超时。"; } else if (result == Rejected) { LOG_CAT(info, GUI) << "模组拒绝该命令。"; } else if (result == Failed4UnknownUser) { auto info = reinterpret_cast(data + 7); - uint16_t elapsed = ntohs(info->elapsed); - emit newVerifyResult(InvalidUserId, "", elapsed); - LOG_CAT(info, GUI) << "未录入用户, 耗时: " << elapsed << "ms"; + emit newVerifyResult(InvalidUserId, ""); + LOG_CAT(info, GUI) << "未录入用户"; } else if (result == Failed4UnknownReason) { auto info = reinterpret_cast(data + 7); - uint16_t elapsed = ntohs(info->elapsed); - emit newVerifyResult(InvalidUserId, "", elapsed); - LOG_CAT(info, GUI) << "未知错误, 耗时: " << elapsed << "ms"; + emit newVerifyResult(InvalidUserId, ""); + LOG_CAT(info, GUI) << "未知错误"; } else { LOG_CAT(info, GUI) << "未知错误(" << static_cast(result) << ")。"; } @@ -324,27 +288,6 @@ void ModuleCommunication::processPackage(const uint8_t *data, uint16_t size) { case UploadImageInfo: { break; } - case UploadImageData: { - auto info = reinterpret_cast(data + 7); - if (result == Success) { - if (info->operation == 0) { - LOG_CAT(info, GUI) << "图片下发注册成功,用户ID: " << ntohs(info->userid); - } else if (info->operation == 1) { - auto result = reinterpret_cast(info); - LOG_CAT(info, GUI) << "图片下发识别成功,用户ID: " << ntohs(result->userid) << ", 用户名: " - << std::string_view(reinterpret_cast(result->result.username)) - << ", 耗时: " << ntohs(result->result.elapsed) << "ms"; - } else { - LOG(warning) << "unknown upload image operation: " << info->operation; - } - LOG_CAT(info, GUI) << Separator; - } else if (result == Needmore) { - } else { - LOG(info) << "upload image failed, operation: " << static_cast(info->operation) - << ", status: " << static_cast(result); - } - break; - } case GetCurrentStatus: { LOG_CAT(info, GUI) << "模组: " << protocolDataFormatString(data, size); LOG_CAT(info, GUI) << "模组当前状态: " << static_cast(data[7]); diff --git a/Analyser/ModuleCommunication.h b/Analyser/ModuleCommunication.h index a44fad8..3deb378 100644 --- a/Analyser/ModuleCommunication.h +++ b/Analyser/ModuleCommunication.h @@ -87,8 +87,8 @@ public: #pragma pack(1) struct VerifyRequest { - uint8_t save_image; - uint8_t timeout; // timeout, unit second, default 10s + uint8_t reserved; + uint8_t timeout; }; struct PalmStateNote { @@ -102,16 +102,14 @@ public: struct EnrollRequest { uint8_t username[32]; - uint8_t strictMode = 0; - uint8_t excludeMode = 0; // 掌静脉库里面是否已经存在 0:不进行验证 1:只进行比对 2:如果存在,则现在不予录入 - uint8_t skipSave = 0; + uint8_t reserved1[3]; uint8_t timeout; - uint8_t reserved[4]; + uint8_t reserved2[4]; }; struct EnrollReply { uint16_t userid; - uint8_t operation; + uint8_t reserved; }; struct PalmVeinInformation { @@ -148,7 +146,7 @@ public: struct VerifyReply { uint16_t userid; uint8_t username[UsernameSize]; // 32Bytes - uint16_t elapsed; // 此时识别耗时时间 + uint8_t reserved[2]; }; struct VerifyExtendReply : public VerifyReply { @@ -195,12 +193,9 @@ public: explicit ModuleCommunication(QObject *parent = nullptr); bool open(const QString &portName, int baudRate); void verify(uint8_t timeout); - void verifyExtended(bool captureImage, uint8_t timeout); Q_INVOKABLE void reset(); - void enroll(const std::string &username, bool strictMode, uint8_t excludeMode, bool persistence, uint8_t timeout); - void enrollExtended(const std::string &username, bool strictMode, uint8_t excludeMode, bool persistence, - uint8_t timeout); + void enroll(const std::string &username, uint8_t timeout); Q_INVOKABLE void deleteUser(uint16_t userid); Q_INVOKABLE void deleteAll(); Q_INVOKABLE void requestUniqueId(); @@ -222,7 +217,7 @@ signals: * @param username * @param elapsed ms毫秒 */ - void newVerifyResult(uint16_t userid, const QString &username, uint16_t elapsed); + void newVerifyResult(uint16_t userid, const QString &username); void newEnrollResult(uint16_t userid); void newPalmFeature(const PalmFeature &feature); void newImageInfo(MessageId id, uint32_t size, const uint8_t *md5); diff --git a/Analyser/qml/EnrollVerifyOperations.qml b/Analyser/qml/EnrollVerifyOperations.qml index 8bd1a23..e1a56eb 100644 --- a/Analyser/qml/EnrollVerifyOperations.qml +++ b/Analyser/qml/EnrollVerifyOperations.qml @@ -16,19 +16,6 @@ RowLayout { id: enrollName implicitWidth: 100 } - Label { - text: qsTr("严格模式") - } - Switch { - id: strictMode - } - Label { - text: qsTr("互斥模式") - } - ComboBox { - id: excludeMode - model: ["无", "仅比对", "互斥"] - } Label { text: qsTr("超时时间") } @@ -38,21 +25,6 @@ RowLayout { text: "30" } - Label { - text: qsTr("持久化") - } - Switch { - id: persistence - checked: true - } - - Label { - text: qsTr("保存图片") - } - Switch { - id: extendedMode - } - Button { property bool enrolling: App.module ? (App.module.currentMessageId === ModuleCommunication.EnrollSingle) @@ -61,16 +33,8 @@ RowLayout { onClicked: { if (enrolling) { App.module.reset() - } else if (extendedMode.checked) { - App.enrollExtended(enrollName.text, strictMode.checked, - excludeMode.currentIndex, - persistence.checked, - parseInt(enrollTimeout.text)) } else { - App.enroll(enrollName.text, strictMode.checked, - excludeMode.currentIndex, - persistence.checked, - parseInt(enrollTimeout.text)) + App.enroll(enrollName.text, parseInt(enrollTimeout.text)) } } } @@ -96,12 +60,6 @@ RowLayout { checked: App.persistenceMode onToggled: App.persistenceMode = !App.persistenceMode } - Label { - text: qsTr("保存图片") - } - Switch { - id: extendedVerifyMode - } Label { text: qsTr("识别间隔(s)") } @@ -118,7 +76,7 @@ RowLayout { App.module.reset() } else { App.persistenceVerifyInterval = parseInt(verifyIntetval.text) - App.verify(extendedVerifyMode.checked, parseInt(verifyTimeout.text)) + App.verify(parseInt(verifyTimeout.text)) } } } diff --git a/Analyser/qml/ExtendedOperations.qml b/Analyser/qml/ExtendedOperations.qml index 0957c1b..4f61a6b 100644 --- a/Analyser/qml/ExtendedOperations.qml +++ b/Analyser/qml/ExtendedOperations.qml @@ -52,57 +52,6 @@ Item { text: "OTA升级" onClicked: loader.active = true } - Row { - Label { - text: qsTr("日志") - } - Switch { - id: debugMode - onToggled: App.module.setDebugEnabled(debugMode.checked) - } - } - } - } - } - - GroupBox { - title: "图片注册" - visible: true - GridLayout { - columns: 2 - TextField { - id: imagePath - Layout.columnSpan: 2 - implicitWidth: 200 - placeholderText: "请选择图片" - onPressed: { - fileDialog.open() - } - } - Label { - text: qsTr("用户姓名") - } - TextField { - id: imageEnrollName - implicitWidth: 100 - text: "测试下发" - } - Label { - text: qsTr("循环") - } - Switch { - checked: App.imageUploadPersistenceMode - onToggled: { - App.imageUploadPersistenceMode = checked - } - } - Button { - text: "注册" - onClicked: App.uploadImage(imagePath.text, imageEnrollName.text, 0) - } - Button { - text: "识别" - onClicked: App.uploadImage(imagePath.text, imageEnrollName.text, 1) } } }