liuliu3 发表于 2020-2-24 12:18:49

怎么样解决

黃子衡 发表于 2020-3-5 16:24:17

分享个人对这问题的解法.
1. ruleConnectHandset()
对耳连接失败后不放弃这个rule
            /* Peer sync is not complete but not in progress */
#if 0
            if (reason == RULE_CONNECT_USER)
            {
                profiles |= DEVICE_PROFILE_HFP | DEVICE_PROFILE_A2DP;
                RULE_LOG("ruleConnectHandset, run as user connect, despite peer sync fail");
                return RULE_ACTION_RUN_PARAM(profiles);
            }
            else
            {
                RULE_LOG("ruleConnectHandset, ignore as peer sync has failed");
                return RULE_ACTION_IGNORE;
            }
#else
            profiles |= DEVICE_PROFILE_HFP | DEVICE_PROFILE_A2DP;
            RULE_LOG("ruleConnectHandset, run as user connect, despite peer sync fail");
            return RULE_ACTION_RUN_PARAM(profiles);
#endif

2. appA2dpHandleA2dpSignallingConnectConfirm()
手机连接失败时, 转入pair
                        /* Play error tone */
                        appUiAvError(theInst->a2dp.flags & A2DP_CONNECT_SILENT_ERROR);

                        if (!appDeviceIsPeer(&theInst->bd_addr))
                        {
                            appSmPairHandset();
                        }

zhaopeng2511 发表于 2020-3-5 18:06:58

按着下面两条规则来做就行,规则判定函数需要你自己慢慢去修改调试

RULE(RULE_EVENT_STARTUP,                  rulePeerPair,               CONN_RULES_PEER_PAIR),
        RULE(RULE_EVENT_STARTUP,                  rulePeerSync,               CONN_RULES_SEND_PEER_SYNC),
        RULE(RULE_EVENT_STARTUP,                                ruleAutoHandsetPair,      CONN_RULES_HANDSET_PAIR),
        RULE(RULE_EVENT_STARTUP,                  ruleOutOfCaseAllowHandsetConnect,   CONN_RULES_ALLOW_HANDSET_CONNECT),       
        RULE(RULE_EVENT_STARTUP,                          ruleOutOfCaseConnectPeer,         CONN_RULES_CONNECT_PEER),
        RULE_WITH_FLAGS(RULE_EVENT_STARTUP,                    ruleOutOfCaseConnectHandset,   CONN_RULES_CONNECT_HANDSET,   RULE_FLAG_PROGRESS_MATTERS),


RULE(RULE_EVENT_OUT_CASE,                   rulePeerPair,                           CONN_RULES_PEER_PAIR),       
    RULE(RULE_EVENT_OUT_CASE,                   rulePeerSync,                     CONN_RULES_SEND_PEER_SYNC),
        RULE(RULE_EVENT_OUT_CASE,                   ruleAutoHandsetPair,                CONN_RULES_HANDSET_PAIR),
    RULE(RULE_EVENT_OUT_CASE,                   ruleOutOfCaseAllowHandsetConnect,   CONN_RULES_ALLOW_HANDSET_CONNECT),   
    RULE(RULE_EVENT_OUT_CASE,                   ruleOutOfCaseConnectPeer,         CONN_RULES_CONNECT_PEER),
    RULE_WITH_FLAGS(RULE_EVENT_OUT_CASE,      ruleOutOfCaseConnectHandset,      CONN_RULES_CONNECT_HANDSET, RULE_FLAG_PROGRESS_MATTERS),
    RULE(RULE_EVENT_OUT_CASE,                   ruleOutOfCaseAncTuning,             CONN_RULES_ANC_TUNING_STOP),

黃子衡 发表于 2020-3-6 09:53:48

zhaopeng2511 发表于 2020-3-5 18:06
按着下面两条规则来做就行,规则判定函数需要你自己慢慢去修改调试

RULE(RULE_EVENT_STARTUP,         ...

试过了, 如果没配对手机纪录, 这样做确实可单耳进入pair, 如果有纪录, headset连线fail不会进到pair, 或许应该在加RULE_EVENT_PEER_SYNC_FAILED这个rule.
改rule的确是此架构的精神, 所以如果rule有办法解决能不改代码就不改

zhaopeng2511 发表于 2020-3-6 16:18:29

黃子衡 发表于 2020-3-6 09:53
试过了, 如果没配对手机纪录, 这样做确实可单耳进入pair, 如果有纪录, headset连线fail不会进到pair, 或 ...

rule不能执行说明被rule判定函数挡掉了,只能改rule判定函数。想做好做稳就得这么干,可以说rule规则判定函数里面其它还有很多不合理的地方,这个必须花时间慢慢去优化。你不遵循rule规则去改,而通过代码强制去实现,很容易和rule则里的操作想冲突,改动越多新bug可能就越多,要么就像你说的尽量不改。你自己看着弄吧

黃子衡 发表于 2020-3-7 10:45:56

zhaopeng2511 发表于 2020-3-6 16:18
rule不能执行说明被rule判定函数挡掉了,只能改rule判定函数。想做好做稳就得这么干,可以说rule规则判定 ...

是的, rule判定函数就会卡到单耳的问题, 但如果片面移除限制, 又会导致未进行配耳就超前运行其他action, 所以说, 这rule说穿了是一个比较有架构的state machine, 但似乎缺乏一些弹性.
以目前我的改法已能满足单耳的需要.
但目前还剩下一个问题.
当耳机无配对纪录时, 又是单耳状态, 不会尝试进行connect headset, 所以小弟还在想办法解决.

bluetooth_hill 发表于 2020-5-7 17:42:36

记录下:)。

herex 发表于 2020-5-11 10:46:25

看高手过招

大哥救救我 发表于 2020-6-8 15:36:47

问一下老兄,appConfigAutoPeerPairingTimeout()是控制对等耳机配对的超时吗,与appConfigPeerPairingTimeout()有什么区别呢,为什么我添加了appSmPairHandset()或者SM_INTERNAL_PAIR_HANDSET的事件,但都不能超时进入手机配对。请问你如何添加的呢

lulu7320198 发表于 2020-6-15 10:02:42

大哥救救我 发表于 2020-6-8 15:36
问一下老兄,appConfigAutoPeerPairingTimeout()是控制对等耳机配对的超时吗,与appConfigPeerPairingTimeo ...

这个配对不能乱加的,会出现一堆乱七八糟的问题,要按流程来
页: 1 [2] 3
查看完整版本: QCC3020 earbud如何修改对耳连接失败后进手机配对?