FreeCalypso > hg > fc-tourmaline
view src/g23m-fad/t30/t30_kerf.c @ 265:e57bfdadf49a
mmiIcons.c: fix bogus icnType in incoming_call_animate[]
The incoming call animation icons are actually drawn in 256-color format,
but they were incorrectly declared as BMP_FORMAT_32BIT_COLOUR in the
incoming_call_animate[] array. Why were they still getting displayed
correctly despite this bogosity? Answer: because the
mmi_dialogs_animation_new_CB() function overrides the icon bitmap
type to 0x02, which means 256-color format. Needless to say, the
icon format should be made correct at the source of the data, and
at some later point we may need to remove the override from the
animation display function.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Mon, 17 May 2021 07:18:36 +0000 |
parents | fa8dc04885d8 |
children |
line wrap: on
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