line source
/*
+-----------------------------------------------------------------------------
| Project : GSM-F&D (8411)
| Modul : t30_kerf
+-----------------------------------------------------------------------------
| Copyright 2002 Texas Instruments Berlin, AG
| All rights reserved.
|
| This file is confidential and a trade secret of Texas
| Instruments Berlin, AG
| The receipt of or possession of this file does not convey
| any rights to reproduce or disclose its contents or to
| manufacture, use, or sell anything it may describe, in
| whole, or in part, without the specific written consent of
| Texas Instruments Berlin, AG.
+-----------------------------------------------------------------------------
| Purpose : This Modul defines the procedures and functions for
| the component T30 of the mobile station
+-----------------------------------------------------------------------------
*/
#ifndef T30_KERF_C
#define T30_KERF_C
#endif
#define ENTITY_T30
/*==== INCLUDES ===================================================*/
#include <string.h>
#include <stdlib.h>
#include <stddef.h>
#include "typedefs.h"
#include "pcm.h"
#include "vsi.h"
#include "macdef.h"
#include "pconst.cdg"
#include "mconst.cdg"
#include "message.h"
#include "ccdapi.h"
#include "custom.h"
#include "gsm.h"
#include "prim.h"
#include "cnf_t30.h"
#include "mon_t30.h"
#include "pei.h"
#include "tok.h"
#include "dti.h" /* functionality of the dti library */
#include "t30.h"
/*==== CONST =======================================================*/
/*==== TYPES =======================================================*/
/*==== VAR EXPORT ==================================================*/
/*==== VAR LOCAL ===================================================*/
/*==== FUNCTIONS ===================================================*/
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_init |
+--------------------------------------------------------------------+
PURPOSE : initialize kernel
*/
GLOBAL void ker_init (T_T30_DATA *pt30_data)
{
TRACE_FUNCTION ("ker_init()");
memset (pt30_data, 0, sizeof (T_T30_DATA));
SET_STATE (KER, T30_NULL);
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_check_rtc |
+--------------------------------------------------------------------+
PURPOSE : This function scans the received fax data for RTC.
*/
GLOBAL UBYTE ker_check_rtc (T_FAD_DATA_IND *fad_data_ind)
{
USHORT i;
UBYTE bit_ptr;
TRACE_FUNCTION ("ker_check_rtc()");
#ifdef _SIMULATION_ /* RTC checking OFF */
if (t30_data->test_mode & TST_RTC)
return RTC_NO;
#endif
if (fad_data_ind EQ NULL)
{
t30_data->rtc_zero = 0;
t30_data->rtc_eol = 0;
return RTC_NO;
}
for (i = 0 ; i < (fad_data_ind->sdu.l_buf >> 3); i++)
{
UBYTE ch = fad_data_ind->sdu.buf[i];
if (!ch)
{
t30_data->rtc_zero += 8;
continue;
}
bit_ptr = 0x80;
do
{
if (ch & bit_ptr)
{
if (t30_data->rtc_zero >= 11)
t30_data->eol++;
if (t30_data->rtc_zero EQ 11)
{
if (++t30_data->rtc_eol EQ 6)
{
t30_data->rtc_eol = 0;
t30_data->rtc_zero = 0;
t30_data->eol -= 5;
return RTC_YES;
}
}
else
{
if (t30_data->rtc_eol)
t30_data->rtc_eol = 0;
else if (t30_data->rtc_zero >= 11)
t30_data->rtc_eol++;
}
t30_data->rtc_zero = 0;
}
else
t30_data->rtc_zero++;
bit_ptr >>= 1;
}
while (bit_ptr);
}
return RTC_NO;
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_fill_dcs_cap0 |
+--------------------------------------------------------------------+
PURPOSE : This function prepares the mandatory fax capabilities.
*/
LOCAL void ker_fill_dcs_cap0 (T_BCS_DCS *bcs_dcs)
{
#define X t30_data->hdlc_rcv.dcs
#define Y bcs_dcs->cap0_snd
TRACE_FUNCTION ("ker_fill_dcs_cap0()");
X.rec_fax_op = Y.rec_fax_op;
X.data_sig_rate = Y.data_sig_rate;
X.R8_lines_pels = Y.R8_lines_pels;
X.two_dim_coding = Y.two_dim_coding;
X.rec_width = Y.rec_width;
X.max_rec_len = Y.max_rec_len;
X.min_scan_time = Y.min_scan_time;
/*
t30_data->trans_rate = Y.data_sig_rate;
*/
#undef X
#undef Y
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_fill_dcs_cap1 |
+--------------------------------------------------------------------+
PURPOSE : This function prepares the extended fax capabilities 1.
*/
LOCAL void ker_fill_dcs_cap1 (T_BCS_DCS *bcs_dcs)
{
#define X t30_data->hdlc_rcv.dcs
#define Y bcs_dcs->cap1_snd
TRACE_FUNCTION ("ker_fill_dcs_cap1()");
if (bcs_dcs->v_cap1_snd)
{
X.uncomp_mode = Y.uncomp_mode;
X.err_corr_mode = Y.err_corr_mode;
X.frame_size = Y.frame_size;
X.t6_coding = Y.t6_coding;
}
#undef X
#undef Y
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_fill_dcs_cap2 |
+--------------------------------------------------------------------+
PURPOSE : This function prepares the extended fax capabilities 2.
*/
LOCAL void ker_fill_dcs_cap2 (T_BCS_DCS *bcs_dcs)
{
#define X t30_data->hdlc_rcv.dcs
#define Y bcs_dcs->cap2_snd
TRACE_FUNCTION ("ker_fill_dcs_cap2()");
if (bcs_dcs->v_cap2_snd)
{
/* for future use */
}
#undef X
#undef Y
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_fill_dcs_cap3 |
+--------------------------------------------------------------------+
PURPOSE : This function prepares the extended fax capabilities 3.
*/
LOCAL void ker_fill_dcs_cap3 (T_BCS_DCS *bcs_dcs)
{
#define X t30_data->hdlc_rcv.dcs
#define Y bcs_dcs->cap3_snd
TRACE_FUNCTION ("ker_fill_dcs_cap3()");
if (bcs_dcs->v_cap3_snd)
{
X.R8_lines = Y.R8_lines;
X.r_300_pels = Y.r_300_pels;
X.R16_lines_pels = Y.R16_lines_pels;
X.resolution_type = Y.resolution_type;
}
#undef X
#undef Y
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_fill_dcs_cap4 |
+--------------------------------------------------------------------+
PURPOSE : This function prepares the extended fax capabilities 4.
*/
LOCAL void ker_fill_dcs_cap4 (T_BCS_DCS *bcs_dcs)
{
#define X t30_data->hdlc_rcv.dcs
#define Y bcs_dcs->cap4_snd
TRACE_FUNCTION ("ker_fill_dcs_cap4()");
if (bcs_dcs->v_cap4_snd)
{
X.subaddr = Y.subaddr;
X.password = Y.password;
X.bft = Y.bft;
X.dtm = Y.dtm;
X.edi = Y.edi;
}
#undef X
#undef Y
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_fill_dcs_cap5 |
+--------------------------------------------------------------------+
PURPOSE : This function prepares the extended fax capabilities 5.
*/
LOCAL void ker_fill_dcs_cap5 (T_BCS_DCS *bcs_dcs)
{
#define X t30_data->hdlc_rcv.dcs
#define Y bcs_dcs->cap5_snd
TRACE_FUNCTION ("ker_fill_dcs_cap5()");
if (bcs_dcs->v_cap5_snd)
{
X.btm = Y.btm;
X.char_mode = Y.char_mode;
X.mixed_mode = Y.mixed_mode;
}
#undef X
#undef Y
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_fill_dcs_cap6 |
+--------------------------------------------------------------------+
PURPOSE : This function prepares the extended fax capabilities 6.
*/
LOCAL void ker_fill_dcs_cap6 (T_BCS_DCS *bcs_dcs)
{
#define X t30_data->hdlc_rcv.dcs
#define Y bcs_dcs->cap6_snd
TRACE_FUNCTION ("ker_fill_dcs_cap6()");
if (bcs_dcs->v_cap6_snd)
{
X.proc_mode_26 = Y.proc_mode_26;
X.dig_network_cap = Y.dig_network_cap;
X.duplex = Y.duplex;
X.jpeg = Y.jpeg;
X.full_colour = Y.full_colour;
X.huffman_tables = Y.huffman_tables;
X.r_12_bits_pel_comp = Y.r_12_bits_pel_comp;
}
#undef X
#undef Y
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_fill_dcs_cap7 |
+--------------------------------------------------------------------+
PURPOSE : This function prepares the extended fax capabilities 7.
*/
LOCAL void ker_fill_dcs_cap7 (T_BCS_DCS *bcs_dcs)
{
#define X t30_data->hdlc_rcv.dcs
#define Y bcs_dcs->cap7_snd
TRACE_FUNCTION ("ker_fill_dcs_cap7()");
if (bcs_dcs->v_cap7_snd)
{
X.no_subsamp = Y.no_subsamp;
X.cust_illum = Y.cust_illum;
X.cust_gamut = Y.cust_gamut;
X.na_letter = Y.na_letter;
X.na_legal = Y.na_legal;
X.sing_prog_seq_coding_basic = Y.sing_prog_seq_coding_basic;
X.sing_prog_seq_coding_L0 = Y.sing_prog_seq_coding_L0;
}
#undef X
#undef Y
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_fill_dcs_info |
+--------------------------------------------------------------------+
PURPOSE : This function fills the hdlc-frame-buffer with the
received DCS-parameters.
*/
GLOBAL void ker_fill_dcs_info (T_BCS_DCS *bcs_dcs)
{
TRACE_FUNCTION ("ker_fill_dcs_info()");
memset (&t30_data->hdlc_rcv.dcs, 0xFF,
sizeof (t30_data->hdlc_rcv.dcs));
t30_data->hdlc_rcv.v_dcs = 1;
ker_fill_dcs_cap0 (bcs_dcs);
ker_fill_dcs_cap1 (bcs_dcs);
ker_fill_dcs_cap2 (bcs_dcs);
ker_fill_dcs_cap3 (bcs_dcs);
ker_fill_dcs_cap4 (bcs_dcs);
ker_fill_dcs_cap5 (bcs_dcs);
ker_fill_dcs_cap6 (bcs_dcs);
ker_fill_dcs_cap7 (bcs_dcs);
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_fill_dis_cap0 |
+--------------------------------------------------------------------+
PURPOSE : This function prepares the mandatory fax capabilities.
*/
LOCAL void ker_fill_dis_cap0 (T_BCS_DIS *bcs_dis)
{
#define X t30_data->hdlc_rcv.dis
#define Y bcs_dis->cap0_rcv
TRACE_FUNCTION ("ker_fill_dis_cap0()");
X.v8 = Y.v8;
X.n_byte = Y.n_byte;
X.ready_tx_fax = Y.ready_tx_fax;
X.rec_fax_op = Y.rec_fax_op;
X.data_sig_rate = Y.data_sig_rate;
X.R8_lines_pels = Y.R8_lines_pels;
X.two_dim_coding = Y.two_dim_coding;
X.rec_width = Y.rec_width;
X.max_rec_len = Y.max_rec_len;
X.min_scan_time = Y.min_scan_time;
/*
t30_data->trans_rate = Y.data_sig_rate;
*/
#undef X
#undef Y
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_fill_dis_cap1 |
+--------------------------------------------------------------------+
PURPOSE : This function prepares the extended fax capabilities 1.
*/
LOCAL void ker_fill_dis_cap1 (T_BCS_DIS *bcs_dis)
{
#define X t30_data->hdlc_rcv.dis
#define Y bcs_dis->cap1_rcv
TRACE_FUNCTION ("ker_fill_dis_cap1()");
if (bcs_dis->v_cap1_rcv)
{
X.uncomp_mode = Y.uncomp_mode;
X.err_corr_mode = Y.err_corr_mode;
X.t6_coding = Y.t6_coding;
}
#undef X
#undef Y
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_fill_dis_cap2 |
+--------------------------------------------------------------------+
PURPOSE : This function prepares the extended fax capabilities 2.
*/
LOCAL void ker_fill_dis_cap2 (T_BCS_DIS *bcs_dis)
{
#define X t30_data->hdlc_rcv.dis
#define Y bcs_dis->cap2_rcv
TRACE_FUNCTION ("ker_fill_dis_cap2()");
if (bcs_dis->v_cap2_rcv)
{
/* for future use */
}
#undef X
#undef Y
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_fill_dis_cap3 |
+--------------------------------------------------------------------+
PURPOSE : This function prepares the extended fax capabilities 3.
*/
LOCAL void ker_fill_dis_cap3 (T_BCS_DIS *bcs_dis)
{
#define X t30_data->hdlc_rcv.dis
#define Y bcs_dis->cap3_rcv
TRACE_FUNCTION ("ker_fill_dis_cap3()");
if (bcs_dis->v_cap3_rcv)
{
X.R8_lines = Y.R8_lines;
X.r_300_pels = Y.r_300_pels;
X.R16_lines_pels = Y.R16_lines_pels;
X.i_res_pref = Y.i_res_pref;
X.m_res_pref = Y.m_res_pref;
X.min_scan_time_hr = Y.min_scan_time_hr;
X.sel_polling = Y.sel_polling;
}
#undef X
#undef Y
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_fill_dis_cap4 |
+--------------------------------------------------------------------+
PURPOSE : This function prepares the extended fax capabilities 4.
*/
LOCAL void ker_fill_dis_cap4 (T_BCS_DIS *bcs_dis)
{
#define X t30_data->hdlc_rcv.dis
#define Y bcs_dis->cap4_rcv
TRACE_FUNCTION ("ker_fill_dis_cap4()");
if (bcs_dis->v_cap4_rcv)
{
X.subaddr = Y.subaddr;
X.password = Y.password;
X.ready_tx_doc = Y.ready_tx_doc;
X.bft = Y.bft;
X.dtm = Y.dtm;
X.edi = Y.edi;
}
#undef X
#undef Y
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_fill_dis_cap5 |
+--------------------------------------------------------------------+
PURPOSE : This function prepares the extended fax capabilities 5.
*/
LOCAL void ker_fill_dis_cap5 (T_BCS_DIS *bcs_dis)
{
#define X t30_data->hdlc_rcv.dis
#define Y bcs_dis->cap5_rcv
TRACE_FUNCTION ("ker_fill_dis_cap5()");
if (bcs_dis->v_cap5_rcv)
{
X.btm = Y.btm;
X.ready_tx_mixed = Y.ready_tx_mixed;
X.char_mode = Y.char_mode;
X.mixed_mode = Y.mixed_mode;
}
#undef X
#undef Y
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_fill_dis_cap6 |
+--------------------------------------------------------------------+
PURPOSE : This function prepares the extended fax capabilities 6.
*/
LOCAL void ker_fill_dis_cap6 (T_BCS_DIS *bcs_dis)
{
#define X t30_data->hdlc_rcv.dis
#define Y bcs_dis->cap6_rcv
TRACE_FUNCTION ("ker_fill_dis_cap6()");
if (bcs_dis->v_cap6_rcv)
{
X.proc_mode_26 = Y.proc_mode_26;
X.dig_network_cap = Y.dig_network_cap;
X.duplex = Y.duplex;
X.jpeg = Y.jpeg;
X.full_colour = Y.full_colour;
X.r_12_bits_pel_comp = Y.r_12_bits_pel_comp;
}
#undef X
#undef Y
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_fill_dis_cap7 |
+--------------------------------------------------------------------+
PURPOSE : This function prepares the extended fax capabilities 7.
*/
LOCAL void ker_fill_dis_cap7 (T_BCS_DIS *bcs_dis)
{
#define X t30_data->hdlc_rcv.dis
#define Y bcs_dis->cap7_rcv
TRACE_FUNCTION ("ker_fill_dis_cap7()");
if (bcs_dis->v_cap7_rcv)
{
X.no_subsamp = Y.no_subsamp;
X.cust_illum = Y.cust_illum;
X.cust_gamut = Y.cust_gamut;
X.na_letter = Y.na_letter;
X.na_legal = Y.na_legal;
X.sing_prog_seq_coding_basic = Y.sing_prog_seq_coding_basic;
X.sing_prog_seq_coding_L0 = Y.sing_prog_seq_coding_L0;
}
#undef X
#undef Y
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_fill_dis_info |
+--------------------------------------------------------------------+
PURPOSE : This function fills the hdlc-frame-buffer with the
received DIS-parameters.
*/
GLOBAL void ker_fill_dis_info (T_BCS_DIS *bcs_dis)
{
TRACE_FUNCTION ("ker_fill_dis_info()");
memset (&t30_data->hdlc_rcv.dis, 0xFF,
sizeof (t30_data->hdlc_rcv.dis));
t30_data->hdlc_rcv.v_dis = 1;
ker_fill_dis_cap0 (bcs_dis);
ker_fill_dis_cap1 (bcs_dis);
ker_fill_dis_cap2 (bcs_dis);
ker_fill_dis_cap3 (bcs_dis);
ker_fill_dis_cap4 (bcs_dis);
ker_fill_dis_cap5 (bcs_dis);
ker_fill_dis_cap6 (bcs_dis);
ker_fill_dis_cap7 (bcs_dis);
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_fill_dtc_cap0 |
+--------------------------------------------------------------------+
PURPOSE : This function prepares the mandatory fax capabilities.
*/
LOCAL void ker_fill_dtc_cap0 (T_BCS_DTC *bcs_dtc)
{
#define X t30_data->hdlc_rcv.dtc
#define Y bcs_dtc->cap0_rcv
TRACE_FUNCTION ("ker_fill_dtc_cap0()");
X.v8 = Y.v8;
X.n_byte = Y.n_byte;
X.ready_tx_fax = Y.ready_tx_fax;
X.rec_fax_op = Y.rec_fax_op;
X.data_sig_rate = Y.data_sig_rate;
X.R8_lines_pels = Y.R8_lines_pels;
X.two_dim_coding = Y.two_dim_coding;
X.rec_width = Y.rec_width;
X.max_rec_len = Y.max_rec_len;
X.min_scan_time = Y.min_scan_time;
/*
t30_data->trans_rate = Y.data_sig_rate;
*/
#undef X
#undef Y
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_fill_dtc_cap1 |
+--------------------------------------------------------------------+
PURPOSE : This function prepares the extended fax capabilities 1.
*/
LOCAL void ker_fill_dtc_cap1 (T_BCS_DTC *bcs_dtc)
{
#define X t30_data->hdlc_rcv.dtc
#define Y bcs_dtc->cap1_rcv
TRACE_FUNCTION ("ker_fill_dtc_cap1()");
if (bcs_dtc->v_cap1_rcv)
{
X.uncomp_mode = Y.uncomp_mode;
X.err_corr_mode = Y.err_corr_mode;
X.t6_coding = Y.t6_coding;
}
#undef X
#undef Y
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_fill_dtc_cap2 |
+--------------------------------------------------------------------+
PURPOSE : This function prepares the extended fax capabilities 2.
*/
LOCAL void ker_fill_dtc_cap2 (T_BCS_DTC *bcs_dtc)
{
#define X t30_data->hdlc_rcv.dtc
#define Y bcs_dtc->cap2_rcv
TRACE_FUNCTION ("ker_fill_dtc_cap2()");
if (bcs_dtc->v_cap2_rcv)
{
/* for future use */
}
#undef X
#undef Y
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_fill_dtc_cap3 |
+--------------------------------------------------------------------+
PURPOSE : This function prepares the extended fax capabilities 3.
*/
LOCAL void ker_fill_dtc_cap3 (T_BCS_DTC *bcs_dtc)
{
#define X t30_data->hdlc_rcv.dtc
#define Y bcs_dtc->cap3_rcv
TRACE_FUNCTION ("ker_fill_dtc_cap3()");
if (bcs_dtc->v_cap3_rcv)
{
X.R8_lines = Y.R8_lines;
X.r_300_pels = Y.r_300_pels;
X.R16_lines_pels = Y.R16_lines_pels;
X.i_res_pref = Y.i_res_pref;
X.m_res_pref = Y.m_res_pref;
X.min_scan_time_hr = Y.min_scan_time_hr;
X.sel_polling = Y.sel_polling;
}
#undef X
#undef Y
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_fill_dtc_cap4 |
+--------------------------------------------------------------------+
PURPOSE : This function prepares the extended fax capabilities 4.
*/
LOCAL void ker_fill_dtc_cap4 (T_BCS_DTC *bcs_dtc)
{
#define X t30_data->hdlc_rcv.dtc
#define Y bcs_dtc->cap4_rcv
TRACE_FUNCTION ("ker_fill_dtc_cap4()");
if (bcs_dtc->v_cap4_rcv)
{
X.subaddr = Y.subaddr;
X.password = Y.password;
X.ready_tx_doc = Y.ready_tx_doc;
X.bft = Y.bft;
X.dtm = Y.dtm;
X.edi = Y.edi;
}
#undef X
#undef Y
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_fill_dtc_cap5 |
+--------------------------------------------------------------------+
PURPOSE : This function prepares the extended fax capabilities 5.
*/
LOCAL void ker_fill_dtc_cap5 (T_BCS_DTC *bcs_dtc)
{
#define X t30_data->hdlc_rcv.dtc
#define Y bcs_dtc->cap5_rcv
TRACE_FUNCTION ("ker_fill_dtc_cap5()");
if (bcs_dtc->v_cap5_rcv)
{
X.btm = Y.btm;
X.ready_tx_mixed = Y.ready_tx_mixed;
X.char_mode = Y.char_mode;
X.mixed_mode = Y.mixed_mode;
}
#undef X
#undef Y
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_fill_dtc_cap6 |
+--------------------------------------------------------------------+
PURPOSE : This function prepares the extended fax capabilities 6.
*/
LOCAL void ker_fill_dtc_cap6 (T_BCS_DTC *bcs_dtc)
{
#define X t30_data->hdlc_rcv.dtc
#define Y bcs_dtc->cap6_rcv
TRACE_FUNCTION ("ker_fill_dtc_cap6()");
if (bcs_dtc->v_cap6_rcv)
{
X.proc_mode_26 = Y.proc_mode_26;
X.dig_network_cap = Y.dig_network_cap;
X.duplex = Y.duplex;
X.jpeg = Y.jpeg;
X.full_colour = Y.full_colour;
X.r_12_bits_pel_comp = Y.r_12_bits_pel_comp;
}
#undef X
#undef Y
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_fill_dtc_cap7 |
+--------------------------------------------------------------------+
PURPOSE : This function prepares the extended fax capabilities 7.
*/
LOCAL void ker_fill_dtc_cap7 (T_BCS_DTC *bcs_dtc)
{
#define X t30_data->hdlc_rcv.dtc
#define Y bcs_dtc->cap7_rcv
TRACE_FUNCTION ("ker_fill_dtc_cap7()");
if (bcs_dtc->v_cap7_rcv)
{
X.no_subsamp = Y.no_subsamp;
X.cust_illum = Y.cust_illum;
X.cust_gamut = Y.cust_gamut;
X.na_letter = Y.na_letter;
X.na_legal = Y.na_legal;
X.sing_prog_seq_coding_basic = Y.sing_prog_seq_coding_basic;
X.sing_prog_seq_coding_L0 = Y.sing_prog_seq_coding_L0;
}
#undef X
#undef Y
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_fill_dtc_info |
+--------------------------------------------------------------------+
PURPOSE : This function fills the hdlc-frame-buffer with the
received DTC-parameters.
*/
GLOBAL void ker_fill_dtc_info (T_BCS_DTC *bcs_dtc)
{
TRACE_FUNCTION ("ker_fill_dtc_info()");
memset (&t30_data->hdlc_rcv.dtc, 0xFF,
sizeof (t30_data->hdlc_rcv.dtc));
t30_data->hdlc_rcv.v_dtc = 1;
ker_fill_dtc_cap0 (bcs_dtc);
ker_fill_dtc_cap1 (bcs_dtc);
ker_fill_dtc_cap2 (bcs_dtc);
ker_fill_dtc_cap3 (bcs_dtc);
ker_fill_dtc_cap4 (bcs_dtc);
ker_fill_dtc_cap5 (bcs_dtc);
ker_fill_dtc_cap6 (bcs_dtc);
ker_fill_dtc_cap7 (bcs_dtc);
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_prep_dcs_cap0 |
+--------------------------------------------------------------------+
PURPOSE : This function prepares the mandatory fax capabilities.
*/
LOCAL void ker_prep_dcs_cap0 (T_T30_CAP_REQ *t30_cap_req,
T_BCS_DCS *bcs_dcs)
{
#define X bcs_dcs->cap0_snd
#define Y t30_cap_req->hdlc_info.dcs
TRACE_FUNCTION ("ker_prep_dcs_cap0()");
X.rec_fax_op = Y.rec_fax_op;
X.data_sig_rate = Y.data_sig_rate;
X.R8_lines_pels = Y.R8_lines_pels;
X.two_dim_coding = Y.two_dim_coding;
X.rec_width = Y.rec_width;
X.max_rec_len = Y.max_rec_len;
X.min_scan_time = Y.min_scan_time;
/*
t30_data->trans_rate = Y.data_sig_rate;
*/
#undef X
#undef Y
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_prep_dcs_cap1 |
+--------------------------------------------------------------------+
PURPOSE : This function prepares the extended fax capabilities 1.
*/
LOCAL void ker_prep_dcs_cap1 (T_T30_CAP_REQ *t30_cap_req,
T_BCS_DCS *bcs_dcs)
{
#define X bcs_dcs->cap1_snd
#define Y t30_cap_req->hdlc_info.dcs
TRACE_FUNCTION ("ker_prep_dcs_cap1()");
if (Y.uncomp_mode != 0xFF)
{
bcs_dcs->v_cap1_snd = TRUE;
X.uncomp_mode = Y.uncomp_mode;
X.err_corr_mode = Y.err_corr_mode;
X.frame_size = Y.frame_size;
X.t6_coding = Y.t6_coding;
}
else
bcs_dcs->v_cap1_snd = FALSE;
#undef X
#undef Y
}
#ifdef EXTENDED_FAX_CAP2
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_prep_dcs_cap2 |
+--------------------------------------------------------------------+
PURPOSE : This function prepares the extended fax capabilities 2.
*/
LOCAL void ker_prep_dcs_cap2 (T_T30_CAP_REQ *t30_cap_req,
T_BCS_DCS *bcs_dcs)
{
#define X bcs_dcs->cap2_snd
#define Y t30_cap_req->hdlc_info.dcs
TRACE_FUNCTION ("ker_prep_dcs_cap2()");
if (1) /* for future use */
{
bcs_dcs->v_cap2_snd = TRUE;
}
else
bcs_dcs->v_cap2_snd = FALSE;
#undef X
#undef Y
}
#endif
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_prep_dcs_cap3 |
+--------------------------------------------------------------------+
PURPOSE : This function prepares the extended fax capabilities 3.
*/
LOCAL void ker_prep_dcs_cap3 (T_T30_CAP_REQ *t30_cap_req,
T_BCS_DCS *bcs_dcs)
{
#define X bcs_dcs->cap3_snd
#define Y t30_cap_req->hdlc_info.dcs
TRACE_FUNCTION ("ker_prep_dcs_cap3()");
if (Y.R8_lines != 0xFF)
{
bcs_dcs->v_cap3_snd = TRUE;
X.R8_lines = Y.R8_lines;
X.r_300_pels = Y.r_300_pels;
X.R16_lines_pels = Y.R16_lines_pels;
X.resolution_type = Y.resolution_type;
}
else
bcs_dcs->v_cap3_snd = FALSE;
#undef X
#undef Y
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_prep_dcs_cap4 |
+--------------------------------------------------------------------+
PURPOSE : This function prepares the extended fax capabilities 4.
*/
LOCAL void ker_prep_dcs_cap4 (T_T30_CAP_REQ *t30_cap_req,
T_BCS_DCS *bcs_dcs)
{
#define X bcs_dcs->cap4_snd
#define Y t30_cap_req->hdlc_info.dcs
TRACE_FUNCTION ("ker_prep_dcs_cap4()");
if (Y.subaddr != 0xFF)
{
bcs_dcs->v_cap4_snd = TRUE;
X.subaddr = Y.subaddr;
X.password = Y.password;
X.bft = Y.bft;
X.dtm = Y.dtm;
X.edi = Y.edi;
}
else
bcs_dcs->v_cap4_snd = FALSE;
#undef X
#undef Y
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_prep_dcs_cap5 |
+--------------------------------------------------------------------+
PURPOSE : This function prepares the extended fax capabilities 5.
*/
LOCAL void ker_prep_dcs_cap5 (T_T30_CAP_REQ *t30_cap_req,
T_BCS_DCS *bcs_dcs)
{
#define X bcs_dcs->cap5_snd
#define Y t30_cap_req->hdlc_info.dcs
TRACE_FUNCTION ("ker_prep_dcs_cap5()");
if (Y.btm != 0xFF)
{
bcs_dcs->v_cap5_snd = TRUE;
X.btm = Y.btm;
X.char_mode = Y.char_mode;
X.mixed_mode = Y.mixed_mode;
}
else
bcs_dcs->v_cap5_snd = FALSE;
#undef X
#undef Y
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_prep_dcs_cap6 |
+--------------------------------------------------------------------+
PURPOSE : This function prepares the extended fax capabilities 6.
*/
LOCAL void ker_prep_dcs_cap6 (T_T30_CAP_REQ *t30_cap_req,
T_BCS_DCS *bcs_dcs)
{
#define X bcs_dcs->cap6_snd
#define Y t30_cap_req->hdlc_info.dcs
TRACE_FUNCTION ("ker_prep_dcs_cap6()");
if (Y.proc_mode_26 != 0xFF)
{
bcs_dcs->v_cap6_snd = TRUE;
X.proc_mode_26 = Y.proc_mode_26;
X.dig_network_cap = Y.dig_network_cap;
X.duplex = Y.duplex;
X.jpeg = Y.jpeg;
X.full_colour = Y.full_colour;
X.huffman_tables = Y.huffman_tables;
X.r_12_bits_pel_comp = Y.r_12_bits_pel_comp;
}
else
bcs_dcs->v_cap6_snd = FALSE;
#undef X
#undef Y
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_prep_dcs_cap7 |
+--------------------------------------------------------------------+
PURPOSE : This function prepares the extended fax capabilities 7.
*/
LOCAL void ker_prep_dcs_cap7 (T_T30_CAP_REQ *t30_cap_req,
T_BCS_DCS *bcs_dcs)
{
#define X bcs_dcs->cap7_snd
#define Y t30_cap_req->hdlc_info.dcs
TRACE_FUNCTION ("ker_prep_dcs_cap7()");
if (Y.no_subsamp != 0xFF)
{
bcs_dcs->v_cap7_snd = TRUE;
X.no_subsamp = Y.no_subsamp;
X.cust_illum = Y.cust_illum;
X.cust_gamut = Y.cust_gamut;
X.na_letter = Y.na_letter;
X.na_legal = Y.na_legal;
X.sing_prog_seq_coding_basic = Y.sing_prog_seq_coding_basic;
X.sing_prog_seq_coding_L0 = Y.sing_prog_seq_coding_L0;
}
else
bcs_dcs->v_cap7_snd = FALSE;
#undef X
#undef Y
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_prep_dcs |
+--------------------------------------------------------------------+
PURPOSE : This function fills the hdlc-frame-buffer with the
DCS-parameters to send.
*/
LOCAL void ker_prep_dcs (T_T30_CAP_REQ *t30_cap_req,
T_BCS_DCS *bcs_dcs)
{
TRACE_FUNCTION ("ker_prep_dcs()");
ker_prep_dcs_cap0 (t30_cap_req, bcs_dcs);
ker_prep_dcs_cap1 (t30_cap_req, bcs_dcs);
#ifdef EXTENDED_FAX_CAP2
ker_prep_dcs_cap2 (t30_cap_req, bcs_dcs);
#endif
ker_prep_dcs_cap3 (t30_cap_req, bcs_dcs);
ker_prep_dcs_cap4 (t30_cap_req, bcs_dcs);
ker_prep_dcs_cap5 (t30_cap_req, bcs_dcs);
ker_prep_dcs_cap6 (t30_cap_req, bcs_dcs);
ker_prep_dcs_cap7 (t30_cap_req, bcs_dcs);
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_prep_dis_cap0 |
+--------------------------------------------------------------------+
PURPOSE : This function prepares the mandatory fax capabilities.
*/
LOCAL void ker_prep_dis_cap0 (T_BCS_DIS *bcs_dis)
{
#define X bcs_dis->cap0_rcv
#define Y t30_data->hdlc_snd.dis
TRACE_FUNCTION ("ker_prep_dis_cap0()");
X.v8 = Y.v8;
X.n_byte = Y.n_byte;
X.ready_tx_fax = Y.ready_tx_fax;
X.rec_fax_op = Y.rec_fax_op;
X.data_sig_rate = Y.data_sig_rate;
X.R8_lines_pels = Y.R8_lines_pels;
X.two_dim_coding = Y.two_dim_coding;
X.rec_width = Y.rec_width;
X.max_rec_len = Y.max_rec_len;
X.min_scan_time = Y.min_scan_time;
/*
t30_data->trans_rate = Y.data_sig_rate;
*/
#undef X
#undef Y
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_prep_dis_cap1 |
+--------------------------------------------------------------------+
PURPOSE : This function prepares the extended fax capabilities 1.
*/
LOCAL void ker_prep_dis_cap1 (T_BCS_DIS *bcs_dis)
{
#define X bcs_dis->cap1_rcv
#define Y t30_data->hdlc_snd.dis
TRACE_FUNCTION ("ker_prep_dis_cap1()");
if (Y.uncomp_mode != 0xFF)
{
bcs_dis->v_cap1_rcv = TRUE;
X.uncomp_mode = Y.uncomp_mode;
X.err_corr_mode = Y.err_corr_mode;
X.t6_coding = Y.t6_coding;
}
else
bcs_dis->v_cap1_rcv = FALSE;
#undef X
#undef Y
}
#ifdef EXTENDED_FAX_CAP2
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_prep_dis_cap2 |
+--------------------------------------------------------------------+
PURPOSE : This function prepares the extended fax capabilities 2.
*/
LOCAL void ker_prep_dis_cap2 (T_BCS_DIS *bcs_dis)
{
#define X bcs_dis->cap2_rcv
#define Y t30_data->hdlc_snd.dis
TRACE_FUNCTION ("ker_prep_dis_cap2()");
if (1) /* for future use */
{
bcs_dis->v_cap2_rcv = TRUE;
}
else
bcs_dis->v_cap2_rcv = FALSE;
#undef X
#undef Y
}
#endif
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_prep_dis_cap3 |
+--------------------------------------------------------------------+
PURPOSE : This function prepares the extended fax capabilities 3.
*/
LOCAL void ker_prep_dis_cap3 (T_BCS_DIS *bcs_dis)
{
#define X bcs_dis->cap3_rcv
#define Y t30_data->hdlc_snd.dis
TRACE_FUNCTION ("ker_prep_dis_cap3()");
if (Y.R8_lines != 0xFF)
{
bcs_dis->v_cap3_rcv = TRUE;
X.R8_lines = Y.R8_lines;
X.r_300_pels = Y.r_300_pels;
X.R16_lines_pels = Y.R16_lines_pels;
X.i_res_pref = Y.i_res_pref;
X.m_res_pref = Y.m_res_pref;
X.min_scan_time_hr = Y.min_scan_time_hr;
X.sel_polling = Y.sel_polling;
}
else
bcs_dis->v_cap3_rcv = FALSE;
#undef X
#undef Y
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_prep_dis_cap4 |
+--------------------------------------------------------------------+
PURPOSE : This function prepares the extended fax capabilities 4.
*/
LOCAL void ker_prep_dis_cap4 (T_BCS_DIS *bcs_dis)
{
#define X bcs_dis->cap4_rcv
#define Y t30_data->hdlc_snd.dis
TRACE_FUNCTION ("ker_prep_dis_cap4()");
if (Y.subaddr != 0xFF)
{
bcs_dis->v_cap4_rcv = TRUE;
X.subaddr = Y.subaddr;
X.password = Y.password;
X.ready_tx_doc = Y.ready_tx_doc;
X.bft = Y.bft;
X.dtm = Y.dtm;
X.edi = Y.edi;
}
else
bcs_dis->v_cap4_rcv = FALSE;
#undef X
#undef Y
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_prep_dis_cap5 |
+--------------------------------------------------------------------+
PURPOSE : This function prepares the extended fax capabilities 5.
*/
LOCAL void ker_prep_dis_cap5 (T_BCS_DIS *bcs_dis)
{
#define X bcs_dis->cap5_rcv
#define Y t30_data->hdlc_snd.dis
TRACE_FUNCTION ("ker_prep_dis_cap5()");
if (Y.btm != 0xFF)
{
bcs_dis->v_cap5_rcv = TRUE;
X.btm = Y.btm;
X.ready_tx_mixed = Y.ready_tx_mixed;
X.char_mode = Y.char_mode;
X.mixed_mode = Y.mixed_mode;
}
else
bcs_dis->v_cap5_rcv = FALSE;
#undef X
#undef Y
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_prep_dis_cap6 |
+--------------------------------------------------------------------+
PURPOSE : This function prepares the extended fax capabilities 6.
*/
LOCAL void ker_prep_dis_cap6 (T_BCS_DIS *bcs_dis)
{
#define X bcs_dis->cap6_rcv
#define Y t30_data->hdlc_snd.dis
TRACE_FUNCTION ("ker_prep_dis_cap6()");
if (Y.proc_mode_26 != 0xFF)
{
bcs_dis->v_cap6_rcv = TRUE;
X.proc_mode_26 = Y.proc_mode_26;
X.dig_network_cap = Y.dig_network_cap;
X.duplex = Y.duplex;
X.jpeg = Y.jpeg;
X.full_colour = Y.full_colour;
X.r_12_bits_pel_comp = Y.r_12_bits_pel_comp;
}
else
bcs_dis->v_cap6_rcv = FALSE;
#undef X
#undef Y
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_prep_dis_cap7 |
+--------------------------------------------------------------------+
PURPOSE : This function prepares the extended fax capabilities 7.
*/
LOCAL void ker_prep_dis_cap7 (T_BCS_DIS *bcs_dis)
{
#define X bcs_dis->cap7_rcv
#define Y t30_data->hdlc_snd.dis
TRACE_FUNCTION ("ker_prep_dis_cap7()");
if (Y.no_subsamp != 0xFF)
{
bcs_dis->v_cap7_rcv = TRUE;
X.no_subsamp = Y.no_subsamp;
X.cust_illum = Y.cust_illum;
X.cust_gamut = Y.cust_gamut;
X.na_letter = Y.na_letter;
X.na_legal = Y.na_legal;
X.sing_prog_seq_coding_basic = Y.sing_prog_seq_coding_basic;
X.sing_prog_seq_coding_L0 = Y.sing_prog_seq_coding_L0;
}
else
bcs_dis->v_cap7_rcv = FALSE;
#undef X
#undef Y
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_prep_dis |
+--------------------------------------------------------------------+
PURPOSE : This function fills the hdlc-frame-buffer with the
DIS-parameters to send.
*/
LOCAL void ker_prep_dis (T_BCS_DIS *bcs_dis)
{
TRACE_FUNCTION ("ker_prep_dis()");
ker_prep_dis_cap0 (bcs_dis);
ker_prep_dis_cap1 (bcs_dis);
#ifdef EXTENDED_FAX_CAP2
ker_prep_dis_cap2 (bcs_dis);
#endif
ker_prep_dis_cap3 (bcs_dis);
ker_prep_dis_cap4 (bcs_dis);
ker_prep_dis_cap5 (bcs_dis);
ker_prep_dis_cap6 (bcs_dis);
ker_prep_dis_cap7 (bcs_dis);
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_prep_dtc_cap0 |
+--------------------------------------------------------------------+
PURPOSE : This function prepares the mandatory fax capabilities.
*/
LOCAL void ker_prep_dtc_cap0 (T_T30_CAP_REQ *t30_cap_req,
T_BCS_DTC *bcs_dtc)
{
#define X bcs_dtc->cap0_rcv
#define Y t30_cap_req->hdlc_info.dtc
TRACE_FUNCTION ("ker_prep_dtc_cap0()");
X.v8 = Y.v8;
X.n_byte = Y.n_byte;
X.ready_tx_fax = Y.ready_tx_fax;
X.rec_fax_op = Y.rec_fax_op;
X.data_sig_rate = Y.data_sig_rate;
X.R8_lines_pels = Y.R8_lines_pels;
X.two_dim_coding = Y.two_dim_coding;
X.rec_width = Y.rec_width;
X.max_rec_len = Y.max_rec_len;
X.min_scan_time = Y.min_scan_time;
/*
t30_data->trans_rate = Y.data_sig_rate;
*/
#undef X
#undef Y
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_prep_dtc_cap1 |
+--------------------------------------------------------------------+
PURPOSE : This function prepares the extended fax capabilities 1.
*/
LOCAL void ker_prep_dtc_cap1 (T_T30_CAP_REQ *t30_cap_req,
T_BCS_DTC *bcs_dtc)
{
#define X bcs_dtc->cap1_rcv
#define Y t30_cap_req->hdlc_info.dtc
TRACE_FUNCTION ("ker_prep_dtc_cap1()");
if (Y.uncomp_mode != 0xFF)
{
bcs_dtc->v_cap1_rcv = TRUE;
X.uncomp_mode = Y.uncomp_mode;
X.err_corr_mode = Y.err_corr_mode;
X.t6_coding = Y.t6_coding;
}
else
bcs_dtc->v_cap1_rcv = FALSE;
#undef X
#undef Y
}
#ifdef EXTENDED_FAX_CAP2
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_prep_dtc_cap2 |
+--------------------------------------------------------------------+
PURPOSE : This function prepares the extended fax capabilities 2.
*/
LOCAL void ker_prep_dtc_cap2 (T_T30_CAP_REQ *t30_cap_req,
T_BCS_DTC *bcs_dtc)
{
#define X bcs_dtc->cap2_rcv
#define Y t30_cap_req->hdlc_info.dtc
TRACE_FUNCTION ("ker_prep_dtc_cap2()");
if (1) /* for future use */
{
bcs_dtc->v_cap2_rcv = TRUE;
}
else
bcs_dtc->v_cap2_rcv = FALSE;
#undef X
#undef Y
}
#endif
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_prep_dtc_cap3 |
+--------------------------------------------------------------------+
PURPOSE : This function prepares the extended fax capabilities 3.
*/
LOCAL void ker_prep_dtc_cap3 (T_T30_CAP_REQ *t30_cap_req,
T_BCS_DTC *bcs_dtc)
{
#define X bcs_dtc->cap3_rcv
#define Y t30_cap_req->hdlc_info.dtc
TRACE_FUNCTION ("ker_prep_dtc_cap3()");
if (Y.R8_lines != 0xFF)
{
bcs_dtc->v_cap3_rcv = TRUE;
X.R8_lines = Y.R8_lines;
X.r_300_pels = Y.r_300_pels;
X.R16_lines_pels = Y.R16_lines_pels;
X.i_res_pref = Y.i_res_pref;
X.m_res_pref = Y.m_res_pref;
X.min_scan_time_hr = Y.min_scan_time_hr;
X.sel_polling = Y.sel_polling;
}
else
bcs_dtc->v_cap3_rcv = FALSE;
#undef X
#undef Y
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_prep_dtc_cap4 |
+--------------------------------------------------------------------+
PURPOSE : This function prepares the extended fax capabilities 4.
*/
LOCAL void ker_prep_dtc_cap4 (T_T30_CAP_REQ *t30_cap_req,
T_BCS_DTC *bcs_dtc)
{
#define X bcs_dtc->cap4_rcv
#define Y t30_cap_req->hdlc_info.dtc
TRACE_FUNCTION ("ker_prep_dtc_cap4()");
if (Y.subaddr != 0xFF)
{
bcs_dtc->v_cap4_rcv = TRUE;
X.subaddr = Y.subaddr;
X.password = Y.password;
X.ready_tx_doc = Y.ready_tx_doc;
X.bft = Y.bft;
X.dtm = Y.dtm;
X.edi = Y.edi;
}
else
bcs_dtc->v_cap4_rcv = FALSE;
#undef X
#undef Y
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_prep_dtc_cap5 |
+--------------------------------------------------------------------+
PURPOSE : This function prepares the extended fax capabilities 5.
*/
LOCAL void ker_prep_dtc_cap5 (T_T30_CAP_REQ *t30_cap_req,
T_BCS_DTC *bcs_dtc)
{
#define X bcs_dtc->cap5_rcv
#define Y t30_cap_req->hdlc_info.dtc
TRACE_FUNCTION ("ker_prep_dtc_cap5()");
if (Y.btm != 0xFF)
{
bcs_dtc->v_cap5_rcv = TRUE;
X.btm = Y.btm;
X.ready_tx_mixed = Y.ready_tx_mixed;
X.char_mode = Y.char_mode;
X.mixed_mode = Y.mixed_mode;
}
else
bcs_dtc->v_cap5_rcv = FALSE;
#undef X
#undef Y
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_prep_dtc_cap6 |
+--------------------------------------------------------------------+
PURPOSE : This function prepares the extended fax capabilities 6.
*/
LOCAL void ker_prep_dtc_cap6 (T_T30_CAP_REQ *t30_cap_req,
T_BCS_DTC *bcs_dtc)
{
#define X bcs_dtc->cap6_rcv
#define Y t30_cap_req->hdlc_info.dtc
TRACE_FUNCTION ("ker_prep_dtc_cap6()");
if (Y.proc_mode_26 != 0xFF)
{
bcs_dtc->v_cap6_rcv = TRUE;
X.proc_mode_26 = Y.proc_mode_26;
X.dig_network_cap = Y.dig_network_cap;
X.duplex = Y.duplex;
X.jpeg = Y.jpeg;
X.full_colour = Y.full_colour;
X.r_12_bits_pel_comp = Y.r_12_bits_pel_comp;
}
else
bcs_dtc->v_cap6_rcv = FALSE;
#undef X
#undef Y
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_prep_dtc_cap7 |
+--------------------------------------------------------------------+
PURPOSE : This function prepares the extended fax capabilities 7.
*/
LOCAL void ker_prep_dtc_cap7 (T_T30_CAP_REQ *t30_cap_req,
T_BCS_DTC *bcs_dtc)
{
#define X bcs_dtc->cap7_rcv
#define Y t30_cap_req->hdlc_info.dtc
TRACE_FUNCTION ("ker_prep_dtc_cap7()");
if (Y.no_subsamp != 0xFF)
{
bcs_dtc->v_cap7_rcv = TRUE;
X.no_subsamp = Y.no_subsamp;
X.cust_illum = Y.cust_illum;
X.cust_gamut = Y.cust_gamut;
X.na_letter = Y.na_letter;
X.na_legal = Y.na_legal;
X.sing_prog_seq_coding_basic = Y.sing_prog_seq_coding_basic;
X.sing_prog_seq_coding_L0 = Y.sing_prog_seq_coding_L0;
}
else
bcs_dtc->v_cap7_rcv = FALSE;
#undef X
#undef Y
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_prep_dtc |
+--------------------------------------------------------------------+
PURPOSE : This function fills the hdlc-frame-buffer with the
DTC-parameters to send.
*/
LOCAL void ker_prep_dtc (T_T30_CAP_REQ *t30_cap_req,
T_BCS_DTC *bcs_dtc)
{
TRACE_FUNCTION ("ker_prep_dtc()");
ker_prep_dtc_cap0 (t30_cap_req, bcs_dtc);
ker_prep_dtc_cap1 (t30_cap_req, bcs_dtc);
#ifdef EXTENDED_FAX_CAP2
ker_prep_dtc_cap2 (t30_cap_req, bcs_dtc);
#endif
ker_prep_dtc_cap3 (t30_cap_req, bcs_dtc);
ker_prep_dtc_cap4 (t30_cap_req, bcs_dtc);
ker_prep_dtc_cap5 (t30_cap_req, bcs_dtc);
ker_prep_dtc_cap6 (t30_cap_req, bcs_dtc);
ker_prep_dtc_cap7 (t30_cap_req, bcs_dtc);
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_req_csi |
+--------------------------------------------------------------------+
PURPOSE : This function prepares the optional command CSI.
*/
LOCAL void ker_req_csi (void)
{
MCAST (csi, BCS_CSI);
TRACE_FUNCTION ("ker_req_csi()");
if (t30_data->hdlc_snd.c_csi)
{
csi->fcf = BCS_CSI;
csi->c_cld_sub_nr = t30_data->hdlc_snd.c_csi;
memcpy (csi->cld_sub_nr, t30_data->hdlc_snd.csi,
sizeof (t30_data->hdlc_snd.csi));
sig_ker_bcs_bdat_req (FINAL_NO);
}
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_req_nsf |
+--------------------------------------------------------------------+
PURPOSE : This function prepares the optional command NSF.
*/
LOCAL void ker_req_nsf (void)
{
MCAST (nsf, BCS_NSF);
TRACE_FUNCTION ("ker_req_nsf()");
if (t30_data->hdlc_snd.c_nsf)
{
nsf->fcf = BCS_NSF;
nsf->non_std_fac.l_non_std_fac = t30_data->hdlc_snd.c_nsf << 3;
nsf->non_std_fac.o_non_std_fac = 0;
memcpy (nsf->non_std_fac.b_non_std_fac, t30_data->hdlc_snd.nsf,
sizeof (t30_data->hdlc_snd.nsf));
sig_ker_bcs_bdat_req (FINAL_NO);
}
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_res_cig |
+--------------------------------------------------------------------+
PURPOSE : This function prepares the optional command CIG.
*/
LOCAL void ker_res_cig (T_T30_CAP_REQ *t30_cap_req)
{
MCAST (cig, BCS_CIG);
TRACE_FUNCTION ("ker_res_cig()");
if (t30_cap_req->hdlc_info.c_cig)
{
cig->fcf = BCS_CIG;
cig->c_clg_sub_nr = t30_cap_req->hdlc_info.c_cig;
memcpy (cig->clg_sub_nr, t30_cap_req->hdlc_info.cig,
sizeof (t30_cap_req->hdlc_info.cig));
sig_ker_bcs_bdat_req (FINAL_NO);
}
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_res_crp |
+--------------------------------------------------------------------+
PURPOSE : This function prepares the optional command CRP.
*/
LOCAL void ker_res_crp (T_T30_CAP_REQ *t30_cap_req)
{
MCAST (crp, BCS_CRP);
TRACE_FUNCTION ("ker_res_crp()");
if (t30_cap_req->hdlc_info.crp)
{
crp->fcf = BCS_CRP;
sig_ker_bcs_bdat_req (FINAL_NO);
}
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_res_nsc |
+--------------------------------------------------------------------+
PURPOSE : This function prepares the optional command NSC.
*/
LOCAL void ker_res_nsc (T_T30_CAP_REQ *t30_cap_req)
{
MCAST (nsc, BCS_NSC);
TRACE_FUNCTION ("ker_res_nsc()");
if (t30_cap_req->hdlc_info.c_nsc)
{
nsc->fcf = BCS_NSC;
nsc->non_std_fac.l_non_std_fac = t30_cap_req->hdlc_info.c_nsc << 3;
nsc->non_std_fac.o_non_std_fac = 0;
memcpy (nsc->non_std_fac.b_non_std_fac, t30_cap_req->hdlc_info.nsc,
sizeof (t30_cap_req->hdlc_info.nsc));
sig_ker_bcs_bdat_req (FINAL_NO);
}
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_res_nss |
+--------------------------------------------------------------------+
PURPOSE : This function prepares the optional command NSS.
*/
LOCAL void ker_res_nss (T_T30_CAP_REQ *t30_cap_req)
{
MCAST (nss, BCS_NSS);
TRACE_FUNCTION ("ker_res_nss()");
if (t30_cap_req->hdlc_info.c_nss)
{
nss->fcf = BCS_NSS;
nss->non_std_fac.l_non_std_fac = t30_cap_req->hdlc_info.c_nss << 3;
nss->non_std_fac.o_non_std_fac = 0;
memcpy (nss->non_std_fac.b_non_std_fac, t30_cap_req->hdlc_info.nss,
sizeof (t30_cap_req->hdlc_info.nss));
sig_ker_bcs_bdat_req (FINAL_NO);
}
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_res_pwd_poll |
+--------------------------------------------------------------------+
PURPOSE : This function prepares the optional command PWD_POLL.
*/
LOCAL void ker_res_pwd_poll (T_T30_CAP_REQ *t30_cap_req)
{
MCAST (pwd, BCS_PWD_POLL);
TRACE_FUNCTION ("ker_res_pwd_poll()");
if (t30_cap_req->hdlc_info.c_pwd)
{
pwd->fcf = BCS_PWD_POLL;
pwd->c_pm_pword = t30_cap_req->hdlc_info.c_pwd;
memcpy (pwd->pm_pword, t30_cap_req->hdlc_info.pwd,
sizeof (t30_cap_req->hdlc_info.pwd));
sig_ker_bcs_bdat_req (FINAL_NO);
}
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_res_pwd_snd |
+--------------------------------------------------------------------+
PURPOSE : This function prepares the optional command PWD_SND.
*/
LOCAL void ker_res_pwd_snd (T_T30_CAP_REQ *t30_cap_req)
{
MCAST (pwd, BCS_PWD_SND);
TRACE_FUNCTION ("ker_res_pwd_snd()");
if (t30_cap_req->hdlc_info.c_pwd)
{
pwd->fcf = BCS_PWD_SND;
pwd->c_sm_pword = t30_cap_req->hdlc_info.c_pwd;
memcpy (pwd->sm_pword, t30_cap_req->hdlc_info.pwd,
sizeof (t30_cap_req->hdlc_info.pwd));
sig_ker_bcs_bdat_req (FINAL_NO);
}
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_res_sep |
+--------------------------------------------------------------------+
PURPOSE : This function prepares the optional command SEP.
*/
LOCAL void ker_res_sep (T_T30_CAP_REQ *t30_cap_req)
{
MCAST (sep, BCS_SEP);
TRACE_FUNCTION ("ker_res_sep()");
if (t30_cap_req->hdlc_info.c_sep)
{
sep->fcf = BCS_SEP;
sep->c_pm_sub_addr = t30_cap_req->hdlc_info.c_sep;
memcpy (sep->pm_sub_addr, t30_cap_req->hdlc_info.sep,
sizeof (t30_cap_req->hdlc_info.sep));
sig_ker_bcs_bdat_req (FINAL_NO);
}
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_res_sub |
+--------------------------------------------------------------------+
PURPOSE : This function prepares the optional command SUB.
*/
LOCAL void ker_res_sub (T_T30_CAP_REQ *t30_cap_req)
{
MCAST (sub, BCS_SUB);
TRACE_FUNCTION ("ker_res_sub()");
if (t30_cap_req->hdlc_info.c_sub)
{
sub->fcf = BCS_SUB;
sub->c_sub_addr = t30_cap_req->hdlc_info.c_sub;
memcpy (sub->sub_addr, t30_cap_req->hdlc_info.sub,
sizeof (t30_cap_req->hdlc_info.sub));
sig_ker_bcs_bdat_req (FINAL_NO);
}
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_res_tsi |
+--------------------------------------------------------------------+
PURPOSE : This function prepares the optional command TSI.
*/
LOCAL void ker_res_tsi (T_T30_CAP_REQ *t30_cap_req)
{
MCAST (tsi, BCS_TSI);
TRACE_FUNCTION ("ker_res_tsi()");
if (t30_cap_req->hdlc_info.c_tsi)
{
tsi->fcf = BCS_TSI;
tsi->c_tra_sub_nr = t30_cap_req->hdlc_info.c_tsi;
memcpy (tsi->tra_sub_nr, t30_cap_req->hdlc_info.tsi,
sizeof (t30_cap_req->hdlc_info.tsi));
sig_ker_bcs_bdat_req (FINAL_NO);
}
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_send_dcs |
+--------------------------------------------------------------------+
PURPOSE : This function sends command DCS to FAD.
*/
GLOBAL void ker_send_dcs (T_T30_CAP_REQ *t30_cap_req)
{
TRACE_FUNCTION ("ker_send_dcs()");
ker_res_nss (t30_cap_req);
ker_res_pwd_snd (t30_cap_req);
ker_res_sub (t30_cap_req);
ker_res_crp (t30_cap_req);
ker_res_tsi (t30_cap_req);
{
MCAST (bcs_dcs, BCS_DCS);
bcs_dcs->fcf = BCS_DCS;
ker_prep_dcs (t30_cap_req, bcs_dcs);
sig_ker_bcs_bdat_req (FINAL_YES);
}
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_send_dis |
+--------------------------------------------------------------------+
PURPOSE : This function sends command DIS to FAD.
*/
GLOBAL void ker_send_dis (void)
{
MCAST (dis, BCS_DIS);
TRACE_FUNCTION ("ker_send_dis()");
ker_req_nsf ();
ker_req_csi ();
dis->fcf = BCS_DIS;
ker_prep_dis (dis);
sig_ker_bcs_bdat_req (FINAL_YES);
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_send_dtc |
+--------------------------------------------------------------------+
PURPOSE : This function sends command DTC to FAD.
*/
GLOBAL void ker_send_dtc (T_T30_CAP_REQ *t30_cap_req)
{
MCAST (dtc, BCS_DTC);
TRACE_FUNCTION ("ker_send_dtc()");
ker_res_nsc (t30_cap_req);
ker_res_pwd_poll (t30_cap_req);
ker_res_sep (t30_cap_req);
ker_res_cig (t30_cap_req);
dtc->fcf = BCS_DTC;
ker_prep_dtc(t30_cap_req, dtc);
sig_ker_bcs_bdat_req (FINAL_YES);
}
GLOBAL void snd_t30_sgn_ind(UBYTE sgn)
{
PALLOC (t30_sgn_ind, T30_SGN_IND);
t30_sgn_ind->sgn = sgn;
PSENDX (MMI, t30_sgn_ind);
}
GLOBAL void snd_complete_ind(UBYTE cmpl)
{
PALLOC (t30_cmpl_ind, T30_CMPL_IND);
t30_cmpl_ind->cmpl = cmpl;
PSENDX (MMI, t30_cmpl_ind);
SET_STATE (KER, T30_IDLE);
}
GLOBAL void snd_error_ind(USHORT cause)
{
PALLOC (t30_error_ind, T30_ERROR_IND);
t30_error_ind->cause = cause;
PSENDX (MMI, t30_error_ind);
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_send_err |
+--------------------------------------------------------------------+
PURPOSE : This function sends an error cause to MMI.
*/
GLOBAL void ker_send_err (USHORT cause)
{
TRACE_FUNCTION ("ker_send_err()");
TIMERSTOP (T1_INDEX);
TIMERSTOP (T2_INDEX);
TIMERSTOP (T4_INDEX);
memset (&t30_data->hdlc_rcv, 0, sizeof (T_hdlc_info));
SET_STATE (KER, T30_IDLE);
snd_error_ind(cause);
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERP |
| STATE : code ROUTINE : TDCexpand |
+--------------------------------------------------------------------+
PURPOSE :
*/
LOCAL void TDCexpand(T_sdu *sdu, T_desc_list2 *desc_list, BOOL final)
{
T_desc2 *desc;
USHORT dataSize, di = 0, si, len;
UBYTE *p;
ULONG *pLast = &desc_list->first;
if (t30_data->dti_data_ind)
{
while (*pLast)
{
desc = (T_desc2*)pLast;
pLast = (ULONG*)desc->next;
}
}
len = sdu->l_buf >> 3;
dataSize = len;
if (t30_data->TDC_doli_pending EQ TRUE)
dataSize++;
p = &sdu->buf[sdu->o_buf >> 3];
for (si = 0; si < len-1; si++)
if (p[si] EQ TDC_DLE)
dataSize++;
if (final)
dataSize += 2;
dataSize = (dataSize/t30_data->frames_per_prim + 1) * t30_data->frames_per_prim;
MALLOC(desc, (USHORT)(sizeof(T_desc2) + dataSize));
desc->next = 0;
*pLast = (ULONG)desc;
p = &sdu->buf[sdu->o_buf >> 3];
if (t30_data->TDC_doli_pending EQ TRUE)
{
desc->buffer[di++] = TDC_DLE;
if (p[0] EQ TDC_DLE)
desc->buffer[di++] = TDC_SUB;/*lint !e661 (Warning -- Possible access of out-of-bounds pointer)*/
else
{
desc->buffer[di++] = TDC_DLE;/*lint !e661 (Warning -- Possible access of out-of-bounds pointer)*/
desc->buffer[di++] = p[0];/*lint !e661 !e662 (Warning -- Possible access/creation of out-of-bounds pointer)*/
}
t30_data->TDC_doli_pending = FALSE;
si = 1;
}
else
si = 0;
while (si < len-1)
{
desc->buffer[di++] = p[si];
if (p[si] EQ TDC_DLE)
{
if (p[si+1] EQ TDC_DLE)
{
desc->buffer[di++] = TDC_SUB;/*lint !e661 (Warning -- Possible access of out-of-bounds pointer)*/
si++;
}
else
desc->buffer[di++] = TDC_DLE;/*lint !e661 (Warning -- Possible access of out-of-bounds pointer)*/
}
si++;
}
if (si EQ len-1 AND p[si] EQ TDC_DLE)
t30_data->TDC_doli_pending = TRUE;
else
desc->buffer[di++] = p[si];/*lint !e661 !e662 (Warning -- Possible access/creation of out-of-bounds pointer)*/
if (final)
{
desc->buffer[di++] = TDC_DLE;/*lint !e661 !e662 (Warning -- Possible access/creation of out-of-bounds pointer)*/
desc->buffer[di++] = TDC_ETX;/*lint !e661 !e662 (Warning -- Possible access/creation of out-of-bounds pointer)*/
}
desc_list->list_len += desc->len = di;
desc->size = desc->len;
desc->offset = 0;
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERP |
| STATE : code ROUTINE : TDCcompress |
+--------------------------------------------------------------------+
PURPOSE : Move contents of T_desc_list2 into T_sdu w/o TDCs
*/
GLOBAL UBYTE TDCcompress(T_desc2 *desc, T_sdu *sdu)
{
T_desc2 *desc_next;
UBYTE *d, *s, *s_end, ready = 0;
s_end = sdu->buf + t30_data->frames_per_prim;
s = sdu->buf + (sdu->l_buf >> 3);
if (t30_data->dti_data_req_ptr EQ NULL)
d = desc->buffer;
else
d = t30_data->dti_data_req_ptr;
while (s < s_end AND desc AND !ready)
{
if (t30_data->TDC_upli_pending)
{
switch (*d)
{
case TDC_EOM: /* end of document (message) */
TRACE_EVENT ("DTE->DCE:EOM");
t30_data->sgn_ind = SGN_EOM; /* cmhT30_PPMRcvd(SGN_EOM) */
ready = READY_UPLI_PAGE;
break;
case TDC_EOP: /* end of document and session (procedure) */
TRACE_EVENT ("DTE->DCE:EOP");
t30_data->sgn_ind = SGN_EOP; /* cmhT30_PPMRcvd(SGN_EOP) */
ready = READY_UPLI_PAGE;
break;
case TDC_ETX:
/*
* end of page or as acknowledge to a sent DLE,CAN (cancel Phase C)
*/
TRACE_EVENT ("DTE->DCE:ETX");
t30_data->sgn_ind = SGN_EOP;
ready = READY_UPLI_PAGE;
break;
case TDC_MPS: /* end of page, more pages to follow */
TRACE_EVENT ("DTE->DCE:MPS");
t30_data->sgn_ind = SGN_MPS; /* cmhT30_PPMRcvd(SGN_MPS) */
ready = READY_UPLI_PAGE;
break;
case TDC_SOH: /* SOH (start of header) in packet mode */
TRACE_EVENT ("DTE->DCE:SOH");
break;
case TDC_ETB: /* ETB (end of text block) in packet mode */
TRACE_EVENT ("DTE->DCE:ETB");
break;
case TDC_OVR: /* overrun error marker */
TRACE_EVENT ("DTE->DCE:OVERRUN in DTE");
/*
* add call to cmhT30 here overrun handling ??
*/
break;
case TDC_BCR: /* buffer credit request */
TRACE_EVENT ("DTE->DCE:REQ CREDIT");
switch (GET_STATE (KER))
{
case T30_SND_MSG:
break;
case T30_RCV_MSG:
break;
}
break;
case TDC_PRI: /* procedural interrupt signal */
TRACE_EVENT ("DTE->DCE:PRI");
t30_data->sgn_ind = SGN_NOT_USED; /* cmhT30_PRIRcvd() */
break;
case TDC_DC2: /* receive buffer status: buffer is empty */
TRACE_EVENT ("DTE->DCE:DC2");
t30_data->sgn_ind = SGN_NOT_USED; /* cmhT30_DTERdy2Rcv() */
break;
case TDC_CAN: /* Requests DCE/DTE to stop delivering Phase C data */
TRACE_EVENT ("DTE->DCE:CANCEL");
/*
* add call to cmhT30 here
*/
break;
default:
if ('a' <= *d AND *d <= 'n') /* interpret as fax cap setting */
{
TRACE_EVENT ("DTE->DCE:FAX CAPS");
/*
* add call to cmhT30 here for setup the fax caps
*/
}
else
{
*s = TDC_DLE;
s++;
sdu->l_buf += 8;
if (*d EQ TDC_SUB) /* double the TDC_DLE */
{
*s = *d;
s++;
sdu->l_buf += 8;
}
t30_data->TDC_upli_pending = FALSE;
d++;
if (d EQ desc->buffer + desc->len)
{
desc_next = (T_desc2 *)desc->next;
MFREE(desc);
desc = desc_next;
d = desc->buffer;
}
}
}
t30_data->TDC_upli_pending = FALSE;
}
else
{
if (*d EQ TDC_DLE)
{
t30_data->TDC_upli_pending = TRUE;
}
else
{
*s = *d;
s++;
sdu->l_buf += 8;
}
d++;
if (d EQ desc->buffer + desc->len)
{
desc_next = (T_desc2 *)desc->next;
MFREE(desc);
desc = desc_next;
d = desc->buffer;
}
}
if (desc AND !ready)
t30_data->dti_data_req_ptr = d;
else
t30_data->dti_data_req_ptr = NULL;
}
if (s EQ s_end)
ready |= READY_UPLI_SDU;
return ready;
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERP |
| STATE : code ROUTINE : check_ignore |
+--------------------------------------------------------------------+
PURPOSE :
*/
LOCAL BOOL check_ignore(T_FAD_DATA_IND *fad_data_ind)
{
if (!fad_data_ind)
return TRUE;
if (ker_check_rtc(fad_data_ind) EQ RTC_YES AND !fad_data_ind->final)
{
PALLOC (fad_ignore_req, FAD_IGNORE_REQ);
PSENDX (FAD, fad_ignore_req);
SET_STATE(KER, T30_RCV_RDYF);
return TRUE;
}
return FALSE;
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERP |
| STATE : code ROUTINE : append_dti_data_ind |
+--------------------------------------------------------------------+
PURPOSE :
*/
LOCAL BOOL append_dti_data_ind(T_FAD_DATA_IND *fad_data_ind)
{
TRACE_FUNCTION ("append_dti_data_ind()");
TDCexpand(&fad_data_ind->sdu, &t30_data->dti_data_ind->desc_list2, fad_data_ind->final);
return check_ignore(fad_data_ind);
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERP |
| STATE : code ROUTINE : create_dti_data_ind |
+--------------------------------------------------------------------+
PURPOSE :
*/
LOCAL BOOL create_dti_data_ind(T_FAD_DATA_IND *fad_data_ind)
{
PALLOC (dti_data_ind, DTI2_DATA_IND);
TRACE_FUNCTION ("create_dti_data_ind()");
dti_data_ind->link_id = t30_data->link_id;
dti_data_ind->parameters.p_id = DTI_PID_UOS;
dti_data_ind->parameters.st_lines.st_flow = DTI_FLOW_ON;
dti_data_ind->parameters.st_lines.st_line_sa = DTI_SA_ON;
dti_data_ind->parameters.st_lines.st_line_sb = DTI_SB_ON;
dti_data_ind->parameters.st_lines.st_break_len = DTI_BREAK_OFF;
dti_data_ind->desc_list2.list_len = 0;
dti_data_ind->desc_list2.first = (ULONG)NULL;
if (fad_data_ind)
{
t30_data->dti_data_ind = dti_data_ind;
TDCexpand(&fad_data_ind->sdu, &dti_data_ind->desc_list2, fad_data_ind->final);
return check_ignore(fad_data_ind);
}
else
{
t30_data->dti_data_ind_empty = dti_data_ind;
return FALSE;
}
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERP |
| STATE : code ROUTINE : prepare_dti_data_ind|
+--------------------------------------------------------------------+
PURPOSE :
*/
GLOBAL void prepare_dti_data_ind(T_FAD_DATA_IND *fad_data_ind)
{
BOOL ignore;
TRACE_FUNCTION ("prepare_dti_data_ind()");
t30_data->dti_data_ind_final = fad_data_ind->final;
if (!t30_data->dti_data_ind)
ignore = create_dti_data_ind(fad_data_ind);
else
ignore = append_dti_data_ind(fad_data_ind);
if (!ignore AND !t30_data->dti_data_ind_final)
{
PALLOC (fad_ready_req, FAD_READY_REQ);
PSENDX (FAD, fad_ready_req);
}
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERP |
| STATE : code ROUTINE : snd_dti_data_ind |
+--------------------------------------------------------------------+
PURPOSE :
*/
GLOBAL void snd_dti_data_ind(T_DTI2_DATA_IND **dti_data_ind)
{
TRACE_FUNCTION ("snd_dti_data_ind()");
dti_send_data(
t30_hDTI,
T30_DTI_UP_DEF_INSTANCE,
T30_DTI_UP_INTERFACE,
T30_DTI_UP_CHANNEL,
*dti_data_ind
);
*dti_data_ind = NULL;
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERP |
| STATE : code ROUTINE : snd_t30_phase_ind |
+--------------------------------------------------------------------+
PURPOSE :
*/
GLOBAL void snd_t30_phase_ind(UBYTE phase)
{
TRACE_FUNCTION ("snd_t30_phase_ind()");
{
PALLOC (t30_phase_ind, T30_PHASE_IND);
t30_phase_ind->phase = phase;
PSENDX (MMI, t30_phase_ind);
}
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERP |
| STATE : code ROUTINE : dti_connect_setup |
+--------------------------------------------------------------------+
PURPOSE : call dti_open() to establish a dtilib connection
*/
GLOBAL void dti_connect_setup(T_T30_DTI_REQ *t30_dti_req)
{
TRACE_FUNCTION ("dti_connect_setup()");
t30_data->link_id = t30_dti_req->link_id;
if (t30_data->dti_state NEQ DTI_CLOSED)
{
dti_disconnect();
}
create_dti_data_ind(NULL); /* send empty primitive to set flow control */
/*
* open new dti library communication channel
*/
t30_data->dti_state = DTI_SETUP;
if (dti_open(
t30_hDTI,
T30_DTI_UP_DEF_INSTANCE,
T30_DTI_UP_INTERFACE,
T30_DTI_UP_CHANNEL,
T30_DTI_UPLINK_QUEUE_SIZE,
t30_dti_req->dti_direction,
DTI_QUEUE_UNUSED,
DTI_VERSION_10,
(U8*)t30_dti_req->entity_name,
t30_dti_req->link_id
))
return;
t30_data->dti_state = DTI_CLOSED;
snd_t30_dti_cnf(T30_DISCONNECT_DTI);
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERP |
| STATE : code ROUTINE : dti_connect_open |
+--------------------------------------------------------------------+
PURPOSE : acknowledge established a dtilib connection
*/
GLOBAL void dti_connect_open()
{
TRACE_FUNCTION ("dti_connect_open()");
if(t30_data->dti_state EQ DTI_SETUP)
{
t30_data->dti_state = DTI_IDLE;
snd_t30_dti_cnf(T30_CONNECT_DTI);
snd_dti_ready_ind();
}
else
{
TRACE_ERROR ("dti connection is not in SETUP state!");
}
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERP |
| STATE : code ROUTINE : snd_t30_dti_ind |
+--------------------------------------------------------------------+
PURPOSE :
*/
LOCAL void snd_t30_dti_ind(void)
{
TRACE_FUNCTION ("snd_t30_dti_ind()");
{
PALLOC (t30_dti_ind, T30_DTI_IND);
PSENDX (MMI, t30_dti_ind);
}
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERP |
| STATE : code ROUTINE : dti_connect_close |
+--------------------------------------------------------------------+
PURPOSE : react to closing of dtilib connection
*/
GLOBAL void dti_connect_close()
{
TRACE_FUNCTION ("ti_connect_close()");
if(t30_data->dti_state NEQ DTI_CLOSED)
{
t30_data->dti_state = DTI_CLOSED;
snd_t30_dti_ind();
}
else
{
TRACE_ERROR ("dti connection is not in SETUP/OPEN state!");
}
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERP |
| STATE : code ROUTINE : dti_connect_close |
+--------------------------------------------------------------------+
PURPOSE : close down a dtilib connection
*/
GLOBAL void dti_disconnect()
{
TRACE_FUNCTION ("dti_disconnect()");
/*
* shut down dtilib communication
*/
if(t30_data->dti_state NEQ DTI_CLOSED)
{
dti_close(
t30_hDTI,
T30_DTI_UP_DEF_INSTANCE,
T30_DTI_UP_INTERFACE,
T30_DTI_UP_CHANNEL,
FALSE
);
t30_data->dti_state = DTI_CLOSED;
}
else
{
TRACE_ERROR ("dti connection is not in SETUP/OPEN state!");
}
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERP |
| STATE : code ROUTINE : snd_t30_dti_cnf |
+--------------------------------------------------------------------+
PURPOSE :
*/
GLOBAL void snd_t30_dti_cnf(UBYTE dti_conn)
{
TRACE_FUNCTION ("snd_t30_dti_cnf()");
{
PALLOC (t30_dti_cnf, T30_DTI_CNF);
t30_dti_cnf->dti_conn = dti_conn;
PSENDX (MMI, t30_dti_cnf);
}
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERP |
| STATE : code ROUTINE : snd_dti_ready_ind |
+--------------------------------------------------------------------+
PURPOSE :
*/
GLOBAL void snd_dti_ready_ind(void)
{
TRACE_FUNCTION ("snd_dti_ready_ind()");
dti_start(
t30_hDTI,
T30_DTI_UP_DEF_INSTANCE,
T30_DTI_UP_INTERFACE,
T30_DTI_UP_CHANNEL
);
}
#if defined _SIMULATION_ || defined KER_DEBUG_BCS || defined KER_DEBUG_MSG
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411) MODULE : T30_KERF |
| STATE : code ROUTINE : ker_debug |
+--------------------------------------------------------------------+
PURPOSE : This function debugs the contents of a buffer.
*/
GLOBAL void ker_debug(CHAR *header, UBYTE *buf, USHORT len)
{
#define BYTE2HEXSTR(B, H) {UBYTE b, *a = (UBYTE*)(H);\
b = (((UBYTE)(B)) >> 4) & 0x0F;\
if (b > 9) b += 'A'-10; else b += '0'; *a = b;\
b = ((UBYTE)(B)) & 0x0F;\
if (b > 9) b += 'A'-10; else b += '0'; *(a+1) = b;}
USHORT i, k = 0;
char trace_buf[81];
/*
TRACE_EVENT("====== KERNEL DEBUG START ======");
*/
TRACE_EVENT_P2("%s: len=%d", header, len);
for (i = 0; i < len; i++)
{
BYTE2HEXSTR(buf[i], &trace_buf[k]);
k += 2;
if (k EQ 80)
break;
}
trace_buf[k] = 0;
TRACE_EVENT(trace_buf);
/*
TRACE_EVENT("====== KERNEL DEBUG END ======");
*/
}
#endif