[pulseaudio-discuss] [RFC next v0 09/11] bluetooth: Add microphone gain callback to backend
Mikel Astiz
mikel.astiz.oss at gmail.com
Wed May 15 01:46:54 PDT 2013
From: Mikel Astiz <mikel.astiz at bmw-carit.de>
---
src/modules/bluetooth/bluetooth-util.c | 20 +++++++++++++++++---
src/modules/bluetooth/bluetooth-util.h | 2 ++
2 files changed, 19 insertions(+), 3 deletions(-)
diff --git a/src/modules/bluetooth/bluetooth-util.c b/src/modules/bluetooth/bluetooth-util.c
index d89c7a7..19072d0 100644
--- a/src/modules/bluetooth/bluetooth-util.c
+++ b/src/modules/bluetooth/bluetooth-util.c
@@ -1629,13 +1629,15 @@ static void set_property(pa_bluetooth_discovery *y, const char *bus, const char
}
void pa_bluetooth_transport_set_microphone_gain(pa_bluetooth_transport *t, uint16_t value) {
- dbus_uint16_t gain = PA_MIN(value, HSP_MAX_GAIN);
+ pa_bluetooth_discovery *y;
+ pa_bluetooth_backend *backend;
pa_assert(t);
pa_assert(t->profile == PROFILE_HSP);
+ pa_assert_se(y = t->device->discovery);
+ pa_assert_se(backend = y->profiles[t->profile].backend);
- set_property(t->device->discovery, "org.bluez", t->device->path, "org.bluez.Headset",
- "MicrophoneGain", DBUS_TYPE_UINT16, &gain);
+ backend->set_microphone_gain(y->profiles[t->profile].backend_private, t, PA_MIN(value, HSP_MAX_GAIN));
}
void pa_bluetooth_transport_set_speaker_gain(pa_bluetooth_transport *t, uint16_t value) {
@@ -2057,10 +2059,22 @@ static DBusHandlerResult endpoint_handler(DBusConnection *c, DBusMessage *m, voi
return DBUS_HANDLER_RESULT_HANDLED;
}
+static void bluez_backend_set_microphone_gain(void *bp, pa_bluetooth_transport *t, uint16_t value)
+{
+ dbus_uint16_t gain = value;
+
+ pa_assert(t);
+ pa_assert(t->profile == PROFILE_HSP);
+
+ set_property(t->device->discovery, "org.bluez", t->device->path, "org.bluez.Headset",
+ "MicrophoneGain", DBUS_TYPE_UINT16, &gain);
+}
+
pa_bluetooth_backend bluez_backend = {
.transport_removed = bluez_backend_transport_removed,
.transport_acquire = bluez_backend_transport_acquire,
.transport_release = bluez_backend_transport_release,
+ .set_microphone_gain = bluez_backend_set_microphone_gain,
};
static void bluez_backend_init(pa_bluetooth_discovery *y) {
diff --git a/src/modules/bluetooth/bluetooth-util.h b/src/modules/bluetooth/bluetooth-util.h
index 3495a1b..28ab209 100644
--- a/src/modules/bluetooth/bluetooth-util.h
+++ b/src/modules/bluetooth/bluetooth-util.h
@@ -185,11 +185,13 @@ typedef void (*pa_bt_backend_transport_removed_cb)(void *bp, pa_bluetooth_transp
typedef int (*pa_bt_backend_transport_acquire_cb)(void *bp, pa_bluetooth_transport *t, bool optional, size_t *imtu,
size_t *omtu);
typedef void (*pa_bt_backend_transport_release_cb)(void *bp, pa_bluetooth_transport *t);
+typedef void (*pa_bt_backend_set_microphone_gain_cb)(void *bp, pa_bluetooth_transport *t, uint16_t value);
struct pa_bluetooth_backend {
pa_bt_backend_transport_removed_cb transport_removed;
pa_bt_backend_transport_acquire_cb transport_acquire;
pa_bt_backend_transport_release_cb transport_release;
+ pa_bt_backend_set_microphone_gain_cb set_microphone_gain;
};
int pa_bt_backend_register(pa_bluetooth_discovery *y, pa_bluetooth_backend *b, enum profile p, void *bp);
--
1.8.1.4
More information about the pulseaudio-discuss
mailing list