在http://support.dialog-semiconductor.com/resource/gatt-interface-specific..。,我可以阅读以下通知:
“发送通知:req_type应当设置为GATTC_NOTIFY。GATTC_CMP_EVT消息发送回尽快通知PDU已经通过空气发送。”
然而,我怀疑是真理。在我的代码,我发送一个通知,和下一个发送通知GATTC_CMP_EVT到达后(这表明前通知PDU已经通过空气发送)。但在SmartSnippets我可以看到多个通知发送单个连接间隔期间,使用嗅探器,我也看到,更多的数据标志被设置为true的所有通知,除了最后一个。但这国旗不可能被设置为true,如果我发送下一个前一个后通知已经通过空气发送,因为它不知道在那个时候,我将发送另一个通知。
我的问题是,当GATTC_CMP_EVT消息真的发送吗?也许当通知被放在一些祝福tx缓冲?
关键词:
设备:
嗨Joacimwe,
抱歉为延迟。我有以下的建议。最初只有最后pdu将存储。
更大的字体部分反映了我们的变化:
/ * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* @brief处理接收的@ref GATT_WRITE_CMD_IND消息。
* @param[在]是否接收到的消息Id(可能是未使用的)。
* @param[在]参数指针的参数信息。
* @param[在]dest_id接收任务实例的ID(可能是未使用的)。
* @param[在]src_id发送任务实例的ID。
* @return如果消息是否消耗。
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* /
静态uint8_t sample128_1_buffer [200];
ke_task_id_t const dest_id,
ke_task_id_t const src_id)
{
uint8_t char_code = SAMPLE128_ERR_CHAR;
uint8_t状态= PRF_APP_ERROR;
如果(KE_IDX_GET (src_id) = = sample128_env.con_info.conidx)
{
如果(param - >处理= = sample128_env。sample128_shdl + SAMPLE128_1_IDX_VAL)
{
char_code = SAMPLE128_1_CHAR;
}
如果(param - >处理= = sample128_env。sample128_shdl + SAMPLE128_2_IDX_CFG)
{
char_code = SAMPLE128_2_CFG;
}
如果(char_code = = SAMPLE128_1_CHAR)
{
/ /保存值的缓冲区
memcpy (&sample128_1_buffer (param - >抵消),参数[0]- >值,参数- >长度);
如果(param - >最后)
{
sample128_send_val (uint8_t *) &sample128_1_buffer [0], param - >抵消+参数- >长度);
attmdb_att_set_value (param - >处理,参数- >抵消+参数- >长度(uint8_t *) &sample128_1_buffer [0]);
}
状态= PRF_ERR_OK;
}
else if (char_code = = SAMPLE128_2_CFG)
{
/ /写价值
uint16_t ntf_cfg;
/ /提取值之前检查
ntf_cfg = co_read16p (param - >值[0]);
/ /只更新配置如果值停止或启用通知
如果(ntf_cfg = = PRF_CLI_STOP_NTFIND | | (ntf_cfg = = PRF_CLI_START_NTF))
{
在DB / /保存价值
attmdb_att_set_value (param - >处理,sizeof (uint16_t), (uint8_t *)参数- >值[0]);
/ /保存信息环境
如果(ntf_cfg = = PRF_CLI_START_NTF)
{
/ / Ntf cfg位设置为1
sample128_env。功能| = PRF_CLI_START_NTF;
}
其他的
{
/ / Ntf cfg位设置为0
sample128_env。& = ~ PRF_CLI_START_NTF特性;
}
状态= PRF_ERR_OK;
}
}
}
/ /发送写响应
atts_write_rsp_send (sample128_env.con_info。conidx, param - >处理、状态);
返回(KE_MSG_CONSUMED);
}
对不起,但分散的写与我的问题通知和GATTC_CMP_EVT呢?
是的,你是对的。实际上处理BLE堆栈,GATTC_CMP_EVT将被发送时的PDU让包装并提交L2CC任务发送,不是等到PDU是真的发出去。所以在接下来的传染性连接事件到来之前,或许等待传输多个pdu,他们将在一个连接发送事件。
最好的问候,RvA
谢谢你!