From: DoHyun Pyun Date: Mon, 17 Feb 2020 06:30:56 +0000 (+0900) Subject: Add interfaces for BT AVC feature with pulseaudio X-Git-Tag: submit/tizen/20200220.012925~5 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fconnectivity%2Fbluetooth-frwk.git;a=commitdiff_plain;h=9a6e83fd9099f56bd7c99969136bbdf82714e0f2 Add interfaces for BT AVC feature with pulseaudio Change-Id: I6e7ab1fb128fbd1d95ba0a772e8c7cf75861b15c Signed-off-by: DoHyun Pyun --- diff --git a/bt-service-adaptation/bluetooth-frwk-service.conf.in b/bt-service-adaptation/bluetooth-frwk-service.conf.in index 2cb157d..7c58685 100644 --- a/bt-service-adaptation/bluetooth-frwk-service.conf.in +++ b/bt-service-adaptation/bluetooth-frwk-service.conf.in @@ -17,6 +17,9 @@ + + + diff --git a/bt-service-adaptation/services/audio/bt-service-absolute-volume.c b/bt-service-adaptation/services/audio/bt-service-absolute-volume.c index 753162b..29447fb 100644 --- a/bt-service-adaptation/services/audio/bt-service-absolute-volume.c +++ b/bt-service-adaptation/services/audio/bt-service-absolute-volume.c @@ -27,10 +27,11 @@ #include "bt-service-common.h" #include "bt-service-audio-common.h" +#include "bt-service-event.h" static unsigned int absolute_volume = 0; static unsigned int bt_volume = 0; -static int avc_mode = BT_AVC_OFF; +static unsigned int avc_mode = BT_AVC_OFF; int _bt_audio_set_absolute_volume(unsigned int volume) { @@ -75,6 +76,30 @@ int _bt_audio_is_avc_activated(bool *activated) return BLUETOOTH_ERROR_NONE; } +int _bt_audio_get_avc_mode(unsigned int *mode) +{ + /* 1. AVC mode in the vconf value */ + + /* 2. Get active A2DP headset path */ + + /* 3. Get volume info for activae transport for the path */ + + *mode = avc_mode; + + return BLUETOOTH_ERROR_NONE; +} + +int _bt_audio_notify_avc_mode_changed(unsigned int avc_mode) +{ + GVariant *param = g_variant_new("(u)", avc_mode); + + _bt_send_event(BT_AUDIO_AVC_EVENT, + BLUETOOTH_EVENT_AUDIO_AVC_MODE_CHANGED, + param); + + return BLUETOOTH_ERROR_NONE; +} + /* 1. When a2dp headset is connected, we should set 'AVC' mode into pulseaudio */ /* 2. If the avc mode is changed, we should inform 'AVC' mode to pulseaudio */ /* 3. If BT is off, we should send 'AVC' off mode event for application */ diff --git a/bt-service-adaptation/services/bt-request-handler.c b/bt-service-adaptation/services/bt-request-handler.c index ef3bfd8..c222d57 100644 --- a/bt-service-adaptation/services/bt-request-handler.c +++ b/bt-service-adaptation/services/bt-request-handler.c @@ -92,6 +92,12 @@ static const gchar bt_service_introspection_xml[] = " " " " " " +#ifdef TIZEN_FEATURE_BT_AVC_TARGET +" " + /* Out Parameters */ +" " +" " +#endif " " ""; @@ -412,6 +418,19 @@ fail: g_variant_unref(param4); g_variant_unref(param5); } +#ifdef TIZEN_FEATURE_BT_AVC_TARGET + else if (g_strcmp0(method_name, "get_avc_mode") == 0) { + unsigned int mode = 0; + + if (_bt_audio_get_avc_mode(&mode) != BLUETOOTH_ERROR_NONE) + BT_ERR("Fail to get the avc mode"); + + BT_DBG("Absolute Volume Control mode: %d", mode); + + g_dbus_method_invocation_return_value(invocation, + g_variant_new("(u)", mode)); + } +#endif FN_END; return; diff --git a/bt-service-adaptation/services/bt-service-event-sender.c b/bt-service-adaptation/services/bt-service-event-sender.c index 9919c50..758949f 100644 --- a/bt-service-adaptation/services/bt-service-event-sender.c +++ b/bt-service-adaptation/services/bt-service-event-sender.c @@ -129,6 +129,11 @@ int _bt_send_event(int event_type, int event, GVariant *param) break; #endif +#ifdef TIZEN_FEATURE_BT_AVC_TARGET + case BT_AUDIO_AVC_EVENT: + path = BT_AUDIO_AVC_PATH; + break; +#endif default: BT_ERR("Unknown event"); return BLUETOOTH_ERROR_INTERNAL; @@ -542,6 +547,11 @@ int _bt_send_event(int event_type, int event, GVariant *param) case BLUETOOTH_EVENT_OTC_STATE_CHANGED: signal = BT_OTC_STATE_CHANGED; break; +#ifdef TIZEN_FEATURE_BT_AVC_TARGET + case BLUETOOTH_EVENT_AUDIO_AVC_MODE_CHANGED: + signal = BT_AUDIO_AVC_MODE_CHANGED; + break; +#endif default: BT_ERR("Unknown event"); return BLUETOOTH_ERROR_INTERNAL; diff --git a/bt-service-adaptation/services/include/bt-service-audio-common.h b/bt-service-adaptation/services/include/bt-service-audio-common.h index bb39cca..085a451 100644 --- a/bt-service-adaptation/services/include/bt-service-audio-common.h +++ b/bt-service-adaptation/services/include/bt-service-audio-common.h @@ -142,6 +142,10 @@ int _bt_audio_set_absolute_volume(unsigned int volume); int _bt_audio_get_absolute_volume(unsigned int *volume); int _bt_audio_is_avc_activated(bool *activated); + +int _bt_audio_get_avc_mode(unsigned int *avc_mode); + +int _bt_audio_notify_avc_mode_changed(unsigned int avc_mode); #endif int _bt_hf_connect(bluetooth_device_address_t *device_address); diff --git a/include/bluetooth-api.h b/include/bluetooth-api.h index 8e2ba9a..3146e6d 100644 --- a/include/bluetooth-api.h +++ b/include/bluetooth-api.h @@ -893,6 +893,7 @@ typedef enum { BLUETOOTH_EVENT_HF_CALLSETUP_DIALING, BLUETOOTH_EVENT_HF_CALLSETUP_ALERTING, BLUETOOTH_EVENT_HF_CIEV_DEVICE_STATUS_CHANGED, + BLUETOOTH_EVENT_AUDIO_AVC_MODE_CHANGED, BLUETOOTH_HID_CONNECTED = BLUETOOTH_EVENT_HID_BASE, /**< Input connectd event*/ BLUETOOTH_HID_DISCONNECTED, /**< Input disconnectd event*/ diff --git a/include/bt-internal-types.h b/include/bt-internal-types.h index a232c90..24f2bdf 100644 --- a/include/bt-internal-types.h +++ b/include/bt-internal-types.h @@ -90,6 +90,9 @@ typedef enum { BT_TDS_EVENT, BT_OTP_EVENT, BT_HDP_EVENT, +#ifdef TIZEN_FEATURE_BT_AVC_TARGET + BT_AUDIO_AVC_EVENT, +#endif /* Will be added */ } bt_event_type_t; @@ -527,6 +530,10 @@ typedef struct { #define BT_GATT_CLIENT_PATH "/org/projectx/bt/gatt_client" #endif +#ifdef TIZEN_FEATURE_BT_AVC_TARGET +#define BT_AUDIO_AVC_PATH "/org/projectx/bt/avc_mode" +#endif + #define BT_ENABLED "Enabled" #define BT_DISABLED "Disabled" #define BT_DISABLED_BATTERY_DATA "AdapterDisabledBatteryData" @@ -689,6 +696,10 @@ typedef struct { #define BT_OTP_INDICATION "OtpIndication" #define BT_OTC_STATE_CHANGED "OtcStateChanged" +#ifdef TIZEN_FEATURE_BT_AVC_TARGET +#define BT_AUDIO_AVC_MODE_CHANGED "AvcModeChanged" +#endif + #define HEADED_PLUGIN_FILEPATH "/usr/lib/bt-plugin-headed.so" #define HEADED_PLUGIN_FILEPATH64 "/usr/lib64/bt-plugin-headed.so" #define FILEPATH_ARCH_64 "/usr/lib64"