OSDN Git Service

Improve adv_data transfer between contexts.
authorIan Coolidge <icoolidge@google.com>
Sat, 8 Aug 2015 03:36:13 +0000 (20:36 -0700)
committerIan Coolidge <icoolidge@google.com>
Mon, 10 Aug 2015 23:51:45 +0000 (16:51 -0700)
- Drops some unused members from btgatt_multi_adv_inst_cb.
- Flatten tBTA_BLE_ADV_DATA to only require one allocation.
- Copy all of tBTA_BLE_ADV_DATA contents to bt_workqueue_thread.

Bug: 23042223
Change-Id: I5f4d25d5cdd39731a2dfe64394928b7fb77c7c7c

bta/dm/bta_dm_act.c
bta/dm/bta_dm_api.c
bta/dm/bta_dm_int.h
bta/include/bta_api.h
btif/include/btif_gatt_multi_adv_util.h
btif/src/btif_gatt_client.c
btif/src/btif_gatt_multi_adv_util.c
stack/btm/btm_ble_gap.c
stack/include/btm_ble_api.h

index f687f42..d88ae47 100644 (file)
@@ -4804,7 +4804,7 @@ void bta_dm_ble_set_adv_config (tBTA_DM_MSG *p_data)
     tBTA_STATUS status = BTA_FAILURE;
 
     if (BTM_BleWriteAdvData(p_data->ble_set_adv_data.data_mask,
-                        (tBTM_BLE_ADV_DATA *)p_data->ble_set_adv_data.p_adv_cfg) == BTM_SUCCESS)
+                        (tBTM_BLE_ADV_DATA *)&p_data->ble_set_adv_data.adv_cfg) == BTM_SUCCESS)
     {
         status = BTA_SUCCESS;
     }
@@ -4827,7 +4827,7 @@ void bta_dm_ble_set_scan_rsp (tBTA_DM_MSG *p_data)
     tBTA_STATUS status = BTA_FAILURE;
 
     if(BTM_BleWriteScanRsp(p_data->ble_set_adv_data.data_mask,
-                        (tBTM_BLE_ADV_DATA *)p_data->ble_set_adv_data.p_adv_cfg) == BTM_SUCCESS)
+                        (tBTM_BLE_ADV_DATA *)&p_data->ble_set_adv_data.adv_cfg) == BTM_SUCCESS)
     {
         status = BTA_SUCCESS;
     }
@@ -4945,7 +4945,7 @@ void bta_dm_ble_multi_adv_data(tBTA_DM_MSG *p_data)
         btm_status = BTM_BleCfgAdvInstData(p_data->ble_multi_adv_data.inst_id,
                         p_data->ble_multi_adv_data.is_scan_rsp,
                         p_data->ble_multi_adv_data.data_mask,
-                        (tBTM_BLE_ADV_DATA*)p_data->ble_multi_adv_data.p_data);
+                        (tBTM_BLE_ADV_DATA*)&p_data->ble_multi_adv_data.data);
     }
 
     if(BTM_CMD_STARTED != btm_status)
index 23f93b9..19e9627 100644 (file)
@@ -1016,18 +1016,15 @@ void BTA_DmSetBleAdvParams (UINT16 adv_int_min, UINT16 adv_int_max,
 void BTA_DmBleSetAdvConfig (tBTA_BLE_AD_MASK data_mask, tBTA_BLE_ADV_DATA *p_adv_cfg,
                             tBTA_SET_ADV_DATA_CMPL_CBACK *p_adv_data_cback)
 {
-    tBTA_DM_API_SET_ADV_CONFIG  *p_msg;
-
-    if ((p_msg = (tBTA_DM_API_SET_ADV_CONFIG *)
-        GKI_getbuf(sizeof(tBTA_DM_API_SET_ADV_CONFIG))) != NULL)
-    {
-        p_msg->hdr.event = BTA_DM_API_BLE_SET_ADV_CONFIG_EVT;
-        p_msg->data_mask = data_mask;
-        p_msg->p_adv_data_cback = p_adv_data_cback;
-        p_msg->p_adv_cfg = p_adv_cfg;
-
-        bta_sys_sendmsg(p_msg);
-    }
+  tBTA_DM_API_SET_ADV_CONFIG *p_msg = GKI_getbuf(sizeof(*p_msg));
+  if (!p_msg) return;
+
+  memset(p_msg, 0, sizeof(*p_msg));
+  p_msg->hdr.event = BTA_DM_API_BLE_SET_ADV_CONFIG_EVT;
+  p_msg->data_mask = data_mask;
+  p_msg->p_adv_data_cback = p_adv_data_cback;
+  memcpy(&p_msg->adv_cfg, p_adv_cfg, sizeof(p_msg->adv_cfg));
+  bta_sys_sendmsg(p_msg);
 }
 
 /*******************************************************************************
@@ -1044,18 +1041,15 @@ void BTA_DmBleSetAdvConfig (tBTA_BLE_AD_MASK data_mask, tBTA_BLE_ADV_DATA *p_adv
 extern void BTA_DmBleSetScanRsp (tBTA_BLE_AD_MASK data_mask, tBTA_BLE_ADV_DATA *p_adv_cfg,
                                  tBTA_SET_ADV_DATA_CMPL_CBACK *p_adv_data_cback)
 {
-    tBTA_DM_API_SET_ADV_CONFIG  *p_msg;
-
-    if ((p_msg = (tBTA_DM_API_SET_ADV_CONFIG *)
-        GKI_getbuf(sizeof(tBTA_DM_API_SET_ADV_CONFIG))) != NULL)
-    {
-        p_msg->hdr.event = BTA_DM_API_BLE_SET_SCAN_RSP_EVT;
-        p_msg->data_mask = data_mask;
-        p_msg->p_adv_data_cback = p_adv_data_cback;
-        p_msg->p_adv_cfg = p_adv_cfg;
-
-        bta_sys_sendmsg(p_msg);
-    }
+  tBTA_DM_API_SET_ADV_CONFIG *p_msg = GKI_getbuf(sizeof(*p_msg));
+  if (!p_msg) return;
+
+  memset(p_msg, 0, sizeof(*p_msg));
+  p_msg->hdr.event = BTA_DM_API_BLE_SET_SCAN_RSP_EVT;
+  p_msg->data_mask = data_mask;
+  p_msg->p_adv_data_cback = p_adv_data_cback;
+  memcpy(&p_msg->adv_cfg, p_adv_cfg, sizeof(p_msg->adv_cfg));
+  bta_sys_sendmsg(p_msg);
 }
 
 /*******************************************************************************
@@ -1577,22 +1571,16 @@ void BTA_BleCfgAdvInstData (UINT8 inst_id, BOOLEAN is_scan_rsp,
                             tBTA_BLE_AD_MASK data_mask,
                             tBTA_BLE_ADV_DATA *p_data)
 {
-    tBTA_DM_API_BLE_MULTI_ADV_DATA    *p_msg;
-    UINT16      len =  sizeof(tBTA_DM_API_BLE_MULTI_ADV_DATA) ;
-
-    APPL_TRACE_API ("BTA_BleCfgAdvInstData");
-
-    if ((p_msg = (tBTA_DM_API_BLE_MULTI_ADV_DATA *) GKI_getbuf(len)) != NULL)
-    {
-          memset(p_msg, 0, len);
-          p_msg->hdr.event     = BTA_DM_API_BLE_MULTI_ADV_DATA_EVT;
-          p_msg->inst_id      = inst_id;
-          p_msg->is_scan_rsp  = is_scan_rsp;
-          p_msg->data_mask     = data_mask;
-          p_msg->p_data        = p_data;
-
-          bta_sys_sendmsg(p_msg);
-    }
+  tBTA_DM_API_BLE_MULTI_ADV_DATA *p_msg = GKI_getbuf(sizeof(*p_msg));
+  if (!p_msg) return;
+
+  memset(p_msg, 0, sizeof(*p_msg));
+  p_msg->hdr.event = BTA_DM_API_BLE_MULTI_ADV_DATA_EVT;
+  p_msg->inst_id = inst_id;
+  p_msg->is_scan_rsp = is_scan_rsp;
+  p_msg->data_mask = data_mask;
+  memcpy(&p_msg->data, p_data, sizeof(p_msg->data));
+  bta_sys_sendmsg(p_msg);
 }
 
 /*******************************************************************************
index 9f3890e..e2c2dcd 100644 (file)
@@ -516,7 +516,7 @@ typedef struct
     UINT8                   inst_id;
     BOOLEAN                 is_scan_rsp;
     tBTA_BLE_AD_MASK        data_mask;
-    tBTA_BLE_ADV_DATA      *p_data;
+    tBTA_BLE_ADV_DATA       data;
 }tBTA_DM_API_BLE_MULTI_ADV_DATA;
 
 typedef struct
@@ -529,7 +529,7 @@ typedef struct
 {
     BT_HDR                  hdr;
     UINT32                  data_mask;
-    tBTA_BLE_ADV_DATA       *p_adv_cfg;
+    tBTA_BLE_ADV_DATA       adv_cfg;
     tBTA_SET_ADV_DATA_CMPL_CBACK    *p_adv_data_cback;
 }tBTA_DM_API_SET_ADV_CONFIG;
 
index 71906d4..21c0910 100644 (file)
@@ -338,67 +338,28 @@ typedef struct
 #define BTA_DM_BLE_AD_BIT_RANDOM_ADDR     BTM_BLE_AD_BIT_RANDOM_ADDR
 #define BTA_DM_BLE_AD_BIT_SERVICE_128     BTM_BLE_AD_BIT_SERVICE_128      /*128-bit Service UUIDs*/
 
-typedef  tBTM_BLE_AD_MASK  tBTA_BLE_AD_MASK;
-
-/* slave preferred connection interval range */
-typedef struct
-{
-    UINT16  low;
-    UINT16  hi;
-
-}tBTA_BLE_INT_RANGE;
-
-/* Service tag supported in the device */
-typedef struct
-{
-    UINT8       num_service;
-    BOOLEAN     list_cmpl;
-    UINT16      *p_uuid;
-}tBTA_BLE_SERVICE;
-
-
-typedef struct
-{
-    UINT8       len;
-    UINT8      *p_val;
-}tBTA_BLE_MANU;
-
-typedef struct
-{
-    UINT8       adv_type;
-    UINT8       len;
-    UINT8       *p_val;     /* number of len byte */
-}tBTA_BLE_PROP_ELEM;
-
-/* vendor proprietary adv type */
-typedef struct
-{
-    UINT8                   num_elem;
-    tBTA_BLE_PROP_ELEM      *p_elem;
-}tBTA_BLE_PROPRIETARY;
-
-typedef struct
-{
-    tBT_UUID    service_uuid;
-    UINT8       len;
-    UINT8      *p_val;
-}tBTA_BLE_SERVICE_DATA;
-
+typedef tBTM_BLE_AD_MASK tBTA_BLE_AD_MASK;
+typedef tBTM_BLE_INT_RANGE tBTA_BLE_INT_RANGE;
+typedef tBTM_BLE_SERVICE tBTA_BLE_SERVICE;
+typedef tBTM_BLE_PROP_ELEM tBTA_BLE_PROP_ELEM;
+typedef tBTM_BLE_PROPRIETARY tBTA_BLE_PROPRIETARY;
+typedef tBTM_BLE_MANU tBTA_BLE_MANU;
+typedef tBTM_BLE_SERVICE_DATA tBTA_BLE_SERVICE_DATA;
 typedef tBTM_BLE_128SERVICE tBTA_BLE_128SERVICE;
 typedef tBTM_BLE_32SERVICE  tBTA_BLE_32SERVICE;
 
 typedef struct
 {
     tBTA_BLE_INT_RANGE      int_range;          /* slave prefered conn interval range */
-    tBTA_BLE_MANU           *p_manu;            /* manufacturer data */
-    tBTA_BLE_SERVICE        *p_services;        /* 16 bits services */
-    tBTA_BLE_128SERVICE     *p_services_128b;   /* 128 bits service */
-    tBTA_BLE_32SERVICE      *p_service_32b;     /* 32 bits Service UUID */
-    tBTA_BLE_SERVICE        *p_sol_services;    /* 16 bits services Solicitation UUIDs */
-    tBTA_BLE_32SERVICE      *p_sol_service_32b; /* List of 32 bit Service Solicitation UUIDs */
-    tBTA_BLE_128SERVICE     *p_sol_service_128b;/* List of 128 bit Service Solicitation UUIDs */
-    tBTA_BLE_PROPRIETARY    *p_proprietary;     /* proprietary data */
-    tBTA_BLE_SERVICE_DATA   *p_service_data;    /* service data */
+    tBTA_BLE_MANU           manu;            /* manufacturer data */
+    tBTA_BLE_SERVICE        services;        /* 16 bits services */
+    tBTA_BLE_128SERVICE     services_128b;   /* 128 bits service */
+    tBTA_BLE_32SERVICE      service_32b;     /* 32 bits Service UUID */
+    tBTA_BLE_SERVICE        sol_services;    /* 16 bits services Solicitation UUIDs */
+    tBTA_BLE_32SERVICE      sol_service_32b; /* List of 32 bit Service Solicitation UUIDs */
+    tBTA_BLE_128SERVICE     sol_service_128b;/* List of 128 bit Service Solicitation UUIDs */
+    tBTA_BLE_PROPRIETARY    proprietary;     /* proprietary data */
+    tBTA_BLE_SERVICE_DATA   service_data;    /* service data */
     UINT16                  appearance;         /* appearance data */
     UINT8                   flag;
     UINT8                   tx_power;
index ee5ee86..de5d86b 100644 (file)
@@ -52,9 +52,7 @@ typedef struct
 
 typedef struct
 {
-    BOOLEAN is_scan_rsp;
     UINT8 client_if;
-    UINT16 service_uuid_len;
     tBTA_BLE_AD_MASK mask;
     tBTA_BLE_ADV_DATA data;
     tBTA_BLE_ADV_PARAMS param;
index e560595..8e7c44c 100644 (file)
@@ -1667,7 +1667,7 @@ static void btgattc_handle_event(uint16_t event, char* p_param)
                     btif_obtain_multi_adv_data_cb();
                 BTA_BleCfgAdvInstData(
                     (UINT8)inst_id,
-                    p_multi_adv_data_cb->inst_cb[cbindex].is_scan_rsp,
+                    p_adv_data->set_scan_rsp,
                     p_multi_adv_data_cb->inst_cb[cbindex].mask,
                     &p_multi_adv_data_cb->inst_cb[cbindex].data);
             }
index 1b6c8ee..3eb9304 100644 (file)
@@ -273,11 +273,12 @@ BOOLEAN btif_gattc_copy_datacb(int cbindex, const btif_adv_data_t *p_adv_data,
     if (NULL == p_multi_adv_data_cb || cbindex < 0)
        return false;
 
-    BTIF_TRACE_DEBUG("%s", __FUNCTION__);
-    memset(&p_multi_adv_data_cb->inst_cb[cbindex].data, 0, sizeof(tBTA_BLE_ADV_DATA));
+    BTIF_TRACE_DEBUG("%s", __func__);
+
+    memset(&p_multi_adv_data_cb->inst_cb[cbindex].data, 0,
+           sizeof(p_multi_adv_data_cb->inst_cb[cbindex].data));
     p_multi_adv_data_cb->inst_cb[cbindex].mask = 0;
 
-    p_multi_adv_data_cb->inst_cb[cbindex].is_scan_rsp = p_adv_data->set_scan_rsp ? 1 : 0;
     if (!p_adv_data->set_scan_rsp)
     {
          p_multi_adv_data_cb->inst_cb[cbindex].mask = BTM_BLE_AD_BIT_FLAGS;
@@ -333,63 +334,32 @@ BOOLEAN btif_gattc_copy_datacb(int cbindex, const btif_adv_data_t *p_adv_data,
         p_multi_adv_data_cb->inst_cb[cbindex].data.appearance = p_adv_data->appearance;
     }
 
-    if (p_adv_data->manufacturer_len > 0 && p_adv_data->p_manufacturer_data != NULL)
+    if (p_adv_data->manufacturer_len > 0 &&
+        p_adv_data->p_manufacturer_data != NULL &&
+        p_adv_data->manufacturer_len < MAX_SIZE_MANUFACTURER_DATA)
     {
-         p_multi_adv_data_cb->inst_cb[cbindex].data.p_manu =
-                            GKI_getbuf(sizeof(tBTA_BLE_MANU));
-         if (p_multi_adv_data_cb->inst_cb[cbindex].data.p_manu != NULL)
-         {
-            p_multi_adv_data_cb->inst_cb[cbindex].data.p_manu->p_val =
-                            GKI_getbuf(p_adv_data->manufacturer_len);
-            if (p_multi_adv_data_cb->inst_cb[cbindex].data.p_manu->p_val != NULL)
-            {
-                 p_multi_adv_data_cb->inst_cb[cbindex].mask |= BTM_BLE_AD_BIT_MANU;
-                 p_multi_adv_data_cb->inst_cb[cbindex].data.p_manu->len =
-                                p_adv_data->manufacturer_len;
-                 memcpy(p_multi_adv_data_cb->inst_cb[cbindex].data.p_manu->p_val,
-                    p_adv_data->p_manufacturer_data, p_adv_data->manufacturer_len);
-            }
-         }
+      p_multi_adv_data_cb->inst_cb[cbindex].mask |= BTM_BLE_AD_BIT_MANU;
+      p_multi_adv_data_cb->inst_cb[cbindex].data.manu.len =
+          p_adv_data->manufacturer_len;
+      memcpy(&p_multi_adv_data_cb->inst_cb[cbindex].data.manu.val,
+             p_adv_data->p_manufacturer_data, p_adv_data->manufacturer_len);
     }
 
-    tBTA_BLE_PROP_ELEM *p_elem_service_data = NULL;
-    if (p_adv_data->service_data_len > 0 && p_adv_data->p_service_data != NULL)
+    if (p_adv_data->service_data_len > 0 &&
+        p_adv_data->p_service_data != NULL &&
+        p_adv_data->service_data_len < MAX_SIZE_PROPRIETARY_ELEMENT)
     {
-         BTIF_TRACE_DEBUG("%s - In service_data", __FUNCTION__);
-         p_elem_service_data = GKI_getbuf(sizeof(tBTA_BLE_PROP_ELEM));
-         if (p_elem_service_data != NULL)
-         {
-             p_elem_service_data->p_val = GKI_getbuf(p_adv_data->service_data_len);
-             if (p_elem_service_data->p_val != NULL)
-             {
-                 p_elem_service_data->adv_type = BTM_BLE_AD_TYPE_SERVICE_DATA;
-                 p_elem_service_data->len = p_adv_data->service_data_len;
-                 memcpy(p_elem_service_data->p_val, p_adv_data->p_service_data,
-                             p_adv_data->service_data_len);
-             } else {
-                     GKI_freebuf(p_elem_service_data);
-                     p_elem_service_data = NULL;
-               }
-         }
-    }
+      BTIF_TRACE_DEBUG("%s - In service_data", __func__);
+      tBTA_BLE_PROPRIETARY *p_prop = &p_multi_adv_data_cb->inst_cb[cbindex].data.proprietary;
+      p_prop->num_elem = 1;
 
-    if (NULL != p_elem_service_data)
-    {
-        p_multi_adv_data_cb->inst_cb[cbindex].data.p_proprietary =
-                                                   GKI_getbuf(sizeof(tBTA_BLE_PROPRIETARY));
-        if (NULL != p_multi_adv_data_cb->inst_cb[cbindex].data.p_proprietary)
-        {
-            tBTA_BLE_PROP_ELEM *p_elem = NULL;
-            tBTA_BLE_PROPRIETARY *p_prop = p_multi_adv_data_cb->inst_cb[cbindex].data.p_proprietary;
-            p_prop->num_elem = 0;
-            p_multi_adv_data_cb->inst_cb[cbindex].mask |= BTM_BLE_AD_BIT_PROPRIETARY;
-            p_prop->num_elem = 1;
-            p_prop->p_elem = GKI_getbuf(sizeof(tBTA_BLE_PROP_ELEM) * p_prop->num_elem);
-            p_elem = p_prop->p_elem;
-            if (NULL != p_elem)
-                memcpy(p_elem++, p_elem_service_data, sizeof(tBTA_BLE_PROP_ELEM));
-            GKI_freebuf(p_elem_service_data);
-        }
+      tBTA_BLE_PROP_ELEM *p_elem = &p_prop->elem[0];
+      p_elem->adv_type = BTM_BLE_AD_TYPE_SERVICE_DATA;
+      p_elem->len = p_adv_data->service_data_len;
+      memcpy(p_elem->val, p_adv_data->p_service_data,
+             p_adv_data->service_data_len);
+
+      p_multi_adv_data_cb->inst_cb[cbindex].mask |= BTM_BLE_AD_BIT_PROPRIETARY;
     }
 
     if (p_adv_data->service_uuid_len && p_adv_data->p_service_uuid)
@@ -410,22 +380,17 @@ BOOLEAN btif_gattc_copy_datacb(int cbindex, const btif_adv_data_t *p_adv_data,
              {
                 case (LEN_UUID_16):
                 {
-                  if (NULL == p_multi_adv_data_cb->inst_cb[cbindex].data.p_services)
+                  if (p_multi_adv_data_cb->inst_cb[cbindex].data.services.num_service == 0)
                   {
-                      p_multi_adv_data_cb->inst_cb[cbindex].data.p_services =
-                                                          GKI_getbuf(sizeof(tBTA_BLE_SERVICE));
-                      p_multi_adv_data_cb->inst_cb[cbindex].data.p_services->list_cmpl = FALSE;
-                      p_multi_adv_data_cb->inst_cb[cbindex].data.p_services->num_service = 0;
-                      p_multi_adv_data_cb->inst_cb[cbindex].data.p_services->p_uuid =
-                              GKI_getbuf(p_adv_data->service_uuid_len / LEN_UUID_128 * LEN_UUID_16);
-                      p_uuid_out16 = p_multi_adv_data_cb->inst_cb[cbindex].data.p_services->p_uuid;
+                      p_multi_adv_data_cb->inst_cb[cbindex].data.services.list_cmpl = FALSE;
+                      p_uuid_out16 = p_multi_adv_data_cb->inst_cb[cbindex].data.services.uuid;
                   }
 
-                  if (NULL != p_multi_adv_data_cb->inst_cb[cbindex].data.p_services->p_uuid)
+                  if (p_multi_adv_data_cb->inst_cb[cbindex].data.services.num_service < MAX_16BIT_SERVICES)
                   {
-                     BTIF_TRACE_DEBUG("%s - In 16-UUID_data", __FUNCTION__);
+                     BTIF_TRACE_DEBUG("%s - In 16-UUID_data", __func__);
                      p_multi_adv_data_cb->inst_cb[cbindex].mask |= BTM_BLE_AD_BIT_SERVICE;
-                     ++p_multi_adv_data_cb->inst_cb[cbindex].data.p_services->num_service;
+                     ++p_multi_adv_data_cb->inst_cb[cbindex].data.services.num_service;
                      *p_uuid_out16++ = bt_uuid.uu.uuid16;
                   }
                   break;
@@ -433,22 +398,17 @@ BOOLEAN btif_gattc_copy_datacb(int cbindex, const btif_adv_data_t *p_adv_data,
 
                 case (LEN_UUID_32):
                 {
-                   if (NULL == p_multi_adv_data_cb->inst_cb[cbindex].data.p_service_32b)
+                   if (p_multi_adv_data_cb->inst_cb[cbindex].data.service_32b.num_service == 0)
                    {
-                      p_multi_adv_data_cb->inst_cb[cbindex].data.p_service_32b =
-                                                          GKI_getbuf(sizeof(tBTA_BLE_32SERVICE));
-                      p_multi_adv_data_cb->inst_cb[cbindex].data.p_service_32b->list_cmpl = FALSE;
-                      p_multi_adv_data_cb->inst_cb[cbindex].data.p_service_32b->num_service = 0;
-                      p_multi_adv_data_cb->inst_cb[cbindex].data.p_service_32b->p_uuid =
-                             GKI_getbuf(p_adv_data->service_uuid_len / LEN_UUID_128 * LEN_UUID_32);
-                      p_uuid_out32 = p_multi_adv_data_cb->inst_cb[cbindex].data.p_service_32b->p_uuid;
+                      p_multi_adv_data_cb->inst_cb[cbindex].data.service_32b.list_cmpl = FALSE;
+                      p_uuid_out32 = p_multi_adv_data_cb->inst_cb[cbindex].data.service_32b.uuid;
                    }
 
-                   if (NULL != p_multi_adv_data_cb->inst_cb[cbindex].data.p_service_32b->p_uuid)
+                   if (p_multi_adv_data_cb->inst_cb[cbindex].data.service_32b.num_service < MAX_32BIT_SERVICES)
                    {
-                      BTIF_TRACE_DEBUG("%s - In 32-UUID_data", __FUNCTION__);
+                      BTIF_TRACE_DEBUG("%s - In 32-UUID_data", __func__);
                       p_multi_adv_data_cb->inst_cb[cbindex].mask |= BTM_BLE_AD_BIT_SERVICE_32;
-                      ++p_multi_adv_data_cb->inst_cb[cbindex].data.p_service_32b->num_service;
+                      ++p_multi_adv_data_cb->inst_cb[cbindex].data.service_32b.num_service;
                       *p_uuid_out32++ = bt_uuid.uu.uuid32;
                    }
                    break;
@@ -457,24 +417,28 @@ BOOLEAN btif_gattc_copy_datacb(int cbindex, const btif_adv_data_t *p_adv_data,
                 case (LEN_UUID_128):
                 {
                    /* Currently, only one 128-bit UUID is supported */
-                   if (NULL == p_multi_adv_data_cb->inst_cb[cbindex].data.p_services_128b)
+                   if (p_multi_adv_data_cb->inst_cb[cbindex].data.services_128b.num_service == 0)
                    {
-                      p_multi_adv_data_cb->inst_cb[cbindex].data.p_services_128b =
-                                                          GKI_getbuf(sizeof(tBTA_BLE_128SERVICE));
-                      if (NULL != p_multi_adv_data_cb->inst_cb[cbindex].data.p_services_128b)
-                      {
-                         BTIF_TRACE_DEBUG("%s - In 128-UUID_data", __FUNCTION__);
-                         p_multi_adv_data_cb->inst_cb[cbindex].mask |= BTM_BLE_AD_BIT_SERVICE_128;
-                         memcpy(p_multi_adv_data_cb->inst_cb[cbindex].data.p_services_128b->uuid128,
-                                                         bt_uuid.uu.uuid128, LEN_UUID_128);
-                         BTIF_TRACE_DEBUG("%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x", bt_uuid.uu.uuid128[0],
-                            bt_uuid.uu.uuid128[1],bt_uuid.uu.uuid128[2], bt_uuid.uu.uuid128[3],
-                            bt_uuid.uu.uuid128[4],bt_uuid.uu.uuid128[5],bt_uuid.uu.uuid128[6],
-                            bt_uuid.uu.uuid128[7],bt_uuid.uu.uuid128[8],bt_uuid.uu.uuid128[9],
-                            bt_uuid.uu.uuid128[10],bt_uuid.uu.uuid128[11],bt_uuid.uu.uuid128[12],
-                            bt_uuid.uu.uuid128[13],bt_uuid.uu.uuid128[14],bt_uuid.uu.uuid128[15]);
-                         p_multi_adv_data_cb->inst_cb[cbindex].data.p_services_128b->list_cmpl = TRUE;
-                      }
+                     BTIF_TRACE_DEBUG("%s - In 128-UUID_data", __FUNCTION__);
+                     p_multi_adv_data_cb->inst_cb[cbindex].mask |=
+                         BTM_BLE_AD_BIT_SERVICE_128;
+                     memcpy(p_multi_adv_data_cb->inst_cb[cbindex]
+                                .data.services_128b.uuid128,
+                            bt_uuid.uu.uuid128, LEN_UUID_128);
+                     BTIF_TRACE_DEBUG(
+                         "%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x",
+                         bt_uuid.uu.uuid128[0], bt_uuid.uu.uuid128[1],
+                         bt_uuid.uu.uuid128[2], bt_uuid.uu.uuid128[3],
+                         bt_uuid.uu.uuid128[4], bt_uuid.uu.uuid128[5],
+                         bt_uuid.uu.uuid128[6], bt_uuid.uu.uuid128[7],
+                         bt_uuid.uu.uuid128[8], bt_uuid.uu.uuid128[9],
+                         bt_uuid.uu.uuid128[10], bt_uuid.uu.uuid128[11],
+                         bt_uuid.uu.uuid128[12], bt_uuid.uu.uuid128[13],
+                         bt_uuid.uu.uuid128[14], bt_uuid.uu.uuid128[15]);
+                     ++p_multi_adv_data_cb->inst_cb[cbindex]
+                           .data.services_128b.num_service;
+                     p_multi_adv_data_cb->inst_cb[cbindex]
+                         .data.services_128b.list_cmpl = TRUE;
                    }
                    break;
                 }
@@ -525,7 +489,7 @@ void btif_gattc_cleanup_inst_cb(int inst_id, BOOLEAN stop_timer)
         STD_ADV_INSTID : btif_gattc_obtain_idx_for_datacb(inst_id, INST_ID_IDX);
     if (cbindex < 0) return;
 
-    BTIF_TRACE_DEBUG("Cleaning up multi_inst_cb for inst_id %d, cbindex %d", inst_id, cbindex);
+    BTIF_TRACE_DEBUG("%s: inst_id %d, cbindex %d", __func__, inst_id, cbindex);
     btif_gattc_cleanup_multi_inst_cb(&p_multi_adv_data_cb->inst_cb[cbindex], stop_timer);
 }
 
@@ -543,64 +507,7 @@ void btif_gattc_cleanup_multi_inst_cb(btgatt_multi_adv_inst_cb *p_multi_inst_cb,
         p_multi_inst_cb->tle_limited_timer.in_use = 0;
     }
 
-    // Manufacturer data cleanup
-    if (p_multi_inst_cb->data.p_manu != NULL)
-    {
-        btif_gattc_cleanup((void**) &p_multi_inst_cb->data.p_manu->p_val);
-        btif_gattc_cleanup((void**) &p_multi_inst_cb->data.p_manu);
-    }
-
-    // Proprietary data cleanup
-    if (p_multi_inst_cb->data.p_proprietary != NULL)
-    {
-        int i = 0;
-        tBTA_BLE_PROP_ELEM *p_elem = p_multi_inst_cb->data.p_proprietary->p_elem;
-        while (i++ != p_multi_inst_cb->data.p_proprietary->num_elem
-            && p_elem)
-        {
-            btif_gattc_cleanup((void**) &p_elem->p_val);
-            ++p_elem;
-        }
-
-        btif_gattc_cleanup((void**) &p_multi_inst_cb->data.p_proprietary->p_elem);
-        btif_gattc_cleanup((void**) &p_multi_inst_cb->data.p_proprietary);
-    }
-
-    // Service list cleanup
-    if (p_multi_inst_cb->data.p_services != NULL)
-    {
-        btif_gattc_cleanup((void**) &p_multi_inst_cb->data.p_services->p_uuid);
-        btif_gattc_cleanup((void**) &p_multi_inst_cb->data.p_services);
-    }
-
-    // Service data cleanup
-    if (p_multi_inst_cb->data.p_service_data != NULL)
-    {
-        btif_gattc_cleanup((void**) &p_multi_inst_cb->data.p_service_data->p_val);
-        btif_gattc_cleanup((void**) &p_multi_inst_cb->data.p_service_data);
-    }
-
-    btif_gattc_cleanup((void**) &p_multi_inst_cb->data.p_services_128b);
-
-    if (p_multi_inst_cb->data.p_service_32b != NULL)
-    {
-        btif_gattc_cleanup((void**) &p_multi_inst_cb->data.p_service_32b->p_uuid);
-        btif_gattc_cleanup((void**) &p_multi_inst_cb->data.p_service_32b);
-    }
-
-    if (p_multi_inst_cb->data.p_sol_services != NULL)
-    {
-        btif_gattc_cleanup((void**) &p_multi_inst_cb->data.p_sol_services->p_uuid);
-        btif_gattc_cleanup((void**) &p_multi_inst_cb->data.p_sol_services);
-    }
-
-    if (p_multi_inst_cb->data.p_sol_service_32b != NULL)
-    {
-        btif_gattc_cleanup((void**) &p_multi_inst_cb->data.p_sol_service_32b->p_uuid);
-        btif_gattc_cleanup((void**) &p_multi_inst_cb->data.p_sol_service_32b);
-    }
-
-    btif_gattc_cleanup((void**) &p_multi_inst_cb->data.p_sol_service_128b);
+    memset(&p_multi_inst_cb->data, 0, sizeof(p_multi_inst_cb->data));
 }
 
 void btif_gattc_cleanup(void** buf)
index 9f0d3d1..d952fa1 100644 (file)
@@ -1177,8 +1177,7 @@ tBTM_STATUS BTM_BleWriteScanRsp(tBTM_BLE_AD_MASK data_mask, tBTM_BLE_ADV_DATA *p
     UINT8   rsp_data[BTM_BLE_AD_DATA_LEN],
             *p = rsp_data;
 
-    BTM_TRACE_EVENT (" BTM_BleWriteScanRsp");
-
+    BTM_TRACE_EVENT ("%s: data_mask:%08x", __func__, data_mask);
     if (!controller_get_interface()->supports_ble())
         return BTM_ILLEGAL_VALUE;
 
@@ -1263,7 +1262,7 @@ UINT8 *BTM_CheckAdvData( UINT8 *p_adv, UINT8 type, UINT8 *p_length)
     UINT8 *p = p_adv;
     UINT8 length;
     UINT8 adv_type;
-    BTM_TRACE_API("BTM_CheckAdvData type=0x%02X", type);
+    BTM_TRACE_API("%s: type=0x%02x", __func__, type);
 
     STREAM_TO_UINT8(length, p);
 
@@ -1354,17 +1353,16 @@ UINT8 *btm_ble_build_adv_data(tBTM_BLE_AD_MASK *p_data_mask, UINT8 **p_dst,
 #endif
         /* manufacturer data */
         if (len > MIN_ADV_LENGTH && data_mask & BTM_BLE_AD_BIT_MANU &&
-            p_data && p_data->p_manu &&
-            p_data->p_manu->len != 0 && p_data->p_manu->p_val)
+            p_data && p_data->manu.len != 0)
         {
-            if (p_data->p_manu->len > (len - MIN_ADV_LENGTH))
+            if (p_data->manu.len > (len - MIN_ADV_LENGTH))
                 cp_len = len - MIN_ADV_LENGTH;
             else
-                cp_len = p_data->p_manu->len;
+                cp_len = p_data->manu.len;
 
             *p++ = cp_len + 1;
             *p++ = BTM_BLE_AD_TYPE_MANU;
-            ARRAY_TO_STREAM(p, p_data->p_manu->p_val, cp_len);
+            ARRAY_TO_STREAM(p, p_data->manu.val, cp_len);
 
             len -= (cp_len + MIN_ADV_LENGTH);
             data_mask &= ~BTM_BLE_AD_BIT_MANU;
@@ -1382,11 +1380,9 @@ UINT8 *btm_ble_build_adv_data(tBTM_BLE_AD_MASK *p_data_mask, UINT8 **p_dst,
         }
         /* 16 bits services */
         if (len > MIN_ADV_LENGTH && data_mask & BTM_BLE_AD_BIT_SERVICE &&
-            p_data && p_data->p_services &&
-            p_data->p_services->num_service != 0 &&
-            p_data->p_services->p_uuid)
+            p_data && p_data->services.num_service != 0)
         {
-            if (p_data->p_services->num_service * LEN_UUID_16 > (len - MIN_ADV_LENGTH))
+            if (p_data->services.num_service * LEN_UUID_16 > (len - MIN_ADV_LENGTH))
             {
                 cp_len = (len - MIN_ADV_LENGTH)/LEN_UUID_16;
                 *p ++ = 1 + cp_len * LEN_UUID_16;
@@ -1394,13 +1390,13 @@ UINT8 *btm_ble_build_adv_data(tBTM_BLE_AD_MASK *p_data_mask, UINT8 **p_dst,
             }
             else
             {
-                cp_len = p_data->p_services->num_service;
+                cp_len = p_data->services.num_service;
                 *p++ = 1 + cp_len * LEN_UUID_16;
                 *p++ = BTM_BLE_AD_TYPE_16SRV_CMPL;
             }
             for (i = 0; i < cp_len; i ++)
             {
-                UINT16_TO_STREAM(p, *(p_data->p_services->p_uuid + i));
+                UINT16_TO_STREAM(p, *(p_data->services.uuid + i));
             }
 
             len -= (cp_len * MIN_ADV_LENGTH + MIN_ADV_LENGTH);
@@ -1408,11 +1404,9 @@ UINT8 *btm_ble_build_adv_data(tBTM_BLE_AD_MASK *p_data_mask, UINT8 **p_dst,
         }
         /* 32 bits service uuid */
         if (len > MIN_ADV_LENGTH && data_mask & BTM_BLE_AD_BIT_SERVICE_32 &&
-            p_data && p_data->p_service_32b &&
-            p_data->p_service_32b->num_service != 0 &&
-            p_data->p_service_32b->p_uuid)
+            p_data && p_data->service_32b.num_service != 0)
         {
-            if ((p_data->p_service_32b->num_service * LEN_UUID_32) > (len - MIN_ADV_LENGTH))
+            if ((p_data->service_32b.num_service * LEN_UUID_32) > (len - MIN_ADV_LENGTH))
             {
                 cp_len = (len - MIN_ADV_LENGTH)/LEN_UUID_32;
                 *p ++ = 1 + cp_len * LEN_UUID_32;
@@ -1420,13 +1414,13 @@ UINT8 *btm_ble_build_adv_data(tBTM_BLE_AD_MASK *p_data_mask, UINT8 **p_dst,
             }
             else
             {
-                cp_len = p_data->p_service_32b->num_service;
+                cp_len = p_data->service_32b.num_service;
                 *p++ = 1 + cp_len * LEN_UUID_32;
                 *p++ = BTM_BLE_AD_TYPE_32SRV_CMPL;
             }
             for (i = 0; i < cp_len; i ++)
             {
-                UINT32_TO_STREAM(p, *(p_data->p_service_32b->p_uuid + i));
+                UINT32_TO_STREAM(p, *(p_data->service_32b.uuid + i));
             }
 
             len -= (cp_len * LEN_UUID_32 + MIN_ADV_LENGTH);
@@ -1434,40 +1428,38 @@ UINT8 *btm_ble_build_adv_data(tBTM_BLE_AD_MASK *p_data_mask, UINT8 **p_dst,
         }
         /* 128 bits services */
         if (len >= (MAX_UUID_SIZE + 2) && data_mask & BTM_BLE_AD_BIT_SERVICE_128 &&
-            p_data && p_data->p_services_128b)
+            p_data && p_data->services_128b.num_service)
         {
             *p ++ = 1 + MAX_UUID_SIZE;
-            if (!p_data->p_services_128b->list_cmpl)
+            if (!p_data->services_128b.list_cmpl)
                 *p++ = BTM_BLE_AD_TYPE_128SRV_PART;
             else
                 *p++ = BTM_BLE_AD_TYPE_128SRV_CMPL;
 
-            ARRAY_TO_STREAM(p, p_data->p_services_128b->uuid128, MAX_UUID_SIZE);
+            ARRAY_TO_STREAM(p, p_data->services_128b.uuid128, MAX_UUID_SIZE);
 
             len -= (MAX_UUID_SIZE + MIN_ADV_LENGTH);
             data_mask &= ~BTM_BLE_AD_BIT_SERVICE_128;
         }
         /* 32 bits Service Solicitation UUIDs */
         if (len > MIN_ADV_LENGTH && data_mask & BTM_BLE_AD_BIT_SERVICE_32SOL &&
-            p_data && p_data->p_sol_service_32b &&
-            p_data->p_sol_service_32b->num_service != 0 &&
-            p_data->p_sol_service_32b->p_uuid)
+            p_data->sol_service_32b.num_service != 0)
         {
-            if ((p_data->p_sol_service_32b->num_service * LEN_UUID_32) > (len - MIN_ADV_LENGTH))
+            if ((p_data->sol_service_32b.num_service * LEN_UUID_32) > (len - MIN_ADV_LENGTH))
             {
                 cp_len = (len - MIN_ADV_LENGTH)/LEN_UUID_32;
                 *p ++ = 1 + cp_len * LEN_UUID_32;
             }
             else
             {
-                cp_len = p_data->p_sol_service_32b->num_service;
+                cp_len = p_data->sol_service_32b.num_service;
                 *p++ = 1 + cp_len * LEN_UUID_32;
             }
 
             *p++ = BTM_BLE_AD_TYPE_32SOL_SRV_UUID;
             for (i = 0; i < cp_len; i ++)
             {
-                UINT32_TO_STREAM(p, *(p_data->p_sol_service_32b->p_uuid + i));
+                UINT32_TO_STREAM(p, *(p_data->sol_service_32b.uuid + i));
             }
 
             len -= (cp_len * LEN_UUID_32 + MIN_ADV_LENGTH);
@@ -1475,46 +1467,46 @@ UINT8 *btm_ble_build_adv_data(tBTM_BLE_AD_MASK *p_data_mask, UINT8 **p_dst,
         }
         /* 128 bits Solicitation services UUID */
         if (len >= (MAX_UUID_SIZE + MIN_ADV_LENGTH) && data_mask & BTM_BLE_AD_BIT_SERVICE_128SOL &&
-            p_data && p_data->p_sol_service_128b)
+            p_data && p_data->sol_service_128b.num_service)
         {
             *p ++ = 1 + MAX_UUID_SIZE;
             *p++ = BTM_BLE_AD_TYPE_128SOL_SRV_UUID;
-            ARRAY_TO_STREAM(p, p_data->p_sol_service_128b->uuid128, MAX_UUID_SIZE);
+            ARRAY_TO_STREAM(p, p_data->sol_service_128b.uuid128, MAX_UUID_SIZE);
             len -= (MAX_UUID_SIZE + MIN_ADV_LENGTH);
             data_mask &= ~BTM_BLE_AD_BIT_SERVICE_128SOL;
         }
         /* 16bits/32bits/128bits Service Data */
         if (len > MIN_ADV_LENGTH && data_mask & BTM_BLE_AD_BIT_SERVICE_DATA &&
-            p_data && p_data->p_service_data->len != 0 && p_data->p_service_data->p_val)
+            p_data && p_data->service_data.len != 0)
         {
-            if (len  > (p_data->p_service_data->service_uuid.len + MIN_ADV_LENGTH))
+            if (len  > (p_data->service_data.service_uuid.len + MIN_ADV_LENGTH))
             {
-                if (p_data->p_service_data->len > (len - MIN_ADV_LENGTH))
-                    cp_len = len - MIN_ADV_LENGTH- p_data->p_service_data->service_uuid.len;
+                if (p_data->service_data.len > (len - MIN_ADV_LENGTH))
+                    cp_len = len - MIN_ADV_LENGTH- p_data->service_data.service_uuid.len;
                 else
-                    cp_len = p_data->p_service_data->len;
+                    cp_len = p_data->service_data.len;
 
-                *p++ = cp_len + 1 + p_data->p_service_data->service_uuid.len;
-                if (p_data->p_service_data->service_uuid.len == LEN_UUID_16)
+                *p++ = cp_len + 1 + p_data->service_data.service_uuid.len;
+                if (p_data->service_data.service_uuid.len == LEN_UUID_16)
                 {
                     *p++ = BTM_BLE_AD_TYPE_SERVICE_DATA;
-                    UINT16_TO_STREAM(p, p_data->p_service_data->service_uuid.uu.uuid16);
+                    UINT16_TO_STREAM(p, p_data->service_data.service_uuid.uu.uuid16);
                 }
-                else if (p_data->p_service_data->service_uuid.len == LEN_UUID_32)
+                else if (p_data->service_data.service_uuid.len == LEN_UUID_32)
                 {
                     *p++ = BTM_BLE_AD_TYPE_32SERVICE_DATA;
-                    UINT32_TO_STREAM(p, p_data->p_service_data->service_uuid.uu.uuid32);
+                    UINT32_TO_STREAM(p, p_data->service_data.service_uuid.uu.uuid32);
                 }
                 else
                 {
                     *p++ = BTM_BLE_AD_TYPE_128SERVICE_DATA;
-                    ARRAY_TO_STREAM(p, p_data->p_service_data->service_uuid.uu.uuid128,
+                    ARRAY_TO_STREAM(p, p_data->service_data.service_uuid.uu.uuid128,
                                     LEN_UUID_128);
                 }
 
-                ARRAY_TO_STREAM(p, p_data->p_service_data->p_val, cp_len);
+                ARRAY_TO_STREAM(p, p_data->service_data.val, cp_len);
 
-                len -= (cp_len + MIN_ADV_LENGTH + p_data->p_service_data->service_uuid.len);
+                len -= (cp_len + MIN_ADV_LENGTH + p_data->service_data.service_uuid.len);
                 data_mask &= ~BTM_BLE_AD_BIT_SERVICE_DATA;
             }
             else
@@ -1533,18 +1525,18 @@ UINT8 *btm_ble_build_adv_data(tBTM_BLE_AD_MASK *p_data_mask, UINT8 **p_dst,
             len -= 6;
             data_mask &= ~BTM_BLE_AD_BIT_INT_RANGE;
         }
-        if (data_mask & BTM_BLE_AD_BIT_PROPRIETARY && p_data && p_data->p_proprietary)
+        if (data_mask & BTM_BLE_AD_BIT_PROPRIETARY && p_data)
         {
-            for (i = 0; i < p_data->p_proprietary->num_elem ; i ++)
+            for (i = 0; i < p_data->proprietary.num_elem; ++i)
             {
-                p_elem = p_data->p_proprietary->p_elem  + i;
+                p_elem = &p_data->proprietary.elem[i];
 
                 if (len >= (MIN_ADV_LENGTH + p_elem->len))/* len byte(1) + ATTR type(1) + Uuid len(2)
                                                           + value length */
                 {
                     *p ++ = p_elem->len + 1; /* Uuid len + value length */
                     *p ++ = p_elem->adv_type;
-                    ARRAY_TO_STREAM(p, p_elem->p_val, p_elem->len);
+                    ARRAY_TO_STREAM(p, p_elem->val, p_elem->len);
 
                     len -= (MIN_ADV_LENGTH + p_elem->len);
                 }
index 84d26e3..45f77fe 100644 (file)
@@ -379,67 +379,73 @@ typedef struct
 }tBTM_BLE_INT_RANGE;
 
 /* Service tag supported in the device */
+#define MAX_16BIT_SERVICES 16
 typedef struct
 {
     UINT8       num_service;
     BOOLEAN     list_cmpl;
-    UINT16      *p_uuid;
+    UINT16      uuid[MAX_16BIT_SERVICES];
 }tBTM_BLE_SERVICE;
 
 /* 32 bits Service supported in the device */
+#define MAX_32BIT_SERVICES 4
 typedef struct
 {
     UINT8       num_service;
     BOOLEAN     list_cmpl;
-    UINT32      *p_uuid;
+    UINT32      uuid[MAX_32BIT_SERVICES];
 }tBTM_BLE_32SERVICE;
 
 /* 128 bits Service supported in the device */
 typedef struct
 {
+    UINT8       num_service;
     BOOLEAN     list_cmpl;
     UINT8       uuid128[MAX_UUID_SIZE];
 }tBTM_BLE_128SERVICE;
 
+#define MAX_SIZE_MANUFACTURER_DATA 32
 typedef struct
 {
-    UINT8       len;
-    UINT8      *p_val;
+    UINT8 len;
+    UINT8 val[MAX_SIZE_MANUFACTURER_DATA];
 }tBTM_BLE_MANU;
 
-
+#define MAX_SIZE_SERVICE_DATA 32
 typedef struct
 {
     tBT_UUID    service_uuid;
     UINT8       len;
-    UINT8      *p_val;
+    UINT8       val[MAX_SIZE_SERVICE_DATA];
 }tBTM_BLE_SERVICE_DATA;
 
+#define MAX_SIZE_PROPRIETARY_ELEMENT 32
 typedef struct
 {
     UINT8       adv_type;
     UINT8       len;
-    UINT8       *p_val;     /* number of len byte */
+    UINT8       val[MAX_SIZE_PROPRIETARY_ELEMENT];     /* number of len byte */
 }tBTM_BLE_PROP_ELEM;
 
+#define MAX_PROPRIETARY_ELEMENTS 4
 typedef struct
 {
     UINT8                   num_elem;
-    tBTM_BLE_PROP_ELEM      *p_elem;
+    tBTM_BLE_PROP_ELEM      elem[MAX_PROPRIETARY_ELEMENTS];
 }tBTM_BLE_PROPRIETARY;
 
 typedef struct
 {
     tBTM_BLE_INT_RANGE      int_range;      /* slave prefered conn interval range */
-    tBTM_BLE_MANU           *p_manu;           /* manufactuer data */
-    tBTM_BLE_SERVICE        *p_services;       /* services */
-    tBTM_BLE_128SERVICE     *p_services_128b;  /* 128 bits service */
-    tBTM_BLE_32SERVICE      *p_service_32b;     /* 32 bits Service UUID */
-    tBTM_BLE_SERVICE        *p_sol_services;    /* 16 bits services Solicitation UUIDs */
-    tBTM_BLE_32SERVICE      *p_sol_service_32b;    /* List of 32 bit Service Solicitation UUIDs */
-    tBTM_BLE_128SERVICE     *p_sol_service_128b;    /* List of 128 bit Service Solicitation UUIDs */
-    tBTM_BLE_PROPRIETARY    *p_proprietary;
-    tBTM_BLE_SERVICE_DATA   *p_service_data;    /* service data */
+    tBTM_BLE_MANU           manu;           /* manufactuer data */
+    tBTM_BLE_SERVICE        services;       /* services */
+    tBTM_BLE_128SERVICE     services_128b;  /* 128 bits service */
+    tBTM_BLE_32SERVICE      service_32b;     /* 32 bits Service UUID */
+    tBTM_BLE_SERVICE        sol_services;    /* 16 bits services Solicitation UUIDs */
+    tBTM_BLE_32SERVICE      sol_service_32b;    /* List of 32 bit Service Solicitation UUIDs */
+    tBTM_BLE_128SERVICE     sol_service_128b;    /* List of 128 bit Service Solicitation UUIDs */
+    tBTM_BLE_PROPRIETARY    proprietary;
+    tBTM_BLE_SERVICE_DATA   service_data;    /* service data */
     UINT16                  appearance;
     UINT8                   flag;
     UINT8                   tx_power;