Thread 中讨论的其他器件:SysConfig
尊敬的 TI 团队:
我在配对方面遇到了一些问题、当两个器件配置为"GAPBOND_Pairing_mode_wait_for_Req"时不会自动触发
因此、我使用"GAPBondMgr_Pair"启用了配对
配对已完成、绑定也已完成。
但是、当我重新启动器件时、配对会再次触发、如果已绑定、则应该不会触发。
请 帮助我们找出根本原因并解决此问题。
在哪些情况下会擦除绑定条目以及如何验证它们。
谢谢、
Maqsood
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
尊敬的 TI 团队:
我在配对方面遇到了一些问题、当两个器件配置为"GAPBOND_Pairing_mode_wait_for_Req"时不会自动触发
因此、我使用"GAPBondMgr_Pair"启用了配对
配对已完成、绑定也已完成。
但是、当我重新启动器件时、配对会再次触发、如果已绑定、则应该不会触发。
请 帮助我们找出根本原因并解决此问题。
在哪些情况下会擦除绑定条目以及如何验证它们。
谢谢、
Maqsood
您好、Maqsood、
我们的默认 simple_peripheral 示例应支持此功能、而无需显式调用 GAPBondMgr_Pair();即此操作应由栈处理。 具体而言、我将查看[SDK_INSTALL_DIR]/source/ti/ble5stack/host/.中的 gapbondmgr.c 此文件包含所有绑定/配对逻辑。
[引用 userid="266752" URL"~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1017678/cc2642r-repairing-is-triggered-after-power-cycle-even-though-bonding-is-successfully-completed-previously ]但当我重新启动设备时、配对会再次触发、如果已绑定、则不应再触发。查看 gapbondmgr.c 时、您会发现需要调用单独的 API 来将绑定添加到 nv。 同样、这应该已经实现。
[报价 userid="266752" URL"~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1017678/cc2642r-repairing-is-triggered-after-power-cycle-even-though-bonding-is-successfully-completed-previously "]擦除绑定条目的情形是什么以及如何验证这些条目。绑定条目只有在明确请求时才会被擦除(如果 GAPBondMgr_SetParameter()在传递 GAPBOND_ERASE_ALLBONDS 的情况下被调用,设置为 true)。 还有一些其他情况,如果在 gapbondmgr.c 中搜索 gapBondMgrErasebond(),则可以找到所有这些情况
但愿这对您有所帮助。 除了 上 一个相关帖子中链接的资源之外、请参阅 我们的 Simplelink Academy 安全基础实验室。
尊敬的 Ammar:
感谢您的回复。
我尝试了 gapbondmanager.c 中的几个设置、但配对仍不会被触发。 我手动触发配对已测试了是否保留绑定、但在重启后、它将再次触发配对。
我在代码中使用以下设置:
//配置绑定管理器
uint8_t pairMode = GAPBOND_Pairing_mode_wait_for_Req;
uint8_t MIPTM = true;
uint8_t ioCap = GAPBOND_IO_CAP_DISPLAY_ONLY;//GAPBOND_IO_CAP_DISPLAY_YS_NOGAPBOND_IO_CAP_DISPLAY_ONLY;
uint8_t 绑定= true;
uint8_t secureConnection = GAPBOND_SECURE_CONNECTION_ALLOW_ALLOW_;
uint8_t autoSyncWL = false;
uint8_t eccReGenPolicy = 0;
uint8_t KeySize = 16;
uint8_t removeLRUBond = false;
uint8_t bondFailAction = GAPBOND_FAIL_TERMINATE_LINK;
uint8_t KeyDistList = GAPBOND_KEYDIST_MENCKEY | GAPBOND_KEYDIST_MIDKEY | GAPBOND_KEYDIST_MSIGN | GAPBOND_KEYDIST_SENCKEY | GAPBOND_KEYDIST_KONKEY | GAPBOND_SIGN_KOND_MSIGN;
uint8_t eccDebugKeys = false;
uint8_t eraseBondWhileInConn = false;
我们是否缺少任何其他设置。
谢谢、
Maqsood
尊敬的 Ammar:
我通过在 passcodeCB 函数中放置断点来验证。
是的、我们已配置密钥配对。 但问题是我们在两个配对器件中都配置了"GAPBOND_Pairing_mode_wait_for_REQ"。
是的、我们已启用"GATT_permit_AUTHEN_READ"和"GATT_permit_AUTHEN_write"。
我将尝试使用 simple_profile 代码。
谢谢、
Maqsood
感谢 Maqsood 的跟进工作。 是的、请尝试 simple_peripheral/central 示例、因为此处已启用此功能。
[引用 userid="266752" URL"~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1017678/cc2642r-repairing-is-triggered-after-power-cycle-even-though-bonding-is-successfully-completed-previously/3777290 #3777290"]但问题是我们在两个配对设备中都配置了"GAPBOND_Pairing_mode_wait_for_REQ"。其中一个设备(外围设备或中央设备)必须启动配对、因此我建议在一端进行更改 同样、您可以在此处查看 simple_peripheral/central 示例以获取指导。
尊敬的 Ammar:
感谢您提供信息。
我对简单外设和中央示例之间的设置进行了一些比较:
简单外设:
//设置 GAP 绑定管理器。 有关更多信息、请参阅中的部分
//用户指南:
// software-dl.ti.com/.../
{
//连接后不要发送配对请求;对等设备必须
//开始配对
uint8_t pairMode = GAPBOND_Pairing_mode_wait_for_Req;
//使用经过身份验证的配对:需要密码。
uint8_t MIPTM = true;
//此设备仅具有显示功能。 因此、它将显示
//配对期间的密码。 但是、由于默认密码是
//使用,不需要显示任何内容。
uint8_t ioCap = GAPBOND_IO_CAP_DISPLAY_ONLY;
//请求绑定(存储长期密钥以便在后续时重新加密
//不进行修复的连接)
uint8_t 绑定= true;
//如果绑定列表已满,是否替换最近最少使用的条目,
//并且已绑定新设备。
//替代方法是配对成功,但绑定失败,除非应用程序有
//手动擦除至少一个绑定。
uint8_t replaceBonds = false;
GAPBondMgr_SetParameter (GAPBOND_Pairing_mode、sizeof (uint8_t)、&pairMode);
GAPBondMgr_SetParameter (GAPBOND_MITM_protection、sizeof (uint8_t)、&MIPTM);
GAPBondMgr_SetParameter (GAPBOND_IO_Capabilities、sizeof (uint8_t)、&ioCap);
GAPBondMgr_SetParameter (GAPBOND_BUSIONIND_ENABLED、sizeof (uint8_t)、&bonding);
GAPBondMgr_SetParameter (GAPBOND_LRU_Bond_replacement、sizeof (uint8_t)、replaceBonds)(replaceBonds);
}
简单的中心:
//设置 GAP 绑定管理器。 如需更多信息、请参阅 GAP 绑定管理器
//用户指南中的部分:
// software-dl.ti.com/.../
{
//在连接后不发送配对请求;设备等待
//应用程序开始配对
uint8_t pairMode = default_pairing_mode;
//不要使用经过身份验证的配对
uint8_t MIPTM = DEFAULT_MITM_MODE;
//这是一个只显示的设备
uint8_t ioCap = DEFAULT_IO_Capabilities;
//在配对过程中创建绑定
uint8_t 绑定= default_bonding_mode;
//如果绑定列表已满,是否替换最近最少使用的条目,
//并且已绑定新设备。
//替代方法是配对成功,但绑定失败,除非应用程序有
//手动擦除至少一个绑定。
uint8_t replaceBonds = false;
GAPBondMgr_SetParameter (GAPBOND_Pairing_mode、sizeof (uint8_t)、&pairMode);
GAPBondMgr_SetParameter (GAPBOND_MITM_protection、sizeof (uint8_t)、&MIPTM);
GAPBondMgr_SetParameter (GAPBOND_IO_Capabilities、sizeof (uint8_t)、&ioCap);
GAPBondMgr_SetParameter (GAPBOND_BUSIONIND_ENABLED、sizeof (uint8_t)、&bonding);
GAPBondMgr_SetParameter (GAPBOND_LRU_Bond_replacement、sizeof (uint8_t)、replaceBonds)(replaceBonds);
}
//缺省 GAP 配对模式
#define DEFAULT_Pairing_MODE GAPBOND_Pairing_MODE_WAIT_TO_REQ
//默认 MIPTM 模式(配对时需要密码或 OOB)
#define DEFAULT_MITM_MODE 错误
//默认绑定模式,对绑定为真
#define default_bonding_mode true
//缺省间隙键合 I/O 功能
#define DEFAULT_IO_Capabilities GAPBOND_IO_CAP_DISPLAY_ONLY
MIPTM 的两个设置似乎都不同。 以粗体突出显示
您能否解释在上述情况下谁将触发配对。
谢谢、
Maqsood
您好、Maqsood、
这里的关键是 、在两种情况下、DEFAULT_Pairing_mode 都设置为 GAPBOND_Pairing_mode_wait_for_Req。 在这种情况下、在建立初始连接时不会触发配对。
您使用的是什么 SDK? 这些设置均可在 SysConfig 文件中修改。 实际上、默认的 simple_central 已设置为启动配对。
请查看我们 的安全基础 Simplelink Academy 实验以及 它指向的有关配对/安全的相关 BLE5-STACK 用户指南部分。
编辑:对注释进行了更正
尊敬的 Ammar:
目前我们使用的是 SDK4.30.00.54。
在 设置 GATT 特征值时、我们使用"GATT_permit_AUTHEN_READ"和"GATT_permit_AUTHEN_write"。
当另一个设备尝试读取该值时、它将失败、因为需要进行身份验证、这必须触发配对。
我们的一名现场团队成员在早期 SDK 3.20.00.68上执行了 POC ,该软件会自动触发广播。
但使用新的 SDK 4.30.00.54时、情况并非如此。
我们手动触发配对、配对将延迟完成、绑定将完成、
但是、当我们重启电源时、配对将被触发。 某种程度上、绑定条目会被保留。
谢谢、
Maqsood
尊敬的 Ammar:
很抱歉耽误你的回答。
实际上、我们将器件配对后、假设 A 与 Raspberry Pi (中央模式)成功配对、绑定成功。
但是、当我们与类似器件 A 和另一个 A 配对时、它不会触发配对。 当我们手动触发时、配对绑定不会发生。
请参阅下面的说明:
我们有一个器件、在大多数情况下、它将是一个外设。
我们 要求此类设备在网络中相互通信。
我们已将器件配置为与"GAPBOND_Pairing_mode_wait_for_REQ"配对。
这可以与另一个中央设备正常配合使用、这意味着配对工作正常。
但是当我们尝试在两端对相似的器件时、我们最终得到"GAPBOND_PAING_MODE_WAIT_TO_REQ"
在这种情况下、我们将了解、如果我们启用如下所示的身份验证、它应该会触发配对、但不会触发。
{ATT_UUUUUUAR_SIZE、meshService_Rx_bufferCharUUID}、
//GAT_permit_write、
GATT_permit_AUTHEN_WRITE、//|GATT_permit_author_write|GATT_permit_encrypt_write、
0、
MESH Service_Rx_bufferChar_value
}、
我们使用 GAPBondMgr_Pair()手动触发了配对;如下所示,但不会进行绑定:
if (pMsg->method == ATT_ERROR_RSP)
{
//此处处理错误
if ((pMsg->msg.errorRsp.errCode = ATT_ERR_Insufficient)||
(pMsg->msg.errorRsp.errCode =ATT_ERR_Insuffical_AUTHEN)||
(pMsg->msg.errorRsp.errCode = ATT_ERR_Insuffical_Author)
{
//触发与其他节点的配对
//bStatus_t stat = GAPBondMgr_Pair (pMsg->connHandle);
}
我们已经尝试了中央和外设示例,它们正在工作,但中央设备具有“GAPBOND_Pairing_mode_initiate”。 我们无法设置此设置、因为设备将尝试与其他所有设备配对。 我们只是希望器件与特定器件配对。
您能不能帮助我们配对具有"GAPBOND_Pairing_mode_wait_for_REQ"的设备
您好!
[引用 userid="266752" URL"~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1017678/cc2642r-repairing-is-triggered-after-power-cycle-even-though-bonding-is-successfully-completed-previously/3815517 #3815517">我们已经尝试了中央和外设示例,它们正在工作,但中央设备具有"GAPBOND_Pairing_mode_initiate"。 我们无法设置此设置、因为设备将尝试与其他所有设备配对。 我们只是希望器件与特定器件配对。[/quot]由于您知道要配对的特定设备、您是否考虑启用接受/拒绝列表?
您还可以通过不输入与未知设备的连接来管理上述内容。 如果您与无法识别的设备建立连接、应用程序应处理终端并避免与该设备配对。
您能否提供监听器捕获您通过无线方式看到的行为?