modbus rtu 1.1 plugins
This commit is contained in:
@@ -11,7 +11,6 @@
|
||||
#include "message_bus/ingress/DriverIngressAdapter.h"
|
||||
#include "message_bus/pipeline/PipelineEngine.h"
|
||||
#include "core/plugin_system/PluginManager.h"
|
||||
#include "plugins/protocols/modbusrtu/parser/ModbusRtuProtocolPlugin.h"
|
||||
#include "device_bus/manager/SerialDeviceManager.h"
|
||||
#include "devices/DeviceTypes.h"
|
||||
#include "utils/logs/logging.h"
|
||||
@@ -61,19 +60,38 @@ bool DeviceBusManager::initialize(const QJsonObject& rootConfig)
|
||||
if (!m_pluginHost) {
|
||||
m_pluginHost = std::make_unique<softbus::core::plugin_system::PluginHost>(m_pluginManager);
|
||||
}
|
||||
m_pluginManager->registerProtocolPlugin(softbus::core::plugin_system::makeModbusRtuProtocolPlugin());
|
||||
const auto pluginsObj = rootConfig.value(QStringLiteral("plugins")).toObject();
|
||||
const auto framerArr = pluginsObj.value(QStringLiteral("framers")).toArray();
|
||||
for (const auto& v : framerArr) {
|
||||
const auto obj = v.toObject();
|
||||
const QString path = obj.value(QStringLiteral("path")).toString();
|
||||
if (path.isEmpty()) {
|
||||
continue;
|
||||
}
|
||||
QString err;
|
||||
if (!m_pluginHost->loadPlugin(path, &err)) {
|
||||
LOG_WARNING() << "DeviceBusManager: framer plugin load failed path=" << path << "err=" << err;
|
||||
QSet<QString> loadedPluginPaths;
|
||||
auto loadPlugins = [&](const QJsonArray& arr, const char* sourceTag) {
|
||||
for (const auto& v : arr) {
|
||||
const auto obj = v.toObject();
|
||||
const QString path = obj.value(QStringLiteral("path")).toString();
|
||||
if (path.isEmpty() || loadedPluginPaths.contains(path)) {
|
||||
continue;
|
||||
}
|
||||
QString err;
|
||||
if (!m_pluginHost->loadPlugin(path, &err)) {
|
||||
LOG_WARNING() << "DeviceBusManager: plugin load failed source=" << sourceTag
|
||||
<< "path=" << path << "err=" << err;
|
||||
continue;
|
||||
}
|
||||
loadedPluginPaths.insert(path);
|
||||
}
|
||||
};
|
||||
// New generic entry for protocol plugins; each .so may export parser/framer/mapper factories.
|
||||
loadPlugins(pluginsObj.value(QStringLiteral("protocols")).toArray(), "protocols");
|
||||
// Backward compatibility: legacy key still supported.
|
||||
loadPlugins(pluginsObj.value(QStringLiteral("framers")).toArray(), "framers");
|
||||
if (m_pluginManager) {
|
||||
const auto parserIds = m_pluginManager->registeredProtocolPluginIds();
|
||||
const auto framerIds = m_pluginManager->registeredProtocolFramerPluginIds();
|
||||
const auto mapperIds = m_pluginManager->registeredProtocolMapperPluginIds();
|
||||
LOG_INFO() << "DeviceBusManager: registered parser plugins(" << parserIds.size()
|
||||
<< "):" << parserIds.join(QStringLiteral(", "));
|
||||
LOG_INFO() << "DeviceBusManager: registered framer plugins(" << framerIds.size()
|
||||
<< "):" << framerIds.join(QStringLiteral(", "));
|
||||
LOG_INFO() << "DeviceBusManager: registered mapper plugins(" << mapperIds.size()
|
||||
<< "):" << mapperIds.join(QStringLiteral(", "));
|
||||
}
|
||||
if (m_pipelineEngine) {
|
||||
m_pipelineEngine->setMemoryPool(m_memoryPool);
|
||||
|
||||
Reference in New Issue
Block a user