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
RawOp(const char * type,const char * name,CLI::App * app)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 }
createRequestMsg()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
parseResponseMsg(pldm_msg *,size_t)48 void parseResponseMsg(pldm_msg* /* responsePtr */,
49 size_t /* payloadLength */) override
50 {}
51
52 private:
53 std::vector<uint8_t> rawData;
54 };
55
registerCommand(CLI::App & app)56 void registerCommand(CLI::App& app)
57 {
58 auto raw =
59 app.add_subcommand("raw", "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
main(int argc,char ** argv)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