DSPS主机应用程序无法正确接收其他设备名称

18个职位/0个新职位
最后一篇
杰克肖
离线
最后一次见到:3年5个月前
加入:2016-01-15 01:32
DSPS主机应用程序无法正确接收其他设备名称

我有2个DA14580AK EVB和加载到2个不同的EVB的DSP设备和主机应用程序。我在主机的gapm\u adv\u report\u ind\u处理程序中设置断点,并在监视视图中显示param->report.adv\u addr.addr¶m->report.data的值。对话主机能正确显示对话设备名称和BD地址。如果对话主机接收到另一品牌BLE的广告消息,则只能正确接收BD地址,但接收到的设备名称是垃圾。但是,DSPS android应用程序可以正确显示这些设备名称,请告知。

int gapm\u adv\u report\u ind\u handler(ke\u msg\u id\u t const msgid,
const struct gapm\u adv\u report\u ind*参数,
ke_task_id_t const dest_id,
ke_task_id_t const src_id)
{
memset(gbdadress,0,sizeof(struct bd_addr));
memcpy(gBLEname,param->report.data,param->report.data长度);
memcpy(gBdAddress,param->report.adv_addr.addr,sizeof(struct bd_addr));
如果(!memcmp(¶m->report.data[3],应用程序\u DFLT\u ADV\u data,应用程序\u DFLT\u ADV\u data\u LEN))
{
//将找到的bd\u addr保存到全局变量
memcpy(&connect_bdaddr,param-> eport.addr.addr,sizeof(struct bd_addr));

app_cancel_scanning();
}
return(ke_msg_consumed);
}

设备:
MT\u对话框
离线
最后一次见到:2个月3周前
职员
加入:2015-06-08 11:34
你好,杰克肖,

你好,杰克肖,

当你说“垃圾”时,你的意思是什么,当你得到广告指示时,十六进制价值是应该是的一个?也许您还看到了先前迹象的数据,因为您不会将您存储广告字符串存储的数组。

谢谢你的对话

杰克肖
离线
最后一次见到:3年5个月前
加入:2016-01-15 01:32
嗨,MT\u dialog,

嗨,MT\u dialog,

“垃圾”意味着虽然可以接收到相关的BdAddress,但无法获得正确的设备名称。不过,dspsandroid应用程序可以正确显示这些设备名称。谢谢。

MT\u对话框
离线
最后一次见到:2个月3周前
职员
加入:2015-06-08 11:34
你好,杰克肖,

你好,杰克肖,

当你得到一个广告指示时,你得到的十六进制值是什么,你能检查它们而不是ascii字符吗?请检查param->report.data参数,而不是要复制数据的数组,好吗?或者可能是由于优化,您无法检查实际数据,请您尝试打印数据,而不是在调试器中检查它们?虽然我可以看到有效的数据时,广告指示来我的设置。

谢谢你的对话

杰克肖
离线
最后一次见到:3年5个月前
加入:2016-01-15 01:32
嗨,MT\u dialog,

嗨,MT\u dialog,

Please find the attachment. It's one the of device names showing incorrect HEX values. I tried to print param->report.data parameter via console and the results were the same. Dialog device name could be shown, I don't think that it's related to optimization issue, please kindly advise.

MT\u对话框
离线
最后一次见到:2个月3周前
职员
加入:2015-06-08 11:34
你好,杰克肖,

你好,杰克肖,

似乎有点奇怪,只要我从屏幕截图看,AD标志在调试器0x02,0x01和0x06中正确显示了,1A是广告字符串报告的数据的长度,FF是制造商特定的数据。如果580过滤出下一个字节,它有点奇怪。您确定要在广告字符串中放置的值吗?请您使用只解析像BlueLoupe这样的广告字符串的应用程序。也许在您使用的应用中看到的是您所使用的应用程序是由手机缓存而不是实际广告字符串的设备名称。

谢谢你的对话

杰克肖
离线
最后一次见到:3年5个月前
加入:2016-01-15 01:32
嗨,MT\u dialog,

嗨,MT\u dialog,

实际上,广告串是通过广播接收的,不是我传送的。我只是想知道为什么DSPS-apk或我的BLE监视器(带有USB-BLE模块的PC应用程序)可以接收这些广告,但在我的对话主机中却不是这样。

Also, I have another question. In host DSPS project, sleep mode is disable. I put a printf_string("T") in the while loop of main_func. When the program was run by debugger, several hundred "T" was printed, then nothing. I stopped the debugger and ran again, one more "T" was printed. What's going on? I expected continuous "T" was printed, please kindly advise.

MT\u对话框
离线
最后一次见到:2个月3周前
职员
加入:2015-06-08 11:34
你好,杰克肖,

你好,杰克肖,

正如我在屏幕截图中提到的那样,我可以看到广告字符串的标志,主机(至少在我的侧面可以正确接收广告字符串,当我在广告字符串中放置名称我可以检查名称在额外的阵列变量中),现在考虑到您的其他设备能够检查每个用户的名称是因为这些设备可以缓存所连接的设备的名称或类似于该设备或设备可以从扫描响应数据字符串读取名称。为了确保您可以使用外设宣传,并通过中央捕获外设的广告,并检查您放置在设备的广告字符串中的名称。还有另一件事

As far as the printing the "T" try to use the function that directly uses the UART for example uart_write("T", 1, NULL);

谢谢你的对话

杰克肖
离线
最后一次见到:3年5个月前
加入:2016-01-15 01:32
嗨,MT\u dialog,

嗨,MT\u dialog,

我发现,当调用app_cancel_scanning()或app_disconnect()时,未打印“t”。调用app_scanning()或app_connect()后,打印连续的“t”。在运行App_cancel_scanning()或app_disconnect()时,程序计数器似乎停止,直到收到中断。它通过添加Systick计时器证明。请诚挚建议。另外,是否有可能为您的HK员工提供帮助我,谢谢?

另外,很多开发人员在I2C从机问题上请求帮助,你方是否会考虑一下这个问题?

MT\u对话框
离线
最后一次见到:2个月3周前
职员
加入:2015-06-08 11:34
你好,杰克肖,

你好,杰克肖,

A mail is sent to the registered email address.

谢谢你的对话

杰克肖
离线
最后一次见到:3年5个月前
加入:2016-01-15 01:32
嗨,MT\u dialog,

嗨,MT\u dialog,

因为有时外围设备断开连接并无法永久连接Central,我尝试在断开按钮后发出App_reset_App()。此时,虽然中心可以接收广告并连接到外围设备,但外围设备无法接收中心的发送数据。调用app_reset_app()后,是否有任何状态更改,或者我应该需要初始一些代码,以便中央可以再次连接它?

另外,在发出app\u reset\u app()之后,BLE计时器似乎停止了,我注意到app\u timer\u set的处理程序没有被触发。谢谢。

MT\u对话框
离线
最后一次见到:2个月3周前
职员
加入:2015-06-08 11:34
你好,杰克肖,

你好,杰克肖,

你不需要为了发送一个重置命令reconnect to a device, most probably something is wrong with the way you are issuing a connection request to the peripheral. Can you please paste the code that you are using in order to connect from the central ? Also on which SDK you are developing, you are using the DSPS on the SDK5 or on SDK3 as an example? What do you mean that The peripheral couldn't receive the centrals trasmited data (notifications/indications) ? After a GAPM_RESET your device should be set from the app_easy_gap_dev_configure() (in SDK5) function which will set the role, operation, etc of your device.

谢谢你的对话

杰克肖
离线
最后一次见到:3年5个月前
加入:2016-01-15 01:32
我在SDK5上用DSP。

我在SDK5上用DSP。
在中心侧,I通过UART输入字符以手动扫描,取消扫描,连接和断开外围设备。我刚刚使用了所有的API。
static void uart_rx_callback(uint8_t res, uint32_t read_size)
{
struct bd_addr testDeviceAddr;
开关(rx_read_pointer [0]){
案例:
应用程序扫描();
中断;
案例“x”:
app_cancel_scanning();
中断;
案例“c”:
if(ke_state_get(TASK_APP)==APP_CONNECTABLE){
printf_string(“connect \ r \ n”);
应用程序连接();
}
中断;
案例“d”:
if(ke_state_get(task_app)== app_connected){
app_disconnect();
printf_string(“disconnect \ r \ n”);
}
中断;
案例'r':
printf_string(“重置堆栈\r\n”);
app_reset_app();
中断;
案例“t”:
printf_string(“set app_connectable \ r \ n”);
ke\ u state\ u set(任务\应用程序,应用程序\可连接);
中断;

违约:
中断;
}
#结束
//重新回调
uart\u sps\u read(rx\u read\u指针、rx\u回调\u大小、rx\u状态\u ptr和uart\u rx\u回调);
}

int gapc_disconnect_ind_handler(ke_msg_id_t const msgid,
结构gapc\u disconnect\u ind const*参数,
ke_task_id_t const dest_id,
ke_task_id_t const src_id)
{
app_disconnect();
ke\ u state\ u set(任务\应用程序,应用程序\可连接);
printf_string(“BLE连接丢失\r\n”);
return(ke_msg_consumed);
}
在外设端,在gapc\u connection\u req\u ind\u handler和gapc\u disconnect\u ind\u handler中打印调试消息,这样我就可以知道外设的连接是否已连接。
在上一篇文章中,我想说的是,有时外围设备可能会因为远程断开而断开连接。当central再次尝试连接外围设备时,它无法再次连接。然后我试着在外围设备上发布app\u reset\u app。此时,尽管central可以接收广告并连接到外围设备,但当central尝试以连接模式通过应用程序推送发送数据时,外围设备无法接收任何内容。
Also, at peripheral side, I have added a timer by calling app_timer_set() to print debug message per 1 second. However, when app_reset_app was issued, I observed that the debug message was stopped to be printed.

MT\u对话框
离线
最后一次见到:2个月3周前
职员
加入:2015-06-08 11:34
你好,杰克肖,

你好,杰克肖,

连接到设备时(使用app\u connect()函数时),如何分配gapm\u start\u connection\u cmd消息您使用的是KE\u MSG\u ALLOC\u DYN()或KE\u MSG\u ALLOC()宏。为了正确连接应使用ke_msg_alloc_dyn()。通过使用此缩小命令,不需要,外围设备应该能够重新连接。

谢谢你的对话

杰克肖
离线
最后一次见到:3年5个月前
加入:2016-01-15 01:32
嗨,MT\u dialog,

嗨,MT\u dialog,

我使用的是SDK5原始源代码提供的KE\u MSG\u ALLOC()。为什么KE\u MSG\u ALLOC()不是最好的解决方案?
如果我使用KE\u MSG\u ALLOC\u DYN()marco,如何定义参数“length”?
Will the central side disconnect because of timeout?
您是否试过一夜之间测试DSP中央和外围设备的连接?
实际上,无论扫描,停止扫描,连接或断开连接,中心都会通过外部事件手动操作。谢谢。

MT\u对话框
离线
最后一次见到:2个月3周前
职员
加入:2015-06-08 11:34
你好,杰克肖,

你好,杰克肖,

在SDK5中的DSP主机中,APP_CONNECT() - (是SDK3函数)函数未使用,而是使用API​​函数app_easy_gap_start_connection_to_msg_create()的API函数app_easy_gap_start_connection_to_msg_create(),这反过来调用app_connect_start_msg_create(),稍后的函数是使用ke_msg_alloc_dyn分配gapm_start_connection_cmd消息的函数。参数长度应为(sizeof(struct gap_bdaddr))。关于为什么要使用ke_msg_alloc_dyn,在附带的参数中的每一个消息/结构都具有一个名为空数组,必须与ke_msg_alloc_dyn分配。在SDK3中,使用KE_MSG_ALLOC,并且撰写为什么我们之后重置堆栈,但这不是启动或重新启动连接的正确方法。是的,由于超时,有一个断开连接。我不知道QA是否在DSP上进行了过夜测试,所以我无法肯定地告诉你,但我想那些测试的那种测试是标准的,所以我想他们有。

谢谢你的对话

杰克肖
离线
最后一次见到:3年5个月前
加入:2016-01-15 01:32
实际上我检查了SDK3

我检查了SDK3是否应该使用,因为DSPS项目只对SDK3可用。

MT\u对话框
离线
最后一次见到:2个月3周前
职员
加入:2015-06-08 11:34
你好,杰克肖,

你好,杰克肖,

DSP也在SDK 5中实现,请在参考设计中检查对话框串行端口服务。最新版本基于5.0.3 SDK版本。

谢谢你的对话