#ifndef HDLC_FRAME_H #define HDLC_FRAME_H #include typedef struct { uint8_t address; uint8_t control; uint8_t* data; size_t data_length; } 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* result); 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; void init_SFrame(SFrame* frame, uint8_t address, uint8_t receive_sequence_number, uint8_t poll_final, const char* 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); #endif