36 lines
No EOL
1.3 KiB
C
36 lines
No EOL
1.3 KiB
C
#pragma once
|
|
#include "protocol.h"
|
|
#define HYDROLINK_MSG_ID_ACK 1
|
|
#define HYDROLINK_MSG_ACK_LEN 1
|
|
#define HYDROLINK_MSG_1_LEN 1
|
|
#define HYDROLINK_MSG_ACK_CRC_EXTRA 73
|
|
|
|
typedef struct hydrolink_msg_ack_t_s {
|
|
uint8_t ack; ///
|
|
} hydrolink_msg_ack_t;
|
|
|
|
static inline void hydrolink_msg_ack_encode(uint8_t src_id, uint8_t dst_id, const hydrolink_msg_ack_t *msg, hydrolink_msg_t *packet) {
|
|
uint16_t crc;
|
|
crc_xmodem_init(&crc);
|
|
packet->id = HYDROLINK_MSG_ID_ACK;
|
|
packet->payload_length = HYDROLINK_MSG_1_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_uint8_t(HYDROLINK_PAYLOAD_NON_CONST(packet), 0, msg->ack);
|
|
for(int i = 0; i < packet->payload_length; ++i) {
|
|
crc_xmodem_accumulate(packet->payload[i], &crc);
|
|
}
|
|
crc_xmodem_acumulate(HYDROLINK_MSG_ACK_CRC_EXTRA, &crc);
|
|
packet->crc = crc;
|
|
}
|
|
|
|
static inline uint8_t hydrolink_msg_ack_get_ack(const hydrolink_msg_t *packet) {
|
|
return HYDROLINK_RETURN_uint8_t(packet, 0);
|
|
}
|
|
static inline void hydrolink_msg_ack_decode(const hydrolink_msg_t *packet, hydrolink_msg_ack_t *ack) {
|
|
ack->ack = hydrolink_msg_ack_get_ack(packet);
|
|
} |