你好,
想知道是否有可能有一个节点 - 广告和扫描广告。此外,我想捎带广告中的一些数据。
广告本身将用于发送消息。没有建立任何连接。因此没有奴隶和大师。
人们这样做吗?它可以完成吗?谢谢,
sale
嗨萨利姆,
是这样,通过执行扫描请求并从广告中捕获所需数据。随后,您可以使用此数据宣传自己。因此,可以完成,但是您无法连接,因为您或多或少是单向转发器。
最好的问候,RVA
你好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];};
GAPM_SCAN_PASSIVE.
gapm_adv_non_conn.
#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_sizegap_ad_type_manu_specific_data,0x00d2,//对话雷电竞下载app框的标识符{0x01,0x02,0x03,0x04} //一些数据,长度为ms_data_size}
struct制造商_specific_data_s ms_data ={1 + 2 + ms_data_size,// size = type + c雷电竞下载appompany_iderifier + ms_data_sizegap_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);
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打包以防止结构中的额外填充。
问题的基法 -
1.“单程中继器”是什么意思?我不明白为什么是 -
节点A:
广告:节点c我想知道温度?
节点B:扫描并看到这个问题是节点c所以什么都不做
节点C:扫描和广告节点A:温度为23C
节点A:扫描并读取温度,也许通过说“谢谢节点C”来读取它。
看起来像是对我的两种通信?
2.与设置连接相比,我的第二个问题是这种方法的缺点是什么?
3.什么是最大数据包大小。它是4个字节还是可以改变为其他值?
谢谢,
嗨萨利姆,
是这样,通过执行扫描请求并从广告中捕获所需数据。随后,您可以使用此数据宣传自己。因此,可以完成,但是您无法连接,因为您或多或少是单向转发器。
最好的问候,RVA
你好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打包以防止结构中的额外填充。
问题的基法 -
1.“单程中继器”是什么意思?我不明白为什么是 -
节点A:
广告:节点c我想知道温度?
节点B:扫描并看到这个问题是节点c所以什么都不做
节点C:扫描和广告节点A:温度为23C
节点A:扫描并读取温度,也许通过说“谢谢节点C”来读取它。
看起来像是对我的两种通信?
2.与设置连接相比,我的第二个问题是这种方法的缺点是什么?
3.什么是最大数据包大小。它是4个字节还是可以改变为其他值?
谢谢,
sale
嗨萨利姆,