diff options
author | Antara Borwankar <antara.borwankar@gmail.com> | 2016-04-25 21:12:14 +0530 |
---|---|---|
committer | Denis Kenzior <denkenz@gmail.com> | 2016-04-25 15:16:22 -0500 |
commit | 2bb515a6ab94370c76c5e8ff27d989b5564f59f1 (patch) | |
tree | e3e14ffde851d5f27c3d24361fa53096c3a1adbd /drivers/rilmodem | |
parent | 74e85341ce46ef73467d655db02eeaff233458be (diff) | |
download | ofono-2bb515a6ab94370c76c5e8ff27d989b5564f59f1.tar.gz |
rilmodem: Driver code to set band mode and value
set_band driver to set GSM band and UMTS band
Diffstat (limited to 'drivers/rilmodem')
-rw-r--r-- | drivers/rilmodem/radio-settings.c | 109 |
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 |