[pulseaudio-discuss] [PATCH v0 13/20] bluetooth: Expose a single port for HFP/HSP
Mikel Astiz
mikel.astiz.oss at gmail.com
Wed Aug 22 01:08:26 PDT 2012
From: Mikel Astiz <mikel.astiz at bmw-carit.de>
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
More information about the pulseaudio-discuss
mailing list