spandsp  3.0.0
fax.c File Reference
#include <inttypes.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "spandsp/stdbool.h"
#include "floating_fudge.h"
#include <assert.h>
#include <fcntl.h>
#include <time.h>
#include <tiffio.h>
#include "spandsp/telephony.h"
#include "spandsp/alloc.h"
#include "spandsp/logging.h"
#include "spandsp/queue.h"
#include "spandsp/dc_restore.h"
#include "spandsp/vector_int.h"
#include "spandsp/power_meter.h"
#include "spandsp/complex.h"
#include "spandsp/tone_detect.h"
#include "spandsp/tone_generate.h"
#include "spandsp/async.h"
#include "spandsp/hdlc.h"
#include "spandsp/silence_gen.h"
#include "spandsp/super_tone_rx.h"
#include "spandsp/fsk.h"
#include "spandsp/modem_connect_tones.h"
#include "spandsp/v8.h"
#include "spandsp/v29tx.h"
#include "spandsp/v29rx.h"
#include "spandsp/v27ter_tx.h"
#include "spandsp/v27ter_rx.h"
#include "spandsp/v17tx.h"
#include "spandsp/v17rx.h"
#include "spandsp/timezone.h"
#include "spandsp/t4_rx.h"
#include "spandsp/t4_tx.h"
#include "spandsp/image_translate.h"
#include "spandsp/t81_t82_arith_coding.h"
#include "spandsp/t85.h"
#include "spandsp/t42.h"
#include "spandsp/t43.h"
#include "spandsp/t4_t6_decode.h"
#include "spandsp/t4_t6_encode.h"
#include "spandsp/t30_fcf.h"
#include "spandsp/t35.h"
#include "spandsp/t30.h"
#include "spandsp/t30_api.h"
#include "spandsp/t30_logging.h"
#include "spandsp/fax_modems.h"
#include "spandsp/fax.h"
#include "spandsp/private/logging.h"
#include "spandsp/private/silence_gen.h"
#include "spandsp/private/power_meter.h"
#include "spandsp/private/fsk.h"
#include "spandsp/private/modem_connect_tones.h"
#include "spandsp/private/v8.h"
#include "spandsp/private/v17tx.h"
#include "spandsp/private/v17rx.h"
#include "spandsp/private/v27ter_tx.h"
#include "spandsp/private/v27ter_rx.h"
#include "spandsp/private/v29tx.h"
#include "spandsp/private/v29rx.h"
#include "spandsp/private/hdlc.h"
#include "spandsp/private/fax_modems.h"
#include "spandsp/private/timezone.h"
#include "spandsp/private/t81_t82_arith_coding.h"
#include "spandsp/private/t85.h"
#include "spandsp/private/t42.h"
#include "spandsp/private/t43.h"
#include "spandsp/private/t4_t6_decode.h"
#include "spandsp/private/t4_t6_encode.h"
#include "spandsp/private/image_translate.h"
#include "spandsp/private/t4_rx.h"
#include "spandsp/private/t4_tx.h"
#include "spandsp/private/t30.h"
#include "spandsp/private/fax.h"

Macros

#define HDLC_FRAMING_OK_THRESHOLD   8
 

Functions

int fax_rx (fax_state_t *s, int16_t *amp, int len)
 Apply T.30 receive processing to a block of audio samples. More...
 
int fax_rx_fillin (fax_state_t *s, int len)
 Apply fake T.30 receive processing. More...
 
int fax_tx (fax_state_t *s, int16_t *amp, int max_len)
 Apply T.30 transmit processing to generate a block of audio samples. More...
 
void fax_set_transmit_on_idle (fax_state_t *s, int transmit_on_idle)
 Select whether silent audio will be sent when FAX transmit is idle. More...
 
void fax_set_tep_mode (fax_state_t *s, int use_tep)
 Select whether TEP will be sent for the image modems. More...
 
t30_state_tfax_get_t30_state (fax_state_t *s)
 Get a pointer to the T.30 engine associated with a FAX context. More...
 
logging_state_tfax_get_logging_state (fax_state_t *s)
 Get a pointer to the logging context associated with a FAX context. More...
 
int fax_restart (fax_state_t *s, bool calling_party)
 Restart a FAX context. More...
 
fax_state_tfax_init (fax_state_t *s, bool calling_party)
 Initialise a FAX context. More...
 
int fax_release (fax_state_t *s)
 Release a FAX context. More...
 
int fax_free (fax_state_t *s)
 Free a FAX context. More...
 

Function Documentation

◆ fax_free()

int fax_free ( fax_state_t s)

Free a FAX context.

Free a FAX context.

Parameters
sThe FAX context.
Returns
0 for OK, else -1.

References fax_release().

◆ fax_get_logging_state()

logging_state_t* fax_get_logging_state ( fax_state_t s)

Get a pointer to the logging context associated with a FAX context.

Get a pointer to the logging context associated with a FAX context.

Parameters
sThe FAX context.
Returns
A pointer to the logging context, or NULL.

References fax_state_s::logging.

◆ fax_get_t30_state()

t30_state_t* fax_get_t30_state ( fax_state_t s)

Get a pointer to the T.30 engine associated with a FAX context.

Get a pointer to the T.30 engine associated with a FAX context.

Parameters
sThe FAX context.
Returns
A pointer to the T.30 context, or NULL.

References fax_state_s::t30.

◆ fax_init()

fax_state_t* fax_init ( fax_state_t s,
bool  calling_party 
)

Initialise a FAX context.

Initialise a FAX context.

Parameters
sThe FAX context.
calling_partyTrue if the context is for a calling party. False if the context is for an answering party.
Returns
A pointer to the FAX context, or NULL if there was a problem.

◆ fax_release()

int fax_release ( fax_state_t s)

Release a FAX context.

Release a FAX context.

Parameters
sThe FAX context.
Returns
0 for OK, else -1.

References fax_state_s::t30, t30_release(), fax_state_s::v8, and v8_release().

Referenced by fax_free().

◆ fax_restart()

int fax_restart ( fax_state_t s,
bool  calling_party 
)

Restart a FAX context.

Restart a FAX context.

Parameters
sThe FAX context.
calling_partyTrue if the context is for a calling party. False if the context is for an answering party.
Returns
0 for OK, else -1.

◆ fax_rx()

int fax_rx ( fax_state_t s,
int16_t *  amp,
int  len 
)

Apply T.30 receive processing to a block of audio samples.

Apply T.30 receive processing to a block of audio samples.

Parameters
sThe FAX context.
ampThe audio sample buffer.
lenThe number of samples in the buffer.
Returns
The number of samples unprocessed. This should only be non-zero if the software has reached the end of the FAX call.

◆ fax_rx_fillin()

int fax_rx_fillin ( fax_state_t s,
int  len 
)

Apply fake T.30 receive processing.

Apply fake T.30 receive processing when a block of audio samples is missing (e.g due to packet loss).

Parameters
sThe FAX context.
lenThe number of samples to fake.
Returns
The number of samples unprocessed. This should only be non-zero if the software has reached the end of the FAX call.

References fax_modems_state_s::audio_rx_log, and fax_state_s::modems.

◆ fax_set_tep_mode()

void fax_set_tep_mode ( fax_state_t s,
int  use_tep 
)

Select whether TEP will be sent for the image modems.

Select whether talker echo protection tone will be sent for the image modems.

Parameters
sThe FAX context.
use_tepTrue if TEP should be sent.

◆ fax_set_transmit_on_idle()

void fax_set_transmit_on_idle ( fax_state_t s,
int  transmit_on_idle 
)

Select whether silent audio will be sent when FAX transmit is idle.

Select whether silent audio will be sent when FAX transmit is idle.

Parameters
sThe FAX context.
transmit_on_idleTrue if silent audio should be output when the FAX transmitter is idle. False to transmit zero length audio when the FAX transmitter is idle. The default behaviour is false.

References fax_state_s::modems, and fax_modems_state_s::transmit_on_idle.

◆ fax_tx()

int fax_tx ( fax_state_t s,
int16_t *  amp,
int  max_len 
)

Apply T.30 transmit processing to generate a block of audio samples.

Apply T.30 transmit processing to generate a block of audio samples.

Parameters
sThe FAX context.
ampThe audio sample buffer.
max_lenThe number of samples to be generated.
Returns
The number of samples actually generated. This will be zero when there is nothing to send.