script-astra/Android/Sdk/sources/android-35/android/bluetooth/le/ChannelSoundingParams.java
localadmin 4380f00a78 init
2025-01-20 18:15:20 +03:00

323 lines
9.1 KiB
Java

/*
* Copyright 2024 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 android.bluetooth.le;
import android.annotation.FlaggedApi;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.SystemApi;
import android.os.Parcel;
import android.os.Parcelable;
import com.android.bluetooth.flags.Flags;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/**
* The {@link ChannelSoundingParams} provide a way to adjust distance measurement preferences for
* {@link DISTANCE_MEASUREMENT_METHOD_CHANNEL_SOUNDING}. Use {@link ChannelSoundingParams.Builder}
* to create an instance of this class.
*
* @hide
*/
@FlaggedApi(Flags.FLAG_CHANNEL_SOUNDING)
@SystemApi
public final class ChannelSoundingParams implements Parcelable {
/** @hide */
@Retention(RetentionPolicy.SOURCE)
@IntDef(
value = {
SIGHT_TYPE_UNKNOWN,
SIGHT_TYPE_LINE_OF_SIGHT,
SIGHT_TYPE_NON_LINE_OF_SIGHT,
})
@interface SightType {}
/** @hide */
@Retention(RetentionPolicy.SOURCE)
@IntDef(value = {LOCATION_TYPE_UNKNOWN, LOCATION_TYPE_INDOOR, LOCATION_TYPE_OUTDOOR})
@interface LocationType {}
/** @hide */
@Retention(RetentionPolicy.SOURCE)
@IntDef(
value = {
CS_SECURITY_LEVEL_UNKNOWN,
CS_SECURITY_LEVEL_ONE,
CS_SECURITY_LEVEL_TWO,
CS_SECURITY_LEVEL_THREE,
CS_SECURITY_LEVEL_FOUR
})
@interface CsSecurityLevel {}
/**
* Sight type is unknown.
*
* @hide
*/
@SystemApi public static final int SIGHT_TYPE_UNKNOWN = 0;
/**
* Remote device is in line of sight.
*
* @hide
*/
@SystemApi public static final int SIGHT_TYPE_LINE_OF_SIGHT = 1;
/**
* Remote device is not in line of sight.
*
* @hide
*/
@SystemApi public static final int SIGHT_TYPE_NON_LINE_OF_SIGHT = 2;
/**
* Location type is unknown.
*
* @hide
*/
@SystemApi public static final int LOCATION_TYPE_UNKNOWN = 0;
/**
* The location of the usecase is indoor.
*
* @hide
*/
@SystemApi public static final int LOCATION_TYPE_INDOOR = 1;
/**
* The location of the usecase is outdoor.
*
* @hide
*/
@SystemApi public static final int LOCATION_TYPE_OUTDOOR = 2;
/**
* Return value for {@link
* DistanceMeasurementManager#getChannelSoundingMaxSupportedSecurityLevel(BluetoothDevice)} and
* {@link DistanceMeasurementManager#getLocalChannelSoundingMaxSupportedSecurityLevel()} when
* Channel Sounding is not supported, or encounters an internal error.
*
* @hide
*/
@SystemApi public static final int CS_SECURITY_LEVEL_UNKNOWN = 0;
/**
* Either CS tone or CS RTT.
*
* @hide
*/
@SystemApi public static final int CS_SECURITY_LEVEL_ONE = 1;
/**
* 150 ns CS RTT accuracy and CS tones.
*
* @hide
*/
@SystemApi public static final int CS_SECURITY_LEVEL_TWO = 2;
/**
* 10 ns CS RTT accuracy and CS tones.
*
* @hide
*/
@SystemApi public static final int CS_SECURITY_LEVEL_THREE = 3;
/**
* Level 3 with the addition of CS RTT sounding sequence or random sequence payloads, and
* support of the Normalized Attack Detector Metric requirements.
*
* @hide
*/
@SystemApi public static final int CS_SECURITY_LEVEL_FOUR = 4;
private int mSightType;
private int mLocationType;
private int mCsSecurityLevel;
/** @hide */
public ChannelSoundingParams(int sightType, int locationType, int csSecurityLevel) {
mSightType = sightType;
mLocationType = locationType;
mCsSecurityLevel = csSecurityLevel;
}
/**
* Returns sight type of this ChannelSoundingParams.
*
* @hide
*/
@SystemApi
@SightType
public int getSightType() {
return mSightType;
}
/**
* Returns location type of this ChannelSoundingParams.
*
* @hide
*/
@SystemApi
@LocationType
public int getLocationType() {
return mLocationType;
}
/**
* Returns CS security level of this ChannelSoundingParams.
*
* @hide
*/
@SystemApi
@CsSecurityLevel
public int getCsSecurityLevel() {
return mCsSecurityLevel;
}
/**
* {@inheritDoc}
*
* @hide
*/
@Override
public int describeContents() {
return 0;
}
/**
* {@inheritDoc}
*
* @hide
*/
@Override
public void writeToParcel(@NonNull Parcel out, int flags) {
out.writeInt(mSightType);
out.writeInt(mLocationType);
out.writeInt(mCsSecurityLevel);
}
/** A {@link Parcelable.Creator} to create {@link ChannelSoundingParams} from parcel. */
public static final @NonNull Parcelable.Creator<ChannelSoundingParams> CREATOR =
new Parcelable.Creator<ChannelSoundingParams>() {
@Override
public @NonNull ChannelSoundingParams createFromParcel(@NonNull Parcel in) {
Builder builder = new Builder();
builder.setSightType(in.readInt());
builder.setLocationType(in.readInt());
builder.setCsSecurityLevel(in.readInt());
return builder.build();
}
@Override
public @NonNull ChannelSoundingParams[] newArray(int size) {
return new ChannelSoundingParams[size];
}
};
/**
* Builder for {@link ChannelSoundingParams}.
*
* @hide
*/
@SystemApi
public static final class Builder {
private int mSightType = SIGHT_TYPE_UNKNOWN;
private int mLocationType = LOCATION_TYPE_UNKNOWN;
private int mCsSecurityLevel = CS_SECURITY_LEVEL_ONE;
/**
* Set sight type for the ChannelSoundingParams.
*
* @param sightType sight type of this ChannelSoundingParams
* @return the same Builder instance
* @hide
*/
@SystemApi
public @NonNull Builder setSightType(@SightType int sightType) {
switch (sightType) {
case SIGHT_TYPE_UNKNOWN:
case SIGHT_TYPE_LINE_OF_SIGHT:
case SIGHT_TYPE_NON_LINE_OF_SIGHT:
mSightType = sightType;
break;
default:
throw new IllegalArgumentException("unknown sight type " + sightType);
}
return this;
}
/**
* Set location type for the ChannelSoundingParams.
*
* @param locationType location type of this ChannelSoundingParams
* @return the same Builder instance
* @hide
*/
@SystemApi
public @NonNull Builder setLocationType(@LocationType int locationType) {
switch (locationType) {
case LOCATION_TYPE_UNKNOWN:
case LOCATION_TYPE_INDOOR:
case LOCATION_TYPE_OUTDOOR:
mLocationType = locationType;
break;
default:
throw new IllegalArgumentException("unknown location type " + locationType);
}
return this;
}
/**
* Set CS security level for the ChannelSoundingParams.
*
* <p>See: https://bluetooth.com/specifications/specs/channel-sounding-cr-pr/
*
* @param csSecurityLevel cs security level of this ChannelSoundingParams
* @return the same Builder instance
* @hide
*/
@SystemApi
public @NonNull Builder setCsSecurityLevel(@CsSecurityLevel int csSecurityLevel) {
switch (csSecurityLevel) {
case CS_SECURITY_LEVEL_ONE:
case CS_SECURITY_LEVEL_TWO:
case CS_SECURITY_LEVEL_THREE:
case CS_SECURITY_LEVEL_FOUR:
mCsSecurityLevel = csSecurityLevel;
break;
default:
throw new IllegalArgumentException(
"unknown CS security level " + csSecurityLevel);
}
return this;
}
/**
* Build the {@link ChannelSoundingParams} object.
*
* @hide
*/
@SystemApi
public @NonNull ChannelSoundingParams build() {
return new ChannelSoundingParams(mSightType, mLocationType, mCsSecurityLevel);
}
}
}