Return-Path: MIME-Version: 1.0 In-Reply-To: <20101122143345.GA2303@jh-x301> References: <1290423382-5493-1-git-send-email-bulislaw@linux.com> <20101122143345.GA2303@jh-x301> Date: Mon, 22 Nov 2010 22:12:52 +0200 Message-ID: Subject: Re: [PATCH] Fix managing dbus filters depending on BT state From: Luiz Augusto von Dentz To: Bartosz Szatkowski , linux-bluetooth@vger.kernel.org Content-Type: text/plain; charset=ISO-8859-1 Sender: linux-bluetooth-owner@vger.kernel.org List-ID: Hi, On Mon, Nov 22, 2010 at 4:33 PM, Johan Hedberg wrote: > Hi Bartosz, > > On Mon, Nov 22, 2010, Bartosz Szatkowski wrote: >> Previously even if BT was disabled, bluetoothd would handle some dbus >> singals (mostly connected with HFP). Now filters are added when >> BT is enabled and removed when BT is disabled. >> --- >> ?audio/manager.c ? ? ? ? ?| ? ?4 ++-- >> ?audio/telephony-dummy.c ?| ? 10 ++++++++++ >> ?audio/telephony-maemo5.c | ? 10 ++++++++++ >> ?audio/telephony-maemo6.c | ? 10 ++++++++++ >> ?audio/telephony-ofono.c ?| ? 10 ++++++++++ >> ?audio/telephony.h ? ? ? ?| ? ?1 + >> ?src/adapter.c ? ? ? ? ? ?| ? ?5 +++++ >> ?7 files changed, 48 insertions(+), 2 deletions(-) > > Nack on this one. I understand the issue you're trying to fix but it > needs to be done differently. > >> diff --git a/audio/manager.c b/audio/manager.c >> index 816c807..2fc7bf1 100644 >> --- a/audio/manager.c >> +++ b/audio/manager.c >> @@ -1178,7 +1178,7 @@ proceed: >> ? ? ? ? ? ? ? btd_register_adapter_driver(&media_server_driver); >> >> ? ? ? if (enabled.headset) { >> - ? ? ? ? ? ? telephony_init(); >> + ? ? ? ? ? ? telephony_set_state(1); >> ? ? ? ? ? ? ? btd_register_adapter_driver(&headset_server_driver); >> ? ? ? } > > If you're gonna call this "state" you should have proper defines or > enums for the values, however in this case it's essentially a boolean so > that's not necessary. In fact since it's a boolean you don't even need > to have any new function or variable at all for it: just use > telephony_init and telephony_exit. > >> --- a/src/adapter.c >> +++ b/src/adapter.c >> @@ -57,6 +57,7 @@ >> ?#include "glib-helper.h" >> ?#include "agent.h" >> ?#include "storage.h" >> +#include "../audio/telephony.h" >> >> ?#define IO_CAPABILITY_DISPLAYONLY ? ?0x00 >> ?#define IO_CAPABILITY_DISPLAYYESNO ? 0x01 >> @@ -2404,6 +2405,8 @@ int adapter_start(struct btd_adapter *adapter) >> >> ? ? ? err = adapter_up(adapter, mode); >> >> + ? ? telephony_init(); >> + > > This is just wrong. The core daemon should never have direct access to > the telephony driver. Instead, you should have the audio plugin > (probably audio/manager.c or audio/headset.c) register a adapter powered > callback and then call telehony_init/exit from that callback. I have an almost working version of this using adapter drivers and powered changes via callback registration, the tricky part here is how to detect when to do headset_init/headset_exit since those should be called only once. I didn't know there somebody working on this but anyway I gonna try to finish this asap. -- Luiz Augusto von Dentz Computer Engineer