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

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

?? voice.c

?? 話帶數據中傳真解調程序
?? C
字號:
/* * "Voice" support for ltmodem * * Actually, as long as we don't want to use onboard DSP, * this is going to be used not only for voice but for * _everything_. * * Copyright 1999 Pavel Machek * Copyright 1999 Jamie Lokier * Copyright 1999 R.J.M. Close * * Can be distributed under GPL */#include "voice.h"// Voice specific initialisation stuff.void voice_init(void){  int i;  dp_spk_volume = 0x8ab8;  io_voice_count = 0;  io_voice_count_rx= 0;  S_synthetic_ring_volume = 0x0a;  dp_sleep = 0;  //x68229 = 0x81;  dp_vt_cntrl = 0;  //x6822a = 1; // hmm, setting to 1 basically crashes modem  // Initialise io_dce_tx_buff array.  for ( i=0; i < 32; i = (i + 4)) {    io_dce_tx_buff[i] = 0;    io_dce_tx_buff[i + 1] = 50;    io_dce_tx_buff[i + 2] = 100;    io_dce_tx_buff[i + 3] = 50;  }}// ** Stuff robbed from jamie.cint voice_transmit(int fd_to_exit){  struct timeval tv_timeout;  int retval;  fd_set rfds;  PRINTF( "Starting tad: " );  dp_start_tad(0x80);	/* d0, b0, 90 looks nice but does not work! */                        /* 0x80 seems to work */  x_modem_state = 0xc;  dp_state = 0x28;  PRINTF( "ok\n" );  fcntl(0, F_SETFL, O_NONBLOCK);  fprintf( stderr, "+Fullduplex transmit/receive started\n" );  while(1) {    io_voice_count_rx = 0;    /* Watch stdin (fd 0) to see when it has input. */    FD_ZERO(&rfds);    FD_SET(0, &rfds);    if (fd_to_exit > 0)      FD_SET(fd_to_exit, &rfds);    tv_timeout.tv_sec = 0;    tv_timeout.tv_usec = 20;    retval = select(4, &rfds, NULL, NULL, &tv_timeout);    /* Don't rely on the value of tv now! */    if (FD_ISSET(0, &rfds)) {      int res;      res = read(0, io_dce_tx_sptr, 0x100 - io_voice_count);      io_voice_count += res;      while (!dp_dualport_vc_Tx()) {	usleep(1);      }    }    if (fd_to_exit > 0 && FD_ISSET(fd_to_exit, &rfds)) {      PRINTF( "Exiting fullduplex mode\n" );      return 0;    }    if (dp_dualport_vc_Rc())      if (write(1, io_dce_rx_sptr, 0x100)!=0x100) {	PRINTF("Could not write on stdout\n" );      }#if TRY_INTERRUPTS	PRINTF("voice_transmit: dp_dsp_isr is disabled!\n");#else    dp_dsp_isr();#endif  }}int dp_dualport_vc_Rc(void){  int cnt, ebx, al;  char *ebp;  int readreg = 0; /* 0x10(%esp,1) */  if (io_voice_count_rx != 0)    return 0;  cnt = dp_read_dsp_ram(0xe7);  if (0x100 > cnt) {    if (LT_DEBUG)      PRINTF( "Rc count too low: %x\n", cnt );    return 0;  }  ebp = io_dce_rx_sptr;#if 0  if (0x100 >= io_voice_count_rx) {    io_voice_count = 0;    return 0;  }#endif  do {    if (dp_regread(0xb0)) {      readreg = 0x90;      do {	al = dp_regread(readreg);	//	PRINTF( "%x", al );	*ebp++ = al;	readreg++;      } while (readreg <= 0x9f);      io_voice_count_rx += 0x10;    }    dp_regread(0xb0);    ebx = x_current_time();    while(1) {      if (dp_regread(0xb7) & 0x10)	break;      if (x_elapsed_time(ebx) > 0x32) {	PRINTF( "Timeout receiving\n" );	io_voice_count = 0;	return 0;      }    }  } while (0x100 > io_voice_count_rx);  return 1;}int dp_dualport_vc_Tx(void){  int writereg, esi, ebx, al;  char *edi;  if (io_voice_count != 0x100) {    //    PRINTF( "io_voice_count != 0x100 (%x)\n", io_voice_count );    return 1;  }  if ((0x100 > (esi = dp_read_dsp_ram(0xe1)))) {    if (LT_DEBUG)      PRINTF( "read_dsp_ram(0xe1) returned less than 0x100 (%x)\n", esi );    return 0;  }  edi = io_dce_tx_sptr;  if (0 != io_voice_count) {    do {      writereg = 0x80;	/* -4(%ebp) */      do {	al = *edi++;	dp_regwrite(writereg++, al);      } while (0x8f >= writereg);      dp_regwrite(0xb0, 0x10);      io_voice_count -= 0x10;      ebx = x_current_time();      while (1) {	if (dp_regread(0xb7) & 1)	  break;	if (x_elapsed_time(ebx) >= 0x32) {	  PRINTF( "Timeout while sending :-(\n" );	  io_voice_count = 0;	  return 0;	}      }    } while (io_voice_count != 0);  }  return 1;}voiddp_download_fdsp(void){  dp_modem_command(0x13, 0, 0);  //printf( "Size of wDspFdsp is %x, should be %x\n", sizeof(wDspFdsp), 0xcb9*2);  dp_download_dsp(wDspFdsp, 0xcb9);}voiddp_init_fdsp(void){  dp_write_dsp_ram(0x86, 0);  dp_write_dsp_ram(0x880, 0x9a54);  dp_write_dsp_ram(0x86c, 0x20);  dp_write_dsp_ram(0x86e, 0xfff8);}voiddp_mute_fdsp(int arg){  printf( "dp_mute_fdsp: %d\n", arg );  if (arg != 0)    dp_write_dsp_ram(0x885, dp_spk_volume /* ??? 0x6821c */);  else    dp_write_dsp_ram(0x885, 0);}voiddp_stop_fdsp(void){  dp_modem_command(0x13, 0, 0);  x_output(0x18);  dp_modem_command(0x27, 1, 0);  dp_set_mercury_gain();  //  if (something)  //   dp_stop_fdsp();  //	else v8bis_init();}voiddp_fdsp_record_start(void){  // movb $0x01,0x67d32  dp_write_dsp_ram(0x871, dp_read_dsp_ram(0x871) | 0x02);}/* Strange, dp_start_spkphone is always called with 0 as argument ? */voiddp_start_spkphone(int arg){  // dp_change_mercury_gain(...);  dp_write_dsp_ram(0x86, 0);  dp_modem_command(0x13, 0, 0);  dp_download_fdsp();#if 0	/* It seems to hangup. I do not want to hangup! */  printf( "X_output: 0x07\n" );  x_output(0x07);  printf( "X_output: 0x17\n" );  x_output(0x17);#endif  dp_write_dsp_ram(0x800, 0x1c);  if (arg) {    //    dp_apollo_command(....);    //    dp_init_hdsp();    die( "must not happen\n" );  } else {    //    dp_apollo_command(....);    dp_init_fdsp();  }  printf( "Write volume\n" );  dp_write_dsp_ram(0x885, dp_spk_volume );  dp_write_dsp_ram(0x724, 0x400);  printf( "Done\n" );}voiddp_init_hdsp(void){  dp_write_dsp_ram(0x8e6, 0x21);  dp_write_dsp_ram(0x86e, 0xfffd);  dp_write_dsp_ram(0x87b, 0x8100);  dp_write_dsp_ram(0x87e, 0x800);  dp_write_dsp_ram(0x724, 0x400);  dp_write_dsp_ram(0x87f, 0x1000);  dp_write_dsp_ram(0x723, 0x08);  dp_write_dsp_ram(0x880, 0x4000);  dp_write_dsp_ram(0x747, 0x14);  dp_write_dsp_ram(0x86c, 0x20);  //  if (byte_68255)    dp_write_dsp_ram(0x710, 0x4000);}voiddp_start_hdsp(void){  dp_start_spkphone(0);  dp_write_dsp_ram(0x85, 0x905);  dp_write_dsp_ram(0x85, 0x9205);  // dp_set_speakerphone_gain();  dp_write_dsp_ram(0x725, 0xb6a);}voiddp_switch_fdsp(void){  dp_write_dsp_ram(0x97, 0);  dp_init_fdsp();  dp_write_dsp_ram(0x85, 0x9f05);  dp_write_dsp_ram(0x871, 0xc004);  //  dp_set_speakerphone_gain();  if (0x67d32 != 1)    dp_fdsp_record_start();}/* * Ouch, speakerphone is _not_ what is interesting for us. * TAD mode (telephone answering device) IS! */voiddp_download_tad(void){  dp_download_dsp(wDspTad, 0x949);  dp_modem_command(0x13, 0, 0);}voiddp_detect_dtmf(void){  /* This is actually pretty long function */  dp_write_dsp_ram(0x37, 0x50 /* dp_set_threshold() */ );  //  dp_set_iirs();  dp_write_dsp_ram(0x27, 0);  dp_write_dsp_ram(0x28, 0);  dp_write_dsp_ram(0x26, 0x1e);  if (0) {    dp_write_dsp_ram(0x26, 0x2f);  }  if (0) {    //dp_write_dsp_array(0x1c, 0x15e28, 0xa);    /* ... */  } else {    //dp_write_dsp_array(0x1c, 0x15e40, 0xa);    dp_write_dsp_ram(0x24, 0x2a49);    dp_write_dsp_ram(0xfc0, 0x28d5);  }  dp_modem_command(8, 0x0b, 0);  /* ... = */ x_current_time();              x_current_time();              x_current_time();  /* ... */}voiddp_start_tad(int arg){  //int vsm2 = 0, var_30 = 0;  int var_minus4 = 0;  //int vsm;	// Sampling mode, as set by AT+VSM  int al;  printf( "Starting dp_start_tad\n" );   if (dp_sleep == 1)    dp_init_modem();  dp_modem_command(0x13, 0, 0);  dp_vt_cntrl = arg;	/* Strange: uninitialized! */  x_sleep(0x32);  if (dp_tad_downloaded == 0) {    x_output(0x07);	/* Basically hangup */    dp_modem_command(0x13, 0, 0);    dp_download_tad();    dp_vsp = 0;    x_output(0x17);  }  dp_monitor_hec = 0;  dp_dialtone_enable = 1;  if (0 == x_dma_xfer && dp_vt_cntrl) {	/* Hmm, if I do if (0), I basically crash the modem */    dp_write_dsp_ram(0x3d, 0x200);    dp_regwrite(0xb6, 0xff);    dp_regread(0xb0);    dp_regread(0xb0);    al = dp_vt_cntrl;  }  /* 38aa0: */  /* ecx = sampling mode, from 68229. 0x84 == ADPCM, confirmed now.     0x81 is 16-bit linear, which should be closest to native.     ecx -= 0x80 */  switch (S (0x49)) {  case 0x80: arg |= 0x0e; break;  case 0x82: arg |= 0x09; break;  case 0x81:  case 0x83: break;  default: arg |= 0x04; break;  }  al = S (0x4a);  if (al!=1) {	//  L7:     //PRINTF( "Sorry, I dunno what setne does\n" ); 	//if zero flag is clear (ne) then al = 1, else al = 0;    if (al != 0x02)      al = 1;    else       al = 0;    al--;    al &= 0x08;    var_minus4 = al;  } else    var_minus4 = 0x04;	/* This is 8kHz */  // L8: label not used!  dp_apollo_command(0x20, arg, 0, 					7, H_TAD_tx_level_dB -3, 					0, 0, var_minus4 );  // dp_set_tad_speaker_gain();  // dp_set_tad_mic_gain();  // dp_detect_dtmf();  dp_write_dsp_ram(0x3c, 0x28);  al = dp_vt_cntrl;  if ((al == 0xc0) ||      (al == 0xe0) ||      (al == 0x40) ||      (al == 0x80)) {    dp_write_dsp_ram(0x85, 0x105);    dp_write_dsp_ram(0x85, 0x1305);  }  else     dp_write_dsp_ram(0x85, 0x1205);  /* bc2: */  al = dp_vt_cntrl;  if (!(al & 0x80))    goto L13;  if ((al == 0xa0) || (al == 0xf0))    /* bda */    dp_write_dsp_ram(0x87e, 0xa000);  else	dp_write_dsp_ram(0x87e, 0x8000);  dp_write_dsp_ram(0x87c, 0x3000);  /* bf0 */  goto L14; L13:  dp_write_dsp_ram(0x87e, 0); L14:  dp_write_dsp_ram(0xe0, 0x80);  dp_write_dsp_ram(0xe4, 0x80);  dp_write_dsp_ram(0xe5, 0xfff0);  dp_dsp_data_in_progress = 0;  dp_tad_downloaded = 1;  printf( "dp_start_tad done\n" );}voiddp_synth_ring_freq1(void){  printf( "FAKE: I just selected one set of values\n" );  dp_write_dsp_ram(0x5, 0x24b5);  dp_write_dsp_ram(0x6, 0x346c);}voiddp_synth_ring_freq2(void){  printf( "FAKE: I just selected one set of values\n" );  dp_write_dsp_ram(0x5, 0x2d41);  dp_write_dsp_ram(0x6, 0x2d41);}voiddp_synth_ring_init(void){  dp_write_dsp_ram(0x11, 6+S_synthetic_ring_volume);  dp_modem_command(0x13, 0, 0);  dp_download_tad();  dp_write_dsp_ram(0x85, 0);  dp_apollo_command(0x20, 0x20, 0, 0, 0, 0, 0, 0x40);  x_output(0x17);  dp_modem_command(0x7, 0x1, 0);  dp_write_dsp_ram(0x17, 0xbb8);  dp_synth_ring_freq1();  dp_write_dsp_ram(0x85, 0x20);  x_output(0x17);  dp_enable_ring_int();}voiddp_synth_ring_on(void){  dp_write_dsp_ram(0x11, S_synthetic_ring_volume);  sleep(1);  dp_synth_ring_freq2();}voiddp_synth_ring_off(void){  dp_write_dsp_ram(0x85, 0);  dp_modem_command(0x13, 0, 0);  x_output(0x18);}// Stuff robbed from jamie.cvoid dp_apollo_command(int a8, int aC, int a10, int a14, int a18, int a1c, int a20, int a24){  dp_regwrite(0xD8, 0x18);  dp_regwrite(0x30, a24);  dp_regwrite(0x31, a20);  dp_regwrite(0x32, a1c);  dp_regwrite(0x33, a18);  dp_regwrite(0x34, a14);  dp_regwrite(0x35, a10);  dp_regwrite(0x36, aC);  dp_regwrite(0x37, a8);  wait_for_core_read();}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99re6这里只有精品视频在线观看| 国产综合一区二区| 亚洲国产精品精华液ab| 日韩欧美一区中文| 制服丝袜一区二区三区| 欧美一级日韩免费不卡| 日韩一区二区三区视频在线观看 | 成人黄色片在线观看| 美腿丝袜在线亚洲一区| 奇米精品一区二区三区四区| 免费看日韩a级影片| 精油按摩中文字幕久久| 国产乱对白刺激视频不卡| 国产伦精品一区二区三区免费迷| 精品系列免费在线观看| 国产乱码字幕精品高清av | 在线观看精品一区| 色丁香久综合在线久综合在线观看| 97精品久久久午夜一区二区三区| 91麻豆免费看| 色婷婷av一区| 欧美色综合网站| 欧美主播一区二区三区| 欧美精品在线观看播放| 制服丝袜av成人在线看| 精品久久久久99| 精品国产一区二区亚洲人成毛片 | 成人丝袜高跟foot| 92国产精品观看| 91网址在线看| 在线综合+亚洲+欧美中文字幕| 欧美日本一区二区三区| 欧美性色黄大片| 欧美日韩一区二区三区视频| 欧美日韩国产天堂| 精品国产麻豆免费人成网站| 久久这里只有精品首页| 国产女人水真多18毛片18精品视频| 国产日韩在线不卡| 夜夜嗨av一区二区三区中文字幕| 亚洲精品视频观看| 蜜桃一区二区三区在线观看| 激情av综合网| 成人看片黄a免费看在线| 在线亚洲欧美专区二区| 91麻豆精品国产综合久久久久久| 久久色在线视频| 亚洲日本一区二区| 青青草原综合久久大伊人精品 | 成人免费看片app下载| 成人综合在线观看| 一本大道久久a久久精二百| 欧美一级专区免费大片| 久久久美女艺术照精彩视频福利播放| 国产精品久久国产精麻豆99网站 | 日本韩国欧美一区二区三区| 日韩视频一区二区| 国产精品每日更新在线播放网址| 午夜视频在线观看一区二区三区 | 99riav一区二区三区| 在线不卡a资源高清| 久久亚洲一区二区三区明星换脸 | 国产欧美日韩综合| 亚洲欧美一区二区三区极速播放| 亚洲成人三级小说| 国产乱人伦偷精品视频免下载| 欧美在线短视频| www国产亚洲精品久久麻豆| 亚洲自拍欧美精品| 玖玖九九国产精品| 欧美亚洲一区二区在线观看| 精品福利二区三区| 舔着乳尖日韩一区| 国产成人8x视频一区二区| 99re视频这里只有精品| 日韩精品一区二区三区在线播放| 欧美精品一区视频| 奇米精品一区二区三区四区 | 欧美日韩国产高清一区二区三区 | 91美女在线看| 久久久亚洲国产美女国产盗摄| 一区二区三区免费网站| 国产一区二区美女| 日韩一级二级三级| 一区二区三区中文免费| 成人开心网精品视频| 日韩免费在线观看| 日本vs亚洲vs韩国一区三区二区| 成人午夜视频在线观看| 精品国产免费人成在线观看| 日韩在线一二三区| 北条麻妃国产九九精品视频| 精品日本一线二线三线不卡| 亚洲a一区二区| 日本高清无吗v一区| 国产欧美日韩一区二区三区在线观看 | 欧美天天综合网| 亚洲天堂网中文字| 国产一区视频在线看| 欧美另类z0zxhd电影| 亚洲欧美成人一区二区三区| 97se亚洲国产综合自在线不卡| 日韩欧美美女一区二区三区| 日本午夜精品视频在线观看| 欧美日韩一区在线观看| 亚洲国产日韩综合久久精品| 97se亚洲国产综合自在线| 1024成人网色www| 国产精品白丝jk白祙喷水网站| 国产精品久久久久久久久果冻传媒| 国内国产精品久久| 久久久.com| 国产精华液一区二区三区| 国产香蕉久久精品综合网| 国产原创一区二区| 欧美一区二区在线观看| 蜜臂av日日欢夜夜爽一区| 欧美三级电影在线看| 一级做a爱片久久| 91网上在线视频| 国产精品传媒在线| 一本到不卡免费一区二区| 亚洲欧美日韩国产一区二区三区| 99久久国产综合精品麻豆| 中文字幕日韩av资源站| 99久久综合色| 亚洲综合成人在线| 欧美性猛交xxxxxx富婆| 日本va欧美va精品| 亚洲精品在线三区| 菠萝蜜视频在线观看一区| 国产精品夫妻自拍| 欧美精品久久99| 男男视频亚洲欧美| 国产欧美一二三区| 99国产精品一区| 日韩成人免费看| 欧美xxxxx裸体时装秀| 成人中文字幕合集| 成人免费在线播放视频| 欧美美女网站色| 另类小说综合欧美亚洲| 国产免费观看久久| 一本色道久久综合精品竹菊| 亚洲另类在线视频| 538prom精品视频线放| 亚洲www啪成人一区二区麻豆| 亚洲精品一区二区三区香蕉| heyzo一本久久综合| 亚洲第一精品在线| 欧美va天堂va视频va在线| av电影天堂一区二区在线| 夜夜夜精品看看| 久久久综合激的五月天| 91最新地址在线播放| 激情国产一区二区| 自拍偷自拍亚洲精品播放| 欧美日韩三级在线| 狠狠色狠狠色合久久伊人| 国产精品天干天干在观线| 欧美日韩免费在线视频| 精品一区二区三区的国产在线播放 | 色嗨嗨av一区二区三区| 狠狠色狠狠色综合日日91app| 国产精品进线69影院| 精品欧美乱码久久久久久1区2区 | 久久精品视频一区二区三区| 色网站国产精品| 亚洲国产精品嫩草影院| 26uuu亚洲婷婷狠狠天堂| 91尤物视频在线观看| 久久草av在线| 亚洲亚洲人成综合网络| 国产欧美久久久精品影院| 91高清视频在线| 懂色av噜噜一区二区三区av| 香蕉成人啪国产精品视频综合网| 国产日韩精品视频一区| 3d动漫精品啪啪1区2区免费 | 欧美精品在线一区二区| 秋霞电影一区二区| 亚洲午夜激情av| 国产精品福利一区二区三区| 欧美大肚乱孕交hd孕妇| 99视频一区二区三区| 美女视频一区二区三区| 国产精品区一区二区三区| 91精品久久久久久久99蜜桃| 欧洲精品视频在线观看| 成人性视频网站| 国产自产视频一区二区三区| 亚洲h精品动漫在线观看| 一区二区三区精品在线观看| 欧美极品aⅴ影院| 久久久久亚洲蜜桃| 日韩视频国产视频| 日韩欧美不卡在线观看视频| 精品视频在线免费观看| 欧美又粗又大又爽| 99r国产精品|