summaryrefslogtreecommitdiffstats
path: root/net.c
diff options
context:
space:
mode:
authorPaulK <contact@paulk.fr>2012-01-07 14:41:19 +0100
committerPaulK <contact@paulk.fr>2012-01-07 14:41:19 +0100
commitc25dfc463b89c1385b48e05e54ee141f2a3c7091 (patch)
tree83dd21b7a2cb7967f9077212e940955cc23836f6 /net.c
parent0716d0fad79861934d002fcab089c3a63c0a4dcd (diff)
downloadhardware_ril_samsung-ril-c25dfc463b89c1385b48e05e54ee141f2a3c7091.zip
hardware_ril_samsung-ril-c25dfc463b89c1385b48e05e54ee141f2a3c7091.tar.gz
hardware_ril_samsung-ril-c25dfc463b89c1385b48e05e54ee141f2a3c7091.tar.bz2
Added full PLMN list (from Wikipedia)
Diffstat (limited to 'net.c')
-rw-r--r--net.c61
1 files changed, 39 insertions, 22 deletions
diff --git a/net.c b/net.c
index 6816ce1..5ff8afc 100644
--- a/net.c
+++ b/net.c
@@ -25,6 +25,8 @@
#include "samsung-ril.h"
#include "util.h"
+#include <plmn_list.h>
+
#define RIL_TOKEN_NET_DATA_WAITING (RIL_Token) 0xff
/**
@@ -128,26 +130,6 @@ unsigned char ril2ipc_modesel(unsigned char mode)
}
/**
- * Converts IPC PLMC to Android format
- */
-void ipc2ril_plmn(struct ipc_net_current_plmn *plmndata, char *response[3])
-{
- char plmn[7];
-
- memset(plmn, 0, sizeof(plmn));
-
- memcpy(plmn, plmndata->plmn, 6);
-
- if(plmn[5] == '#')
- plmn[5] = '\0'; //FIXME: remove #?
-
- asprintf(&response[0], "%s", plmn_lookup(plmn));
- //asprintf(&response[1], "%s", "Voda NL");
- response[1] = NULL;
- asprintf(&response[2], "%s", plmn);
-}
-
-/**
* Converts IPC reg state to Android format
*/
void ipc2ril_reg_state_resp(struct ipc_net_regist *netinfo, char *response[15])
@@ -208,6 +190,41 @@ void ril_tokens_net_state_dump(void)
LOGD("ril_tokens_net_state_dump:\n\tril_state.tokens.registration_state = 0x%x\n\tril_state.tokens.gprs_registration_state = 0x%x\n\tril_state.tokens.operator = 0x%x\n", ril_state.tokens.registration_state, ril_state.tokens.gprs_registration_state, ril_state.tokens.operator);
}
+
+void ril_plmn_string(struct ipc_net_current_plmn *plmndata, char *response[3])
+{
+ unsigned int mcc, mnc;
+ char plmn[7];
+
+ int plmn_entries;
+ int i;
+
+ memset(plmn, 0, sizeof(plmn));
+ memcpy(plmn, plmndata->plmn, 6);
+
+ if(plmn[5] == '#')
+ plmn[5] = '\0';
+
+ asprintf(&response[2], "%s", plmn);
+
+ sscanf(plmn, "%3u%2u", &mcc, &mnc);
+
+ plmn_entries = sizeof(plmn_list) / sizeof(struct plmn_list_entry);
+
+ LOGD("Found %d plmn records", plmn_entries);
+
+ for(i=0 ; i < plmn_entries ; i++) {
+ if(plmn_list[i].mcc == mcc && plmn_list[i].mnc == mnc) {
+ asprintf(&response[0], "%s", plmn_list[i].operator_short);
+ asprintf(&response[1], "%s", plmn_list[i].operator_long);
+ return;
+ }
+ }
+
+ response[0] = NULL;
+ response[1] = NULL;
+}
+
/**
* How to handle NET unsol data from modem:
* 1- Rx UNSOL (NOTI) data from modem
@@ -275,7 +292,7 @@ void ril_request_operator(RIL_Token t)
LOGD("Got RILJ request for UNSOL data");
/* Send back the data we got UNSOL */
- ipc2ril_plmn(&(ril_state.plmndata), response);
+ ril_plmn_string(&(ril_state.plmndata), response);
RIL_onRequestComplete(t, RIL_E_SUCCESS, response, sizeof(response));
@@ -367,7 +384,7 @@ void ipc_net_current_plmn(struct ipc_message_info *message)
/* Better keeping it up to date */
memcpy(&(ril_state.plmndata), plmndata, sizeof(struct ipc_net_current_plmn));
- ipc2ril_plmn(plmndata, response);
+ ril_plmn_string(plmndata, response);
RIL_onRequestComplete(t, RIL_E_SUCCESS, response, sizeof(response));