Progress of GPRS IPv6
by nanxi
Hi oFono team,
I noticed that the support of GPRS IPv6 is still in progress. Wonder if
there is any estimate on the feature complete date of this feature?
--
Thanks,
6 years, 1 month
[PATCH] sim: change pin_retries array to unsigned char
by Cedric Jehasse
From: Cedric Jehasse <cedric.jehasse(a)softathome.com>
Had a problem on mips, the Retries dict in org.ofono.SimManager was 0
for all pin-types.
The problem is int* are passed to dbus-functions, while the type is
DBUS_TYPE_BYTE. Changed the type of pin_retries throughout the code to
match the byte type.
---
drivers/atmodem/sim.c | 24 ++++++++++++------------
drivers/isimodem/uicc.c | 2 +-
drivers/qmimodem/sim-legacy.c | 2 +-
drivers/qmimodem/sim.c | 2 +-
include/sim.h | 2 +-
src/sim.c | 13 +++++++------
6 files changed, 23 insertions(+), 22 deletions(-)
diff --git a/drivers/atmodem/sim.c b/drivers/atmodem/sim.c
index c128e33..0f64602 100644
--- a/drivers/atmodem/sim.c
+++ b/drivers/atmodem/sim.c
@@ -479,7 +479,7 @@ static struct {
#define BUILD_PIN_RETRIES_ARRAY(passwd_types, passwd_types_cnt, retry) \
for (i = 0; i < OFONO_SIM_PASSWORD_INVALID; i++) \
- retry[i] = -1; \
+ retry[i] = 0xff; \
\
for (i = 0; i < passwd_types_cnt; i++) { \
int val; \
@@ -500,7 +500,7 @@ static void huawei_cpin_cb(gboolean ok, GAtResult *result, gpointer user_data)
const char *final = g_at_result_final_response(result);
GAtResultIter iter;
struct ofono_error error;
- int retries[OFONO_SIM_PASSWORD_INVALID];
+ unsigned char retries[OFONO_SIM_PASSWORD_INVALID];
size_t i;
static enum ofono_sim_password_type password_types[] = {
OFONO_SIM_PASSWORD_SIM_PUK,
@@ -547,7 +547,7 @@ static void pinnum_cb(gboolean ok, GAtResult *result, gpointer user_data)
const char *final = g_at_result_final_response(result);
GAtResultIter iter;
struct ofono_error error;
- int retries[OFONO_SIM_PASSWORD_INVALID];
+ unsigned char retries[OFONO_SIM_PASSWORD_INVALID];
size_t i;
static enum ofono_sim_password_type password_types[] = {
OFONO_SIM_PASSWORD_SIM_PIN,
@@ -587,7 +587,7 @@ static void zpinpuk_cb(gboolean ok, GAtResult *result, gpointer user_data)
const char *final = g_at_result_final_response(result);
GAtResultIter iter;
struct ofono_error error;
- int retries[OFONO_SIM_PASSWORD_INVALID];
+ unsigned char retries[OFONO_SIM_PASSWORD_INVALID];
size_t i;
static enum ofono_sim_password_type password_types[] = {
OFONO_SIM_PASSWORD_SIM_PIN,
@@ -625,7 +625,7 @@ static void xpincnt_cb(gboolean ok, GAtResult *result, gpointer user_data)
const char *final = g_at_result_final_response(result);
GAtResultIter iter;
struct ofono_error error;
- int retries[OFONO_SIM_PASSWORD_INVALID];
+ unsigned char retries[OFONO_SIM_PASSWORD_INVALID];
size_t i;
static enum ofono_sim_password_type password_types[] = {
OFONO_SIM_PASSWORD_SIM_PIN,
@@ -664,7 +664,7 @@ static void oercn_cb(gboolean ok, GAtResult *result, gpointer user_data)
const char *final = g_at_result_final_response(result);
GAtResultIter iter;
struct ofono_error error;
- int retries[OFONO_SIM_PASSWORD_INVALID];
+ unsigned char retries[OFONO_SIM_PASSWORD_INVALID];
size_t i;
static enum ofono_sim_password_type password_types[] = {
OFONO_SIM_PASSWORD_SIM_PIN,
@@ -704,7 +704,7 @@ static void cpnnum_cb(gboolean ok, GAtResult *result, gpointer user_data)
const char *line;
int num;
char **entries;
- int retries[OFONO_SIM_PASSWORD_INVALID];
+ unsigned char retries[OFONO_SIM_PASSWORD_INVALID];
size_t i;
decode_at_error(&error, final);
@@ -760,7 +760,7 @@ static void at_epin_cb(gboolean ok, GAtResult *result, gpointer user_data)
const char *final = g_at_result_final_response(result);
GAtResultIter iter;
struct ofono_error error;
- int retries[OFONO_SIM_PASSWORD_INVALID];
+ unsigned char retries[OFONO_SIM_PASSWORD_INVALID];
size_t i;
static enum ofono_sim_password_type password_types[] = {
OFONO_SIM_PASSWORD_SIM_PIN,
@@ -798,7 +798,7 @@ static void at_cpinr_cb(gboolean ok, GAtResult *result, gpointer user_data)
ofono_sim_pin_retries_cb_t cb = cbd->cb;
GAtResultIter iter;
struct ofono_error error;
- int retries[OFONO_SIM_PASSWORD_INVALID];
+ unsigned char retries[OFONO_SIM_PASSWORD_INVALID];
size_t len = sizeof(at_sim_name) / sizeof(*at_sim_name);
size_t i;
@@ -843,7 +843,7 @@ static void at_spic_cb(gboolean ok, GAtResult *result, gpointer user_data)
const char *final = g_at_result_final_response(result);
GAtResultIter iter;
struct ofono_error error;
- int retries[OFONO_SIM_PASSWORD_INVALID];
+ unsigned char retries[OFONO_SIM_PASSWORD_INVALID];
size_t i;
static enum ofono_sim_password_type password_types[] = {
OFONO_SIM_PASSWORD_SIM_PIN,
@@ -887,7 +887,7 @@ static void at_pct_cb(gboolean ok, GAtResult *result, gpointer user_data)
const char *final = g_at_result_final_response(result);
GAtResultIter iter;
struct ofono_error error;
- int retries[OFONO_SIM_PASSWORD_INVALID];
+ unsigned char retries[OFONO_SIM_PASSWORD_INVALID];
size_t i;
enum ofono_sim_password_type pin_type;
@@ -939,7 +939,7 @@ static void at_pnnm_cb(gboolean ok, GAtResult *result, gpointer user_data)
const char *final = g_at_result_final_response(result);
GAtResultIter iter;
struct ofono_error error;
- int retries[OFONO_SIM_PASSWORD_INVALID];
+ unsigned char retries[OFONO_SIM_PASSWORD_INVALID];
size_t i;
static enum ofono_sim_password_type password_types[] = {
OFONO_SIM_PASSWORD_SIM_PIN,
diff --git a/drivers/isimodem/uicc.c b/drivers/isimodem/uicc.c
index 0a5121d..a075d27 100644
--- a/drivers/isimodem/uicc.c
+++ b/drivers/isimodem/uicc.c
@@ -926,7 +926,7 @@ static void uicc_query_pin_retries_resp(const GIsiMessage *msg, void *opaque)
{
struct isi_cb_data *cbd = opaque;
ofono_sim_pin_retries_cb_t cb = cbd->cb;
- int retries[OFONO_SIM_PASSWORD_INVALID];
+ unsigned char retries[OFONO_SIM_PASSWORD_INVALID];
GIsiSubBlockIter iter;
uint8_t num_sb = 0;
diff --git a/drivers/qmimodem/sim-legacy.c b/drivers/qmimodem/sim-legacy.c
index 318b1ae..5b1bb5e 100644
--- a/drivers/qmimodem/sim-legacy.c
+++ b/drivers/qmimodem/sim-legacy.c
@@ -38,7 +38,7 @@
struct sim_data {
struct qmi_service *dms;
- int retries[OFONO_SIM_PASSWORD_INVALID];
+ unsigned char retries[OFONO_SIM_PASSWORD_INVALID];
};
static void qmi_read_file_info(struct ofono_sim *sim, int fileid,
diff --git a/drivers/qmimodem/sim.c b/drivers/qmimodem/sim.c
index 197da50..f7ccd06 100644
--- a/drivers/qmimodem/sim.c
+++ b/drivers/qmimodem/sim.c
@@ -44,7 +44,7 @@ struct sim_data {
uint8_t card_state;
uint8_t app_type;
uint8_t passwd_state;
- int retries[OFONO_SIM_PASSWORD_INVALID];
+ unsigned char retries[OFONO_SIM_PASSWORD_INVALID];
};
static int create_fileid_data(uint8_t app_type, int fileid,
diff --git a/include/sim.h b/include/sim.h
index ed850f9..f66bb93 100644
--- a/include/sim.h
+++ b/include/sim.h
@@ -113,7 +113,7 @@ typedef void (*ofono_sim_passwd_cb_t)(const struct ofono_error *error,
void *data);
typedef void (*ofono_sim_pin_retries_cb_t)(const struct ofono_error *error,
- int retries[OFONO_SIM_PASSWORD_INVALID], void *data);
+ unsigned char retries[OFONO_SIM_PASSWORD_INVALID], void *data);
typedef void (*ofono_sim_lock_unlock_cb_t)(const struct ofono_error *error,
void *data);
diff --git a/src/sim.c b/src/sim.c
index edae5eb..fe871a0 100644
--- a/src/sim.c
+++ b/src/sim.c
@@ -62,7 +62,7 @@ struct ofono_sim {
enum ofono_sim_password_type pin_type;
gboolean locked_pins[OFONO_SIM_PASSWORD_SIM_PUK]; /* Number of PINs */
- int pin_retries[OFONO_SIM_PASSWORD_INVALID];
+ unsigned char pin_retries[OFONO_SIM_PASSWORD_INVALID];
enum ofono_sim_phase phase;
unsigned char mnc_length;
@@ -273,7 +273,7 @@ static void **get_pin_retries(struct ofono_sim *sim)
void **ret;
for (i = 1, nelem = 0; i < OFONO_SIM_PASSWORD_INVALID; i++) {
- if (sim->pin_retries[i] == -1)
+ if (sim->pin_retries[i] == 0xff)
continue;
nelem += 1;
@@ -282,7 +282,7 @@ static void **get_pin_retries(struct ofono_sim *sim)
ret = g_new0(void *, nelem * 2 + 1);
for (i = 1, nelem = 0; i < OFONO_SIM_PASSWORD_INVALID; i++) {
- if (sim->pin_retries[i] == -1)
+ if (sim->pin_retries[i] == 0xff)
continue;
ret[nelem++] = (void *) sim_passwd_name(i);
@@ -431,7 +431,7 @@ done:
}
static void sim_pin_retries_query_cb(const struct ofono_error *error,
- int retries[OFONO_SIM_PASSWORD_INVALID],
+ unsigned char retries[OFONO_SIM_PASSWORD_INVALID],
void *data)
{
struct ofono_sim *sim = data;
@@ -450,6 +450,7 @@ static void sim_pin_retries_query_cb(const struct ofono_error *error,
memcpy(sim->pin_retries, retries, sizeof(sim->pin_retries));
pin_retries = get_pin_retries(sim);
+
ofono_dbus_signal_dict_property_changed(conn, path,
OFONO_SIM_MANAGER_INTERFACE, "Retries",
DBUS_TYPE_BYTE, &pin_retries);
@@ -2372,7 +2373,7 @@ static void sim_free_main_state(struct ofono_sim *sim)
int i;
for (i = 0; i < OFONO_SIM_PASSWORD_INVALID; i++)
- sim->pin_retries[i] = -1;
+ sim->pin_retries[i] = 0xff;
memset(sim->locked_pins, 0, sizeof(sim->locked_pins));
@@ -2881,7 +2882,7 @@ struct ofono_sim *ofono_sim_create(struct ofono_modem *modem,
sim_remove, sim);
for (i = 0; i < OFONO_SIM_PASSWORD_INVALID; i++)
- sim->pin_retries[i] = -1;
+ sim->pin_retries[i] = 0xff;
for (l = g_drivers; l; l = l->next) {
const struct ofono_sim_driver *drv = l->data;
--
1.9.2
6 years, 1 month
[PATCH 1/1] add set_online interface to he910 modem
by Alexey Mednyy
Had to add set_online interface to he910 modem connman now, working
properly if disable he910 cellular (was not implemented error before).
---
plugins/he910.c | 25 +++++++++++++++++++++++++
1 file changed, 25 insertions(+)
diff --git a/plugins/he910.c b/plugins/he910.c
index 69362b8..add2243 100644
--- a/plugins/he910.c
+++ b/plugins/he910.c
@@ -322,6 +322,30 @@ static void he910_pre_sim(struct ofono_modem *modem)
ofono_location_reporting_create(modem, 0, "telitmodem", data->chat);
}
+
+static void set_online_cb(gboolean ok, GAtResult *result, gpointer
user_data)
+{
+ struct cb_data *cbd = user_data;
+ ofono_modem_online_cb_t cb = cbd->cb;
+ struct ofono_error error;
+
+ decode_at_error(&error, g_at_result_final_response(result));
+ cb(&error, cbd->data);
+}
+
+static void he910_set_online(struct ofono_modem *modem, ofono_bool_t
online,
+ ofono_modem_online_cb_t cb, void
*user_data)
+{
+ struct he910_data *data = ofono_modem_get_data(modem);
+ struct cb_data *cbd = cb_data_new(cb, user_data);
+ char const *command = online ? "AT+CFUN=1,0" : "AT+CFUN=4,0";
+
+ DBG("modem %p %s", modem, online ? "online" : "offline");
+
+ g_at_chat_send(data->chat, command, none_prefix, set_online_cb,
+ cbd, g_free);
+}
+
static void he910_post_online(struct ofono_modem *modem)
{
struct he910_data *data = ofono_modem_get_data(modem);
@@ -388,6 +412,7 @@ static struct ofono_modem_driver he910_driver = {
.enable = he910_enable,
.disable = he910_disable,
.pre_sim = he910_pre_sim,
+ .set_online = he910_set_online,
.post_online = he910_post_online,
};
--
1.9.1
6 years, 1 month
GPRS provisioning is broken for old (non-USIM) SIM cards
by Alexey Mednyy
year old patch from ubuntu's ofono flavor.
commit d9b8a16f0878868396bbecb61941d0325f07e662
Author: Alfonso Sanchez-Beato <alfonsosanchezbeato(a)yahoo.es>
Date: Wed Oct 2 09:49:46 2013 +0200
Fix for LP #1231320: GPRS provisioning is broken for old (non-USIM)
SIM cards in Ubuntu
diff --git a/include/sim.h b/include/sim.h
index ed850f9..f63324a 100644
--- a/include/sim.h
+++ b/include/sim.h
@@ -191,6 +191,7 @@ void *ofono_sim_get_data(struct ofono_sim *sim);
const char *ofono_sim_get_imsi(struct ofono_sim *sim);
const char *ofono_sim_get_mcc(struct ofono_sim *sim);
const char *ofono_sim_get_mnc(struct ofono_sim *sim);
+unsigned ofono_sim_get_mnc_length(struct ofono_sim *sim);
const char *ofono_sim_get_spn(struct ofono_sim *sim);
enum ofono_sim_phase ofono_sim_get_phase(struct ofono_sim *sim);
diff --git a/plugins/provision.c b/plugins/provision.c
index 4e9e2a7..78f4f5b 100644
--- a/plugins/provision.c
+++ b/plugins/provision.c
@@ -48,7 +48,7 @@ static int provision_get_settings(const char *mcc,
const char *mnc,
int ap_count;
int i;
- DBG("Provisioning for MCC %s, MNC %s, SPN '%s'", mcc, mnc, spn);
+ ofono_info("Provisioning for MCC %s, MNC %s, SPN '%s'", mcc,
mnc, spn);
/*
* TODO: review with upstream. Default behavior was to
diff --git a/src/gprs.c b/src/gprs.c
index e379f7b..0218696 100644
--- a/src/gprs.c
+++ b/src/gprs.c
@@ -2967,7 +2967,7 @@ static void provision_context(const struct
ofono_gprs_provision_data *ap,
gprs->contexts = g_slist_append(gprs->contexts, context);
}
-static void provision_contexts(struct ofono_gprs *gprs, const char *mcc,
+static int provision_contexts(struct ofono_gprs *gprs, const char *mcc,
const char *mnc, const char *spn)
{
struct ofono_gprs_provision_data *settings;
@@ -2977,13 +2977,15 @@ static void provision_contexts(struct ofono_gprs
*gprs, const char *mcc,
if (__ofono_gprs_provision_get_settings(mcc, mnc, spn,
&settings, &count) ==
FALSE) {
ofono_warn("Provisioning failed");
- return;
+ return -EINVAL;
}
for (i = 0; i < count; i++)
provision_context(&settings[i], gprs);
__ofono_gprs_provision_free_settings(settings, count);
+
+ return 0;
+ ofono_dbus_signal_property_changed(conn, path,
+ ofono_dbus_signal_property_changed(conn, path,
+ OFONO_SIM_MANAGER_INTERFACE,
+ "MobileNetworkCode",
+ DBUS_TYPE_STRING, &str);
sim_set_ready(sim);
@@ -1772,8 +1783,12 @@ static void sim_ad_read_cb(int ok, int length,
int record,
if (!ok)
return;
+ if (length < 3) {
+ ofono_error("EFad should contain at least three bytes");
+ return;
+ }
if (length < 4) {
- ofono_error("EFad should contain at least four bytes");
+ ofono_info("EFad does not contain MNC length");
return;
}
@@ -2234,6 +2249,14 @@ const char *ofono_sim_get_mnc(struct ofono_sim *sim)
return sim->mnc;
}
+unsigned ofono_sim_get_mnc_length(struct ofono_sim *sim)
+{
+ if (sim == NULL)
+ return 0;
+
+ return sim->mnc_length;
+}
+
const char *ofono_sim_get_spn(struct ofono_sim *sim)
{
if (sim == NULL)
--
_________________________________
Best regards, Mednyy Alexey.
6 years, 1 month