Add interfaces for BT AVC feature with pulseaudio 69/225069/3
authorDoHyun Pyun <dh79.pyun@samsung.com>
Mon, 17 Feb 2020 06:30:56 +0000 (15:30 +0900)
committerDoHyun Pyun <dh79.pyun@samsung.com>
Tue, 18 Feb 2020 00:42:37 +0000 (09:42 +0900)
Change-Id: I6e7ab1fb128fbd1d95ba0a772e8c7cf75861b15c
Signed-off-by: DoHyun Pyun <dh79.pyun@samsung.com>
bt-service-adaptation/bluetooth-frwk-service.conf.in
bt-service-adaptation/services/audio/bt-service-absolute-volume.c
bt-service-adaptation/services/bt-request-handler.c
bt-service-adaptation/services/bt-service-event-sender.c
bt-service-adaptation/services/include/bt-service-audio-common.h
include/bluetooth-api.h
include/bt-internal-types.h

index 2cb157d..7c58685 100644 (file)
@@ -17,6 +17,9 @@
         <allow send_destination_prefix="org.tizen.csd.Call.Instance" send_interface="org.tizen.csd.Call.Instance" send_member="SendDtmf"/>
         <allow send_destination_prefix="org.tizen.csd.Call.Instance" send_interface="org.tizen.csd.Call.Instance" send_member="VendorCmd"/>
     </policy>
+    <policy group="pulse">
+        <allow send_destination="org.projectx.bt"/>
+    </policy>
     <policy context="default">
         <deny own="org.projectx.bt"/>
         <deny send_destination="org.projectx.bt"/>
index 753162b..29447fb 100644 (file)
 
 #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 */
index ef3bfd8..c222d57 100644 (file)
@@ -92,6 +92,12 @@ static const gchar bt_service_introspection_xml[] =
 "                      <arg type='i' name='output_param1' direction='out' />"
 "                      <arg type='v' name='output_param2' direction='out' />"
 "              </method>"
+#ifdef TIZEN_FEATURE_BT_AVC_TARGET
+"              <method name='get_avc_mode'>"
+                       /* Out Parameters */
+"                      <arg type='u' name='avc_mode' direction='out' />"
+"              </method>"
+#endif
 "      </interface>"
 "</node>";
 
@@ -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;
index 9919c50..758949f 100644 (file)
@@ -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;
index bb39cca..085a451 100644 (file)
@@ -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);
index 8e2ba9a..3146e6d 100644 (file)
@@ -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*/
index a232c90..24f2bdf 100644 (file)
@@ -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"