blob: 22ae061d8fb52432ec7965f27eb3cfe893f4c45d [file] [log] [blame]
/*
* Copyright (C) 2023 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.bluetooth.gatt;
import android.bluetooth.le.AdvertisingSetParameters;
import android.bluetooth.le.PeriodicAdvertisingParameters;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
/** Native interface for AdvertiseManager */
@VisibleForTesting
public class AdvertiseManagerNativeInterface {
private static final String TAG = AdvertiseManagerNativeInterface.class.getSimpleName();
@GuardedBy("INSTANCE_LOCK")
private static AdvertiseManagerNativeInterface sInstance;
private static final Object INSTANCE_LOCK = new Object();
private AdvertiseManager mManager;
/** Get singleton instance. */
public static AdvertiseManagerNativeInterface getInstance() {
synchronized (INSTANCE_LOCK) {
if (sInstance == null) {
sInstance = new AdvertiseManagerNativeInterface();
}
return sInstance;
}
}
/** Set singleton instance. */
@VisibleForTesting
public static void setInstance(AdvertiseManagerNativeInterface instance) {
synchronized (INSTANCE_LOCK) {
sInstance = instance;
}
}
void init(AdvertiseManager manager) {
mManager = manager;
initializeNative();
}
void cleanup() {
cleanupNative();
mManager = null;
}
void startAdvertisingSet(
AdvertisingSetParameters parameters,
byte[] advertiseDataBytes,
byte[] scanResponseBytes,
PeriodicAdvertisingParameters periodicParameters,
byte[] periodicDataBytes,
int duration,
int maxExtAdvEvents,
int cbId,
int serverIf) {
startAdvertisingSetNative(
parameters,
advertiseDataBytes,
scanResponseBytes,
periodicParameters,
periodicDataBytes,
duration,
maxExtAdvEvents,
cbId,
serverIf);
}
void stopAdvertisingSet(int advertiserId) {
stopAdvertisingSetNative(advertiserId);
}
void getOwnAddress(int advertiserId) {
getOwnAddressNative(advertiserId);
}
void enableAdvertisingSet(int advertiserId, boolean enable, int duration, int maxExtAdvEvents) {
enableAdvertisingSetNative(advertiserId, enable, duration, maxExtAdvEvents);
}
void setAdvertisingData(int advertiserId, byte[] advertiseDataBytes) {
setAdvertisingDataNative(advertiserId, advertiseDataBytes);
}
void setScanResponseData(int advertiserId, byte[] advertiseDataBytes) {
setScanResponseDataNative(advertiserId, advertiseDataBytes);
}
void setAdvertisingParameters(int advertiserId, AdvertisingSetParameters parameters) {
setAdvertisingParametersNative(advertiserId, parameters);
}
void setPeriodicAdvertisingParameters(
int advertiserId, PeriodicAdvertisingParameters parameters) {
setPeriodicAdvertisingParametersNative(advertiserId, parameters);
}
void setPeriodicAdvertisingData(int advertiserId, byte[] advertiseDataBytes) {
setPeriodicAdvertisingDataNative(advertiserId, advertiseDataBytes);
}
void setPeriodicAdvertisingEnable(int advertiserId, boolean enable) {
setPeriodicAdvertisingEnableNative(advertiserId, enable);
}
void onAdvertisingSetStarted(int regId, int advertiserId, int txPower, int status)
throws Exception {
mManager.onAdvertisingSetStarted(regId, advertiserId, txPower, status);
}
void onOwnAddressRead(int advertiserId, int addressType, String address) throws Exception {
mManager.onOwnAddressRead(advertiserId, addressType, address);
}
void onAdvertisingEnabled(int advertiserId, boolean enable, int status) throws Exception {
mManager.onAdvertisingEnabled(advertiserId, enable, status);
}
void onAdvertisingDataSet(int advertiserId, int status) throws Exception {
mManager.onAdvertisingDataSet(advertiserId, status);
}
void onScanResponseDataSet(int advertiserId, int status) throws Exception {
mManager.onScanResponseDataSet(advertiserId, status);
}
void onAdvertisingParametersUpdated(int advertiserId, int txPower, int status)
throws Exception {
mManager.onAdvertisingParametersUpdated(advertiserId, txPower, status);
}
void onPeriodicAdvertisingParametersUpdated(int advertiserId, int status) throws Exception {
mManager.onPeriodicAdvertisingParametersUpdated(advertiserId, status);
}
void onPeriodicAdvertisingDataSet(int advertiserId, int status) throws Exception {
mManager.onPeriodicAdvertisingDataSet(advertiserId, status);
}
void onPeriodicAdvertisingEnabled(int advertiserId, boolean enable, int status)
throws Exception {
mManager.onPeriodicAdvertisingEnabled(advertiserId, enable, status);
}
private native void initializeNative();
private native void cleanupNative();
private native void startAdvertisingSetNative(
AdvertisingSetParameters parameters,
byte[] advertiseData,
byte[] scanResponse,
PeriodicAdvertisingParameters periodicParameters,
byte[] periodicData,
int duration,
int maxExtAdvEvents,
int regId,
int serverIf);
private native void stopAdvertisingSetNative(int advertiserId);
private native void getOwnAddressNative(int advertiserId);
private native void enableAdvertisingSetNative(
int advertiserId, boolean enable, int duration, int maxExtAdvEvents);
private native void setAdvertisingDataNative(int advertiserId, byte[] data);
private native void setScanResponseDataNative(int advertiserId, byte[] data);
private native void setAdvertisingParametersNative(
int advertiserId, AdvertisingSetParameters parameters);
private native void setPeriodicAdvertisingParametersNative(
int advertiserId, PeriodicAdvertisingParameters parameters);
private native void setPeriodicAdvertisingDataNative(int advertiserId, byte[] data);
private native void setPeriodicAdvertisingEnableNative(int advertiserId, boolean enable);
}