summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAntara Borwankar <antara.borwankar@gmail.com>2016-04-25 21:12:14 +0530
committerDenis Kenzior <denkenz@gmail.com>2016-04-25 15:16:22 -0500
commit2bb515a6ab94370c76c5e8ff27d989b5564f59f1 (patch)
treee3e14ffde851d5f27c3d24361fa53096c3a1adbd
parent74e85341ce46ef73467d655db02eeaff233458be (diff)
downloadofono-2bb515a6ab94370c76c5e8ff27d989b5564f59f1.tar.gz
rilmodem: Driver code to set band mode and value
set_band driver to set GSM band and UMTS band
-rw-r--r--drivers/rilmodem/radio-settings.c109
1 files changed, 109 insertions, 0 deletions
diff --git a/drivers/rilmodem/radio-settings.c b/drivers/rilmodem/radio-settings.c
index 90b49c63..1d9d9db7 100644
--- a/drivers/rilmodem/radio-settings.c
+++ b/drivers/rilmodem/radio-settings.c
@@ -64,6 +64,22 @@
#define MTK_PREF_NET_TYPE_LTE_GSM_TYPE (MTK_PREF_NET_TYPE_BASE + 5)
#define MTK_PREF_NET_TYPE_LTE_GSM_MMDC_TYPE (MTK_PREF_NET_TYPE_BASE + 6)
+/*GSM Band*/
+#define PREF_NET_BAND_GSM_AUTOMATIC 255
+#define PREF_NET_BAND_GSM850 6
+#define PREF_NET_BAND_GSM900_P 1
+#define PREF_NET_BAND_GSM900_E 2
+#define PREF_NET_BAND_GSM1800 4
+#define PREF_NET_BAND_GSM1900 5
+
+/*UMTS Band*/
+#define PREF_NET_BAND_UMTS_AUTOMATIC 255
+#define PREF_NET_BAND_UMTS_V 54
+#define PREF_NET_BAND_UMTS_VIII 57
+#define PREF_NET_BAND_UMTS_IV 53
+#define PREF_NET_BAND_UMTS_II 51
+#define PREF_NET_BAND_UMTS_I 50
+
struct radio_data {
GRil *ril;
gboolean fast_dormancy;
@@ -288,6 +304,98 @@ static void ril_query_available_rats(struct ofono_radio_settings *rs,
CALLBACK_WITH_SUCCESS(cb, available_rats, data);
}
+static void ril_set_band_cb(struct ril_msg *message, gpointer user_data)
+{
+ struct cb_data *cbd = user_data;
+ struct ofono_radio_settings *rs = cbd->user;
+ struct radio_data *rd = ofono_radio_settings_get_data(rs);
+ ofono_radio_settings_band_set_cb_t cb = cbd->cb;
+
+ if (message->error == RIL_E_SUCCESS) {
+ g_ril_print_response_no_args(rd->ril, message);
+
+ CALLBACK_WITH_SUCCESS(cb, cbd->data);
+ } else {
+ CALLBACK_WITH_FAILURE(cb, cbd->data);
+ }
+}
+
+static void ril_set_band(struct ofono_radio_settings *rs,
+ enum ofono_radio_band_gsm band_gsm,
+ enum ofono_radio_band_umts band_umts,
+ ofono_radio_settings_band_set_cb_t cb,
+ void *data)
+{
+ struct radio_data *rd = ofono_radio_settings_get_data(rs);
+ struct cb_data *cbd = cb_data_new(cb, data, rs);
+ struct parcel rilp;
+ char cmd_buf[9], gsm_band[4], umts_band[4];
+ /* RIL_OEM_HOOK_STRING_SET_BAND_PREFERENCE = 0x000000CE */
+ int cmd_id = 0x000000CE;
+ sprintf(cmd_buf, "%d", cmd_id);
+
+ switch (band_gsm) {
+ case OFONO_RADIO_BAND_GSM_ANY:
+ sprintf(gsm_band, "%d", PREF_NET_BAND_GSM_AUTOMATIC);
+ break;
+ case OFONO_RADIO_BAND_GSM_850:
+ sprintf(gsm_band, "%d", PREF_NET_BAND_GSM850);
+ break;
+ case OFONO_RADIO_BAND_GSM_900P:
+ sprintf(gsm_band, "%d", PREF_NET_BAND_GSM900_P);
+ break;
+ case OFONO_RADIO_BAND_GSM_900E:
+ sprintf(gsm_band, "%d", PREF_NET_BAND_GSM900_E);
+ break;
+ case OFONO_RADIO_BAND_GSM_1800:
+ sprintf(gsm_band, "%d", PREF_NET_BAND_GSM1800);
+ break;
+ case OFONO_RADIO_BAND_GSM_1900:
+ sprintf(gsm_band, "%d", PREF_NET_BAND_GSM1900);
+ break;
+ default:
+ CALLBACK_WITH_FAILURE(cb, data);
+ return;
+ }
+
+ switch (band_umts) {
+ case OFONO_RADIO_BAND_UMTS_ANY:
+ sprintf(umts_band, "%d", PREF_NET_BAND_UMTS_AUTOMATIC);
+ break;
+ case OFONO_RADIO_BAND_UMTS_850:
+ sprintf(umts_band, "%d", PREF_NET_BAND_UMTS_V);
+ break;
+ case OFONO_RADIO_BAND_UMTS_900:
+ sprintf(umts_band, "%d", PREF_NET_BAND_UMTS_VIII);
+ break;
+ case OFONO_RADIO_BAND_UMTS_1700AWS:
+ sprintf(umts_band, "%d", PREF_NET_BAND_UMTS_IV);
+ break;
+ case OFONO_RADIO_BAND_UMTS_1900:
+ sprintf(umts_band, "%d", PREF_NET_BAND_UMTS_II);
+ break;
+ case OFONO_RADIO_BAND_UMTS_2100:
+ sprintf(umts_band, "%d", PREF_NET_BAND_UMTS_I);
+ break;
+ default:
+ CALLBACK_WITH_FAILURE(cb, data);
+ return;
+ }
+
+ parcel_init(&rilp);
+ parcel_w_int32(&rilp, 3); /* Number of params */
+ parcel_w_string(&rilp, cmd_buf);
+ parcel_w_string(&rilp, gsm_band);
+ parcel_w_string(&rilp, umts_band);
+
+ if (g_ril_send(rd->ril, RIL_REQUEST_OEM_HOOK_STRINGS, &rilp,
+ ril_set_band_cb, cbd, g_free) > 0)
+ return;
+
+ g_free(cbd);
+ CALLBACK_WITH_FAILURE(cb,data);
+}
+
static void ril_delayed_register(const struct ofono_error *error,
void *user_data)
{
@@ -329,6 +437,7 @@ static struct ofono_radio_settings_driver driver = {
.remove = ril_radio_settings_remove,
.query_rat_mode = ril_query_rat_mode,
.set_rat_mode = ril_set_rat_mode,
+ .set_band = ril_set_band,
.query_fast_dormancy = ril_query_fast_dormancy,
.set_fast_dormancy = ril_set_fast_dormancy,
.query_available_rats = ril_query_available_rats