如何解释GATT_CMD_STARTED(状态= 134)?

时间:2015-07-21 11:06:15

标签: android bluetooth bluetooth-lowenergy

我正在开发一个Android应用程序,我需要与蓝牙LE设备进行通信,并且在通信过程中我收到回调:

onCharacteristicWrite() 

......这是预期的。但是操作的状态是134而不是0(=成功)。

此GATT状态常量未在官方API中定义,但此处是许多非官方列表中的一个翻译:

public static final int GATT_CMD_STARTED = 134;
     

请参阅: https://code.google.com/r/naranjomanuel-opensource-broadcom-ble/source/browse/framework/java/src/com/broadcom/bt/service/gatt/GattConstants.java?r=983950f9b35407446bf082633d70c7655c206d22

我可以在我的应用中看到的结果是,我没有得到预期的回调:

onCharacteristicChanged()

有人知道 GATT_CMD_STARTED 是什么意思吗?这是一个错误吗?

1 个答案:

答案 0 :(得分:1)

来自bludroid来源的以下功能的描述提示您的GATT服务器中的某些内容无法正常工作。

命令似乎"排队"在那里,因为if(...)条款之前的评论中必须有未决请求或价值确认。

在执行writeCharacteristic(...)之前,可能需要检查一下到底发生了什么,因为它似乎无法正确完成或在您的服务器中造成打嗝。

/*******************************************************************************
**
** Function         attp_cl_send_cmd
**
** Description      Send a ATT command or enqueue it.
**
** Returns          GATT_SUCCESS if command sent
**                  GATT_CONGESTED if command sent but channel congested
**                  GATT_CMD_STARTED if command queue up in GATT
**                  GATT_ERROR if command sending failure
**
*******************************************************************************/
tGATT_STATUS attp_cl_send_cmd(tGATT_TCB *p_tcb, UINT16 clcb_idx, UINT8 cmd_code, BT_HDR *p_cmd)
{
    tGATT_STATUS att_ret = GATT_SUCCESS;

    if (p_tcb != NULL)
    {   
        cmd_code &= ~GATT_AUTH_SIGN_MASK;

        /* no pending request or value confirmation */
        if (p_tcb->pending_cl_req == p_tcb->next_slot_inq ||
            cmd_code == GATT_HANDLE_VALUE_CONF)
        {
            att_ret = attp_send_msg_to_l2cap(p_tcb, p_cmd);
            if (att_ret == GATT_CONGESTED || att_ret == GATT_SUCCESS)
            {
                /* do not enq cmd if handle value confirmation or set request */
                if (cmd_code != GATT_HANDLE_VALUE_CONF && cmd_code != GATT_CMD_WRITE)
                {
                    gatt_start_rsp_timer (clcb_idx);
                    gatt_cmd_enq(p_tcb, clcb_idx, FALSE, cmd_code, NULL);
                }
            }
            else
                att_ret = GATT_INTERNAL_ERROR;
        }
        else
        {
            att_ret = GATT_CMD_STARTED;
            gatt_cmd_enq(p_tcb, clcb_idx, TRUE, cmd_code, p_cmd);
        }
    }
    else
        att_ret = GATT_ERROR;

    return att_ret;
}

android sources的第469行开始。 可以找到本地GATT错误和状态代码here