Refactor GNSS script to support non QCT SOC.
Change-Id: Iec6fe2a826fb01e3012afd80ca3fb88fba704a48
diff --git a/acts_tests/acts_contrib/test_utils/gnss/gnss_test_utils.py b/acts_tests/acts_contrib/test_utils/gnss/gnss_test_utils.py
index 0c94b49..4f7faaf 100644
--- a/acts_tests/acts_contrib/test_utils/gnss/gnss_test_utils.py
+++ b/acts_tests/acts_contrib/test_utils/gnss/gnss_test_utils.py
@@ -80,6 +80,13 @@
"android.permission.READ_CONTACTS",
"android.permission.ACCESS_BACKGROUND_LOCATION"
]
+DISABLE_LTO_FILE_CONTENTS = """\
+LONGTERM_PSDS_SERVER_1="http://"
+LONGTERM_PSDS_SERVER_2="http://"
+LONGTERM_PSDS_SERVER_3="http://"
+NORMAL_PSDS_SERVER="http://"
+REALTIME_PSDS_SERVER="http://"
+"""
class GnssTestUtilsError(Exception):
@@ -125,7 +132,11 @@
"""
remount_device(ad)
ad.log.info("Enable GNSS VERBOSE Logging and persistent logcat.")
- ad.adb.shell("echo -e '\nDEBUG_LEVEL = 5' >> /vendor/etc/gps.conf")
+ if check_chipset_vendor_by_qualcomm(ad):
+ ad.adb.shell("echo -e '\nDEBUG_LEVEL = 5' >> /vendor/etc/gps.conf")
+ else:
+ ad.adb.shell("echo LogEnabled=true >> /data/vendor/gps/libgps.conf")
+ ad.adb.shell("chown gps.system /data/vendor/gps/libgps.conf")
ad.adb.shell("echo %r >> /data/local.prop" % LOCAL_PROP_FILE_CONTENTS)
ad.adb.shell("chmod 644 /data/local.prop")
ad.adb.shell("setprop persist.logd.logpersistd.size 20000")
@@ -198,10 +209,14 @@
remount_device(ad)
ad.log.info("Enable SUPL mode.")
ad.adb.shell("echo -e '\nSUPL_MODE=1' >> /etc/gps_debug.conf")
+ if not check_chipset_vendor_by_qualcomm(ad):
+ lto_mode(ad, True)
+ else:
+ reboot(ad)
def disable_supl_mode(ad):
- """Kill SUPL to test XTRA only test item.
+ """Kill SUPL to test XTRA/LTO only test item.
Args:
ad: An AndroidDevice object.
@@ -209,7 +224,10 @@
remount_device(ad)
ad.log.info("Disable SUPL mode.")
ad.adb.shell("echo -e '\nSUPL_MODE=0' >> /etc/gps_debug.conf")
- reboot(ad)
+ if not check_chipset_vendor_by_qualcomm(ad):
+ lto_mode(ad, True)
+ else:
+ reboot(ad)
def kill_xtra_daemon(ad):
@@ -219,8 +237,11 @@
ad: An AndroidDevice object.
"""
ad.root_adb()
- ad.log.info("Disable XTRA-daemon until next reboot.")
- ad.adb.shell("killall xtra-daemon", ignore_status=True)
+ if check_chipset_vendor_by_qualcomm(ad):
+ ad.log.info("Disable XTRA-daemon until next reboot.")
+ ad.adb.shell("killall xtra-daemon", ignore_status=True)
+ else:
+ lto_mode(ad, False)
def disable_private_dns_mode(ad):
@@ -245,13 +266,14 @@
"""
enable_gnss_verbose_logging(ad)
enable_compact_and_particle_fusion_log(ad)
- disable_xtra_throttle(ad)
+ if check_chipset_vendor_by_qualcomm(ad):
+ disable_xtra_throttle(ad)
+ set_gnss_qxdm_mask(ad, QXDM_MASKS)
enable_supl_mode(ad)
ad.adb.shell("settings put system screen_off_timeout 1800000")
wutils.wifi_toggle_state(ad, False)
ad.log.info("Setting Bluetooth state to False")
ad.droid.bluetoothToggleState(False)
- set_gnss_qxdm_mask(ad, QXDM_MASKS)
check_location_service(ad)
set_wifi_and_bt_scanning(ad, True)
disable_private_dns_mode(ad)
@@ -321,7 +343,11 @@
ad.adb.shell(
'find %s -name "*.txt" -type f -delete' % GNSSSTATUS_LOG_PATH,
ignore_status=True)
- output_path = posixpath.join(DEFAULT_QXDM_LOG_PATH, "logs")
+ if check_chipset_vendor_by_qualcomm(ad):
+ output_path = posixpath.join(DEFAULT_QXDM_LOG_PATH, "logs")
+ else:
+ output_path = ("/sdcard/Android/data/com.android.pixellogger/files"
+ "/logs/gps/")
ad.adb.shell("rm -rf %s" % output_path, ignore_status=True)
reboot(ad)
@@ -344,9 +370,15 @@
timeout=PULL_TIMEOUT, ignore_status=True)
shutil.make_archive(gnss_log_path, "zip", gnss_log_path)
shutil.rmtree(gnss_log_path)
- output_path = posixpath.join(DEFAULT_QXDM_LOG_PATH, "logs/.")
- file_count = ad.adb.shell(
- "find %s -type f -iname *.qmdl | wc -l" % output_path)
+ if check_chipset_vendor_by_qualcomm(ad):
+ output_path = posixpath.join(DEFAULT_QXDM_LOG_PATH, "logs/.")
+ file_count = ad.adb.shell(
+ "find %s -type f -iname *.qmdl | wc -l" % output_path)
+ else:
+ output_path = ("/sdcard/Android/data/com.android.pixellogger/files"
+ "/logs/gps/")
+ file_count = ad.adb.shell(
+ "find %s -type f -iname *.zip | wc -l" % output_path)
if not int(file_count) == 0:
qxdm_log_name = "QXDM_%s_%s" % (ad.model, ad.serial)
qxdm_log_path = posixpath.join(log_path, qxdm_log_name)
@@ -465,13 +497,22 @@
otherwise return False.
"""
ad.send_keycode("HOME")
- logcat_results = ad.search_logcat("XTRA download success. "
- "inject data into modem", begin_time)
- if logcat_results:
- ad.log.debug("%s" % logcat_results[-1]["log_message"])
- ad.log.info("XTRA downloaded and injected successfully.")
- return True
- ad.log.error("XTRA downloaded FAIL.")
+ if check_chipset_vendor_by_qualcomm(ad):
+ xtra_results = ad.search_logcat("XTRA download success. "
+ "inject data into modem", begin_time)
+ if xtra_results:
+ ad.log.debug("%s" % xtra_results[-1]["log_message"])
+ ad.log.info("XTRA downloaded and injected successfully.")
+ return True
+ ad.log.error("XTRA downloaded FAIL.")
+ else:
+ lto_results = ad.search_logcat("GnssPsdsAidl: injectPsdsData: "
+ "psdsType: 1", begin_time)
+ if lto_results:
+ ad.log.debug("%s" % lto_results[-1]["log_message"])
+ ad.log.info("LTO downloaded and injected successfully.")
+ return True
+ ad.log.error("LTO downloaded and inject FAIL.")
return False
@@ -603,6 +644,8 @@
Args:
ad: An AndroidDevice object.
"""
+ if not check_chipset_vendor_by_qualcomm(ad):
+ delete_lto_file(ad)
ad.log.info("Launch GTW GPSTool and Clear all GNSS aiding data")
ad.adb.shell("am start -S -n com.android.gpstool/.GPSTool --es mode clear")
time.sleep(10)
@@ -1190,7 +1233,9 @@
"""
for i in range(retries):
ad.log.info("Open an youtube video - attempt %d" % (i+1))
- ad.adb.shell("am start -a android.intent.action.VIEW -d \"%s\"" % url)
+ cmd = ("am start -n com.google.android.youtube/"
+ "com.google.android.youtube.UrlActivity -d \"%s\"" % url)
+ ad.adb.shell(cmd)
time.sleep(2)
out = ad.adb.shell(
"dumpsys activity | grep NewVersionAvailableActivity")
@@ -1443,6 +1488,7 @@
ad.stop_adb_logcat()
ad.start_adb_logcat()
+
def build_instrumentation_call(package,
runner,
test_methods=None,
@@ -1473,3 +1519,112 @@
for option_key, option_value in options.items():
cmd_builder.add_key_value_param(option_key, option_value)
return cmd_builder.build()
+
+
+def check_chipset_vendor_by_qualcomm(ad):
+ """Check if cipset vendor is by Qualcomm.
+
+ Args:
+ ad: An AndroidDevice object.
+
+ Returns:
+ True if it's by Qualcomm. False irf not.
+ """
+ ad.root_adb()
+ soc = str(ad.adb.shell("getprop gsm.version.ril-impl"))
+ ad.log.debug("SOC = %s" % soc)
+ return "Qualcomm" in soc
+
+
+def delete_lto_file(ad):
+ """Delete downloaded LTO files.
+
+ Args:
+ ad: An AndroidDevice object.
+ """
+ remount_device(ad)
+ status = ad.adb.shell("rm -rf /data/vendor/gps/lto*")
+ ad.log.info("Delete downloaded LTO files.\n%s" % status)
+
+
+def lto_mode(ad, state):
+ """Enable or Disable LTO mode.
+
+ Args:
+ ad: An AndroidDevice object.
+ state: True to enable. False to disable.
+ """
+ server_list = ["LONGTERM_PSDS_SERVER_1",
+ "LONGTERM_PSDS_SERVER_2",
+ "LONGTERM_PSDS_SERVER_3",
+ "NORMAL_PSDS_SERVER",
+ "REALTIME_PSDS_SERVER"]
+ delete_lto_file(ad)
+ tmp_path = tempfile.mkdtemp()
+ ad.pull_files("/etc/gps_debug.conf", tmp_path)
+ gps_conf_path = os.path.join(tmp_path, "gps_debug.conf")
+ gps_conf_file = open(gps_conf_path, "r")
+ lines = gps_conf_file.readlines()
+ gps_conf_file.close()
+ fout = open(gps_conf_path, "w")
+ if state:
+ for line in lines:
+ for server in server_list:
+ if server in line:
+ line = line.replace(line, "")
+ fout.write(line)
+ fout.close()
+ ad.push_system_file(gps_conf_path, "/etc/gps_debug.conf")
+ ad.log.info("Push back modified gps_debug.conf")
+ ad.log.info("LTO/RTO/RTI enabled")
+ else:
+ ad.adb.shell("echo %r >> /etc/gps_debug.conf" %
+ DISABLE_LTO_FILE_CONTENTS)
+ ad.log.info("LTO/RTO/RTI disabled")
+ reboot(ad)
+
+
+def start_pixel_logger(ad):
+ """adb to start pixel logger for GNSS logging.
+
+ Args:
+ ad: An AndroidDevice object.
+ """
+ start_timeout_sec = 60
+ start_cmd = ("am startservice -a com.android.pixellogger."
+ "service.logging.LoggingService.ACTION_START_LOGGING "
+ "-e intent_logger brcm_gps")
+ begin_time = get_current_epoch_time()
+ ad.log.info("Start Pixel Logger.")
+ ad.adb.shell(start_cmd)
+ while get_current_epoch_time() - begin_time <= start_timeout_sec * 1000:
+ start_result = ad.search_logcat("startRecording", begin_time)
+ if start_result:
+ ad.log.info("Pixel Logger starts recording successfully.")
+ break
+ else:
+ ad.log.warn("Pixel Logger fails to start recording.")
+
+
+def stop_pixel_logger(ad):
+ """adb to stop pixel logger for GNSS logging.
+
+ Args:
+ ad: An AndroidDevice object.
+ """
+ stop_timeout_sec = 300
+ stop_cmd = ("am startservice -a com.android.pixellogger."
+ "service.logging.LoggingService.ACTION_STOP_LOGGING "
+ "-e intent_logger brcm_gps")
+ begin_time = get_current_epoch_time()
+ ad.log.info("Stop Pixel Logger.")
+ ad.adb.shell(stop_cmd)
+ while get_current_epoch_time() - begin_time <= stop_timeout_sec * 1000:
+ stop_result = ad.search_logcat("LoggingService: Stopping service",
+ begin_time)
+ if stop_result:
+ ad.log.info("Pixel Logger stops successfully.")
+ break
+ else:
+ ad.log.warn(
+ "Pixel Logger fails to stop in %d seconds." % stop_timeout_sec)