在使用dsp主机时不能得到完整的adv和扫描响应包

⚠️
大家好. .谢谢你来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台,它将提供更好的功能,包含在主对话网站中。所有岗位和账户都已迁移。我们现在只接受新论坛的流量-请在上面发布任何新帖子//www.wsdof.com/support.我们将在未来几天修复bug /优化搜索和标记。
6个职位/ 0个新职位
最后发表
Oliver_Zero
离线
最后看到:2年10个月前
加入:2017-04-05 07:00
在使用dsp主机时不能得到完整的adv和扫描响应包

我用dsp主机项目制作一个扫描仪。但是,我拿不到一整包。
我有一个27字节长的ADV包的外围设备。但是每次,我得到18字节的数据。设备名称被切断。

以下是我从BLE Tools获取的数据:
02 01 06 07 03 0f 18 0a 18 d0 Ed 13 09 45 44 44 30 31 32 33 34 35 36 37 38 39 41 42 43 44 45 - 08 ff 44 4c 54 20 50 3a 4e
我得到的param->report.data:
02 01 06 07 03 0f 18 0a 18 d0 Ed 13 09 45 44 44 30 08

我如何得到完整的包像BLE Tools得到?
谢谢!

设备:
MT_dialog
离线
最后看到:两个月两个星期前
工作人员
加入:2015-06-08 34
嗨Oliver_Zero,

嗨Oliver_Zero,

没有开关或特殊处理来从广告字符串获得所有广告数据,所有数据应该报告在user_on_adv_report_ind()中,您如何获得您所描述的值?是打印值还是通过调试窗口观察?您提到的第二个报告似乎已经删除了广告数据,因为我可以看到长度是0x13,但不是所有的数据,所以您确定您打印的是正确的吗?

由于MT_dialog

Oliver_Zero
离线
最后看到:2年10个月前
加入:2017-04-05 07:00
嗨MT_dialog,

嗨MT_dialog,

我得到了user_on_adv_report_ind()中的值,我使用下面的代码:

Void user_on_adv_report_ind(struct gapm_adv_report_ind const * param) (struct gapm_adv_report_ind const * param)

uint8_t buf [128];

memcpy (buf param - >报告。数据[0],31);
write_bytes (buf 31);
write_string (" \ r \ n ");

这是我使用的两个函数:

空白write_string (uint8_t * buf)

Uint8_t len = 0;
而(buf (len + +) ! = 0);
uart2_write (buf, len NULL);

write_bytes(uint8_t *buf, uint8_t len)

uart2_write (buf, len NULL);

我不能保证write_bytes()工作良好。因为我没有从UART输出中获得完整的数据。

//-------------------------------------------------------------------- 更新 -------------------------------------------------------------
我使用观看窗口观看buf,它包含了完整的广告包数据。
但是,为什么uart2_write()没有输出完整的buf值呢?

我如何得到扫描响应数据?

谢谢!

Oliver_Zero
离线
最后看到:2年10个月前
加入:2017-04-05 07:00
//---------------------------

//------------------------------ 总结 ---------------------------//
我现在做的是:
它没有给我一个完整的Advertise数据的原因是由于uart2_write()。

函数应该是这样的:
write_bytes(uint8_t *buf, uint8_t len)

uart2_write (buf, len NULL);
uart2_finish_transfers ();

Uart2_finish_transfers()在uart2_write()之后被调用!

//------------------------------------ 待办事项 -------------------------------//
我还有一个问题需要解决。

如何获取扫描响应数据?
如果可以在user_on_adv_report_ind()中获取扫描响应数据,我认为Adv数据和scan Resp数据包含在两个变量中。
那么,我如何能关联Adv包与扫描Resp包?

谢谢!

MT_dialog
离线
最后看到:两个月两个星期前
工作人员
加入:2015-06-08 34
嗨Oliver_Zero,

嗨Oliver_Zero,

扫描响应数据应该在你得到广告数据后立即出现,一旦中央获得广告数据并执行活动扫描,它将自动发送扫描请求,外设必须在发送下一个广告包之前发送扫描响应,并在下一个通道上进行中央扫描之前。因此,它应该位于gapm_adv_report_ind上具有与0x04相同的bd地址(evt_type)的设备的广告数据之后。

由于MT_dialog

Oliver_Zero
离线
最后看到:2年10个月前
加入:2017-04-05 07:00
嗨,MT_dialog

嗨,MT_dialog

谢谢你的帮助。

BR
奥利弗