在那里,我跟随文档AN-B-022 DA14580可解析的私人地址指南来实现随机地址,并且每件事都进展顺利,地址根据我的配置定期更改。但是,我发现每次我改变了调用app_adv_func()的广告数据,也改变了地址。我能做什么来防止地址改变后,我调用函数app_adv_func()?
据我所知,才能实现这一点,是不可能的吗?
是的夏天,我相信你是对的。BR JE_DIALOG.
谢谢你!
你好,我在DA14583DEVKT-B板上使用SDK 5.0.3软件。我使用了“ble_app_peripheral”(给出的BLE示例项目)。
我已经将“address_src”更改为“GAPM_GEN_STATIC_RND_ADDR”。我在扫描蓝牙设备时遇到了问题。扫描时蓝牙设备地址正在变化,没有任何电源循环(DA14583)。根据蓝牙核心规范,如果我们选择了静态随机地址,那么蓝牙地址必须在每个电源循环中改变。
我的要求是蓝牙设备地址需要在每个电源周期更改。请指导我解决这个问题。
问候,Mahesh Chandana。
嗨的卖方,
这是一个已知的问题,并且有一个问题,您可以使用Gapm_gen_rand_addr_cmd与Gap_static_addr类型一起使用,并将生成的地址存储在Gapm_dev_bdaddr_ind消息中返回。然后,应将GAPM_START_ADVERTESE_CMD设置为CAPM_PROVIDE_RND_ADDR并在地址字段中提供存储的随机地址,有关命令的更多信息,请检查RW-BLE-GAP-IS。这个想法是在设备的初始化期间调用上述进程,例如,当数据库的设置已经完成,然后,在水中使用BD_Address后,您可以启动广告。
由于MT_dialog
你好,我们需要在哪个函数和哪个文件中进行这些顺序的更改。
"GAPM_PROVIDED_RND_ADDR"我已经直接在"user_config.h"中更改。
没有特殊的文件来实现这一点,只需创建一个函数来发送命令GAPM_GEN_RAND_ADDR_CMD,通过catch_rest机制(捕获GAPM_DEV_BDADDR_IND)检索该命令,并在op->addr成员中的gapm_start_advertise_cmd结构中准备发布命令时,设置从该指示中获得的db地址。检查上面提到的关于结构的任何细节文档。
嗨
在发送命令“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。
您可以创建一个自定义的开始发布函数,而不使用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()。
嗨,我已经计算了这些命令,但我不知道把序列放在哪里。
我想我应该援引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()”函数中CASE 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
大帮助,我会尝试。谢谢
你好,非常感谢您的支持。
嗨sprhawk,马赫什
由于在上一篇文章中所示,在user_app_init期间发布了每条消息,因为堆栈在调用函数后堆栈被重置。在第6篇文章中,想法是在设备的初始化期间调用上述进程,例如,当数据库的设置已经完成时,然后在水中的BD_Address后,您可以启动广告。“因此,您可以在数据库初始化后生成bd_address(在app_on_db_init_complete中发送命令)或者如果在设备配置完成时没有任何数据库(在app_on_set_dev_config_complete()时发送生成地址命令)。在您将BD_Address(意思是处理程序中的PACMM_DEV_BDADDR_IND中的处理程序中)进行了解之后,您可以在变量中复制地址并分配您的广告命令填写正确的结构并发送消息(正如Mahesh建议的)。或者您可以等待GAPM_CMP_EVT(表示命令已完成)并从该回调开始广告。这将确保消息序列将是合适的。
也可以看看这篇文章http://support.dialog-semiconductor.com/question-about-generation-static..。
你好,这对我很有效。
非常感谢……
据我所知,才能实现这一点,是不可能的吗?
是的夏天,我相信你是对的。BR JE_DIALOG.
谢谢你!
你好,
我在DA14583DEVKT-B板上使用SDK 5.0.3软件。
我使用了“ble_app_peripheral”(给出的BLE示例项目)。
我已经将“address_src”更改为“GAPM_GEN_STATIC_RND_ADDR”。
我在扫描蓝牙设备时遇到了问题。扫描时蓝牙设备地址正在变化,没有任何电源循环(DA14583)。根据蓝牙核心规范,如果我们选择了静态随机地址,那么蓝牙地址必须在每个电源循环中改变。
我的要求是蓝牙设备地址需要在每个电源周期更改。
请指导我解决这个问题。
问候,
Mahesh Chandana。
嗨的卖方,
这是一个已知的问题,并且有一个问题,您可以使用Gapm_gen_rand_addr_cmd与Gap_static_addr类型一起使用,并将生成的地址存储在Gapm_dev_bdaddr_ind消息中返回。然后,应将GAPM_START_ADVERTESE_CMD设置为CAPM_PROVIDE_RND_ADDR并在地址字段中提供存储的随机地址,有关命令的更多信息,请检查RW-BLE-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()”函数中
CASE 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中发送命令)或者如果在设备配置完成时没有任何数据库(在app_on_set_dev_config_complete()时发送生成地址命令)。在您将BD_Address(意思是处理程序中的PACMM_DEV_BDADDR_IND中的处理程序中)进行了解之后,您可以在变量中复制地址并分配您的广告命令填写正确的结构并发送消息(正如Mahesh建议的)。或者您可以等待GAPM_CMP_EVT(表示命令已完成)并从该回调开始广告。这将确保消息序列将是合适的。
也可以看看这篇文章http://support.dialog-semiconductor.com/question-about-generation-static..。
由于MT_dialog
你好,
这对我很有效。
非常感谢……
问候,
Mahesh Chandana。