广告和扫描同时进行

5个职位/ 0个新
最后发表
saleem145
离线
最后看到:6年16小时前
加入:2015-03-19 00:49
广告和扫描同时进行

你好,

想知道是否有可能让一个节点同时做广告和扫描广告。我还想在广告中附带一些数据。

广告本身将被用来发送信息。永远不会建立任何联系。因此没有奴隶和主人。

人们会这样做吗?这能做到吗?谢谢,

萨利姆

RvA
离线
最后看到:23小时22分钟前
工作人员
加入:2014-02-07 14:10
嗨萨利姆,

嗨萨利姆,

是的,这将是可能的做一个扫描请求和捕获所需的数据从广告。随后,您可以使用这些数据来宣传自己。所以它可以做到,但你不能连接,因为你或多或少是一个单向中继器。

最好的问候,RvA

VesaN
离线
最后看到:5年8个月前
大师 主
加入:2014-06-26 08:49
你好saleem145,

你好saleem145,

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

#定义MS_DATA_SIZE 4
manufacturer_specific_data_s struct __attribute__((包装))

uint8_t长度;
const uint8_t类型;
const uint16_t 雷电竞下载appcompany_identifier;
uint8_t数据(MS_DATA_SIZE);
};

然后从结构创建实例

Struct manufacturer_specific_data_s ms_data =

1 + 2 + MS_DATA_SIZE, // Size = type + 雷电竞下载appcompany_identifier + MS_DATA_SIZE
GAP_AD_TYPE_MANU_SPECIFIC_DATA,
0x00d2, // 雷电竞下载appDialog的公司标识符
{0x01, 0x02, 0x03, 0x04} //某些数据,长度为MS_DATA_SIZE

最后可以将其添加到adv包中app_adv_func功能:

cmd - > info.host。add_data_len = sizeof(struct manufact_specific_data_s); / /插入数据
memcpy (cmd - > info.host。adv_data [0], &ms_data cmd - > info.host.adv_data_len);

不要超过允许的包装尺寸

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

saleem145
离线
最后看到:6年16小时前
加入:2015-03-19 00:49
几个问题

几个问题

1.什么是“单向中继器”?我不明白这是为什么

节点:

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

节点B:扫描并看到这个问题是针对节点C的,所以什么也不做

节点C:扫描并通告节点A:温度23℃

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

在我看来,这是双向交流??

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

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

谢谢,

萨利姆

VesaN
离线
最后看到:5年8个月前
大师 主
加入:2014-06-26 08:49
嗨萨利姆,

嗨萨利姆,

  • 什么是“单向中继器”
    我猜它是一个转发器,只允许消息从a => B => C传递;不允许A <=> B <=> C。你是对的,两个方向都会有通信,但这只是“元通信”,以确保实际的信息负载没有被传递(温度读数)。没有数据包从C => A发送,只有从A => C(温度读数)发送。
  • 与建立连接相比,这种方法的缺点是什么
    可能会少些车辆。而且它更快,因为连接不需要初始化。但如果有大量数据需要传输,广告就不那么方便了。
  • 什么是最大数据包大小。它是4字节还是可以更改为一些其他的值
    可以超过4个八位元组。我不记得确切的最大包大小,但它大约是30个八位元(可能是最大的31 ?)它会比这个小,这取决于你在adv包中还有什么(例如设备名)