你好,
想知道是否有可能让一个节点同时做广告和扫描广告。我还想在广告中附带一些数据。
广告本身将被用来发送信息。永远不会建立任何联系。因此没有奴隶和主人。
人们会这样做吗?这能做到吗?谢谢,
萨利姆
嗨萨利姆,
是的,这将是可能的做一个扫描请求和捕获所需的数据从广告。随后,您可以使用这些数据来宣传自己。所以它可以做到,但你不能连接,因为你或多或少是一个单向中继器。
最好的问候,RvA
你好saleem145,
你不能同时做广告和扫描,但据我所知,你能做的是在广告和扫描模式之间切换。您可以使用GAPM_SCAN_PASSIVE和GAPM_ADV_NON_CONN.例如,您可以将制造商特定的数据附加到您的ADV包中。我发现,形成一个将数据附加到数据包的结构更容易:#定义MS_DATA_SIZE 4manufacturer_specific_data_s struct __attribute__((包装)){uint8_t长度;const uint8_t类型;const uint16_t 雷电竞下载appcompany_identifier;uint8_t数据(MS_DATA_SIZE);};
GAPM_SCAN_PASSIVE
GAPM_ADV_NON_CONN
#定义MS_DATA_SIZE 4manufacturer_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_SIZEGAP_AD_TYPE_MANU_SPECIFIC_DATA,0x00d2, // 雷电竞下载appDialog的公司标识符{0x01, 0x02, 0x03, 0x04} //某些数据,长度为MS_DATA_SIZE}
Struct manufacturer_specific_data_s ms_data ={1 + 2 + MS_DATA_SIZE, // Size = type + 雷电竞下载appcompany_identifier + MS_DATA_SIZEGAP_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);
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))属性来打包结构,以防止结构中的额外填充。
几个问题
1.什么是“单向中继器”?我不明白这是为什么
节点:
广告:节点C,我想知道温度??
节点B:扫描并看到这个问题是针对节点C的,所以什么也不做
节点C:扫描并通告节点A:温度23℃
节点A:扫描并读取温度,也许通过说“谢谢节点C”来实现。
在我看来,这是双向交流??
2.我的第二个问题是,与建立连接相比,这种方法的缺点是什么??
3.什么是最大数据包大小。它是4字节还是可以更改为其他值??
谢谢,
嗨萨利姆,
是的,这将是可能的做一个扫描请求和捕获所需的数据从广告。随后,您可以使用这些数据来宣传自己。所以它可以做到,但你不能连接,因为你或多或少是一个单向中继器。
最好的问候,RvA
你好saleem145,
你不能同时做广告和扫描,但据我所知,你能做的是在广告和扫描模式之间切换。您可以使用
GAPM_SCAN_PASSIVE和GAPM_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))属性来打包结构,以防止结构中的额外填充。
几个问题
1.什么是“单向中继器”?我不明白这是为什么
节点:
广告:节点C,我想知道温度??
节点B:扫描并看到这个问题是针对节点C的,所以什么也不做
节点C:扫描并通告节点A:温度23℃
节点A:扫描并读取温度,也许通过说“谢谢节点C”来实现。
在我看来,这是双向交流??
2.我的第二个问题是,与建立连接相比,这种方法的缺点是什么??
3.什么是最大数据包大小。它是4字节还是可以更改为其他值??
谢谢,
萨利姆
嗨萨利姆,