OSDN Git Service

Bluetooth-Wipower: Enable WiPower feature.
authorKiran Kelageri <kirankelageri@codeaurora.org>
Mon, 17 Oct 2016 02:38:08 +0000 (19:38 -0700)
committerVic Wei <vwei@codeaurora.org>
Mon, 17 Oct 2016 06:15:34 +0000 (23:15 -0700)
Enabling WiPower feature on lastest PL, this
feature enables wireless charging capablity
on the target.

Change-Id: Iecf18eb6c133a2808982f0c0905cf4507c95685f
CRs-Fixed: 1024975

Android.mk
btif/src/bluetooth.c
main/Android.mk
stack/btm/btm_ble_multi_adv.c

index 11aaa74..00e8261 100644 (file)
@@ -23,6 +23,10 @@ endif
 
 bluetooth_CFLAGS += -DUSE_AUDIO_TRACK
 
+ifeq ($(BOARD_USES_WIPOWER),true)
+bluetooth_CFLAGS += -DWIPOWER_SUPPORTED
+endif
+
 bluetooth_CFLAGS += -DEXPORT_SYMBOL="__attribute__((visibility(\"default\")))"
 
 #
index ae9850d..ad7000e 100644 (file)
@@ -44,6 +44,9 @@
 #include <hardware/bt_sdp.h>
 #include <hardware/bt_sock.h>
 #include <hardware/vendor.h>
+#ifdef WIPOWER_SUPPORTED
+#include <hardware/wipower.h>
+#endif
 
 #include "bt_utils.h"
 #include "btif_api.h"
@@ -113,6 +116,9 @@ extern btgatt_interface_t *btif_gatt_get_interface();
 /* avrc target */
 extern btrc_interface_t *btif_rc_get_interface();
 /* avrc controller */
+#ifdef WIPOWER_SUPPORTED
+extern wipower_interface_t *get_wipower_interface();
+#endif
 extern btrc_interface_t *btif_rc_ctrl_get_interface();
 /*SDP search client*/
 extern btsdp_interface_t *btif_sdp_get_interface();
@@ -434,6 +440,11 @@ static const void* get_profile_interface (const char *profile_id)
     if (is_profile(profile_id, BT_PROFILE_AV_RC_ID))
         return btif_rc_get_interface();
 
+#ifdef WIPOWER_SUPPORTED
+    if (is_profile(profile_id, BT_PROFILE_WIPOWER_VENDOR_ID))
+        return get_wipower_interface();
+#endif
+
     if (is_profile(profile_id, BT_PROFILE_AV_RC_CTRL_ID))
         return btif_rc_ctrl_get_interface();
 
index 2286997..4ee80de 100644 (file)
@@ -26,6 +26,11 @@ LOCAL_SRC_FILES+= \
 LOCAL_SRC_FILES+= \
        ../udrv/ulinux/uipc.c
 
+ifeq ($(BOARD_USES_WIPOWER),true)
+LOCAL_SRC_FILES += \
+       ../../../vendor/qcom/opensource/bluetooth/wipower-host/core/src/wipower.c
+endif
+
 LOCAL_C_INCLUDES+= . \
        $(LOCAL_PATH)/../ \
        $(LOCAL_PATH)/../bta/include \
@@ -56,6 +61,12 @@ LOCAL_C_INCLUDES+= . \
     external/zlib \
     $(call include-path-for, audio-utils)
 
+ifeq ($(BOARD_USES_WIPOWER),true)
+LOCAL_C_INCLUDES+= \
+       vendor/qcom/opensource/bluetooth/hal/include \
+       vendor/qcom/opensource/bluetooth/wipower-host/core/include
+endif
+
 LOCAL_SHARED_LIBRARIES := \
     libcutils \
     libdl \
index e7d5efc..53b192d 100644 (file)
 #define BTM_BLE_MULTI_ADV_CB_EVT_MASK   0xF0
 #define BTM_BLE_MULTI_ADV_SUBCODE_MASK  0x0F
 
+#ifdef WIPOWER_SUPPORTED
+#define WIPOWER_16_UUID_LSB 0xFE
+#define WIPOWER_16_UUID_MSB 0xFF
+static bool is_wipower_adv = false;
+#endif
+
 /************************************************************************************
 **  Static variables
 ************************************************************************************/
@@ -50,6 +56,10 @@ tBTM_BLE_MULTI_ADV_CB  btm_multi_adv_cb;
 tBTM_BLE_MULTI_ADV_INST_IDX_Q btm_multi_adv_idx_q;
 pthread_mutex_t btm_multi_adv_lock = PTHREAD_MUTEX_INITIALIZER;
 
+#ifdef WIPOWER_SUPPORTED
+UINT8 wipower_inst_id = BTM_BLE_MULTI_ADV_DEFAULT_STD;
+#endif
+
 /************************************************************************************
 **  Externs
 ************************************************************************************/
@@ -714,6 +724,13 @@ tBTM_STATUS BTM_BleCfgAdvInstData (UINT8 inst_id, BOOLEAN is_scan_rsp,
     btm_ble_build_adv_data(&data_mask, &pp, p_data);
     *p_len = (UINT8)(pp - param - 2);
     UINT8_TO_STREAM(pp_temp, inst_id);
+#ifdef WIPOWER_SUPPORTED
+    if (param[7] == WIPOWER_16_UUID_LSB && param[8] == WIPOWER_16_UUID_MSB)
+    {
+        is_wipower_adv = true;
+        wipower_inst_id = inst_id;
+    }
+#endif
 
     if ((rt = BTM_VendorSpecificCommand (HCI_BLE_MULTI_ADV_OCF,
                                     (UINT8)BTM_BLE_MULTI_ADV_WRITE_DATA_LEN,
@@ -807,7 +824,13 @@ void btm_ble_multi_adv_vse_cback(UINT8 len, UINT8 *p)
             adv_inst !=  BTM_BLE_MULTI_ADV_DEFAULT_STD)
         {
             BTM_TRACE_EVENT("btm_ble_multi_adv_reenable called");
-            btm_ble_multi_adv_reenable(adv_inst);
+#ifdef WIPOWER_SUPPORTED
+            if (!(is_wipower_adv && (adv_inst == wipower_inst_id))) {
+                btm_ble_multi_adv_reenable(adv_inst);
+            }
+#else
+                btm_ble_multi_adv_reenable(adv_inst);
+#endif
         }
         /* re-enable connectibility */
         else if (adv_inst == BTM_BLE_MULTI_ADV_DEFAULT_STD)
@@ -874,6 +897,11 @@ void btm_ble_multi_adv_init()
 *******************************************************************************/
 void btm_ble_multi_adv_cleanup(void)
 {
+#ifdef WIPOWER_SUPPORTED
+    is_wipower_adv = false;
+    wipower_inst_id = BTM_BLE_MULTI_ADV_DEFAULT_STD;
+#endif
+
     pthread_mutex_lock(&btm_multi_adv_lock);
     if (btm_multi_adv_cb.p_adv_inst) {
         for (size_t i = 0; i < btm_cb.cmn_ble_vsc_cb.adv_inst_max; i++) {