From: Mikel Astiz <[email protected]>
Merge the existing two ports into a single port, because the state is
redundant and actually PulseAudio supports input-output ports.
This new representation is not only more natural, but also more friendly
with module-switch-on-port-available. This module will now integrate
nicely by switching between A2DP and HFP/HSP profiles when the ports
become available.
---
src/modules/bluetooth/module-bluetooth-device.c | 46 +++++------------------
1 files changed, 10 insertions(+), 36 deletions(-)
diff --git a/src/modules/bluetooth/module-bluetooth-device.c
b/src/modules/bluetooth/module-bluetooth-device.c
index c1a88b0..a65eb2f 100644
--- a/src/modules/bluetooth/module-bluetooth-device.c
+++ b/src/modules/bluetooth/module-bluetooth-device.c
@@ -1320,10 +1320,7 @@ static DBusHandlerResult filter_cb(DBusConnection *bus,
DBusMessage *m, void *us
pa_device_port *port;
pa_port_available_t available = audio_state_to_availability(state);
- pa_assert_se(port = pa_hashmap_get(u->card->ports, "hfgw-output"));
- pa_device_port_set_available(port, available);
-
- pa_assert_se(port = pa_hashmap_get(u->card->ports, "hfgw-input"));
+ pa_assert_se(port = pa_hashmap_get(u->card->ports, "hfgw"));
pa_device_port_set_available(port, available);
acquire = (available == PA_PORT_AVAILABLE_YES && u->profile ==
PROFILE_HFGW);
@@ -1335,10 +1332,7 @@ static DBusHandlerResult filter_cb(DBusConnection *bus,
DBusMessage *m, void *us
pa_device_port *port;
pa_port_available_t available = audio_state_to_availability(state);
- pa_assert_se(port = pa_hashmap_get(u->card->ports, "hsp-output"));
- pa_device_port_set_available(port, available);
-
- pa_assert_se(port = pa_hashmap_get(u->card->ports, "hsp-input"));
+ pa_assert_se(port = pa_hashmap_get(u->card->ports, "hsp"));
pa_device_port_set_available(port, available);
acquire = (available == PA_PORT_AVAILABLE_YES && u->profile ==
PROFILE_HSP);
@@ -1586,24 +1580,20 @@ static void connect_ports(struct userdata *u, void
*sink_or_source_new_data, pa_
break;
case PROFILE_HSP:
- if (direction == PA_DIRECTION_OUTPUT) {
- pa_assert_se(port = pa_hashmap_get(u->card->ports,
"hsp-output"));
+ pa_assert_se(port = pa_hashmap_get(u->card->ports, "hsp"));
+ if (direction == PA_DIRECTION_OUTPUT)
pa_assert_se(pa_hashmap_put(data.sink_new_data->ports,
port->name, port) >= 0);
- } else {
- pa_assert_se(port = pa_hashmap_get(u->card->ports,
"hsp-input"));
+ else
pa_assert_se(pa_hashmap_put(data.source_new_data->ports,
port->name, port) >= 0);
- }
pa_device_port_ref(port);
break;
case PROFILE_HFGW:
- if (direction == PA_DIRECTION_OUTPUT) {
- pa_assert_se(port = pa_hashmap_get(u->card->ports,
"hfgw-output"));
+ pa_assert_se(port = pa_hashmap_get(u->card->ports, "hfgw"));
+ if (direction == PA_DIRECTION_OUTPUT)
pa_assert_se(pa_hashmap_put(data.sink_new_data->ports,
port->name, port) >= 0);
- } else {
- pa_assert_se(port = pa_hashmap_get(u->card->ports,
"hfgw-input"));
+ else
pa_assert_se(pa_hashmap_put(data.source_new_data->ports,
port->name, port) >= 0);
- }
pa_device_port_ref(port);
break;
@@ -2234,17 +2224,9 @@ static void create_ports_for_profile(struct userdata *u,
const pa_bluetooth_devi
break;
case PROFILE_HSP:
- pa_assert_se(port = pa_device_port_new(u->core, "hsp-output",
_("Bluetooth Telephony (HSP/HFP)"), 0));
+ pa_assert_se(port = pa_device_port_new(u->core, "hsp",
_("Bluetooth Telephony (HSP/HFP)"), 0));
pa_assert_se(pa_hashmap_put(card_new_data->ports, port->name,
port) >= 0);
port->is_output = 1;
- port->is_input = 0;
- port->priority = profile->priority * 100;
- port->available =
audio_state_to_availability(device->headset_state);
- pa_hashmap_put(port->profiles, profile->name, profile);
-
- pa_assert_se(port = pa_device_port_new(u->core, "hsp-input",
_("Bluetooth Telephony (HSP/HFP)"), 0));
- pa_assert_se(pa_hashmap_put(card_new_data->ports, port->name,
port) >= 0);
- port->is_output = 0;
port->is_input = 1;
port->priority = profile->priority * 100;
port->available =
audio_state_to_availability(device->headset_state);
@@ -2252,17 +2234,9 @@ static void create_ports_for_profile(struct userdata *u,
const pa_bluetooth_devi
break;
case PROFILE_HFGW:
- pa_assert_se(port = pa_device_port_new(u->core, "hfgw-output",
_("Bluetooth Handsfree Gateway"), 0));
+ pa_assert_se(port = pa_device_port_new(u->core, "hfgw",
_("Bluetooth Handsfree Gateway"), 0));
pa_assert_se(pa_hashmap_put(card_new_data->ports, port->name,
port) >= 0);
port->is_output = 1;
- port->is_input = 0;
- port->priority = profile->priority * 100;
- port->available = audio_state_to_availability(device->hfgw_state);
- pa_hashmap_put(port->profiles, profile->name, profile);
-
- pa_assert_se(port = pa_device_port_new(u->core, "hfgw-input",
_("Bluetooth Handsfree Gateway"), 0));
- pa_assert_se(pa_hashmap_put(card_new_data->ports, port->name,
port) >= 0);
- port->is_output = 0;
port->is_input = 1;
port->priority = profile->priority * 100;
port->available = audio_state_to_availability(device->hfgw_state);
--
1.7.7.6
_______________________________________________
pulseaudio-discuss mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss