通知和GATTC_CMP_EVT

5文章/ 0
最后发表
Joacimwe
离线
最后看到:1年8个月前
大师
加入:2014-01-14 06:45
通知和GATTC_CMP_EVT

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缓冲?

关键词:
设备:
RvA
离线
最后看到:21小时前1个月
工作人员
加入:2014-02-07 14:10
嗨Joacimwe,

嗨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];

静态int gattc_write_cmd_ind_handler (ke_msg_id_t const是否,
struct gattc_write_cmd_ind const *参数,

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);

}

Joacimwe
离线
最后看到:1年8个月前
大师
加入:2014-01-14 06:45
对不起,但是

对不起,但分散的写与我的问题通知和GATTC_CMP_EVT呢?

RvA
离线
最后看到:21小时前1个月
工作人员
加入:2014-02-07 14:10
是的,你是对的。实际上

是的,你是对的。实际上处理BLE堆栈,GATTC_CMP_EVT将被发送时的PDU让包装并提交L2CC任务发送,不是等到PDU是真的发出去。所以在接下来的传染性连接事件到来之前,或许等待传输多个pdu,他们将在一个连接发送事件。

最好的问候,RvA

Joacimwe
离线
最后看到:1年8个月前
大师
加入:2014-01-14 06:45
谢谢你!

谢谢你!

主题锁定