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