向一个特征发送多个字节

⚠️
大家好. .谢谢你来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台,它将提供更好的功能,包含在主对话网站中。所有岗位和账户都已迁移。我们现在只接受新论坛的流量-请在上面发布任何新帖子//www.xmece.com/support.我们将在未来几天修复bug /优化搜索和标记。
5个职位/ 0个新
最后发表
Niekvdd
离线
最后看到:2年1个月前
加入:2017-01-25 09:29
向一个特征发送多个字节

你好,

在Training_03_custom_profile_gatt_cmd_example_v1之后,我试图使用SDK中的ble_app_peripheral项目向一个特征写入多个字节。

我目前面临的问题是,当多个字节被发送到特征时,处理程序不会被触发。我正在用运行BlueLoupe的安卓手机发送数据。通过发送0x01和0x00分别打开和关闭LED没有问题。我将user_custs1_def.h中的DEF_USER_LED_STATE_CHAR_LEN从1增加到几个更高的数字,但是当向特征发送其他数据时,没有一个使583执行处理程序,而不是0x00或0x01。

当多个字节被发送到一个特征时,我如何修改被触发的处理程序?

亲切的问候,
Niek

我使用SDK 5.0.3.268,而不是5.0.2.1,但这个选项是不可选择的

关键词:
设备:
MT_dialog
离线
最后看到:4个月,1个星期前
工作人员
加入:2015-06-08 34
嗨Niekvdd,

嗨Niekvdd,

正确如果我有问题,你不能触发编写处理程序根据字节,你有在你的特点,编写回调在每个触发大量数据(每个写命令),客户端发送,而不是在每个字节,以触发每个字节的处理程序,您需要发送数据字节字节从你的中央。在自定义配置文件实现中,gattc_write_cmd_ind_handler()函数会在每个GATTC_WRITE_CMD_IND上执行一次,并在每个写入事件中只发送一个CUSTS1_VAL_WRITE_IND函数。

由于MT_dialog

Niekvdd
离线
最后看到:2年1个月前
加入:2017-01-25 09:29
你好MT_dialog,

你好MT_dialog,

恐怕我没有解释清楚。我的意思是不要在一个写事件上多次触发该处理程序。
我想要的是发送多个字节到一个字符,并有处理程序仅触发一次。在处理程序本身中,我想使用多个字节。

我开始编辑培训中的代码,并在user_custs1_impl.c中编写如下内容
正如这段代码所示,我希望一次性处理发送给处理程序的所有字节。

ke_msg_id_t const msgid,
struct custs1_val_write_ind const *参数,
ke_task_id_t const dest_id,
ke_task_id_t const src_id)


char n [8];
For (int I = 0;我< 8;我+ +){
N [i] = (char) param->value[i];

如果(check_key (n)) {
uint8_t led_state = 0;
memcpy (&led_state param - >价值[8],param - >长度);
如果(led_state = = LED_ON)
GPIO_SetActive (GPIO_LED_PORT GPIO_LED_PIN);
else if (led_state = = LED_OFF)
GPIO_SetInactive (GPIO_LED_PORT GPIO_LED_PIN);

亲切的问候,
Niek

MT_dialog
离线
最后看到:4个月,1个星期前
工作人员
加入:2015-06-08 34
嗨Niekvdd,

嗨Niekvdd,

我不能理解你的问题是什么,你将能够写一个以上的字节,并将其发送到外围和处理程序将发生。例如,如果您将特征的长度修改为——假设为50 (#define DEF_CUST1_CTRL_POINT_CHAR_LEN 50),处理程序将触发一次,并将指向客户端发送的50个字节的指针传递给您的应用程序。您可以在ble_app_peripheral示例中进行一个简单的测试。

由于MT_dialog

Niekvdd
离线
最后看到:2年1个月前
加入:2017-01-25 09:29
嗨MT_dialog,

嗨MT_dialog,

它现在正在工作。在这个过程中,我让自己相信当我发送多个字节时,该处理程序不会被触发。我认为这是因为led只有在你发送十六进制01或0100时才会打开,而不是我一直测试的0001。

谢谢你的帮助!

亲切的问候,
Niek