Closed handymenny closed 1 year ago
Looks like Samsung modem surprises are now bubbling up to Pixels. I also bumped into this on Pixel 7 Pro, should be fixed with the latest commits.
BTW - I reported this issue directly to Google via bug tracker but for some reason that issue is not longer accessible for public... https://issuetracker.google.com/issues/254843949
Oh well, good timing :) Are these changes already included in the netmonster APP? Some of the reports above are quite recent
Included in version 2.21.7
Included in version 2.21.7
Ok well, then I found a corner case where it doesn't work.
Pixel 7 Pro.
Netmonster w/o postprocessing:
CellLte(network=Network(mcc=222, mnc=01, iso=IT), eci=1***2, tac=9**3, pci=null, band=null, aggregatedBands=[], bandwidth=null, signal=SignalLte(rssi=-71, rsrp=-87.0, rsrq=-7.0, cqi=10, snr=5.0, timingAdvance=3), connectionStatus=PrimaryConnection(), subscriptionId=1, timestamp=null)
CellNr(network=null, nci=null, tac=null, pci=8, band=BandNr(downlinkArfcn=648768, downlinkFrequency=3731520, number=null, name=null), signal=SignalNr(csiRsrp=null, csiRsrq=null, csiSinr=null, ssRsrp=-114, ssRsrq=-15, ssSinr=null), connectionStatus=SecondaryConnection(isGuess=false), subscriptionId=1, timestamp=62013560)
CellNr(network=null, nci=null, tac=null, pci=9, band=BandNr(downlinkArfcn=648768, downlinkFrequency=3731520, number=null, name=null), signal=SignalNr(csiRsrp=null, csiRsrq=null, csiSinr=null, ssRsrp=-115, ssRsrq=-16, ssSinr=null), connectionStatus=SecondaryConnection(isGuess=false), subscriptionId=1, timestamp=62013560)
CellNr(network=Network(mcc=222, mnc=01, iso=IT), nci=null, tac=null, pci=0, band=BandNr(downlinkArfcn=650666, downlinkFrequency=3759990, number=null, name=null), signal=SignalNr(csiRsrp=null, csiRsrq=null, csiSinr=null, ssRsrp=-115, ssRsrq=-16, ssSinr=-3), connectionStatus=SecondaryConnection(isGuess=false), subscriptionId=1, timestamp=62013560)
Netmonster with postprocessing:
CellLte(network=Network(mcc=222, mnc=01, iso=IT), eci=1***2, tac=9**3, pci=null, band=null, aggregatedBands=[], bandwidth=null, signal=SignalLte(rssi=-71, rsrp=-87.0, rsrq=-7.0, cqi=10, snr=5.0, timingAdvance=3), connectionStatus=PrimaryConnection(), subscriptionId=1, timestamp=null)
CellNr(network=Network(mcc=222, mnc=01, iso=IT), nci=null, tac=null, pci=9, band=BandNr(downlinkArfcn=648768, downlinkFrequency=3731520, number=null, name=null), signal=SignalNr(csiRsrp=null, csiRsrq=null, csiSinr=null, ssRsrp=-113, ssRsrq=-15, ssSinr=null), connectionStatus=SecondaryConnection(isGuess=false), subscriptionId=1, timestamp=62010706)
CellNr(network=Network(mcc=222, mnc=01, iso=IT), nci=null, tac=null, pci=8, band=BandNr(downlinkArfcn=648768, downlinkFrequency=3731520, number=null, name=null), signal=SignalNr(csiRsrp=null, csiRsrq=null, csiSinr=null, ssRsrp=-114, ssRsrq=-15, ssSinr=null), connectionStatus=SecondaryConnection(isGuess=false), subscriptionId=1, timestamp=62010706)
CellNr(network=Network(mcc=222, mnc=01, iso=IT), nci=null, tac=null, pci=0, band=BandNr(downlinkArfcn=650666, downlinkFrequency=3759990, number=null, name=null), signal=SignalNr(csiRsrp=null, csiRsrq=null, csiSinr=null, ssRsrp=-115, ssRsrq=-16, ssSinr=-3), connectionStatus=SecondaryConnection(isGuess=false), subscriptionId=1, timestamp=62010706)
CellSource.ALL_CELL_INFO:
CellNr(network=Network(mcc=222, mnc=01, iso=IT), nci=null, tac=null, pci=0, band=BandNr(downlinkArfcn=650666, downlinkFrequency=3759990, number=null, name=null), signal=SignalNr(csiRsrp=null, csiRsrq=null, csiSinr=null, ssRsrp=-112, ssRsrq=-15, ssSinr=5), connectionStatus=SecondaryConnection(isGuess=false), subscriptionId=2147483647, timestamp=62013560)
CellNr(network=null, nci=null, tac=null, pci=8, band=BandNr(downlinkArfcn=648768, downlinkFrequency=3731520, number=null, name=null), signal=SignalNr(csiRsrp=null, csiRsrq=null, csiSinr=null, ssRsrp=-114, ssRsrq=-15, ssSinr=null), connectionStatus=SecondaryConnection(isGuess=false), subscriptionId=2147483647, timestamp=62013560)
CellNr(network=null, nci=null, tac=null, pci=9, band=BandNr(downlinkArfcn=648768, downlinkFrequency=3731520, number=null, name=null), signal=SignalNr(csiRsrp=null, csiRsrq=null, csiSinr=null, ssRsrp=-115, ssRsrq=-16, ssSinr=null), connectionStatus=SecondaryConnection(isGuess=false), subscriptionId=2147483647, timestamp=62013560)
CellSource.CELL_LOCATION:
CellLte(network=Network(mcc=222, mnc=01, iso=IT), eci=1***2, tac=9**3, pci=null, band=null, aggregatedBands=[], bandwidth=null, signal=SignalLte(rssi=-71, rsrp=-87.0, rsrq=-7.0, cqi=10, snr=5.0, timingAdvance=3), connectionStatus=PrimaryConnection(), subscriptionId=2147483647, timestamp=null)
After some debugging, I figured out that has_primary check is false because postprocessing is done before merging the sources: https://github.com/mroczis/netmonster-core/blob/dadc56aac244ecacd85b205779baf0001b794093/library/src/main/java/cz/mroczis/netmonster/core/feature/postprocess/InvalidSecondaryCellsPostprocessor.kt#L20 https://github.com/mroczis/netmonster-core/blob/dadc56aac244ecacd85b205779baf0001b794093/library/src/main/java/cz/mroczis/netmonster/core/NetMonster.kt#L118
The problem is that solving this issue will break the NR NSA detection... We would need to run this postprocessor before PLMN guess, so we can do something like:
if ((cell.connectionStatus as? SecondaryConnection)?.isGuess == false && (hasPrimary || cell.network == null)) {
cell.let(CellConnectionSwitcher)
} else {
cell
}
Or alternatively a new check here (nci == null && network == null && connection is SecondaryConnection
): https://github.com/mroczis/netmonster-core/blob/8d4a8c967ade8245dbbdd7297c9a8120e95cc4a3/library/src/main/java/cz/mroczis/netmonster/core/telephony/mapper/cell/CellMapperNr.kt#L47-L54
Or a new postprocessor
Description
Some devices, mainly those with a Samsung baseband, use CONNECTION_SECONDARY_SERVING even for cells that aren't used for data. In some cases all neighbor cells have connectionStatus = _CONNECTION_SECONDARYSERVING. This can be easily seen in the following examples, where multiple cells with the same ARFCN or even cells on different networks (ran sharing) are marked as primary/secondary serving. For NR take the following issue into account: CellIdentityNr#getNrarfcn() is ambigous: SSB or Carrier centre?
Suggestions
These are some ways to fix/mitigate this issue:
Examples
API Output
Google Pixel 7 (GVU6C) API 33
LTE:
NR NSA:
Google Pixel 7 Pro (GP4BC) / API 33
Google Pixel 6a (G1AZG) / API 32
Samsung S22 Ultra 5G (SM-S908B) / API 33
Netmonster Screenshots
Pixel 6
Pixel 7
S22 Ultra