blob: f98ff51f0b80d5c18ba1c68e197754e4a96bfd8a [file] [log] [blame]
Daniel Hsuf6470b52025-02-26 15:03:47 +08001#include "cpld_interface.hpp"
2
Daniel Hsuf6470b52025-02-26 15:03:47 +08003namespace phosphor::software::cpld
4{
5
6CPLDFactory& CPLDFactory::instance()
7{
8 static CPLDFactory factory;
9 return factory;
10}
11
Daniel Hsu61e12672025-06-12 19:20:46 +080012void CPLDFactory::registerCPLD(const std::string& chipType, Creator creator)
Daniel Hsuf6470b52025-02-26 15:03:47 +080013{
Daniel Hsu61e12672025-06-12 19:20:46 +080014 creators[chipType] = std::move(creator);
Daniel Hsuf6470b52025-02-26 15:03:47 +080015}
16
17std::unique_ptr<CPLDInterface> CPLDFactory::create(
Daniel Hsu61e12672025-06-12 19:20:46 +080018 const std::string& chipType, sdbusplus::async::context& ctx,
Daniel Hsuf6470b52025-02-26 15:03:47 +080019 const std::string& chipName, uint16_t bus, uint8_t address) const
20{
Daniel Hsu61e12672025-06-12 19:20:46 +080021 auto it = creators.find(chipType);
Daniel Hsuf6470b52025-02-26 15:03:47 +080022 if (it != creators.end())
23 {
24 return (it->second)(ctx, chipName, bus, address);
25 }
26 return nullptr;
27}
28
29std::vector<std::string> CPLDFactory::getConfigs()
30{
31 std::vector<std::string> configs;
32 configs.reserve(creators.size());
33
34 std::transform(creators.begin(), creators.end(),
35 std::back_inserter(configs),
36 [](const auto& pair) { return pair.first; });
37
38 return configs;
39}
40
41} // namespace phosphor::software::cpld