1 #include "eeprom_device_version.hpp" 2 3 #include "pt5161l/pt5161l.hpp" 4 5 #include <functional> 6 #include <unordered_map> 7 8 using ProviderFactory = std::function<std::unique_ptr<DeviceVersion>( 9 const std::string&, const uint16_t, const uint8_t)>; 10 11 template <typename ProviderType> 12 std::unique_ptr<DeviceVersion> createProvider( 13 const std::string& chipModel, const uint16_t bus, const uint8_t address) 14 { 15 return std::make_unique<ProviderType>(chipModel, bus, address); 16 } 17 18 static const std::unordered_map<std::string, ProviderFactory> providerMap = { 19 {"PT5161L", createProvider<PT5161LDeviceVersion>}}; 20 21 std::unique_ptr<DeviceVersion> getVersionProvider( 22 const std::string& chipModel, const uint16_t bus, const uint8_t address) 23 { 24 auto it = providerMap.find(chipModel); 25 if (it != providerMap.end()) 26 { 27 return it->second(chipModel, bus, address); 28 } 29 30 return nullptr; 31 } 32