xref: /openbmc/pldm/pldmtool/pldmtool.cpp (revision f7f5da97f4172ec9b4528c9539f4d0e1eb00ae8a)
1*f7f5da97SDeepak Kodihalli #include "pldm_base_cmd.hpp"
2*f7f5da97SDeepak Kodihalli #include "pldm_bios_cmd.hpp"
3*f7f5da97SDeepak Kodihalli #include "pldm_cmd_helper.hpp"
4*f7f5da97SDeepak Kodihalli #include "pldm_fru_cmd.hpp"
5*f7f5da97SDeepak Kodihalli #include "pldm_platform_cmd.hpp"
6*f7f5da97SDeepak Kodihalli #include "pldmtool/oem/ibm/pldm_host_cmd.hpp"
7*f7f5da97SDeepak Kodihalli 
8*f7f5da97SDeepak Kodihalli #include <CLI/CLI.hpp>
9*f7f5da97SDeepak Kodihalli 
10*f7f5da97SDeepak Kodihalli namespace pldmtool
11*f7f5da97SDeepak Kodihalli {
12*f7f5da97SDeepak Kodihalli 
13*f7f5da97SDeepak Kodihalli namespace raw
14*f7f5da97SDeepak Kodihalli {
15*f7f5da97SDeepak Kodihalli 
16*f7f5da97SDeepak Kodihalli using namespace pldmtool::helper;
17*f7f5da97SDeepak Kodihalli 
18*f7f5da97SDeepak Kodihalli namespace
19*f7f5da97SDeepak Kodihalli {
20*f7f5da97SDeepak Kodihalli std::vector<std::unique_ptr<CommandInterface>> commands;
21*f7f5da97SDeepak Kodihalli }
22*f7f5da97SDeepak Kodihalli 
23*f7f5da97SDeepak Kodihalli class RawOp : public CommandInterface
24*f7f5da97SDeepak Kodihalli {
25*f7f5da97SDeepak Kodihalli   public:
26*f7f5da97SDeepak Kodihalli     ~RawOp() = default;
27*f7f5da97SDeepak Kodihalli     RawOp() = delete;
28*f7f5da97SDeepak Kodihalli     RawOp(const RawOp&) = delete;
29*f7f5da97SDeepak Kodihalli     RawOp(RawOp&&) = default;
30*f7f5da97SDeepak Kodihalli     RawOp& operator=(const RawOp&) = delete;
31*f7f5da97SDeepak Kodihalli     RawOp& operator=(RawOp&&) = default;
32*f7f5da97SDeepak Kodihalli 
33*f7f5da97SDeepak Kodihalli     explicit RawOp(const char* type, const char* name, CLI::App* app) :
34*f7f5da97SDeepak Kodihalli         CommandInterface(type, name, app)
35*f7f5da97SDeepak Kodihalli     {
36*f7f5da97SDeepak Kodihalli         app->add_option("-d,--data", rawData, "raw data")
37*f7f5da97SDeepak Kodihalli             ->required()
38*f7f5da97SDeepak Kodihalli             ->expected(-3);
39*f7f5da97SDeepak Kodihalli     }
40*f7f5da97SDeepak Kodihalli     std::pair<int, std::vector<uint8_t>> createRequestMsg() override
41*f7f5da97SDeepak Kodihalli 
42*f7f5da97SDeepak Kodihalli     {
43*f7f5da97SDeepak Kodihalli         return {PLDM_SUCCESS, rawData};
44*f7f5da97SDeepak Kodihalli     }
45*f7f5da97SDeepak Kodihalli 
46*f7f5da97SDeepak Kodihalli     void parseResponseMsg(pldm_msg* /* responsePtr */,
47*f7f5da97SDeepak Kodihalli                           size_t /* payloadLength */) override
48*f7f5da97SDeepak Kodihalli     {}
49*f7f5da97SDeepak Kodihalli 
50*f7f5da97SDeepak Kodihalli   private:
51*f7f5da97SDeepak Kodihalli     std::vector<uint8_t> rawData;
52*f7f5da97SDeepak Kodihalli };
53*f7f5da97SDeepak Kodihalli 
54*f7f5da97SDeepak Kodihalli void registerCommand(CLI::App& app)
55*f7f5da97SDeepak Kodihalli {
56*f7f5da97SDeepak Kodihalli     auto raw =
57*f7f5da97SDeepak Kodihalli         app.add_subcommand("raw", "send a raw request and print response");
58*f7f5da97SDeepak Kodihalli     commands.push_back(std::make_unique<RawOp>("raw", "raw", raw));
59*f7f5da97SDeepak Kodihalli }
60*f7f5da97SDeepak Kodihalli 
61*f7f5da97SDeepak Kodihalli } // namespace raw
62*f7f5da97SDeepak Kodihalli } // namespace pldmtool
63*f7f5da97SDeepak Kodihalli 
64*f7f5da97SDeepak Kodihalli int main(int argc, char** argv)
65*f7f5da97SDeepak Kodihalli {
66*f7f5da97SDeepak Kodihalli 
67*f7f5da97SDeepak Kodihalli     CLI::App app{"PLDM requester tool for OpenBMC"};
68*f7f5da97SDeepak Kodihalli     app.require_subcommand(1)->ignore_case();
69*f7f5da97SDeepak Kodihalli 
70*f7f5da97SDeepak Kodihalli     pldmtool::raw::registerCommand(app);
71*f7f5da97SDeepak Kodihalli     pldmtool::base::registerCommand(app);
72*f7f5da97SDeepak Kodihalli     pldmtool::bios::registerCommand(app);
73*f7f5da97SDeepak Kodihalli     pldmtool::platform::registerCommand(app);
74*f7f5da97SDeepak Kodihalli     pldmtool::fru::registerCommand(app);
75*f7f5da97SDeepak Kodihalli 
76*f7f5da97SDeepak Kodihalli #ifdef OEM_IBM
77*f7f5da97SDeepak Kodihalli     pldmtool::oem_ibm::power_host::registerCommand(app);
78*f7f5da97SDeepak Kodihalli #endif
79*f7f5da97SDeepak Kodihalli 
80*f7f5da97SDeepak Kodihalli     CLI11_PARSE(app, argc, argv);
81*f7f5da97SDeepak Kodihalli     return 0;
82*f7f5da97SDeepak Kodihalli }
83