关贸总协定CMD启动(状态=134)应如何解释? 我正在研究一个Android应用程序,在那里我需要与蓝牙LE设备进行通信,在通信的中间,我收到一个回调: onCharacteristicWrite()

关贸总协定CMD启动(状态=134)应如何解释? 我正在研究一个Android应用程序,在那里我需要与蓝牙LE设备进行通信,在通信的中间,我收到一个回调: onCharacteristicWrite(),android,bluetooth,bluetooth-lowenergy,Android,Bluetooth,Bluetooth Lowenergy,…这是意料之中的。但是操作的状态是134而不是0(=成功) GATT状态常数未在官方API中定义,但以下是许多非官方列表之一的翻译: 请参见: 我可以看到,在我的应用程序中,结果是我没有收到预期的回调: onCharacteristicChanged() 有人知道《关贸总协定》是什么意思吗?这是一个错误吗?从bludroid源代码中获取的以下函数的描述提示您的GATT服务器中有一些功能工作不正常 命令似乎在那里“排队”,因为在if(…)子句前面的注释中暗示,必须有挂起的请求或值确认 在您执行w

…这是意料之中的。但是操作的状态是134而不是0(=成功)

GATT状态常数未在官方API中定义,但以下是许多非官方列表之一的翻译:

请参见:

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

onCharacteristicChanged()

有人知道《关贸总协定》是什么意思吗?这是一个错误吗?

从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;
}
从中的第469行开始。
可以找到本机GATT错误和状态代码。

我仍然有点困惑。以前的回调都返回GATT_SUCCESS,这对我来说表明没有问题。据我所知,没有办法询问关贸总协定服务器是否准备接受更多的工作。你能提供关贸总协定服务器的更多信息吗?有关于服务或特性的线索吗?尝试调用getPermissions()和getProperties()来描述您试图编写的特性,可能会提供更多信息。有关其方法和返回值,请参见。
/*******************************************************************************
**
** 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;
}