Display_Avr_3/hdlc_frame.h
2023-12-25 20:11:27 +03:00

57 lines
1.4 KiB
C

#ifndef HDLC_FRAME_H
#define HDLC_FRAME_H
#include <stdint.h>
#include <stdbool.h>
typedef struct {
uint8_t address;
uint8_t control;
uint8_t* data;
size_t data_length;
int timeout;
} HDLCFrame;
void init_HDLCFrame(HDLCFrame* frame, uint8_t address, uint8_t control, uint8_t* data, size_t data_length);
uint16_t calculate_fcs(const HDLCFrame *frame, size_t i);
void create_frame(const HDLCFrame* frame, uint8_t* buffer);
typedef struct {
HDLCFrame base;
uint8_t receive_sequence_number;
uint8_t poll_final;
uint8_t send_sequence_number;
} IFrame;
void init_IFrame(IFrame* frame, uint8_t address, uint8_t receive_sequence_number, uint8_t poll_final,
uint8_t send_sequence_number, uint8_t* data, size_t data_length);
typedef struct {
HDLCFrame base;
uint8_t receive_sequence_number;
uint8_t poll_final;
const char* frame_type;
} SFrame;
enum SFrameType{
RR,
RNR,
REJ,
SREJ
};
void init_SFrame(SFrame* frame, uint8_t address, uint8_t receive_sequence_number, uint8_t poll_final,
enum SFrameType frame_type);
typedef struct {
HDLCFrame base;
uint8_t poll_final;
const char* frame_type;
} UFrame;
void init_UFrame(UFrame* frame, uint8_t address, uint8_t poll_final, const char* frame_type, uint8_t* data, size_t data_length);
bool validate_fcs(const uint8_t* frame, size_t length);
#endif