11ed5f7a6SRashmica Gupta #include "common/transport.hpp"
21ed5f7a6SRashmica Gupta
3c453e164SGeorge Liu #include <libpldm/platform.h>
49d494bbeSDeepak Kodihalli
56492f524SGeorge Liu #include <CLI/CLI.hpp>
649cfb138SRiya Dixit #include <phosphor-logging/lg2.hpp>
76492f524SGeorge Liu
86492f524SGeorge Liu #include <array>
96492f524SGeorge Liu
1049cfb138SRiya Dixit PHOSPHOR_LOG2_USING;
1149cfb138SRiya Dixit
main(int argc,char ** argv)129d494bbeSDeepak Kodihalli int main(int argc, char** argv)
139d494bbeSDeepak Kodihalli {
149d494bbeSDeepak Kodihalli CLI::App app{"Send PLDM command SetStateEffecterStates"};
159d494bbeSDeepak Kodihalli uint8_t mctpEid{};
169d494bbeSDeepak Kodihalli app.add_option("-m,--mctp_eid", mctpEid, "MCTP EID")->required();
179d494bbeSDeepak Kodihalli uint16_t effecterId{};
189d494bbeSDeepak Kodihalli app.add_option("-e,--effecter", effecterId, "Effecter Id")->required();
199d494bbeSDeepak Kodihalli uint8_t state{};
209d494bbeSDeepak Kodihalli app.add_option("-s,--state", state, "New state value")->required();
219d494bbeSDeepak Kodihalli CLI11_PARSE(app, argc, argv);
229d494bbeSDeepak Kodihalli
239d494bbeSDeepak Kodihalli // Encode PLDM Request message
249d494bbeSDeepak Kodihalli uint8_t effecterCount = 1;
259d494bbeSDeepak Kodihalli std::array<uint8_t, sizeof(pldm_msg_hdr) + sizeof(effecterId) +
269d494bbeSDeepak Kodihalli sizeof(effecterCount) +
279d494bbeSDeepak Kodihalli sizeof(set_effecter_state_field)>
289d494bbeSDeepak Kodihalli requestMsg{};
299d494bbeSDeepak Kodihalli auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
309d494bbeSDeepak Kodihalli set_effecter_state_field stateField{PLDM_REQUEST_SET, state};
319d494bbeSDeepak Kodihalli auto rc = encode_set_state_effecter_states_req(0, effecterId, effecterCount,
329d494bbeSDeepak Kodihalli &stateField, request);
339d494bbeSDeepak Kodihalli if (rc != PLDM_SUCCESS)
349d494bbeSDeepak Kodihalli {
35087a751fSRiya Dixit error(
36087a751fSRiya Dixit "Failed to encode set state effecter states request message, response code '{RC}'",
37087a751fSRiya Dixit "RC", lg2::hex, rc);
389d494bbeSDeepak Kodihalli return -1;
399d494bbeSDeepak Kodihalli }
409d494bbeSDeepak Kodihalli
411ed5f7a6SRashmica Gupta PldmTransport pldmTransport{};
429d494bbeSDeepak Kodihalli
431ed5f7a6SRashmica Gupta void* responseMsg = nullptr;
449d494bbeSDeepak Kodihalli size_t responseMsgSize{};
459d494bbeSDeepak Kodihalli // Send PLDM request msg and wait for response
461ed5f7a6SRashmica Gupta rc = pldmTransport.sendRecvMsg(static_cast<pldm_tid_t>(mctpEid),
471ed5f7a6SRashmica Gupta requestMsg.data(), requestMsg.size(),
481ed5f7a6SRashmica Gupta responseMsg, responseMsgSize);
499d494bbeSDeepak Kodihalli if (0 > rc)
509d494bbeSDeepak Kodihalli {
5149cfb138SRiya Dixit error(
52087a751fSRiya Dixit "Failed to send message/receive response, response code '{RC}' and error - {ERROR}",
53087a751fSRiya Dixit "RC", rc, "ERROR", errno);
549d494bbeSDeepak Kodihalli return -1;
559d494bbeSDeepak Kodihalli }
569d494bbeSDeepak Kodihalli pldm_msg* response = reinterpret_cast<pldm_msg*>(responseMsg);
57087a751fSRiya Dixit info(
58087a751fSRiya Dixit "Done! Got the response for PLDM send receive message request, response code '{RC}'",
59*1e5c81e0SRiya Dixit "RC", lg2::hex, response->payload[0]);
609d494bbeSDeepak Kodihalli free(responseMsg);
619d494bbeSDeepak Kodihalli
629d494bbeSDeepak Kodihalli return 0;
639d494bbeSDeepak Kodihalli }
64