blob: fa0e23844b510075998d227bf8e5f74b1a8cade6 [file] [log] [blame]
Kevin Tung994a77f2024-12-23 17:48:56 +08001#include "eeprom_device_version.hpp"
2
3#include "pt5161l/pt5161l.hpp"
4
5#include <functional>
6#include <unordered_map>
7
8using ProviderFactory = std::function<std::unique_ptr<DeviceVersion>(
9 const std::string&, const uint16_t, const uint8_t)>;
10
11template <typename ProviderType>
12std::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
18static const std::unordered_map<std::string, ProviderFactory> providerMap = {
19 {"PT5161L", createProvider<PT5161LDeviceVersion>}};
20
21std::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}