fax.c File Reference
`#include <inttypes.h>`
`#include <stdlib.h>`
`#include <stdio.h>`
`#include <string.h>`
`#include "floating_fudge.h"`
`#include <assert.h>`
`#include <fcntl.h>`
`#include <time.h>`
`#include <tiffio.h>`
`#include "spandsp/telephony.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/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/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/t4_t6_decode.h"`
`#include "spandsp/private/t4_t6_encode.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)
int | fax_rx_fillin (fax_state_t *s, int len)
int | fax_tx (fax_state_t *s, int16_t *amp, int max_len)
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.
void | fax_set_tep_mode (fax_state_t *s, int use_tep)
| Select whether TEP will be sent for the image modems.
t30_state_t * | fax_get_t30_state (fax_state_t *s)
| Get a pointer to the T.30 engine associated with a FAX context.
logging_state_t * | fax_get_logging_state (fax_state_t *s)
| Get a pointer to the logging context associated with a FAX context.
int | fax_restart (fax_state_t *s, int calling_party)
| Restart a FAX context.
fax_state_t * | fax_init (fax_state_t *s, int calling_party)
| Initialise a FAX context.
int | fax_release (fax_state_t *s)
| Release a FAX context.
int | fax_free (fax_state_t *s)
| Free a FAX context.

## Function Documentation

## fax_free()

int fax_free | ( | fax_state_t * | s | ) |

Free a FAX context.

Free a FAX context.

Parameters

  s | The FAX context.

Returns
  0 for OK, else -1.

References fax_state_s::t30, and t30_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

  s | The 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

  s | The 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,
|  | int | calling_party )

Initialise a FAX context.

Initialise a FAX context.

Parameters

  s | The FAX context.
  calling_party | TRUE 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.

References fax_restart(), fax_state_s::logging, MODEM_CONNECT_TONES_ANSAM_PR, fax_state_s::modems, t30_state_s::supported_modems, fax_state_s::t30, t30_init(), t30_set_supported_modems(), T30_SUPPORT_V17, T30_SUPPORT_V27TER, T30_SUPPORT_V29, T30_SUPPORT_V34HDX, and v8_init().

## fax_release()

int fax_release | ( | fax_state_t * | s | ) |

Release a FAX context.

Release a FAX context.

Parameters

  s | The FAX context.

Returns
  0 for OK, else -1.

References fax_state_s::t30, and t30_release().

## fax_restart()

int fax_restart | ( | fax_state_t * | s,
|  | int | calling_party )

Restart a FAX context.

Restart a FAX context.

Parameters

  s | The FAX context.
  calling_party | TRUE if the context is for a calling party. FALSE if the context is for an answering party.

Returns
  0 for OK, else -1.

References fax_modems_state_s::audio_rx_log, fax_modems_state_s::audio_tx_log, MODEM_CONNECT_TONES_ANSAM_PR, fax_state_s::modems, t30_state_s::supported_modems, fax_state_s::t30, t30_restart(), T30_SUPPORT_V17, T30_SUPPORT_V27TER, T30_SUPPORT_V29, and T30_SUPPORT_V34HDX.

Referenced by fax_init().

## 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

  s | The FAX context.
  use_tep | TRUE if TEP should be sent.

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

## 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

  s | The FAX context.
  transmit_on_idle | TRUE 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.