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.

[参考译文] CC2640R2F:iPhone 配对失败

Guru**** 1624165 points
Other Parts Discussed in Thread: CC2640R2F
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1248199/cc2640r2f-iphone-pairing-fail

器件型号:CC2640R2F

您好!

        我正在使用 CC2640R2F 项目 zero。  我们将   使用随机密钥进行配对(GAPBOND_PAIRGE_STATE_START )。 在 iPhone 中输入正确的密钥时、在 GAPBOND_Pairing_State_Complete 中获取 pzPairStateData_t 状态成功、 在输入错误的密钥时、将  pzPairStateData_t 状态设置为失败并发生断开连接。 但如果没有输入密钥30秒 、并在 iPhone 中提供取消  状态  、则 pzPairStateData_t 没有收到故障、并且正在断开连接。 然后 在 iPhone 上再次启动连接,  不生成随机密钥,并使用之前的随机 密钥进行连接。

SDK 版本:simplelink_cc2640r2_sdk_3_30_00_20

谢谢你。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Vignesh:

    我会将该主题移到相关专家、等待他的回答我只是注意到您使用的是相当旧的 SDK、您可以找到更新得多的版本(5.30) 现已问世。 因为许多错误和新特性都已发布。

    此致、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    正如 Guillaume 提到的、自3.30以来发布的 SDK 有许多改进。 如果可能、我强烈建议迁移到最新的 SDK。 您能否澄清这一行为是否发生在未经修改的项目零中? 如果是、那么您能否快速测试最新 SDK 中是否存在该行为?

    此致、

    1月

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    大家好、Jan、

        我已经 尝试 并遵循了相同的测试案例,仍然得到了  SDK 版本的结果: simplelink_cc2640r2_sdk_4_40_00_10。 这些模块已经在现场、因此请为 的 SDK 版本建议权变措施   

    SDK 版本:simplelink_cc2640r2_sdk_4_40_00_10

    SDK 版本:simplelink_cc2640r2_sdk_3_30_00_20

    谢谢你。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    嗯、我会在最后测试这一点。 为了确认、这是否发生在未修改的项目零上? 如果不是、那么您能否将该项目作为 E2E 回复的附件(如果您愿意、也可以通过电子邮件)共享?

    此致、

    1月

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我做了一些测试在我的终端看到了以下:

    我使用运行 iOS 版本16.5.1的 iPad 进行测试。

    我采用了 BLE5 PROJECT_ZERO 并添加了 RNG 密码(通过参考 安全基础 SLA 的 RNG 密码部分)。 我修改了 processPasscode 函数、如下所示:

    static void ProjectZero_processPasscode(pzPasscodeReq_t *pReq)
    {
    //    Log_info2("BondMgr Requested passcode. We are %s passcode %06d",
    //              (uintptr_t)(pReq->uiInputs ? "Sending" : "Displaying"),
    //              B_APP_DEFAULT_PASSCODE);
    //
    //    // Send passcode response.
    //    GAPBondMgr_PasscodeRsp(pReq->connHandle, SUCCESS, B_APP_DEFAULT_PASSCODE);
        uint32_t passcode = 0;
        passcode = Util_GetTRNG();
        passcode %= 1000000;
        Log_info2("BondMgr Requested passcode. We are %s passcode %06d",
                  (IArg)(pReq->uiInputs?"Sending":"Displaying"),
                  passcode);
        // Send passcode response.
        GAPBondMgr_PasscodeRsp(pReq->connHandle, SUCCESS, passcode);
    }

    我还使用 SLA 中讨论的修改对字符串特征进行了加密。 我也禁用了我的测试绑定。

    我用修改的工程0刷入了 LaunchPad、并能够连接到器件、如下所示:

    之后、为了启动配对、我尝试读取加密特性。 iPad 上出现配对提示、密码通过 UART 提供。 在接下来的30秒内、我没有在 iPad 上按下任何按钮。 30秒后、该过程超时并出现 bleTimeout 错误、但连接仍保持、如下所示。

    我无法按预期读取加密特性。

    您能否分享如何生成随机引脚? 您是否使用与上述代码类似的代码? 您是否能够共享在 Launchpad 上运行的展示此行为的项目? 您的项目是在 ble5项目0还是 ble4项目0上运行?

    此致、

    1月

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    大家好、Jan、

        我已经共享了我的 生成随机引脚的代码。

    static void ProjectZero_processPairState(pzPairStateData_t *pPairData)
    {
        uint8_t state = pPairData->state;
        uint8_t status = pPairData->status;
    
        switch (state)
        {
        case GAPBOND_PAIRING_STATE_STARTED:
        {
            uint32_t randomNumber;
            uint8_t tempkey[6];
            Log_info0("Pairing started");
    
            if ((event_alert_flag == 1) && (Pairing_Printflag == 0))
            {
                if (RamFlashData.Secure_Connection == 2)
                {
                    randomNumber = Random_getNumber();
                    randomNumber = randomNumber % 999999;
                    Pass_Key = randomNumber;
                }
                randomNumber = Pass_Key;
                for (int i = 5; i >= 0; i--)
                {
                    tempkey[i] = 0x30 + (randomNumber % 10);
                    randomNumber = randomNumber / 10;
                }
                memcpy(&Pairing_Msg[5], tempkey, 6);
                App_UART_Write(Pairing_Msg, sizeof(Pairing_Msg));
                Pairing_Printflag = 1;
            }
            break;
        }
    
        case GAPBOND_PAIRING_STATE_COMPLETE:
            if (status == SUCCESS)
            {
                Log_info0("Pairing success");
                if (event_alert_flag == 1)
                {
                    App_UART_Write("pass",4);
                }
                Pairing_Printflag = 0;
            }
            else
            {
                Log_info1("Pairing fail: %d", status);
                if (event_alert_flag == 1)
                {
                    App_UART_Write("fail",4);
                }
                Pairing_Printflag = 0;
            }
            break;

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    明白了。 我很快将对此进行测试。 与此同时、您能否确认您在中看到的 iOS 版本是否出现此行为、这是否为16.5.1? 我希望确保最后使用相同的器件。

    此致、

    1月

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Jan、

         以下是移动和 IOS 版本的详细信息。

                 iPhone 13 -- 版本: 16.5.1

                 iPhone SE - 版本: 16.5.1

    谢谢你。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    您可以 在代码中共享 ProjectZero_processPasscode()函数还是等效函数吗? 我想看看如何 设置对 GAPBondMgr_PasscodeRsp ()的调用。

    您是在连接过程中还是在等待与加密特性进行交互的过程中发送配对请求? Apple 在其 附件设计指南第41.9节和第41.10节中指出、配对只应在针对加密特性尝试读取/写入后进行、而不应在建立连接时自动进行。

    在 GAPBondMgr_SetParameter ()调用中设置 pairMode 之前,您是否可以检查 pairMode 设置为什么? 此设置发生在代码的以下部分:

    此致、

    1月

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    大家好、Jan、

        我很抱歉花这么长的时间来回答。所以这里是我的代码 调用  GAPBondMgr_PasscodeRsp()。

    static void ProjectZero_processPasscode(pzPasscodeReq_t *pReq)
    {
        Log_info2("BondMgr Requested passcode. We are %s passcode %06d",
                  (uintptr_t)(pReq->uiInputs ? "Sending" : "Displaying"),
                  B_APP_DEFAULT_PASSCODE);
    
        GAPBondMgr_PasscodeRsp(pReq->connHandle, SUCCESS, Pass_Key);
    }

    我正在   连接后发送配对请求。

    我已经检查了 GAPBondMgr_SetParameter ()和它的相同的实现。

    谢谢你。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    明白了。 奇怪的是,我无法看到我身边的行为。 您能否向我发送已编译的.hex 或.out 文件、以便我将其刷写到 Launchpad 上并尝试重现您的行为? 之后,我复制了它,然后我们可以努力找到一个解决方案。 我已将您添加为 E2E 上的好友、以防您更愿意通过私人消息向我发送图像。

    此致、

    1月