summaryrefslogtreecommitdiffstats
path: root/audio/manager.c
diff options
context:
space:
mode:
Diffstat (limited to 'audio/manager.c')
-rw-r--r--audio/manager.c46
1 files changed, 31 insertions, 15 deletions
diff --git a/audio/manager.c b/audio/manager.c
index c5f7df30..b59e9dbf 100644
--- a/audio/manager.c
+++ b/audio/manager.c
@@ -1485,7 +1485,7 @@ failed:
return TRUE;
}
-static GIOChannel *server_socket(uint8_t *channel)
+static GIOChannel *server_socket(uint8_t *channel, gboolean master)
{
int sock, lm;
struct sockaddr_rc addr;
@@ -1499,6 +1499,10 @@ static GIOChannel *server_socket(uint8_t *channel)
}
lm = RFCOMM_LM_SECURE;
+
+ if (master)
+ lm |= RFCOMM_LM_MASTER;
+
if (setsockopt(sock, SOL_RFCOMM, RFCOMM_LM, &lm, sizeof(lm)) < 0) {
error("server setsockopt: %s (%d)", strerror(errno), errno);
close(sock);
@@ -1540,14 +1544,36 @@ static int headset_server_init(DBusConnection *conn, GKeyFile *config)
{
uint8_t chan = DEFAULT_HS_AG_CHANNEL;
sdp_buf_t buf;
- gboolean hfp = TRUE;
+ gboolean hfp = TRUE, master = TRUE;
GError *err = NULL;
uint32_t features;
if (!(enabled.headset || enabled.gateway))
return 0;
- hs_server = server_socket(&chan);
+ if (config) {
+ gboolean tmp;
+
+ tmp = g_key_file_get_boolean(config, "General", "ForceMaster",
+ &err);
+ if (err) {
+ debug("audio.conf: %s", err->message);
+ g_error_free(err);
+ err = NULL;
+ } else
+ master = tmp;
+
+ tmp = g_key_file_get_boolean(config, "Headset", "DisableHFP",
+ &err);
+ if (err) {
+ debug("audio.conf: %s", err->message);
+ g_error_free(err);
+ err = NULL;
+ } else
+ hfp = tmp;
+ }
+
+ hs_server = server_socket(&chan, master);
if (!hs_server)
return -1;
@@ -1568,22 +1594,12 @@ static int headset_server_init(DBusConnection *conn, GKeyFile *config)
g_io_add_watch(hs_server, G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL,
(GIOFunc) ag_io_cb, NULL);
- if (config) {
- hfp = g_key_file_get_boolean(config, "Headset", "EnableHFP",
- &err);
- if (err) {
- debug("audio.conf: %s", err->message);
- g_error_free(err);
- err = NULL;
- }
- }
-
if (!hfp)
return 0;
chan = DEFAULT_HF_AG_CHANNEL;
- hf_server = server_socket(&chan);
+ hf_server = server_socket(&chan, master);
if (!hf_server)
return -1;
@@ -1697,7 +1713,7 @@ int audio_init(DBusConnection *conn, GKeyFile *config)
goto failed;
}
- if (enabled.control && avrcp_init(conn) < 0)
+ if (enabled.control && avrcp_init(conn, config) < 0)
goto failed;
if (!dbus_connection_register_interface(conn, AUDIO_MANAGER_PATH,