Coder Social home page Coder Social logo

netmonster-core's People

Contributors

arefeena avatar handymenny avatar jeffreykog avatar mroczis avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

netmonster-core's Issues

TDD TA uses a strange scale on some Qualcomm devices

Some users have reported to me a strange behavior of TA when connected to 4G TDD (specifically WindTre's B38).
So I collected some data (40 points) and got this graph:

image

The result is that TA TDD approximate to: y = x/2 + 20.5
Where y is the TA reported by Android and x is the real TA (from baseband)

We have seen this behavior on Sony XZ1 (G8341), Xiaomi 10T (M2007J3SY), Realme GT Master (RMX3363).
Note that on these same devices TA FDD = TA / 2

Can anyone else reproduce this issue?

When is the band info null?

I am occasionally getting null band name and number for NR (Phone Samsung A32, Carrier T-Mobile). I realize that these values are defined as nullable int? and String?

I just wanted to make sure that I am not doing something wrong. Here is my code for collecting band info for NR:
` @OverRide
public ICellInfo processNr(CellNr cell) {
Log.d(TAG, "processNr() called with: cell = [" + cell + "]");
CellInfoNR nr = new CellInfoNR();
try {
nr.isRegistered = cell.getConnectionStatus() instanceof PrimaryConnection;
Network network = cell.getNetwork();
if (network != null) {
nr.iso = normalize(network.getIso());
nr.mcc = normalize(network.getMcc());
nr.mnc = normalize(network.getMnc());
}
BandNr band = cell.getBand();
if (band != null) {
nr.downArfcn = normalize(band.getDownlinkArfcn());
nr.downFreq = normalize(band.getDownlinkFrequency());
nr.band.channelNumber = normalize(band.getChannelNumber());
nr.band.bandName = normalize(band.getName());
nr.band.bandNumber = normalize(band.getNumber());
nr.band.bandFreq = normalize(band.getDownlinkFrequency());
}
nr.nci = normalize(cell.getNci());
nr.tac = normalize(cell.getTac());
nr.pci = normalize(cell.getPci());

            SignalNr signal = cell.getSignal();
            nr.dbm = signal.getDbm() != null ? signal.getDbm() : signal.getSsRsrp() != null ? signal.getSsRsrp() : Integer.MAX_VALUE;
            nr.asu = signal.getCsiRsrpAsu() != null ? normalize(signal.getCsiRsrpAsu()) : signal.getSsRsrpAsu() != null ? normalize(signal.getSsRsrpAsu()) : "";
            nr.csiRsrp = normalize(signal.getCsiRsrp());
            nr.csiRsrq = normalize(signal.getCsiRsrq());
            nr.csiSinr = normalize(signal.getCsiSinr());
            nr.csiRsrpAsu = normalize(signal.getCsiRsrpAsu());
            nr.ssRsrp = normalize(signal.getSsRsrp());
            nr.ssRsrq = normalize(signal.getSsRsrq());
            nr.ssSinr = normalize(signal.getSsSinr());
            nr.ssRsrpAsu = normalize(signal.getSsRsrpAsu());
            return nr;
        } catch (Exception e) {
            Log.e(TAG, "processNr: Caught Exception=" + e.getMessage());
            return null;
        }
    }`

when is the null value for band name and number expected?

Is the library still maintained?

Is the NetMonster Core library still being developed? I've seen many updates to NetMonster app but no changes here for almost half a year.

GetConnectionStatus never return SecondaryConnection

Hello,

I am trying to use netMonster-Core in my android project.

NetMonster app shows LTE primary cell + secondary bands used in LTE-Advance.
In the meantime, what I get with netMonsterCore sample is only the primary cell and "None Connection" cells, but I don't get the secondary cell.

image

image

I am missing something or maybe it is an issue in this library ?

Have a nice day

Lib crash with Oppo phones and Android 11

Hi mroczis,

My crashlitics report crash with nm-core with some Oppo phones: Reno4 5G and Find X2 Pro.
Thats the report:

Fatal Exception: java.lang.IllegalStateException: Pid 22150 has exceeded the number of permissible registered listeners. Ignoring request to add.
at android.os.Parcel.createExceptionOrNull(Parcel.java:2397)
at android.os.Parcel.createException(Parcel.java:2373)
at android.os.Parcel.readException(Parcel.java:2356)
at android.os.Parcel.readException(Parcel.java:2298)
at com.android.internal.telephony.ITelephonyRegistry$Stub$Proxy.listenForSubscriber(ITelephonyRegistry.java:1105)
at android.telephony.TelephonyRegistryManager.listenForSubscriber(TelephonyRegistryManager.java:231)
at android.telephony.TelephonyManager.listen(TelephonyManager.java:5775)
at cz.mroczis.netmonster.core.feature.config.SignalStrengthsSource$getFresh$1.run(SignalStrengthsSource.kt:59)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:254)
at android.os.HandlerThread.run(HandlerThread.java:67)

And another report:
Fatal Exception: java.lang.IllegalStateException: Pid 23469 has exceeded the number of permissible registered listeners. Ignoring request to add.
at android.os.Parcel.createExceptionOrNull(Parcel.java:2381)
at android.os.Parcel.createException(Parcel.java:2357)
at android.os.Parcel.readException(Parcel.java:2340)
at android.os.Parcel.readException(Parcel.java:2282)
at com.android.internal.telephony.ITelephonyRegistry$Stub$Proxy.listenForSubscriber(ITelephonyRegistry.java:1201)
at android.telephony.TelephonyRegistryManager.listenForSubscriber(TelephonyRegistryManager.java:231)
at android.telephony.TelephonyManager.listen(TelephonyManager.java:5776)
at cz.mroczis.netmonster.core.feature.config.CellLocationSource$getFresh$1.run(CellLocationSource.kt:56)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:233)
at android.os.HandlerThread.run(HandlerThread.java:67)

Thanks :)

Localization app

It is sad that the application is only in English - I propose to translate.
I am ready to help in the translation into Russian.
(For example, you can use Weblate, or any other service. It is completely free for open source projects.)

image

LTE-A 3CA BW has incorrect value

Hi,

Thanks for a great app! Dug through some of your source and wow, I had no idea it was such a pain to get the information displayed in the app.

I had a friend download the app and try it on a Xiaomi Mi 10 and got some interesting results. NetMonster correctly identifies LTE-A 3CA carrier agg with B1+B7+B20, but the bandwidth identified is not correct. Looking at 4636 it's evident that the phone is using 3CA 10+10+10MHz on B1+7+20, but NetMonster only shows 10 MHz. Speed tests are also reaching speeds which should be technically impossible on only 10 MHz.

I'm attaching some screenshots, as well as OCR'd LTE physical cell config since I saw in the source that you use that as an information source.

99127063_568433953814479_259767125369946112_n
98276385_700696930730791_1095795372963397632_n (1)

{
	{
		mConnectionStatus=PrimaryServing,
		mCellBandwidthDownlinkKhz=10000,
		mRat=19,
		mFrequencyRange=2,
		mChannelNumber=2147483647,
		mContextlds=[I@bd5822d,
		mPhysicalCellld=118
	},
	{
		mConnectionStatus=SecondaryServing,
		mCellBandwidthDownlinkKhz=10000,
		mRat=19,
		mFrequencyRange=2,
		mChannelNumber=2147483647,
		mContextlds=[I@3605362,
		mPhysicalCellld=94
	},
	{
		mConnectionStatus=SecondaryServing,
		mCellBandwidthDownlinkKhz=10000,
		mRat=19,
		mFrequencyRange=2,
		mChannelNumber=2147483647,
		mContextlds=[I@9378cf3,
		mPhysicalCellld=94
	}
}

Bandwidth detection for S21 5G

I have noticed the G-MoN Pro app is able to reliably detect the bandwidths of all primary and secondary cells on the Galaxy S21 5G, while Netmonster is not. I have been investigating the situation and i have found the source of this information. I have also looked around the codebase in an attempt to implement it by myself, but i'm not sure about the best implementation.

The Galaxy S21 gives the following serviceState info:

{mVoiceRegState=0(IN_SERVICE), mDataRegState=0(IN_SERVICE), mChannelNumber=3700, duplexMode()=1, mCellBandwidths=[10000, 20000, 20000, 15000, 10000], isManualNetworkSelection=false(automatic), getRilVoiceRadioTechnology=14(LTE), getRilDataRadioTechnology=14(LTE), mCssIndicator=unsupported, mCdmaRoamingIndicator=-1, mCdmaDefaultRoamingIndicator=-1, VoiceRegType=0, ImsVoiceAvail=2, Snap=0, MobileVoice=IN_SERVICE, MobileData=IN_SERVICE, MobileDataRoamingType=home, MobileDataRat=LTE, PsOnly=false, FemtocellInd=0, SprDisplayRoam=false, NrBearerStatus=0, 5gStatus=1, mIsEmergencyOnly=false, isUsingCarrierAggregation=true, mLteEarfcnRsrpBoost=0, mNetworkRegistrationInfos=[NetworkRegistrationInfo{ domain=CS transportType=WWAN registrationState=HOME roamingType=NOT_ROAMING accessNetworkTechnology=LTE rejectCause=0 emergencyEnabled=false availableServices=[VOICE,SMS,VIDEO] cellIdentity=CellIdentityLte:{ mCi=68165141 mPci=408 mTac=563 mEarfcn=3700 mBands=[] mBandwidth=2147483647 mMcc=204 mMnc=16 mAlphaLong=T-Mobile NL mAlphaShort=TMO NL mAdditionalPlmns={} mCsgInfo=null} voiceSpecificInfo=VoiceSpecificRegistrationInfo { mCssSupported=false mRoamingIndicator=0 mSystemIsInPrl=0 mDefaultRoamingIndicator=0} dataSpecificInfo=null nrState=NONE rRplmn=20416}, NetworkRegistrationInfo{ domain=PS transportType=WWAN registrationState=HOME roamingType=NOT_ROAMING accessNetworkTechnology=LTE rejectCause=0 emergencyEnabled=false availableServices=[DATA] cellIdentity=CellIdentityLte:{ mCi=68165141 mPci=408 mTac=563 mEarfcn=3700 mBands=[] mBandwidth=2147483647 mMcc=204 mMnc=16 mAlphaLong=T-Mobile NL mAlphaShort=TMO NL mAdditionalPlmns={} mCsgInfo=null} voiceSpecificInfo=null dataSpecificInfo=android.telephony.DataSpecificRegistrationInfo :{ maxDataCalls = 16 isDcNrRestricted = false isNrAvailable = true isEnDcAvailable = true LteVopsSupportInfo : mVopsSupport = 2 mEmcBearerSupport = 3 mIsUsingCarrierAggregation = true } nrState=NOT_RESTRICTED rRplmn=20416}], mNrFrequencyRange=0, mIsDataRoamingFromRegistration=false, mIsIwlanPreferred=false}

The interesting bit is in the following part:

mCellBandwidths=[10000, 20000, 20000, 15000, 10000]

This contains the bandwidths for the primary (index 0) and secondary cells. The mBandwidth field of a cell object is always empty. As far as i can see this entire information blob is only used for detecting CA and 5G activity, and it is not linked to the cell scanning itself.

Can you point me into the direction where and how i can implement the detection based on this field? I like to help, but i'm not yet fully comfortable with the Netmonster core codebase.

S22 (Exynos) reports TAC with wrong endianness

Since Android 12 update, new api (CellSource.ALL_CELL_INFO) reports LTE TAC with wrong byte order.

Example:
TAC is 0x55F1 (2201), api reports 0xF155 (61781)
TAC is 0x4658 (18008), api reports 0x5846 (22598)

Netmonster debug log: report.txt

Some Huawei devices report NR signal in absolute value

Some Huawei devices, specifically HUAWEI ELS-NX9 API 29, report NR (both NSA and SA) signal values in absolute value.
SS-RSRP and SS-RSRQ are affected for sure, while SS-SINR isn't affected. Extract of netmonster debug log attached.

Here you will find a quick fix that has been tested and solves the issue: handymenny@81c1df1
The values after the fix were compared to those read directly from the modem (bypassing Android and RIL), so I can confirm that the issue is really solved

netmonster-debug.txt

Workaround to detect 5G NSA without READ_PHONE_STATE permission?

Hello,

Since Android N, READ_PHONE_STATE permission is now considered as dangerous.
Since Android R, it's now required to access SERVICE_STATE intent.
It must be asked at runtime and the system ask for access to all the "Phone" permission group which can afraid users.

Do you know a workaround to detect 5G NSA without relying on SERVICE_STATE intent?

BR,

NR cells not detected when on NR-NSA (non-dedicated mode)

As the title suggests.

What I've been able to determine is the issue seems to be because you're not reading the NR cell given by TelephonyManager.getSignalStrength().getSignalStrengths(CellSignalStrengthNr.class).

That, from my own experience, appears to be the only place where the phone will report values for the NR cell in this circumstance, and even though it doesn't contain any identifiers, I would consider it better to include a cell from this source in any situation where you can detect a 5G connection state and no other NR cell available from other sources.

I have tried to use this together with the CellIdentities stored internally by ServiceState but have had mixed results, but who knows, maybe you might have an idea to get it working.

How to identify Secondary cells for Carrier aggregation LTE_CA, LTE_CA_NR

I have been searching online for this and didn't find an answer, so I am opening this issue for little guidance.

I am building an application that collects signal information. I ran my application alongside Netmonster and when LTE_CA is discovered Netmonster's UI shows a Primary cell followed by some secondary cells. From Netmonster Core I get the list of cell infos, but how to Identify secondary cells which are being aggregated in LTE_CA or LTE_CA_NR.

Any links or directions will be really helpful.

The nrState is now hidden on Android 12 Beta 3

Your NrNsaStateParser uses the ServiceState.toString() to parse some internal variables.
It used to work until Android 12. It does not work anymore on Android 12 Beta 3.
On Android 12 Beta 3 I get nrState=****.

Will the current implementation of NrNsaStateParser be broken on Android 12? Please notice that this happen even if you do not target API 31.

Show all sectors of a tower again

This GitHub page is more for the API than the Netmonster app directly, but still:
In the past Netmonster showed all sectors of a selected cell tower in the map screen. In an update that feature was removed and replaced by only showing logged sectors at a tower.
It was great to look in the map what sectors there are.
Now the app still knows all that through its databases, but does not show it to the user in that great extent.

Could this be added in again?

Inactive, waiting for system issue

Every single time I start this app, it goes "Inactive" mod and does not scan any cells. I can't find any option for this. Excluded the app from battery optimisation, no other apps force end this app, even disabled Huawei's darn app that kills apps, nothing worked at all. I'm getting sick of this, even old versions worked well than this new feature. How can I overcome this issue?

How to have band aggragation

Hello,

I can't find where is the bandwidth and frequency aggregation in lib, to get for example : 20+10+15 mhz and the frequency assiociated ?

Thanks MrOczis !
Cedric

GPS Request when no data

Hello mroczis,

When data is disable on phone, nm-core make a request gps each time we call getCells(CellSource.ALL_CELL_INFO).

Thanks fix it :)
Cédric

Which devices now support PhysicalChannelConfig?

The source code mentions 3 devices (Pixel 3 XL, OnePlus 6T, Xiaomi Mi 9T) that support the PhysicalChannelConfig API.

Are there any newer devices (with 5G NR support) that also support the PhysicalChannelConfig API?

MOCN postprocessor: False positves

When network operator isn't "synchronized" with cellinfo, MOCN post processor may replace the correct PLMN with the wrong one.

Example:

pre : CellLte(network=Network(mcc=222, mnc=10, iso=IT), eci=2***5, tac=4***, pci=0, band=BandLte(downlinkEarfcn=3025, number=7, name=2600), bandwidth=null, signal=SignalLte(rssi=-83, rsrp=-116.0, rsrq=-12.0, cqi=null, snr=null, timingAdvance=null), connectionStatus=PrimaryConnection(), subscriptionId=12, timestamp=602895)

service state network = Network(mcc=222, mnc=01, iso=IT)
network operator = Network(mcc=222, mnc=01, iso=IT)

post: CellLte(network=Network(mcc=222, mnc=01, iso=IT), eci=2***5, tac=4***, pci=0, band=BandLte(downlinkEarfcn=3025, number=7, name=2600), bandwidth=null, signal=SignalLte(rssi=-83, rsrp=-116.0, rsrq=-12.0, cqi=null, snr=null, timingAdvance=null), connectionStatus=PrimaryConnection(), subscriptionId=12, timestamp=602895)

## After 5 seconds

pre : CellLte(network=Network(mcc=222, mnc=10, iso=IT), eci=2***5, tac=4***, pci=0, band=BandLte(downlinkEarfcn=3025, number=7, name=2600), bandwidth=null, signal=SignalLte(rssi=-81, rsrp=-118.0, rsrq=-16.0, cqi=null, snr=null, timingAdvance=null), connectionStatus=NoneConnection(), subscriptionId=2147483647, timestamp=608775)

service state network = null
network operator = null

post: CellLte(network=Network(mcc=222, mnc=10, iso=IT), eci=2***5, tac=4***, pci=0, band=BandLte(downlinkEarfcn=3025, number=7, name=2600), bandwidth=null, signal=SignalLte(rssi=-81, rsrp=-118.0, rsrq=-16.0, cqi=null, snr=null, timingAdvance=null), connectionStatus=NoneConnection(), subscriptionId=2147483647, timestamp=608775)

This happens mostly in roaming or "emergency only" and is temporary, lasting at most two minutes and usually about ten seconds or so. But for those who use this library for cell mapping, it can significantly increase the number of cells with wrong plmn.

So I was wondering if the problem could be somehow mitigated, maybe applying that postprocessor only for some Android versions?
For example I see that Google marked the bug as fixed and added specific tests/APIs for MOCN in Android R.

IllegalStateException on some devices

Hi,

we're using this library for signal preprocessing in our app (open-rmbt-android) and are really satisfied with it. Thank you for providing and maintaining it!

What we're however seeing is quite some crashes with Samsung devices (A and S-Series) with this stacktrace:

java.lang.IllegalStateException: 
  at android.os.Parcel.createExceptionOrNull (Parcel.java:2393)
  at android.os.Parcel.createException (Parcel.java:2369)
  at android.os.Parcel.readException (Parcel.java:2352)
  at android.os.Parcel.readException (Parcel.java:2294)
  at com.android.internal.telephony.ITelephonyRegistry$Stub$Proxy.listenForSubscriber (ITelephonyRegistry.java:1105)
  at android.telephony.TelephonyRegistryManager.listenForSubscriber (TelephonyRegistryManager.java:231)
  at android.telephony.TelephonyManager.listen (TelephonyManager.java:6706)
  at cz.mroczis.netmonster.core.feature.config.TelephonyManagerListenersKt$requestSingleUpdate$1.run (TelephonyManagerListeners.kt:60)
  at android.os.Handler.handleCallback (Handler.java:938)
  at android.os.Handler.dispatchMessage (Handler.java:99)
  at android.os.Looper.loop (Looper.java:246)
  at android.os.HandlerThread.run (HandlerThread.java:67)
Caused by: android.os.RemoteException: 
  at com.android.server.TelephonyRegistry.add (TelephonyRegistry.java:1172)
  at com.android.server.TelephonyRegistry.listen (TelephonyRegistry.java:847)
  at com.android.server.TelephonyRegistry.listenForSubscriber (TelephonyRegistry.java:814)
  at com.android.internal.telephony.ITelephonyRegistry$Stub.onTransact (ITelephonyRegistry.java:453)
  at android.os.Binder.execTransactInternal (Binder.java:1195)

Do you have an idea on what could be causing these crashes?

CA combinations wrong

The CA combinations doesn't show the right number. For example I have a tower that projects 900+1800+2100+2600mhz but since the new update It only shows 1800mhz all the time. Or showing only 3CA when Im connected to 4CA.
So the projecting of the LTE frequency in the app are not right.

Lib crashes continue with some phones

Lib crashes continue :

Fatal Exception: java.lang.IllegalStateException: Pid 16907 has exceeded the number of permissible registered listeners. Ignoring request to add.
at android.os.Parcel.createExceptionOrNull(Parcel.java:2393)
at android.os.Parcel.createException(Parcel.java:2369)
at android.os.Parcel.readException(Parcel.java:2352)
at android.os.Parcel.readException(Parcel.java:2294)
at com.android.internal.telephony.ITelephonyRegistry$Stub$Proxy.listenForSubscriber(ITelephonyRegistry.java:1105)
at android.telephony.TelephonyRegistryManager.listenForSubscriber(TelephonyRegistryManager.java:231)
at android.telephony.TelephonyManager.listen(TelephonyManager.java:6706)
at cz.mroczis.netmonster.core.feature.config.TelephonyManagerListenersKt$requestSingleUpdate$1.run(TelephonyManagerListeners.kt:60)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:246)
at android.os.HandlerThread.run(HandlerThread.java:67)

CA Detection Issue (Mi 11 Ultra Global/Europe)

Hi,

I use the Netmonster App since a long time, but now since I have my new phone it does not work properly as it should. My Mi 11 Ultra is on MIUI 12.5.3 Android 11.
At home I have 2CA B1+20 from o2 Germany, but the app does not recognize it like with my old phone properly does.

I noticed that the system app phone info has wrong download and upload values, too. (Already told the MIUI Rom Developers)
I suspected that the current ROM of my phone sends wrong readouts, but today I traveled to another city and could read 2CA of B7+20 just fine.
The speeds are as expected and LTE+/4G+ icons are there.

Maybe it's also an issue with Netmonster Core. Idk.

new NR bands in user interface

For a long time I think that my phone didn't receive the N78 band, and that was a compeling reason to upgrade to Android 13 (which I don't like a lot). But I finally have just seen it "hidden" in the bands detailed listing. Netmonster (beta) does not reports its name (e.g. as "3500") but can be infered by the ARFCN by... power users on telephony.

These bands appear usually during data transfers, so it would be helpful not only to associate the name, but likely also to report them besides the "5G · NSA" legend and maybe in the notification (since the bands listing is continuously changing and scrolling up & down).

The fact that EARFCN and ARFCN are located at "different places" in the listing, makes it also more difficult to revise the listing before it refreshs. The lack of name and address "below" the N78 band also don't helps (I tend to associate these fields from the previous band):

cband

In Spain N78 it is very popular; in the last day I recall having seen at my home 648384, 636576 and 640704 (from Vodafone, Telefonica, Orange: the related frequencies match the new ranges reassigned this very same year).

The N28 band also appears occasionally.

As an aside note, after upgrading to Android 13, my phone now only shows a single notification icon (instead of one for "each SIM") and not necessarily the one you'd like to see (in Android 11 it there were two icons, although the order was somewhat random).

All in all, Netmonster (I'm a betatester) is a great tool for everyone (e.g. it reveals the actual underlaying carrier in use, when a single SIM uses several networks, as in Spain with operator Yoigo, which may be using Yoigo/Orange/Movistar networks). In fact, an option to show the actual carrier name from the active SIM in the notification area would be a great feature (I currently don't use Yoigo, but at the time I would have loved the feature).

Display issues when exiting car mode

On my pixel 7 I have the system theme (light) for the main interface and dark theme for the car interface. After switching from car mode back to the main interface often the display become corrupted with elements in the wrong color.

Screenshot_20230102-142625

NR cell detection on MTK 800U

I've used netmonster-core on Realme 7 5G and on Xiaomi Redmi Note 9t 5G with Mediatek 800U. I've found a particular behaviour with NR cell. First time is detected without ARFCN and PCI. Second time is detected only NR carrier with only ARFCN and PCI. This appears on DSS and NR in LTE_NR configuration.

image
image

report (3).txt

WCDMA cells get rscp null values in Samsung devices

First, let me thank you guys for this wonderful project. really saved my life.

Second, I'm trying to extract WCDMA info from my Samsung devices (galaxy s21 ultra 5g, galaxy A22).
and I get a lot of RSCP null values from the primary and secondary cells.
if I install the app on Huawei phones I get much better RSCP and RSSI values.

can you please tell me why it is like this or even better which device will bring me the most accurate data in all the technologies?? (WCDMA, LTE, 5G)

thanks in advance, david

Band in cell location: show both

The "band in cell location" preference, we can pick 2100 or B1, but what if we want both? Perhaps add an additional choice to show both.

Can a LTE primary cell have TAC and ECI null ?

Hello,

Thanks for sharing your libray. I ran into a situation where a LTE cell reported as PrimaryConnection had a null value both for TAC and ECI. I don't know if this a bug or this case may happen. FYI, I'm using an Oppo Find X5 pro with two SIM cards (one with subscription supporting only LTE, and the other SIM can support 5G). The issue occurrend on the first SIM supporting only LTE.

Thanks for your answer.

What permissions are really required?

I was wondering what permissions are really required? And which ones are optional?
What does missing some permissions cause?
Is it safe (e.g. no crash or exception thrown) to use the methods of this library even without all permissions?

For example I see that almost all methods require ACCESS_FINE_LOCATION, but some users have told me that netmonster (the app) seems to work fine with just ACCESS_COARSE_LOCATION.

It's more of a curiosity than an issue, although I'd like to see that in the documentation

International 901 MCC

So I went on a cruise ship with Cellular in it, and it was identified as 901-18 (Cellular at sea).

put on log the country was showing as -1.

maybe add it to the Database?

CONNECTION_SECONDARY_SERVING isn't reliable

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_SECONDARY_SERVING.
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:

  1. Assume CONNECTION_SECONDARY_SERVING equivalent to CONNECTION_NONE, i.e. ignore CONNECTION_SECONDARY_SERVING
  2. Ignore CONNECTION_SECONDARY_SERVING when there're multiple serving cells with same ARFCN or different RATs (i.e. LTE and WCDMA)
  3. Same as above, but permanently ignore until a new firmware update
  4. Ignore CONNECTION_SECONDARY_SERVING for devices known to report fake secondary serving cells (for example all devices with a Samsung baseband)

Examples

API Output

Google Pixel 7 (GVU6C) API 33

LTE:

[CellLte(network=Network(mcc=222, mnc=88, iso=IT), eci=XXXX, tac=XXXX, pci=8, band=BandLte(downlinkEarfcn=3350, number=7, name=2600), bandwidth=20000, signal=SignalLte(rssi=-69, rsrp=-106.0, rsrq=-7.0, cqi=11, snr=1.0, timingAdvance=23), connectionStatus=PrimaryConnection(), subscriptionId=4, timestamp=1888172),
CellLte(network=Network(mcc=222, mnc=88, iso=IT), eci=null, tac=null, pci=3, band=BandLte(downlinkEarfcn=1650, number=3, name=1800), bandwidth=null, signal=SignalLte(rssi=null, rsrp=-111.0, rsrq=-19.0, cqi=null, snr=-1.0, timingAdvance=0), connectionStatus=SecondaryConnection(isGuess=false), subscriptionId=4, timestamp=1888172),
CellLte(network=Network(mcc=222, mnc=88, iso=IT), eci=null, tac=null, pci=5, band=BandLte(downlinkEarfcn=1650, number=3, name=1800), bandwidth=null, signal=SignalLte(rssi=null, rsrp=-112.0, rsrq=-19.0, cqi=null, snr=-1.0, timingAdvance=0), connectionStatus=SecondaryConnection(isGuess=false), subscriptionId=4, timestamp=1888172),
CellLte(network=Network(mcc=222, mnc=88, iso=IT), eci=null, tac=null, pci=2, band=BandLte(downlinkEarfcn=6200, number=20, name=800), bandwidth=null, signal=SignalLte(rssi=null, rsrp=-91.0, rsrq=-16.0, cqi=null, snr=-1.0, timingAdvance=0), connectionStatus=SecondaryConnection(isGuess=false), subscriptionId=4, timestamp=1888172),
CellLte(network=Network(mcc=222, mnc=88, iso=IT), eci=null, tac=null, pci=9, band=BandLte(downlinkEarfcn=6200, number=20, name=800), bandwidth=null, signal=SignalLte(rssi=null, rsrp=-92.0, rsrq=-18.0, cqi=null, snr=-1.0, timingAdvance=0), connectionStatus=SecondaryConnection(isGuess=false), subscriptionId=4, timestamp=1888172)]

NR NSA:

[CellInfoNr:{ mRegistered=YES mTimeStamp=66070163213557ns mCellConnectionStatus=1 CellIdentityNr:{ mPci = 349 mTac = 16777215 mNrArfcn = 650666 mBands = [] mMcc = 222 mMnc = 01 mNci = 9223372036854775807 mAlphaLong =  mAlphaShort =  mAdditionalPlmns = {} } CellSignalStrengthNr:{ csiRsrp = 2147483647 csiRsrq = 2147483647 csiCqiTableIndex = 2147483647 csiCqiReport = [0] ssRsrp = -115 ssRsrq = -15 ssSinr = 0 level = 0 parametersUseForLevel = 0 } }
CellInfoNr:{ mRegistered=NO mTimeStamp=66070163213557ns mCellConnectionStatus=2 CellIdentityNr:{ mPci = 350 mTac = 2147483647 mNrArfcn = 648768 mBands = [] mMcc = null mMnc = null mNci = 9223372036854775807 mAlphaLong =  mAlphaShort =  mAdditionalPlmns = {} } CellSignalStrengthNr:{ csiRsrp = 2147483647 csiRsrq = 2147483647 csiCqiTableIndex = 2147483647 csiCqiReport = [0] ssRsrp = -117 ssRsrq = -15 ssSinr = 2147483647 level = 0 parametersUseForLevel = 0 } }]

Google Pixel 7 Pro (GP4BC) / API 33

[CellInfoLte:{mRegistered=YES mTimeStamp=75439291239966ns mCellConnectionStatus=1 CellIdentityLte:{ mCi=XXX mPci=3 mTac=XXXX mEarfcn=1350 mBands=[3] mBandwidth=20000 mMcc=222 mMnc=01 mAlphaLong= mAlphaShort= mAdditionalPlmns={} mCsgInfo=null} CellSignalStrengthLte: rssi=2147483647 rsrp=-98 rsrq=-12 rssnr=0 cqiTableIndex=2147483647 cqi=12 ta=2 level=2 parametersUseForLevel=0 android.telephony.CellConfigLte :{ isEndcAvailable = false }}
CellInfoLte:{mRegistered=NO mTimeStamp=75439291239966ns mCellConnectionStatus=2 CellIdentityLte:{ mCi=2147483647 mPci=432 mTac=2147483647 mEarfcn=1350 mBands=[] mBandwidth=0 mMcc=null mMnc=null mAlphaLong= mAlphaShort= mAdditionalPlmns={} mCsgInfo=null} CellSignalStrengthLte: rssi=2147483647 rsrp=-103 rsrq=-14 rssnr=-1 cqiTableIndex=2147483647 cqi=0 ta=0 level=2 parametersUseForLevel=0 android.telephony.CellConfigLte :{ isEndcAvailable = false }}]

Google Pixel 6a (G1AZG) / API 32

[CellNr(network=Network(mcc=222, mnc=50, iso=IT), nci=null, tac=null, pci=299, band=BandNr(downlinkArfcn=642000, downlinkFrequency=3630000, number=77, name=3700), signal=SignalNr(csiRsrp=null, csiRsrq=null, csiSinr=null, ssRsrp=-84, ssRsrq=-10, ssSinr=null), connectionStatus=PrimaryConnection(), subscriptionId=1, timestamp=189575682),
CellNr(network=Network(mcc=222, mnc=50, iso=IT), nci=null, tac=null, pci=298, band=BandNr(downlinkArfcn=641664, downlinkFrequency=3624960, number=null, name=null), signal=SignalNr(csiRsrp=null, csiRsrq=null, csiSinr=null, ssRsrp=-102, ssRsrq=-12, ssSinr=null), connectionStatus=SecondaryConnection(isGuess=false), subscriptionId=1, timestamp=189575682)]

Samsung S22 Ultra 5G (SM-S908B) / API 33

[CellInfoLte:{mRegistered=YES mTimeStamp=650041382678013ns mCellConnectionStatus=1 CellIdentityLte:{ mCi=****** mPci=499 mTac=*** mEarfcn=37900 mBands=[38] mBandwidth=2147483647 mMcc=222 mMnc=88 mAlphaLong=FASTWEB mAlphaShort=VERY mAdditionalPlmns={} mCsgInfo=null} CellSignalStrengthLte: rssi=-57 rsrp=-112 rsrq=-8 rssnr=1 cqiTableIndex=1 cqi=2147483647 ta=0 level=1 parametersUseForLevel=0 android.telephony.CellConfigLte :{ isEndcAvailable = false }}
CellInfoLte:{mRegistered=NO mTimeStamp=650041382678013ns mCellConnectionStatus=2 CellIdentityLte:{ mCi=0 mPci=9 mTac=0 mEarfcn=1650 mBands=[3] mBandwidth=2147483647 mMcc=null mMnc=null mAlphaLong= mAlphaShort= mAdditionalPlmns={} mCsgInfo=null} CellSignalStrengthLte: rssi=2147483647 rsrp=-116 rsrq=-19 rssnr=0 cqiTableIndex=2147483647 cqi=0 ta=0 level=0 parametersUseForLevel=0 android.telephony.CellConfigLte :{ isEndcAvailable = false }}
CellInfoLte:{mRegistered=NO mTimeStamp=650041382678013ns mCellConnectionStatus=2 CellIdentityLte:{ mCi=0 mPci=0 mTac=0 mEarfcn=1650 mBands=[3] mBandwidth=2147483647 mMcc=null mMnc=null mAlphaLong= mAlphaShort= mAdditionalPlmns={} mCsgInfo=null} CellSignalStrengthLte: rssi=2147483647 rsrp=-113 rsrq=-17 rssnr=0 cqiTableIndex=2147483647 cqi=0 ta=0 level=1 parametersUseForLevel=0 android.telephony.CellConfigLte :{ isEndcAvailable = false }}
CellInfoLte:{mRegistered=NO mTimeStamp=650041382678013ns mCellConnectionStatus=2 CellIdentityLte:{ mCi=0 mPci=5 mTac=0 mEarfcn=1650 mBands=[3] mBandwidth=2147483647 mMcc=null mMnc=null mAlphaLong= mAlphaShort= mAdditionalPlmns={} mCsgInfo=null} CellSignalStrengthLte: rssi=2147483647 rsrp=-116 rsrq=-19 rssnr=0 cqiTableIndex=2147483647 cqi=0 ta=0 level=0 parametersUseForLevel=0 android.telephony.CellConfigLte :{ isEndcAvailable = false }}
CellInfoLte:{mRegistered=NO mTimeStamp=650041382678013ns mCellConnectionStatus=2 CellIdentityLte:{ mCi=0 mPci=6 mTac=0 mEarfcn=125 mBands=[1] mBandwidth=2147483647 mMcc=null mMnc=null mAlphaLong= mAlphaShort= mAdditionalPlmns={} mCsgInfo=null} CellSignalStrengthLte: rssi=2147483647 rsrp=-113 rsrq=-16 rssnr=0 cqiTableIndex=2147483647 cqi=0 ta=0 level=1 parametersUseForLevel=0 android.telephony.CellConfigLte :{ isEndcAvailable = false }}
CellInfoLte:{mRegistered=NO mTimeStamp=650041382678013ns mCellConnectionStatus=2 CellIdentityLte:{ mCi=0 mPci=9 mTac=0 mEarfcn=125 mBands=[1] mBandwidth=2147483647 mMcc=null mMnc=null mAlphaLong= mAlphaShort= mAdditionalPlmns={} mCsgInfo=null} CellSignalStrengthLte: rssi=2147483647 rsrp=-117 rsrq=-20 rssnr=0 cqiTableIndex=2147483647 cqi=0 ta=0 level=0 parametersUseForLevel=0 android.telephony.CellConfigLte :{ isEndcAvailable = false }}
CellInfoLte:{mRegistered=NO mTimeStamp=650041382678013ns mCellConnectionStatus=2 CellIdentityLte:{ mCi=0 mPci=0 mTac=0 mEarfcn=6200 mBands=[20] mBandwidth=2147483647 mMcc=null mMnc=null mAlphaLong= mAlphaShort= mAdditionalPlmns={} mCsgInfo=null} CellSignalStrengthLte: rssi=2147483647 rsrp=-102 rsrq=-15 rssnr=0 cqiTableIndex=2147483647 cqi=0 ta=0 level=2 parametersUseForLevel=0 android.telephony.CellConfigLte :{ isEndcAvailable = false }}
CellInfoLte:{mRegistered=NO mTimeStamp=650041382678013ns mCellConnectionStatus=2 CellIdentityLte:{ mCi=0 mPci=1 mTac=0 mEarfcn=6200 mBands=[20] mBandwidth=2147483647 mMcc=null mMnc=null mAlphaLong= mAlphaShort= mAdditionalPlmns={} mCsgInfo=null} CellSignalStrengthLte: rssi=2147483647 rsrp=-105 rsrq=-18 rssnr=0 cqiTableIndex=2147483647 cqi=0 ta=0 level=2 parametersUseForLevel=0 android.telephony.CellConfigLte :{ isEndcAvailable = false }}
CellInfoLte:{mRegistered=NO mTimeStamp=650041382678013ns mCellConnectionStatus=2 CellIdentityLte:{ mCi=0 mPci=7 mTac=0 mEarfcn=6200 mBands=[20] mBandwidth=2147483647 mMcc=null mMnc=null mAlphaLong= mAlphaShort= mAdditionalPlmns={} mCsgInfo=null} CellSignalStrengthLte: rssi=2147483647 rsrp=-104 rsrq=-18 rssnr=0 cqiTableIndex=2147483647 cqi=0 ta=0 level=2 parametersUseForLevel=0 android.telephony.CellConfigLte :{ isEndcAvailable = false }}
CellInfoLte:{mRegistered=NO mTimeStamp=650041382678013ns mCellConnectionStatus=2 CellIdentityLte:{ mCi=0 mPci=4 mTac=0 mEarfcn=3350 mBands=[7] mBandwidth=2147483647 mMcc=null mMnc=null mAlphaLong= mAlphaShort= mAdditionalPlmns={} mCsgInfo=null} CellSignalStrengthLte: rssi=-65 rsrp=-123 rsrq=-15 rssnr=0 cqiTableIndex=2147483647 cqi=0 ta=0 level=0 parametersUseForLevel=0 android.telephony.CellConfigLte :{ isEndcAvailable = false }}
CellInfoLte:{mRegistered=NO mTimeStamp=650041382678013ns mCellConnectionStatus=2 CellIdentityLte:{ mCi=0 mPci=7 mTac=0 mEarfcn=3350 mBands=[7] mBandwidth=2147483647 mMcc=null mMnc=null mAlphaLong= mAlphaShort= mAdditionalPlmns={} mCsgInfo=null} CellSignalStrengthLte: rssi=-65 rsrp=-127 rsrq=-20 rssnr=0 cqiTableIndex=2147483647 cqi=0 ta=0 level=0 parametersUseForLevel=0 android.telephony.CellConfigLte :{ isEndcAvailable = false }}
CellInfoLte:{mRegistered=NO mTimeStamp=650041382678013ns mCellConnectionStatus=2 CellIdentityLte:{ mCi=0 mPci=19 mTac=0 mEarfcn=3350 mBands=[7] mBandwidth=2147483647 mMcc=null mMnc=null mAlphaLong= mAlphaShort= mAdditionalPlmns={} mCsgInfo=null} CellSignalStrengthLte: rssi=-65 rsrp=-125 rsrq=-17 rssnr=0 cqiTableIndex=2147483647 cqi=0 ta=0 level=0 parametersUseForLevel=0 android.telephony.CellConfigLte :{ isEndcAvailable = false }}
CellInfoLte:{mRegistered=NO mTimeStamp=650041382678013ns mCellConnectionStatus=2 CellIdentityLte:{ mCi=0 mPci=5 mTac=0 mEarfcn=10563 mBands=[] mBandwidth=2147483647 mMcc=null mMnc=null mAlphaLong= mAlphaShort= mAdditionalPlmns={} mCsgInfo=null} CellSignalStrengthLte: rssi=-69 rsrp=-113 rsrq=-24 rssnr=0 cqiTableIndex=2147483647 cqi=0 ta=0 level=1 parametersUseForLevel=0 android.telephony.CellConfigLte :{ isEndcAvailable = false }}
CellInfoLte:{mRegistered=NO mTimeStamp=650041382678013ns mCellConnectionStatus=2 CellIdentityLte:{ mCi=0 mPci=1 mTac=0 mEarfcn=3063 mBands=[7] mBandwidth=2147483647 mMcc=null mMnc=null mAlphaLong= mAlphaShort= mAdditionalPlmns={} mCsgInfo=null} CellSignalStrengthLte: rssi=2147483647 rsrp=-102 rsrq=-24 rssnr=0 cqiTableIndex=2147483647 cqi=0 ta=0 level=2 parametersUseForLevel=0 android.telephony.CellConfigLte :{ isEndcAvailable = false }}]

Netmonster Screenshots

Pixel 6

image
image

Pixel 7

image

S22 Ultra

image

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.