Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 91265749 authored by Wei Wang's avatar Wei Wang
Browse files

Add scan response as an advertising parameter(2/2).

Change-Id: Ib0c86b81b9a2e0dd4110275c804e814451231966
parent e1485fb5
Loading
Loading
Loading
Loading
+8 −3
Original line number Diff line number Diff line

package com.android.bluetooth.gatt;

import android.annotation.Nullable;
import android.bluetooth.BluetoothLeAdvertiseScanData.AdvertisementData;
import android.bluetooth.BluetoothLeAdvertiser.Settings;

@@ -10,11 +11,15 @@ import android.bluetooth.BluetoothLeAdvertiser.Settings;
class AdvertiseClient {
    int clientIf;
    Settings settings;
    AdvertisementData data;
    AdvertisementData advertiseData;
    @Nullable
    AdvertisementData scanResponse;

    AdvertiseClient(int clientIf, Settings settings, AdvertisementData data) {
    AdvertiseClient(int clientIf, Settings settings, AdvertisementData data,
            AdvertisementData scanResponse) {
        this.clientIf = clientIf;
        this.settings = settings;
        this.data = data;
        this.advertiseData = data;
        this.scanResponse = scanResponse;
    }
}
+6 −5
Original line number Diff line number Diff line
@@ -566,11 +566,12 @@ public class GattService extends ProfileService {
        }

        @Override
        public void startMultiAdvertising(int clientIf, AdvertisementData data,
        public void startMultiAdvertising(int clientIf, AdvertisementData advertiseData,
                AdvertisementData scanResponse,
                BluetoothLeAdvertiser.Settings settings) {
            GattService service = getService();
            if (service == null) return;
            service.startMultiAdvertising(clientIf, data, settings);
            service.startMultiAdvertising(clientIf, advertiseData, scanResponse, settings);
        }

        @Override
@@ -1506,11 +1507,11 @@ public class GattService extends ProfileService {
        }
    }

    void startMultiAdvertising(int clientIf, AdvertisementData data,
            BluetoothLeAdvertiser.Settings settings) {
    void startMultiAdvertising(int clientIf, AdvertisementData advertiseData,
            AdvertisementData scanResponse, BluetoothLeAdvertiser.Settings settings) {
        enforceAdminPermission();
        Message message = mStateMachine.obtainMessage(GattServiceStateMachine.START_ADVERTISING);
        message.obj = new AdvertiseClient(clientIf, settings, data);
        message.obj = new AdvertiseClient(clientIf, settings, advertiseData, scanResponse);
        mStateMachine.sendMessage(message);
    }

+10 −7
Original line number Diff line number Diff line
@@ -345,7 +345,10 @@ final class GattServiceStateMachine extends StateMachine {
                    int clientIf = message.arg1;
                    log("setting advertisement: " + clientIf);
                    client = mAdvertiseClients.get(clientIf);
                    setAdvertisingData(client);
                    setAdvertisingData(clientIf, client.advertiseData);
                    if (client.scanResponse != null) {
                        setAdvertisingData(clientIf, client.scanResponse);
                    }
                    transitionTo(mIdle);
                    break;
                case CANCEL_ADVERTISING:
@@ -365,13 +368,13 @@ final class GattServiceStateMachine extends StateMachine {
        }
    }

    private void setAdvertisingData(AdvertiseClient client) {
        int clientIf = client.clientIf;
        log("enabling advertisiment: " + clientIf);
        AdvertisementData data = client.data;
        boolean isScanResponse =
                (data.getDataType() == BluetoothLeAdvertiseScanData.SCAN_RESPONSE_DATA);
    private void setAdvertisingData(int clientIf, AdvertisementData data) {
        if (data == null) {
            return;
        }
        boolean includeName = false;
        boolean isScanResponse =
                data.getDataType() == BluetoothLeAdvertiseScanData.SCAN_RESPONSE_DATA;
        boolean includeTxPower = data.getIncludeTxPowerLevel();
        int appearance = 0;
        byte[] manufacturerData = data.getManufacturerSpecificData() == null ? new byte[0]