90 lines
3.2 KiB
C++
90 lines
3.2 KiB
C++
#include "device_holder.h"
|
|
|
|
#include "barrier/generic_barrier.h"
|
|
#include "platform_scale/generic_platform_scale.h"
|
|
#include "sound_column/generic_sound_column.h"
|
|
// #include "vidicon/generic_vidicon.h"
|
|
#include "vidicon/barrier_vidicon.h"
|
|
|
|
namespace zsy {
|
|
void DeviceHolder::initBarriers(std::vector<BarrierProperties> &configs)
|
|
{
|
|
for (auto &config: configs)
|
|
{
|
|
barriers.emplace(config.sn, std::make_shared<GenericBarrier>(config));
|
|
auto &map = relation[config.sn];
|
|
map.emplace("platformScale", config.platformScale);
|
|
map.emplace("soundColumn", config.soundColumn);
|
|
map.emplace("vidicon", config.vidicon);
|
|
}
|
|
}
|
|
|
|
void DeviceHolder::initPlatformScales(std::vector<PlatformScaleProperties> &configs)
|
|
{
|
|
for (auto &config: configs)
|
|
{
|
|
platformScales.emplace(config.sn, std::make_shared<GenericPlatformScale>(config));
|
|
}
|
|
}
|
|
|
|
void DeviceHolder::initSoundColumns(std::vector<SoundColumnProperties> &configs)
|
|
{
|
|
for (auto &config: configs)
|
|
{
|
|
soundColumns.emplace(config.sn, std::make_shared<GenericSoundColumn>(config));
|
|
}
|
|
}
|
|
|
|
void DeviceHolder::initVidicons(std::vector<VidiconProperties> &configs)
|
|
{
|
|
for (auto &config: configs)
|
|
{
|
|
// vidicons.emplace(config.sn, std::make_shared<GenericVidicon>(config));
|
|
vidicons.emplace(config.sn, std::make_shared<BarrierVidicon>(config));
|
|
}
|
|
}
|
|
|
|
DeviceHolder::DeviceHolder(const nlohmann::json &config)
|
|
{
|
|
LOGGER_INFO("正在初始化设备...");
|
|
auto deviceConfig = config.get<DeviceConfig>();
|
|
initBarriers(deviceConfig.barriers);
|
|
initPlatformScales(deviceConfig.platformScales);
|
|
initSoundColumns(deviceConfig.soundColumns);
|
|
initVidicons(deviceConfig.vidicons);
|
|
LOGGER_INFO("设备初始化完成");
|
|
}
|
|
|
|
std::shared_ptr<Barrier> DeviceHolder::getBarrier(const std::string &barrier_sn)
|
|
{
|
|
return barriers.contains(barrier_sn) ? barriers.at(barrier_sn) : nullptr;
|
|
}
|
|
|
|
std::shared_ptr<PlatformScale> DeviceHolder::getPlatformScale(const std::string &barrier_sn)
|
|
{
|
|
if (!relation.contains(barrier_sn)) return nullptr;
|
|
auto map = relation.at(barrier_sn);
|
|
if (!map.contains("platformScale")) return nullptr;
|
|
auto sn = map.at("platformScale");
|
|
return platformScales.contains(sn) ? platformScales.at(sn) : nullptr;
|
|
}
|
|
|
|
std::shared_ptr<SoundColumn> DeviceHolder::getSoundColumn(const std::string &barrier_sn)
|
|
{
|
|
if (!relation.contains(barrier_sn)) return nullptr;
|
|
auto map = relation.at(barrier_sn);
|
|
if (!map.contains("soundColumn")) return nullptr;
|
|
auto sn = map.at("soundColumn");
|
|
return soundColumns.contains(sn) ? soundColumns.at(sn) : nullptr;
|
|
}
|
|
|
|
std::shared_ptr<Vidicon> DeviceHolder::getVidicon(const std::string &barrier_sn)
|
|
{
|
|
if (!relation.contains(barrier_sn)) return nullptr;
|
|
auto map = relation.at(barrier_sn);
|
|
if (!map.contains("vidicon")) return nullptr;
|
|
auto sn = map.at("vidicon");
|
|
return vidicons.contains(sn) ? vidicons.at(sn) : nullptr;
|
|
}
|
|
|
|
} // zsy
|