#include <stdlib.h>
#include <stdio.h>
#include <inttypes.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <time.h>
#include <tgmath.h>
#include <tiffio.h>
#include "spandsp/telephony.h"
#include "spandsp/logging.h"
#include "spandsp/queue.h"
#include "spandsp/power_meter.h"
#include "spandsp/complex.h"
#include "spandsp/tone_generate.h"
#include "spandsp/async.h"
#include "spandsp/hdlc.h"
#include "spandsp/fsk.h"
#include "spandsp/v29rx.h"
#include "spandsp/v29tx.h"
#include "spandsp/v27ter_rx.h"
#include "spandsp/v27ter_tx.h"
#include "spandsp/t4.h"
#include "spandsp/t30_fcf.h"
#include "spandsp/t35.h"
#include "spandsp/t30.h"
Defines | |
#define | MAXMESSAGE (MAXFRAME + 4) |
#define | MAX_MESSAGE_TRIES 3 |
#define | ms_to_samples(t) (((t)*SAMPLE_RATE)/1000) |
#define | DISBIT1 0x01 |
#define | DISBIT2 0x02 |
#define | DISBIT3 0x04 |
#define | DISBIT4 0x08 |
#define | DISBIT5 0x10 |
#define | DISBIT6 0x20 |
#define | DISBIT7 0x40 |
#define | DISBIT8 0x80 |
#define | DEFAULT_TIMER_T0 60000 |
#define | DEFAULT_TIMER_T1 35000 |
#define | DEFAULT_TIMER_T2 6000 |
#define | DEFAULT_TIMER_T3 10000 |
#define | DEFAULT_TIMER_T4 3000 |
#define | DEFAULT_TIMER_T5 60000 |
#define | DEFAULT_TIMER_SIG_ON 3000 |
#define | T30_V29_FALLBACK_START 0 |
#define | T30_V27TER_FALLBACK_START 2 |
Enumerations | |
enum | { T30_PHASE_IDLE = 0, T30_PHASE_A_CED, T30_PHASE_A_CNG, T30_PHASE_BDE_RX, T30_PHASE_BDE_TX, T30_PHASE_C_RX, T30_PHASE_C_TX, T30_PHASE_E, T30_PHASE_CALL_FINISHED } |
enum | { T30_STATE_B = 1, T30_STATE_C, T30_STATE_D, T30_STATE_D_TCF, T30_STATE_F, T30_STATE_F_TCF, T30_STATE_F_MPS_MCF, T30_STATE_F_EOP_MCF, T30_STATE_R, T30_STATE_T, T30_STATE_I, T30_STATE_II, T30_STATE_II_MPS, T30_STATE_II_EOP, T30_STATE_II_EOM } |
enum | { T30_MODE_SEND_DOC = 1, T30_MODE_RECEIVE_DOC } |
enum | { T30_MODEM_V27TER = 0, T30_MODEM_V29, T30_MODEM_V17 } |
Functions | |
char * | t30_completion_code_to_str (int result) |
Convert a phase E completion code to a short text description. | |
char * | t30_frametype (uint8_t x) |
Return a text name for a T.30 frame type. | |
void | t30_decode_dis_dtc_dcs (t30_state_t *s, const uint8_t *pkt, int len) |
Decode a DIS, DTC or DCS frame, and log the contents. | |
int | fax_init (t30_state_t *s, int calling_party, void *user_data) |
Initialise a T.30 context. | |
void | fax_release (t30_state_t *s) |
Release a T.30 context. | |
int | fax_rx (t30_state_t *s, int16_t *buf, int len) |
Apply FAX receive processing to a block of audio samples. | |
int | fax_tx (t30_state_t *s, int16_t *buf, int max_len) |
Apply FAX transmit processing to generate a block of audio samples. | |
int | t30_set_header_info (t30_state_t *s, const char *info) |
Set the header information associated with a T.30 context. | |
int | t30_set_local_ident (t30_state_t *s, const char *id) |
Set the local identifier associated with a T.30 context. | |
int | t30_set_sub_address (t30_state_t *s, const char *sub_address) |
Set the sub-address associated with a T.30 context. | |
int | t30_get_sub_address (t30_state_t *s, char *sub_address) |
Get the sub-address associated with a T.30 context. | |
int | t30_get_header_info (t30_state_t *s, char *info) |
Get the header information associated with a T.30 context. | |
int | t30_get_local_ident (t30_state_t *s, char *id) |
Get the local identifier associated with a T.30 context. | |
int | t30_get_far_ident (t30_state_t *s, char *id) |
Get the remote identifier associated with a T.30 context. | |
void | t30_get_transfer_statistics (t30_state_t *s, t30_stats_t *t) |
Get the current transfer statistics. | |
void | t30_set_phase_b_handler (t30_state_t *s, t30_phase_b_handler_t *handler, void *user_data) |
Set a callback function for T.30 phase B handling. | |
void | t30_set_phase_d_handler (t30_state_t *s, t30_phase_d_handler_t *handler, void *user_data) |
Set a callback function for T.30 phase D handling. | |
void | t30_set_phase_e_handler (t30_state_t *s, t30_phase_e_handler_t *handler, void *user_data) |
Set a callback function for T.30 phase E handling. | |
void | t30_set_rx_file (t30_state_t *s, const char *file, int stop_page) |
Set next receive file name. | |
void | t30_set_tx_file (t30_state_t *s, const char *file, int start_page, int stop_page) |
Set next transmit file name. | |
void | t30_local_interrupt_request (t30_state_t *s, int state) |
Request a local interrupt of FAX exchange. | |
void | fax_set_flush_handler (t30_state_t *s, t30_flush_handler_t *handler, void *user_data) |
int fax_init | ( | t30_state_t * | s, | |
int | calling_party, | |||
void * | user_data | |||
) |
Initialise a T.30 context.
Initialise a T.30 context.
s | The T.30 context. | |
calling_party | TRUE if the context is for a calling party. FALSE if the context is for an answering party. | |
user_data | An opaque pointer which is associated with the T.30 context, and supplied in callbacks. |
void fax_release | ( | t30_state_t * | s | ) |
Release a T.30 context.
Release a T.30 context.
s | The T.30 context. |
int fax_rx | ( | t30_state_t * | s, | |
int16_t * | buf, | |||
int | len | |||
) |
Apply FAX receive processing to a block of audio samples.
Apply FAX receive processing to a block of audio samples.
s | The T.30 context. | |
buf | The audio sample buffer. | |
len | The number of samples in the buffer. |
int fax_tx | ( | t30_state_t * | s, | |
int16_t * | buf, | |||
int | max_len | |||
) |
Apply FAX transmit processing to generate a block of audio samples.
Apply FAX transmit processing to generate a block of audio samples.
s | The T.30 context. | |
buf | The audio sample buffer. | |
max_len | The number of samples to be generated. |
char* t30_completion_code_to_str | ( | int | err | ) |
Convert a phase E completion code to a short text description.
Convert a phase E completion code to a short text description.
err | The error code. |
void t30_decode_dis_dtc_dcs | ( | t30_state_t * | s, | |
const uint8_t * | dis, | |||
int | len | |||
) |
Decode a DIS, DTC or DCS frame, and log the contents.
Decode a DIS, DTC or DCS frame, and log the contents.
s | The T.30 context. | |
dis | A pointer to the frame to be decoded. | |
len | The length of the frame. |
char* t30_frametype | ( | uint8_t | x | ) |
Return a text name for a T.30 frame type.
Return a text name for a T.30 frame type.
x | The frametype octet. |
int t30_get_far_ident | ( | t30_state_t * | s, | |
char * | id | |||
) |
Get the remote identifier associated with a T.30 context.
Get the remote FAX machine identifier associated with a T.30 context.
s | The T.30 context. | |
id | A pointer to a buffer for the identifier. The buffer should be at least 21 bytes long. |
int t30_get_header_info | ( | t30_state_t * | s, | |
char * | info | |||
) |
Get the header information associated with a T.30 context.
Get the header information associated with a T.30 context.
s | The T.30 context. | |
sub_address | A pointer to a buffer for the header information. The buffer should be at least 51 bytes long. |
int t30_get_local_ident | ( | t30_state_t * | s, | |
char * | id | |||
) |
Get the local identifier associated with a T.30 context.
Get the local FAX machine identifier associated with a T.30 context.
s | The T.30 context. | |
id | A pointer to a buffer for the identifier. The buffer should be at least 21 bytes long. |
int t30_get_sub_address | ( | t30_state_t * | s, | |
char * | sub_address | |||
) |
Get the sub-address associated with a T.30 context.
Get the sub-address associated with a T.30 context.
s | The T.30 context. | |
sub_address | A pointer to a buffer for the sub-address. The buffer should be at least 21 bytes long. |
void t30_get_transfer_statistics | ( | t30_state_t * | s, | |
t30_stats_t * | t | |||
) |
Get the current transfer statistics.
Get the current transfer statistics for the file being sent or received.
s | The T.30 context. | |
t | A pointer to a buffer for the statistics. |
void t30_local_interrupt_request | ( | t30_state_t * | s, | |
int | state | |||
) |
Request a local interrupt of FAX exchange.
Request a local interrupt of FAX exchange.
s | The T.30 context. | |
state | TRUE to enable interrupt request, else FALSE. |
int t30_set_header_info | ( | t30_state_t * | s, | |
const char * | info | |||
) |
Set the header information associated with a T.30 context.
Set the header information associated with a T.30 context.
s | The T.30 context. | |
info | A pointer to the information string. |
int t30_set_local_ident | ( | t30_state_t * | s, | |
const char * | id | |||
) |
Set the local identifier associated with a T.30 context.
Set the local identifier associated with a T.30 context.
s | The T.30 context. | |
id | A pointer to the identifier. |
void t30_set_phase_b_handler | ( | t30_state_t * | s, | |
t30_phase_b_handler_t * | handler, | |||
void * | user_data | |||
) |
Set a callback function for T.30 phase B handling.
Set a callback function for T.30 phase B handling.
s | The T.30 context. | |
handler | The callback function | |
user_data | An opaque pointer passed to the callback function. |
void t30_set_phase_d_handler | ( | t30_state_t * | s, | |
t30_phase_d_handler_t * | handler, | |||
void * | user_data | |||
) |
Set a callback function for T.30 phase D handling.
Set a callback function for T.30 phase D handling.
s | The T.30 context. | |
handler | The callback function | |
user_data | An opaque pointer passed to the callback function. |
void t30_set_phase_e_handler | ( | t30_state_t * | s, | |
t30_phase_e_handler_t * | handler, | |||
void * | user_data | |||
) |
Set a callback function for T.30 phase E handling.
Set a callback function for T.30 phase E handling.
s | The T.30 context. | |
handler | The callback function | |
user_data | An opaque pointer passed to the callback function. |
void t30_set_rx_file | ( | t30_state_t * | s, | |
const char * | file, | |||
int | stop_page | |||
) |
Set next receive file name.
Specify the file name of the next TIFF file to be received by a T.30 context.
s | The T.30 context. | |
file | The file name | |
stop_page | The maximum page to receive. -1 for no restriction. |
int t30_set_sub_address | ( | t30_state_t * | s, | |
const char * | sub_address | |||
) |
Set the sub-address associated with a T.30 context.
Set the sub-address associated with a T.30 context.
s | The T.30 context. | |
sub_address | A pointer to the sub-address. |
void t30_set_tx_file | ( | t30_state_t * | s, | |
const char * | file, | |||
int | start_page, | |||
int | stop_page | |||
) |
Set next transmit file name.
Specify the file name of the next TIFF file to be transmitted by a T.30 context.
s | The T.30 context. | |
file | The file name | |
start_page | The first page to send. -1 for no restriction. | |
stop_page | The last page to send. -1 for no restriction. |