📄 rmmi_bt.c
字号:
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 + -