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