diff options
author | PaulK <contact@paulk.fr> | 2011-11-22 21:50:42 +0100 |
---|---|---|
committer | PaulK <contact@paulk.fr> | 2011-11-22 21:50:42 +0100 |
commit | 233f0f23c75971de36d77605572c9df6b344ca73 (patch) | |
tree | 06598ad50aa97a30041d05ab9c0e8d13c797ea51 /disp.c | |
parent | 791fd3e4a946c05d6598f5054075515df6327b7d (diff) | |
download | hardware_replicant_libsamsung-ril-233f0f23c75971de36d77605572c9df6b344ca73.tar.gz hardware_replicant_libsamsung-ril-233f0f23c75971de36d77605572c9df6b344ca73.tar.bz2 hardware_replicant_libsamsung-ril-233f0f23c75971de36d77605572c9df6b344ca73.zip |
Modified samsung-ril to work on Nexus S.
Currently, the following is working:
* (automatic) network registration (clean and stable)
* SMS (no clean queue engine and no support for multiple message SMS)
* SIM I/O
* Other minor stuff
And the following is left to do:
* DATA (3G)
* airplane to normal power mode
* calls (including audio routing)
* RFS messages handling (mostly to be done at IPC level)
* Other minor stuff
Diffstat (limited to 'disp.c')
-rw-r--r-- | disp.c | 76 |
1 files changed, 76 insertions, 0 deletions
@@ -0,0 +1,76 @@ +#define LOG_TAG "RIL-DISP" +#include <utils/Log.h> + +#include "samsung-ril.h" +#include "util.h" + +extern const struct RIL_Env *rilenv; +extern struct radio_state radio; +extern struct ipc_client *ipc_client; + +void respondIconSignalStrength(RIL_Token t, void *data, int length) +{ + struct ipc_disp_icon_info *signal_info = (struct ipc_disp_icon_info*)data; + RIL_SignalStrength ss; + int rssi; + + /* Don't consider this if modem isn't in normal power mode. */ + if(radio.power_mode < POWER_MODE_NORMAL) + return; + + memset(&ss, 0, sizeof(ss)); + + /* Multiplying the number of bars by 3 yields + * an asu with an equal number of bars in Android + */ + rssi = (3 * signal_info->rssi); + + ss.GW_SignalStrength.signalStrength = rssi; + ss.GW_SignalStrength.bitErrorRate = 99; + + /* Send CDMA and EVDO levels even in GSM mode */ + ss.CDMA_SignalStrength.dbm = rssi; + ss.CDMA_SignalStrength.ecio = 200; + + ss.EVDO_SignalStrength.dbm = rssi; + ss.EVDO_SignalStrength.ecio = 200; + + LOGD("Signal Strength is %d\n", rssi); + + RIL_onUnsolicitedResponse(RIL_UNSOL_SIGNAL_STRENGTH, &ss, sizeof(ss)); +} + +void respondSignalStrength(RIL_Token t, void *data, int length) +{ + struct ipc_disp_rssi_info *rssi_info = (struct ipc_disp_rssi_info*)data; + RIL_SignalStrength ss; + int rssi; + + /* Don't consider this if modem isn't in normal power mode. */ + if(radio.power_mode < POWER_MODE_NORMAL) + return; + + memset(&ss, 0, sizeof(ss)); + + if(rssi_info->rssi > 0x6f) { + rssi = 0; + } else { + rssi = (((rssi_info->rssi - 0x71) * -1) - ((rssi_info->rssi - 0x71) * -1) % 2) / 2; + if(rssi > 31) + rssi = 31; + } + + /* Send CDMA and EVDO levels even in GSM mode */ + ss.GW_SignalStrength.signalStrength = rssi; + ss.GW_SignalStrength.bitErrorRate = 99; + + ss.CDMA_SignalStrength.dbm = rssi; + ss.CDMA_SignalStrength.ecio = 200; + + ss.EVDO_SignalStrength.dbm = rssi; + ss.EVDO_SignalStrength.ecio = 200; + + LOGD("Signal Strength is %d\n", rssi); + + RIL_onUnsolicitedResponse(RIL_UNSOL_SIGNAL_STRENGTH, &ss, sizeof(ss)); +} |