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