summaryrefslogtreecommitdiffstats
path: root/disp.c
diff options
context:
space:
mode:
authorPaulK <contact@paulk.fr>2011-11-22 21:50:42 +0100
committerPaulK <contact@paulk.fr>2011-11-22 21:50:42 +0100
commit233f0f23c75971de36d77605572c9df6b344ca73 (patch)
tree06598ad50aa97a30041d05ab9c0e8d13c797ea51 /disp.c
parent791fd3e4a946c05d6598f5054075515df6327b7d (diff)
downloadhardware_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.c76
1 files changed, 76 insertions, 0 deletions
diff --git a/disp.c b/disp.c
new file mode 100644
index 0000000..de533ca
--- /dev/null
+++ b/disp.c
@@ -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));
+}