增加设备发现过滤配置,以灵活支持T013以及后续型号。

This commit is contained in:
luocai 2024-10-15 17:48:51 +08:00
parent 4234c17137
commit 6810dbd801
7 changed files with 41 additions and 24 deletions

View File

@ -248,7 +248,10 @@ void Application::startSearchDevice() {
}
void Application::upgradeDevice(const QString &file) {
constexpr auto versionPrefix = "RD_T009";
if (m_device.expired()) return;
auto device = m_device.lock();
auto infomation = device->infomation();
auto versionPrefix = infomation.softwareVersion.left(7);
constexpr auto version = "RD_T009_V21R003B013";
QFileInfo fileInfo(file);
QString baseName = fileInfo.baseName();
@ -258,13 +261,10 @@ void Application::upgradeDevice(const QString &file) {
return;
}
QString firmware = baseName.mid(position, std::strlen(version));
if (!m_device.expired()) {
auto device = m_device.lock();
if (device->isConnected()) {
device->requestOta(firmware, file);
} else {
emit newMessage(2, "OTA升级", "设备已离线,请重新连接设备!");
}
if (device->isConnected()) {
device->requestOta(firmware, file);
} else {
emit newMessage(2, "OTA升级", "设备已离线,请重新连接设备!");
}
}

View File

@ -29,7 +29,7 @@ else()
endif()
option(Boost_USE_STATIC_LIBS OFF)
set(FFmpeg_ROOT ${Libraries_ROOT}/ffmpeg-6.1.1-full_build-shared)
set(FFmpeg_ROOT ${Libraries_ROOT}/ffmpeg-7.0.2-full_build-shared)
set(FFmpeg_INCLUDE_DIR ${FFmpeg_ROOT}/include)
set(FFmpeg_LIB_DIR ${FFmpeg_ROOT}/lib)

View File

@ -407,18 +407,6 @@ void DeviceConnection::transferBinContent() {
} else if (m_sendedSize >= m_uploadBuffer.size()) {
LOG(info) << "transfer ota file finished, wait " << WaitMd5CheckTime
<< " ms for send check, total sended size: " << m_sendedSize;
// QTimer::singleShot(WaitMd5CheckTime, this, [this]() {
// boost::json::object request;
// request["func"] = "a22devicefirmware_setdata";
// request["deviceid"] = "0";
// boost::json::object data;
// data["target_linux04_firmware"] = "RD_T009_V21R003B001";
// request["data"] = std::move(data);
// auto text = boost::json::serialize(request);
// m_commandSocket->write(text.data(), text.size());
// LOG(info) << "request md5 check result: " << text;
// });
if (m_otaTimer == nullptr) {
m_otaTimer = new QTimer(this);
m_otaTimer->setSingleShot(true);

View File

@ -1,6 +1,7 @@
#include "DeviceListModel.h"
#include "BoostLog.h"
#include "DeviceConnection.h"
#include "Settings.h"
#include <QNetworkDatagram>
#include <QNetworkInterface>
#include <QTimer>
@ -186,6 +187,7 @@ void DeviceListModel::onDeviceDisconnected() {
}
void DeviceListModel::onDeviceReplyReadyRead() {
using namespace Amass;
auto udp = dynamic_cast<QUdpSocket *>(sender());
while (udp->hasPendingDatagrams()) {
QNetworkDatagram datagram = udp->receiveDatagram();
@ -202,7 +204,12 @@ void DeviceListModel::onDeviceReplyReadyRead() {
if (reply.contains("sw_ver")) {
device.softwareVersion = QString::fromStdString(std::string(reply.at("sw_ver").as_string()));
}
if (!device.softwareVersion.startsWith("RD_T009")) continue; // 其它设备不予显示
auto settings = Singleton<Settings>::instance();
auto supportedDevices = settings->supportedDevices();
auto item = std::find_if(supportedDevices.cbegin(), supportedDevices.cend(), [&device](const std::string &model) {
return device.softwareVersion.startsWith(QString::fromStdString(model));
});
if (item == supportedDevices.cend()) continue; // 其它设备不予显示
device.ip = datagram.senderAddress().toString();
auto iterator = std::find_if(m_devices.cbegin(), m_devices.cend(),

View File

@ -25,20 +25,36 @@ void Settings::save() {
ptree.put("Application.DataCollection.ImageQuality", m_imageQuality);
ptree.put("Application.DataCollection.ImageQuality.<xmlcomment>", "0-100,仅对jpg有效");
for (auto &device : m_supportedDevices) {
ptree.add("Application.SupportedDevices.Model", device);
}
boost::property_tree::xml_writer_settings<std::string> settings('\t', 1);
boost::property_tree::write_xml(SettingsFilePath, ptree, std::locale(), settings);
}
void Settings::load() {
boost::property_tree::ptree ptree;
m_supportedDevices.clear();
try {
boost::property_tree::read_xml(SettingsFilePath, ptree);
m_imageFormat = static_cast<ImageFormat>(ptree.get<int>("Application.DataCollection.ImageFormat"));
m_imageQuality = ptree.get<int>("Application.DataCollection.ImageQuality");
for (auto &child : ptree.get_child("Application.SupportedDevices")) {
if (child.first != "Model") continue;
m_supportedDevices.push_back(child.second.get<std::string>(""));
}
} catch (...) {
LOG(error) << "parse " << SettingsFilePath << " failed.";
}
LOG(info) << "image format: " << m_imageFormat << ", quality: " << m_imageQuality;
std::ostringstream oss;
oss << "[";
for (auto &device : m_supportedDevices) {
oss << device << ", ";
}
oss << "]";
LOG(info) << "image format: " << m_imageFormat << ", quality: " << m_imageQuality
<< ", supported devices: " << oss.str();
}
ImageFormat Settings::imageFormat() const {
@ -48,3 +64,7 @@ ImageFormat Settings::imageFormat() const {
int Settings::imageQuality() const {
return m_imageQuality;
}
std::list<std::string> Settings::supportedDevices() const {
return m_supportedDevices;
}

View File

@ -12,6 +12,7 @@ public:
void load();
ImageFormat imageFormat() const;
int imageQuality() const;
std::list<std::string> supportedDevices() const;
protected:
Settings();
@ -19,6 +20,7 @@ protected:
private:
ImageFormat m_imageFormat = ImageFormat::Jpeg; // 0: jpg 1: yuv
int m_imageQuality = 100;
std::list<std::string> m_supportedDevices{"RD_T009", "RD_T013"};
};
#endif // SETTINGS_H

View File

@ -80,7 +80,7 @@ ApplicationWindow {
deviceList.currentIndex = index
}
onDoubleClicked: {
if (!softwareVersion.includes("R003")) {
if (softwareVersion.includes("T009") && !softwareVersion.includes("R003")) {
showMessageDialog(2, "网络设置", "当前设备不支持有线网络设置!")
} else if (onlineStatus) {
networkPopup.open()