这是一个已知的问题,有一个解决方法,您可以使用带有GAP_STATIC_ADDR类型的GAPM_GEN_RAND_ADDR_CMD,并在GAPM_DEV_BDADDR_IND消息中存储返回的生成的地址。然后一个GAPM_START_ADVERTISE_CMD应该发送地址源设置为GAPM_PROVIDED_RND_ADDR并在地址字段中提供存储的随机地址,关于命令的更多信息请检查rw - able - gap - is。其思路是在设备初始化期间调用上述过程,例如在数据库设置完成之后,然后在获得bd_address之后,可以开始发布消息。
在我看来,这是不可能的,对吗?
是的,萨默,我相信你是对的。BR JE_Dialog
谢谢你!
你好,
我在DA14583DEVKT-B板上使用SDK 5.0.3软件。
我使用了“ble_app_peripheral”(给出的BLE示例项目)。
我已经将“address_src”更改为“GAPM_GEN_STATIC_RND_ADDR”。
我在扫描蓝牙设备时遇到了问题。扫描时蓝牙设备地址正在变化,没有任何电源循环(DA14583)。根据蓝牙核心规范,如果我们选择了静态随机地址,那么蓝牙地址必须在每个电源循环中改变。
我的要求是蓝牙设备地址需要在每个电源周期更改。
请指导我解决这个问题。
问候,
Mahesh Chandana。
嗨的卖方,
这是一个已知的问题,有一个解决方法,您可以使用带有GAP_STATIC_ADDR类型的GAPM_GEN_RAND_ADDR_CMD,并在GAPM_DEV_BDADDR_IND消息中存储返回的生成的地址。然后一个GAPM_START_ADVERTISE_CMD应该发送地址源设置为GAPM_PROVIDED_RND_ADDR并在地址字段中提供存储的随机地址,关于命令的更多信息请检查rw - able - gap - is。其思路是在设备初始化期间调用上述过程,例如在数据库设置完成之后,然后在获得bd_address之后,可以开始发布消息。
由于MT_dialog
你好,
我们需要在哪个函数和哪个文件中进行这些顺序的更改。
"GAPM_PROVIDED_RND_ADDR"我已经直接在"user_config.h"中更改。
问候,
Mahesh Chandana。
嗨的卖方,
没有特殊的文件来实现这一点,只需创建一个函数来发送命令GAPM_GEN_RAND_ADDR_CMD,通过catch_rest机制(捕获GAPM_DEV_BDADDR_IND)检索该命令,并在op->addr成员中的gapm_start_advertise_cmd结构中准备发布命令时,设置从该指示中获得的db地址。检查上面提到的关于结构的任何细节文档。
由于MT_dialog
嗨
在发送命令“GAPM_GEN_RAND_ADDR_CMD”之后,我能够检索catch_rest机制(捕获GAPM_DEV_BDADDR_IND)。能够读取随机地址。
我正在“default_app_on_db_init_complete()”中调用app_gapm_gen_rand_addr_msg_create(),如下所示
default_app_on_db_init_complete(无效)
{
struct gapm_gen_rand_addr_cmd * cmd;
cmd = app_gapm_gen_rand_addr_msg_create ();
app_gapm_gen_rand_addr_msg_send (cmd);
EXECUTE_DEFAULT_OPERATION_VOID (default_operation_adv);
返回;
}
收到生成的随机bd地址后,我需要更新。
正如您所说的,我们可以在op->addr成员中的gapm_start_advertise_cmd结构中更新它(如下所示)
* app_advertise_start_msg_create(无效)
{
struct gapm_start_advertise_cmd* cmd = KE_MSG_ALLOC(gapm_start_advertise_cmd,
TASK_GAPM TASK_APP,
gapm_start_advertise_cmd);
cmd - > op > addr = RetrieveAddress;
返回(cmd);
}
但是我们接收的是用户级的随机地址,就像我们需要从用户级传递随机地址一样。
在用户级别有任何访问“op->addr”的规定。请告诉我哪个地方是合适的更新op->addr。
问候,
Mahesh Chandana。
嗨的卖方,
您可以创建一个自定义的开始发布函数,而不使用app_easy函数,分配GAPM_START_ADVERTISE_CMD或者,您可以只在user_config.h中将.address_src成员更改为GAPM_PROVIDED_RND_ADDR,并且在开始发布时调用app_easy_gap_undirected_advertise_get_active(),然后将生成的地址复制到cmd->op。最后调用app_easy_gap_undirected_advertise_start()。
由于MT_dialog
嗨,我已经计算了这些命令,但我不知道把序列放在哪里。
我想我应该调用GAPM_GEN_RND_ADDR在开始发布之前,但是我发现如果我将命令放入user_app_init()中,那么GAPM_BD_ADDR_IND不是回来了。
只有在我输入命令的时候user_app_adv_start它将工作。
但只有我得到了随机地址,它才会开始发布广告。
那我该怎么做呢?
谢谢你!
你好,
以下更改是否与“default_app_on_db_init_complete(void)”函数相同
default_app_on_db_init_complete(无效)
{
struct gapm_gen_rand_addr_cmd * cmd;
//创建并发送生成bd随机地址的命令
cmd = app_gapm_gen_rand_addr_msg_create ();
app_gapm_gen_rand_addr_msg_send (cmd);
/ / EXECUTE_DEFAULT_OPERATION_VOID (default_operation_adv);
返回;
}
然后将以下情况放入“user_catch_rest_hndl()”函数中
案例GAPM_DEV_BDADDR_IND:
{
//转换void指针到适当的消息结构
Struct gapm_dev_bdaddr_ind const *msg_param = (Struct gapm_dev_bdaddr_ind const *)(param);
//复制全局数组中生成的随机地址
memcpy (UAP_genRandAddr_mda msg_param - > addr.addr。addr, BD_ADDR_LEN);
user_app_adv_start ();
}打破;
然后更新“cmd->op.addr”。Addr "在"user_app_adv_start()"函数内。
这对我很有效。
问候,
Mahesh Chandana
嗨
帮了大忙,我试试。谢谢你!
你好,
非常感谢您的支持。
问候,
Mahesh Chandana。
嗨sprhawk,马赫什
正如我在前一篇文章中所指出的,在user_app_init()期间发布的每条消息都被丢弃,因为堆栈在函数调用后被重置。在帖子#6中“这个想法是在设备初始化期间调用上述过程,例如当你的数据库设置完成后,然后,在获得bd_address后,你可以开始发布。”因此,您可以在数据库初始化之后生成bd_address(发送app_on_db_init_complete中的命令),或者在设备配置完成后没有任何数据库时生成bd_address(在app_on_set_dev_config_complete()时发送生成address命令)。在您获得bd_address(在处理GAPM_DEV_BDADDR_IND的处理程序中是指)之后,您可以在变量中复制地址并分配您的广告命令,填充适当的结构并发送消息(如Mahesh建议的)。或者,您可以等待GAPM_CMP_EVT(它指示命令已经完成),然后从回调开始发布消息。这将确保消息序列是正确的。
也可以看看这篇文章http://support.dialog-semiconductor.com/question-about-generation-static..。
由于MT_dialog
你好,
这对我很有效。
非常感谢……
问候,
Mahesh Chandana。