跳到主要内容

多角色示例发送数据

DA14530和DA14531

一年前

发布的BenjaminDu160点 12个回复
0的问题

嗨,对话框中,

简而言之,我的问题是如何将数据发送到slave中多用途的例子。

让我解释一下我的问题:

我使用586年DA14531-DA14585 _multirole连接多个slave的示例(我使用ble_app_profile例如,我可以连接多个slave,而master(多用途)可以从slave接收数据,但我不知道如何发送数据给slave,我用iPad连接slave(ble_app_profile示例),slave可以接收数据。

我测试了以下内容user_catch_rest_hndl回调,我希望如果有数据接收到,那么我将数据发送给slave,但是我可以从slave接收数据,而slave不能接收数据。

构造gattc_write_cmd *wr_char = KE_MSG_ALLOC_DYN(gattc_write_cmd,
dest_id src_id,
(struct Gattc_write_cmd);

/ /抵消
Wr_char ->offset = 0x0000;
//游标总是0
Wr_char ->游标= 0x0000;
//写入类型
wr_char->操作= GATTC_WRITE;
//特征值属性句柄
Wr_char ->句柄= 1;
//值长度
Wr_char ->长度= 3;
//自动执行
Wr_char ->auto_execute = true;
/ /值


int8_t AA [2];
AA [0] = 9;
AA [1] = 5;

memcpy (&wr_char[0] - >价值,AA, 2);

//发送信息
ke_msg_send (wr_char);

谢谢

便雅悯

一年前

PM_Dialog

嗨BenjaminDu,

谢谢你的问题。你可以使用BLE通知。请查阅DA14585/DA14586/DA14531中央执行演示了如何作为一个中心执行GATT读写。

在user_ble_gatt_c源文件中,您将找到user_ble_gatt_write()。该函数执行gatt写入。你应该向堆栈发送一个GATTC_WRITE_CMD命令。

谢谢,PM_Dialog

一年前

BenjaminDu 160点

嗨,对话框中,

非常感谢你的快速回答。

我发现user_ble_gatt_write ()与我在上面使用的函数类似,无论如何,我用不同的参数测试了函数,但仍然无法在从机中接收数据。

你能举例说明如何使用这个函数的参数吗?如图所示,从站可以接收来自LightBlue的数据,如果函数可以发送如图所示的数据,我相信这将是一个非常好的起点,我将能够使用这个函数。

再次感谢。

便雅悯

附件 大小
1. jpg 157.96 KB
2. jpg 159.6 KB
3. jpg 168.29 KB

一年前

BenjaminDu 160点

嗨,对话框中,

你能给我一个答复吗?

非常感谢

便雅悯

一年前

PM_Dialog

你好,本杰明,

让我检查一下,然后给你答复。

谢谢,PM_Dialog

一年前

BenjaminDu 160点

嗨,对话框中,

非常感谢你的回复,这几天我也尝试了很多参数,但是仍然没有得到很好的结果,

所以我希望你能给我一个答案。

再次感谢

便雅悯

一年前

BenjaminDu 160点

嗨,对话框中,

即使是一个例子也会很有帮助,希望你能有所帮助。

非常感谢

便雅悯

一年前

PM_Dialog

你好,本杰明,

很抱歉耽搁了。一个简单的问题:您希望在哪个服务中从GAP中心设备写入数据?是海关的问题吗?

你能分享user_ble_gatt_write()是如何被调用的吗?

谢谢,PM_Dialog

一年前

BenjaminDu 160点

嗨,对话框中,

非常感谢您的回复。

我叫user_ble_gatt_write ()在功能上user_catch_rest_hndl()。

下面是我用来调用的部分代码。

570
571 case GATTC_EVENT_IND
572年{
573
574 //跟随本杰明
575 int8_t AA[2];
576 AA [0] = 9;
577 AA [1] = 5;
578
579 user_ble_gatt_write (GATTC_WRITE_CMD conn_idx SVC1_IDX_LED_STATE_VAL, AA, sizeof (AA));
580
581
582 //后面两行输出接收到的数据。
struct gattc_event_ind const *msg_param = (struct gattc_event_ind const *)(param);
584 arch_printf(“< % d > \ t”,msg_param - >价值[0]);
585 //以上由Benjamin补充
586
587}打破;
588
589 case GAPM_CMP_EVT:
590年{

谢谢

便雅悯

一年前

BenjaminDu 160点

嗨,对话框中,

不同的服务有什么不同?你是说在客户服务中我不能打电话吗?

我的问题是,如果我能做正确的召唤,奴隶可以接收,任何地方都可以。

谢谢

便雅悯

一年前

BenjaminDu 160点

嗨,对话框中,

还有什么需要我补充的吗?

谢谢

便雅悯。

接受答案!

一年前

PM_Dialog

嗨BenjaminDu,

请检查中央实现SW示例中的handle_svc_ind()。当接收到GATTC_SDP_SVC_IND时,handle_svc_ind(con_idx, disc_svc);在user_catch_rest_hndl()中调用。GATTC_SDP_SVC_IND意味着服务发现指示已找到服务,因此一旦找到新服务就会触发handle_svc_ind()。如果检查handle_svc_ind()中的代码,您将看到它发现了BAS(ENABLE_BAS)和IAS服务(ENABLE_IAS)。发现业务后,可按中心设备上的按钮。这将写入警报服务,并开始闪烁接近报告器上的LED。如果发送正确,您还应该看到对终端的写入。

因此,当按下按钮时,将调用user_ble_gatt_write()以便写入IAS。

对于自定义服务(SVC1_IDX_LED_STATE_VAL),您应该遵循相同的过程。发现handle_svc_ind()中的自定义服务,然后对正确的属性句柄执行GATT写入。

谢谢,PM_Dialog

一年前

BenjaminDu 160点

嗨,对话框中,

非常感谢你的回答,这很有帮助。

便雅悯