57 lines
1.4 KiB
C
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
|