blob: 54287d5b724a342d2502d8364c14486e907be6c2 [file] [log] [blame]
Lakshminarayana R. Kammath27693a42019-06-24 00:51:47 -05001#include "handler.hpp"
2
3#include <CLI/CLI.hpp>
4
5int main(int argc, char** argv)
6{
7
8 CLI::App app{"PLDM requester tool for OpenBMC"};
9
10 // TODO: To enable it later
11 // bool verbose_flag = false;
12 // app.add_flag("-v, --verbose", verbose_flag, "Output debug logs ");
George Liu15af8582019-11-07 17:42:39 +080013 std::vector<std::string> rawCmd{};
14 app.add_option("-r, --raw", rawCmd,
15 "Send a RAW PLDM request and print response");
16
17 auto base = app.add_subcommand("BASE", "PLDM Command Type = BASE");
Lakshminarayana R. Kammath27693a42019-06-24 00:51:47 -050018 std::vector<std::string> args{};
George Liu15af8582019-11-07 17:42:39 +080019 base->add_option("-c, --command", args,
20 "PLDM request command \n"
21 "[GetPLDMTypes] Get PLDM Type \n"
22 "[GetPLDMVersion] Get PLDM Version");
Lakshminarayana R. Kammath58229b22019-08-09 06:30:04 -050023
George Liu15af8582019-11-07 17:42:39 +080024 auto bios = app.add_subcommand("BIOS", "PLDM Command Type = BIOS");
25 bios->add_option("-c, --command", args, "PLDM request command");
Lakshminarayana R. Kammath27693a42019-06-24 00:51:47 -050026
George Liu15af8582019-11-07 17:42:39 +080027 auto oem = app.add_subcommand("OEM", "PLDM Command Type = OEM");
28 oem->add_option("-c, --command", args, "PLDM request command");
Lakshminarayana R. Kammath27693a42019-06-24 00:51:47 -050029
30 CLI11_PARSE(app, argc, argv);
31
Lakshminarayana R. Kammath58229b22019-08-09 06:30:04 -050032 std::string cmdName;
Lakshminarayana R. Kammath27693a42019-06-24 00:51:47 -050033 int rc = 0;
34
George Liu15af8582019-11-07 17:42:39 +080035 if (argc < 2)
36 {
37 std::cerr << "Run pldmtool --help for more information" << std::endl;
38 return -1;
39 }
40
41 if (memcmp(argv[1], "--raw", strlen(argv[1])) != 0 &&
42 memcmp(argv[1], "-r", strlen(argv[1])) != 0)
Lakshminarayana R. Kammath58229b22019-08-09 06:30:04 -050043 {
44 // Parse args to program
George Liu15af8582019-11-07 17:42:39 +080045 if (args.size() == 0)
46 {
47 std::cerr << "Run pldmtool --help for more information"
48 << std::endl;
49 return -1;
50 }
Lakshminarayana R. Kammath58229b22019-08-09 06:30:04 -050051 cmdName = args[0];
52 }
53 else
54 {
George Liu15af8582019-11-07 17:42:39 +080055 if (rawCmd.size() == 0)
56 {
57 std::cerr << "Run pldmtool --help for more information"
58 << std::endl;
59 return -1;
60 }
Lakshminarayana R. Kammath58229b22019-08-09 06:30:04 -050061
62 // loop through the remaining argument list
George Liu15af8582019-11-07 17:42:39 +080063 for (auto&& item : rawCmd)
Lakshminarayana R. Kammath58229b22019-08-09 06:30:04 -050064 {
65
66 if (item[0] == '0' && (item[1] == 'x' || item[1] == 'X'))
67 {
68
69 // Erase 0x from input
70 item.erase(0, 2);
71
72 // Check for hex input value validity
73 if (std::all_of(item.begin(), item.end(), ::isxdigit))
74 {
75
76 // Parse args to program
77 cmdName = "HandleRawOp";
78 }
79 else
80 {
81 std::cerr << item << " contains non hex digits. Re-enter"
82 << std::endl;
George Liu15af8582019-11-07 17:42:39 +080083 return -1;
Lakshminarayana R. Kammath58229b22019-08-09 06:30:04 -050084 }
85 }
86 else
87 {
George Liu15af8582019-11-07 17:42:39 +080088 std::cerr << item << " Input hex value starting with 0x "
Lakshminarayana R. Kammath58229b22019-08-09 06:30:04 -050089 << std::endl;
George Liu15af8582019-11-07 17:42:39 +080090 return -1;
Lakshminarayana R. Kammath58229b22019-08-09 06:30:04 -050091 }
92 }
George Liu15af8582019-11-07 17:42:39 +080093 args = rawCmd;
Lakshminarayana R. Kammath58229b22019-08-09 06:30:04 -050094 }
95
96 Handler handler;
Lakshminarayana R. Kammath27693a42019-06-24 00:51:47 -050097 try
98 {
99 handler.dispatcher.at(cmdName)(std::move(args));
100 }
101 catch (const std::out_of_range& e)
102 {
103 std::cerr << cmdName << " is not supported!" << std::endl;
George Liu15af8582019-11-07 17:42:39 +0800104 return -1;
Lakshminarayana R. Kammath27693a42019-06-24 00:51:47 -0500105 }
George Liu15af8582019-11-07 17:42:39 +0800106
Lakshminarayana R. Kammath58229b22019-08-09 06:30:04 -0500107 return rc;
Lakshminarayana R. Kammath27693a42019-06-24 00:51:47 -0500108}