[-]
[+]
|
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/slava/ofono.git</param>
<param name="branch">master</param>
- <param name="revision">246e30d1</param>
+ <param name="revision">c524711</param>
</service>
</services>
|
[-]
[+]
|
Changed |
_service:tar_git:ofono-1.17+git31.tar.bz2/ofono/drivers/ril/ril_modem.c
^
|
@@ -456,6 +456,15 @@
ofono_modem_set_powered(modem->ofono, FALSE);
ofono_modem_set_powered(modem->ofono, TRUE);
md->power_state = POWERED_ON;
+
+ /*
+ * With some RIL implementations, querying available
+ * band modes causes some magic Android properties to
+ * appear. Otherwise this request is pretty harmless
+ * and useless.
+ */
+ grilio_queue_send_request(md->q, NULL,
+ RIL_REQUEST_QUERY_AVAILABLE_BAND_MODE);
return modem;
} else {
ofono_error("Error %d registering %s",
|
[-]
[+]
|
Changed |
_service:tar_git:ofono-1.17+git31.tar.bz2/ofono/drivers/ril/ril_plugin.c
^
|
@@ -45,13 +45,13 @@
#define RILMODEM_CONF_FILE CONFIGDIR "/ril_subscription.conf"
#define RILMODEM_DEFAULT_SOCK "/dev/socket/rild"
#define RILMODEM_DEFAULT_SOCK2 "/dev/socket/rild2"
-#define RILMODEM_DEFAULT_SUB "SUB1"
#define RILMODEM_DEFAULT_4G TRUE /* 4G is on by default */
#define RILMODEM_DEFAULT_SLOT 0xffffffff
#define RILMODEM_DEFAULT_TIMEOUT 0 /* No timeout */
#define RILMODEM_DEFAULT_SIM_FLAGS RIL_SIM_CARD_V9_UICC_SUBSCRIPTION_WORKAROUND
#define RILMODEM_DEFAULT_DATA_OPT RIL_ALLOW_DATA_AUTO
#define RILMODEM_DEFAULT_DM_FLAGS RIL_DATA_MANAGER_3GLTE_HANDOVER
+#define RILMODEM_DEFAULT_EMPTY_PIN_QUERY TRUE /* optimistic */
#define RILCONF_SETTINGS_3GHANDOVER "3GLTEHandover"
@@ -66,6 +66,7 @@
#define RILCONF_UICC_WORKAROUND "uiccWorkaround"
#define RILCONF_ECCLIST_FILE "ecclistFile"
#define RILCONF_ALLOW_DATA_REQ "allowDataReq"
+#define RILCONF_EMPTY_PIN_QUERY "emptyPinQuery"
#define RIL_STORE "ril"
#define RIL_STORE_GROUP "Settings"
@@ -1026,49 +1027,41 @@
ril_plugin_retry_init_io_cb, slot);
}
+static struct ril_slot *ril_plugin_slot_new(const char *sockpath,
+ const char *path, const char *name, guint slot_index)
+{
+ struct ril_slot *slot = g_new0(struct ril_slot, 1);
+
+ slot->sockpath = g_strdup(sockpath);
+ slot->path = g_strdup(path);
+ slot->name = g_strdup(name);
+ slot->config.slot = slot_index;
+ slot->config.enable_4g = RILMODEM_DEFAULT_4G;
+ 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;
+ return slot;
+}
+
static GSList *ril_plugin_create_default_config()
{
GSList *list = NULL;
if (g_file_test(RILMODEM_DEFAULT_SOCK, G_FILE_TEST_EXISTS)) {
- struct ril_slot *slot;
-
if (g_file_test(RILMODEM_DEFAULT_SOCK2, G_FILE_TEST_EXISTS)) {
- DBG("Falling back to default 2-SIM config");
-
- slot = g_new0(struct ril_slot, 1);
- slot->path = g_strdup(RILCONF_PATH_PREFIX "0");
- slot->sockpath = g_strdup(RILMODEM_DEFAULT_SOCK);
- slot->name = g_strdup("RIL1");
- slot->config.enable_4g = RILMODEM_DEFAULT_4G;
- slot->timeout = RILMODEM_DEFAULT_TIMEOUT;
- slot->sim_flags = RILMODEM_DEFAULT_SIM_FLAGS;
- slot->allow_data_opt = RILMODEM_DEFAULT_DATA_OPT;
- list = g_slist_append(list, slot);
-
- slot = g_new0(struct ril_slot, 1);
- slot->path = g_strdup(RILCONF_PATH_PREFIX "1");
- slot->sockpath = g_strdup(RILMODEM_DEFAULT_SOCK2);
- slot->name = g_strdup("RIL2");
- slot->config.enable_4g = RILMODEM_DEFAULT_4G;
- slot->timeout = RILMODEM_DEFAULT_TIMEOUT;
- slot->sim_flags = RILMODEM_DEFAULT_SIM_FLAGS;
- slot->allow_data_opt = RILMODEM_DEFAULT_DATA_OPT;
- slot->config.slot = 1;
- list = g_slist_append(list, slot);
+ DBG("Falling back to default dual SIM config");
+ list = g_slist_append(list,
+ ril_plugin_slot_new(RILMODEM_DEFAULT_SOCK,
+ RILCONF_PATH_PREFIX "0", "RIL1", 0));
+ list = g_slist_append(list,
+ ril_plugin_slot_new(RILMODEM_DEFAULT_SOCK2,
+ RILCONF_PATH_PREFIX "1", "RIL2", 1));
} else {
- DBG("Falling back to default Jolla1 config");
-
- slot = g_new0(struct ril_slot, 1);
- slot->path = g_strdup(RILCONF_PATH_PREFIX "0");
- slot->sockpath = g_strdup(RILMODEM_DEFAULT_SOCK);
- slot->sub = g_strdup(RILMODEM_DEFAULT_SUB);
- slot->name = g_strdup("");
- slot->config.enable_4g = RILMODEM_DEFAULT_4G;
- slot->timeout = RILMODEM_DEFAULT_TIMEOUT;
- slot->sim_flags = RILMODEM_DEFAULT_SIM_FLAGS;
- slot->allow_data_opt = RILMODEM_DEFAULT_DATA_OPT;
- list = g_slist_append(list, slot);
+ DBG("Falling back to default single SIM config");
+ list = g_slist_append(list,
+ ril_plugin_slot_new(RILMODEM_DEFAULT_SOCK,
+ RILCONF_PATH_PREFIX "0", "", 0));
}
} else {
DBG("No default config");
@@ -1087,12 +1080,11 @@
char* strval;
char *sub = ril_config_get_string(file, group, RILCONF_SUB);
- slot = g_new0(struct ril_slot, 1);
+ slot = ril_plugin_slot_new(NULL, NULL, NULL,
+ RILMODEM_DEFAULT_SLOT);
slot->sockpath = sock;
slot->path = g_strconcat("/", group, NULL);
slot->name = ril_config_get_string(file, group, RILCONF_NAME);
- slot->sim_flags = RILMODEM_DEFAULT_SIM_FLAGS;
- slot->allow_data_opt = RILMODEM_DEFAULT_DATA_OPT;
if (sub && strlen(sub) == RIL_SUB_SIZE) {
DBG("%s: %s:%s", group, sock, sub);
@@ -1106,30 +1098,31 @@
value >= 0) {
slot->config.slot = value;
DBG("%s: slot %u", group, slot->config.slot);
- } else {
- slot->config.slot = RILMODEM_DEFAULT_SLOT;
}
if (ril_config_get_integer(file, group, RILCONF_TIMEOUT,
&slot->timeout)) {
DBG("%s: timeout %d", group, slot->timeout);
- } else {
- slot->timeout = RILMODEM_DEFAULT_TIMEOUT;
}
- if (!ril_config_get_boolean(file, group, RILCONF_4G,
- &slot->config.enable_4g)) {
- slot->config.enable_4g = RILMODEM_DEFAULT_4G;
- }
+ ril_config_get_boolean(file, group, RILCONF_4G,
+ &slot->config.enable_4g);
DBG("%s: 4G %s", group, slot->config.enable_4g ? "on" : "off");
- ril_config_get_flag(file, group,
- RILCONF_UICC_WORKAROUND,
- RIL_SIM_CARD_V9_UICC_SUBSCRIPTION_WORKAROUND,
- &slot->sim_flags);
- DBG("%s: UICC workaround %s", group, (slot->sim_flags &
+ if (ril_config_get_boolean(file, group, RILCONF_EMPTY_PIN_QUERY,
+ &slot->config.empty_pin_query)) {
+ DBG("%s: %s %s", group, RILCONF_EMPTY_PIN_QUERY,
+ slot->config.empty_pin_query ? "on" : "off");
+ }
+
+ if (ril_config_get_flag(file, group, RILCONF_UICC_WORKAROUND,
+ RIL_SIM_CARD_V9_UICC_SUBSCRIPTION_WORKAROUND,
+ &slot->sim_flags)) {
+ DBG("%s: %s %s", group, RILCONF_UICC_WORKAROUND,
+ (slot->sim_flags &
RIL_SIM_CARD_V9_UICC_SUBSCRIPTION_WORKAROUND) ?
- "on" : "off");
+ "on" : "off");
+ }
strval = ril_config_get_string(file, group,
RILCONF_ALLOW_DATA_REQ);
@@ -1138,17 +1131,18 @@
!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");
g_free(strval);
}
- DBG("%s: AllowDataReq %s", group,
- (slot->allow_data_opt == RIL_ALLOW_DATA_ON) ? "on" :
- (slot->allow_data_opt == RIL_ALLOW_DATA_OFF) ? "off" :
- "auto");
slot->ecclist_file = ril_config_get_string(file, group,
RILCONF_ECCLIST_FILE);
if (slot->ecclist_file && slot->ecclist_file[0]) {
- DBG("%s: ecclist file %s", group, slot->ecclist_file);
+ DBG("%s: %s %s", group, RILCONF_ECCLIST_FILE,
+ slot->ecclist_file);
slot->pub.ecclist_file = slot->ecclist_file;
} else {
g_free(slot->ecclist_file);
|
[-]
[+]
|
Changed |
_service:tar_git:ofono-1.17+git31.tar.bz2/ofono/drivers/ril/ril_sim.c
^
|
@@ -72,11 +72,14 @@
struct ril_sim_card *card;
enum ofono_sim_password_type ofono_passwd_state;
int retries[OFONO_SIM_PASSWORD_INVALID];
- guint slot;
+ gboolean empty_pin_query_allowed;
gboolean inserted;
guint idle_id;
gulong card_status_id;
+ const char *log_prefix;
+ char *allocated_log_prefix;
+
/* query_passwd_state context */
ofono_sim_passwd_cb_t query_passwd_state_cb;
void *query_passwd_state_cb_data;
@@ -89,6 +92,7 @@
ofono_sim_file_info_cb_t file_info;
ofono_sim_read_cb_t read;
ofono_sim_imsi_cb_t imsi;
+ ofono_sim_pin_retries_cb_t retries;
ofono_query_facility_lock_cb_t query_facility_lock;
gpointer ptr;
} cb;
@@ -107,6 +111,8 @@
gulong card_status_id;
};
+#define DBG_(sd,fmt,args...) DBG("%s" fmt, (sd)->log_prefix, ##args)
+
#define ril_sim_cbd_free g_free
static inline struct ril_sim *ril_sim_get_data(struct ofono_sim *sim)
@@ -158,7 +164,6 @@
static void ril_sim_pin_cbd_free(struct ril_sim_pin_cbd *cbd)
{
- DBG("%p", cbd);
if (cbd->timeout_id) {
g_source_remove(cbd->timeout_id);
}
@@ -186,7 +191,7 @@
static const char *ril_sim_app_id(struct ril_sim *sd)
{
- return (sd->card && sd->card->app) ? sd->card->app->aid : NULL;
+ return sd->card->app ? sd->card->app->aid : NULL;
}
int ril_sim_app_type(struct ofono_sim *sim)
@@ -203,8 +208,6 @@
char *hex_path = NULL;
int len;
- DBG("");
-
if (path_len > 0 && path_len < 7) {
memcpy(db_path, path, path_len);
len = path_len;
@@ -220,7 +223,7 @@
if (len > 0) {
hex_path = encode_hex(db_path, len, 0);
grilio_request_append_utf8(req, hex_path);
- DBG("%s", hex_path);
+ DBG_(sd, "%s", hex_path);
g_free(hex_path);
} else if (fileid == SIM_EF_ICCID_FILEID || fileid == SIM_EFPL_FILEID) {
/*
@@ -233,7 +236,7 @@
* See 'struct ef_db' in:
* ../../src/simutil.c for more details.
*/
- DBG("%s", ROOTMF);
+ DBG_(sd, "%s", ROOTMF);
grilio_request_append_utf8(req, ROOTMF);
} else {
/*
@@ -244,7 +247,7 @@
* be returned.
*/
- DBG("returning empty path.");
+ DBG_(sd, "returning empty path.");
grilio_request_append_utf8(req, NULL);
}
}
@@ -300,7 +303,7 @@
guchar access[3] = { 0x00, 0x00, 0x00 };
guchar file_status = EF_STATUS_VALID;
- DBG("");
+ DBG_(sd, "");
/* In case sim card has been removed prior to this callback has been
* called we must not call the core call back method as otherwise the
@@ -314,7 +317,6 @@
error.error = 0;
error.type = OFONO_ERROR_TYPE_FAILURE;
if (status != RIL_E_SUCCESS) {
- DBG("Reply failure: %s", ril_error_to_string(status));
goto error;
}
@@ -367,7 +369,7 @@
guint id;
GRilIoRequest *req = grilio_request_sized_new(80);
- DBG("cmd=0x%.2X,efid=0x%.4X,%d,%d,%d,(null),pin2=(null),aid=%s",
+ DBG_(sd, "cmd=0x%.2X,efid=0x%.4X,%d,%d,%d,(null),pin2=(null),aid=%s",
cmd, fileid, p1, p2, p3, ril_sim_app_id(sd));
grilio_request_append_int32(req, cmd);
@@ -410,7 +412,7 @@
int sw1 = 0, sw2 = 0, response_len = 0;
guchar *response = NULL;
- DBG("");
+ DBG_(cbd->sd, "");
if (status != RIL_E_SUCCESS) {
ofono_error("Error: %s", ril_error_to_string(status));
goto error;
@@ -482,7 +484,7 @@
GRilIoParser rilp;
grilio_parser_init(&rilp, data, len);
imsi = grilio_parser_get_utf8(&rilp);
- DBG("%s", imsi);
+ DBG_(cbd->sd, "%s", imsi);
if (imsi) {
/* 15 is the max length of IMSI */
GASSERT(strlen(imsi) == 15);
@@ -503,7 +505,7 @@
struct ril_sim *sd = ril_sim_get_data(sim);
GRilIoRequest *req = grilio_request_sized_new(60);
- DBG("%s", ril_sim_app_id(sd));
+ DBG_(sd, "%s", ril_sim_app_id(sd));
grilio_request_append_int32(req, GET_IMSI_NUM_PARAMS);
grilio_request_append_utf8(req, ril_sim_app_id(sd));
@@ -521,9 +523,8 @@
static enum ofono_sim_password_type ril_sim_passwd_state(struct ril_sim *sd)
{
- if (sd->card && sd->card->app) {
- const struct ril_sim_card_app *app = sd->card->app;
-
+ const struct ril_sim_card_app *app = sd->card->app;
+ if (app) {
switch (app->app_state) {
case RIL_APPSTATE_PIN:
return OFONO_SIM_PASSWORD_SIM_PIN;
@@ -567,9 +568,8 @@
static gboolean ril_sim_app_in_transient_state(struct ril_sim *sd)
{
- if (sd->card && sd->card->app) {
- const struct ril_sim_card_app *app = sd->card->app;
-
+ const struct ril_sim_card_app *app = sd->card->app;
+ if (app) {
switch (app->app_state) {
case RIL_APPSTATE_DETECTED:
return TRUE;
@@ -658,14 +658,134 @@
}
}
+static int ril_sim_parse_retry_count(const void *data, guint len)
+{
+ int retry_count = -1;
+ GRilIoParser rilp;
+
+ grilio_parser_init(&rilp, data, len);
+ grilio_parser_get_int32(&rilp, NULL);
+ grilio_parser_get_int32(&rilp, &retry_count);
+ return retry_count;
+}
+
+static GRilIoRequest *ril_sim_enter_sim_req(struct ril_sim *sd, const char* pw)
+{
+ const char *app_id = ril_sim_app_id(sd);
+ if (app_id) {
+ GRilIoRequest *req = grilio_request_new();
+ grilio_request_append_int32(req, ENTER_SIM_PIN_PARAMS);
+ grilio_request_append_utf8(req, pw);
+ grilio_request_append_utf8(req, app_id);
+ return req;
+ }
+ return NULL;
+}
+
+/*
+ * Some RIL implementations allow to query the retry count
+ * by sending the empty pin in any state.
+ */
+static void ril_sim_query_pin2_retries_cb(GRilIoChannel *io, int status,
+ const void *data, guint len, void *user_data)
+{
+ struct ril_sim_cbd *cbd = user_data;
+ struct ril_sim *sd = cbd->sd;
|
[-]
[+]
|
Changed |
_service:tar_git:ofono-1.17+git31.tar.bz2/ofono/drivers/ril/ril_subscription.conf
^
|
@@ -95,3 +95,13 @@
# Default is auto (usage based on the RIL version)
#
#allowDataReq=auto
+
+# Since RIL interface doesn't provide the standard way of querying the
+# number of pin retries left, some RIL implementation (namely Qualcomm)
+# allow to query the retry count by sending the empty pin. If your RIL
+# actually does check the empty pin (and decrements the retry count)
+# then you should turn this feature off.
+#
+# Default is true
+#
+#emptyPinQuery=true
|
[-]
[+]
|
Changed |
_service:tar_git:ofono-1.17+git31.tar.bz2/ofono/drivers/ril/ril_types.h
^
|
@@ -52,6 +52,7 @@
struct ril_slot_config {
guint slot;
gboolean enable_4g;
+ gboolean empty_pin_query;
};
#endif /* RIL_TYPES_H */
|