蓝牙HFP协议AT命令流程

本文介绍了蓝牙HFP协议中HF与AG设备间的AT命令交互过程。当蓝牙耳机和手机配对后,耳机发送的三个基本AT命令包括AT+BRSF, AT+CIND=?, AT+CIND?。解析AT命令的流程涉及BTA层、callback函数、btif层以及JNI层,详细解析了从接收AT命令到处理命令的步骤。同时,文章也概述了APP下发AT命令到协议栈的流程,以CIND命令为例,展示了从onAtCind函数到BTA_AgResult方法的整个过程。" 80220044,7523727,理解Servlet中的HttpServletRequest与HttpServletResponse,"['后端开发', 'Java', 'Web开发', 'Servlet', 'HTTP']
摘要由CSDN通过智能技术生成

蓝牙HFP协议主要是指HF和AG之间的信令交互,我们知道蓝牙耳机和手机配对之后,耳机会发三个最基本的AT命令,分别是

AT+BRSF, AT+CIND=?, AT+CIND?

协议栈接收AT命令的流程

1 BTA层从rfcomn接收蓝牙耳机发送过来的AT命令,在bta_ag_rfc_data里面会运行一个无线循环,调用PORT_ReadData函数不断的读取AT命令,读取到AT指令后,调用bta_ag_at_parse函数解析AT命令,该函数的功能是用来判断是否是合适的AT命令

void bta_ag_rfc_data(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data)
{
    UINT16  len;
    char    buf[BTA_AG_RFC_READ_MAX];
    UNUSED(p_data);

    memset(buf, 0, BTA_AG_RFC_READ_MAX);

    APPL_TRACE_DEBUG("bta_ag_rfc_data");
    /* do the following */
    for(;;)
    {
        /* read data from rfcomm; if bad status, we're done */
        if (PORT_ReadData(p_scb->conn_handle, buf, BTA_AG_RFC_READ_MAX, &len) != PORT_SUCCESS)
        {
            break;
        }

        /* if no data, we're done */
        if (len == 0)
        {
            break;
        }

        /* run AT command interpreter on data */
        bta_sys_busy(BTA_ID_AG, p_scb->app_id, p_scb->peer_addr);
        bta_ag_at_parse(&p_scb->at_cb, buf, len);
        bta_sys_idle(BTA_ID_AG, p_scb->app_id, p_scb->peer_addr);
        /* no more data to read, we're done */
        if (len < BTA_AG_RFC_READ_MAX)
        {
            break;
        }
    }
}

2 在bta_ag_at_parse函数里面,如果AT命令正确,就调用bta_ag_process_at函数解析AT命令,如果AT命令正确,就调用callback函数,如代码中的(*p_cb->p_cmd_cback)(p_cb->p_user, idx, arg_type, p_arg, int_arg);

void bta_ag_at_parse(tBTA_AG_AT_CB *p_cb, char *p_buf, UINT16 len)
{
    int i = 0;
    char* p_
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值