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

📄 rmmi_bt.c

📁 最新MTK手机软件源码
💻 C
📖 第 1 页 / 共 5 页
字号:
	        	
			return KAL_TRUE;
		}
	}
	return KAL_FALSE;
}

/*****************************************************************************
* FUNCTION
*  rmmi_bt_error_hdlr
*
* DESCRIPTION
*   This is the handler when receiving "ERROR" from BT chip
*	
* PARAMETERS
*
* RETURNS
*
* GLOBALS AFFECTED
*  none.
*****************************************************************************/
void rmmi_bt_error_hdlr (rmmi_string_struct *source_string_ptr)
{
	kal_uint8	reason;

 	reason = (kal_uint8)rmmi_int_validator(source_string_ptr, RMMI_PTR->s_reg.s3);

	kal_trace(TRACE_GROUP_3, RMMI_BT_ERROR, reason );
	RMMI_BT_LOG_STATE();

    if(RMMI_PTR->BT_action ==  RMMI_BT_DEL_TD_WAIT)
    {
    	return;
    }
	 else if(RMMI_PTR->BT_action ==  RMMI_BT_TEST_RESET \
    	|| RMMI_PTR->BT_action ==  RMMI_BT_TEST_CDIS \
    	|| RMMI_PTR->BT_action ==  RMMI_BT_TEST_CEDUT )
	{
		RMMI_PTR->BT_action = RMMI_BT_IDLE;
		l4c_bt_enter_testmode_rsp(RMMI_PTR->BT_ctrl_src , KAL_FALSE);
		l4c_bt_clear_guard_timer(); //clear guard timer 
		return;
	}

/*
	if( ((RMMI_PTR->BT_action == RMMI_BT_FORCE_IDLE || RMMI_PTR->BT_action == RMMI_BT_FORCE_SCAN ) && (reason == BT_ERR_CANCEL_REQ_WHEN_IDLE ))\
		|| (reason >= BT_WARNING_LOCAL_SNIFF_NOT_ENABLE && reason <=BT_WARNING_REMOTE_NOT_ENABLE_LOW_POWER) \
		)
	{
		return;
	}
*/
	switch(reason)
	{
		 case BT_ERR_CANCEL_REQ_WHEN_IDLE:
			RMMI_BT_STATE_CHANGE(RMMI_BT_IDLE);
		 	return;
		 case BT_ERR_SCO_CONNECTED:
			RMMI_BT_STATE_CHANGE(RMMI_BT_CONNECTED);
		 	return;
		 case BT_WARNING_LOCAL_SNIFF_NOT_ENABLE:
		 case BT_WARNING_LOCAL_PARK_NOT_ENABLE:
	 	 case BT_WARNING_LOW_POWER_MODE_NOT_ENABLE:
		 case BT_WARNING_REMOTE_NOT_SUPPORT_SNIFF:
		 case BT_WARNING_REMOTE_NOT_SUPPORT_PARK:
		 case BT_WARNING_REMOTE_NOT_ENABLE_LOW_POWER:
		 	return;
		 default:
		 	break;
	}

	RMMI_PTR->BT_err_act = RMMI_PTR->BT_action;
	RMMI_PTR->BT_err_reason = reason;

	l4c_bt_error_lind(reason);
	
	l4c_bt_get_state_req(RMMI_SRC);

#if 0	
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
#endif

}

/*****************************************************************************
* FUNCTION
*  rmmi_bt_ok_hdlr
*
* DESCRIPTION
*   This is the handler when receiving "OK" from BT chip
*	
* PARAMETERS
*
* RETURNS
*
* GLOBALS AFFECTED
*  none.
*****************************************************************************/
void rmmi_bt_ok_hdlr (rmmi_string_struct *source_string_ptr)
{
	kal_uint8	buffer[70];

	kal_trace(TRACE_GROUP_3, RMMI_BT_OK );
	RMMI_BT_LOG_STATE();
	
	/* stop cwup timer */
	rmmi_bt_stop_timer();
	
	/* send last string */
	if (RMMI_PTR->BT_string != NULL)
	{
		rmmi_bt_write_to_uart(RMMI_PTR->BT_string);
		free_ctrl_buffer(RMMI_PTR->BT_string);
		RMMI_PTR->BT_string = NULL;
		return;
	}

	switch (RMMI_PTR->BT_action )
	{

/* ======================================================================= */			
/* Power on Procedure */
/* ======================================================================= */			

#if 0	
/* under construction !*/
/* under construction !*/
/* under construction !*/
#endif			

		case RMMI_BT_PWRON_SETNAME:
			l4c_bt_poweron_status_lind(/*7*/8);
			l4c_bt_pwron_lrsp(KAL_TRUE);
			l4c_bt_reg_dev_lind();
			l4c_bt_clear_guard_timer();
			RMMI_PTR->BT_action = RMMI_BT_IDLE;
			return;
		
		case RMMI_BT_PWRON_SETADDR:
			l4c_bt_poweron_status_lind(2);
 			//kal_sprintf((char*)buffer, "AT+SETPS=0295,152c,0008");
 			//kal_sprintf((char*)buffer, "AT+SETPS=0295,1828,0008");
 			kal_sprintf((char*)buffer, "AT+SETPS=0295,182c,0008"); 
#ifdef __BT_DEBUG__
 			kal_print( (kal_char*)buffer );
#endif
			rmmi_bt_send_btcmd(buffer);	
			RMMI_BT_STATE_CHANGE(RMMI_BT_PWRON_SETGFLAG);
			l4c_bt_start_guard_timer(); //start guard timer in case no reponse from BT chip
			return;

		case RMMI_BT_PWRON_SETGFLAG:
			l4c_bt_poweron_status_lind(2);
 			kal_sprintf((char*)buffer, "AT+SETPS=0291,0001,0008"); 
#ifdef __BT_DEBUG__
 			kal_print( (kal_char*)buffer );
#endif
			rmmi_bt_send_btcmd(buffer);	
			RMMI_BT_STATE_CHANGE(RMMI_BT_PWRON_SETHFPFEATURE);
			l4c_bt_start_guard_timer(); //start guard timer in case no reponse from BT chip
			return;


		case RMMI_BT_PWRON_SETHFPFEATURE:
			l4c_bt_poweron_status_lind(3);
 			kal_sprintf((char*)buffer, "AT+SETPS=0017,0006,0008");
#ifdef __BT_DEBUG__
 			kal_print( (kal_char*)buffer );
#endif
			rmmi_bt_send_btcmd(buffer);	
			RMMI_BT_STATE_CHANGE(RMMI_BT_PWRON_SETMAXTXPOWER);
			l4c_bt_start_guard_timer(); //start guard timer in case no reponse from BT chip
			return;

		case RMMI_BT_PWRON_SETMAXTXPOWER:
			l4c_bt_poweron_status_lind(3);
 			kal_sprintf((char*)buffer, "AT+SETPS=029b,00010002002000100040,0008");

#ifdef __BT_DEBUG__
 			kal_print( (kal_char*)buffer );
#endif
			rmmi_bt_send_btcmd(buffer);	
			RMMI_BT_STATE_CHANGE(RMMI_BT_PWRON_SET_USR17);
			l4c_bt_start_guard_timer(); //start guard timer in case no reponse from BT chip
			return;

		case RMMI_BT_PWRON_SET_USR17:
			l4c_bt_poweron_status_lind(3);
 			kal_sprintf((char*)buffer, "AT+SETPS=029c,0012000c,0008");

#ifdef __BT_DEBUG__
 			kal_print( (kal_char*)buffer );
#endif
			rmmi_bt_send_btcmd(buffer);	
			RMMI_BT_STATE_CHANGE(RMMI_BT_PWRON_SET_USR18);
			l4c_bt_start_guard_timer(); //start guard timer in case no reponse from BT chip
			return;

		case RMMI_BT_PWRON_SET_USR18:	
			l4c_bt_poweron_status_lind(3);
 			kal_sprintf((char*)buffer, "AT+SETPS=0021,0006,0008");

#ifdef __BT_DEBUG__
 			kal_print( (kal_char*)buffer );
#endif
			rmmi_bt_send_btcmd(buffer);	
			RMMI_BT_STATE_CHANGE(RMMI_BT_PWRON_SETDEFAULTTXPOWER);
			l4c_bt_start_guard_timer(); //start guard timer in case no reponse from BT chip
			return;
			
		case RMMI_BT_PWRON_SETDEFAULTTXPOWER:
			l4c_bt_poweron_status_lind(3);
 			kal_sprintf((char*)buffer, "AT+SETPS=01b3,08000106,0008");
#ifdef __BT_DEBUG__
 			kal_print( (kal_char*)buffer );
#endif
			rmmi_bt_send_btcmd(buffer);	
			RMMI_BT_STATE_CHANGE(RMMI_BT_PWRON_SETPCM);
			l4c_bt_start_guard_timer(); //start guard timer in case no reponse from BT chip
			return;

		case RMMI_BT_PWRON_SETPCM:
			l4c_bt_poweron_status_lind(4);
 			kal_sprintf((char*)buffer, "AT+SETPS=01b0,0000,0008");
#ifdef __BT_DEBUG__
 			kal_print( (kal_char*)buffer );
#endif
			rmmi_bt_send_btcmd(buffer);	
			RMMI_BT_STATE_CHANGE(RMMI_BT_PWRON_SETSCODEC);
			l4c_bt_start_guard_timer(); //start guard timer in case no reponse from BT chip
			return;

		case RMMI_BT_PWRON_SETSCODEC:
			l4c_bt_poweron_status_lind(5);
 			//kal_sprintf((char*)buffer, "AT+SETPS=028d,001f,0008");
 			kal_sprintf((char*)buffer, "AT+SETPS=028d,%04x,0008", BT_SUPPORTED_PROF);
#ifdef __BT_DEBUG__
 			kal_print( (kal_char*)buffer );
#endif
			rmmi_bt_send_btcmd(buffer);	
                        /* use BC3 chip default wakeup signal setting without wakeup duration setting */
                        /* skip RMMI_BT_PWRON_SETWKSIG */
			RMMI_BT_STATE_CHANGE(RMMI_BT_PWRON_SETPROF/*RMMI_BT_PWRON_SETWKSIG*/);
			l4c_bt_start_guard_timer(); //start guard timer in case no reponse from BT chip
			return;

		case RMMI_BT_PWRON_SETPROF:
			l4c_bt_poweron_status_lind(5);
 			kal_sprintf((char*)buffer, "AT+SETPS=0293,0064,0008");
 			//kal_sprintf((char*)buffer, "AT+SETPS=0293,00c8,0008");
#ifdef __BT_DEBUG__
 			kal_print( (kal_char*)buffer );
#endif
			rmmi_bt_send_btcmd(buffer);	
			RMMI_BT_STATE_CHANGE(RMMI_BT_PWRON_SETWKSIG);
			l4c_bt_start_guard_timer(); //start guard timer in case no reponse from BT chip
			return;

		case RMMI_BT_PWRON_SETWKSIG:
			l4c_bt_poweron_status_lind(6);
 			kal_sprintf((char*)buffer, "AT+BCCMD=4002,0002,0000");
#ifdef __BT_DEBUG__
 			kal_print( (kal_char*)buffer );
#endif
			rmmi_bt_send_btcmd(buffer);	
			RMMI_BT_STATE_CHANGE(RMMI_BT_PWRON_RESET);

			/* Refer to CSR Known Issues and Solution Memo B5815 */
			/* AT+CWUP should not sent during power on config */
			rmmi_wakeup_flag = KAL_FALSE;
			
			l4c_bt_start_guard_timer(); //start guard timer in case no reponse from BT chip
			return;
			
/* ======================================================================= */			
/* Normal Action */
/* ======================================================================= */			

		case RMMI_BT_IDLE:
			break;

		case RMMI_CANCELOP_WAIT: /* Cancel OP, Do nothing */
			l4c_bt_clear_guard_timer();
			if( RMMI_PTR->BT_cancel_act == RMMI_BT_INQ_RES || RMMI_PTR->BT_cancel_act == RMMI_BT_INQ_WAIT)
			{
				/* Wait for +CINQCFM */
			}
			else
			{
				RMMI_BT_STATE_CHANGE( RMMI_BT_IDLE );
				if( RMMI_PTR->BT_rmmi_rsp_flag == KAL_TRUE )
				{	
					RMMI_PTR->BT_rmmi_rsp_flag = KAL_FALSE;
					l4c_bt_cancel_op_lrsp();
				}
			}
			break;
			
		/* Trust Device */
		case RMMI_BT_SET_TD_WAIT:
			l4c_bt_clear_guard_timer();
			RMMI_BT_STATE_CHANGE( RMMI_BT_IDLE );
			l4c_bt_set_tr_dev_lrsp(KAL_TRUE, NULL);
			break;

		case RMMI_BT_DEL_TD_WAIT:
			l4c_bt_clear_guard_timer();
			RMMI_BT_STATE_CHANGE( RMMI_BT_IDLE );
			l4c_bt_del_tr_dev_lrsp(KAL_TRUE, NULL);
			break;

		/* Inquiry Request */
		case RMMI_BT_INQ_WAIT:
			l4c_bt_clear_guard_timer();
			RMMI_BT_STATE_CHANGE( RMMI_BT_INQ_RES );
			l4c_bt_inq_lrsp(KAL_TRUE, NULL);
			break;

		case RMMI_BT_INQ_RES:
			/* won't received ok in this state */
			break;

		/* Authentication */
		case RMMI_BT_PAIR_WAIT:
			/* state still in RMMI_BT_PAIR_WAIT, till receive AT+CPINREQ or timeout  */
			RMMI_BT_STATE_CHANGE(RMMI_BT_PAIR_WAIT);
			break;
			
		case RMMI_BT_PIN_REQ_WAIT:
			//l4c_bt_set_pin_lrsp(KAL_TRUE, NULL);
			break;

		case RMMI_BT_SET_PIN_WAIT:
			/* state still in RMMI_BT_SET_PIN_WAIT, till receive +CLINK / +CPINCFM or timeout  */
			l4c_bt_clear_guard_timer();
			RMMI_BT_STATE_CHANGE(RMMI_BT_SET_PIN_WAIT);
			l4c_bt_set_pin_lrsp(KAL_TRUE, NULL);
			break;
			
		case RMMI_BT_PAGE_WAIT:
			/* state still in RMMI_BT_PAGE_WAIT, till receive +CRFCSTAT / +CPROFILE or timeout  */
			l4c_bt_clear_guard_timer();
			RMMI_BT_STATE_CHANGE(RMMI_BT_PAGE_WAIT);
			l4c_bt_page_lrsp(KAL_TRUE, NULL);
			break;

		case RMMI_BT_SCAN:
			l4c_bt_clear_guard_timer();
			l4c_bt_inq_scan_lrsp(KAL_TRUE, NULL);
			break;

		case RMMI_BT_SCAN_CANCEL:
			RMMI_BT_STATE_CHANGE(RMMI_BT_IDLE);
		 	l4c_bt_clear_guard_timer();
			l4c_bt_inq_scan_lrsp(KAL_TRUE, NULL);
			break;

		case RMMI_BT_DISCON_WAIT:
			break;

		case RMMI_BT_SCO_WAIT:
			RMMI_BT_STATE_CHANGE(RMMI_BT_CONNECTED);
			break;

		case RMMI_BT_SET_NAME:
		 	l4c_bt_clear_guard_timer();
			RMMI_BT_STATE_CHANGE(RMMI_BT_IDLE);
			l4c_bt_set_name_lrsp(KAL_TRUE, NULL);
			break;

		case RMMI_BT_SET_PSKEY:
		 	l4c_bt_clear_guard_timer();
			RMMI_BT_STATE_CHANGE(RMMI_BT_IDLE);
			l4c_bt_set_pskey_lrsp(KAL_TRUE, NULL);
			break;

		case RMMI_BT_FORCE_SCAN:
			l4c_bt_get_state_req(RMMI_SRC);
			break;

⌨️ 快捷键说明

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