你好,
我尝试使用SDK中的ble_app_peripheral项目将多个字节写入一个特征,后面是Training_03_custom_profile_gatt_cmd_example_v1。
我目前面临的问题是,当多个字节发送到特征时,处理程序不会触发。我用运行BlueLoupe的安卓手机发送数据。分别发送0x01和0x00来开启和关闭LED都没有问题。我将user_custs1_def.h中的DEF_USER_LED_STATE_CHAR_LEN从1增加到几个更大的数字,但是当将其他数据发送到特征时,除了0x00或0x01,它们都没有使583执行处理程序。
当多个字节被发送到一个特征时,我如何修改被触发的处理程序?
亲切的问候,
Niek
我使用的是SDK 5.0.3.268,而不是5.0.2.1,但是这个选项是不可选择的
设备:
嗨Niekvdd,
正确如果我有问题,你不能触发编写处理程序根据字节,你有在你的特点,编写回调在每个触发大量数据(每个写命令),客户端发送,而不是在每个字节,以触发每个字节的处理程序,您需要发送数据字节字节从你的中央。在自定义概要文件实现中,gattc_write_cmd_ind_handler()函数通知应用程序特征已写入,它在每个GATTC_WRITE_CMD_IND上执行一次,并在每个写入事件中只发送一个CUSTS1_VAL_WRITE_IND。
由于MT_dialog
你好MT_dialog,
恐怕我没有解释清楚。我的意思是不要在一个写事件上多次触发处理程序。
我想要的是发送多个字节到一个字符,并让处理器只触发一次。在处理程序本身,我想使用多个字节。
我开始编辑来自培训的代码,并在user_custs1_impl.c中编写了以下内容
正如这段代码所示,我想一次处理发送给处理程序的所有字节。
Void user_led_wr_ind_handler(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
嗨Niekvdd,
我不能理解你的问题是什么,你将能够写超过一个字节,并将它发送到外设和处理程序将发生。例如,如果您修改特征的长度,比如说50 (#define DEF_CUST1_CTRL_POINT_CHAR_LEN 50),处理程序将触发一次,并将指向客户端发送的50字节的指针传递给应用程序。您可以在ble_app_peripheral示例中进行一个简单的测试。
由于MT_dialog
嗨MT_dialog,
它现在正在工作。后来,我让自己相信,当我发送多个字节时,处理器没有被触发。我认为这是因为led只在你发送十六进制01或0100时打开,而不是我一直在测试的0001。
谢谢你的帮助!
亲切的问候,
Niek