spandsp  0.0.6
hdlc.c File Reference
#include <stdlib.h>
#include <inttypes.h>
#include <string.h>
#include <stdio.h>
#include "spandsp/stdbool.h"
#include "spandsp/telephony.h"
#include "spandsp/async.h"
#include "spandsp/crc.h"
#include "spandsp/bit_operations.h"
#include "spandsp/hdlc.h"
#include "spandsp/private/hdlc.h"

Functions

void hdlc_rx_put_bit (hdlc_rx_state_t *s, int new_bit)
 
void hdlc_rx_put_byte (hdlc_rx_state_t *s, int new_byte)
 
void hdlc_rx_put (hdlc_rx_state_t *s, const uint8_t buf[], int len)
 
void hdlc_rx_set_max_frame_len (hdlc_rx_state_t *s, size_t max_len)
 Set the maximum frame length for an HDLC receiver context. More...
 
void hdlc_rx_set_octet_counting_report_interval (hdlc_rx_state_t *s, int interval)
 Set the octet counting report interval. More...
 
int hdlc_rx_restart (hdlc_rx_state_t *s)
 Re-initialise an HDLC receiver context. More...
 
hdlc_rx_state_thdlc_rx_init (hdlc_rx_state_t *s, int crc32, int report_bad_frames, int framing_ok_threshold, hdlc_frame_handler_t handler, void *user_data)
 Initialise an HDLC receiver context. More...
 
void hdlc_rx_set_frame_handler (hdlc_rx_state_t *s, hdlc_frame_handler_t handler, void *user_data)
 Change the put_bit function associated with an HDLC receiver context. More...
 
void hdlc_rx_set_status_handler (hdlc_rx_state_t *s, modem_status_func_t handler, void *user_data)
 Change the status report function associated with an HDLC receiver context. More...
 
int hdlc_rx_release (hdlc_rx_state_t *s)
 Release an HDLC receiver context. More...
 
int hdlc_rx_free (hdlc_rx_state_t *s)
 Free an HDLC receiver context. More...
 
int hdlc_rx_get_stats (hdlc_rx_state_t *s, hdlc_rx_stats_t *t)
 Get the current receive statistics. More...
 
int hdlc_tx_frame (hdlc_tx_state_t *s, const uint8_t *frame, size_t len)
 Transmit a frame. More...
 
int hdlc_tx_flags (hdlc_tx_state_t *s, int len)
 Transmit a specified quantity of flag octets, typically as a preamble. More...
 
int hdlc_tx_abort (hdlc_tx_state_t *s)
 Send an abort. More...
 
int hdlc_tx_corrupt_frame (hdlc_tx_state_t *s)
 Corrupt the frame currently being transmitted, by giving it the wrong CRC. More...
 
int hdlc_tx_get_byte (hdlc_tx_state_t *s)
 
int hdlc_tx_get_bit (hdlc_tx_state_t *s)
 
int hdlc_tx_get (hdlc_tx_state_t *s, uint8_t buf[], size_t max_len)
 
void hdlc_tx_set_max_frame_len (hdlc_tx_state_t *s, size_t max_len)
 Set the maximum frame length for an HDLC transmitter context. More...
 
int hdlc_tx_restart (hdlc_tx_state_t *s)
 Re-initialise an HDLC transmitter context. More...
 
hdlc_tx_state_thdlc_tx_init (hdlc_tx_state_t *s, int crc32, int inter_frame_flags, int progressive, hdlc_underflow_handler_t handler, void *user_data)
 Initialise an HDLC transmitter context. More...
 
int hdlc_tx_release (hdlc_tx_state_t *s)
 Release an HDLC transmitter context. More...
 
int hdlc_tx_free (hdlc_tx_state_t *s)
 Free an HDLC transmitter context. More...
 

Function Documentation

◆ hdlc_rx_free()

int hdlc_rx_free ( hdlc_rx_state_t s)

Free an HDLC receiver context.

Free an HDLC receiver context.

Parameters
sA pointer to an HDLC receiver context.
Returns
0 for OK

◆ hdlc_rx_get_stats()

int hdlc_rx_get_stats ( hdlc_rx_state_t s,
hdlc_rx_stats_t t 
)

Get the current receive statistics.

Parameters
sA pointer to an HDLC receiver context.
tA pointer to the buffer for the statistics.
Returns
0 for OK, else -1.

References hdlc_rx_stats_t::aborts, hdlc_rx_stats_t::bytes, hdlc_rx_stats_t::crc_errors, hdlc_rx_stats_t::good_frames, hdlc_rx_stats_t::length_errors, hdlc_rx_state_s::rx_aborts, hdlc_rx_state_s::rx_bytes, hdlc_rx_state_s::rx_crc_errors, hdlc_rx_state_s::rx_frames, and hdlc_rx_state_s::rx_length_errors.

◆ hdlc_rx_init()

hdlc_rx_state_t* hdlc_rx_init ( hdlc_rx_state_t s,
int  crc32,
int  report_bad_frames,
int  framing_ok_threshold,
hdlc_frame_handler_t  handler,
void *  user_data 
)

Initialise an HDLC receiver context.

Initialise an HDLC receiver context.

Parameters
sA pointer to an HDLC receiver context.
crc32TRUE to use ITU CRC32. FALSE to use ITU CRC16.
report_bad_framesTRUE to request the reporting of bad frames.
framing_ok_thresholdThe number of back-to-back flags needed to start the framing OK condition. This may be used where a series of flag octets is used as a preamble, such as in the T.30 protocol.
handlerThe function to be called when a good HDLC frame is received.
user_dataAn opaque parameter for the callback routine.
Returns
A pointer to the HDLC receiver context.

◆ hdlc_rx_release()

int hdlc_rx_release ( hdlc_rx_state_t s)

Release an HDLC receiver context.

Release an HDLC receiver context.

Parameters
sA pointer to an HDLC receiver context.
Returns
0 for OK

◆ hdlc_rx_restart()

int hdlc_rx_restart ( hdlc_rx_state_t s)

Re-initialise an HDLC receiver context.

Re-initialise an HDLC receiver context. This does not reset the usage statistics.

Parameters
sA pointer to an HDLC receiver context.
Returns
0 for success.

References hdlc_rx_state_s::byte_in_progress, hdlc_rx_state_s::flags_seen, hdlc_rx_state_s::framing_ok_announced, hdlc_rx_state_s::len, hdlc_rx_state_s::num_bits, hdlc_rx_state_s::octet_count, hdlc_rx_state_s::octet_counting_mode, and hdlc_rx_state_s::raw_bit_stream.

◆ hdlc_rx_set_frame_handler()

void hdlc_rx_set_frame_handler ( hdlc_rx_state_t s,
hdlc_frame_handler_t  handler,
void *  user_data 
)

Change the put_bit function associated with an HDLC receiver context.

Change the put_bit function associated with an HDLC receiver context.

Parameters
sA pointer to an HDLC receiver context.
handlerThe function to be called when a good HDLC frame is received.
user_dataAn opaque parameter for the callback routine.

◆ hdlc_rx_set_max_frame_len()

void hdlc_rx_set_max_frame_len ( hdlc_rx_state_t s,
size_t  max_len 
)

Set the maximum frame length for an HDLC receiver context.

Parameters
sA pointer to an HDLC receiver context.
max_lenThe maximum permitted length of a frame.

◆ hdlc_rx_set_octet_counting_report_interval()

void hdlc_rx_set_octet_counting_report_interval ( hdlc_rx_state_t s,
int  interval 
)

Set the octet counting report interval.

Parameters
sA pointer to an HDLC receiver context.
intervalThe interval, in octets.

References hdlc_rx_state_s::octet_count_report_interval.

◆ hdlc_rx_set_status_handler()

void hdlc_rx_set_status_handler ( hdlc_rx_state_t s,
modem_status_func_t  handler,
void *  user_data 
)

Change the status report function associated with an HDLC receiver context.

Change the status report function associated with an HDLC receiver context.

Parameters
sA pointer to an HDLC receiver context.
handlerThe callback routine used to report status changes.
user_dataAn opaque parameter for the callback routine.

References hdlc_rx_state_s::status_handler, and hdlc_rx_state_s::status_user_data.

◆ hdlc_tx_abort()

int hdlc_tx_abort ( hdlc_tx_state_t s)

Send an abort.

Parameters
sA pointer to an HDLC transmitter context.
Returns
0 if the frame was aborted, else -1.

References hdlc_tx_state_s::abort_octets, and hdlc_tx_state_s::flag_octets.

◆ hdlc_tx_corrupt_frame()

int hdlc_tx_corrupt_frame ( hdlc_tx_state_t s)

Corrupt the frame currently being transmitted, by giving it the wrong CRC.

Parameters
sA pointer to an HDLC transmitter context.
Returns
0 if the frame was corrupted, else -1.

References hdlc_tx_state_s::buffer, hdlc_tx_state_s::crc, HDLC_MAXFRAME_LEN, and hdlc_tx_state_s::len.

◆ hdlc_tx_flags()

int hdlc_tx_flags ( hdlc_tx_state_t s,
int  len 
)

Transmit a specified quantity of flag octets, typically as a preamble.

Parameters
sA pointer to an HDLC transmitter context.
lenThe length of the required period of flags, in flag octets. If len is zero this requests that HDLC transmission be terminated when the buffers have fully drained.
Returns
0 if the flags were accepted for transmission, else -1.

◆ hdlc_tx_frame()

int hdlc_tx_frame ( hdlc_tx_state_t s,
const uint8_t *  frame,
size_t  len 
)

Transmit a frame.

Parameters
sA pointer to an HDLC transmitter context.
frameA pointer to the frame to be transmitted.
lenThe length of the frame to be transmitted.
Returns
0 if the frame was accepted for transmission, else -1.

◆ hdlc_tx_free()

int hdlc_tx_free ( hdlc_tx_state_t s)

Free an HDLC transmitter context.

Free an HDLC transmitter context.

Parameters
sA pointer to an HDLC transmitter context.
Returns
0 for OK

◆ hdlc_tx_init()

hdlc_tx_state_t* hdlc_tx_init ( hdlc_tx_state_t s,
int  crc32,
int  inter_frame_flags,
int  progressive,
hdlc_underflow_handler_t  handler,
void *  user_data 
)

Initialise an HDLC transmitter context.

Initialise an HDLC transmitter context.

Parameters
sA pointer to an HDLC transmitter context.
crc32TRUE to use ITU CRC32. FALSE to use ITU CRC16.
inter_frame_flagsThe minimum flag octets to insert between frames (usually one).
progressiveTRUE if frame creation works in progressive mode.
handlerThe callback function called when the HDLC transmitter underflows.
user_dataAn opaque parameter for the callback routine.
Returns
A pointer to the HDLC transmitter context.

Referenced by v42_restart().

◆ hdlc_tx_release()

int hdlc_tx_release ( hdlc_tx_state_t s)

Release an HDLC transmitter context.

Release an HDLC transmitter context.

Parameters
sA pointer to an HDLC transmitter context.
Returns
0 for OK

◆ hdlc_tx_restart()

int hdlc_tx_restart ( hdlc_tx_state_t s)

◆ hdlc_tx_set_max_frame_len()

void hdlc_tx_set_max_frame_len ( hdlc_tx_state_t s,
size_t  max_len 
)

Set the maximum frame length for an HDLC transmitter context.

Parameters
sA pointer to an HDLC transmitter context.
max_lenThe maximum length.