xref: /openbmc/phosphor-bmc-code-mgmt/cpld/cpld.hpp (revision f6470b5e95618fa0eeb8b03b37c53a311dfc1ef3)
1 #pragma once
2 
3 #include "common/include/device.hpp"
4 #include "common/include/software_manager.hpp"
5 #include "cpld_interface.hpp"
6 
7 #include <phosphor-logging/lg2.hpp>
8 #include <sdbusplus/async/context.hpp>
9 
10 PHOSPHOR_LOG2_USING;
11 
12 namespace ManagerInf = phosphor::software::manager;
13 
14 namespace phosphor::software::cpld
15 {
16 
17 class CPLDDevice : public Device
18 {
19   public:
CPLDDevice(sdbusplus::async::context & ctx,const std::string & chiptype,const std::string & chipname,const uint16_t & bus,const uint8_t & address,SoftwareConfig & config,ManagerInf::SoftwareManager * parent)20     CPLDDevice(sdbusplus::async::context& ctx, const std::string& chiptype,
21                const std::string& chipname, const uint16_t& bus,
22                const uint8_t& address, SoftwareConfig& config,
23                ManagerInf::SoftwareManager* parent) :
24         Device(ctx, config, parent,
25                {RequestedApplyTimes::Immediate, RequestedApplyTimes::OnReset}),
26         cpldInterface(CPLDFactory::instance().create(chiptype, ctx, chipname,
27                                                      bus, address))
28     {}
29 
30     using Device::softwareCurrent;
31     sdbusplus::async::task<bool> updateDevice(const uint8_t* image,
32                                               size_t image_size) final;
33     sdbusplus::async::task<bool> getVersion(std::string& version);
34 
35   private:
36     std::unique_ptr<CPLDInterface> cpldInterface;
37 };
38 
39 } // namespace phosphor::software::cpld
40