blob: b6a045cdb81144ffedb4ebcb3346d4063ea40fc3 [file] [log] [blame]
/*
* Copyright (C) 2022 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.telephony.satellite.wrapper;
import android.annotation.NonNull;
import java.util.HashSet;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
/** Encapsulates the capabilities of Satellite */
public final class SatelliteCapabilitiesWrapper {
/** List of technologies supported by the satellite modem. */
@NonNull @SatelliteManagerWrapper.NTRadioTechnology
private final Set<Integer> mSupportedRadioTechnologies;
/** Whether UE needs to point to a satellite to send and receive data. */
private final boolean mIsPointingRequired;
/** The maximum number of bytes per datagram that can be sent over satellite. */
private final int mMaxBytesPerOutgoingDatagram;
/**
* Antenna Position received from satellite modem which gives information about antenna direction
* to be used with satellite communication and suggested device hold positions. Map key: {@link
* SatelliteManager.DeviceHoldPosition} value: AntennaPosition
*/
@NonNull private final Map<Integer, AntennaPositionWrapper> mAntennaPositionMap;
public SatelliteCapabilitiesWrapper(
Set<Integer> supportedRadioTechnologies,
boolean isPointingRequired,
int maxBytesPerOutgoingDatagram,
@NonNull Map<Integer, AntennaPositionWrapper> antennaPositionMap) {
this.mSupportedRadioTechnologies =
supportedRadioTechnologies == null ? new HashSet<>() : supportedRadioTechnologies;
this.mIsPointingRequired = isPointingRequired;
this.mMaxBytesPerOutgoingDatagram = maxBytesPerOutgoingDatagram;
this.mAntennaPositionMap = antennaPositionMap;
}
/**
* @return The list of technologies supported by the satellite modem.
*/
@NonNull
@SatelliteManagerWrapper.NTRadioTechnology
public Set<Integer> getSupportedRadioTechnologies() {
return mSupportedRadioTechnologies;
}
/**
* Get whether UE needs to point to a satellite to send and receive data.
*
* @return {@code true} if UE needs to point to a satellite to send and receive data and {@code
* false} otherwise.
*/
public boolean isPointingRequired() {
return mIsPointingRequired;
}
/**
* The maximum number of bytes per datagram that can be sent over satellite.
*
* @return The maximum number of bytes per datagram that can be sent over satellite.
*/
public int getMaxBytesPerOutgoingDatagram() {
return mMaxBytesPerOutgoingDatagram;
}
/**
* Antenna Position received from satellite modem which gives information about antenna direction
* to be used with satellite communication and suggested device hold positions.
*
* @return Map key: {@link SatelliteManager.DeviceHoldPosition} value: AntennaPosition
*/
@NonNull
public Map<Integer, AntennaPositionWrapper> getAntennaPositionMap() {
return mAntennaPositionMap;
}
@Override
@NonNull
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("SupportedRadioTechnology:");
if (mSupportedRadioTechnologies != null && !mSupportedRadioTechnologies.isEmpty()) {
for (int technology : mSupportedRadioTechnologies) {
sb.append(technology);
sb.append(",");
}
} else {
sb.append("none,");
}
sb.append("isPointingRequired:");
sb.append(mIsPointingRequired);
sb.append(",");
sb.append("maxBytesPerOutgoingDatagram:");
sb.append(mMaxBytesPerOutgoingDatagram);
sb.append(",");
sb.append("antennaPositionMap:");
sb.append(mAntennaPositionMap);
return sb.toString();
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
SatelliteCapabilitiesWrapper that = (SatelliteCapabilitiesWrapper) o;
return Objects.equals(mSupportedRadioTechnologies, that.mSupportedRadioTechnologies)
&& mIsPointingRequired == that.mIsPointingRequired
&& mMaxBytesPerOutgoingDatagram == that.mMaxBytesPerOutgoingDatagram
&& Objects.equals(mAntennaPositionMap, that.mAntennaPositionMap);
}
@Override
public int hashCode() {
return Objects.hash(
mSupportedRadioTechnologies,
mIsPointingRequired,
mMaxBytesPerOutgoingDatagram,
mAntennaPositionMap);
}
}