41 lines
1.4 KiB
C
41 lines
1.4 KiB
C
//
|
|
// Created by CFIF on 05.05.2022.
|
|
//
|
|
|
|
#include "XfcProtEncoder.h"
|
|
#include "XfcProtCrc.h"
|
|
#include "XfcProtCommon.h"
|
|
|
|
|
|
////private
|
|
uint16_t XfcTransPackEncoderGetDataSegmentLength(tXfcProtEncoder *env) {
|
|
return *((uint16_t *) (env->buffer->data + XFC_TRANSPORT_DATA_LEN_OFFSET));
|
|
}
|
|
|
|
////public
|
|
tXfcArray XfcTransPackEncoderGetDataSegmentAsArray(tXfcProtEncoder *env) {
|
|
return (tXfcArray) {
|
|
.data = env->buffer->data + XFC_TRANSPORT_HEADER_LEN,
|
|
.begin = 0,
|
|
.end = 0,
|
|
.limit = env->buffer->limit - XFC_TRANSPORT_HEADER_LEN + XFC_TRANSPORT_CRC_LEN,
|
|
};
|
|
}
|
|
|
|
|
|
void XfcTransPackEncoderSetId(tXfcProtEncoder *env, uint16_t id) {
|
|
*((env->buffer->data + XFC_TRANSPORT_COMMAND_ID_OFFSET)) = id;
|
|
}
|
|
|
|
void XfcTransPackEncoderSetDataSegmentLength(tXfcProtEncoder *env, uint16_t dataSegmentLength) {
|
|
*((uint16_t *) (env->buffer->data + XFC_TRANSPORT_DATA_LEN_OFFSET)) = dataSegmentLength;
|
|
}
|
|
|
|
|
|
void XfcTransPackEncoderFinalizeAndSignCrc(tXfcProtEncoder *env) {
|
|
env->buffer->data[0] = env->magic;
|
|
uint16_t dataLen = XfcTransPackEncoderGetDataSegmentLength(env);
|
|
uint16_t crc = XfcProtCrc(env->buffer->data, dataLen + XFC_TRANSPORT_HEADER_LEN);
|
|
*((uint16_t *) (env->buffer->data + XFC_TRANSPORT_HEADER_LEN + dataLen)) = crc;
|
|
env->buffer->end = env->buffer->begin + dataLen + XFC_TRANSPORT_HEADER_LEN + XFC_TRANSPORT_CRC_LEN;
|
|
} |