GATT_CMD_STARTED (status=134) 应该如何解释?
How should GATT_CMD_STARTED (status=134) be interpreted?
我正在开发一个 android 应用程序,我需要在其中与蓝牙 LE 设备通信,并且在通信过程中我收到回调:
onCharacteristicWrite()
...这是预期的。但是操作的状态是 134 而不是 0(= 成功)。
这个 GATT 状态常量在官方 API 中没有定义,但这里是许多非官方列表之一的翻译:
public static final int GATT_CMD_STARTED = 134;
据我所知,在我的应用程序中我没有得到预期的回调:
onCharacteristicChanged()
有人知道GATT_CMD_STARTED是什么意思吗?是不是出错了?
从 bludroid 资源中获取的以下功能的描述暗示您的 GATT 服务器中某些部分无法正常工作。
命令似乎 "queue up" 在那里,因为 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。
我正在开发一个 android 应用程序,我需要在其中与蓝牙 LE 设备通信,并且在通信过程中我收到回调:
onCharacteristicWrite()
...这是预期的。但是操作的状态是 134 而不是 0(= 成功)。
这个 GATT 状态常量在官方 API 中没有定义,但这里是许多非官方列表之一的翻译:
public static final int GATT_CMD_STARTED = 134;
据我所知,在我的应用程序中我没有得到预期的回调:
onCharacteristicChanged()
有人知道GATT_CMD_STARTED是什么意思吗?是不是出错了?
从 bludroid 资源中获取的以下功能的描述暗示您的 GATT 服务器中某些部分无法正常工作。
命令似乎 "queue up" 在那里,因为 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。