亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? dp_call.c

?? 話帶數據中傳真解調程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* * Call handling stuff, mostly to do with dialling. * * Copyright 1999 Pavel Machek * Copyright 1999 Jamie Lokier * Copyright 1999 R.J.M. Close * * Can be distributed under GPL */#include "dp_call.h"void dp_DTMF_dial_cmd (unsigned char digit){  dp_write_dsp_ram (0x17, S_DTMF_dial_speed);  dp_write_dsp_ram (0x18, S_DTMF_dial_speed);  //PRINTF ("dial_speed = %d\n", S_DTMF_dial_speed);  if (cell_active)    {      dp_write_dsp_ram (0x11, 5 + H_DTMF_high_tone_level_ndB);      dp_write_dsp_ram (0x12, 5 + H_DTMF_high_tone_level_ndB			+ H_DTMF_high_low_tone_level_difference_dB);    }  else    {      dp_write_dsp_ram (0x11, H_DTMF_high_tone_level_ndB);      dp_write_dsp_ram (0x12, H_DTMF_high_tone_level_ndB			+ H_DTMF_high_low_tone_level_difference_dB);    }  dp_modem_command (0x0a, digit, 0);}// Pulse dial!void dp_pulse_dial_cmd(int arg){  int al, bl;  printf( "Dialing %d: ", arg );  al = homol[1];  bl = homol[2];  if (1 /* byte_59E6E & 0x40 */) {    al >>= 1;    bl = 0x32;    bl -= al;  }  dp_write_dsp_ram(0x19, al);  dp_write_dsp_ram(0x1a, bl);  dp_write_dsp_ram(0x1b, (1 ? 0x384 : 0x2f3 ));  dp_modem_command(0x0b, arg, 0);  printf( "\n" );}void dp_set_lb_filter (void){  unsigned char al, bl;  if (dp_threshold < 0x23)	dp_write_dsp_ram (0x760, dp_threshold + 2);  else	dp_write_dsp_ram (0x760, dp_threshold + 4);  switch (H_dial_tone_or_call_progress_filter) {  case 0:	al = 0;  case 2:	al = 0x20;  case 3:	al = 0x30;  case 4:	al = 0x40;  case 5:	al = 0x50;  case 6:	al = 0x60;  default:	al = 0x10;  }  //if (S(0x40) != 0) // this is set from read_eeprom(1), well dodgy!  //	al = 0x70;  // Yuk, look up table.  // lea esi, loc_iircoef[eax*2], array of unsigned short.  for (bl = 0; bl < 16; bl++) {	// catch any errors as array has 128 elements.	if(al > 128) {	  printf ("dp_set_lb_filter: error: max size of iircoef exceeded!\n");      break;	}	// Write word to DSP.	dp_write_dsp_ram (bl + 0x764, iircoef[al]);	// Point to next word.	al++;  }}// Set up tone detection.void dp_detect_tones_cmd (void){  dp_set_lb_filter();  dp_write_dsp_ram(0x26, H_data_or_fax_answer_detection_threshold_dB);  dp_write_dsp_ram(0x1c, 0x2b9b);  dp_write_dsp_ram(0x1d, 0x11cd);  dp_write_dsp_ram(0x1e, 0x3d0a);  dp_write_dsp_ram(0x1f, 0x3b57);  dp_write_dsp_ram(0x20, 0x0851);  dp_write_dsp_ram(0x21, 0xf190);  dp_write_dsp_ram(0x22, 0xedc8);  dp_write_dsp_ram(0x23, 0xef70);  dp_write_dsp_ram(0x24, 0xe8ce);  dp_write_dsp_ram(0x25, 0xe782);  if (S(0x38) != 0xA)	{	  dp_write_dsp_ram(0x0fc0, 0x172b);	  dp_write_dsp_ram(0x0fc1, 0xf4bc);	  dp_modem_command (8, 0xc, 0);	}  else	dp_modem_command (8, 0xa, 0);    dp_dial_tone_timer = x_current_time();  dp_quiet_answer_timer = x_current_time();  dp_busy_tone_timer = x_current_time();  dp_busy_state = 0;  dp_tone_state = 0;  peak_energy = 0;  peak_busy_energy = 0;}// Detects the dial tone. // Currently doesn't work quite right! Needs tidying up.bool dp_dial_tone_detected (void){  unsigned int eax, ecx;  unsigned int energy1, energy2;  bool state_changed = false;  energy2 = dp_read_dsp_ram(0x354);  energy1 = dp_read_dsp_ram(0x794);  #if LT_DEBUG_TONES  // Diagnostics.  printf    ("dp_dial_tone_detected: dp_tone_state = %d, energy2 = %x, energy1 = %x, peak = %x.\n",     dp_tone_state, energy2, energy1, peak_energy);  //printf ("H_dial_tone_validation_time is %d.\n", H_dial_tone_validation_time);  // normally it is 25.#endif  switch (dp_tone_state){  case 0:    eax = dp_read_dsp_ram(0x3A);    //printf("Read %x from DSP RAM(0x3a).\n", eax); 	if ((eax & 0x1000) != 0) {	  // Reset some stuff and go on to the next phase of tone detection.	  dp_tone_on_time = 0;	  dp_tone_off_time = 0;	  dp_dialtone_cycles = 0;	  dp_tone_timer = x_current_time();	  dp_tone_state = 1;	}  loc_2A989:	// printf ("Reset dp_dial_tone_timer!\n");	dp_dial_tone_timer = x_current_time();	goto loc_2A994;  case 1:    eax = dp_read_dsp_ram (0x3a);#if LT_DEBUG_TONES	// Diagnostics.	printf	  ("dp_dial_tone_detected: dp_read_dsp_ram (0x3a) = %x\n", eax);#endif	//if ((dp_read_dsp_ram (0x3a) & 0x1000) == 0) goto loc_2A8EB;	if ((eax & 0x1000) == 0) goto loc_2A8EB;	if ((unsigned int)(peak_energy / 2) >= energy1) goto loc_2A909;  loc_2A8EB:	dp_tone_on_time = x_elapsed_time(dp_tone_timer);	dp_tone_state = 2;    state_changed = true;  loc_2A909:	if ((country_code != COUNTRY_ITALY)		&& (energy1 > (unsigned int)(peak_energy / 4))		&& ((energy2 / (energy1 + 1)) > 5)) {	  dp_dial_tone_timer = x_current_time();	  peak_energy = energy1;	}	if (energy1 > peak_energy) {	  peak_energy = energy1;	}	goto loc_2A994;  case 2:	goto loc_2A994;  default:	//test	 bp, ax	if (dp_read_dsp_ram (0x3A) & 0x1000) goto loc_2A89C;	eax = peak_energy;	eax = eax / 2;	if (energy1 > eax) {	  eax = x_elapsed_time(dp_tone_timer);printf ("Oh Shit!\n");	  peak_energy = 0;	  dp_tone_off_time = eax;	  dp_tone_state = 1;	  state_changed = true;	  goto loc_2A994;	}	if ((country_code == 7) | (country_code == 8)) goto loc_2A994;	if (x_elapsed_time(dp_tone_timer) > 500) {	  printf ("Reset peak_energy on 500ms timeout!\n");	  peak_energy = energy1;	}	goto loc_2A994;  }loc_2A89C:  eax = x_elapsed_time(dp_tone_timer);  if ((country_code != 8)      && (eax > H_dial_tone_hole_time)) goto loc_2A989;  if (eax <= 1250) goto loc_2A994;  goto loc_2A989;loc_2A994:  if (state_changed == false) goto loc_2AA49;  // State has changed.  // Reset tone timer.  dp_tone_timer = x_current_time();  ecx = H_dial_tone_hole_time;  eax = dp_tone_off_time;  if (eax <= ecx) goto loc_2AA49;    if (country_code !=8) goto loc_2AA3E;  energy2 = 180;  if (eax <= 210) goto loc_2A9D9;  if (eax < 830) goto loc_2AA07;loc_2A9D9:  if (eax < energy2) goto loc_2AA07;  if (eax > 1155) goto loc_2AA07;  ecx = dp_tone_on_time;  if (ecx <= 230) goto loc_2A9F9;  if (ecx <= 530) goto loc_2AA07;loc_2A9F9:  if (ecx < 190) goto loc_2AA07;  if (ecx < 680) goto loc_2AA1F;loc_2AA07:    ecx = dp_tone_on_time;    // printf ("Reset dp_dial_tone_timer!\n");    dp_dial_tone_timer = x_current_time();    eax = dp_tone_off_time;loc_2AA1F:  if (eax <= energy2) goto loc_2AA2A;  if (eax < 220) goto loc_2AA36; loc_2AA2A:  if (ecx <= energy2) goto loc_2AA49;  if (ecx >= 220) goto loc_2AA49;loc_2AA36:  dp_dialtone_cycles++;  goto loc_2AA49;loc_2AA3E:  // printf ("Reset dp_dial_tone_timer!\n");  dp_dial_tone_timer = x_current_time(); loc_2AA49:  // If state is 2 and there hasn't been a state change then this  // is the only code (of interest!) that will be executed.  eax = x_elapsed_time(dp_dial_tone_timer);  // printf ("dp_dial_tone_timer, elapsed time is now: %d\n", eax);  if (eax < (unsigned int)(H_dial_tone_validation_time * 100)) return false;  // *Bodge* dp_read_dsp_ram(0x3A) always seems to return 0x1000.  //if (dp_read_dsp_ram(0x3A) & 0x1000) return false;  if (energy1 <= (unsigned int)(H_dialtone_level * 2) ) return false;  if ((country_code != COUNTRY_ITALY) || (dp_dialtone_cycles <= 2))	return true;  else	return false;}// Returns True if the tone is detected when the call is answered.bool dp_answer_tone_detected(void){#if LT_DEBUG_TONES  // Diagnostics.  printf    (">> dp_answer_tone_detected: answer state = %d, on time = %d, off time = %d.\n",     dp_answer_state, x_elapsed_time(dp_answer_on_timer), x_elapsed_time(dp_answer_off_timer));#endif	  switch(dp_answer_state) {  case 0:	// Initial answer state.	if (dp_read_dsp_ram(0x28) & 0x3f0) {	  dp_answer_on_timer = x_current_time();	  dp_answer_off_timer = x_current_time();	  dp_answer_state = 1;	}	return false;  case 1:	if ((dp_read_dsp_ram(0x28) & 0x3f0) == 0) {	  dp_answer_off_timer = x_current_time();	  dp_answer_state = 2;	  return false; 	}	if ((S(0x6a) == 2) &&		(x_elapsed_time(dp_answer_on_timer) >= 100))	  return true;	//loc_2AB17:		{	  int validationPeriod = (H_answer_tone_validation_time * 10);	  if (x_elapsed_time(dp_answer_on_timer) >= validationPeriod)		return true;	  else		return false;	}  case 2:	if (dp_read_dsp_ram (0x28) & 0x3f0)	  {		if (x_elapsed_time(dp_answer_off_timer) > 50)		  dp_answer_on_timer = x_current_time();		dp_answer_state = 1;	  }	return false;  }  return false;}bool dp_busy_tone_detected (void){  unsigned short energy2 = dp_read_dsp_ram (0x354); // Haven't a clue!  unsigned short energy = dp_read_dsp_ram (0x794);  // This flag causes the dp_busy_tone_timer to be reset and the cadance checked.  bool flag_1 = false;#if LT_DEBUG_TONES  // Diagnostics.  printf    ("dp_busy_tone_detected: busy state = %d, energy2 = %x, energy = %x, peak busy = %x.\n",     dp_busy_state, energy2, energy, peak_busy_energy);	  // Diagnostics.  printf ("on cad = %u, off cad = %u cycles=%u, DSP RAM = %4x\n",		  dp_busy_on_cadence, dp_busy_off_cadence, dp_busy_cycles, dp_read_dsp_ram(0x3a));#endif  switch (dp_busy_state)    {    case 0:      if (ELAPSED_TIME (dp_busy_tone_timer) > 3)		{		  if (dp_read_dsp_ram (0x3a) & 0x1000)			{			  dp_busy_on_cadence = 0;			  dp_busy_off_cadence = 1;			  dp_busy_state = 1;			}		  else			{			  dp_busy_on_cadence = 1;			  dp_busy_off_cadence = 0;			  dp_busy_state = 2;			}		}      break;    case 1:	  if ((dp_read_dsp_ram(0x3a) & 0x1000) == 0) goto loc_2AC11;	  if (energy >= (peak_busy_energy/2)) goto loc_2AC46;	loc_2AC11:	  if (x_elapsed_time(dp_busy_tone_timer) <= 30) goto loc_2AC46;	  dp_busy_on_cadence = x_elapsed_time(dp_busy_tone_timer);	  dp_busy_state = 2;	  //loc_2AC3F:	  flag_1 = true;	  break;	loc_2AC46:	  if ((x_modem_mode != 2) &&		  (S_data_calling_tone == true) &&		  (dp_calling_tone_disable == 0) &&		  (x_elapsed_time(dp_timer1) >= 0x708)) {		dp_busy_on_cadence = x_elapsed_time(dp_busy_tone_timer);		flag_1 = true;	  }	  //loc_2AC87:		  if (energy2 > (energy * 3))		dp_continous_busy_timer = x_current_time ();	  break;    case 2:      if ((dp_read_dsp_ram (0x3a) & 0x1000)		  && (energy > (peak_busy_energy / 2)))		{		  dp_busy_off_cadence = ELAPSED_TIME (dp_busy_tone_timer);		  dp_busy_state = 1;		  flag_1 = true;		}      else		START_TIMER (dp_continuous_busy_timer);      break;    }  //loc_2ACF0:	  if (ELAPSED_TIME (dp_busy_tone_timer) > 900)    {      dp_busy_cycles = 0;      dp_busy_on_cadence = 0;      dp_busy_off_cadence = 0;    }  if (flag_1)    {      START_TIMER (dp_busy_tone_timer);	  // problem may be in here?      if ((country_code != COUNTRY_NORTH_AMERICA		   && country_code != COUNTRY_CANADA)		  ? ((H_max_busy_cadence_on_time != 0			  /* Parameterised busy tone detection. */			  ? (dp_busy_on_cadence >= 10 * H_min_busy_cadence_on_time				 && dp_busy_on_cadence <= 10 * H_max_busy_cadence_on_time				 && dp_busy_off_cadence >= 10 * H_min_busy_cadence_off_time				 && dp_busy_off_cadence <= 10 * H_max_busy_cadence_off_time)			  /* Default algorithm. */			  : (dp_busy_on_cadence >= 100				 && dp_busy_on_cadence <= 850				 && ((dp_busy_on_cadence <= 150					  && (dp_busy_on_cadence + dp_busy_off_cadence > 250))					 || (dp_busy_on_cadence >= 150						 && (dp_busy_on_cadence							 <= (75 + dp_busy_off_cadence								 + (dp_busy_off_cadence / 2))))))))		  /* American/Canadian busy tone detection. */		  : ((dp_busy_on_cadence >= 195			  && dp_busy_on_cadence <= 305			  && dp_busy_off_cadence >= 195			  && dp_busy_off_cadence <= 305)			 || (dp_busy_on_cadence >= 420				 && dp_busy_on_cadence <= 580				 && dp_busy_off_cadence >= 420				 && dp_busy_off_cadence <= 580)))		{		  dp_busy_cycles++;		  dp_busy_on_cadence = 0;		  dp_busy_off_cadence = 0;		}    }  if (dp_busy_cycles >= H_busy_cycles_threshold)    {      dp_busy_cycles = 0;      return true;    }  if (energy > peak_busy_energy)    peak_busy_energy = energy;  return false;}// Detect incoming ring.bool dp_ring_detected(void){  if (dp_read_dsp_ram (0x3a) & 0x20)	return true;  else	return false; }// Ringback initialisation.void dp_ringback_init(void){   dp_no_ringback_timer = x_current_time();   dp_ringback_on_timer = x_current_time();   dp_ringback_off_timer = x_current_time();   dp_ringback_state = 2;   dp_ringback_on_cadence = 0;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
青青草视频一区| 一区二区三区日韩在线观看| 欧美mv日韩mv亚洲| 精品久久免费看| 337p粉嫩大胆色噜噜噜噜亚洲| 日韩一区二区影院| 欧美国产欧美综合| 亚洲女人小视频在线观看| 日韩 欧美一区二区三区| 国产一区二区美女| 欧美日韩在线三级| 国产欧美中文在线| 亚洲一区二区偷拍精品| 九九久久精品视频| 欧美日韩大陆在线| 国产精品久久久久婷婷二区次| 日韩成人精品在线| 色系网站成人免费| 中文字幕欧美日韩一区| 青青草成人在线观看| 丁香婷婷综合激情五月色| 色成人在线视频| 国产精品欧美经典| 国内精品视频666| 欧美日韩国产片| 亚洲一区二区美女| av电影一区二区| 国产精品人妖ts系列视频| 欧美日韩综合不卡| 国产欧美一区二区三区网站| 国产电影一区在线| 国产欧美精品一区| 国产91清纯白嫩初高中在线观看| 欧美日韩精品一二三区| 亚洲综合激情小说| 91久久精品一区二区三| 亚洲免费电影在线| 在线观看中文字幕不卡| 午夜欧美视频在线观看| 欧美一卡二卡在线观看| 亚洲一区免费在线观看| 欧美男生操女生| 久久国产免费看| 精品粉嫩aⅴ一区二区三区四区| 美女视频一区在线观看| 久久综合九色综合欧美就去吻| 日韩国产精品91| 久久综合成人精品亚洲另类欧美| av资源网一区| 麻豆精品在线观看| 成人欧美一区二区三区小说 | 成+人+亚洲+综合天堂| 日韩理论片在线| 日韩欧美专区在线| 99国产精品久久久久久久久久| 午夜激情综合网| 国产精品视频一二| 欧美一区2区视频在线观看| 激情偷乱视频一区二区三区| 久久久国际精品| 99这里只有久久精品视频| 洋洋成人永久网站入口| 26uuu另类欧美| 色94色欧美sute亚洲线路一ni | 捆绑紧缚一区二区三区视频| 久久久久久久久一| 99精品欧美一区二区三区小说 | 亚洲美女在线国产| 在线欧美小视频| 国v精品久久久网| 丝袜美腿亚洲色图| 精品久久久久久最新网址| 91九色02白丝porn| 成人免费视频一区| 国产精品888| 久久99久久99| 国产91精品精华液一区二区三区| 国产精品亲子乱子伦xxxx裸| 精品久久久久久久久久久久久久久久久| 99re免费视频精品全部| 国内不卡的二区三区中文字幕| 色综合一个色综合| 成人小视频在线| 国产精品伊人色| 毛片不卡一区二区| 久久99国产精品免费网站| 一区二区三区中文字幕在线观看| 欧美日韩精品一区二区三区蜜桃| 99在线视频精品| 91国偷自产一区二区三区观看| 日本高清视频一区二区| 精品视频一区二区不卡| 日韩一区二区免费电影| 国产女人aaa级久久久级| 久久免费电影网| 中文字幕乱码亚洲精品一区 | 国产日韩欧美a| 欧美激情中文不卡| 午夜精品久久久久久久久| 欧美一区二区三区啪啪| 91精品午夜视频| 亚洲乱码精品一二三四区日韩在线| 亚洲精品videosex极品| 亚洲一区免费在线观看| 日产欧产美韩系列久久99| 久久99热这里只有精品| 成人性生交大片免费看中文网站| 99久久久无码国产精品| 欧美欧美午夜aⅴ在线观看| 日韩欧美在线影院| 国产精品私人自拍| 激情综合网最新| 欧美喷水一区二区| 综合激情成人伊人| 亚洲激情综合网| 91麻豆精品一区二区三区| 日韩一区二区三| 另类小说综合欧美亚洲| 在线视频综合导航| 一区二区三区国产精品| 亚洲专区一二三| 丝袜亚洲另类欧美综合| 日韩视频免费观看高清在线视频| 亚洲精品国产成人久久av盗摄 | 国产婷婷色一区二区三区四区| 久久电影网站中文字幕| 欧美伊人久久久久久午夜久久久久| 国产精品乱码一区二区三区软件| 国内外成人在线| 国产午夜精品一区二区三区四区| 午夜精品爽啪视频| 色综合天天综合网国产成人综合天| 亚洲高清免费观看| 欧美日韩免费一区二区三区| 一区二区三区日韩精品视频| av动漫一区二区| 亚洲精选视频在线| 成人激情黄色小说| 午夜精品免费在线| 久久综合色播五月| 成人av网址在线观看| 日韩亚洲欧美综合| 亚洲老妇xxxxxx| 3d动漫精品啪啪| 免费人成在线不卡| 亚洲女人的天堂| 91麻豆精品91久久久久久清纯| 久久国产精品色婷婷| 国产精品国产三级国产普通话99 | 成av人片一区二区| 久久se精品一区二区| 欧美激情中文字幕| 在线观看视频欧美| 国产在线不卡一区| 日韩精品一级二级 | 欧美一级二级三级蜜桃| 国产精品99久久久| 一区二区三区**美女毛片| 欧美大片一区二区三区| 菠萝蜜视频在线观看一区| 亚洲另类色综合网站| 久久精品亚洲一区二区三区浴池| 欧美中文字幕一区二区三区| 国内精品第一页| 日本视频一区二区| 日日欢夜夜爽一区| 亚洲精品综合在线| 国产日产欧美一区二区三区| 日韩限制级电影在线观看| 99视频精品全部免费在线| 麻豆国产精品一区二区三区 | 91麻豆123| 国产99久久久久| 国产一区二区日韩精品| 国产99精品国产| 国产成人在线网站| 国产69精品久久99不卡| 国产成人综合网| 国产盗摄视频一区二区三区| 午夜久久久久久久久久一区二区| 日韩精品一二三四| 久久精品国产久精国产爱| 奇米精品一区二区三区在线观看一 | 欧美亚洲国产bt| 91精品国产综合久久精品| 欧美伊人久久大香线蕉综合69| 日韩一区二区在线观看视频| 精品成人a区在线观看| 国产欧美日韩综合| 一区二区三区四区高清精品免费观看| 亚洲人成网站色在线观看 | 天堂va蜜桃一区二区三区漫画版| 麻豆91精品视频| 国精产品一区一区三区mba桃花| 国产精品一区在线| 91亚洲永久精品| 日韩精品一区二区三区蜜臀| 精品99一区二区三区| 三级欧美韩日大片在线看| 国产精品白丝jk黑袜喷水|