Loading android/app/src/com/android/bluetooth/hfp/HeadsetPhoneState.java +3 −119 Original line number Diff line number Diff line Loading @@ -323,134 +323,18 @@ public class HeadsetPhoneState { @Override public void onSignalStrengthsChanged(SignalStrength signalStrength) { int prevSignal = mCindSignal; if (mCindService == HeadsetHalConstants.NETWORK_STATE_NOT_AVAILABLE) { mCindSignal = 0; } else if (signalStrength.isGsm()) { mCindSignal = signalStrength.getLteLevel(); if (mCindSignal == SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN) { mCindSignal = gsmAsuToSignal(signalStrength); } else { // SignalStrength#getLteLevel returns the scale from 0-4 // Bluetooth signal scales at 0-5 // Let's match up the larger side mCindSignal++; } } else { mCindSignal = cdmaDbmEcioToSignal(signalStrength); mCindSignal = signalStrength.getLevel() + 1; } // network signal strength is scaled to BT 1-5 levels. // +CIND "signal" indicator is always between 0 to 5 mCindSignal = Integer.max(Integer.min(mCindSignal, 5), 0); // This results in a lot of duplicate messages, hence this check if (prevSignal != mCindSignal) { sendDeviceStateChanged(); } } /* convert [0,31] ASU signal strength to the [0,5] expected by * bluetooth devices. Scale is similar to status bar policy */ private int gsmAsuToSignal(SignalStrength signalStrength) { int asu = signalStrength.getGsmSignalStrength(); if (asu == 99) { return 0; } else if (asu >= 16) { return 5; } else if (asu >= 8) { return 4; } else if (asu >= 4) { return 3; } else if (asu >= 2) { return 2; } else if (asu >= 1) { return 1; } else { return 0; } } /** * Convert the cdma / evdo db levels to appropriate icon level. * The scale is similar to the one used in status bar policy. * * @param signalStrength signal strength level * @return the icon level for remote device */ private int cdmaDbmEcioToSignal(SignalStrength signalStrength) { int levelDbm = 0; int levelEcio = 0; int cdmaIconLevel = 0; int evdoIconLevel = 0; int cdmaDbm = signalStrength.getCdmaDbm(); int cdmaEcio = signalStrength.getCdmaEcio(); if (cdmaDbm >= -75) { levelDbm = 4; } else if (cdmaDbm >= -85) { levelDbm = 3; } else if (cdmaDbm >= -95) { levelDbm = 2; } else if (cdmaDbm >= -100) { levelDbm = 1; } else { levelDbm = 0; } // Ec/Io are in dB*10 if (cdmaEcio >= -90) { levelEcio = 4; } else if (cdmaEcio >= -110) { levelEcio = 3; } else if (cdmaEcio >= -130) { levelEcio = 2; } else if (cdmaEcio >= -150) { levelEcio = 1; } else { levelEcio = 0; } cdmaIconLevel = (levelDbm < levelEcio) ? levelDbm : levelEcio; // STOPSHIP: Change back to getRilVoiceRadioTechnology if (mServiceState != null && ( mServiceState.getRadioTechnology() == ServiceState.RIL_RADIO_TECHNOLOGY_EVDO_0 || mServiceState.getRadioTechnology() == ServiceState.RIL_RADIO_TECHNOLOGY_EVDO_A)) { int evdoEcio = signalStrength.getEvdoEcio(); int evdoSnr = signalStrength.getEvdoSnr(); int levelEvdoEcio = 0; int levelEvdoSnr = 0; // Ec/Io are in dB*10 if (evdoEcio >= -650) { levelEvdoEcio = 4; } else if (evdoEcio >= -750) { levelEvdoEcio = 3; } else if (evdoEcio >= -900) { levelEvdoEcio = 2; } else if (evdoEcio >= -1050) { levelEvdoEcio = 1; } else { levelEvdoEcio = 0; } if (evdoSnr > 7) { levelEvdoSnr = 4; } else if (evdoSnr > 5) { levelEvdoSnr = 3; } else if (evdoSnr > 3) { levelEvdoSnr = 2; } else if (evdoSnr > 1) { levelEvdoSnr = 1; } else { levelEvdoSnr = 0; } evdoIconLevel = (levelEvdoEcio < levelEvdoSnr) ? levelEvdoEcio : levelEvdoSnr; } // TODO(): There is a bug open regarding what should be sent. return (cdmaIconLevel > evdoIconLevel) ? cdmaIconLevel : evdoIconLevel; } } } Loading
android/app/src/com/android/bluetooth/hfp/HeadsetPhoneState.java +3 −119 Original line number Diff line number Diff line Loading @@ -323,134 +323,18 @@ public class HeadsetPhoneState { @Override public void onSignalStrengthsChanged(SignalStrength signalStrength) { int prevSignal = mCindSignal; if (mCindService == HeadsetHalConstants.NETWORK_STATE_NOT_AVAILABLE) { mCindSignal = 0; } else if (signalStrength.isGsm()) { mCindSignal = signalStrength.getLteLevel(); if (mCindSignal == SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN) { mCindSignal = gsmAsuToSignal(signalStrength); } else { // SignalStrength#getLteLevel returns the scale from 0-4 // Bluetooth signal scales at 0-5 // Let's match up the larger side mCindSignal++; } } else { mCindSignal = cdmaDbmEcioToSignal(signalStrength); mCindSignal = signalStrength.getLevel() + 1; } // network signal strength is scaled to BT 1-5 levels. // +CIND "signal" indicator is always between 0 to 5 mCindSignal = Integer.max(Integer.min(mCindSignal, 5), 0); // This results in a lot of duplicate messages, hence this check if (prevSignal != mCindSignal) { sendDeviceStateChanged(); } } /* convert [0,31] ASU signal strength to the [0,5] expected by * bluetooth devices. Scale is similar to status bar policy */ private int gsmAsuToSignal(SignalStrength signalStrength) { int asu = signalStrength.getGsmSignalStrength(); if (asu == 99) { return 0; } else if (asu >= 16) { return 5; } else if (asu >= 8) { return 4; } else if (asu >= 4) { return 3; } else if (asu >= 2) { return 2; } else if (asu >= 1) { return 1; } else { return 0; } } /** * Convert the cdma / evdo db levels to appropriate icon level. * The scale is similar to the one used in status bar policy. * * @param signalStrength signal strength level * @return the icon level for remote device */ private int cdmaDbmEcioToSignal(SignalStrength signalStrength) { int levelDbm = 0; int levelEcio = 0; int cdmaIconLevel = 0; int evdoIconLevel = 0; int cdmaDbm = signalStrength.getCdmaDbm(); int cdmaEcio = signalStrength.getCdmaEcio(); if (cdmaDbm >= -75) { levelDbm = 4; } else if (cdmaDbm >= -85) { levelDbm = 3; } else if (cdmaDbm >= -95) { levelDbm = 2; } else if (cdmaDbm >= -100) { levelDbm = 1; } else { levelDbm = 0; } // Ec/Io are in dB*10 if (cdmaEcio >= -90) { levelEcio = 4; } else if (cdmaEcio >= -110) { levelEcio = 3; } else if (cdmaEcio >= -130) { levelEcio = 2; } else if (cdmaEcio >= -150) { levelEcio = 1; } else { levelEcio = 0; } cdmaIconLevel = (levelDbm < levelEcio) ? levelDbm : levelEcio; // STOPSHIP: Change back to getRilVoiceRadioTechnology if (mServiceState != null && ( mServiceState.getRadioTechnology() == ServiceState.RIL_RADIO_TECHNOLOGY_EVDO_0 || mServiceState.getRadioTechnology() == ServiceState.RIL_RADIO_TECHNOLOGY_EVDO_A)) { int evdoEcio = signalStrength.getEvdoEcio(); int evdoSnr = signalStrength.getEvdoSnr(); int levelEvdoEcio = 0; int levelEvdoSnr = 0; // Ec/Io are in dB*10 if (evdoEcio >= -650) { levelEvdoEcio = 4; } else if (evdoEcio >= -750) { levelEvdoEcio = 3; } else if (evdoEcio >= -900) { levelEvdoEcio = 2; } else if (evdoEcio >= -1050) { levelEvdoEcio = 1; } else { levelEvdoEcio = 0; } if (evdoSnr > 7) { levelEvdoSnr = 4; } else if (evdoSnr > 5) { levelEvdoSnr = 3; } else if (evdoSnr > 3) { levelEvdoSnr = 2; } else if (evdoSnr > 1) { levelEvdoSnr = 1; } else { levelEvdoSnr = 0; } evdoIconLevel = (levelEvdoEcio < levelEvdoSnr) ? levelEvdoEcio : levelEvdoSnr; } // TODO(): There is a bug open regarding what should be sent. return (cdmaIconLevel > evdoIconLevel) ? cdmaIconLevel : evdoIconLevel; } } }