blob: 4243f4c447100f08da0cd0eda63042db92507140 [file] [log] [blame]
Rashmica Gupta1ed5f7a2023-05-22 13:56:42 +10001#include "common/transport.hpp"
2
George Liuc453e162022-12-21 17:16:23 +08003#include <libpldm/platform.h>
Deepak Kodihalli9d494bb2019-11-05 01:28:43 -06004
George Liu6492f522020-06-16 10:34:05 +08005#include <CLI/CLI.hpp>
Riya Dixit49cfb132023-03-02 04:26:53 -06006#include <phosphor-logging/lg2.hpp>
George Liu6492f522020-06-16 10:34:05 +08007
8#include <array>
9#include <iostream>
10
Riya Dixit49cfb132023-03-02 04:26:53 -060011PHOSPHOR_LOG2_USING;
12
Deepak Kodihalli9d494bb2019-11-05 01:28:43 -060013int main(int argc, char** argv)
14{
15 CLI::App app{"Send PLDM command SetStateEffecterStates"};
16 uint8_t mctpEid{};
17 app.add_option("-m,--mctp_eid", mctpEid, "MCTP EID")->required();
18 uint16_t effecterId{};
19 app.add_option("-e,--effecter", effecterId, "Effecter Id")->required();
20 uint8_t state{};
21 app.add_option("-s,--state", state, "New state value")->required();
22 CLI11_PARSE(app, argc, argv);
23
24 // Encode PLDM Request message
25 uint8_t effecterCount = 1;
26 std::array<uint8_t, sizeof(pldm_msg_hdr) + sizeof(effecterId) +
27 sizeof(effecterCount) +
28 sizeof(set_effecter_state_field)>
29 requestMsg{};
30 auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
31 set_effecter_state_field stateField{PLDM_REQUEST_SET, state};
32 auto rc = encode_set_state_effecter_states_req(0, effecterId, effecterCount,
33 &stateField, request);
34 if (rc != PLDM_SUCCESS)
35 {
Riya Dixit49cfb132023-03-02 04:26:53 -060036 error("Message encode failure. PLDM error code = {RC}", "RC", lg2::hex,
37 rc);
Deepak Kodihalli9d494bb2019-11-05 01:28:43 -060038 return -1;
39 }
40
Rashmica Gupta1ed5f7a2023-05-22 13:56:42 +100041 PldmTransport pldmTransport{};
Deepak Kodihalli9d494bb2019-11-05 01:28:43 -060042
Rashmica Gupta1ed5f7a2023-05-22 13:56:42 +100043 void* responseMsg = nullptr;
Deepak Kodihalli9d494bb2019-11-05 01:28:43 -060044 size_t responseMsgSize{};
45 // Send PLDM request msg and wait for response
Rashmica Gupta1ed5f7a2023-05-22 13:56:42 +100046 rc = pldmTransport.sendRecvMsg(static_cast<pldm_tid_t>(mctpEid),
47 requestMsg.data(), requestMsg.size(),
48 responseMsg, responseMsgSize);
Deepak Kodihalli9d494bb2019-11-05 01:28:43 -060049 if (0 > rc)
50 {
Riya Dixit49cfb132023-03-02 04:26:53 -060051 error(
52 "Failed to send message/receive response. RC = {RC}, errno = {ERR}",
53 "RC", rc, "ERR", errno);
Deepak Kodihalli9d494bb2019-11-05 01:28:43 -060054 return -1;
55 }
56 pldm_msg* response = reinterpret_cast<pldm_msg*>(responseMsg);
Riya Dixit49cfb132023-03-02 04:26:53 -060057 info("Done. PLDM RC = {RC}", "RC", lg2::hex,
58 static_cast<uint16_t>(response->payload[0]));
Deepak Kodihalli9d494bb2019-11-05 01:28:43 -060059 free(responseMsg);
60
61 return 0;
62}