1 #include "custom_dbus.hpp"
2
3 namespace pldm
4 {
5 namespace dbus
6 {
setLocationCode(const std::string & path,std::string value)7 void CustomDBus::setLocationCode(const std::string& path, std::string value)
8 {
9 if (!location.contains(path))
10 {
11 location.emplace(path,
12 std::make_unique<LocationIntf>(
13 pldm::utils::DBusHandler::getBus(), path.c_str()));
14 }
15
16 location.at(path)->locationCode(value);
17 }
18
getLocationCode(const std::string & path) const19 std::optional<std::string> CustomDBus::getLocationCode(
20 const std::string& path) const
21 {
22 if (location.contains(path))
23 {
24 return location.at(path)->locationCode();
25 }
26
27 return std::nullopt;
28 }
29
implementCpuCoreInterface(const std::string & path)30 void CustomDBus::implementCpuCoreInterface(const std::string& path)
31 {
32 if (!cpuCore.contains(path))
33 {
34 cpuCore.emplace(path, std::make_unique<CPUCore>(
35 pldm::utils::DBusHandler::getBus(), path));
36 }
37 }
38
setMicroCode(const std::string & path,uint32_t value)39 void CustomDBus::setMicroCode(const std::string& path, uint32_t value)
40 {
41 if (!cpuCore.contains(path))
42 {
43 cpuCore.emplace(path, std::make_unique<CPUCore>(
44 pldm::utils::DBusHandler::getBus(), path));
45 }
46 cpuCore.at(path)->microcode(value);
47 }
48
getMicroCode(const std::string & path) const49 std::optional<uint32_t> CustomDBus::getMicroCode(const std::string& path) const
50 {
51 if (cpuCore.contains(path))
52 {
53 return cpuCore.at(path)->microcode();
54 }
55
56 return std::nullopt;
57 }
58
implementPCIeSlotInterface(const std::string & path)59 void CustomDBus::implementPCIeSlotInterface(const std::string& path)
60 {
61 if (!pcieSlot.contains(path))
62 {
63 pcieSlot.emplace(path, std::make_unique<PCIeSlot>(
64 pldm::utils::DBusHandler::getBus(), path));
65 }
66 }
67
setSlotType(const std::string & path,const std::string & slotType)68 void CustomDBus::setSlotType(const std::string& path,
69 const std::string& slotType)
70 {
71 auto typeOfSlot =
72 pldm::dbus::PCIeSlot::convertSlotTypesFromString(slotType);
73 if (pcieSlot.contains(path))
74 {
75 pcieSlot.at(path)->slotType(typeOfSlot);
76 }
77 }
78
implementPCIeDeviceInterface(const std::string & path)79 void CustomDBus::implementPCIeDeviceInterface(const std::string& path)
80 {
81 if (!pcieDevice.contains(path))
82 {
83 pcieDevice.emplace(path, std::make_unique<PCIeDevice>(
84 pldm::utils::DBusHandler::getBus(), path));
85 }
86 }
87
setPCIeDeviceProps(const std::string & path,size_t lanesInUse,const std::string & value)88 void CustomDBus::setPCIeDeviceProps(const std::string& path, size_t lanesInUse,
89 const std::string& value)
90 {
91 Generations generationsInUse =
92 pldm::dbus::PCIeSlot::convertGenerationsFromString(value);
93
94 if (pcieDevice.contains(path))
95 {
96 pcieDevice.at(path)->lanesInUse(lanesInUse);
97 pcieDevice.at(path)->generationInUse(generationsInUse);
98 }
99 }
100
implementCableInterface(const std::string & path)101 void CustomDBus::implementCableInterface(const std::string& path)
102 {
103 if (!cable.contains(path))
104 {
105 cable.emplace(path, std::make_unique<Cable>(
106 pldm::utils::DBusHandler::getBus(), path));
107 }
108 }
109
setCableAttributes(const std::string & path,double length,const std::string & cableDescription)110 void CustomDBus::setCableAttributes(const std::string& path, double length,
111 const std::string& cableDescription)
112 {
113 if (cable.contains(path))
114 {
115 cable.at(path)->length(length);
116 cable.at(path)->cableTypeDescription(cableDescription);
117 }
118 }
119
implementMotherboardInterface(const std::string & path)120 void CustomDBus::implementMotherboardInterface(const std::string& path)
121 {
122 if (!motherboard.contains(path))
123 {
124 motherboard.emplace(path,
125 std::make_unique<Motherboard>(
126 pldm::utils::DBusHandler::getBus(), path));
127 }
128 }
129
implementFabricAdapter(const std::string & path)130 void CustomDBus::implementFabricAdapter(const std::string& path)
131 {
132 if (!fabricAdapter.contains(path))
133 {
134 fabricAdapter.emplace(
135 path, std::make_unique<FabricAdapter>(
136 pldm::utils::DBusHandler::getBus(), path.c_str()));
137 }
138 }
139
implementBoard(const std::string & path)140 void CustomDBus::implementBoard(const std::string& path)
141 {
142 if (!board.contains(path))
143 {
144 board.emplace(path,
145 std::make_unique<Board>(
146 pldm::utils::DBusHandler::getBus(), path.c_str()));
147 }
148 }
149
implementPowerSupplyInterface(const std::string & path)150 void CustomDBus::implementPowerSupplyInterface(const std::string& path)
151 {
152 if (!powersupply.contains(path))
153 {
154 powersupply.emplace(
155 path, std::make_unique<PowerSupply>(
156 pldm::utils::DBusHandler::getBus(), path.c_str()));
157 }
158 }
159
implementFanInterface(const std::string & path)160 void CustomDBus::implementFanInterface(const std::string& path)
161 {
162 if (!fan.contains(path))
163 {
164 fan.emplace(path,
165 std::make_unique<Fan>(pldm::utils::DBusHandler::getBus(),
166 path.c_str()));
167 }
168 }
169
implementConnecterInterface(const std::string & path)170 void CustomDBus::implementConnecterInterface(const std::string& path)
171 {
172 if (!connector.contains(path))
173 {
174 connector.emplace(
175 path, std::make_unique<Connector>(
176 pldm::utils::DBusHandler::getBus(), path.c_str()));
177 }
178 }
179
implementChassisInterface(const std::string & path)180 void CustomDBus::implementChassisInterface(const std::string& path)
181 {
182 if (!chassis.contains(path))
183 {
184 chassis.emplace(path,
185 std::make_unique<ItemChassis>(
186 pldm::utils::DBusHandler::getBus(), path.c_str()));
187 }
188 }
189
implementAssetInterface(const std::string & path)190 void CustomDBus::implementAssetInterface(const std::string& path)
191 {
192 if (!asset.contains(path))
193 {
194 asset.emplace(path, std::make_unique<Asset>(
195 pldm::utils::DBusHandler::getBus(), path));
196 }
197 }
198
setAvailabilityState(const std::string & path,const bool & state)199 void CustomDBus::setAvailabilityState(const std::string& path,
200 const bool& state)
201 {
202 if (!availabilityState.contains(path))
203 {
204 availabilityState.emplace(
205 path, std::make_unique<Availability>(
206 pldm::utils::DBusHandler::getBus(), path.c_str()));
207 }
208
209 availabilityState.at(path)->available(state);
210 }
211
updateItemPresentStatus(const std::string & path,bool isPresent)212 void CustomDBus::updateItemPresentStatus(const std::string& path,
213 bool isPresent)
214 {
215 if (!presentStatus.contains(path))
216 {
217 presentStatus.emplace(
218 path, std::make_unique<InventoryItem>(
219 pldm::utils::DBusHandler::getBus(), path.c_str()));
220 std::filesystem::path ObjectPath(path);
221
222 // Hardcode the present dbus property to true
223 presentStatus.at(path)->present(true);
224
225 // Set the pretty name dbus property to the filename
226 // form the dbus path object
227 presentStatus.at(path)->prettyName(ObjectPath.filename());
228 }
229 else
230 {
231 // object is already created
232 presentStatus.at(path)->present(isPresent);
233 }
234 }
235
implementPanelInterface(const std::string & path)236 void CustomDBus::implementPanelInterface(const std::string& path)
237 {
238 if (!panel.contains(path))
239 {
240 panel.emplace(path,
241 std::make_unique<Panel>(
242 pldm::utils::DBusHandler::getBus(), path.c_str()));
243 }
244 }
245
implementVRMInterface(const std::string & path)246 void CustomDBus::implementVRMInterface(const std::string& path)
247 {
248 if (!vrm.contains(path))
249 {
250 vrm.emplace(path,
251 std::make_unique<VRM>(pldm::utils::DBusHandler::getBus(),
252 path.c_str()));
253 }
254 }
255
256 } // namespace dbus
257 } // namespace pldm
258