同时宣传和扫描

5个帖子/ 0新
最后一篇
alsem145.
离线
最后一次露面:5年11个月前
加入:2015-03-19 00:49
同时宣传和扫描

你好,

想知道是否有可能有一个节点 - 广告和扫描广告。此外,我想捎带广告中的一些数据。

广告本身将用于发送消息。没有建立任何连接。因此没有奴隶和大师。

人们这样做吗?它可以完成吗?谢谢,

sale

RVA.
离线
最后一次露面:1个月2周前
职员
加入:2014-02-07 14:10
嗨萨利姆,

嗨萨利姆,

是这样,通过执行扫描请求并从广告中捕获所需数据。随后,您可以使用此数据宣传自己。因此,可以完成,但是您无法连接,因为您或多或少是单向转发器。

最好的问候,RVA

vesan.
离线
最后一次露面:5年8个月前
格鲁鲁 掌握
加入:2014-06-26 08:49
你好Saleem145,

你好Saleem145,

您不能同时宣传和扫描,但据我所知,您可以做的是在广告和扫描模式之间切换。您可以使用GAPM_SCAN_PASSIVE.gapm_adv_non_conn.。您可以将制造商特定数据附加到adv数据包。我发现它更容易形成一个用于将数据附加到数据包的结构:

#define ms_data_size 4.
struct __attribute __((包装))制造商_specific_data_s
{
UINT8_T长度;
const uint8_t类型;
const uint16_t 雷电竞下载appcompany_identifier;
UINT8_T数据[MS_DATA_SIZE];
};

然后您从结构中创建实例

struct制造商_specific_data_s ms_data =
{
1 + 2 + ms_data_size,// size = type + c雷电竞下载appompany_iderifier + ms_data_size
gap_ad_type_manu_specific_data,
0x00d2,//对话雷电竞下载app框的标识符
{0x01,0x02,0x03,0x04} //一些数据,长度为ms_data_size
}

然后你最终可以将它追加到adv数据包中app_adv_func.功能:

cmd-> info.host.adv_data_len = sizeof(结构制造商_specific_data_s);
memcpy(&cmd-> info.host.addata [0],&ms_data,cmd-> info.host.adv_data_len);

不要超过允许的adv数据包大小

PS。我没有测试它,所以可能有错误!
PSS。您需要用__Attribute __((packed))属性将struct打包以防止结构中的额外填充。

alsem145.
离线
最后一次露面:5年11个月前
加入:2015-03-19 00:49
问题的基法 -

问题的基法 -

1.“单程中继器”是什么意思?我不明白为什么是 -

节点A:

广告:节点c我想知道温度?

节点B:扫描并看到这个问题是节点c所以什么都不做

节点C:扫描和广告节点A:温度为23C

节点A:扫描并读取温度,也许通过说“谢谢节点C”来读取它。

看起来像是对我的两种通信?

2.与设置连接相比,我的第二个问题是这种方法的缺点是什么?

3.什么是最大数据包大小。它是4个字节还是可以改变为其他值?

谢谢,

sale

vesan.
离线
最后一次露面:5年8个月前
格鲁鲁 掌握
加入:2014-06-26 08:49
嗨萨利姆,

嗨萨利姆,

  • 什么是“一种方式中继器”的意思
    我想这将是一个重传,只允许从A => B => C传递消息;不允许<=> B <=> C.您是对的,在那里将有两种方向通信,但它只是“元通信”,以确保不提供实际信息有效载荷(温度读取)。没有从c => a发送的数据包,只能从a => c(温度读数)。
  • 与设置连接相比,这种方法的缺点是什么?
    可能会有较少的流量。它是更快的,因为连接不需要初始化。但如果有太多的数据传输,广告并不是那么方便。
  • 什么是最大数据包大小。是4个字节,也可以改变为其他值
    它可以超过4个八位字节。我不记得恰好的最大数据包大小,但它大约是30个八位字节(最多可能31个)。这将少于您在ADV数据包中拥有的内容(例如,设备名称)