1*1ed5f7a6SRashmica Gupta #include "common/transport.hpp" 2*1ed5f7a6SRashmica 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 #include <iostream> 106492f524SGeorge Liu 1149cfb138SRiya Dixit PHOSPHOR_LOG2_USING; 1249cfb138SRiya Dixit 139d494bbeSDeepak Kodihalli int main(int argc, char** argv) 149d494bbeSDeepak Kodihalli { 159d494bbeSDeepak Kodihalli CLI::App app{"Send PLDM command SetStateEffecterStates"}; 169d494bbeSDeepak Kodihalli uint8_t mctpEid{}; 179d494bbeSDeepak Kodihalli app.add_option("-m,--mctp_eid", mctpEid, "MCTP EID")->required(); 189d494bbeSDeepak Kodihalli uint16_t effecterId{}; 199d494bbeSDeepak Kodihalli app.add_option("-e,--effecter", effecterId, "Effecter Id")->required(); 209d494bbeSDeepak Kodihalli uint8_t state{}; 219d494bbeSDeepak Kodihalli app.add_option("-s,--state", state, "New state value")->required(); 229d494bbeSDeepak Kodihalli CLI11_PARSE(app, argc, argv); 239d494bbeSDeepak Kodihalli 249d494bbeSDeepak Kodihalli // Encode PLDM Request message 259d494bbeSDeepak Kodihalli uint8_t effecterCount = 1; 269d494bbeSDeepak Kodihalli std::array<uint8_t, sizeof(pldm_msg_hdr) + sizeof(effecterId) + 279d494bbeSDeepak Kodihalli sizeof(effecterCount) + 289d494bbeSDeepak Kodihalli sizeof(set_effecter_state_field)> 299d494bbeSDeepak Kodihalli requestMsg{}; 309d494bbeSDeepak Kodihalli auto request = reinterpret_cast<pldm_msg*>(requestMsg.data()); 319d494bbeSDeepak Kodihalli set_effecter_state_field stateField{PLDM_REQUEST_SET, state}; 329d494bbeSDeepak Kodihalli auto rc = encode_set_state_effecter_states_req(0, effecterId, effecterCount, 339d494bbeSDeepak Kodihalli &stateField, request); 349d494bbeSDeepak Kodihalli if (rc != PLDM_SUCCESS) 359d494bbeSDeepak Kodihalli { 3649cfb138SRiya Dixit error("Message encode failure. PLDM error code = {RC}", "RC", lg2::hex, 3749cfb138SRiya Dixit rc); 389d494bbeSDeepak Kodihalli return -1; 399d494bbeSDeepak Kodihalli } 409d494bbeSDeepak Kodihalli 41*1ed5f7a6SRashmica Gupta PldmTransport pldmTransport{}; 429d494bbeSDeepak Kodihalli 43*1ed5f7a6SRashmica Gupta void* responseMsg = nullptr; 449d494bbeSDeepak Kodihalli size_t responseMsgSize{}; 459d494bbeSDeepak Kodihalli // Send PLDM request msg and wait for response 46*1ed5f7a6SRashmica Gupta rc = pldmTransport.sendRecvMsg(static_cast<pldm_tid_t>(mctpEid), 47*1ed5f7a6SRashmica Gupta requestMsg.data(), requestMsg.size(), 48*1ed5f7a6SRashmica Gupta responseMsg, responseMsgSize); 499d494bbeSDeepak Kodihalli if (0 > rc) 509d494bbeSDeepak Kodihalli { 5149cfb138SRiya Dixit error( 5249cfb138SRiya Dixit "Failed to send message/receive response. RC = {RC}, errno = {ERR}", 5349cfb138SRiya Dixit "RC", rc, "ERR", errno); 549d494bbeSDeepak Kodihalli return -1; 559d494bbeSDeepak Kodihalli } 569d494bbeSDeepak Kodihalli pldm_msg* response = reinterpret_cast<pldm_msg*>(responseMsg); 5749cfb138SRiya Dixit info("Done. PLDM RC = {RC}", "RC", lg2::hex, 5849cfb138SRiya Dixit static_cast<uint16_t>(response->payload[0])); 599d494bbeSDeepak Kodihalli free(responseMsg); 609d494bbeSDeepak Kodihalli 619d494bbeSDeepak Kodihalli return 0; 629d494bbeSDeepak Kodihalli } 63