[-]
[+]
|
Changed |
_service:tar_git:ofono.changes
|
|
[-]
[+]
|
Changed |
_service:tar_git:ofono.spec
^
|
|
[-]
[+]
|
Changed |
_service
^
|
@@ -2,6 +2,6 @@
<service name="tar_git">
<param name="url">https://git.merproject.org/mer-core/ofono.git</param>
<param name="branch">master</param>
- <param name="revision">2a60eaa6e322027a2533044d4bf3c47805f6dc44</param>
+ <param name="revision">1482748</param>
</service>
</services>
|
[-]
[+]
|
Changed |
_service:tar_git:ofono-1.18+git9.tar.bz2/ofono/drivers/ril/ril_data.c
^
|
@@ -99,8 +99,7 @@
struct ril_data_request *req_queue;
struct ril_data_request *pending_req;
- enum ril_data_allow_data_opt allow_data;
- enum ril_data_call_format data_call_format;
+ struct ril_data_options options;
char *log_prefix;
guint query_id;
gulong io_event_id;
@@ -160,7 +159,8 @@
char *password;
enum ofono_gprs_proto proto;
enum ofono_gprs_auth_method auth_method;
- int retry_count;
+ guint retry_count;
+ guint retry_delay_id;
};
struct ril_data_request_deact {
@@ -506,7 +506,7 @@
}
ril_data_set_calls(self, ril_data_call_list_parse(data, len,
- priv->data_call_format));
+ priv->options.data_call_format));
}
static void ril_data_query_data_calls_cb(GRilIoChannel *io, int ril_status,
@@ -519,7 +519,7 @@
priv->query_id = 0;
if (ril_status == RIL_E_SUCCESS) {
ril_data_set_calls(self, ril_data_call_list_parse(data, len,
- priv->data_call_format));
+ priv->options.data_call_format));
}
}
@@ -681,7 +681,14 @@
static void ril_data_call_setup_cancel(struct ril_data_request *req)
{
+ struct ril_data_request_setup *setup =
+ G_CAST(req, struct ril_data_request_setup, req);
+
ril_data_request_cancel_io(req);
+ if (setup->retry_delay_id) {
+ g_source_remove(setup->retry_delay_id);
+ setup->retry_delay_id = 0;
+ }
if (req->cb.setup) {
ril_data_call_setup_cb_t cb = req->cb.setup;
req->cb.setup = NULL;
@@ -689,6 +696,20 @@
}
}
+static gboolean ril_data_call_setup_retry(void *user_data)
+{
+ struct ril_data_request_setup *setup = user_data;
+ struct ril_data_request *req = &setup->req;
+
+ GASSERT(setup->retry_delay_id);
+ setup->retry_delay_id = 0;
+ setup->retry_count++;
+ DBG("silent retry %u out of %u", setup->retry_count,
+ req->data->priv->options.data_call_retry_limit);
+ req->submit(req);
+ return G_SOURCE_REMOVE;
+}
+
static void ril_data_call_setup_cb(GRilIoChannel *io, int ril_status,
const void *data, guint len, void *user_data)
{
@@ -701,7 +722,7 @@
if (ril_status == RIL_E_SUCCESS) {
list = ril_data_call_list_parse(data, len,
- priv->data_call_format);
+ priv->options.data_call_format);
}
if (list) {
@@ -714,15 +735,25 @@
}
if (call && call->status == PDP_FAIL_ERROR_UNSPECIFIED &&
- !setup->retry_count) {
+ setup->retry_count < priv->options.data_call_retry_limit) {
/*
- * Retry silently according to comment in ril.h
- * (no more than once though)
+ * According to the comment from ril.h we should silently
+ * retry. First time we retry immediately and if that doedsn't
+ * work, then after certain delay.
*/
- DBG("retrying silently");
- setup->retry_count++;
req->pending_id = 0;
- req->submit(req);
+ GASSERT(!setup->retry_delay_id);
+ if (!setup->retry_count) {
+ setup->retry_count++;
+ DBG("silent retry %u out of %u", setup->retry_count,
+ priv->options.data_call_retry_limit);
+ req->submit(req);
+ } else {
+ guint ms = priv->options.data_call_retry_delay_ms;
+ DBG("silent retry scheduled in %u ms", ms);
+ setup->retry_delay_id = g_timeout_add(ms,
+ ril_data_call_setup_retry, setup);
+ }
ril_data_call_list_free(list);
return;
}
@@ -1029,8 +1060,7 @@
struct ril_data *ril_data_new(struct ril_data_manager *dm, const char *name,
struct ril_radio *radio, struct ril_network *network,
- GRilIoChannel *io, enum ril_data_allow_data_opt allow_data,
- enum ril_data_call_format data_call_format)
+ GRilIoChannel *io, const struct ril_data_options *options)
{
GASSERT(dm);
if (G_LIKELY(dm)) {
@@ -1039,22 +1069,21 @@
struct ril_sim_settings *settings = network->settings;
GRilIoRequest *req = grilio_request_new();
- switch (allow_data) {
+ priv->options = *options;
+ switch (priv->options.allow_data) {
case RIL_ALLOW_DATA_ON:
case RIL_ALLOW_DATA_OFF:
- priv->allow_data = allow_data;
break;
default:
/*
* When RIL_REQUEST_ALLOW_DATA first appeared in ril.h
* RIL_VERSION was 10
*/
- priv->allow_data = (io->ril_version > 10) ?
+ priv->options.allow_data = (io->ril_version > 10) ?
RIL_ALLOW_DATA_ON : RIL_ALLOW_DATA_OFF;
break;
}
- priv->data_call_format = data_call_format;
priv->log_prefix = (name && name[0]) ?
g_strconcat(name, " ", NULL) : g_strdup("");
@@ -1493,7 +1522,7 @@
}
- if (priv->allow_data == RIL_ALLOW_DATA_ON) {
+ if (priv->options.allow_data == RIL_ALLOW_DATA_ON) {
ril_data_request_queue(ril_data_allow_new(data));
} else {
priv->flags |= RIL_DATA_FLAG_ON;
|
[-]
[+]
|
Changed |
_service:tar_git:ofono-1.18+git9.tar.bz2/ofono/drivers/ril/ril_data.h
^
|
@@ -67,6 +67,13 @@
RIL_DATA_CALL_FORMAT_11 = 11
};
+struct ril_data_options {
+ enum ril_data_allow_data_opt allow_data;
+ enum ril_data_call_format data_call_format;
+ unsigned int data_call_retry_limit;
+ unsigned int data_call_retry_delay_ms;
+};
+
enum ril_data_role {
RIL_DATA_ROLE_NONE, /* Data not allowed */
RIL_DATA_ROLE_MMS, /* Data is allowed at any speed */
@@ -87,8 +94,7 @@
struct ril_data *ril_data_new(struct ril_data_manager *dm, const char *name,
struct ril_radio *radio, struct ril_network *network,
- GRilIoChannel *io, enum ril_data_allow_data_opt allow_data,
- enum ril_data_call_format data_call_format);
+ GRilIoChannel *io, const struct ril_data_options *options);
struct ril_data *ril_data_ref(struct ril_data *data);
void ril_data_unref(struct ril_data *data);
gboolean ril_data_allowed(struct ril_data *data);
|
[-]
[+]
|
Changed |
_service:tar_git:ofono-1.18+git9.tar.bz2/ofono/drivers/ril/ril_gprs_context.c
^
|
@@ -448,14 +448,14 @@
ril_netreg_check_if_really_roaming(netreg, rs) ==
NETWORK_REGISTRATION_STATUS_ROAMING) {
struct ofono_error error;
- ofono_info("Can't activate context %d (roaming)",
+ ofono_info("Can't activate context %u (roaming)",
ctx->cid);
cb(ril_error_failure(&error), data);
return;
}
}
- ofono_info("Activating context: %d", ctx->cid);
+ ofono_info("Activating context: %u", ctx->cid);
GASSERT(!gcd->activate.req);
GASSERT(ctx->cid != CTX_ID_NONE);
@@ -509,7 +509,7 @@
struct ril_gprs_context *gcd = ril_gprs_context_get_data(gc);
GASSERT(gcd->active_call && gcd->active_ctx_cid == id);
- ofono_info("Deactivate primary");
+ ofono_info("Deactivating context: %u", id);
if (gcd->active_call && gcd->active_ctx_cid == id) {
gcd->deactivate.cb = cb;
@@ -526,7 +526,7 @@
static void ril_gprs_context_detach_shutdown(struct ofono_gprs_context *gc,
unsigned int id)
{
- DBG("%d", id);
+ DBG("%u", id);
ril_gprs_context_deactivate_primary(gc, id, NULL, NULL);
}
|
[-]
[+]
|
Changed |
_service:tar_git:ofono-1.18+git9.tar.bz2/ofono/drivers/ril/ril_plugin.c
^
|
@@ -55,6 +55,8 @@
#define RILMODEM_DEFAULT_DATA_OPT RIL_ALLOW_DATA_AUTO
#define RILMODEM_DEFAULT_DM_FLAGS RIL_DATA_MANAGER_3GLTE_HANDOVER
#define RILMODEM_DEFAULT_DATA_CALL_FORMAT RIL_DATA_CALL_FORMAT_AUTO
+#define RILMODEM_DEFAULT_DATA_CALL_RETRY_LIMIT 4
+#define RILMODEM_DEFAULT_DATA_CALL_RETRY_DELAY 200 /* ms */
#define RILMODEM_DEFAULT_EMPTY_PIN_QUERY TRUE /* optimistic */
#define RILCONF_SETTINGS_EMPTY "EmptyConfig"
@@ -73,6 +75,8 @@
#define RILCONF_ALLOW_DATA_REQ "allowDataReq"
#define RILCONF_EMPTY_PIN_QUERY "emptyPinQuery"
#define RILCONF_DATA_CALL_FORMAT "dataCallFormat"
+#define RILCONF_DATA_CALL_RETRY_LIMIT "dataCallRetryLimit"
+#define RILCONF_DATA_CALL_RETRY_DELAY "dataCallRetryDelay"
#define RIL_STORE "ril"
#define RIL_STORE_GROUP "Settings"
@@ -124,8 +128,7 @@
int timeout; /* RIL timeout, in milliseconds */
int index;
int sim_flags;
- enum ril_data_allow_data_opt allow_data_opt;
- enum ril_data_call_format data_call_format;
+ struct ril_data_options data_opt;
struct ril_slot_config config;
struct ril_plugin_priv *plugin;
struct ril_modem *modem;
@@ -972,8 +975,7 @@
GASSERT(!slot->data);
slot->data = ril_data_new(slot->plugin->data_manager, log_prefix,
- slot->radio, slot->network, slot->io, slot->allow_data_opt,
- slot->data_call_format);
+ slot->radio, slot->network, slot->io, &slot->data_opt);
GASSERT(!slot->cell_info);
if (slot->io->ril_version > 8) {
@@ -1067,8 +1069,12 @@
slot->config.empty_pin_query = RILMODEM_DEFAULT_EMPTY_PIN_QUERY;
slot->timeout = RILMODEM_DEFAULT_TIMEOUT;
slot->sim_flags = RILMODEM_DEFAULT_SIM_FLAGS;
- slot->allow_data_opt = RILMODEM_DEFAULT_DATA_OPT;
- slot->data_call_format = RILMODEM_DEFAULT_DATA_CALL_FORMAT;
+ slot->data_opt.allow_data = RILMODEM_DEFAULT_DATA_OPT;
+ slot->data_opt.data_call_format = RILMODEM_DEFAULT_DATA_CALL_FORMAT;
+ slot->data_opt.data_call_retry_limit =
+ RILMODEM_DEFAULT_DATA_CALL_RETRY_LIMIT;
+ slot->data_opt.data_call_retry_delay_ms =
+ RILMODEM_DEFAULT_DATA_CALL_RETRY_DELAY;
return slot;
}
@@ -1158,39 +1164,67 @@
strval = ril_config_get_string(file, group,
RILCONF_ALLOW_DATA_REQ);
if (strval) {
- strval = g_strstrip(strval);
- slot->allow_data_opt =
+ /*
+ * Some people are thinking that # is a comment
+ * anywhere on the line, not just at the beginning
+ */
+ char *comment = strchr(strval, '#');
+ if (comment) *comment = 0;
+ g_strstrip(strval);
+ slot->data_opt.allow_data =
!strcasecmp(strval, "on") ? RIL_ALLOW_DATA_ON :
!strcasecmp(strval, "off")? RIL_ALLOW_DATA_OFF :
RIL_ALLOW_DATA_AUTO;
DBG("%s: %s %s", group, RILCONF_ALLOW_DATA_REQ,
- slot->allow_data_opt==RIL_ALLOW_DATA_ON? "on":
- slot->allow_data_opt==RIL_ALLOW_DATA_OFF? "off":
- "auto");
+ slot->data_opt.allow_data ==
+ RIL_ALLOW_DATA_ON ? "on":
+ slot->data_opt.allow_data ==
+ RIL_ALLOW_DATA_OFF ? "off":
+ "auto");
g_free(strval);
}
strval = ril_config_get_string(file, group,
RILCONF_DATA_CALL_FORMAT);
if (strval) {
- strval = g_strstrip(strval);
- slot->data_call_format =
+ /*
+ * Some people are thinking that # is a comment
+ * anywhere on the line, not just at the beginning
+ */
+ char *comment = strchr(strval, '#');
+ if (comment) *comment = 0;
+ g_strstrip(strval);
+ slot->data_opt.data_call_format =
!strcmp(strval, "6") ? RIL_DATA_CALL_FORMAT_6:
!strcmp(strval, "9") ? RIL_DATA_CALL_FORMAT_9:
!strcmp(strval, "11")? RIL_DATA_CALL_FORMAT_11:
RIL_DATA_CALL_FORMAT_AUTO;
- if (slot->data_call_format ==
+ if (slot->data_opt.data_call_format ==
RIL_DATA_CALL_FORMAT_AUTO) {
DBG("%s: %s auto", group,
- RILCONF_DATA_CALL_FORMAT);
+ RILCONF_DATA_CALL_FORMAT);
} else {
DBG("%s: %s %d", group,
- RILCONF_DATA_CALL_FORMAT,
- slot->data_call_format);
+ RILCONF_DATA_CALL_FORMAT,
+ slot->data_opt.data_call_format);
}
g_free(strval);
}
+ if (ril_config_get_integer(file, group,
+ RILCONF_DATA_CALL_RETRY_LIMIT, &value) && value >= 0) {
+ DBG("%s: %s %d", group,
+ RILCONF_DATA_CALL_RETRY_LIMIT, value);
+ slot->data_opt.data_call_retry_limit = value;
+ }
+
+ if (ril_config_get_integer(file, group,
+ RILCONF_DATA_CALL_RETRY_DELAY, &value) && value >= 0) {
+ DBG("%s: %s %d ms", group,
+ RILCONF_DATA_CALL_RETRY_DELAY, value);
+ slot->data_opt.data_call_retry_delay_ms = value;
+ }
+
slot->ecclist_file = ril_config_get_string(file, group,
RILCONF_ECCLIST_FILE);
if (slot->ecclist_file && slot->ecclist_file[0]) {
|
[-]
[+]
|
Changed |
_service:tar_git:ofono-1.18+git9.tar.bz2/ofono/drivers/ril/ril_subscription.conf
^
|
@@ -125,3 +125,20 @@
# Default is auto
#
#dataCallFormat=auto
+
+# Data call may fail with status 65535 which according to ril.h means that
+# we need to retry silently. The maximum number of retries is limited by
+# this parameter. Usually, one retry is enough. The first retry occurs
+# immediately, the subsequent ones after dataCallRetryDelay (see below)
+#
+# Default is 4
+#
+#dataCallRetryLimit=4
+
+# Delay between data call retries, in milliseconds. Note that the first
+# retry occurs immediately after the first failure, the delays are only
+# applied if the first retry fails too.
+#
+# Default is 200 ms
+#
+#dataCallRetryDelay=200
|