⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 init.c

📁 话带数据中传真解调程序
💻 C
📖 第 1 页 / 共 2 页
字号:

  for(i=0x32; i<=0x35; i++)
	x_status[i] = 0;

  for(i=0x38; i<=0x3f; i++)
	x_status[i] = 0;

  rx_v8bis_cl_msg[0] = 0;
  rx_v8bis_cl_msg[0xd] = 0;
  rx_v8bis_cl_msg[0xe] = 0;
  rx_v8bis_cl_msg[0xf] = 0;
  rx_v8bis_cl_msg[0x10] = 0;
}

//-------------------------------------------------------------
// I/O related UART initialisation.

void io_init_task(void)
{ 

  io_state = 0;
  io_old_state = 0;
  io_uart_status = 0;
  io_uart_msr = 0;
  io_remote_control_mode = 0;
  io_at_esc_detect = 0;
  io_at_esc_state = 0;

  //UART_SetQue (0,0,0,0);
  io_init_dce_tx_fifo();
  io_init_dce_rx_fifo();
  UART_ri_off();
  UART_cts_on();
  UART_cd_off();
  UART_dsr_on();

  //io_sync_power_up_init();
  io_send_break_to_remote = 0;

}

void ll_init_na (void)
{
  H_dial_tone_hole_time = 0xff;
  H_max_auto_answer_ring_count = 0xff;
  H_max_no_answer_timeout = 0xff;
  H_comma_pause_duration_limit = 0xff;

  H_ringer_impedance_relay_flag = 0;
  H_pulse_dial_make_time = 0x27;
  H_pulse_dial_break_time = 0x3d;
  H_min_busy_cadence_on_time = 0x12;
  H_max_busy_cadence_on_time = 0x3c;
  H_min_busy_cadence_off_time = 0x12;
  H_max_busy_cadence_off_time = 0x3c;
  H_answer_tone_validation_time = 0xa;
  H_min_no_answer_timeout = 1;
  H_detect_busy_tone_during_dial_tone = 1;
  H_dial_tone_or_call_progress_filter = 5;
  H_TAD_tx_level_dB = 0xa;

  // Copied fromJamie's base country init. 
  H_shunt_relay_on_time = 5;
}


//-------------------------------------------------------------------------
// Internationalisation stuff.
//

// Country specific stuff.

void ll_init_uk(void)
{ 

   H_blacklist_or_delay_flag = 0;
   H_off_hook_restrictions = 0;

   H_pulse_dial_make_time = 0x22;
   H_pulse_dial_break_time = 0x44;
   H_DTMF_high_tone_level_ndB = 6;
   H_min_DTMF_dial_speed = 0x5a;
   H_max_DTMF_dial_speed = 0x5a;
   H_min_auto_answer_ring_count = 1;
   H_max_auto_answer_ring_count = 4;
   H_detect_number_unavailable = 1;
   H_guard_tone_type = 2;
   H_hook_flash_time = 7;
   H_min_blind_dial_pause = 4;
   H_max_blind_dial_pause = 4;
   H_min_no_answer_timeout = 0x1e;
   H_max_no_answer_timeout = 0x3c;
   H_min_dial_pause_time = 4;
   H_max_dial_pause_time = 8;
   H_transmit_level_ndB = 9;
   H_DTMF_high_low_tone_level_difference_dB = 3;
   H_dial_tone_or_call_progress_filter = 3;
   H_DC_loop_VI_characteristics_relay_flag = 1;

   strcpy( country_name, "United Kingdom");
}

void ll_init_jp(void)
{ 
  H_max_blind_dial_pause = 255;
  H_pulse_dial_make_time =  34;
  H_pulse_dial_break_time = 66;
  H_DTMF_high_tone_level_ndB = 7;
  H_min_DTMF_dial_speed	= 70;
  H_dial_tone_hole_time	= 250;
  H_ring_count_reset_delay = 80;
  H_min_ring_cadence_off_time = 40;
  H_answer_tone_validation_time	= 50;
  H_blacklist_or_delay_flag =  1;
  H_blacklist_duration = 3;
  H_max_failure_count_before_blacklist = 3;
  H_troubled_call_delay = 0;
  H_erroneous_call_delay = 0;
  H_hook_flash_time = 50;
  H_min_blind_dial_pause = 4;
  H_min_no_answer_timeout = 35;
  H_max_no_answer_timeout = 59;
  H_transmit_level_ndB = 14;
  H_max_failed_attempts_stage_1	= 0;
  H_TAD_tx_level_dB = 13;
  S(0x7f) = 1;
  strcpy( country_name, "Japan");
}

void ll_init_czech (void) 
{

  homol[0xEE7 - HBASE] = 0x28;
  homol[0xEE8 - HBASE] = 0x3C;
  homol[0xF1C - HBASE] = 8;
  homol[0xF22 - HBASE] = 0x23;
  homol[0xEEF - HBASE] = 0x1E;
  homol[0xF21 - HBASE] = 6;
  homol[0xEEA - HBASE] = 6;
  homol[0xF1E - HBASE] = 2;
  homol[0xF15 - HBASE] = 0xA;
  homol[0xEEB - HBASE] = 0x5F;
  homol[0xEEC - HBASE] = 0x5F;
  homol[0xF0D - HBASE] = 2;
  homol[0xF0E - HBASE] = 0x14;
  homol[0xF11 - HBASE] = 2;
  homol[0xF12 - HBASE] = 0x14;
  homol[0xEF9 - HBASE] = 2;
  homol[0xEED - HBASE] = 0x23;
  homol[0xEF0 - HBASE] = 0x50;
  homol[0xEF1 - HBASE] = 2;
  homol[0xEF2 - HBASE] = 6;
  homol[0xF0C - HBASE] = 0xA;
  homol[0xEFE - HBASE] = 1;
  homol[0xF1A - HBASE] = 0xC;
  homol[0xF16 - HBASE] = 1;
  homol[0xEFF - HBASE] = 0xC;
  homol[0xF00 - HBASE] = 1;
  homol[0xF01 - HBASE] = 1;
  homol[0xF02 - HBASE] = 1;
  homol[0xF03 - HBASE] = 0xF0;
  homol[0xF2F - HBASE] = 2;

  strcpy( country_name, "Czech Rebuplic");

}

void ll_init_ita(void)
{

  H_busy_detect_disable = 0;
  H_pulse_dial_make_time = 0x29;
  H_pulse_dial_break_time = 0x41;
  H_min_DTMF_dial_speed = 0x5a;
  H_max_DTMF_dial_speed = 0x5a;
  H_call_progress_detection_threshold_ndB = 0x32;
  H_dial_tone_hole_time = 0xa;
  H_ring_count_reset_delay = 0x50;
  H_min_auto_answer_ring_count = 1;
  H_max_auto_answer_ring_count = 4;
  H_busy_cycles_threshold = 2;
  H_answer_tone_validation_time = 0x14;
  H_blacklist_or_delay_flag = 1;
  H_max_failure_count_before_blacklist = 4;
  H_blacklist_duration = 6;
  H_blind_dial_flag = 1;
  H_min_blind_dial_pause = 4;
  H_guard_tone_type = 2;
  H_off_hook_restrictions = 2;
  H_hook_flash_time = 9;

  H_max_blind_dial_pause = 0xa;
  H_min_no_answer_timeout = 0x1e;
  H_max_no_answer_timeout = 0x3c;
  H_transmit_level_ndB = 9; 
  H_dial_tone_validation_time = 0x16;
  H_dial_tone_or_call_progress_filter = 4;
  H_dial_tone_detection_threshold_dB = 0x28;
  H_dial_modifier_validation = 1;
  H_data_or_fax_carrier_rx_threshold_dB = 0x24;

  strcpy( country_name, "Italy");
}

void x_init_international (void)
{

  if ((S (0x75) & 0xf0) == 0x50)
    H_min_ring_cadence_on_time = 0xf;
  else
    H_min_ring_cadence_on_time = 0xe;

  H_pulse_dial_make_time = 0x24;
  H_pulse_dial_break_time = 0x40;
  H_pulse_dial_digit_pattern = 0x1;
  H_DTMF_high_tone_level_ndB = 6;
  H_min_DTMF_dial_speed = 0x32;
  H_max_DTMF_dial_speed = 0x96;
  H_call_progress_detection_threshold_ndB = 0x2b;
  H_dial_tone_detection_delay = 0;
  H_dial_tone_hole_time = 0x32;
  H_ring_count_reset_delay = 0x3c;
  H_min_auto_answer_ring_count = 1;
  H_max_auto_answer_ring_count = 15;
  H_min_ring_signal_period = 0x12;
  H_max_ring_signal_period = 0x50;
  H_max_no_carrier_disconnect_time = 0xff;

  strcpy(country_name, "");

  H_max_failed_attempts_anywhere = 0xff;
  H_min_ring_cadence_off_time = 0x1e;
  H_min_busy_cadence_on_time = 0;
  H_max_busy_cadence_on_time = 0;
  H_busy_cycles_threshold = 4;
  H_min_busy_cadence_off_time = 0;
  H_max_busy_cadence_off_time = 0;
  H_detect_number_unavailable = 0;
  H_answer_tone_validation_time = 0xa;
  H_blacklist_or_delay_flag = 0;
  H_max_failure_count_before_blacklist = 5;
  H_troubled_call_delay = 1;
  H_ineffective_call_delay = 1;
  H_erroneous_call_delay = 1;
  H_blacklist_duration = 0xc;
  H_overcurrent_sense_validation_time = 0;
  H_calling_tone_flag = 1;
  H_blind_dial_flag = 1;
  H_busy_detect_disable = 1;
  H_guard_tone_type = 0;
  H_bell_modes_permitted = 1;
  H_off_hook_restrictions = 0;
  H_shunt_relay_on_time = 5;
  H_hook_flash_time = 0x32;
  H_min_blind_dial_pause = 2;
  H_max_blind_dial_pause = 0x41;
  H_min_no_answer_timeout = 0x23;
  H_max_no_answer_timeout = 0x41;
  H_min_dial_pause_time = 2;
  H_max_dial_pause_time = 41;
  H_min_no_carrier_disconnect_time = 1;
  H_transmit_level_ndB =0xa;
  H_TAD_rx_gain = 3;
  H_full_wave_ring_detect = 1;
  H_max_failed_attempts_stage_1 = 1;
  H_erronous_call_increment_count = 1;
  H_dial_tone_validation_time = 25;
  H_detect_busy_tone_during_dial_tone = 0;
  H_DTMF_high_low_tone_level_difference_dB = 2;
  H_not_local_phone_detection_in_speakerphone = 0;
  H_not_pulse_dial_flag = 0;
  H_dial_tone_or_call_progress_filter = 1;
  H_dial_tone_detection_threshold_dB = 0x2b;
  H_disallow_ABCD_dialing = 0;
  H_comma_pause_duration_limit = 0x1e;
  H_TAD_tx_level_dB = 0xa;
  H_data_or_fax_carrier_rx_threshold_dB = 0x25;
  H_data_or_fax_answer_detection_threshold_dB = 0x2b;
  H_dialtone_level = 0; // try 2? Should be 0.
  H_fax_rx_threshold_dB = 0x2b;
  H_disallow_mixed_tone_and_pulse_dial = 0;
  H_ringer_impedance_relay_flag = 0;
  H_DC_loop_VI_characteristics_relay_flag = 0;
  H_DC_loop_limiting_relay_flag = 0;
  H_real_complex_impedance_setting = 0;
  H_mercury_cioca_MSB_rx_gain = 0x88;
  H_mercury_cioca_LSB_hybrid = 0x80;
  H_mercury_ciocb_MSB_tx_gain = 0x6b;
  H_mercury_ciocb_LSB_BOM_control = 0x1e;
  H_mercury_ciocb_MSB_tx_gain_in_TAD_mode = 0x13;
  H_mercury_ciocb_MSB_tx_gain_in_FDSP_mode = 0xcd;
  H_dial_modifier_validation = 0;
  H_0x7f = 0;
  H_0xd6 = 0;

  if (x_dsp_mars)
    H_full_wave_ring_detect = 1;

  country_code = read_eeprom (0);
  switch (country_code) {
  case COUNTRY_UNITED_KINGDOM:
	ll_init_uk();
    break;
  case COUNTRY_JAPAN:
	ll_init_jp();
    break;
  case COUNTRY_NORTH_AMERICA:
	ll_init_na();
    break;
  case COUNTRY_CZECH_REPUBLIC:
	ll_init_czech();
	break;
  case COUNTRY_ITALY:
	ll_init_ita();
	break;
  default:
	printf("Sorry your country is not yet fully supported! ");
	printf("Defaulting to North America.\n");
	ll_init_na();
  }

  //ll_init_ctr21();
  ll_init_vendor ();

  if (S (0xd6) == 1)
    {
	  //ll_init_tbr21();
    }
  // Does some registry based stuff to do with country key.
  //ll_update_parameters ();

  S_line_transmit_level = H_transmit_level_ndB;
  if (H_DTMF_high_tone_level_ndB < 2)
    H_DTMF_high_tone_level_ndB = 2;

  PRINTF ("Country is set to %s\n", country_name);
}


// FIXME.  This needs to be rechecked.  I was very tired when translating.

void x_init_international_default (void)
{
  S (0x35) = H_guard_tone_type;

  if (H_calling_tone_flag == 0)
    S_data_calling_tone = 0;

  if (!H_bell_modes_permitted
      || (country_code != COUNTRY_NORTH_AMERICA
	  && country_code != COUNTRY_CANADA))
    S (0x3a) = 0;

  if (S_connect_completion_timeout < H_min_no_answer_timeout)
    S_connect_completion_timeout = H_min_no_answer_timeout;
  if (S_connect_completion_timeout > H_max_no_answer_timeout)
    S_connect_completion_timeout = H_max_no_answer_timeout;

  H_no_dialtone_timeout_with_W_modifier = S_connect_completion_timeout;

  switch (country_code)
    {
    case COUNTRY_AUSTRALIA:  // 27300
      S_wait_before_dialing = 4;
      S_DTMF_dial_speed = 95;
      break;
    case COUNTRY_DENMARK:  // 2733d
      S_DTMF_dial_speed = 90;
      break;
    case COUNTRY_FINLAND:  // 27313
      S_auto_disconnect_delay = 2;
      break;
    case COUNTRY_FRANCE:  // 2731f
      S_connect_completion_timeout = 140;
      S_auto_disconnect_delay = 2;
      S_DTMF_dial_speed = 80;
      H_no_dialtone_timeout_with_W_modifier = 10;
      break;
    case COUNTRY_GERMANY:  // 2733d
    case COUNTRY_NETHERLANDS:  // 2733d
      S_DTMF_dial_speed = 90;
      break;
    case COUNTRY_NEW_ZEALAND:  // 2734f
      S_auto_disconnect_delay = 15;
      break;
    case COUNTRY_NORWAY: // 27346
      S_auto_disconnect_delay = 9;
      break;
    case COUNTRY_SPAIN: // 27358
      H_no_dialtone_timeout_with_W_modifier = 11;
      break;
    case COUNTRY_SWEDEN: // 27398
      S_DTMF_dial_speed = 70;
      break;
    case COUNTRY_UNITED_KINGDOM: // 27443
      S_wait_before_dialing = 4;
      S_DTMF_dial_speed = 85;
      break;
    case COUNTRY_JAPAN: // 27438
      S_data_calling_tone = 0;
      break;
    case COUNTRY_KOREA: // 27425
      S_wait_before_dialing = 4;
      S_connect_completion_timeout = 45;
    case COUNTRY_PORTUGAL: // 27412
      S_auto_disconnect_delay = 2;
      S_inactivity_timer = 4;
      break;
    case COUNTRY_NORTH_AMERICA: // 27438
      S_data_calling_tone = 0;
      break;
    case COUNTRY_IRELAND: // 27391
      S_wait_before_dialing = 4;
      S_DTMF_dial_speed = 0x46;
      break;
    }

  //cell_nec_rx ();

  if (S_DTMF_dial_speed < H_min_DTMF_dial_speed)
    S_DTMF_dial_speed = H_min_DTMF_dial_speed;
  if (S_DTMF_dial_speed > H_max_DTMF_dial_speed)
    S_DTMF_dial_speed = H_max_DTMF_dial_speed;

  if (S_wait_before_dialing < H_min_blind_dial_pause)
    S_wait_before_dialing = H_min_blind_dial_pause;
  if (S_wait_before_dialing > H_max_blind_dial_pause)
    S_wait_before_dialing = H_max_blind_dial_pause;

  if (S_comma_dial_time < H_min_dial_pause_time)
    S_comma_dial_time = H_min_dial_pause_time;
  if (S_comma_dial_time > H_max_dial_pause_time)
    S_comma_dial_time = H_max_dial_pause_time;
}

void io_sync_power_up_init(void)
{
  V80_Options[0] = 0;
  V80_Options[1] = 0x63;
  V80_Options[2] = 0x63;
  V80_Options[3] = 0x63;
  V80_Options[4] = 0;
  V80_Options[5] = 0;
  V80_Options[6] = 0x63;
  V80_Options[7] = 0x63;
  V80_Options[8] = 0;
  V80_Options[9] = 4;
  V80_Options[10] = 0;
  V80_Options[11] = 1;
  v80_tx_timer = 0;
  v80_rx_timer = 0;
  v80_retrain = 0;
}

/* All that effort to initialise from tables, then this insists on
   changing it again!  No I haven't a clue why.  Europe in general shows
   strongly here... */

void ll_init_vendor (void)
{

  H_shunt_relay_on_time = 255;
  H_transmit_level_ndB = 10;
  H_overcurrent_sense_validation_time = 2;
  H_busy_cycles_threshold = 4;

  switch (country_code)
    {
    case COUNTRY_BELGIUM:
    case COUNTRY_DENMARK:
    case COUNTRY_FINLAND:
    case COUNTRY_FRANCE:
    case COUNTRY_GERMANY:
    case COUNTRY_ITALY:
    case COUNTRY_NORWAY:
    case COUNTRY_SPAIN:
    case COUNTRY_SWITZERLAND:
    case COUNTRY_UNITED_KINGDOM:
    case COUNTRY_AUSTRIA:
    case COUNTRY_PORTUGAL:
    case COUNTRY_IRELAND:
    case COUNTRY_GREECE:
      S (0xd6) = 1;
      break;

    case COUNTRY_NETHERLANDS:
      H_shunt_relay_on_time = 27;
      S (0xd6) = 1;
      break;

    case COUNTRY_SWEDEN:
      H_transmit_level_ndB = 13;
      S (0xd6) = 1;
      break;

    case COUNTRY_EUROPE:
	  ll_init_uk();
      S (0xd6) = 1;
      strcpy(country_name, "Ctr21");
      break;

    case COUNTRY_AUSTRALIA:
      H_shunt_relay_on_time = 30;
      break;

    case COUNTRY_JAPAN:
      H_DTMF_high_tone_level_ndB = 6;
      H_transmit_level_ndB = 15;
      break;

    case COUNTRY_NORTH_AMERICA:
    case COUNTRY_CANADA:
      H_pulse_dial_make_time = 0x27;
      H_pulse_dial_break_time = 0x3d;
      H_DTMF_high_tone_level_ndB = 2;
      break;
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -