blob: cfd72d48b71ebbbedb0fdb589d6bf5effe24b8f9 [file] [log] [blame]
Sampa Misra0db1dfa2019-03-19 00:15:31 -05001#include <endian.h>
2#include <string.h>
3
4#include "platform.h"
5
6int encode_set_state_effecter_states_resp(uint8_t instance_id,
7 uint8_t completion_code,
8 struct pldm_msg *msg)
9{
10 struct pldm_header_info header = {0};
11 int rc = PLDM_SUCCESS;
12
vkaverapa6575b82019-04-03 05:33:52 -050013 msg->payload[0] = completion_code;
Sampa Misra0db1dfa2019-03-19 00:15:31 -050014
15 header.msg_type = PLDM_RESPONSE;
16 header.instance = instance_id;
17 header.pldm_type = PLDM_PLATFORM;
18 header.command = PLDM_SET_STATE_EFFECTER_STATES;
19
20 rc = pack_pldm_header(&header, &(msg->hdr));
21
22 return rc;
23}
24
vkaverap98a2c192019-04-03 05:33:52 -050025int encode_set_state_effecter_states_req(uint8_t instance_id,
26 uint16_t effecter_id,
27 uint8_t comp_effecter_count,
28 set_effecter_state_field *field,
29 struct pldm_msg *msg)
30{
31 struct pldm_header_info header = {0};
32 int rc = PLDM_SUCCESS;
33
34 header.msg_type = PLDM_REQUEST;
35 header.instance = instance_id;
36 header.pldm_type = PLDM_PLATFORM;
37 header.command = PLDM_SET_STATE_EFFECTER_STATES;
38
39 if ((rc = pack_pldm_header(&header, &(msg->hdr))) > PLDM_SUCCESS) {
40 return rc;
41 }
42
43 if (comp_effecter_count < 0x1 || comp_effecter_count > 0x8) {
44 return PLDM_ERROR_INVALID_DATA;
45 }
46
vkaverapa6575b82019-04-03 05:33:52 -050047 uint8_t *encoded_msg = msg->payload;
vkaverap98a2c192019-04-03 05:33:52 -050048 effecter_id = htole16(effecter_id);
49 memcpy(encoded_msg, &effecter_id, sizeof(effecter_id));
50 encoded_msg += sizeof(effecter_id);
51 memcpy(encoded_msg, &comp_effecter_count, sizeof(comp_effecter_count));
52 encoded_msg += sizeof(comp_effecter_count);
53 memcpy(encoded_msg, field,
54 (sizeof(set_effecter_state_field) * comp_effecter_count));
55
56 return PLDM_SUCCESS;
57}
58
vkaverapa6575b82019-04-03 05:33:52 -050059int decode_set_state_effecter_states_resp(const uint8_t *msg,
60 size_t payload_length,
vkaverap98a2c192019-04-03 05:33:52 -050061 uint8_t *completion_code)
62{
63 if (msg == NULL || completion_code == NULL) {
64 return PLDM_ERROR_INVALID_DATA;
65 }
66
vkaverapa6575b82019-04-03 05:33:52 -050067 if (payload_length > PLDM_SET_STATE_EFFECTER_STATES_RESP_BYTES) {
68 return PLDM_ERROR_INVALID_LENGTH;
69 }
70
71 *completion_code = msg[0];
vkaverap98a2c192019-04-03 05:33:52 -050072
73 return PLDM_SUCCESS;
74}
75
vkaverapa6575b82019-04-03 05:33:52 -050076int decode_set_state_effecter_states_req(const uint8_t *msg,
77 size_t payload_length,
Sampa Misra0db1dfa2019-03-19 00:15:31 -050078 uint16_t *effecter_id,
79 uint8_t *comp_effecter_count,
80 set_effecter_state_field *field)
81{
82 if (msg == NULL || effecter_id == NULL || comp_effecter_count == NULL ||
83 field == NULL) {
84 return PLDM_ERROR_INVALID_DATA;
85 }
vkaverapa6575b82019-04-03 05:33:52 -050086
87 if (payload_length > PLDM_SET_STATE_EFFECTER_STATES_REQ_BYTES) {
88 return PLDM_ERROR_INVALID_LENGTH;
89 }
90
91 *effecter_id = le16toh(*((uint16_t *)msg));
92 *comp_effecter_count = *(msg + sizeof(*effecter_id));
Sampa Misra0db1dfa2019-03-19 00:15:31 -050093 memcpy(field,
vkaverapa6575b82019-04-03 05:33:52 -050094 (msg + sizeof(*effecter_id) + sizeof(*comp_effecter_count)),
Sampa Misra0db1dfa2019-03-19 00:15:31 -050095 (sizeof(set_effecter_state_field) * (*comp_effecter_count)));
96
97 return PLDM_SUCCESS;
98}