summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--disp.c83
-rw-r--r--samsung-ril.c4
-rw-r--r--samsung-ril.h1
3 files changed, 49 insertions, 39 deletions
diff --git a/disp.c b/disp.c
index 5c59554..2d7c8e9 100644
--- a/disp.c
+++ b/disp.c
@@ -25,69 +25,74 @@
#include "samsung-ril.h"
#include "util.h"
-void ipc_disp_icon_info(struct ipc_message_info *info)
+/**
+ * Converts IPC RSSI to Android RIL format
+ */
+void ipc2ril_rssi(unsigned char rssi, RIL_SignalStrength *ss)
{
- struct ipc_disp_icon_info *signal_info = (struct ipc_disp_icon_info *) info->data;
- RIL_SignalStrength ss;
- int rssi;
+ int ril_rssi;
- /* Don't consider this if modem isn't in normal power mode. */
- if(ril_state.power_mode < POWER_MODE_NORMAL)
- return;
+ memset(ss, 0, sizeof(ss));
- memset(&ss, 0, sizeof(ss));
+ if(rssi > 0x6f) {
+ ril_rssi = 0;
+ } else {
+ ril_rssi = (((rssi - 0x71) * -1) - ((rssi - 0x71) * -1) % 2) / 2;
+ if(ril_rssi > 31)
+ ril_rssi = 31;
+ }
- /* Multiplying the number of bars by 3 yields
- * an asu with an equal number of bars in Android
- */
- rssi = (3 * signal_info->rssi);
+ LOGD("Signal Strength is %d\n", ril_rssi);
- ss.GW_SignalStrength.signalStrength = rssi;
- ss.GW_SignalStrength.bitErrorRate = 99;
+ ss->GW_SignalStrength.signalStrength = ril_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->CDMA_SignalStrength.dbm = ril_rssi;
+ ss->CDMA_SignalStrength.ecio = 200;
- ss.EVDO_SignalStrength.dbm = rssi;
- ss.EVDO_SignalStrength.ecio = 200;
+ ss->EVDO_SignalStrength.dbm = ril_rssi;
+ ss->EVDO_SignalStrength.ecio = 200;
+}
- LOGD("Signal Strength is %d\n", rssi);
+void ril_request_signal_strength(RIL_Token t)
+{
+ unsigned char request = 1;
- RIL_onUnsolicitedResponse(RIL_UNSOL_SIGNAL_STRENGTH, &ss, sizeof(ss));
+ ipc_fmt_send(IPC_DISP_ICON_INFO, IPC_TYPE_GET, &request, sizeof(request), reqGetId(t));
}
-void ipc_disp_rssi_info(struct ipc_message_info *info)
+void ipc_disp_icon_info(struct ipc_message_info *info)
{
- struct ipc_disp_rssi_info *rssi_info = (struct ipc_disp_rssi_info *) info->data;
+ struct ipc_disp_icon_info *icon_info = (struct ipc_disp_icon_info *) info->data;
RIL_SignalStrength ss;
- int rssi;
/* Don't consider this if modem isn't in normal power mode. */
- if(ril_state.power_mode < POWER_MODE_NORMAL)
+ if(ril_state.power_mode < POWER_MODE_NORMAL || icon_info->rssi == 0xff)
return;
- memset(&ss, 0, sizeof(ss));
+ ipc2ril_rssi(icon_info->rssi, &ss);
- if(rssi_info->rssi > 0x6f) {
- rssi = 0;
+ if(info->aseq == 0xff) {
+ LOGD("Unsol request!");
+ RIL_onUnsolicitedResponse(RIL_UNSOL_SIGNAL_STRENGTH, &ss, sizeof(ss));
} else {
- rssi = (((rssi_info->rssi - 0x71) * -1) - ((rssi_info->rssi - 0x71) * -1) % 2) / 2;
- if(rssi > 31)
- rssi = 31;
+ LOGD("Sol request!");
+ RIL_onRequestComplete(reqGetToken(info->aseq), RIL_E_SUCCESS, &ss, sizeof(ss));
}
+}
- /* 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;
+void ipc_disp_rssi_info(struct ipc_message_info *info)
+{
+ struct ipc_disp_rssi_info *rssi_info = (struct ipc_disp_rssi_info *) info->data;
+ RIL_SignalStrength ss;
+ int rssi;
- ss.EVDO_SignalStrength.dbm = rssi;
- ss.EVDO_SignalStrength.ecio = 200;
+ /* Don't consider this if modem isn't in normal power mode. */
+ if(ril_state.power_mode < POWER_MODE_NORMAL)
+ return;
- LOGD("Signal Strength is %d\n", rssi);
+ ipc2ril_rssi(rssi_info->rssi, &ss);
RIL_onUnsolicitedResponse(RIL_UNSOL_SIGNAL_STRENGTH, &ss, sizeof(ss));
}
diff --git a/samsung-ril.c b/samsung-ril.c
index 265dbad..24f2434 100644
--- a/samsung-ril.c
+++ b/samsung-ril.c
@@ -336,6 +336,10 @@ void onRequest(int request, void *data, size_t datalen, RIL_Token t)
case RIL_REQUEST_BASEBAND_VERSION:
ril_request_baseband_version(t);
break;
+ /* DISP */
+ case RIL_REQUEST_SIGNAL_STRENGTH:
+ ril_request_signal_strength(t);
+ break;
/* MISC */
case RIL_REQUEST_GET_IMEI:
ril_request_get_imei(t);
diff --git a/samsung-ril.h b/samsung-ril.h
index 0ce691b..c6bfb4a 100644
--- a/samsung-ril.h
+++ b/samsung-ril.h
@@ -215,6 +215,7 @@ void ipc_pwr_phone_state(struct ipc_message_info *info);
void ril_request_radio_power(RIL_Token t, void *data, size_t datalen);
/* DISP */
+void ril_request_signal_strength(RIL_Token t);
void ipc_disp_icon_info(struct ipc_message_info *info);
void ipc_disp_rssi_info(struct ipc_message_info *info);