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.

[参考译文] CC2564MODA:如何修改 A2DP 演示以自动连接智能手机

Guru**** 2794765 points

Other Parts Discussed in Thread: CC2564

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/866736/cc2564moda-how-to-modify-a2dp-demo-to-connect-with-smartphone-automatically

器件型号:CC2564MODA
主题中讨论的其他器件:CC2564

您好!

这是原始线程的另一个问题。
客户在 A2DP 演示中实施了以下更改。
-将 BD_ADDR 和 Link 密钥存储在闪存中
-重新加载存储的信息并连接至智能手机

但用户仍需要在智能手机端执行一些操作(将“确定”按钮推至对话框)。
客户在器件(CC2564/接收端)上执行以下步骤:
1) 1)在下电上电后、从闪存重新加载 BD_ADDR 和链接密钥。
2)从设备执行“查询”命令。
3) 3)如果“Inquiry”检测到存储的源设备的 BD_ADDR,则该设备执行“OpenRemoteStream”命令。

进行上述修改后,智能手机端的步骤3中将出现询问“配对配置”的对话框。
然后,如果选择“OK”(确定),则连接拉电流和灌电流。
客户希望*自动*连接意味着无需用户执行任何操作。
需要在器件端执行哪些正确的步骤?

谢谢、此致、
田志郎一郎

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

    您好、Koichiro、

    您为何要调用查询命令? 这用于发现、对于客户尝试执行的操作、我假设设备已配对。 加载并验证 BD_ADDR 和 LINK 密钥后、它们需要调用 AUD_Open_Remote_Stream。 OpenRemoteStream 使用 AUD_Open_Remote_Stream、但您不需要这些临时参数、因为它们是从闪存加载的。

    Jesu

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

    您好、Jesu、

    客户致电询问命令的原因是为了确认目标来源(智能手机)是否确实存在。
    无论如何、客户现在可以在灌电流重新上电后连接到拉电流。
    但仍有一个问题。
    仅当 SOURCE (智能手机)打开蓝牙配置窗口时、灌电流才能通过查询命令检测源。
    如果未打开蓝牙配置窗口、接收设备将无法通过查询命令检测源。 (当然、蓝牙在源端开启。)
    为什么在蓝牙配置窗口关闭时、inquiry 命令无法检测到源?

    当客户尝试连接查询命令无法检测到的源时(因为蓝牙窗口已关闭)、
    软件挂起。

    谢谢、此致、
    田志郎一郎

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

    您好、Koichiro、

    BT 配置窗口是什么意思? 请提供屏幕截图吗?

    Jesu

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

    您好、Koichiro、

    由于不活动、我将关闭此线程。 如果您仍有相同的问题、请在此处回答我的问题。 如果您有新问题、请创建新主题。

    Jesu

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

    您好、Jesu、

    很抱歉我迟到了。
    请在下面找到 iPhone 上的“BT 配置窗口”捕获。
    (设置=>蓝牙)

    打开此窗口后、SINK (CC2564)可以通过查询命令检测源(iPhone)。
    然后,接收设备可以通过 OpenRemoteStream 命令与源设备连接。

    如果此窗口关闭、即使在 iPhone 上启用了蓝牙、接收器也无法通过查询检测源。
    如果在 iPhone 上启用了蓝牙、灌电流仍然可以通过 OpenRemoteStream 命令与源连接。
    (如果在 iPhone 上禁用蓝牙、软件挂起)

    谢谢、此致、
    田志郎一郎

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

    您好、Jesu、

    您可以回复此项目吗?

    我认为客户想要做的是典型场景。
    假设蓝牙耳机已通电、且智能手机(之前已配对)足够近、则耳机和智能手机无需用户干预即可连接。 这是客户想要做的事情。

    谢谢、此致、
    田志郎一郎

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

    您好、Koichiro、

    我会得到同样的行为、即除非智能手机中的 BT 窗口打开、否则设备不会显示在查询中、但出于您的目的、我认为这并不重要。 作为一项快速测试、我用 AUD_Open_Remote_Stream 函数对智能手机的 BT 地址进行硬编码、并且在 BT 窗口未打开的情况下工作。 问题是手机仍然提示我接受需要用户交互的连接。  

    我认为、为了获得客户所寻求的这种看似无意义的连接行为、需要在差距层面采取一些措施。 我将继续调查、并将在本周结束时返回到最新状态。

    对拖延表示歉意。

    Jesu

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

    您好、Jesu、

    感谢您的回复。

    我不是蓝牙专家、但我理解以下内容;
    -查询命令可以在可发现模式下检测设备。
    -当 BT 窗口关闭时,智能手机处于不可发现模式,因此无法通过查询检测到。
    对吧?

    我有一个问题我不确定。
    CC2564如何在没有查询命令的情况下知道智能手机在附近?
    例如、假设 CC2564与两个智能手机 A 和 B 配对
    CC2564通电时、它不知道智能手机 A 和/或智能手机 B 在附近、或者也不知道有任何内容。
    根据客户的说法、如果尝试将 AUD_Open_Remote_Stream 发送到不存在的智能手机、则软件会挂起。
    (因此逐个检查列表中的所有 BT 地址不起作用。)

    我们在这里有什么智能方法吗?
    (例如、获取无连接的 RSSI?)

    谢谢、此致、
    田志郎一郎

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

    您好、Jesu、

    客户正在等待您的回答。
    您能否更新最新状态?

    谢谢、此致、
    田志郎一郎

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

    您好、Koichiro、

    关于您的问题:

    CC2564如何在没有查询命令的情况下知道智能手机在附近? 

    在客户情况下、器件已知、因此无需发现。 相反、在连接过程中、会对特定 BT 地址进行寻呼查询。  

    编辑:智能手机实际上不知道智能手机在附近。 它只是尝试连接到已知设备。

    这是否能回答您的问题?

    Jesu

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

    您好、Jesu、

    根据客户的说法、只要尝试从 CC2564连接到已知设备(智能手机)、软件就会在器件不存在时挂起。
    这就是客户在尝试连接之前想要知道器件是否存在的原因。
    如果没有连接、获取 RSSI 是绝对不可能的?

    您是否有以下方面的更新?
    >我认为需要在差距级别采取一些措施,以使客户所寻求的这种看似无意义的连接行为得以实现。 我将继续调查、并将在本周结束时返回到最新状态。

    谢谢、此致、
    田志郎一郎

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

    您好、Koichiro、

    软件不应挂起。 如果我没有记错、默认情况下、如果寻呼尝试失败、设备应启用页面扫描、此时它将等待智能手机手动启动连接。 此行为通常适用于希望已知设备在 BT 附件打开时靠近的应用(例如耳机、汽车)。 在这种情况下、电话将接收寻呼、并启动连接。 如果在打开附件时电话不在附近,则对已知设备的寻呼尝试将失败,并且不会启动任何连接。

    如果没有连接、获取 RSSI 是绝对不可能的? 

    通常有2种类型的扫描。 查询和寻呼。 当设备希望可发现其他 BT 设备时、应启用查询扫描、这在客户中不起作用、因为智能手机仅在 BT 窗口中时才可发现。 页面扫描是指设备正在等待来自已知地址的页面启动连接。

    如果这种行为对客户不起作用、他们可以尝试定期寻呼、直到电话在附近、但这可能是详尽无遗的、并且会消耗大量电力。 由于功耗、通常不采用这种方法。  

    请忽略我关于差距级别修改的评论。

    Jesu

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

    您好、Jesu、

    我知道应该将“分页扫描”用于客户的用例,但不清楚如何从 CC2564开始“分页扫描”。
    我们有“查询”命令,但没有“寻呼”。
    您能告诉我如何触发分页扫描吗?

    谢谢、此致、

    田志郎一郎

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

    您好、Koichiro、

    分页和页面扫描之间存在差异。 如果设备 A 的页设备 B,设备 B 必须启用页扫描功能,才能处理设备 A 的页。在本例中,设备 A 正在寻呼,设备 B 正在进行页扫描。 我很确定在 AUD_Open_Remote_Stream()的后台已经完成了寻呼。  

    要启用页面扫描:

    HCI_Write_Scan_Enable (BluetoothStackID、HCI_SCAN_ENABLE_SCAN_ENABLE_PAGE_SCAN_ENABLED、&StatusResult) 

    此调用可启用查询和页面扫描。

    Jesu

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

    您好、Jesu、

    我了解以下内容。 如果我被误解了、您能改正吗?

    假设:
    a)在客户的用例中,CC2564是耳机(设备 A)。 智能手机是设备 B
    b)器件 A 和器件 B 已分段(彼此已知的器件)。
    c)当器件 A 打开并且调用 AUD_Open_Remoto_Stream()时、器件 A 正在寻呼。
    D)如果启用了器件 B 的页面扫描、则器件 B 将处理来自器件 A 的页面、并将自动启动连接。
    对吧?

    f)如果设备 B 在 c 点不靠近设备 A、则寻呼失败。
    在这种情况下,AUD_Open_Remoto_Stream()不会返回并等待连接永远?

    g)如果通过以下命令在器件 A 上启用页面扫描、器件 A 将在寻呼失败后等待器件 B 手动启动连接?
    HCI_Write_Scan_Enable (BluetoothStackID、HCI_SCAN_ENABLE_SCAN_ENABLE_PAGE_SCAN_ENABLED、&StatusResult)

    谢谢、此致、
    田志郎一郎

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

    您好、Koichiro、

    A-D 正确。 寻呼用于连接地址已知的设备。  

    我在您的回答中看不到 E、不知道这是否是错误。

    f)不完全正确。 如果连接尝试失败 、AUD_OPEN_Remote_Stream 将返回错误、如从 A2DP 演示中获取的以下代码所示、不会发生任何情况。

    /*尝试打开远程流。 */
    结果= AUD_Open_Remote_Stream (BluetoothStackID、InquiryResultList[(TempParam->Params[0].intParam - 1)]、(UI_Mode = UI_MODE_IS_SOURCE)?astSRC:astSNK);
    
    if (!Result)
    {
    /*功能成功,通知用户。 *
    显示(("AUD_Open_Remote_Stream (%s):成功。\r\n、(UI_Mode = UI_MODE_SI_SOURCE)?"SRC":"SNK");
    
    /*向呼叫者标记成功。 *
    RET_val = 0;
    }
    否则
    {
    /*功能失败,通知用户。 *
    DisplayFunctionError ("AUD_Open_Remote_Stream ()"、结果);
    
    RET_val = function_error;
    } 

    g)正确、但请记住、这与分页是否失败无关。

    器件之间的相互连接完全取决于开发人员。 如果客户需要、他们可以继续拨打 AUD_Open_Remote_Stream、希望电话在范围内、无需启用页面扫描即可进行响应。 或者、他们可以尝试连接一次、如果失败、则启用页面扫描并等待用户发起不会消耗那么多功率的连接。  

    Jesu