Closed
Bug 825149
Opened 12 years ago
Closed 9 years ago
[b2g-bluetooth]HFP NREC commands required to bypass disable noise reduction/echo cancellation parameter to audio module
Categories
(Firefox OS Graveyard :: Bluetooth, defect)
Tracking
(blocking-b2g:2.2r+, feature-b2g:2.2r+, firefox43 fixed, b2g-v2.2 wontfix, b2g-v2.2r fixed, b2g-master fixed)
RESOLVED
FIXED
FxOS-S5 (21Aug)
People
(Reporter: shawnjohnjr, Assigned: wiwang)
References
Details
(Whiteboard: [red-tai])
Attachments
(3 files, 5 obsolete files)
747 bytes,
patch
|
wiwang
:
review+
|
Details | Diff | Splinter Review |
7.92 KB,
patch
|
shawnjohnjr
:
review+
|
Details | Diff | Splinter Review |
12.99 KB,
patch
|
wiwang
:
review+
|
Details | Diff | Splinter Review |
HFP AT command AT+NREC=0, AT+NREC=1, Bluetooth needs to inform audio sub-system to disable/enable noise reduction/echo cancellation. It is necessary for general Bluetooth in car system due to many Bluetooth car kit system would do NR/EC by itself. Usually Bluetooth car kit system sends AT+NREC=0 to turn off NR/EC, to avoid double effects. If audio system does not turn off NR/EC, the audio quality from Bluetooth car kit would decrease in general. Car kit on "Mercedes-BenZ" and "BMW" usually would do this request to phone.
Reporter | ||
Updated•12 years ago
|
Assignee: nobody → shuang
Reporter | ||
Comment 1•12 years ago
|
||
Attachment #696239 -
Flags: review?(gyeh)
Attachment #696239 -
Flags: review?(echou)
Comment 2•12 years ago
|
||
Comment on attachment 696239 [details] [diff] [review]
Add AT+NREC and add AudioManager setParameter API
Review of attachment 696239 [details] [diff] [review]:
-----------------------------------------------------------------
Several places needs to be revised, happy to review again once all have been done. :)
Also, not sure if it's suitable to expose nsIAudioManager::setParameter(). We need a DOM API peer to super-review this.
::: dom/bluetooth/BluetoothHfpManager.cpp
@@ +743,5 @@
> + nsCOMPtr<nsIAudioManager> am =
> + do_GetService("@mozilla.org/telephony/audiomanager;1");
> + if (!am) {
> + NS_WARNING("Failed to get AudioManager service!");
> + return;
Should we still respond with OK even if couldn't get audio service?
@@ +745,5 @@
> + if (!am) {
> + NS_WARNING("Failed to get AudioManager service!");
> + return;
> + }
> + mNREC = (atCommandValues[0].EqualsLiteral("0"));
This is confusing. Other flags, such as mCLIP and mReceiveVgsFlag, are true if that function is enabled.
@@ +747,5 @@
> + return;
> + }
> + mNREC = (atCommandValues[0].EqualsLiteral("0"));
> + if (mNREC) {
> + nsString audioSetting;
Nit: Using nsAutoString instead of nsString for local string which is less than 64 characters saves a runtime memory allocation.
@@ +755,5 @@
> + } else {
> + nsString audioSetting;
> + audioSetting.AppendLiteral("bt_headset_name=Default Car-kit;");
> + audioSetting.AppendLiteral("bt_headset_nrec=on");
> + am->SetParameters(audioSetting);
I would suggest that we could move these outside the if-block except the second line of AppendLiteral.
nsString audioSetting;
audioSetting.AppendLiteral("bt_headset_name=Default Car-kit;");
if (mNREC) {
audioSetting.AppendLiteral("bt_headset_nrec=off");
} else {
audioSetting.AppendLiteral("bt_headset_nrec=on");
}
am->SetParameters(audioSetting);
::: dom/system/gonk/AudioManager.cpp
@@ +433,5 @@
> return NS_OK;
> }
>
> +NS_IMETHODIMP
> +AudioManager::SetParameters(const nsAString &aParameter) {
Nit: we usually put the '&' at the end of 'nsAString'
::: dom/system/gonk/nsIAudioManager.idl
@@ +77,5 @@
>
> void setStreamVolumeIndex(in long stream, in long index);
> long getStreamVolumeIndex(in long stream);
> long getMaxStreamVolumeIndex(in long stream);
> + void setParameters(in DOMString params);
I'm not sure if it's suitable to expose this. Please invite a DOM API team member for super-review.
Attachment #696239 -
Flags: review?(echou)
Reporter | ||
Comment 3•12 years ago
|
||
After reviewing Bug 831176, audio team preferred to let Bluetooth call AudioSystem directly.
Comment 4•12 years ago
|
||
Comment on attachment 696239 [details] [diff] [review]
Add AT+NREC and add AudioManager setParameter API
Review of attachment 696239 [details] [diff] [review]:
-----------------------------------------------------------------
We need to rebase the patch to the latest code base. Please send the review request again once the new patch is ready.
Attachment #696239 -
Flags: review?(gyeh) → review?
Updated•12 years ago
|
Attachment #696239 -
Flags: review?
Reporter | ||
Comment 5•11 years ago
|
||
Hi Star,
ni you because I hope you can review this requirement for bluetooth audio parameter, if you need to study PulseAudio, please remember add this into your consideration!
Flags: needinfo?(scheng)
Reporter | ||
Comment 6•11 years ago
|
||
This bug is my first bug, but seems that no progress anymore, which is sad. We shall nominate this feature to v.1.4.
Reporter | ||
Updated•11 years ago
|
blocking-b2g: --- → 1.4?
Reporter | ||
Updated•11 years ago
|
Flags: needinfo?(scheng)
Flags: needinfo?(mchen)
Reporter | ||
Updated•11 years ago
|
blocking-b2g: 1.4? → ---
Reporter | ||
Updated•11 years ago
|
Blocks: devices-backlog
Reporter | ||
Updated•10 years ago
|
Assignee: shuang → wiwang
Reporter | ||
Updated•10 years ago
|
Whiteboard: [red-tai]
Updated•9 years ago
|
feature-b2g: --- → 2.2r+
Updated•9 years ago
|
Whiteboard: [red-tai] → [red-tai][ETA=8/31]
Assignee | ||
Comment 8•9 years ago
|
||
Hi Shawn,
Could you help to review my patch?
Thanks!
Attachment #696239 -
Attachment is obsolete: true
Attachment #8640504 -
Flags: review?(shuang)
Assignee | ||
Comment 9•9 years ago
|
||
Examination for my patch:
1. Passed PTS test for the HFP NREC feature (TC_AG_ENO_BV_01_I) [1]
2. Tested with Nokia bluetooth speaker MD-12. [2]
[1]
Test case : TC_AG_ENO_BV_01_I started
- SDP Service record for PTS: 'Handsfree HF' successfully registered
- The IUT claims support for the following eSCO LMP packet types: EV3, 2-EV3,
- The IUT claims support for the following eSCO LMP packet types: EV3, 2-EV3,
- The IUT claims support for the following eSCO LMP packet types: EV3, 2-EV3,
- AT: SPP connect succeeded
- AT: Service Level Connection established
- AT: post SLC command sequence complete
- MTC: AT+NREC=0
- AT: RING
- AT: Received +CLIP: "0973170512",129
- HCI: Audio Connection enabled
- AT: Incoming call established
- HCI: Audio Connection disabled
- AT: Call terminated
- MTC: Call disabled by IUT
- AT: Service Level Connection disabled
- MTC: Test case ended
-Final Verdict: PASS
TC_AG_ENO_BV_01_I finished
[2]
Logcat log shows that NREC was set to on, once:
- RFCOMM connected(state 2,line 1342),
- and before a new SLC connection(state 3,line 1394).
Then NREC was set to off.
1342-07-30 03:52:42.079 I/GeckoBluetooth( 205): ConnectionStateNotification: state 2
1343:07-30 03:52:42.079 D/audio_hw_primary( 201): adev_set_parameters: enter: bt_headset_name=<unknown>;bt_headset_nrec=on
1344-07-30 03:52:42.079 D/audio_hw_extn( 201): audio_extn_set_anc_parameters: anc_enabled:0
1345-07-30 03:52:42.079 I/audio_a2dp_hw( 201): adev_set_parameters: state AUDIO_A2DP_STATE_STANDBY
1346-07-30 03:52:42.079 I/audio_a2dp_hw( 201): out_set_parameters: state AUDIO_A2DP_STATE_STANDBY
1347-07-30 03:52:42.079 I/str_params( 201): key: 'bt_headset_name' value: '<unknown>'
1348:07-30 03:52:42.079 I/str_params( 201): key: 'bt_headset_nrec' value: 'on'
........
1394 07-30 03:52:42.319 I/GeckoBluetooth( 205): ConnectionStateNotification: state 3
........
1458 07-30 03:52:42.579 D/audio_hw_primary( 201): adev_set_parameters: enter: bt_headset_name=<unknown>;bt_headset_nrec=off
1459 07-30 03:52:42.579 I/audio_a2dp_hw( 201): out_get_format: format 0x1
1460 07-30 03:52:42.579 I/audio_a2dp_hw( 201): out_get_channels: channels 0x3
1461 07-30 03:52:42.579 D/audio_hw_extn( 201): audio_extn_set_anc_parameters: anc_enabled:0
1462 07-30 03:52:42.579 I/audio_a2dp_hw( 201): adev_set_parameters: state AUDIO_A2DP_STATE_STANDBY
1463 07-30 03:52:42.579 I/audio_a2dp_hw( 201): out_set_parameters: state AUDIO_A2DP_STATE_STANDBY
1464 07-30 03:52:42.579 I/str_params( 201): key: 'bt_headset_name' value: '<unknown>'
1465 07-30 03:52:42.579 I/str_params( 201): key: 'bt_headset_nrec' value: 'off'
Assignee | ||
Comment 10•9 years ago
|
||
Issues during my develop and examination:
1. At first, I tested patch on the device "flame-L", however 3 issues appeared:
- 1.1: flame-L cannot dial out. This is needed by PTS HFP testing.
- 1.2: flame-L cannot show correct bluetooth address due to the underlying trace_util service was not correctly set. Bluetooth address is needed by PTS testing.
- 1.3: flame-L was not set to build the bluetooth feature config file[1] of bluetooth stack, so a file inclusion need to be added in the file[2].
Therefore, flame-kk were used for test afterwards.
2. Sometimes log shows that an error occurred when setting audio parameter, like the followings:
72:07-29 11:15:26.604 D/audio_hw_primary( 228): adev_set_parameters: enter: bt_headset_name=<unknown>;bt_headset_nrec=on
73-07-29 11:15:26.604 D/audio_hw_extn( 228): audio_extn_set_anc_parameters: anc_enabled:0
74-07-29 11:15:26.604 E/audio_a2dp_hw( 228): adev_set_parameters: ERROR: set param called even when stream out is null
This is not directly related to HFP NREC feature implementation, however it need to be fixed.
[1] dom/bluetooth/bluedroid/b2g_bdroid_buildcfg.h
[2] device/t2m/flame/bluetooth/bdroid_buildcfg.h
Assignee | ||
Comment 11•9 years ago
|
||
nit: s/develop/development in 1st line of above comment.
Assignee | ||
Comment 12•9 years ago
|
||
Hi Shawn,
This is another needed patch for adding the NREC feature bit in the bluedroid,
could you help to review?
Thanks!
Attachment #8640872 -
Flags: review?(shuang)
Reporter | ||
Comment 13•9 years ago
|
||
Comment on attachment 8640504 [details] [diff] [review]
0001-Bug-825149-support-HFP-NREC-feature.patch
Review of attachment 8640504 [details] [diff] [review]:
-----------------------------------------------------------------
Hi Will,
I'm glad to review again after you revise patch.
::: dom/bluetooth/BluetoothCommon.h
@@ +169,4 @@
> #define BLUETOOTH_HID_STATUS_CHANGED_ID "bluetooth-hid-status-changed"
> #define BLUETOOTH_SCO_STATUS_CHANGED_ID "bluetooth-sco-status-changed"
>
> +#define BLUETOOTH_HFP_NREC_STATUS_CHANGED_ID "bluetooth-hfp-nrec-status-changed"
nit: Move this line after BLUETOOTH_HFP_STATUS_CHANGED_ID.
::: dom/bluetooth/bluedroid/hfp/BluetoothHfpManager.cpp
@@ +1481,5 @@
> +
> + // Notify Gecko observers
> + nsCOMPtr<nsIObserverService> obs = services::GetObserverService();
> + NS_ENSURE_TRUE_VOID(obs);
> +
Can you explain why you don't handle |aNrec|? You should set |mNrecEnabled| based on |aNrec|, right?
::: dom/system/gonk/AudioManager.cpp
@@ +344,5 @@
> + } else {
> + cmd.setTo("bt_headset_name=<unknown>;bt_headset_nrec=off");
> + AudioSystem::setParameters(0, cmd);
> + }
> +
nit: Remove this line.
Attachment #8640504 -
Flags: review?(shuang) → review-
Reporter | ||
Updated•9 years ago
|
Attachment #8640872 -
Flags: review?(shuang) → review+
Assignee | ||
Comment 14•9 years ago
|
||
Hi Shawn,
Thanks for your review!
The revised patch is as attached and passed the PTS test,
could you help to review?
Thanks!
Attachment #8640504 -
Attachment is obsolete: true
Attachment #8640929 -
Flags: review?(shuang)
Reporter | ||
Comment 15•9 years ago
|
||
Comment on attachment 8640929 [details] [diff] [review]
0001-Bug-825149-support-HFP-NREC-feature-v2.patch
Review of attachment 8640929 [details] [diff] [review]:
-----------------------------------------------------------------
Hi
Almost there, you still need to fix a few tiny things.
::: dom/bluetooth/bluedroid/hfp/BluetoothHfpManager.cpp
@@ +1201,5 @@
> return (mConnectionState == HFP_CONNECTION_STATE_SLC_CONNECTED);
> }
>
> +bool
> +BluetoothHfpManager::IsNrecEnabled()
If outside caller call |IsNrecEnabled()|, what will you expect this value return, if you don't initialize |mNrecEnabled| in constructor. The default value is false.
@@ +1393,5 @@
> NS_LITERAL_STRING(BLUETOOTH_HFP_STATUS_CHANGED_ID));
> +
> + } else if (aState == HFP_CONNECTION_STATE_CONNECTED) {
> + // Once RFCOMM is connected, enable NREC before each new SLC connection
> + mNrecEnabled = true;
Please init |mNrecEnabled| in constructor and clean up |mNrecEnabled| in |cleanup|.
@@ +1483,5 @@
> + nsCOMPtr<nsIObserverService> obs = services::GetObserverService();
> + NS_ENSURE_TRUE_VOID(obs);
> +
> + // Set NREC status once getting AT command
> + mNrecEnabled = aNrec;
static_cast<bool>(aNrec)
Attachment #8640929 -
Flags: review?(shuang) → review-
Assignee | ||
Comment 16•9 years ago
|
||
Hi Shawn
Thanks for your advices!
Could you help to review again?
This patch is also passed the PTS test as well.
Thanks!
Attachment #8640929 -
Attachment is obsolete: true
Attachment #8643509 -
Flags: review?(shuang)
Reporter | ||
Comment 17•9 years ago
|
||
Comment on attachment 8643509 [details] [diff] [review]
0001-Bug-825149-support-HFP-NREC-feature(v3).patch
Review of attachment 8643509 [details] [diff] [review]:
-----------------------------------------------------------------
This looks good to me.
Attachment #8643509 -
Flags: review?(shuang) → review+
Assignee | ||
Comment 18•9 years ago
|
||
Comment on attachment 8640872 [details] [diff] [review]
0001-Bug-825149-add-NREC-feature-bit-in-bluetooth-stack.patch
># HG changeset patch
># User Will Wang <wiwang@mozilla.com>
>
>Bug 825149: add NREC feature bit in bluetooth stack. r=shuang.
>
>diff --git a/dom/bluetooth/bluedroid/b2g_bdroid_buildcfg.h b/dom/bluetooth/bluedroid/b2g_bdroid_buildcfg.h
>index c51b2f9..6cbfd73 100644
>--- a/dom/bluetooth/bluedroid/b2g_bdroid_buildcfg.h
>+++ b/dom/bluetooth/bluedroid/b2g_bdroid_buildcfg.h
>@@ -32,6 +32,7 @@
> ******************************************************************************/
> /* AG feature masks */
> #define BTIF_HF_FEATURES ( BTA_AG_FEAT_3WAY | \
>+ BTA_AG_FEAT_ECNR | \
> BTA_AG_FEAT_REJECT | \
> BTA_AG_FEAT_ECS | \
> BTA_AG_FEAT_EXTERR)
>
Assignee | ||
Comment 19•9 years ago
|
||
Please ignore above comment 18 which was accidentally posted.
Assignee | ||
Comment 20•9 years ago
|
||
Add reviewer to commit message and carry r+ from previous patch(in comment 12).
Attachment #8640872 -
Attachment is obsolete: true
Attachment #8644893 -
Flags: review+
Assignee | ||
Comment 21•9 years ago
|
||
The try result[1] shows "busted" in B2G ICS Emulator, I am making a modified patch to solve this.
[1] https://treeherder.mozilla.org/#/jobs?repo=try&revision=b42811e42553
Assignee | ||
Comment 22•9 years ago
|
||
Hi Shawn
Here is the patch which was modified to avoid the build break in B2G ICS Emulator, could you help to review again?
I can built it in my local ICS Emulator repo without build break, and will send to try server once the server is back (refer bug 1192758)
Thanks!
Attachment #8643509 -
Attachment is obsolete: true
Attachment #8645675 -
Flags: review?(shuang)
Assignee | ||
Comment 23•9 years ago
|
||
try server is back:
https://treeherder.mozilla.org/#/jobs?repo=try&revision=f91af77ce7f3
Reporter | ||
Updated•9 years ago
|
Attachment #8645675 -
Flags: review?(shuang) → review+
Assignee | ||
Updated•9 years ago
|
Component: General → Bluetooth
Keywords: checkin-needed
Comment 24•9 years ago
|
||
https://hg.mozilla.org/integration/b2g-inbound/rev/d8813047ca09
https://hg.mozilla.org/integration/b2g-inbound/rev/863a1606a3a8
Keywords: checkin-needed
https://hg.mozilla.org/mozilla-central/rev/d8813047ca09
https://hg.mozilla.org/mozilla-central/rev/863a1606a3a8
Status: NEW → RESOLVED
Closed: 9 years ago
status-firefox43:
--- → fixed
Resolution: --- → FIXED
Target Milestone: --- → FxOS-S5 (21Aug)
Assignee | ||
Comment 26•9 years ago
|
||
Attached patch is modified[1] from v4 for branch 2.2r.
Carry r+ from previous patch.
[1] change c++11 "override" back to "MOZ_OVERRIDE" to unify coding style,
and re-generate a patch with 2.2r context(MOZ_OVERRIDE) to have patch applied without rejection in 2.2r (refer to bug 1145631)
Attachment #8646807 -
Flags: review+
Assignee | ||
Updated•9 years ago
|
Attachment #8645675 -
Attachment description: 0001-Bug-825149-support-HFP-NREC-feature(v4).patch → 0001-Bug-825149-support-HFP-NREC-feature(v4, for m-c).patch
Assignee | ||
Updated•9 years ago
|
Attachment #8644893 -
Attachment description: 0001-Bug-825149-add-NREC-feature-bit-in-bluetooth-stack.patch → 0001-Bug-825149-add-NREC-feature-bit-in-bluetooth-stack(for both m-c and 2.2r).patch
Assignee | ||
Comment 27•9 years ago
|
||
Hi Sheriff,
Could you help to uplift two patches[1] to 2.2r once "blocking-b2g 2.2r+" set,
Thanks!
[1]
1st patch: 0001-Bug-825149-add-NREC-feature-bit-in-bluetooth-stack(for both m-c and 2.2r).patch in comment 20
2nd patch: 0001-Bug-825149-support-HFP-NREC-feature(v5, for 2.2r).patch in comment 26
blocking-b2g: --- → 2.2r?
Assignee | ||
Comment 28•9 years ago
|
||
Hi Josh
Per discussion, could you help to set blocking-b2g 2.2r+,
Thanks!
Flags: needinfo?(jocheng)
Comment 30•9 years ago
|
||
https://hg.mozilla.org/releases/mozilla-b2g37_v2_2r/rev/7f698cda882d
https://hg.mozilla.org/releases/mozilla-b2g37_v2_2r/rev/421cc0c9dabc
status-b2g-v2.2:
--- → wontfix
status-b2g-v2.2r:
--- → fixed
status-b2g-master:
--- → fixed
Whiteboard: [red-tai][ETA=8/31] → [red-tai]
Updated•9 years ago
|
QA Whiteboard: QAExclude
Flags: needinfo?(jmercado)
Updated•9 years ago
|
Flags: needinfo?(jmercado)
Updated•9 years ago
|
Blocks: b2g-hfp-16
You need to log in
before you can comment on or make changes to this bug.
Description
•