17 posts / 0 new
Last post
RandyYu
Offline
Last seen:2 years 7 months ago
加入:2015-01-28 08:49
DA14580多个从机和DA14580主机通信

您好,我修改DSPS_5.150.2版本,知道CFG_MAX_CONNECTIONS最多能同时连接6个从机,如何才能实现呢?假设连接好了1个,从机向主机发送数据,主机处理数据,在处理数据过程中,打开另外一个从机,如何实现连接并处理新的从机发送的数据呢?请帮助回答上面两个问题,谢谢!

Device:
RandyYu
Offline
Last seen:2 years 7 months ago
加入:2015-01-28 08:49
没有人回答吗?我设置#define CFG_MAX

没有人回答吗?我设置#define CFG_MAX_CONNECTIONS 6,然后我在void user_on_connection(uint8_t connection_idx, struct gapc_connection_req_ind const *param)函数里末行添加user_scan_start();host能同时连接两个slave,并且能接受到数据,但是接受的时间很短,host就死掉,然后就断开连接了,有没有什么方法能同时连接slave,数据传输稳定?

Gongyu_Dialog
Offline
Last seen:3 weeks 1 day ago
加入:2016-04-27 07:07
因为580设计的限制,一般都是先扫完设备

因为580设计的限制,一般都是先扫完设备,然后再用direct_connection模式去直连设备,这样的方法去保证连多个。
可以参照SDK5里的host_apps\windows\proximity\monitor\src\app.c 下的app_connect函数。

RandyYu
Offline
Last seen:2 years 7 months ago
加入:2015-01-28 08:49
我在user_on_adv_report_ind

我在user_on_adv_report_ind(struct gapm_adv_report_ind const * param)函数体里面,注释掉app_easy_gap_start_connection_to_set和user_gapm_cancel函数,把需要扫描到的slave全部保存在一个链表里,我想知道如何把这些链表里的slave全部连接master?我需要如何
修改master里面的user_on_connection回调函数,我把user_on_connection和app_easy_gap_start_connection_to_set添加一个参数(链表中slave
的下标),接下来我还需要修改什么地方呢,请多多指教!谢谢!

Gongyu_Dialog
Offline
Last seen:3 weeks 1 day ago
加入:2016-04-27 07:07
做了一个测试版本,你可以参考。我这里挂了2个设备没什么问题

做了一个测试版本,你可以参考。我这里挂了2个设备没什么问题。之前有一点讲错了,是可以连上设备再扫描的。
以地址uint8_t peer_addr[6] = {0xff, 0xff, 0x00, 0xca, 0xea, 0x80}作为过滤,其中前两个0xff里可以填任何数。

Oliver_Zero
Offline
Last seen:2 years 7 months ago
加入:2017-04-05 07:00
你好,我在使用这个工程时,调用 user_gapm

你好,我在使用这个工程时,调用user_gapm_cancel()这个函数时也会出现等待十几秒之后跳到 wrap_platform_reset() 函数中的情况,板子是用的是自己的,上面有 32k 晶振,不知道导致的个问题出现的原因是什么,期待解答。

RandyYu
Offline
Last seen:2 years 7 months ago
加入:2015-01-28 08:49
你好,非常感谢帮助!

你好,非常感谢帮助!
在你提供的例程中,两个同时连接之后,大约1分钟后,central进入void wrap_platform_reset(uint32_t error),error=0xf2f2f2f2;然后
程序死掉,无法运行。请问是咋回事?

Gongyu_Dialog
Offline
Last seen:3 weeks 1 day ago
加入:2016-04-27 07:07
现在在出差,手边暂时没环境再确认....

现在在出差,手边暂时没环境再确认.....这个错一般是memory分配溢出。应该进HardFault_HandlerC了,你看看保存的
*(volatile unsigned long *)(STATUS_BASE + 0x14) = hardfault_args[5]; // LR
*(volatile unsigned long *)(STATUS_BASE + 0x18) = hardfault_args[6]; // PC

然后再对应的汇编里面找找是在哪里停住的

Gongyu_Dialog
Offline
Last seen:3 weeks 1 day ago
加入:2016-04-27 07:07
你确定吗?我这里重新又跑了一下,没问题啊

你确定吗?我这里重新又跑了一下,没问题啊。你是拿的demo板跑的吗?如果不是,请确认外接有32K时钟。

附上sniffer捕获数据的文件,大概7-8分钟

Attachment:
RandyYu
Offline
Last seen:2 years 7 months ago
加入:2015-01-28 08:49
非常感谢,我把你的项目移植到官网提供的DSPS_V5

非常感谢,我把你的项目移植到官网提供的DSPS_V5.150.2同时连接两个成功了,疑问是否需要把你项目中app_mid.h中line229,KE_MSG_ALLOC_DYN申请内存参数sizeof(struct gap_bdaddr)改为CFG_MAX_CONNECTIONS * sizeof(struct gap_bdaddr)。
参考你的工程,我修改是DSPS示例项目,同时连接两个slaves,分别给central发送数据,central能同时正确接收两个slave的数据,现在我在收到数据需要给slave返回一个应答包,现在只有一个slave能收到应答包,另外一个slave只能发送数据而接收不到central应答包,请问我如何能够区分给不同slave回指定的应答包,如何修改?谢谢!!

蓝宝莹
Offline
Last seen:1 week 4 days ago
加入:2020-06-11 15:18
[DSPS_V5.150.2] 598770358@qq

[DSPS_V5.150.2]598770358@qq.com]谢谢

蓝宝莹
Offline
Last seen:1 week 4 days ago
加入:2020-06-11 15:18

可以把移植好的DSPS_V5.150.2发我一份吗

可以把移植好的DSPS_V5.150.2发我一份吗?邮箱:598770358">mailto:598770358@qq.com">598770358@qq.com|谢谢

Gongyu_Dialog
Offline
Last seen:3 weeks 1 day ago
加入:2016-04-27 07:07
1.这个看你怎么用,如果你需要只发送一次连接命令

1.这个看你怎么用,如果你需要只发送一次连接命令,连多个地址,就改成CFG_MAX_CONNECTIONS * sizeof(struct gap_bdaddr)。但是demo里面还是一个地址一个地址依次连接,所以sizeof(struct gap_bdaddr)就够了。

2.不同的slave,会有不同的handle,连接的时候会获得。我想可以修改一下user_send_ble_data函数

void user_send_ble_data(const uint8_t *data, uint16_t length,uint16_t conidx) //添加句柄参数吧
{
struct sps_client_data_tx_req * req = KE_MSG_ALLOC_DYN(SPS_CLIENT_DATA_TX_REQ,
KE_BUILD_ID(TASK_SPS_CLIENT,conidx), TASK_APP, sps_client_data_tx_req, length); //加一个句柄参数吧

req->length = length;
memcpy(&req->data[0], data, length);

ke_msg_send(req);
}

RandyYu
Offline
Last seen:2 years 7 months ago
加入:2015-01-28 08:49
非常感谢帮助!

非常感谢帮助!
我需要在user_sps_client_data_rx_ind_handler(ke_msg_id_t const msgid,struct sps_client_data_rx_ind const *param,ke_task_id_t const dest_id,
ke_task_id_t const src_id)调用void user_send_ble_data(const uint8_t *data, uint16_t length,uint16_t conidx) ,请问uint16_t conidx为spsc_envs.con_info.conidx的值吗?我调用该如何设置uint16_t conidx参数?不好意思,需求有点紧急,只好多问你了。

Gongyu_Dialog
Offline
Last seen:3 weeks 1 day ago
加入:2016-04-27 07:07
这个conidx就是你在user_on

这个conidx就是你在user_on_connection函数里面拿到的connection_idx,,每个连接都会有一个分配的值。
然后在default_app_on_connection函数里面调用app_prf_enable去使能之前已经分配好内存的database。

RandyYu
Offline
Last seen:2 years 7 months ago
加入:2015-01-28 08:49
非常感谢帮助,central同时连接两个slaves后

非常感谢帮助,central同时连接两个slaves后,central继续一直扫描,这都没问题,Q1:请问断开一个后为啥不执行user_on_disconnect函数?且两个断开都不执行该函数,
void user_on_disconnect( struct gapc_disconnect_ind const *param )
{
default_app_on_disconnect(param);
// Restart Scanning
user_scan_start();
arch_printf("Device disconnected\r\n");
}
Q2:断开一个slave后,central能接收另一个连接状态slave的数据,但是central不能给该slave回应答数据,只有把断开的一个 连接central后slave才
能接收应答数据,请问是否和修改后user_send_ble_data函数中 KE_BUILD_ID(TASK_SPS_CLIENT,conidx), 有关?请问该如何解决?
给slave回应答数据在int user_sps_client_data_rx_ind_handler(ke_msg_id_t const msgid, struct sps_client_data_rx_ind const *param,
ke_task_id_t const dest_id,ke_task_id_t const src_id)调用user_send_ble_data(ask_buf, 7,param->conhdl);

void user_send_ble_data(const uint8_t *data, uint16_t length,uint16_t conidx) //添加句柄参数吧
{
struct sps_client_data_tx_req * req = KE_MSG_ALLOC_DYN(SPS_CLIENT_DATA_TX_REQ,
KE_BUILD_ID(TASK_SPS_CLIENT,conidx), TASK_APP, sps_client_data_tx_req, length); //加一个句柄参数吧

req->length = length;
memcpy(&req->data[0], data, length);

ke_msg_send(req);
}
谢谢帮助!

houjun
Offline
Last seen:9 months 7 hours ago
加入:2019-03-04 06:32
你好 当时的DSPS的demo还在吗?

你好 当时的DSPS的demo还在吗?