Merge "Add RIL requests and unsol for Satellite HAL"

This commit is contained in:
Thomas Nguyen
2023-01-19 02:37:20 +00:00
committed by Android (Google) Code Review
7 changed files with 489 additions and 0 deletions

View File

@@ -224,6 +224,7 @@ java_library {
"android.hardware.radio.messaging-V2-java",
"android.hardware.radio.modem-V2-java",
"android.hardware.radio.network-V2-java",
"android.hardware.radio.satellite-V1-java",
"android.hardware.radio.sim-V2-java",
"android.hardware.radio.voice-V2-java",
"android.hardware.thermal-V1.0-java-constants",

View File

@@ -2793,6 +2793,7 @@ package android.telephony {
field public static final int HAL_SERVICE_MESSAGING = 2; // 0x2
field public static final int HAL_SERVICE_MODEM = 3; // 0x3
field public static final int HAL_SERVICE_NETWORK = 4; // 0x4
field public static final int HAL_SERVICE_SATELLITE = 8; // 0x8
field public static final int HAL_SERVICE_SIM = 5; // 0x5
field public static final int HAL_SERVICE_VOICE = 6; // 0x6
field public static final android.util.Pair HAL_VERSION_UNKNOWN;

View File

@@ -15002,6 +15002,14 @@ public class TelephonyManager {
@TestApi
public static final int HAL_SERVICE_IMS = 7;
/**
* HAL service type that supports the HAL APIs implementation of IRadioSatellite
* {@link RadioSatelliteProxy}
* @hide
*/
@TestApi
public static final int HAL_SERVICE_SATELLITE = 8;
/** @hide */
@Retention(RetentionPolicy.SOURCE)
@IntDef(prefix = {"HAL_SERVICE_"},
@@ -15014,6 +15022,7 @@ public class TelephonyManager {
HAL_SERVICE_SIM,
HAL_SERVICE_VOICE,
HAL_SERVICE_IMS,
HAL_SERVICE_SATELLITE
})
public @interface HalService {}

View File

@@ -0,0 +1,144 @@
/*
* 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;
import android.annotation.NonNull;
import android.os.Parcel;
import android.os.Parcelable;
/**
* @hide
*/
public final class PointingInfo implements Parcelable {
/** Satellite azimuth in degrees */
private float mSatelliteAzimuthDegrees;
/** Satellite elevation in degrees */
private float mSatelliteElevationDegrees;
/** Antenna azimuth in degrees */
private float mAntennaAzimuthDegrees;
/**
* Angle of rotation about the x axis. This value represents the angle between a plane
* parallel to the device's screen and a plane parallel to the ground.
*/
private float mAntennaPitchDegrees;
/**
* Angle of rotation about the y axis. This value represents the angle between a plane
* perpendicular to the device's screen and a plane parallel to the ground.
*/
private float mAntennaRollDegrees;
/**
* @hide
*/
public PointingInfo(float satelliteAzimuthDegress, float satelliteElevationDegress,
float antennaAzimuthDegrees, float antennaPitchDegrees, float antennaRollDegrees) {
mSatelliteAzimuthDegrees = satelliteAzimuthDegress;
mSatelliteElevationDegrees = satelliteElevationDegress;
mAntennaAzimuthDegrees = antennaAzimuthDegrees;
mAntennaPitchDegrees = antennaPitchDegrees;
mAntennaRollDegrees = antennaRollDegrees;
}
private PointingInfo(Parcel in) {
readFromParcel(in);
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(@NonNull Parcel out, int flags) {
out.writeFloat(mSatelliteAzimuthDegrees);
out.writeFloat(mSatelliteElevationDegrees);
out.writeFloat(mAntennaAzimuthDegrees);
out.writeFloat(mAntennaPitchDegrees);
out.writeFloat(mAntennaRollDegrees);
}
public static final @android.annotation.NonNull Creator<PointingInfo> CREATOR =
new Creator<PointingInfo>() {
@Override
public PointingInfo createFromParcel(Parcel in) {
return new PointingInfo(in);
}
@Override
public PointingInfo[] newArray(int size) {
return new PointingInfo[size];
}
};
@NonNull
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("SatelliteAzimuthDegrees:");
sb.append(mSatelliteAzimuthDegrees);
sb.append(",");
sb.append("SatelliteElevationDegrees:");
sb.append(mSatelliteElevationDegrees);
sb.append(",");
sb.append("AntennaAzimuthDegrees:");
sb.append(mAntennaAzimuthDegrees);
sb.append(",");
sb.append("AntennaPitchDegrees:");
sb.append(mAntennaPitchDegrees);
sb.append(",");
sb.append("AntennaRollDegrees:");
sb.append(mAntennaRollDegrees);
return sb.toString();
}
public float getSatelliteAzimuthDegrees() {
return mSatelliteAzimuthDegrees;
}
public float getSatelliteElevationDegrees() {
return mSatelliteElevationDegrees;
}
public float getAntennaAzimuthDegrees() {
return mAntennaAzimuthDegrees;
}
public float getAntennaPitchDegrees() {
return mAntennaPitchDegrees;
}
public float getAntennaRollDegrees() {
return mAntennaRollDegrees;
}
private void readFromParcel(Parcel in) {
mSatelliteAzimuthDegrees = in.readFloat();
mSatelliteElevationDegrees = in.readFloat();
mAntennaAzimuthDegrees = in.readFloat();
mAntennaPitchDegrees = in.readFloat();
mAntennaRollDegrees = in.readFloat();
}
}

View File

@@ -0,0 +1,201 @@
/*
* 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;
import android.annotation.NonNull;
import android.os.Parcel;
import android.os.Parcelable;
import java.util.HashSet;
import java.util.Set;
/**
* @hide
*/
public final class SatelliteCapabilities implements Parcelable {
/**
* List of technologies supported by the satellite modem.
*/
private Set<Integer> mSupportedRadioTechnologies;
/**
* Whether satellite mode is always on (this to indicate power impact of keeping it on is
* very minimal).
*/
private boolean mIsAlwaysOn;
/**
* Whether UE needs to point to a satellite to send and receive data.
*/
private boolean mNeedsPointingToSatellite;
/**
* List of features supported by the Satellite modem.
*/
private Set<Integer> mSupportedFeatures;
/**
* Whether UE needs a separate SIM profile to communicate with the Satellite network.
*/
private boolean mNeedsSeparateSimProfile;
/**
* @hide
*/
public SatelliteCapabilities(Set<Integer> supportedRadioTechnologies, boolean isAlwaysOn,
boolean needsPointingToSatellite, Set<Integer> supportedFeatures,
boolean needsSeparateSimProfile) {
mSupportedRadioTechnologies = supportedRadioTechnologies;
mIsAlwaysOn = isAlwaysOn;
mNeedsPointingToSatellite = needsPointingToSatellite;
mSupportedFeatures = supportedFeatures;
mNeedsSeparateSimProfile = needsSeparateSimProfile;
}
private SatelliteCapabilities(Parcel in) {
readFromParcel(in);
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(@NonNull Parcel out, int flags) {
if (mSupportedRadioTechnologies != null && !mSupportedRadioTechnologies.isEmpty()) {
out.writeInt(mSupportedRadioTechnologies.size());
for (int technology : mSupportedRadioTechnologies) {
out.writeInt(technology);
}
} else {
out.writeInt(0);
}
out.writeBoolean(mIsAlwaysOn);
out.writeBoolean(mNeedsPointingToSatellite);
if (mSupportedFeatures != null && !mSupportedFeatures.isEmpty()) {
out.writeInt(mSupportedFeatures.size());
for (int feature : mSupportedFeatures) {
out.writeInt(feature);
}
} else {
out.writeInt(0);
}
out.writeBoolean(mNeedsSeparateSimProfile);
}
public static final @android.annotation.NonNull Creator<SatelliteCapabilities> CREATOR =
new Creator<SatelliteCapabilities>() {
@Override
public SatelliteCapabilities createFromParcel(Parcel in) {
return new SatelliteCapabilities(in);
}
@Override
public SatelliteCapabilities[] newArray(int size) {
return new SatelliteCapabilities[size];
}
};
@NonNull
@Override
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("SupportedFeatures:");
if (mSupportedFeatures != null && !mSupportedFeatures.isEmpty()) {
for (int feature : mSupportedFeatures) {
sb.append(feature);
sb.append(",");
}
} else {
sb.append("none,");
}
sb.append("isAlwaysOn:");
sb.append(mIsAlwaysOn);
sb.append(",");
sb.append("needsPointingToSatellite:");
sb.append(mNeedsPointingToSatellite);
sb.append(",");
sb.append("needsSeparateSimProfile:");
sb.append(mNeedsSeparateSimProfile);
return sb.toString();
}
@NonNull
public Set<Integer> getSupportedRadioTechnologies() {
return mSupportedRadioTechnologies;
}
public boolean isAlwaysOn() {
return mIsAlwaysOn;
}
/** Get function for mNeedsPointingToSatellite */
public boolean needsPointingToSatellite() {
return mNeedsPointingToSatellite;
}
@NonNull
public Set<Integer> getSupportedFeatures() {
return mSupportedFeatures;
}
/** Get function for mNeedsSeparateSimProfile */
public boolean needsSeparateSimProfile() {
return mNeedsSeparateSimProfile;
}
private void readFromParcel(Parcel in) {
mSupportedRadioTechnologies = new HashSet<>();
int numSupportedRadioTechnologies = in.readInt();
if (numSupportedRadioTechnologies > 0) {
for (int i = 0; i < numSupportedRadioTechnologies; i++) {
mSupportedRadioTechnologies.add(in.readInt());
}
}
mIsAlwaysOn = in.readBoolean();
mNeedsPointingToSatellite = in.readBoolean();
mSupportedFeatures = new HashSet<>();
int numSupportedFeatures = in.readInt();
if (numSupportedFeatures > 0) {
for (int i = 0; i < numSupportedFeatures; i++) {
mSupportedFeatures.add(in.readInt());
}
}
mNeedsSeparateSimProfile = in.readBoolean();
}
}

View File

@@ -0,0 +1,110 @@
/*
* 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.stub;
import android.annotation.IntDef;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/**
* @hide
*/
public class SatelliteImplBase {
private static final String TAG = "SatelliteImplBase";
/**@hide*/
@IntDef(
prefix = "TECHNOLOGY_",
value = {
TECHNOLOGY_NB_IOT_NTN,
TECHNOLOGY_NR_NTN,
TECHNOLOGY_EMTC_NTN,
TECHNOLOGY_PROPRIETARY
})
@Retention(RetentionPolicy.SOURCE)
public @interface NTRadioTechnology {}
/** 3GPP NB-IoT (Narrowband Internet of Things) over Non-Terrestrial-Networks technology */
public static final int TECHNOLOGY_NB_IOT_NTN =
android.hardware.radio.satellite.NTRadioTechnology.NB_IOT_NTN;
/** 3GPP 5G NR over Non-Terrestrial-Networks technology */
public static final int TECHNOLOGY_NR_NTN =
android.hardware.radio.satellite.NTRadioTechnology.NR_NTN;
/** 3GPP eMTC (enhanced Machine-Type Communication) over Non-Terrestrial-Networks technology */
public static final int TECHNOLOGY_EMTC_NTN =
android.hardware.radio.satellite.NTRadioTechnology.EMTC_NTN;
/** Proprietary technology like Iridium or Bullitt */
public static final int TECHNOLOGY_PROPRIETARY =
android.hardware.radio.satellite.NTRadioTechnology.PROPRIETARY;
/**@hide*/
@IntDef(
prefix = "FEATURE_",
value = {
FEATURE_SOS_SMS,
FEATURE_EMERGENCY_SMS,
FEATURE_SMS,
FEATURE_LOCATION_SHARING,
FEATURE_UNKNOWN
})
@Retention(RetentionPolicy.SOURCE)
public @interface Feature {}
/** Able to send and receive SMS messages to/from SOS numbers like call/service centers */
public static final int FEATURE_SOS_SMS =
android.hardware.radio.satellite.SatelliteFeature.SOS_SMS;
/** Able to send and receive SMS messages to/from emergency numbers like 911 */
public static final int FEATURE_EMERGENCY_SMS =
android.hardware.radio.satellite.SatelliteFeature.EMERGENCY_SMS;
/** Able to send and receive SMS messages to/from any allowed contacts */
public static final int FEATURE_SMS = android.hardware.radio.satellite.SatelliteFeature.SMS;
/** Able to send device location to allowed contacts */
public static final int FEATURE_LOCATION_SHARING =
android.hardware.radio.satellite.SatelliteFeature.LOCATION_SHARING;
/** This feature is not defined in satellite HAL APIs */
public static final int FEATURE_UNKNOWN = 0xFFFF;
/**@hide*/
@IntDef(
prefix = "MODE_",
value = {
MODE_POWERED_OFF,
MODE_OUT_OF_SERVICE_NOT_SEARCHING,
MODE_OUT_OF_SERVICE_SEARCHING,
MODE_ACQUIRED,
MODE_MESSAGE_TRANSFERRING
})
@Retention(RetentionPolicy.SOURCE)
public @interface Mode {}
/** Satellite modem is powered off */
public static final int MODE_POWERED_OFF =
android.hardware.radio.satellite.SatelliteMode.POWERED_OFF;
/** Satellite modem is in out of service state and not searching for satellite signal */
public static final int MODE_OUT_OF_SERVICE_NOT_SEARCHING =
android.hardware.radio.satellite.SatelliteMode.OUT_OF_SERVICE_NOT_SEARCHING;
/** Satellite modem is in out of service state and searching for satellite signal */
public static final int MODE_OUT_OF_SERVICE_SEARCHING =
android.hardware.radio.satellite.SatelliteMode.OUT_OF_SERVICE_SEARCHING;
/** Satellite modem has found satellite signal and gets connected to the satellite network */
public static final int MODE_ACQUIRED = android.hardware.radio.satellite.SatelliteMode.ACQUIRED;
/** Satellite modem is sending and/or receiving messages */
public static final int MODE_MESSAGE_TRANSFERRING =
android.hardware.radio.satellite.SatelliteMode.MESSAGE_TRANSFERRING;
}

View File

@@ -546,6 +546,22 @@ public interface RILConstants {
int RIL_REQUEST_UPDATE_IMS_CALL_STATUS = 240;
int RIL_REQUEST_SET_N1_MODE_ENABLED = 241;
int RIL_REQUEST_IS_N1_MODE_ENABLED = 242;
int RIL_REQUEST_SET_LOCATION_PRIVACY_SETTING = 243;
int RIL_REQUEST_GET_LOCATION_PRIVACY_SETTING = 244;
int RIL_REQUEST_GET_SATELLITE_CAPABILITIES = 245;
int RIL_REQUEST_SET_SATELLITE_POWER = 246;
int RIL_REQUEST_GET_SATELLITE_POWER = 247;
int RIL_REQUEST_PROVISION_SATELLITE_SERVICE = 248;
int RIL_REQUEST_ADD_ALLOWED_SATELLITE_CONTACTS = 249;
int RIL_REQUEST_REMOVE_ALLOWED_SATELLITE_CONTACTS = 250;
int RIL_REQUEST_SEND_SATELLITE_MESSAGES = 251;
int RIL_REQUEST_GET_PENDING_SATELLITE_MESSAGES = 252;
int RIL_REQUEST_GET_SATELLITE_MODE = 253;
int RIL_REQUEST_SET_SATELLITE_INDICATION_FILTER = 254;
int RIL_REQUEST_START_SENDING_SATELLITE_POINTING_INFO = 255;
int RIL_REQUEST_STOP_SENDING_SATELLITE_POINTING_INFO = 256;
int RIL_REQUEST_GET_MAX_CHARACTERS_PER_SATELLITE_TEXT_MESSAGE = 257;
int RIL_REQUEST_GET_TIME_FOR_NEXT_SATELLITE_VISIBILITY = 258;
/* Responses begin */
int RIL_RESPONSE_ACKNOWLEDGEMENT = 800;
@@ -607,6 +623,13 @@ public interface RILConstants {
int RIL_UNSOL_RESPONSE_SIM_PHONEBOOK_CHANGED = 1053;
int RIL_UNSOL_RESPONSE_SIM_PHONEBOOK_RECORDS_RECEIVED = 1054;
int RIL_UNSOL_SLICING_CONFIG_CHANGED = 1055;
int RIL_UNSOL_PENDING_SATELLITE_MESSAGE_COUNT = 1056;
int RIL_UNSOL_NEW_SATELLITE_MESSAGES = 1057;
int RIL_UNSOL_SATELLITE_MESSAGES_TRANSFER_COMPLETE = 1058;
int RIL_UNSOL_SATELLITE_POINTING_INFO_CHANGED = 1059;
int RIL_UNSOL_SATELLITE_MODE_CHANGED = 1060;
int RIL_UNSOL_SATELLITE_RADIO_TECHNOLOGY_CHANGED = 1061;
int RIL_UNSOL_SATELLITE_PROVISION_STATE_CHANGED = 1062;
/* The following unsols are not defined in RIL.h */
int RIL_UNSOL_HAL_NON_RIL_BASE = 1100;