| #include "eeprom_device_version.hpp" |
| |
| #include "pt5161l/pt5161l.hpp" |
| |
| #include <functional> |
| #include <unordered_map> |
| |
| using ProviderFactory = std::function<std::unique_ptr<DeviceVersion>( |
| const std::string&, const uint16_t, const uint8_t)>; |
| |
| template <typename ProviderType> |
| std::unique_ptr<DeviceVersion> createProvider( |
| const std::string& chipModel, const uint16_t bus, const uint8_t address) |
| { |
| return std::make_unique<ProviderType>(chipModel, bus, address); |
| } |
| |
| static const std::unordered_map<std::string, ProviderFactory> providerMap = { |
| {"PT5161L", createProvider<PT5161LDeviceVersion>}}; |
| |
| std::unique_ptr<DeviceVersion> getVersionProvider( |
| const std::string& chipModel, const uint16_t bus, const uint8_t address) |
| { |
| auto it = providerMap.find(chipModel); |
| if (it != providerMap.end()) |
| { |
| return it->second(chipModel, bus, address); |
| } |
| |
| return nullptr; |
| } |