亲爱的对话框支持,
是否有一个简单的方法来检查ble堆栈状态是自由的?
我想写一个程序,它总是通过蓝牙发送一个数值,一旦旧的数值发送。
亲切的问候。
嗨DMueller,
对不起,我不太明白你的问题,你能解释一下吗?
如果你想做你在你的帖子的第二行所描述的,你可以使用指示(中央必须确认接收消息,所以你将得到一个完成的消息,一旦中央收到指示)。另一方面,也会使用通知,但是在应用程序级别上,客户端不会对接收进行确认。
由于MT_dialog
嗨MT_dialog,
如果我想发送两个字节,这些字节被存储在一个堆栈上。我可以像缓冲区一样填满这个堆栈。或者这不是真的?
我的问题是,我可以通过标志或其他指示符来识别这个堆栈/缓冲区是满的还是空的?
是的,我想这样做。在中心有通知。但我希望服务器能够识别它是否可以发送或不。
与缓冲区一样交换BLE堆栈是非常简单的,因为它实现了整个BLE堆栈,事情并不是那么简单,并且作为最终用户,您可以与BLE概念接口,而不是堆栈如何处理RX / TX消息,但在底线让我们可以假设我们可以通过通知发送具有2个字节长度长度的特征的值,然后堆栈将与指针队一起队列,该指针将指向该特征数据到18中的指针长度消息缓冲区。因此,如同通知,所以允许拍摄例如在BLE_APP_PERITELAL中实现的自定义配置文件,该应用程序将发送CUSTS1_VAL_IND_REQ(应用程序特定消息),配置文件将发出CUTTC_SEND_EVT_CMD,以将堆栈发送到TX缓冲区在下一个连接间隔中会发生发送。现在,通知不涉及从另一侧的确认(来自连接主机的ACK),但一旦发送Gattc_send_evt_cmd,堆栈将回复该消息,即通知已放入缓冲区中。为了让您知道通知已输入缓冲区,它将与GattC_CMP_EVT和来自GattC_CMP_EVT_HANDLER()回复配置文件将通知应用程序(使用CUSTS1_VAL_NTF_CFM消息)通知已成功输入缓冲区和它将留在下一个连接间隔。您可以在user_catch_rest_hndl()中捕获此消息。
谢谢你的回答。不幸的是,这并不完全是我的意思,因为CUSTS1_VAL_NTF_CFM消息只是在我发送一些东西之后才出现的。但我也想知道,如果什么都没有在ble堆栈中。
当ble堆栈中没有值时,我想每次发送一个新值。在程序的开始,ble堆栈通常是空的。我想实现这样的东西:如果(ble堆栈中没有东西){struct custs1_val_ntf_req* req = KE_MSG_ALLOC_DYN(custs1_val_ntf_req, TASK_CUSTS1, TASK_APP, custs1_val_ntf_req, DEF_CUST1_ADC_VAL_1_CHAR_LEN);
静态uint16_t样本;Sample = (Sample <= 0xffff) ?(sample + 1): 0;
申请- > conhdl = app_env - > conhdl;申请- >处理= CUST1_IDX_ADC_VAL_1_VAL;申请- >长度= DEF_CUST1_ADC_VAL_1_CHAR_LEN;顺利进行,memcpy(请求- >价值DEF_CUST1_ADC_VAL_1_CHAR_LEN);ke_msg_send(要求的);
if (ke_state_get(TASK_APP) == APP_CONNECTED){//再次设置,直到在控制特性中接收到停止命令timer_used = app_easy_timer(APP_PERIPHERAL_CTRL_TIMER_DELAY, app_adcval1_timer_cb_handler);}}
存在一种实现这一目标的方法吗?
嗨DMuller,
我不确定我理解这种实现的原因,是的,确认消息被发送回应用程序,一旦通知被成功地放置在TX缓冲区,直到连接间隔时刻到来和数据被释放。您可以尝试使用l2cm_get_nb_buffer_available()函数,它将返回低级别缓冲区中数据的可用大小。
我想在下一个值之后发送一个值。新值可能直到前一个值被发送后才会被发送。
非常感谢您的帮助。现在它的工作原理。
嗨DMueller,
对不起,我不太明白你的问题,你能解释一下吗?
如果你想做你在你的帖子的第二行所描述的,你可以使用指示(中央必须确认接收消息,所以你将得到一个完成的消息,一旦中央收到指示)。另一方面,也会使用通知,但是在应用程序级别上,客户端不会对接收进行确认。
由于MT_dialog
嗨MT_dialog,
如果我想发送两个字节,这些字节被存储在一个堆栈上。我可以像缓冲区一样填满这个堆栈。或者这不是真的?
我的问题是,我可以通过标志或其他指示符来识别这个堆栈/缓冲区是满的还是空的?
是的,我想这样做。在中心有通知。但我希望服务器能够识别它是否可以发送或不。
亲切的问候。
嗨DMueller,
与缓冲区一样交换BLE堆栈是非常简单的,因为它实现了整个BLE堆栈,事情并不是那么简单,并且作为最终用户,您可以与BLE概念接口,而不是堆栈如何处理RX / TX消息,但在底线让我们可以假设我们可以通过通知发送具有2个字节长度长度的特征的值,然后堆栈将与指针队一起队列,该指针将指向该特征数据到18中的指针长度消息缓冲区。因此,如同通知,所以允许拍摄例如在BLE_APP_PERITELAL中实现的自定义配置文件,该应用程序将发送CUSTS1_VAL_IND_REQ(应用程序特定消息),配置文件将发出CUTTC_SEND_EVT_CMD,以将堆栈发送到TX缓冲区在下一个连接间隔中会发生发送。现在,通知不涉及从另一侧的确认(来自连接主机的ACK),但一旦发送Gattc_send_evt_cmd,堆栈将回复该消息,即通知已放入缓冲区中。为了让您知道通知已输入缓冲区,它将与GattC_CMP_EVT和来自GattC_CMP_EVT_HANDLER()回复配置文件将通知应用程序(使用CUSTS1_VAL_NTF_CFM消息)通知已成功输入缓冲区和它将留在下一个连接间隔。您可以在user_catch_rest_hndl()中捕获此消息。
由于MT_dialog
嗨MT_dialog,
谢谢你的回答。不幸的是,这并不完全是我的意思,因为CUSTS1_VAL_NTF_CFM消息只是在我发送一些东西之后才出现的。但我也想知道,如果什么都没有在ble堆栈中。
当ble堆栈中没有值时,我想每次发送一个新值。在程序的开始,ble堆栈通常是空的。我想实现这样的东西:
如果(ble堆栈中没有东西)
{
struct custs1_val_ntf_req* req = KE_MSG_ALLOC_DYN(custs1_val_ntf_req, TASK_CUSTS1, TASK_APP, custs1_val_ntf_req, DEF_CUST1_ADC_VAL_1_CHAR_LEN);
静态uint16_t样本;
Sample = (Sample <= 0xffff) ?(sample + 1): 0;
申请- > conhdl = app_env - > conhdl;
申请- >处理= CUST1_IDX_ADC_VAL_1_VAL;
申请- >长度= DEF_CUST1_ADC_VAL_1_CHAR_LEN;
顺利进行,memcpy(请求- >价值DEF_CUST1_ADC_VAL_1_CHAR_LEN);
ke_msg_send(要求的);
if (ke_state_get(TASK_APP) == APP_CONNECTED)
{
//再次设置,直到在控制特性中接收到停止命令
timer_used = app_easy_timer(APP_PERIPHERAL_CTRL_TIMER_DELAY, app_adcval1_timer_cb_handler);
}
}
存在一种实现这一目标的方法吗?
亲切的问候。
嗨DMuller,
我不确定我理解这种实现的原因,是的,确认消息被发送回应用程序,一旦通知被成功地放置在TX缓冲区,直到连接间隔时刻到来和数据被释放。您可以尝试使用l2cm_get_nb_buffer_available()函数,它将返回低级别缓冲区中数据的可用大小。
由于MT_dialog
嗨MT_dialog,
我想在下一个值之后发送一个值。新值可能直到前一个值被发送后才会被发送。
非常感谢您的帮助。现在它的工作原理。
亲切的问候。