#pragma once #include "protocol.h" #define HYDROLINK_MSG_ID_SET_CMD 2 #define HYDROLINK_MSG_SET_CMD_LEN 6 #define HYDROLINK_MSG_2_LEN 6 #define HYDROLINK_MSG_SET_CMD_CRC_EXTRA 58 typedef struct hydrolink_msg_set_cmd_t_s { int32_t value; /// uint8_t index; /// uint8_t cmd_id; /// Command defined as in CMD_ID enum. } hydrolink_msg_set_cmd_t; static inline void hydrolink_msg_set_cmd_encode(uint8_t src_id, uint8_t dst_id, const hydrolink_msg_set_cmd_t *msg, hydrolink_msg_t *packet) { uint16_t crc; crc_xmodem_init(&crc); packet->id = HYDROLINK_MSG_ID_SET_CMD; packet->payload_length = HYDROLINK_MSG_2_LEN + HYDROLINK_NON_PAYLOAD_LEN; crc_xmodem_accumulate(packet->payload_length, &crc); crc_xmodem_accumulate(packet->id, &crc); packet->dst_id = dst_id; crc_xmodem_accumulate(packet->dst_id, &crc); packet->src_id = src_id; crc_xmodem_accumulate(packet->src_id, &crc); hydrolink_put_int32_t(HYDROLINK_PAYLOAD_NON_CONST(packet), 0, msg->value); hydrolink_put_uint8_t(HYDROLINK_PAYLOAD_NON_CONST(packet), 4, msg->index); hydrolink_put_uint8_t(HYDROLINK_PAYLOAD_NON_CONST(packet), 5, msg->cmd_id); for(int i = 0; i < packet->payload_length; ++i) { crc_xmodem_accumulate(packet->payload[i], &crc); } crc_xmodem_acumulate(HYDROLINK_MSG_SET_CMD_CRC_EXTRA, &crc); packet->crc = crc; } static inline int32_t hydrolink_msg_set_cmd_get_value(const hydrolink_msg_t *packet) { return HYDROLINK_RETURN_int32_t(packet, 0); } static inline uint8_t hydrolink_msg_set_cmd_get_index(const hydrolink_msg_t *packet) { return HYDROLINK_RETURN_uint8_t(packet, 4); } static inline uint8_t hydrolink_msg_set_cmd_get_cmd_id(const hydrolink_msg_t *packet) { return HYDROLINK_RETURN_uint8_t(packet, 5); } static inline void hydrolink_msg_set_cmd_decode(const hydrolink_msg_t *packet, hydrolink_msg_set_cmd_t *set_cmd) { set_cmd->value = hydrolink_msg_set_cmd_get_value(packet); set_cmd->index = hydrolink_msg_set_cmd_get_index(packet); set_cmd->cmd_id = hydrolink_msg_set_cmd_get_cmd_id(packet); }