|  | #include "machine_context.hpp" | 
|  |  | 
|  | #include <memory> | 
|  |  | 
|  | int main() | 
|  | { | 
|  | static constexpr auto reqDBusPath = "/xyz/openbmc_project/MachineContext"; | 
|  | static constexpr auto reqDBusName = "xyz.openbmc_project.MachineContext"; | 
|  |  | 
|  | /*Note: OpenBMC convention typically has service name = bus name, | 
|  | where the bus name is representative of the underlying hardware. | 
|  |  | 
|  | In the case of MachineContext, the BMC is not gathering data from | 
|  | specific hardware, but is instead parsing device-tree nodes for | 
|  | context about the hardware OpenBMC is running on. | 
|  |  | 
|  | Because the VPD data being parsed is coming from device-tree, | 
|  | the daemon and matching service name reflect that. | 
|  |  | 
|  | Because the parsed data represents 'machine context' data, | 
|  | the bus name and associated path the daemon writes to | 
|  | reflects that instead. | 
|  | */ | 
|  |  | 
|  | sdbusplus::async::context ctx; | 
|  | sdbusplus::server::manager_t manager{ctx, reqDBusPath}; | 
|  |  | 
|  | std::unique_ptr<MachineContext> mc = nullptr; | 
|  | if (MachineContext::keyNodeExists()) | 
|  | { | 
|  | mc = std::make_unique<MachineContext>(ctx, reqDBusPath); | 
|  | mc->populateFromDeviceTree(); | 
|  | } | 
|  |  | 
|  | // NOLINTNEXTLINE(readability-static-accessed-through-instance) | 
|  | ctx.spawn([](sdbusplus::async::context& ctx) -> sdbusplus::async::task<> { | 
|  | ctx.request_name(reqDBusName); | 
|  | co_return; | 
|  | }(ctx)); | 
|  |  | 
|  | ctx.run(); | 
|  |  | 
|  | return 0; | 
|  | }; |