Merge "Add isN1ModeEnabled and setN1ModeEnabled to IRadioNetwork"

This commit is contained in:
Hunsuk Choi
2022-11-17 23:50:05 +00:00
committed by Android (Google) Code Review
9 changed files with 140 additions and 0 deletions

View File

@@ -78,4 +78,6 @@ interface IRadioNetwork {
oneway void cancelEmergencyNetworkScan(int serial, boolean resetScan);
oneway void exitEmergencyMode(in int serial);
oneway void setNullCipherAndIntegrityEnabled(in int serial, in boolean enabled);
oneway void isN1ModeEnabled(in int serial);
oneway void setN1ModeEnabled(in int serial, boolean enable);
}

View File

@@ -77,4 +77,6 @@ interface IRadioNetworkResponse {
oneway void exitEmergencyModeResponse(in android.hardware.radio.RadioResponseInfo info);
oneway void cancelEmergencyNetworkScanResponse(in android.hardware.radio.RadioResponseInfo info);
oneway void setNullCipherAndIntegrityEnabledResponse(in android.hardware.radio.RadioResponseInfo info);
oneway void isN1ModeEnabledResponse(in android.hardware.radio.RadioResponseInfo info, boolean isEnabled);
oneway void setN1ModeEnabledResponse(in android.hardware.radio.RadioResponseInfo info);
}

View File

@@ -504,4 +504,30 @@ oneway interface IRadioNetwork {
* Response callback is IRadioResponse.setNullCipherAndIntegrityEnabledResponse()
*/
void setNullCipherAndIntegrityEnabled(in int serial, in boolean enabled);
/**
* Checks whether N1 mode (access to 5G core network) is enabled or not.
*
* @param serial Serial number of request.
*
* Response function is IRadioNetworkResponse.isN1ModeEnabledResponse()
*/
void isN1ModeEnabled(in int serial);
/**
* Enables or disables N1 mode (access to 5G core network) in accordance with
* 3GPP TS 24.501 4.9.
*
* Note: The default value of N1 mode shall be based on the modem's internal configuration
* as per device or carrier. This API may be invoked on demand first to disable N1 mode and
* later to re-enable for certain use case. This setting shall not be persisted by modem.
* This setting shall not interfere with the allowed network type bitmap set using
* {@link IRadioNetwork#setAllowedNetworkTypesBitmap()} API.
*
* @param serial Serial number of request.
* @param enable {@code true} to enable N1 mode, {@code false} to disable N1 mode.
*
* Response function is IRadioNetworkResponse.setN1ModeEnabledResponse()
*/
void setN1ModeEnabled(in int serial, boolean enable);
}

View File

@@ -624,4 +624,34 @@ oneway interface IRadioNetworkResponse {
* RadioError:MODEM_ERR
*/
void setNullCipherAndIntegrityEnabledResponse(in RadioResponseInfo info);
/**
* Response of isN1ModeEnabled.
* This is an optional API.
*
* @param info Response info struct containing response type, serial no. and error.
* @param isEnabled Indicates whether N1 mode is enabled or not.
*
* Valid errors returned:
* RadioError:NONE
* RadioError:RADIO_NOT_AVAILABLE
* RadioError:INTERNAL_ERR
* RadioError:REQUEST_NOT_SUPPORTED
*/
void isN1ModeEnabledResponse(in RadioResponseInfo info, boolean isEnabled);
/**
* Response of setN1ModeEnabled.
* This is an optional API.
*
* @param info Response info struct containing response type, serial no. and error.
*
* Valid errors returned:
* RadioError:NONE
* RadioError:RADIO_NOT_AVAILABLE
* RadioError:INTERNAL_ERR
* RadioError:REQUEST_NOT_SUPPORTED
* RadioError:INVALID_STATE
*/
void setN1ModeEnabledResponse(in RadioResponseInfo info);
}

View File

@@ -99,6 +99,8 @@ class RadioNetwork : public RadioCompatBase,
scanTrigger) override;
::ndk::ScopedAStatus cancelEmergencyNetworkScan(int32_t serial, bool resetScan) override;
::ndk::ScopedAStatus exitEmergencyMode(int32_t serial) override;
::ndk::ScopedAStatus isN1ModeEnabled(int32_t serial) override;
::ndk::ScopedAStatus setN1ModeEnabled(int32_t serial, bool enable) override;
::ndk::ScopedAStatus setNullCipherAndIntegrityEnabled(int32_t serial, bool enabled) override;

View File

@@ -347,4 +347,17 @@ ScopedAStatus RadioNetwork::setNullCipherAndIntegrityEnabled(int32_t serial, boo
return ok();
}
ScopedAStatus RadioNetwork::isN1ModeEnabled(int32_t serial) {
LOG_CALL << serial;
LOG(ERROR) << " isN1ModeEnabled is unsupported by HIDL HALs";
respond()->isN1ModeEnabledResponse(notSupported(serial), false);
return ok();
}
ScopedAStatus RadioNetwork::setN1ModeEnabled(int32_t serial, bool /*enable*/) {
LOG_CALL << serial;
LOG(ERROR) << " setN1ModeEnabled is unsupported by HIDL HALs";
respond()->setN1ModeEnabledResponse(notSupported(serial));
return ok();
}
} // namespace android::hardware::radio::compat

View File

@@ -300,3 +300,16 @@ ndk::ScopedAStatus RadioNetworkResponse::setNullCipherAndIntegrityEnabledRespons
parent_network.notify(info.serial);
return ndk::ScopedAStatus::ok();
}
ndk::ScopedAStatus RadioNetworkResponse::isN1ModeEnabledResponse(
const RadioResponseInfo& info, bool /*isEnabled*/) {
rspInfo = info;
parent_network.notify(info.serial);
return ndk::ScopedAStatus::ok();
}
ndk::ScopedAStatus RadioNetworkResponse::setN1ModeEnabledResponse(const RadioResponseInfo& info) {
rspInfo = info;
parent_network.notify(info.serial);
return ndk::ScopedAStatus::ok();
}

View File

@@ -1914,3 +1914,50 @@ TEST_P(RadioNetworkTest, exitEmergencyMode) {
RadioError::MODEM_ERR}));
LOG(DEBUG) << "exitEmergencyMode finished";
}
/*
* Test IRadioNetwork.setN1ModeEnabled() for the response returned.
*/
TEST_P(RadioNetworkTest, setN1ModeEnabled) {
serial = GetRandomSerialNumber();
ndk::ScopedAStatus res =
radio_network->setN1ModeEnabled(serial, false);
ASSERT_OK(res);
EXPECT_EQ(std::cv_status::no_timeout, wait());
EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_network->rspInfo.type);
EXPECT_EQ(serial, radioRsp_network->rspInfo.serial);
if (getRadioHalCapabilities()) {
ASSERT_TRUE(CheckAnyOfErrors(radioRsp_network->rspInfo.error,
{RadioError::REQUEST_NOT_SUPPORTED}));
} else {
ASSERT_TRUE(CheckAnyOfErrors(
radioRsp_network->rspInfo.error,
{RadioError::RADIO_NOT_AVAILABLE, RadioError::INTERNAL_ERR,
RadioError::INVALID_STATE, RadioError::REQUEST_NOT_SUPPORTED, RadioError::NONE}));
}
}
/*
* Test IRadioNetwork.isN1ModeEnabled() for the response returned.
*/
TEST_P(RadioNetworkTest, isN1ModeEnabled) {
serial = GetRandomSerialNumber();
ndk::ScopedAStatus res = radio_network->isN1ModeEnabled(serial);
ASSERT_OK(res);
EXPECT_EQ(std::cv_status::no_timeout, wait());
EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_network->rspInfo.type);
EXPECT_EQ(serial, radioRsp_network->rspInfo.serial);
if (getRadioHalCapabilities()) {
ASSERT_TRUE(CheckAnyOfErrors(radioRsp_network->rspInfo.error,
{RadioError::REQUEST_NOT_SUPPORTED}));
} else {
ASSERT_TRUE(CheckAnyOfErrors(
radioRsp_network->rspInfo.error,
{RadioError::RADIO_NOT_AVAILABLE, RadioError::INTERNAL_ERR,
RadioError::REQUEST_NOT_SUPPORTED, RadioError::NONE}));
}
}

View File

@@ -161,6 +161,11 @@ class RadioNetworkResponse : public BnRadioNetworkResponse {
virtual ndk::ScopedAStatus setNullCipherAndIntegrityEnabledResponse(
const RadioResponseInfo& info) override;
virtual ndk::ScopedAStatus isN1ModeEnabledResponse(
const RadioResponseInfo& info, bool isEnabled) override;
virtual ndk::ScopedAStatus setN1ModeEnabledResponse(const RadioResponseInfo& info) override;
};
/* Callback class for radio network indication */