Commit graph

6776 commits

Author SHA1 Message Date
Mikel Astiz
d2bd3aa444 bluetooth: Use transport state instead of profile states
The transport state also reflects the state of the audio interface. The
state redundancy can thus be minimized by always using the first one,
and avoiding the use of profile-specific states with the exception of
finding out the initial state of a transport.
2012-12-19 12:31:49 +02:00
Mikel Astiz
468c67bb62 bluetooth: Refactor dependency to org.bluez.Audio
The state of this interface is needed for one single reason: we need to
wait until all profiles have been connected (or more precisely, until
are connection attempts are finished). This can be made more explicit in
the code by just checking the CONNECTING state (and not loading
module-bluetooth-device during that state), but otherwise treating all
transport types equally.

Ideally, audio_state should be completely removed but it's left there to
avoid an issue with module-card-restore, as documented in the source
code's comments.
2012-12-19 12:31:49 +02:00
Mikel Astiz
203c6f8ed4 bluetooth: Trivially remove bt_transport_is_acquired()
The function body is now trivial and can thus be inlined.
2012-12-19 12:31:49 +02:00
Mikel Astiz
d2080a59f3 bluetooth: Abstract transport access types inside bluetooth-util
Transports can be acquired with different access rights, but in practice
"rw" was always used inside module-bluetooth-device. In addition, this
feature is removed in BlueZ 5.0 and therefore it is convenient to
abstract all this inside bluetooth-util.
2012-12-19 12:31:49 +02:00
Mikel Astiz
0c126bdf5b bluetooth: Use transport state to update port availability
Use transport state to calculate the corresponding port availability,
and while doing so use bluetooth-util to receive profile state updates
instead of directly parsing D-Bus PropertyChanged signals.
2012-12-19 12:31:49 +02:00
Mikel Astiz
8ae8b51937 bluetooth: Refactor parsing of profile state changes
Split filter_cb() to separate the parsing of the D-Bus message from
the internal logic handling the new state.
2012-12-19 12:31:49 +02:00
Mikel Astiz
f5a4626ffb bluetooth: Move profile_to_string() to bluetooth-util
Move the function to the utility library where the enum is defined. At
same time avoid using the default clause in order to make sure the
compiler will complain if the enum type gets extended.
2012-12-19 12:31:49 +02:00
Mikel Astiz
d6d6770a04 bluetooth: Use bluetooth-util for mic/speaker gain control
Use the new abstraction in bluetooth-util to both receive volume updates
and request them.
2012-12-19 12:31:49 +02:00
Mikel Astiz
0b524c1078 bluetooth: Abstract speaker gain in transport
Similarly to the microphone gain, the speaker gain can be abstracted
inside the transport object, even though the actual D-Bus interface in
BlueZ differs.
2012-12-19 12:31:49 +02:00
Mikel Astiz
ce24ef460a bluetooth: Abstract microphone gain in transport
The microphone gain represents the volume of the incoming audio stream
from the headset. This can be nicely abstracted inside the transport
object in bluetooth-util, so the modules don't have to take care about
the D-Bus details.
2012-12-19 12:31:49 +02:00
Stefan Huber
dc19d3eb29 echo-cancel: Fix null implementation to setup one channel
memcpy() of the null implementation's run() copied data for only one
channel. Set the number of channels to 1 in init() in order to guarantee
this.

Signed-off-by: Stefan Huber <s.huber@bct-electronic.com>
Acked-by: Peter Meerwald <p.meerwald@bct-electronic.com>
2012-12-19 12:31:48 +02:00
Stefan Huber
53f2964b40 echo-cancel: Fix apply_diff_time() to use correct sample spec
apply_diff_time() fails when dropping bytes from the playback stream
and the sample spec of sink and source differ as source's sample spec is
used. Fix this by using sink's sample spec.

Signed-off-by: Stefan Huber <s.huber@bct-electronic.com>
Acked-by: Peter Meerwald <p.meerwald@bct-electronic.com>
2012-12-19 12:31:48 +02:00
Flavio Ceolin
4d65c9582d role-ducking: Apply a ducking effect based on streams roles
This module works pretty similar to the module-role-cork.
It should be used as an alternative to that module. Basically
it decreases the volume of the streams specified in ducking_roles
in the presence of at least one stream specified in trigger_roles.
Also, it's possible to choice the volume that will be used in the
ducking streams and if it should operates in all devices or not.

For basic reference: http://en.wikipedia.org/wiki/Ducking
2012-12-19 12:31:48 +02:00
Tanu Kaskinen
b9f6bfcadc man: Document the possiblity of unloading modules by name in pulse-cli-syntax. 2012-12-19 12:31:48 +02:00
Tanu Kaskinen
02d6aa6480 core-util: Improve get_path() documentation 2012-12-19 12:31:48 +02:00
Mikel Astiz
d3290e958b bluetooth: Connect all hooks during module load/unload
Move the connection of sink/source-related hooks to module
initialization and shutdown, to group all of them together. There is
no need to connect them every time the card profile is changed.
2012-12-19 12:31:48 +02:00
Tanu Kaskinen
29bcddcfae bluetooth: Remove prefixing from static functions. 2012-12-19 12:31:48 +02:00
Mikel Astiz
abcb741299 bluetooth: Remove deprecated transport hooks
All code has migrated to the new centralized hooks listed in
pa_bluetooth_hook_t so the old transport-specific hooks can be removed.
2012-12-19 12:31:48 +02:00
Mikel Astiz
7c2465d5f9 bluetooth: Avoid PA_BLUETOOTH_TRANSPORT_HOOK_NREC_CHANGED
The hook has been recently moved to pa_bluetooth_hook_t, so make use
of the new version.
2012-12-19 12:31:48 +02:00
Mikel Astiz
2a3874dc36 bluetooth: Avoid PA_BLUETOOTH_TRANSPORT_HOOK_REMOVED
The hook is now deprecated so avoid using it and instead use the
recently introduced PA_BLUETOOTH_HOOK_TRANSPORT_STATE_CHANGED which also
reports the disconnection event.
2012-12-19 12:31:48 +02:00
Mikel Astiz
f035ffe3c0 bluetooth: Add transport hooks into pa_bluetooth_hook_t
Add the transport-handling hooks to the centralized list of hooks in
pa_bluetooth_hook_t. These are intended to replace the now deprecated
transport-specific hook list in pa_bluetooth_transport_hook_t.
2012-12-19 12:31:48 +02:00
Mikel Astiz
439745505a bluetooth: Add state to transport objects
Transport objects have an associated state even though it's not
explicitly exposed in BlueZ's D-Bus API (prior to 5.0). Instead, the
state is implicitly represented in the profile-specific D-Bus interface
(i.e. org.bluez.Headset, org.bluez.AudioSink, etc.) but it can be
convenient that bluetooth-util would abstract this separation.
2012-12-19 12:31:48 +02:00
Mikel Astiz
ab26cafaf4 bluetooth: Refactor parse_audio_property() to support more properties
The old implementation is limited to parsing the profile state, but
the D-Bus API actually exposes many more properties that are currently
not being considered, specially within org.bluez.Headset.
2012-12-19 12:31:48 +02:00
Mikel Astiz
726435045e bluetooth: Use array to store profile states
Refactor the code to use an array of states instead of independent
member fields, avoiding duplicated code and improving readability.
2012-12-19 12:31:48 +02:00
Mikel Astiz
689f9413ad bluetooth: Move device hooks into pa_bluetooth_hook_t
Centralize the Bluetooth hooks in one single place, starting with
the device hooks, while removing the duplicated ones (in this case
PA_BLUETOOTH_DEVICE_HOOK_REMOVED).
2012-12-19 12:31:48 +02:00
Mikel Astiz
e425fd61b8 bluetooth: Extend discovery to support multiple hooks
Add the infrastructure to support several hooks inside
pa_bluetooth_discovery, while using hook names that describe more
accurately their purpose.
2012-12-19 12:31:48 +02:00
Mikel Astiz
c8944dbb4b bluetooth: Avoid PA_BLUETOOTH_DEVICE_HOOK_REMOVED
The hook PA_BLUETOOTH_HOOK_DEVICE_CONNECTION_CHANGED gets fired also
when a device is being removed, so there is actually no need to have
this duplicated hook.
2012-12-19 12:31:48 +02:00
Tanu Kaskinen
0a8068d28e bluetooth: Check if BlueZ tries to set the configuration twice for the same transport. 2012-12-19 12:31:48 +02:00
Mikel Astiz
ebdb18bca4 bluetooth: Remove pa_bluetooth_device_get_transport()
With the use of an array to represent a device's transpors, the function
becomes trivial and thus can be removed.
2012-12-19 12:31:48 +02:00
Mikel Astiz
faaf8cd39e bluetooth: Use transport array instead of hashmap for devices
Devices will have zero or one transports per profile, and besides the
typical lookup is also profile-based. Therefore, replace the old hashmap
(which used the transport path as key) with a simple array which holds
a transport pointer per profile.
2012-12-19 12:31:48 +02:00
Mikel Astiz
51d28e6331 bluetooth: Add transport hashmap to discovery
Path-based transport lookups are required in a discovery basis, before
the associated device is known. Therefore, it makes more sense to
maintain a hashmap in the discovery structure itself, instead of
iterating all devices.
2012-12-19 12:31:47 +02:00
Mikel Astiz
ccc9a58dd0 bluetooth: Use round() to convert PA<->BT volumes
The code can be simplified since it's just trying to round the result of
the division. Note that the resulting behavior is slightly different,
specially when the volume is 0. In this case, it will remain at 0,
instead of being set to 1.
2012-12-19 12:31:47 +02:00
Mikel Astiz
b36686ea9a bluetooth: Add device pointer to transport
Transports always have an associated device, so add the pointer as a
member to the structure, and remove the discovery pointer since it
already exists in the device object.
2012-12-19 12:31:47 +02:00
Mikel Astiz
80dd7c1070 bluetooth: Remove unused pa_bluetooth_discovery_get_transport()
The function is not used and it also exposes D-Bus-related information
in the internal API, which is in general undesired.
2012-12-19 12:31:47 +02:00
Mikel Astiz
28251e7243 bluetooth: Make pa_bluetooth_transport_parse_property() private
The function is not being used outside bluetooth-util and thus can be
made private.
2012-12-19 12:31:47 +02:00
Mikel Astiz
3f41a4a538 bluetooth: Fix condition to load module
d->hfgw_state is just another profile that should be considered exactly
as the rest inside device_audio_is_ready(), which is being used to
decide if the discovery hook gets triggered.

Therefore, there seems to be no reason to make an exception for this
profile and skip checking if the condition d->audio_state !=
PA_BT_AUDIO_STATE_INVALID holds true.

This change makes no practical difference but delaying the load of the
module also for HFGW until Audio.State is received. The benefit is
that the behavior and the code are more consistent across profiles.
2012-12-19 12:31:47 +02:00
Flavio Ceolin
f9beb8e867 modargs: Adding pa_modargs_get_value_volume()
This function gets a pa_volume_t from a string.
2012-12-19 12:31:47 +02:00
Flavio Ceolin
9e2b6a0b5c sink-input: New volume_factor system
Implement setting of more than one volume factor.  The
real value of the volume_factor will be the multiplication of these
values.
2012-12-19 12:31:47 +02:00
Tanu Kaskinen
bf962a2600 card-restore: Log the restored profile name. 2012-12-19 12:31:47 +02:00
Tanu Kaskinen
0f44b1e820 Log the reason for every suspend/resume.
I was looking at a log that showed that a suspend happened (at
a strange time), but the log didn't tell me why the suspend was done.
This patch tries to make sure that that won't happen again.
2012-12-19 12:31:47 +02:00
Tanu Kaskinen
28c49a12fc esound: Suspend/resume also sources on STANDBY/RESUME commands. 2012-12-19 12:31:47 +02:00
Tanu Kaskinen
3ee3b0f49b mainloop: Check pa_write() return value. 2012-12-19 12:31:47 +02:00
Tanu Kaskinen
7e94a03e0c mainloop: Remove redundant wakeup_pipe validity checks.
The pipe is opened when creating the mainloop and closed
when freeing the mainloop. The pipe fds can never be less
than zero.
2012-12-19 12:31:47 +02:00
Luiz Augusto von Dentz
31d905aaae bluetooth: Add support for transport created by external profile
With BlueZ 5 it is possible to have profile registered by a third party
process which does not share the same bus id as bluetoothd so it is
necessary to store the sender of the transport to be able to talk to it.

Note that this is backward compatible.
2012-12-19 12:31:47 +02:00
Mikel Astiz
d4368aa608 bluetooth: Handle UUIDs announced later
In some cases (typically during pairing) UUIDs might be reported by
BlueZ incrementally, that is, as soon as they have been discovered. At
this point module-bluetooth-device might already be loaded, so the late
UUID announcements need to be handled and additional card profiles
might need to be created accordingly.
2012-12-19 12:31:47 +02:00
Mikel Astiz
ebfd656fc9 dbus: Add signal org.PulseAudio.Core1.Card.NewProfile
Add a new D-Bus signal to report profiles that have been dynamically
created for already existing cards.
2012-12-19 12:31:47 +02:00
Mikel Astiz
9c703f4e2d dbus: Support dynamically created card profiles
Use the recently added core hook to detect when new profiles are added
to a card, and update the D-Bus object accordingly.
2012-12-19 12:31:47 +02:00
David Henningsson
a703451811 alsa-mixer: Fix the analog-output-speaker-always path
A left over "required-any" made this path useless for most people.
While we're at it, also add "Front Headphone" like for the normal
speaker path.

Tested-by: Colin Guthrie <gmane@colin.guthr.ie>
Signed-off-by: David Henningsson <david.henningsson@canonical.com>
2012-12-19 11:24:33 +01:00
Arun Raghavan
fc2f741f61 build-sys: Bump soname 2012-12-17 14:30:09 +05:30
David Henningsson
0f6bbcc3a5 alsa-mixer: Add device.icon-name property for some common ports
If we expose this information, UIs can use this to make better
decisions about what icon to display.

Signed-off-by: David Henningsson <david.henningsson@canonical.com>
2012-12-07 16:37:23 +01:00