您好,我修改DSPS_5.150.2版本,知道CFG_MAX_CONNECTIONS最多能同时连接6个从机,如何才能实现呢?假设连接好了1个,从机向主机发送数据,主机处理数据,在处理数据过程中,打开另外一个从机,如何实现连接并处理新的从机发送的数据呢?请帮助回答上面两个问题,谢谢!
关键词:
设备:
您好,我修改DSPS_5.150.2版本,知道CFG_MAX_CONNECTIONS最多能同时连接6个从机,如何才能实现呢?假设连接好了1个,从机向主机发送数据,主机处理数据,在处理数据过程中,打开另外一个从机,如何实现连接并处理新的从机发送的数据呢?请帮助回答上面两个问题,谢谢!
没有人回答吗?我设置的#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,数据传输稳定?
因为580设计的限制,一般都是先扫完设备,然后再用direct_connection模式去直连设备,这样的方法去保证连多个。
可以参照SDK5里的host_apps \ windows \接近\监控\ src \ app.c下的app_connect函数。
我在user_on_adv_report_ind(结构gapm_adv_report_ind常量* PARAM)函数体里面,注释掉app_easy_gap_start_connection_to_set和user_gapm_cancel函数,把需要扫描到的从全部保存在一个链表里,我想知道如何把这些链表里的从属全部连接主?我需要如何
修改主里面的user_on_connection回调函数,我把user_on_connection和app_easy_gap_start_connection_to_set添加一个参数(链表中从
的下标),接下来我还需要修改什么地方呢,请多多指教!谢谢!
做了一个测试版本,你可以参考。我这里挂了2个设备没什么问题。之前有一点讲错了,是可以连上设备再扫描的。
以地址uint8_t peer_addr [6] = {0xff的,0xff的,0×00,0xca,0xea,0x80的}作为过滤,其中前两个0xff的里可以填任何数。
你好,我在使用这个工程时,调用user_gapm_cancel()这个函数时也会出现等待十几秒之后跳到wrap_platform_reset()函数中的情况,板子是用的是自己的,上面有32 k晶振,不知道导致的个问题出现的原因是什么,期待解答。
你好,非常感谢帮助!
在你提供的例程中,两个同时连接之后,大约1分钟后,中央进入空隙wrap_platform_reset(uint32_t的误差),误差= 0xf2f2f2f2;然后
程序死掉,无法运行。请问是咋回事?
现在在出差,手边暂时没环境再确认.....这个错一般是内存分配溢出。应该进HardFault_HandlerC了,你看看保存的
*(挥发性无符号长*)(STATUS_BASE + 0×14)= hardfault_args [5];// LR
*(挥发性无符号长*)(STATUS_BASE +为0x18)= hardfault_args [6];// 个人电脑
然后再对应的汇编里面找找是在哪里停住的
你确定吗?我这里重新又跑了一下,没问题啊。你是拿的演示板跑的吗?如果不是,请确认外接有32K时钟。
附上嗅探器捕获数据的文件,大概7-8分钟
非常感谢,我把你的项目移植到官网提供的DSPS_V5.150.2同时连接两个成功了,疑问是否需要把你项目中app_mid.h中line229,KE_MSG_ALLOC_DYN申请内存参数的sizeof(结构gap_bdaddr)改为CFG_MAX_CONNECTIONS *的sizeof(结构gap_bdaddr)。
参考你的工程,我修改是DSPS示例项目,同时连接两个从站,分别给中央发送数据,中央能同时正确接收两个从站的数据,现在我在收到数据需要给从属返回一个应答包,现在只有一个从属能收到应答包,另外一个从属只能发送数据而接收不到中央应答包,请问我如何能够区分给不同从属回指定的应答包,如何修改?谢谢!
[DSPS_V5.150.2]598770358@qq.com]谢谢
可以把移植好的DSPS_V5.150.2发我一份吗
可以把移植好的DSPS_V5.150.2发我一份吗邮箱:598770358">至mailto:598770358@qq.com“> 598770358@ qq.com |谢谢 P>
1.这个看你怎么用,如果你需要只发送一次连接命令,连多个地址,就改成CFG_MAX_CONNECTIONS *的sizeof(结构gap_bdaddr)。但是演示里面还是一个地址一个地址依次连接,所以的sizeof(结构gap_bdaddr)就够了。
2.不同的从属,会有不同的柄,连接的时候会获得。我想可以修改一下user_send_ble_data函数
空隙user_send_ble_data(常量uint8_t *数据,uint16_t长度,uint16_t conidx)//添加句柄参数吧
{
结构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,长度);//加一个句柄参数吧
req->长度=长度;
的memcpy(&req->数据[0],数据长度);
KE_MSG_SEND(REQ);
}
非常感谢帮助!
我需要在user_sps_client_data_rx_ind_handler(ke_msg_id_t常量MSGID,结构sps_client_data_rx_ind常量* PARAM,ke_task_id_t常量DEST_ID,
ke_task_id_t常量src_id)调用空隙user_send_ble_data(常量uint8_t *数据,uint16_t长度,uint16_t conidx),请问uint16_t conidx为spsc_envs.con_info.conidx的值吗?我调用该如何设置uint16_t conidx参数?不好意思,需求有点紧急,只好多问你了。
这个conidx就是你在user_on_connection函数里面拿到的connection_idx ,,每个连接都会有一个分配的值。
然后在default_app_on_connection函数里面调用app_prf_enable去使能之前已经分配好内存的数据库。
非常感谢帮助,中央同时连接两个从站后,中央继续一直扫描,这都没问题,Q1:请问断开一个后为啥不执行user_on_disconnect函数且两个断开都不执行该函数,
无效user_on_disconnect(结构gapc_disconnect_ind常量* PARAM)
{
default_app_on_disconnect(PARAM);
//重新启动扫描
user_scan_start ();
arch_printf( “设备断开\ r \ n”);
}
Q2:断开一个从属后,中央能接收另一个连接状态从属的数据,但是中央不能给该从机回应答数据,只有把断开的一个连接中央后从属才
能接收应答数据,请问是否和修改后user_send_ble_data函数中KE_BUILD_ID(TASK_SPS_CLIENT,conidx),有关?请问该如何解决?
给从属回应答数据在INT user_sps_client_data_rx_ind_handler(ke_msg_id_t常量MSGID,结构sps_client_data_rx_ind常量* PARAM,
ke_task_id_t const的DEST_ID,ke_task_id_t常量src_id)调用user_send_ble_data(ask_buf,7,param-> conhdl);
空隙user_send_ble_data(常量uint8_t *数据,uint16_t长度,uint16_t conidx)//添加句柄参数吧
{
结构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,长度);//加一个句柄参数吧
req->长度=长度;
的memcpy(&req->数据[0],数据长度);
KE_MSG_SEND(REQ);
}
谢谢帮助!
你好当时的DSPS的演示还在吗?