blob: f35272e47bebbbfa533dbe313aa8d9a4a77a1c64 [file] [log] [blame]
#!/usr/bin/env python3
#
# Copyright 2021 - Google
#
# 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.
from queue import Empty
from acts_contrib.test_utils.tel.tel_defines import OverrideNetworkContainer
from acts_contrib.test_utils.tel.tel_defines import DisplayInfoContainer
from acts_contrib.test_utils.tel.tel_defines import EventDisplayInfoChanged
def is_current_network_5g_nsa(ad, sub_id = None, mmwave = None, timeout=30):
"""Verifies 5G NSA override network type
Args:
ad: android device object.
sub_id: The target SIM for querying.
mmwave: True to detect 5G millimeter wave, False to detect sub-6,
None to detect both.
timeout: max time to wait for event.
Returns:
True: if data is on nsa5g NSA
False: if data is not on nsa5g NSA
"""
sub_id = sub_id if sub_id else ad.droid.subscriptionGetDefaultDataSubId()
def _nsa_display_monitor(ad, sub_id, mmwave, timeout):
ad.ed.clear_events(EventDisplayInfoChanged)
ad.droid.telephonyStartTrackingDisplayInfoChangeForSubscription(sub_id)
if mmwave:
nsa_band = OverrideNetworkContainer.OVERRIDE_NETWORK_TYPE_NR_MMWAVE
else:
nsa_band = OverrideNetworkContainer.OVERRIDE_NETWORK_TYPE_NR_NSA
try:
event = ad.ed.wait_for_event(
EventDisplayInfoChanged,
ad.ed.is_event_match,
timeout=timeout,
field=DisplayInfoContainer.OVERRIDE,
value=nsa_band)
ad.log.info("Got expected event %s", event)
return True
except Empty:
ad.log.info("No event for display info change with <%s>", nsa_band)
ad.screenshot("5g_nsa_icon_checking")
return False
finally:
ad.droid.telephonyStopTrackingServiceStateChangeForSubscription(
sub_id)
if mmwave is None:
return _nsa_display_monitor(
ad, sub_id, mmwave=False, timeout=timeout) or _nsa_display_monitor(
ad, sub_id, mmwave=True, timeout=timeout)
else:
return _nsa_display_monitor(ad, sub_id, mmwave, timeout)
def is_current_network_5g_sa(ad, sub_id = None, mmwave = None):
"""Verifies 5G SA override network type
Args:
ad: android device object.
sub_id: The target SIM for querying.
mmwave: True to detect 5G millimeter wave, False to detect sub-6,
None to detect both.
Returns:
True: if data is on 5g SA
False: if data is not on 5g SA
"""
sub_id = sub_id if sub_id else ad.droid.subscriptionGetDefaultDataSubId()
current_rat = ad.droid.telephonyGetCurrentDataNetworkTypeForSubscription(
sub_id)
# TODO(richardwychang): check SA MMWAVE when function ready.
sa_type = ['NR',]
if mmwave is None:
if current_rat in sa_type:
ad.log.debug("Network is currently connected to %s", current_rat)
return True
else:
ad.log.error(
"Network is currently connected to %s, Expected on %s",
current_rat, sa_type)
ad.screenshot("5g_sa_icon_checking")
return False
elif mmwave:
ad.log.error("SA MMWAVE currently not support.")
return False
else:
if current_rat == 'NR':
ad.log.debug("Network is currently connected to %s", current_rat)
return True
else:
ad.log.error(
"Network is currently connected to %s, Expected on NR",
current_rat)
ad.screenshot("5g_sa_icon_checking")
return False
def is_current_network_5g(ad, sub_id = None, nr_type = None, mmwave = None,
timeout = 30):
"""Verifies 5G override network type
Args:
ad: android device object
sub_id: The target SIM for querying.
nr_type: 'sa' for 5G standalone, 'nsa' for 5G non-standalone.
mmwave: True to detect 5G millimeter wave, False to detect sub-6,
None to detect both.
timeout: max time to wait for event.
Returns:
True: if data is on 5G regardless of SA or NSA
False: if data is not on 5G refardless of SA or NSA
"""
sub_id = sub_id if sub_id else ad.droid.subscriptionGetDefaultDataSubId()
if nr_type == 'nsa':
return is_current_network_5g_nsa(
ad, sub_id=sub_id, mmwave=mmwave, timeout=timeout)
elif nr_type == 'sa':
return is_current_network_5g_sa(ad, sub_id=sub_id, mmwave=mmwave)
else:
return is_current_network_5g_nsa(
ad, sub_id=sub_id, mmwave=mmwave,
timeout=timeout) or is_current_network_5g_sa(
ad, sub_id=sub_id, mmwave=mmwave)