Hello miau,
when testing and analyzing the SUPL support for our beloved Sony devices I run sometimes, too into issues that the SoC modem did not connect to the non-TLS SUPL service.
In most cases two things worked for me:
- restarting the device (this will clear modem-internal cache) or
- killing the Android gpsd daemon as
devel-su
root user
[defaultuser@Xperia10II-DualSIM ~]$ ps -ef | grep gps
2904 gps {gnss@2.0-servic} /vendor/bin/hw/android.hardware.gnss@2.0-service-qti
The SUPL version string and possibly other settings from gps.conf
file are parsed by the Sony gnss
process. However its unclear to me what other settings are parsed and would require reverse engineering of the binary vendor file.
Your idea to use the go-proxy
tool as a local service for sniffing the communication will sadly not work on the device. The SoC modem runs some kind of parallel operating system in a restricted part of the CPU, i.e. non-secure userland state and secure modem OS state. Both zones can be linked by applets so Linux kernel driver from the non-secure state can call applet functions in secure state that utilizes the modem hardware or modem OS functions. Now when the modems gnss service tries to connect to 127.0.0.1:7276 that socket is not present in secure state but only in none secure state where you launched the proxy. You can compare this to some virtual machine where qemu as hypervisor is running the virtual machine and does its own networking stuff.
So finally here is my working gps.conf
for Xperia Mark II:
[defaultuser@Xperia10II-DualSIM ~]$ cat /system/vendor/etc/gps.conf
# XTRA_SERVER_QUERY (1=on, 0=off)
# If XTRA_SERVER_QUERY is on, the XTRA_SERVERs listed
# below will be ignored, and instead the servers will
# be queried from the modem.
XTRA_SERVER_QUERY=0
# XTRA_SERVERs below are used only if XTRA_SERVER_QUERY
# is off.
XTRA_SERVER_1=http://xtrapath1.izatcloud.net/xtra2.bin
XTRA_SERVER_2=http://xtrapath2.izatcloud.net/xtra2.bin
XTRA_SERVER_3=http://xtrapath3.izatcloud.net/xtra2.bin
# Error Estimate
# _SET = 1
# _CLEAR = 0
ERR_ESTIMATE=0
# NTP Server
# NTP_SERVER=time.gpsonextra.net
# Asia
# NTP_SERVER=asia.pool.ntp.org
# Europe
NTP_SERVER=europe.pool.ntp.org
# North America
# NTP_SERVER=north-america.pool.ntp.org
#NTP_SERVER = time.google.com
# If NTP_SERVER is commented NTP_SERVER=time.izatcloud.net is used
# DEBUG LEVELS: 0 - none, 1 - Error, 2 - Warning, 3 - Info
# 4 - Debug, 5 - Verbose
# If DEBUG_LEVEL is commented, Android's logging levels will be used
DEBUG_LEVEL = 1
# Intermediate position report, 1=enable, 0=disable
INTERMEDIATE_POS=0
# GPS Capabilities bit mask
# SCHEDULING = 0x01
# MSB = 0x02
# MSA = 0x04
# ON_DEMAND_TIME = 0x10
# GEOFENCE = 0x20
# default = ON_DEMAND_TIME | MSA | MSB | SCHEDULING | GEOFENCE
CAPABILITIES=0x37
# Accuracy threshold for intermediate positions
# less accurate positions are ignored, 0 for passing all positions
# ACCURACY_THRES=5000
################################
##### AGPS server settings #####
################################
# Bitmask of slots that are available
# for write/install to, where 1s indicate writable,
# and the default value is 0 where no slots
# are writable. For example, AGPS_CERT_WRITABLE_MASK
# of b1000001010 makes 3 slots available
# and the remaining 7 slots unwritable.
# AGPS_CERT_WRITABLE_MASK=0
# FOR SUPL SUPPORT, set the following
SUPL_HOST=supl.google.com
SUPL_PORT=7276
SUPL_VER=0x20000
################################
# EXTRA SETTINGS
################################
# NMEA provider (1=Modem Processor, 0=Application Processor)
NMEA_PROVIDER=0
# Mark if it is a SGLTE target (1=SGLTE, 0=nonSGLTE)
SGLTE_TARGET=0
##################################################
# Select technology for LPPe Control Plane
##################################################
# 0x1: DBH for LPPe CP
# 0x2: WLAN AP Measurements for LPPe CP
LPPE_CP_TECHNOLOGY = 0
##################################################
# Select technology for LPPe User Plane
##################################################
# 0x1: DBH for LPPe UP
# 0x2: WLAN AP Measurements for LPPe UP
LPPE_UP_TECHNOLOGY = 0
##################################################
# AGPS_CONFIG_INJECT
##################################################
# enable/disable injection of AGPS configurations:
# SUPL_VER
# SUPL_HOST
# SUPL_PORT
# SUPL_MODE
# SUPL_ES
# C2K_HOST
# C2K_PORT
# LPP_PROFILE
# A_GLONASS_POS_PROTOCOL_SELECT
# USE_EMERGENCY_PDN_FOR_EMERGENCY_SUPL
# GPS_LOCK
# 0: disable
# 1: enable
AGPS_CONFIG_INJECT = 1
# AP Coarse Timestamp Uncertainty
##################################################
# default : 10
# or as per clock uncertainty of product
AP_TIMESTAMP_UNCERTAINTY = 10
#####################################
#DR_SYNC Pulse Availability
#####################################
# 0 : DR_SYNC pulse not available (default)
# 1 : DR_SYNC pulse available
DR_SYNC_ENABLED = 0
#####################################
#PPS Device name
#####################################
PPS_DEVICENAME = /dev/pps0
#####################################
#AP Clock Accuracy
#####################################
AP_CLOCK_PPM = 100
#####################################
#MAX ms difference to detect missing pulse
#####################################
MISSING_PULSE_TIME_DELTA = 900
#####################################
#Propagation time uncertainty
#####################################
PROPAGATION_TIME_UNCERTAINTY = 1