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