遇到个需求,需要在来电报号之前先播自定义的提示音,话不多说,直接打印追踪代码:
首先,当对方来电时,会接受到 BT_STATUS_PHONE_INCOME 来电消息,
case BT_STATUS_PHONE_INCOME:
if (get_curr_channel_state()&HID_CH) {
//puts("USER_CTRL_HID_DISCONNECT\n");
user_send_cmd_prepare(USER_CTRL_HID_DISCONNECT, 0, NULL);
}
//tone_play(TONE_BT_PARING, 0);
//phone_ring_play_start();
user_val->phone_ring_flag = 1;
#if BT_PHONE_NUMBER
phone_num_play_start();
#else
phone_ring_play_start();
#endif
... ...
break;
然后进入 phone_num_play_start() 函数,开启定时发送报号消息 MSG_BT_TONE_PHONE_NUM ,同时初始化相关参数:
void phone_num_play_start()
{
user_val->phone_num_flag = 0;
user_val->phone_num_idx = 0;
sys_timer_register(&user_val->bt_prompt_timeout, 500, phone_num_play_timer, 1);
}
打印发现播号是通过 user_val->phone_num_idx 定时计数实现,那就当 user_val->phone_num_idx 为 ‘0’ 的时候先播自定义的提示音,然后再用标志位和计数位使之继续播报号码,这里的标志位和计数要在来电消息或者挂断消息清零,简单操作就实现了。