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

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

?? mt88l89v2.~c

?? DTMF收發芯片88L89完美驅動(Arm,SDT251環境)
?? ~C
?? 第 1 頁 / 共 2 頁
字號:
	//NU_Sleep(50);
	status = NU_Control_Timer(&DTMF_Dither_TimerCtrl, NU_ENABLE_TIMER);

	TONE_TRACE("BSP --- MT88L89V2 check dial tone open !!!!!\n");

	return 0;
}

/***************************************************
*
* DTMFCheckDialClose - stop check dial tone
*
* this routine call DTMFOpen to stop dial tone check
*
* RETURNS: int --- 0 OK
*				   -1 NOK
*
*/

int DTMFCheckDialClose(void)
{
	int status;
	
	status = NU_Control_Timer(&DTMF_Dither_TimerCtrl, NU_DISABLE_TIMER);		
	if (status != NU_SUCCESS)
	{
		return (-1);
	}
	g_IsCheckDialOpen = 0;
	
	if (g_DtmfOpenStatus == 0/*1*/)
	{
		//g_DtmfOpenStatus = 1/*0*/;
		DTMFOpen();	
	}	
	TONE_TRACE("BSP --- MT88L89V2 check dial tone close !!!!!\n");
	return (0);
}

/***************************************************
*
* DTMFWrite - send DTMF data
*
* this function send DTMF data through write DTMF data Tx register
*
* RETURNS: int --- 0  OK
*				   <0 Error
*
*/
static unsigned int g_IsWriteNotify = 0;

int DTMFWrite
(
	unsigned char _data, 	/* the data to write */
	int notify 				/* is needed to notify application module */ 
							/* notify = 0 --- no notify */
							/*        = 1 --- notify */
)
{  
	unsigned long * volatile pulPtr = (unsigned long *)HwBaseAddress;
	
	if ((g_MastDataTxStatus != DTMF_TX_IDLE) || (g_MastDataTx != DTMF_TX_IDLE))
	{
		return DTMF_TX_BUSY;
	}
	if (CharToDTMF(_data) == 0xff)
	{
		return DTMF_DATA_ERROR;
	}
    if (g_DtmfOpenStatus == 0)
    {
    	return DTMF_NOT_OPEN;
    }
	g_ChannelSave = ((unsigned char *)pulPtr)[HwPortB] & 0x18;	/* to save bit3&bit4 of Port B*/
	((unsigned char *)pulPtr)[HwPortB] |= 0x18; 				/* DTMF to line */
	//NU_Sleep(1);
	g_MastDataTx = _data;
	g_MastDataTxStatus = DTMF_TX_WORK;
	g_IsWriteNotify = notify;
	return 0;
}

/***************************************************
*
* DTMF_Timer_Expiration - DTMF timer expiration routine
*
* this function is the DTMF timer expiration routine, this routine Tx or Rx
* DTMF data in poll module
*
* RETURNS: void
*
*/

void DTMF_Timer_Expiration
(
	unsigned long id	/* timer id */
)
{
	int int_level = 0;

    g_MastStatus = *(unsigned char *)DTMF_STATUS_BASE;
    if (g_MastStatus & 0x04)/* rx ready */
    {
        g_pData = (unsigned char *)DTMF_RX_BASE;
   	    g_MastDataRx = DTMFToChar((*g_pData&0x0F));    /* receive data */ 
		
        //收到的數據,通知應用層....
        /* debug information */
        //TRACE("DTMF received:%c\n\n", g_MastDataRx);
        TONE_TRACE("BSP --- MT88L89 receive DTMF:%c !!!!\n\n", g_MastDataRx);
        DTMFSend(1, g_MastDataRx);
    }
   	if ((g_MastDataTxStatus == DTMF_TX_WORK) && (g_MastDataTx != DTMF_TX_IDLE))
   	{
		g_pData = (unsigned char *)DTMF_TX_BASE;
   	    g_pCtrl = (unsigned char *)DTMF_CONTROL_BASE; 
       	*g_pCtrl = 0x01; /* send data */
		int_level = NU_Control_Interrupts(NU_DISABLE_INTERRUPTS);
	    *g_pData = CharToDTMF(g_MastDataTx);  /* send first data */
		g_MastDataTx = DTMF_TX_IDLE;

		/* begin 2003-10-13, before send DTMF, close headphone */

		_HeadPhone_close();

		/* end */
		
		NU_Control_Interrupts(int_level);
   	    NU_Control_Timer(&DTMF_Mast_TimerCtrlTxTone, NU_ENABLE_TIMER);
		//DTMFSend(0, 0);
       	TONE_TRACE("BSP --- MT88L89 sending data begin :%c !!!!\n", g_MastDataTx);
   	}
}

/***************************************************
*
* 
* DTMF_TxTone_Timer_Expiration - DTMF Tx tone timer expiration routine
*
* this function is the DTMF Tx tone timer expiration routine
*
* RETURNS: void
*
*/

void DTMF_TxTone_Timer_Expiration
(
	unsigned long id	/* timer id */
)
{
	g_pCtrl = (unsigned char *)DTMF_CONTROL_BASE;	
	*g_pCtrl = 0x00;
	NU_Control_Timer(&DTMF_Mast_TimerCtrlTxTone, NU_DISABLE_TIMER);
	NU_Control_Timer(&DTMF_Mast_TimerCtrlTxPause, NU_ENABLE_TIMER);
}

/***************************************************
*
* 
* DTMF_TxPause_Timer_Expiration - DTMF Tx pause timer expiration routine
*
* this function is the DTMF Tx pause timer expiration routine
*
* RETURNS: void
*
*/

void DTMF_TxPause_Timer_Expiration
(
	unsigned long id	/* timer id */
)
{
	int int_level;
	unsigned long * volatile pulPtr = (unsigned long *)HwBaseAddress;
	
	((unsigned char *)pulPtr)[HwPortB] &= ~0x18;		/* clear bit3&bit4 of Port B */
	((unsigned char *)pulPtr)[HwPortB] |= g_ChannelSave;/* resume bit3&bit4 of Port B */
	NU_Control_Timer(&DTMF_Mast_TimerCtrlTxPause, NU_DISABLE_TIMER);
    int_level = NU_Control_Interrupts(NU_DISABLE_INTERRUPTS);
	/* reset status */
	g_MastDataTxStatus = DTMF_TX_IDLE;

	/* begin 2003-10-13, after DTMF send finish, open headphone */

	_HeadPhone_open();
	
	/* end */
	
	NU_Control_Interrupts(int_level);
	if (g_IsWriteNotify == 0x1)
	{
		DTMFSend(0, 0);
	}
	TONE_TRACE("BSP -- MT88L89 sending data end :%c !!!\n", g_MastDataTx);
}

void DTMF_Dither_Timer_Expiration
(
	unsigned long id	/* timer id */ 
)
{	
	char status;
	int delay = 1200;
	

	//while (delay-- > 0);/* delay for 120 ms */
	
 	status = ((*(unsigned char* )0x30000100) & 0x02) >> 1;

	if (g_IsCheckDial == 0x1)
	{
		TONE_TRACE("BSP --- MT88L89 begin check dialtone !!!!!!!!!!!!!!!!!\n");
		if (status == 0x1)
		{
			g_iDitherTimes++;
			TONE_TRACE("BSP --- detect dialtone times = %d @@@\n", g_iDitherTimes);
			
			if (g_iDitherTimes == 5)
			{
				g_iDitherTimes = 0;
				DTMFSend(2, DTMF_DIAL);				
				status = NU_Control_Timer(&DTMF_Dither_TimerCtrl, NU_DISABLE_TIMER);						
				//status = NU_Control_Timer(&DTMF_Mast_TimerCtrl, NU_ENABLE_TIMER);		
			}
		}
		else
		{
			g_iDitherTimes = 0;
		}
	}
	else
	{
		TONE_TRACE("BSP --- MT88L89 begin check dialtone off !!!!!!!!!!!!!!!!!\n");
		if (status == 0x0)
		{
			g_iDitherTimes++;
			TONE_TRACE("BSP --- detect dialtone off times = %d @@@\n", g_iDitherTimes);			
			if (g_iDitherTimes == 5)
			{
				g_iDitherTimes = 0;
				DTMFSend(2, DTMF_DIAL_FINI);				
				status = NU_Control_Timer(&DTMF_Dither_TimerCtrl, NU_DISABLE_TIMER);						
				//status = NU_Control_Timer(&DTMF_Mast_TimerCtrl, NU_ENABLE_TIMER);		
			}		
		}
		else
		{
			g_iDitherTimes = 0;
		}
	}
}

/***************************************************
*
* 
* CharToDTMF - convert character to DTMF data
*
* this function convert character to DTMF data
*
* RETURNS: unsigned char --- converted DTMF data
*
*/

unsigned char CharToDTMF
(
	unsigned char _ch	/* character to convert */
)
{
	unsigned char DTMFData;
	
  	switch (_ch)
   	{
        case '1':
        case '2':
        case '3':
        case '4':
        case '5':
        case '6':
        case '7':
        case '8':
        case '9':
        	DTMFData = _ch - '0';
         	break;
        case '0':
            DTMFData = 0x0A;
            break;
        case '*':
            DTMFData = 0x0B;
            break;
        case '#':
            DTMFData = 0x0C;
            break;
        case 'A':
     	    case 'a':
            DTMFData = 0x0D;
            break;
        case 'B':
       	case 'b':
            DTMFData = 0x0E;
            break;
        case 'C':
        case 'c':
            DTMFData = 0x0F;
            break;
        case 'D':
        case 'd':
            DTMFData = 0x00;
            break;
        default: /* error */
        	DTMFData = 0xff;
 	        break;
    }
	
  	return DTMFData;
}

/***************************************************
*
* 
* DTMFToChar - convert DTMF data to character
*
* this function convert DTMF data to character
*
* RETURNS: unsigned char --- converted character
*
*/

unsigned char DTMFToChar
(
	unsigned char _DTMFData	/* DTMF data to convert */
)
{
	unsigned char ch;
   	switch (_DTMFData)
  	{
       case 0x01:
       case 0x02:
       case 0x03:
       case 0x04:
       case 0x05:
       case 0x06:
       case 0x07:
       case 0x08:
       case 0x09:
           ch = _DTMFData + '0';
           break;
	   case 0x0A:
	       ch = '0';
 	       break;
 	   case 0x0B:
 	       ch = '*';
 	       break;
 	   case 0x0C:
 	       ch = '#';
 	       break;
 	   case 0x0D:
 	       ch = 'A';
 	       break;
 	   case 0x0E:
 	       ch = 'B';
 	       break;
 	   case 0x0F:
 	       ch = 'C';
 	       break;
 	   case 0x0:
 	       ch = 'D';
 	       break;
 	   default:
 	       break;
 	}
   	return ch;
}

int GetHfcCodecStatus()
{
	if ((g_MastDataTxStatus == DTMF_TX_IDLE) && (g_MastDataTx == DTMF_TX_IDLE))
	{
		return DTMF_WRITE_STATE_IDLE;
	}
	else
	{
		return DTMF_WRITE_STATE_BUZY;
	}
	
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩高清一级片| 久久99精品久久久久| 日韩美一区二区三区| 欧美日韩一区视频| 欧美日韩一区久久| 8v天堂国产在线一区二区| 91久久久免费一区二区| 不卡的电视剧免费网站有什么| 激情综合色丁香一区二区| 麻豆91精品视频| 狠狠色丁香久久婷婷综| 久久国内精品视频| 国产乱码精品一区二区三| 国产乱子伦视频一区二区三区 | 欧美激情在线看| 国产区在线观看成人精品 | 亚洲综合偷拍欧美一区色| 亚洲综合精品自拍| 日韩高清国产一区在线| 麻豆91免费看| 成人在线综合网| 色婷婷久久久久swag精品| 欧美亚洲日本一区| 欧美xxxx老人做受| 中文字幕高清不卡| 夜夜嗨av一区二区三区中文字幕| 视频一区视频二区中文字幕| 狠狠狠色丁香婷婷综合激情| 成人99免费视频| 911精品产国品一二三产区| 欧美大片免费久久精品三p | 99精品国产视频| 91成人免费在线视频| 91 com成人网| 国产精品免费aⅴ片在线观看| 一区二区理论电影在线观看| 久久国产精品第一页| 国产剧情在线观看一区二区| 91猫先生在线| 欧美一区二区在线播放| 亚洲美女视频一区| 久久99久久久欧美国产| 91麻豆高清视频| 精品国产露脸精彩对白| 亚洲激情一二三区| 韩国av一区二区三区四区| 欧美性生活影院| 国产欧美一区二区精品忘忧草| 亚洲国产乱码最新视频| 国产乱码精品1区2区3区| 欧美日本一区二区三区四区| 国产色产综合色产在线视频| 日韩二区在线观看| 日本丶国产丶欧美色综合| 久久久777精品电影网影网 | 中文字幕视频一区| 久久91精品国产91久久小草| 欧美日韩在线免费视频| 亚洲男女一区二区三区| 国产精品一区二区你懂的| 3d成人h动漫网站入口| 亚洲色图欧美偷拍| 成人免费高清在线| www日韩大片| 蜜臀va亚洲va欧美va天堂| 在线亚洲一区二区| 亚洲欧洲av在线| 国产成人亚洲综合a∨婷婷图片| 91精品在线一区二区| 亚洲福利国产精品| 欧美性生活大片视频| 亚洲视频一区在线| 91麻豆精东视频| 国产精品久久久久婷婷 | 国产精品久久久久婷婷| 粉嫩av一区二区三区在线播放| 日韩欧美一区在线观看| 日本不卡一区二区| 欧美伦理电影网| 午夜精品福利视频网站| 欧洲精品在线观看| 亚洲尤物视频在线| 欧美人妖巨大在线| 蜜臀91精品一区二区三区| 777亚洲妇女| 国产在线麻豆精品观看| 久久免费午夜影院| 成人手机电影网| 亚洲人一二三区| 欧美午夜精品一区| 亚洲福利视频三区| 欧美大尺度电影在线| 韩国女主播一区二区三区| 久久久久久久久一| www.在线成人| 亚洲高清久久久| 欧美一区二区在线看| 国产成人免费高清| 亚洲欧洲韩国日本视频| 欧美色成人综合| 国产在线精品不卡| 综合分类小说区另类春色亚洲小说欧美 | 亚洲激情一二三区| 日韩一区二区免费视频| 成人免费的视频| 亚洲精品网站在线观看| 欧美一区二区黄| 成人黄色在线看| 亚洲成人7777| 国产日韩欧美a| 欧美日韩国产123区| 极品美女销魂一区二区三区免费| 国产精品午夜春色av| 91精品国产一区二区三区香蕉| 久久99国产精品尤物| 亚洲色图一区二区| 欧美成人一区二区三区片免费| av电影在线观看不卡| 男男gaygay亚洲| 亚洲视频中文字幕| 久久久美女艺术照精彩视频福利播放| 成a人片国产精品| 麻豆成人免费电影| 亚洲福中文字幕伊人影院| 亚洲国产精品二十页| 欧美精品成人一区二区三区四区| 国产福利一区在线观看| 秋霞成人午夜伦在线观看| 18成人在线视频| 26uuuu精品一区二区| 欧美日韩国产综合一区二区三区| 成人小视频在线| 精彩视频一区二区三区| 日韩精品三区四区| 亚洲女人****多毛耸耸8| 久久久久9999亚洲精品| 日韩一级高清毛片| 欧美人伦禁忌dvd放荡欲情| 91碰在线视频| 成人综合在线观看| 国产一区在线观看视频| 美女一区二区视频| 日韩专区中文字幕一区二区| 亚洲福利国产精品| 亚洲一区二区精品久久av| 国产精品久久久久久久第一福利| 久久久久久久久97黄色工厂| 日韩免费高清av| 精品少妇一区二区三区在线播放| 欧美日韩国产综合一区二区 | 色综合天天性综合| 成人一区二区三区视频| 国产精品亚洲视频| 国产精品亚洲视频| 国产大片一区二区| 国产91精品免费| 成人国产亚洲欧美成人综合网| 国产精品影视网| 成人免费观看av| 99国产精品久| 欧美专区在线观看一区| 欧美日韩www| 日韩欧美一区二区三区在线| 精品国产青草久久久久福利| 国产天堂亚洲国产碰碰| 国产精品国产三级国产aⅴ入口 | 亚洲精品国产精华液| 一区二区欧美国产| 天天色图综合网| 久久国产尿小便嘘嘘尿| 成人一级片在线观看| 99精品桃花视频在线观看| 欧美午夜片在线观看| 日韩色视频在线观看| 精品国产sm最大网站免费看| 国产婷婷色一区二区三区| 亚洲女同一区二区| 日韩精品成人一区二区三区| 日本不卡视频在线观看| 国产成人亚洲精品狼色在线| 成人午夜视频在线| 色婷婷亚洲综合| 日韩欧美高清一区| 中文字幕日韩欧美一区二区三区| 亚洲黄色录像片| 精品一区二区三区日韩| 99久久精品免费看国产| 欧美精品18+| 中文字幕精品一区| 午夜久久福利影院| 国产99一区视频免费| 日本电影欧美片| 久久一区二区三区四区| 洋洋av久久久久久久一区| 黄色精品一二区| 91福利视频网站| 国产精品视频在线看| 亚洲444eee在线观看| k8久久久一区二区三区| 日韩精品中文字幕一区|