Closed
Bug 881194
Opened 12 years ago
Closed 11 years ago
[Bluetooth][HFP]Adds a held call to the conversation (Supports CHLD=3, merge all conversation)
Categories
(Firefox OS Graveyard :: Bluetooth, defect)
Tracking
(Not tracked)
RESOLVED
FIXED
1.3 C1/1.4 S1(20dec)
People
(Reporter: shawnjohnjr, Assigned: jaliu)
References
Details
Attachments
(3 files, 11 obsolete files)
2.67 KB,
patch
|
echou
:
review+
|
Details | Diff | Splinter Review |
3.91 KB,
patch
|
echou
:
review+
|
Details | Diff | Splinter Review |
7.82 KB,
patch
|
echou
:
review+
|
Details | Diff | Splinter Review |
Supports CHLD=3, merge all conversation.
Reporter | ||
Updated•12 years ago
|
Assignee: nobody → btian
OS: Linux → Gonk (Firefox OS)
Hardware: x86_64 → ARM
Updated•12 years ago
|
Comment 1•12 years ago
|
||
Sorry for setting the wrong flag. Should be 'depend on', not 'blocks'.
Assignee | ||
Comment 2•11 years ago
|
||
Assignee: btian → jaliu
Flags: needinfo?
Assignee | ||
Updated•11 years ago
|
Attachment #828491 -
Flags: feedback?(echou)
Attachment #828491 -
Flags: feedback?(btian)
Assignee | ||
Updated•11 years ago
|
Flags: needinfo?
Comment 3•11 years ago
|
||
Comment on attachment 828491 [details] [diff] [review]
[HFP] Support AT+CHLD=3 patch (draft)
Looks good to me. Thanks.
Attachment #828491 -
Flags: feedback?(btian) → feedback+
Comment 4•11 years ago
|
||
Comment on attachment 828491 [details] [diff] [review]
[HFP] Support AT+CHLD=3 patch (draft)
Review of attachment 828491 [details] [diff] [review]:
-----------------------------------------------------------------
LGTM. I think you still need another patch to notify HF about the held call being merged.
Attachment #828491 -
Flags: feedback?(echou) → feedback+
Assignee | ||
Comment 5•11 years ago
|
||
Attachment #831394 -
Flags: feedback?(echou)
Attachment #831394 -
Flags: feedback?(btian)
Comment 6•11 years ago
|
||
Comment on attachment 831394 [details] [diff] [review]
[HFP] Send +CIEV callheld properly (draft)
Review of attachment 831394 [details] [diff] [review]:
-----------------------------------------------------------------
Hi Jamin, please update the patch according to my comments. I'll review the logic tomorrow. Sorry for the late reply.
::: dom/bluetooth/BluetoothHfpManager.cpp
@@ +1364,5 @@
> uint16_t prevCallState = mCurrentCallArray[aCallIndex].mState;
> mCurrentCallArray[aCallIndex].mState = aCallState;
> mCurrentCallArray[aCallIndex].mDirection = !aIsOutgoing;
>
> + uint16_t prevCallIsConference = mCurrentCallArray[aCallIndex].mIsConference;
Why prevCallIsConference is not a bool?
@@ +1438,5 @@
> // Outgoing call
> UpdateCIND(CINDType::CALL, CallState::IN_PROGRESS, aSend);
> UpdateCIND(CINDType::CALLSETUP, CallSetupState::NO_CALLSETUP, aSend);
> break;
> +
nit: we don't usually leave a blank line between cases in switch statement.
@@ +1444,5 @@
> + if (aIsConference) {
> + UpdateCIND(CINDType::CALLHELD, CallHeldState::NO_CALLHELD, aSend);
> + }
> + break;
> +
Ditto.
Attachment #831394 -
Flags: feedback?(echou)
Assignee | ||
Comment 7•11 years ago
|
||
I've tested these PTS test cases with Attachment #831394 [details] [diff].
- TC_AG_TWC_BV_01_I, pass
- TC_AG_TWC_BV_02_I, pass
- TC_AG_TWC_BV_03_I, pass
- TC_AG_TWC_BV_05_I, pass
It can't pass TC_AG_TWC_BV_04_I since we haven't handled AT+CHLD=3 command in Gaia layer.
I'll test TC_AG_TWC_BV_04 when it's ready.
Assignee | ||
Comment 8•11 years ago
|
||
Remove the modification in AnswerWaitingCall() which is a CDMA-specific function.
Attachment #831394 -
Attachment is obsolete: true
Attachment #831394 -
Flags: feedback?(btian)
Assignee | ||
Updated•11 years ago
|
Attachment #832104 -
Flags: feedback?(echou)
Attachment #832104 -
Flags: feedback?(btian)
Comment 9•11 years ago
|
||
Comment on attachment 832104 [details] [diff] [review]
[HFP] Send +CIEV callheld properly (draft-2)
Review of attachment 832104 [details] [diff] [review]:
-----------------------------------------------------------------
Please see my comments below. Also I have two questions:
1) Are all conference call cases covered? Please enumerate possible conference call cases systematically for 1).
2) Is it valid to assume a held call becomes active when the active call becomes held/disconnected? I think we should confirm with ril team.
::: dom/bluetooth/BluetoothHfpManager.cpp
@@ +1364,5 @@
> uint16_t prevCallState = mCurrentCallArray[aCallIndex].mState;
> mCurrentCallArray[aCallIndex].mState = aCallState;
> mCurrentCallArray[aCallIndex].mDirection = !aIsOutgoing;
>
> + uint16_t prevCallIsConference = mCurrentCallArray[aCallIndex].mIsConference;
Variable type should be bool instead of uint16_t.
@@ +1439,5 @@
> UpdateCIND(CINDType::CALL, CallState::IN_PROGRESS, aSend);
> UpdateCIND(CINDType::CALLSETUP, CallSetupState::NO_CALLSETUP, aSend);
> break;
> +
> + case nsITelephonyProvider::CALL_STATE_CONNECTED:
Please write comment to explain why there's CONNECTED -> CONNECTED call state change.
@@ +1447,5 @@
> + break;
> +
> + case nsITelephonyProvider::CALL_STATE_HELD:
> + if (!FindFirstCall(nsITelephonyProvider::CALL_STATE_HELD)
> + && aIsConference && !prevCallIsConference) {
nit: insert 2 more spaces to align with the if-condition.
@@ +1482,4 @@
> if (!FindFirstCall(nsITelephonyProvider::CALL_STATE_HELD)) {
> UpdateCIND(CINDType::CALLHELD, CallHeldState::NO_CALLHELD, aSend);
> } else if (!FindFirstCall(nsITelephonyProvider::CALL_STATE_CONNECTED)) {
> UpdateCIND(CINDType::CALLHELD, CallHeldState::ONHOLD_NOACTIVE, aSend);
Do we still need to send this CIEV?
Attachment #832104 -
Flags: feedback?(btian)
Comment 10•11 years ago
|
||
Hsinyi, one question about call state change:
Does a held call necessarily become active when the original active call is held/disconnected?
Flags: needinfo?(htsai)
Comment 11•11 years ago
|
||
Jamin, I suggest you split into 2 patches: extra CIEV fix and conference call change. It's clearer to understand the purpose of each line change.
Comment 12•11 years ago
|
||
(In reply to Ben Tian [:btian] from comment #10)
> Hsinyi, one question about call state change:
> Does a held call necessarily become active when the original active call
> is held/disconnected?
Spec doesn't elaborate on this case. I think this heavily depends on modem/platform/UX behaviour, should not be necessary.
Just playing with an Android phone, the held call stays on-hold even after the original active call is released.
Flags: needinfo?(htsai)
Assignee | ||
Comment 13•11 years ago
|
||
I enumerate conference call operating cases for 3~4 callers. (I believe we can follw the same rule for more callers)
Notation Definition:
Merge: Add a held call to the conversation.
Swap: Swap the Connected and Held call
Hand up: Hand up all the connected call
C = Connected call
H = Held call (including waiting call)
C' = Connected call with conference call flag
H' = Held call with conference call flag
# = What would Hfp manager do with Attachment #832104 [details] [diff]
Merge (1C, 1H)
Case 1:
H -> C' (2C', 0H), send
C -> C' (2C', 0H), send
# Send callheld=0 in HandleCallStateChanged(), case CALL_STATE_CONNECTED: [HELD & CONNECTED]
Case 2:
C -> C' (1C', 1H), send
H -> C' (2C', 0H), send
# Send callheld=0 in HandleCallStateChanged(), case CALL_STATE_CONNECTED: [HELD & CONNECTED]
Merge (2C', 1H)
H -> C' (3C', 0H), send callheld=0
# Send callheld=0 in HandleCallStateChanged(), case CALL_STATE_CONNECTED: [HELD]
Merge (1C, 2H')
Case 1:
C -> C' (1C', 2H'), send
H' -> C' (2C', 1H')
H' -> C' (3C', 0H),
# Send callheld=0 in HandleCallStateChanged(), case CALL_STATE_CONNECTED: [CONNECTED]
Case 2:
H' -> C' (1C'1C, 1H')
H' -> C' (2C'1C, 0H),
C -> C' (3C', 0H), send
# Send callheld=0 in HandleCallStateChanged(), case CALL_STATE_CONNECTED: [CONNECTED]
Case 3: (won't happen now?)
H' -> C' (1C'1C, 1H')
C -> C' (2C', 1H'), send
H' -> C' (3C', 0H),
# Send callheld=0 in HandleCallStateChanged(), case CALL_STATE_CONNECTED: [CONNECTED]
Swap (2C', 1H)
Case 1:
H -> C (2C'1C, 0H)
C' -> H' (1C'1C, 1H'), send
C' -> H' (1C, 2H'), send
# Send callheld=1 in HandleCallStateChanged(), case CALL_STATE_HELD:
Case 2:
C' -> H' (1C', 1H'1H), send
C' -> H' (0C, 2H'1H), send
H -> C (1C, 2H')
# Send callheld=1 in HandleCallStateChanged(), case CALL_STATE_HELD:
Case 3: (won't happen now?)
C' -> H' (1C', 1H'1H), send
H -> C (1C'1C, 1H')
C' -> H' (1C, 2H'), send
# Send callheld=1 in HandleCallStateChanged(), case CALL_STATE_HELD:
Swap (1C, 2H')
Case 1:
H' -> C' (1C'1C, 1H')
H' -> C' (2C'1C, 0H)
C -> H (2C', 1H), send
# Send callheld=1 in HandleCallStateChanged(), case CALL_STATE_HELD:
Case 2:
C -> H (0C, 2H'1H), send
H' -> C' (1C', 1H'1H)
H' -> C' (2C', 1H)
# Send callheld=1 in HandleCallStateChanged(), case CALL_STATE_HELD:
Case 3: (won't happen now?)
H' -> C' (1C'1C, 1H')
C -> H (1C', 1H'1H), send
H' -> C' (2C', 1H)
# Send callheld=1 in HandleCallStateChanged(), case CALL_STATE_HELD:
Hang up (2C', 1H)
C' -> D (1C', 1H),
C' -> D (0C', 1H), send
H -> C (1C, 0H)
# Send callheld=2, callheld=0 in HandleCallStateChanged(), case CALL_STATE_DISCONNECTED: [CONNECTED]
Hang up (1C, 2H')
C -> D (0C, 2H'), send
H' -> C' (1C', 1H')
H' -> C' (2C', 0H)
# Send callheld=2, callheld=0 in HandleCallStateChanged(), case CALL_STATE_DISCONNECTED: [CONNECTED]
Assignee | ||
Comment 14•11 years ago
|
||
(In reply to Ben Tian [:btian] from comment #11)
> Jamin, I suggest you split into 2 patches: extra CIEV fix and conference
> call change. It's clearer to understand the purpose of each line change.
Ben,
Got it. I'll upload two patches for +CIEV to replace Attachment #832104 [details] [diff].
Thank you.
Assignee | ||
Comment 15•11 years ago
|
||
(In reply to Hsin-Yi Tsai [:hsinyi] from comment #12)
> (In reply to Ben Tian [:btian] from comment #10)
> > Hsinyi, one question about call state change:
> > Does a held call necessarily become active when the original active call
> > is held/disconnected?
>
> Spec doesn't elaborate on this case. I think this heavily depends on
> modem/platform/UX behaviour, should not be necessary.
>
> Just playing with an Android phone, the held call stays on-hold even after
> the original active call is released.
Since the UX behavior may change in the future, I think I should refine the code for "Hang up" operation for different behavior. I'll upload a new patch later.
Thanks.
Assignee | ||
Comment 16•11 years ago
|
||
Attachment #832104 -
Attachment is obsolete: true
Attachment #832104 -
Flags: feedback?(echou)
Attachment #832759 -
Flags: feedback?(echou)
Attachment #832759 -
Flags: feedback?(btian)
Assignee | ||
Comment 17•11 years ago
|
||
Attachment #832761 -
Flags: feedback?(echou)
Attachment #832761 -
Flags: feedback?(btian)
Assignee | ||
Updated•11 years ago
|
Status: NEW → ASSIGNED
Comment 18•11 years ago
|
||
Comment on attachment 832759 [details] [diff] [review]
[HFP] Send +CIEV callheld properly. (part 1)
Review of attachment 832759 [details] [diff] [review]:
-----------------------------------------------------------------
Hi Jamin, you may need to rebase onto the latest codebase since the code tree has been modified for a while.
::: dom/bluetooth/BluetoothHfpManager.cpp
@@ +1373,5 @@
> nsString address;
>
> switch (aCallState) {
> case nsITelephonyProvider::CALL_STATE_HELD:
> + if (prevCallState == nsITelephonyProvider::CALL_STATE_CONNECTED) {
This will be wrong in case 1C => 1H.
According to Page 72 of HFP spec 1.6, "... or a single active call is put on hold, the AG shall issue a +CIEV unsolicited result code with the callheld indicator value of '2'." However callheld=1 would be sent with this patch applied.
Attachment #832759 -
Flags: feedback?(echou) → feedback-
Assignee | ||
Comment 19•11 years ago
|
||
Attachment #832759 -
Attachment is obsolete: true
Attachment #832759 -
Flags: feedback?(btian)
Assignee | ||
Updated•11 years ago
|
Attachment #8339755 -
Flags: review?(echou)
Assignee | ||
Updated•11 years ago
|
Attachment #8339755 -
Attachment is obsolete: true
Attachment #8339755 -
Flags: review?(echou)
Assignee | ||
Comment 20•11 years ago
|
||
Attachment #8339764 -
Flags: review?(echou)
Assignee | ||
Comment 21•11 years ago
|
||
Rebase.
Attachment #832761 -
Attachment is obsolete: true
Attachment #832761 -
Flags: feedback?(echou)
Attachment #832761 -
Flags: feedback?(btian)
Attachment #8339765 -
Flags: review?(echou)
Assignee | ||
Comment 22•11 years ago
|
||
rebase
Attachment #828491 -
Attachment is obsolete: true
Attachment #8339770 -
Flags: review?(echou)
Comment 23•11 years ago
|
||
Comment on attachment 8339764 [details] [diff] [review]
[HFP] Send +CIEV callheld properly. (part 1, v2)
Review of attachment 8339764 [details] [diff] [review]:
-----------------------------------------------------------------
::: dom/bluetooth/bluez/BluetoothHfpManager.cpp
@@ +1382,4 @@
> sCINDItems[CINDType::CALLHELD].value = CallHeldState::ONHOLD_ACTIVE;
> + SendCommand("+CIEV: ", CINDType::CALLHELD);
> + } else if (mCurrentCallArray.Length() == 1) {
> + // A single active call is put on hold, send +CIEV, callheld=2
This won't work in the case you mentioned here. If there is only one active call and is going to be put on hold, the first if-statement check will be passed and ONHOLD_ACTIVE will be still sent.
Attachment #8339764 -
Flags: review?(echou) → review-
Comment 24•11 years ago
|
||
Comment on attachment 8339765 [details] [diff] [review]
[HFP] Send +CIEV callheld for conference call operating . (part 2, v2)
Review of attachment 8339765 [details] [diff] [review]:
-----------------------------------------------------------------
r=me with nits addressed.
::: dom/bluetooth/bluez/BluetoothHfpManager.cpp
@@ +1448,5 @@
> UpdateCIND(CINDType::CALL, CallState::IN_PROGRESS, aSend);
> UpdateCIND(CINDType::CALLSETUP, CallSetupState::NO_CALLSETUP, aSend);
> break;
>
> + // User want to add a held call to the conversation.
typo: want's'
@@ +1460,2 @@
> case nsITelephonyProvider::CALL_STATE_HELD:
> + // if (!FindFirstCall(nsITelephonyProvider::CALL_STATE_HELD)
These comments are meaningless. Please remove them.
@@ +1471,1 @@
> UpdateCIND(CINDType::CALLHELD, CallHeldState::NO_CALLHELD, aSend);
There are same operations in above two if-blocks. How about combining to one?
Attachment #8339765 -
Flags: review?(echou) → review+
Assignee | ||
Comment 25•11 years ago
|
||
Attachment #8339764 -
Attachment is obsolete: true
Attachment #8340275 -
Flags: review?(echou)
Assignee | ||
Comment 26•11 years ago
|
||
Attachment #8339765 -
Attachment is obsolete: true
Attachment #8340276 -
Flags: review?(echou)
Assignee | ||
Comment 27•11 years ago
|
||
(In reply to Eric Chou [:ericchou] [:echou] from comment #24)
> Comment on attachment 8339765 [details] [diff] [review]
> [HFP] Send +CIEV callheld for conference call operating . (part 2, v2)
>
> Review of attachment 8339765 [details] [diff] [review]:
> -----------------------------------------------------------------
>
> r=me with nits addressed.
>
> ::: dom/bluetooth/bluez/BluetoothHfpManager.cpp
> @@ +1448,5 @@
> > UpdateCIND(CINDType::CALL, CallState::IN_PROGRESS, aSend);
> > UpdateCIND(CINDType::CALLSETUP, CallSetupState::NO_CALLSETUP, aSend);
> > break;
> >
> > + // User want to add a held call to the conversation.
>
> typo: want's'
>
> @@ +1460,2 @@
> > case nsITelephonyProvider::CALL_STATE_HELD:
> > + // if (!FindFirstCall(nsITelephonyProvider::CALL_STATE_HELD)
>
> These comments are meaningless. Please remove them.
>
> @@ +1471,1 @@
> > UpdateCIND(CINDType::CALLHELD, CallHeldState::NO_CALLHELD, aSend);
>
> There are same operations in above two if-blocks. How about combining to one?
I've tried to combine these two conditions in to one if-blocks.
However, it becomes difficult to read and hard to add comment for each cases.
I will upload a new patch if I find a better way to handle this.
Thank you.
Assignee | ||
Comment 28•11 years ago
|
||
Attachment #8340276 -
Attachment is obsolete: true
Attachment #8340276 -
Flags: review?(echou)
Attachment #8340284 -
Flags: review?(echou)
Updated•11 years ago
|
Attachment #8339770 -
Flags: review?(echou) → review+
Assignee | ||
Comment 29•11 years ago
|
||
Just added a space to this patch.
Nothing else changed.
Attachment #8340284 -
Attachment is obsolete: true
Attachment #8340284 -
Flags: review?(echou)
Attachment #8340950 -
Flags: review?(echou)
Comment 30•11 years ago
|
||
Comment on attachment 8340275 [details] [diff] [review]
[HFP] Send +CIEV callheld properly. (part 1, v3)
Review of attachment 8340275 [details] [diff] [review]:
-----------------------------------------------------------------
r=me with nits addressed.
::: dom/bluetooth/bluez/BluetoothHfpManager.cpp
@@ +1444,5 @@
> // Outgoing call
> UpdateCIND(CINDType::CALL, CallState::IN_PROGRESS, aSend);
> UpdateCIND(CINDType::CALLSETUP, CallSetupState::NO_CALLSETUP, aSend);
> break;
> +
We usually don't leave an extra line before each 'case'.
@@ +1453,5 @@
> + CallHeldState::ONHOLD_NOACTIVE) {
> + UpdateCIND(CINDType::CALLHELD, CallHeldState::NO_CALLHELD, aSend);
> + }
> + break;
> +
Ditto.
Attachment #8340275 -
Flags: review?(echou) → review+
Updated•11 years ago
|
Attachment #8340950 -
Flags: review?(echou) → review+
Comment 31•11 years ago
|
||
Hi Jamin,
All patches got r+. Please remember to run all 3-way calling test cases on PTS before you request for checking in.
Thanks.
Assignee | ||
Comment 32•11 years ago
|
||
Attachment #8340950 -
Attachment is obsolete: true
Attachment #8341561 -
Flags: review?(echou)
Assignee | ||
Comment 33•11 years ago
|
||
It looks good on try server.
https://tbpl.mozilla.org/?tree=Try&rev=a17f512df494
Updated•11 years ago
|
Attachment #8341561 -
Flags: review?(echou) → review+
Assignee | ||
Comment 34•11 years ago
|
||
The related Gaia patch of Bug 917221 has been merged on mater.
https://github.com/mozilla-b2g/gaia/commit/c3ee8d3f54c468b5e5576416dabde0b4b55a7dbb
Keywords: checkin-needed
Comment 35•11 years ago
|
||
https://hg.mozilla.org/integration/b2g-inbound/rev/b03d8885420a
https://hg.mozilla.org/integration/b2g-inbound/rev/b3fc73a2fb98
https://hg.mozilla.org/integration/b2g-inbound/rev/aec25ec7bf38
Keywords: checkin-needed
Comment 36•11 years ago
|
||
https://hg.mozilla.org/mozilla-central/rev/b03d8885420a
https://hg.mozilla.org/mozilla-central/rev/b3fc73a2fb98
https://hg.mozilla.org/mozilla-central/rev/aec25ec7bf38
Status: ASSIGNED → RESOLVED
Closed: 11 years ago
Resolution: --- → FIXED
Target Milestone: --- → 1.3 C1/1.4 S1(20dec)
You need to log in
before you can comment on or make changes to this bug.
Description
•