|  | #include "common/transport.hpp" | 
|  |  | 
|  | #include <libpldm/platform.h> | 
|  |  | 
|  | #include <CLI/CLI.hpp> | 
|  | #include <phosphor-logging/lg2.hpp> | 
|  |  | 
|  | #include <array> | 
|  |  | 
|  | PHOSPHOR_LOG2_USING; | 
|  |  | 
|  | int main(int argc, char** argv) | 
|  | { | 
|  | CLI::App app{"Send PLDM command SetStateEffecterStates"}; | 
|  | uint8_t mctpEid{}; | 
|  | app.add_option("-m,--mctp_eid", mctpEid, "MCTP EID")->required(); | 
|  | uint16_t effecterId{}; | 
|  | app.add_option("-e,--effecter", effecterId, "Effecter Id")->required(); | 
|  | uint8_t state{}; | 
|  | app.add_option("-s,--state", state, "New state value")->required(); | 
|  | CLI11_PARSE(app, argc, argv); | 
|  |  | 
|  | // Encode PLDM Request message | 
|  | uint8_t effecterCount = 1; | 
|  | std::array<uint8_t, | 
|  | sizeof(pldm_msg_hdr) + sizeof(effecterId) + | 
|  | sizeof(effecterCount) + sizeof(set_effecter_state_field)> | 
|  | requestMsg{}; | 
|  | auto request = new (requestMsg.data()) pldm_msg; | 
|  | set_effecter_state_field stateField{PLDM_REQUEST_SET, state}; | 
|  | auto rc = encode_set_state_effecter_states_req(0, effecterId, effecterCount, | 
|  | &stateField, request); | 
|  | if (rc != PLDM_SUCCESS) | 
|  | { | 
|  | error( | 
|  | "Failed to encode set state effecter states request message, response code '{RC}'", | 
|  | "RC", lg2::hex, rc); | 
|  | return -1; | 
|  | } | 
|  |  | 
|  | PldmTransport pldmTransport{}; | 
|  |  | 
|  | void* responseMsg = nullptr; | 
|  | size_t responseMsgSize{}; | 
|  | // Send PLDM request msg and wait for response | 
|  | rc = pldmTransport.sendRecvMsg(static_cast<pldm_tid_t>(mctpEid), | 
|  | requestMsg.data(), requestMsg.size(), | 
|  | responseMsg, responseMsgSize); | 
|  | if (0 > rc) | 
|  | { | 
|  | error( | 
|  | "Failed to send message/receive response, response code '{RC}' and error - {ERROR}", | 
|  | "RC", rc, "ERROR", errno); | 
|  | return -1; | 
|  | } | 
|  | pldm_msg* response = new (responseMsg) pldm_msg; | 
|  | info( | 
|  | "Done! Got the response for PLDM send receive message request, response code '{RC}'", | 
|  | "RC", lg2::hex, response->payload[0]); | 
|  | free(responseMsg); | 
|  |  | 
|  | return 0; | 
|  | } |