mirror of
https://github.com/sailfishos/ofono
synced 2025-12-02 23:51:10 +08:00
Compare commits
4 Commits
mer/1.23+g
...
mer/1.23+g
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
544f02e5a2 | ||
|
|
6d4638f9bf | ||
|
|
6584919e9d | ||
|
|
34fb44f4eb |
@@ -382,6 +382,12 @@ enum ril_unsolicited_response_filter {
|
|||||||
RIL_UR_DATA_CALL_DORMANCY_CHANGED = 0x04
|
RIL_UR_DATA_CALL_DORMANCY_CHANGED = 0x04
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* RIL_REQUEST_QUERY_NETWORK_SELECTION_MODE result */
|
||||||
|
enum ril_network_selection_mode {
|
||||||
|
RIL_NETWORK_SELECTION_MODE_AUTO = 0,
|
||||||
|
RIL_NETWORK_SELECTION_MODE_MANUAL = 1
|
||||||
|
};
|
||||||
|
|
||||||
#endif /*__RIL_CONSTANTS_H */
|
#endif /*__RIL_CONSTANTS_H */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -23,7 +23,6 @@
|
|||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "simutil.h"
|
#include "simutil.h"
|
||||||
|
|
||||||
#define REGISTRATION_TIMEOUT (100*1000) /* ms */
|
|
||||||
#define REGISTRATION_MAX_RETRIES (2)
|
#define REGISTRATION_MAX_RETRIES (2)
|
||||||
|
|
||||||
enum ril_netreg_events {
|
enum ril_netreg_events {
|
||||||
@@ -53,6 +52,7 @@ struct ril_netreg {
|
|||||||
guint current_operator_id;
|
guint current_operator_id;
|
||||||
gulong ril_event_id[NETREG_RIL_EVENT_COUNT];
|
gulong ril_event_id[NETREG_RIL_EVENT_COUNT];
|
||||||
gulong network_event_id[NETREG_NETWORK_EVENT_COUNT];
|
gulong network_event_id[NETREG_NETWORK_EVENT_COUNT];
|
||||||
|
int network_selection_timeout;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ril_netreg_cbd {
|
struct ril_netreg_cbd {
|
||||||
@@ -301,18 +301,55 @@ static void ril_netreg_register_cb(GRilIoChannel *io, int status,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void ril_netreg_set_register_auto(struct ril_netreg *nd,
|
||||||
|
ofono_netreg_register_cb_t cb, void *data)
|
||||||
|
{
|
||||||
|
GRilIoRequest *req = grilio_request_new();
|
||||||
|
|
||||||
|
ofono_info("nw select automatic");
|
||||||
|
grilio_request_set_timeout(req, nd->network_selection_timeout);
|
||||||
|
grilio_request_set_retry(req, 0, REGISTRATION_MAX_RETRIES);
|
||||||
|
grilio_queue_send_request_full(nd->q, req,
|
||||||
|
RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC,
|
||||||
|
ril_netreg_register_cb, ril_netreg_cbd_free,
|
||||||
|
ril_netreg_cbd_new(nd, cb, data));
|
||||||
|
grilio_request_unref(req);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void ril_netreg_query_register_auto_cb(GRilIoChannel *io, int status,
|
||||||
|
const void *data, guint len,
|
||||||
|
void *user_data)
|
||||||
|
{
|
||||||
|
struct ril_netreg_cbd *cbd = user_data;
|
||||||
|
ofono_netreg_register_cb_t cb = cbd->cb.reg;
|
||||||
|
|
||||||
|
if (status == RIL_E_SUCCESS) {
|
||||||
|
GRilIoParser rilp;
|
||||||
|
gint32 net_mode;
|
||||||
|
|
||||||
|
grilio_parser_init(&rilp, data, len);
|
||||||
|
if (grilio_parser_get_int32(&rilp, NULL) /* Array length */ &&
|
||||||
|
grilio_parser_get_int32(&rilp, &net_mode) &&
|
||||||
|
net_mode == RIL_NETWORK_SELECTION_MODE_AUTO) {
|
||||||
|
struct ofono_error error;
|
||||||
|
ofono_info("nw selection is already auto");
|
||||||
|
cb(ril_error_ok(&error), cbd->data);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ril_netreg_set_register_auto(cbd->nd, cb, cbd->data);
|
||||||
|
}
|
||||||
|
|
||||||
static void ril_netreg_register_auto(struct ofono_netreg *netreg,
|
static void ril_netreg_register_auto(struct ofono_netreg *netreg,
|
||||||
ofono_netreg_register_cb_t cb, void *data)
|
ofono_netreg_register_cb_t cb, void *data)
|
||||||
{
|
{
|
||||||
struct ril_netreg *nd = ril_netreg_get_data(netreg);
|
struct ril_netreg *nd = ril_netreg_get_data(netreg);
|
||||||
GRilIoRequest *req = grilio_request_new();
|
GRilIoRequest *req = grilio_request_new();
|
||||||
|
|
||||||
ofono_info("nw select automatic");
|
|
||||||
grilio_request_set_timeout(req, REGISTRATION_TIMEOUT);
|
|
||||||
grilio_request_set_retry(req, 0, REGISTRATION_MAX_RETRIES);
|
|
||||||
grilio_queue_send_request_full(nd->q, req,
|
grilio_queue_send_request_full(nd->q, req,
|
||||||
RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC,
|
RIL_REQUEST_QUERY_NETWORK_SELECTION_MODE,
|
||||||
ril_netreg_register_cb, ril_netreg_cbd_free,
|
ril_netreg_query_register_auto_cb, ril_netreg_cbd_free,
|
||||||
ril_netreg_cbd_new(nd, cb, data));
|
ril_netreg_cbd_new(nd, cb, data));
|
||||||
grilio_request_unref(req);
|
grilio_request_unref(req);
|
||||||
}
|
}
|
||||||
@@ -327,7 +364,7 @@ static void ril_netreg_register_manual(struct ofono_netreg *netreg,
|
|||||||
|
|
||||||
ofono_info("nw select manual: %s%s%s", mcc, mnc, suffix);
|
ofono_info("nw select manual: %s%s%s", mcc, mnc, suffix);
|
||||||
grilio_request_append_format(req, "%s%s%s", mcc, mnc, suffix);
|
grilio_request_append_format(req, "%s%s%s", mcc, mnc, suffix);
|
||||||
grilio_request_set_timeout(req, REGISTRATION_TIMEOUT);
|
grilio_request_set_timeout(req, nd->network_selection_timeout);
|
||||||
grilio_request_set_retry(req, 0, REGISTRATION_MAX_RETRIES);
|
grilio_request_set_retry(req, 0, REGISTRATION_MAX_RETRIES);
|
||||||
grilio_queue_send_request_full(nd->q, req,
|
grilio_queue_send_request_full(nd->q, req,
|
||||||
RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL,
|
RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL,
|
||||||
@@ -563,6 +600,7 @@ static int ril_netreg_probe(struct ofono_netreg *netreg, unsigned int vendor,
|
|||||||
nd->network_selection_manual_0 = config->network_selection_manual_0;
|
nd->network_selection_manual_0 = config->network_selection_manual_0;
|
||||||
nd->signal_strength_dbm_weak = config->signal_strength_dbm_weak;
|
nd->signal_strength_dbm_weak = config->signal_strength_dbm_weak;
|
||||||
nd->signal_strength_dbm_strong = config->signal_strength_dbm_strong;
|
nd->signal_strength_dbm_strong = config->signal_strength_dbm_strong;
|
||||||
|
nd->network_selection_timeout = config->network_selection_timeout;
|
||||||
|
|
||||||
ofono_netreg_set_data(netreg, nd);
|
ofono_netreg_set_data(netreg, nd);
|
||||||
nd->timer_id = g_idle_add(ril_netreg_register, nd);
|
nd->timer_id = g_idle_add(ril_netreg_register, nd);
|
||||||
|
|||||||
@@ -73,6 +73,7 @@
|
|||||||
#define RILMODEM_DEFAULT_LTE_MODE PREF_NET_TYPE_LTE_GSM_WCDMA
|
#define RILMODEM_DEFAULT_LTE_MODE PREF_NET_TYPE_LTE_GSM_WCDMA
|
||||||
#define RILMODEM_DEFAULT_UMTS_MODE PREF_NET_TYPE_GSM_WCDMA_AUTO
|
#define RILMODEM_DEFAULT_UMTS_MODE PREF_NET_TYPE_GSM_WCDMA_AUTO
|
||||||
#define RILMODEM_DEFAULT_NETWORK_MODE_TIMEOUT (20*1000) /* ms */
|
#define RILMODEM_DEFAULT_NETWORK_MODE_TIMEOUT (20*1000) /* ms */
|
||||||
|
#define RILMODEM_DEFAULT_NETWORK_SELECTION_TIMEOUT (100*1000) /* ms */
|
||||||
#define RILMODEM_DEFAULT_DBM_WEAK (-100) /* very weak, 0.0000000001 mW */
|
#define RILMODEM_DEFAULT_DBM_WEAK (-100) /* very weak, 0.0000000001 mW */
|
||||||
#define RILMODEM_DEFAULT_DBM_STRONG (-60) /* strong signal, 0.000001 mW */
|
#define RILMODEM_DEFAULT_DBM_STRONG (-60) /* strong signal, 0.000001 mW */
|
||||||
#define RILMODEM_DEFAULT_ENABLE_VOICECALL TRUE
|
#define RILMODEM_DEFAULT_ENABLE_VOICECALL TRUE
|
||||||
@@ -134,6 +135,7 @@
|
|||||||
#define RILCONF_LTE_MODE "lteNetworkMode"
|
#define RILCONF_LTE_MODE "lteNetworkMode"
|
||||||
#define RILCONF_UMTS_MODE "umtsNetworkMode"
|
#define RILCONF_UMTS_MODE "umtsNetworkMode"
|
||||||
#define RILCONF_NETWORK_MODE_TIMEOUT "networkModeTimeout"
|
#define RILCONF_NETWORK_MODE_TIMEOUT "networkModeTimeout"
|
||||||
|
#define RILCONF_NETWORK_SELECTION_TIMEOUT "networkSelectionTimeout"
|
||||||
#define RILCONF_SIGNAL_STRENGTH_RANGE "signalStrengthRange"
|
#define RILCONF_SIGNAL_STRENGTH_RANGE "signalStrengthRange"
|
||||||
#define RILCONF_UICC_WORKAROUND "uiccWorkaround"
|
#define RILCONF_UICC_WORKAROUND "uiccWorkaround"
|
||||||
#define RILCONF_ECCLIST_FILE "ecclistFile"
|
#define RILCONF_ECCLIST_FILE "ecclistFile"
|
||||||
@@ -1193,6 +1195,8 @@ static ril_slot *ril_plugin_slot_new_take(char *transport,
|
|||||||
config->lte_network_mode = RILMODEM_DEFAULT_LTE_MODE;
|
config->lte_network_mode = RILMODEM_DEFAULT_LTE_MODE;
|
||||||
config->umts_network_mode = RILMODEM_DEFAULT_UMTS_MODE;
|
config->umts_network_mode = RILMODEM_DEFAULT_UMTS_MODE;
|
||||||
config->network_mode_timeout = RILMODEM_DEFAULT_NETWORK_MODE_TIMEOUT;
|
config->network_mode_timeout = RILMODEM_DEFAULT_NETWORK_MODE_TIMEOUT;
|
||||||
|
config->network_selection_timeout =
|
||||||
|
RILMODEM_DEFAULT_NETWORK_SELECTION_TIMEOUT;
|
||||||
config->signal_strength_dbm_weak = RILMODEM_DEFAULT_DBM_WEAK;
|
config->signal_strength_dbm_weak = RILMODEM_DEFAULT_DBM_WEAK;
|
||||||
config->signal_strength_dbm_strong = RILMODEM_DEFAULT_DBM_STRONG;
|
config->signal_strength_dbm_strong = RILMODEM_DEFAULT_DBM_STRONG;
|
||||||
config->empty_pin_query = RILMODEM_DEFAULT_EMPTY_PIN_QUERY;
|
config->empty_pin_query = RILMODEM_DEFAULT_EMPTY_PIN_QUERY;
|
||||||
@@ -1565,6 +1569,14 @@ static ril_slot *ril_plugin_parse_config_group(GKeyFile *file,
|
|||||||
config->network_mode_timeout);
|
config->network_mode_timeout);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* networkSelectionTimeout */
|
||||||
|
if (ril_config_get_integer(file, group,
|
||||||
|
RILCONF_NETWORK_SELECTION_TIMEOUT,
|
||||||
|
&config->network_selection_timeout)) {
|
||||||
|
DBG("%s: " RILCONF_NETWORK_SELECTION_TIMEOUT " %d", group,
|
||||||
|
config->network_selection_timeout);
|
||||||
|
}
|
||||||
|
|
||||||
/* signalStrengthRange */
|
/* signalStrengthRange */
|
||||||
ints = ril_config_get_ints(file, group, RILCONF_SIGNAL_STRENGTH_RANGE);
|
ints = ril_config_get_ints(file, group, RILCONF_SIGNAL_STRENGTH_RANGE);
|
||||||
if (gutil_ints_get_count(ints) == 2) {
|
if (gutil_ints_get_count(ints) == 2) {
|
||||||
|
|||||||
@@ -237,6 +237,13 @@ socket=/dev/socket/rild
|
|||||||
#
|
#
|
||||||
#networkModeTimeout=20000
|
#networkModeTimeout=20000
|
||||||
|
|
||||||
|
# Timeout for RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC and
|
||||||
|
# RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL, in milliseconds.
|
||||||
|
#
|
||||||
|
# Default 100000 (100 seconds)
|
||||||
|
#
|
||||||
|
#networkSelectionTimeout=100000
|
||||||
|
|
||||||
# Comma-separated signal strength range, in dBm.
|
# Comma-separated signal strength range, in dBm.
|
||||||
#
|
#
|
||||||
# These values are used for translating dBm values returned by the modem in
|
# These values are used for translating dBm values returned by the modem in
|
||||||
|
|||||||
@@ -55,6 +55,7 @@ struct ril_slot_config {
|
|||||||
enum ril_pref_net_type lte_network_mode;
|
enum ril_pref_net_type lte_network_mode;
|
||||||
enum ril_pref_net_type umts_network_mode;
|
enum ril_pref_net_type umts_network_mode;
|
||||||
int network_mode_timeout;
|
int network_mode_timeout;
|
||||||
|
int network_selection_timeout;
|
||||||
int signal_strength_dbm_weak;
|
int signal_strength_dbm_weak;
|
||||||
int signal_strength_dbm_strong;
|
int signal_strength_dbm_strong;
|
||||||
gboolean query_available_band_mode;
|
gboolean query_available_band_mode;
|
||||||
|
|||||||
Reference in New Issue
Block a user