Open Source Telephony
 help / color / mirror / Atom feed
* [PATCH v3 0/6] Query retry counters
@ 2011-01-10 21:02 Lucas De Marchi
  2011-01-10 21:02 ` [PATCH v3 1/6] atmodem: check for VENDOR_HUAWEI on sim atom Lucas De Marchi
                   ` (6 more replies)
  0 siblings, 7 replies; 9+ messages in thread
From: Lucas De Marchi @ 2011-01-10 21:02 UTC (permalink / raw)
  To: ofono

[-- Attachment #1: Type: text/plain, Size: 1092 bytes --]

Diff from previous version:
 - memset(retries, -1, sizeof(retries)) works, but it's just because of luck in
   2's complement logic. Use a loop instead.
 - "^CPIN" command is exclusive to HUAWEI. So change "xcpin" prefix to
   "huawei_cpin" and passs OFONO_VENDOR_HUAWEI quirk on sim creation. This change
   needed 2 more patches (the first ones) in order to make it work.
 - space cleanup
 - use memcmp to compare the pin_retries array instead of a loop

Lucas De Marchi (6):
  atmodem: check for VENDOR_HUAWEI on sim atom
  huawei: use VENDOR_HUAWEI quirk on sim creation
  include: add method to query pin Retries
  sim: query remaining pin retries
  doc: detail Retries property
  atmodem: implement query for remaining pin retries

 doc/sim-api.txt       |   12 ++++++
 drivers/atmodem/sim.c |   95 ++++++++++++++++++++++++++++++++++++++++++++++++-
 include/sim.h         |    5 +++
 plugins/huawei.c      |    2 +-
 src/sim.c             |   90 ++++++++++++++++++++++++++++++++++++++++++++++
 5 files changed, 202 insertions(+), 2 deletions(-)

-- 
1.7.3.5


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH v3 1/6] atmodem: check for VENDOR_HUAWEI on sim atom
  2011-01-10 21:02 [PATCH v3 0/6] Query retry counters Lucas De Marchi
@ 2011-01-10 21:02 ` Lucas De Marchi
  2011-01-10 21:02 ` [PATCH v3 2/6] huawei: use VENDOR_HUAWEI quirk on sim creation Lucas De Marchi
                   ` (5 subsequent siblings)
  6 siblings, 0 replies; 9+ messages in thread
From: Lucas De Marchi @ 2011-01-10 21:02 UTC (permalink / raw)
  To: ofono

[-- Attachment #1: Type: text/plain, Size: 708 bytes --]

---
 drivers/atmodem/sim.c |    4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/drivers/atmodem/sim.c b/drivers/atmodem/sim.c
index 1653ede..33f756d 100644
--- a/drivers/atmodem/sim.c
+++ b/drivers/atmodem/sim.c
@@ -143,8 +143,10 @@ static void at_sim_read_info(struct ofono_sim *sim, int fileid,
 
 	snprintf(buf, sizeof(buf), "AT+CRSM=192,%i", fileid);
 
-	if (sd->vendor == OFONO_VENDOR_QUALCOMM_MSM)
+	if (sd->vendor == OFONO_VENDOR_QUALCOMM_MSM ||
+					sd->vendor == OFONO_VENDOR_HUAWEI) {
 		strcat(buf, ",0,0,255"); /* Maximum possible length */
+	}
 
 	if (g_at_chat_send(sd->chat, buf, crsm_prefix,
 				at_crsm_info_cb, cbd, g_free) > 0)
-- 
1.7.3.5


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH v3 2/6] huawei: use VENDOR_HUAWEI quirk on sim creation
  2011-01-10 21:02 [PATCH v3 0/6] Query retry counters Lucas De Marchi
  2011-01-10 21:02 ` [PATCH v3 1/6] atmodem: check for VENDOR_HUAWEI on sim atom Lucas De Marchi
@ 2011-01-10 21:02 ` Lucas De Marchi
  2011-01-10 21:02 ` [PATCH v3 3/6] include: add method to query pin Retries Lucas De Marchi
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 9+ messages in thread
From: Lucas De Marchi @ 2011-01-10 21:02 UTC (permalink / raw)
  To: ofono

[-- Attachment #1: Type: text/plain, Size: 578 bytes --]

---
 plugins/huawei.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/plugins/huawei.c b/plugins/huawei.c
index 0b958ec..d6a9d68 100644
--- a/plugins/huawei.c
+++ b/plugins/huawei.c
@@ -618,7 +618,7 @@ static void huawei_pre_sim(struct ofono_modem *modem)
 	DBG("%p", modem);
 
 	ofono_devinfo_create(modem, 0, "atmodem", data->pcui);
-	data->sim = ofono_sim_create(modem, OFONO_VENDOR_QUALCOMM_MSM,
+	data->sim = ofono_sim_create(modem, OFONO_VENDOR_HUAWEI,
 					"atmodem", data->pcui);
 
 	data->sim_poll_count = 0;
-- 
1.7.3.5


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH v3 3/6] include: add method to query pin Retries
  2011-01-10 21:02 [PATCH v3 0/6] Query retry counters Lucas De Marchi
  2011-01-10 21:02 ` [PATCH v3 1/6] atmodem: check for VENDOR_HUAWEI on sim atom Lucas De Marchi
  2011-01-10 21:02 ` [PATCH v3 2/6] huawei: use VENDOR_HUAWEI quirk on sim creation Lucas De Marchi
@ 2011-01-10 21:02 ` Lucas De Marchi
  2011-01-10 21:02 ` [PATCH v3 4/6] sim: query remaining pin retries Lucas De Marchi
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 9+ messages in thread
From: Lucas De Marchi @ 2011-01-10 21:02 UTC (permalink / raw)
  To: ofono

[-- Attachment #1: Type: text/plain, Size: 1064 bytes --]

---
 include/sim.h |    5 +++++
 1 files changed, 5 insertions(+), 0 deletions(-)

diff --git a/include/sim.h b/include/sim.h
index 7860e24..830322a 100644
--- a/include/sim.h
+++ b/include/sim.h
@@ -108,6 +108,9 @@ typedef void (*ofono_sim_passwd_cb_t)(const struct ofono_error *error,
 					enum ofono_sim_password_type type,
 					void *data);
 
+typedef void (*ofono_sim_pin_retries_cb_t)(const struct ofono_error *error,
+			int retries[OFONO_SIM_PASSWORD_INVALID], void *data);
+
 typedef void (*ofono_sim_lock_unlock_cb_t)(const struct ofono_error *error,
 					void *data);
 
@@ -144,6 +147,8 @@ struct ofono_sim_driver {
 			ofono_sim_passwd_cb_t cb, void *data);
 	void (*send_passwd)(struct ofono_sim *sim, const char *passwd,
 			ofono_sim_lock_unlock_cb_t cb, void *data);
+	void (*query_pin_retries)(struct ofono_sim *sim,
+				ofono_sim_pin_retries_cb_t cb, void *data);
 	void (*reset_passwd)(struct ofono_sim *sim, const char *puk,
 			const char *passwd,
 			ofono_sim_lock_unlock_cb_t cb, void *data);
-- 
1.7.3.5


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH v3 4/6] sim: query remaining pin retries
  2011-01-10 21:02 [PATCH v3 0/6] Query retry counters Lucas De Marchi
                   ` (2 preceding siblings ...)
  2011-01-10 21:02 ` [PATCH v3 3/6] include: add method to query pin Retries Lucas De Marchi
@ 2011-01-10 21:02 ` Lucas De Marchi
  2011-01-10 21:02 ` [PATCH v3 5/6] doc: detail Retries property Lucas De Marchi
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 9+ messages in thread
From: Lucas De Marchi @ 2011-01-10 21:02 UTC (permalink / raw)
  To: ofono

[-- Attachment #1: Type: text/plain, Size: 5379 bytes --]

Check the remaining pin retries after each operation that might have
changed it, i.e. locking, unlocking, reseting or changing pin.
---
 src/sim.c |   90 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 90 insertions(+), 0 deletions(-)

diff --git a/src/sim.c b/src/sim.c
index 335f611..02547a1 100644
--- a/src/sim.c
+++ b/src/sim.c
@@ -62,6 +62,8 @@ 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];
+
 	enum ofono_sim_phase phase;
 	unsigned char mnc_length;
 	enum ofono_sim_cphs_phase cphs_phase;
@@ -248,6 +250,33 @@ static char **get_locked_pins(struct ofono_sim *sim)
 	return ret;
 }
 
+static void **get_pin_retries(struct ofono_sim *sim)
+{
+	int i, nelem;
+	void **ret;
+
+	for (i = 1, nelem = 0; i < OFONO_SIM_PASSWORD_INVALID; i++) {
+		if (sim->pin_retries[i] == -1)
+			continue;
+
+		nelem+=1;
+	}
+
+	ret = g_new0(void *, nelem * 2 + 1);
+
+	nelem = 0;
+
+	for (i = 1; i < OFONO_SIM_PASSWORD_INVALID; i++) {
+		if (sim->pin_retries[i] == -1)
+			continue;
+
+		ret[nelem++] = (void *) sim_passwd_name(i);
+		ret[nelem++] = &sim->pin_retries[i];
+	}
+
+	return ret;
+}
+
 static char **get_service_numbers(GSList *service_numbers)
 {
 	int nelem;
@@ -287,6 +316,7 @@ static DBusMessage *sim_get_properties(DBusConnection *conn,
 	char **service_numbers;
 	char **locked_pins;
 	const char *pin_name;
+	void **pin_retries;
 	dbus_bool_t present = sim->state != OFONO_SIM_STATE_NOT_PRESENT;
 	dbus_bool_t fdn;
 	dbus_bool_t bdn;
@@ -369,12 +399,53 @@ static DBusMessage *sim_get_properties(DBusConnection *conn,
 				DBUS_TYPE_STRING,
 				(void *) &pin_name);
 
+	pin_retries = get_pin_retries(sim);
+	ofono_dbus_dict_append_dict(&dict, "Retries", DBUS_TYPE_BYTE,
+								&pin_retries);
+	g_free(pin_retries);
+
 done:
 	dbus_message_iter_close_container(&iter, &dict);
 
 	return reply;
 }
 
+static void sim_pin_retries_query_cb(const struct ofono_error *error,
+					int retries[OFONO_SIM_PASSWORD_INVALID],
+					void *data)
+{
+	struct ofono_sim *sim = data;
+	DBusConnection *conn = ofono_dbus_get_connection();
+	const char *path = __ofono_atom_get_path(sim->atom);
+	void **pin_retries;
+
+	if (error->type != OFONO_ERROR_TYPE_NO_ERROR) {
+		ofono_error("Querying remaining pin retries failed");
+
+		return;
+	}
+
+	if (!memcmp(retries, sim->pin_retries, sizeof(retries)))
+		return;
+
+	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);
+	g_free(pin_retries);
+}
+
+static void sim_pin_retries_check(struct ofono_sim *sim)
+{
+	if (sim->driver->query_pin_retries == NULL)
+		return;
+
+	sim->driver->query_pin_retries(sim, sim_pin_retries_query_cb, sim);
+}
+
+
 static void msisdn_set_done(struct msisdn_set_request *req)
 {
 	DBusMessage *reply;
@@ -549,6 +620,8 @@ static void sim_locked_cb(struct ofono_sim *sim, gboolean locked)
 						"LockedPins", DBUS_TYPE_STRING,
 						&locked_pins);
 	g_strfreev(locked_pins);
+
+	sim_pin_retries_check(sim);
 }
 
 static void sim_unlock_cb(const struct ofono_error *error, void *data)
@@ -557,7 +630,10 @@ static void sim_unlock_cb(const struct ofono_error *error, void *data)
 
 	if (error->type != OFONO_ERROR_TYPE_NO_ERROR) {
 		DBusMessage *reply = __ofono_error_failed(sim->pending);
+
 		__ofono_dbus_pending_reply(&sim->pending, reply);
+		sim_pin_retries_check(sim);
+
 		return;
 	}
 
@@ -570,7 +646,10 @@ static void sim_lock_cb(const struct ofono_error *error, void *data)
 
 	if (error->type != OFONO_ERROR_TYPE_NO_ERROR) {
 		DBusMessage *reply = __ofono_error_failed(sim->pending);
+
 		__ofono_dbus_pending_reply(&sim->pending, reply);
+		sim_pin_retries_check(sim);
+
 		return;
 	}
 
@@ -639,11 +718,16 @@ static void sim_change_pin_cb(const struct ofono_error *error, void *data)
 	if (error->type != OFONO_ERROR_TYPE_NO_ERROR) {
 		__ofono_dbus_pending_reply(&sim->pending,
 				__ofono_error_failed(sim->pending));
+
+		sim_pin_retries_check(sim);
+
 		return;
 	}
 
 	__ofono_dbus_pending_reply(&sim->pending,
 				dbus_message_new_method_return(sim->pending));
+
+	sim_pin_retries_check(sim);
 }
 
 static DBusMessage *sim_change_pin(DBusConnection *conn, DBusMessage *msg,
@@ -1594,6 +1678,8 @@ static void sim_pin_query_cb(const struct ofono_error *error,
 						&pin_name);
 	}
 
+	sim_pin_retries_check(sim);
+
 checkdone:
 	if (pin_type == OFONO_SIM_PASSWORD_NONE)
 		sim_initialize_after_pin(sim);
@@ -2184,6 +2270,7 @@ struct ofono_sim *ofono_sim_create(struct ofono_modem *modem,
 {
 	struct ofono_sim *sim;
 	GSList *l;
+	int i;
 
 	if (driver == NULL)
 		return NULL;
@@ -2197,6 +2284,9 @@ struct ofono_sim *ofono_sim_create(struct ofono_modem *modem,
 	sim->atom = __ofono_modem_add_atom(modem, OFONO_ATOM_TYPE_SIM,
 						sim_remove, sim);
 
+	for (i = 0; i < OFONO_SIM_PASSWORD_INVALID; i++)
+		sim->pin_retries[i] = -1;
+
 	for (l = g_drivers; l; l = l->next) {
 		const struct ofono_sim_driver *drv = l->data;
 
-- 
1.7.3.5


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH v3 5/6] doc: detail Retries property
  2011-01-10 21:02 [PATCH v3 0/6] Query retry counters Lucas De Marchi
                   ` (3 preceding siblings ...)
  2011-01-10 21:02 ` [PATCH v3 4/6] sim: query remaining pin retries Lucas De Marchi
@ 2011-01-10 21:02 ` Lucas De Marchi
  2011-01-10 21:02 ` [PATCH v3 6/6] atmodem: implement query for remaining pin retries Lucas De Marchi
  2011-01-10 21:43 ` [PATCH v3 0/6] Query retry counters Denis Kenzior
  6 siblings, 0 replies; 9+ messages in thread
From: Lucas De Marchi @ 2011-01-10 21:02 UTC (permalink / raw)
  To: ofono

[-- Attachment #1: Type: text/plain, Size: 851 bytes --]

---
 doc/sim-api.txt |   12 ++++++++++++
 1 files changed, 12 insertions(+), 0 deletions(-)

diff --git a/doc/sim-api.txt b/doc/sim-api.txt
index 89c321e..65c920d 100644
--- a/doc/sim-api.txt
+++ b/doc/sim-api.txt
@@ -145,3 +145,15 @@ Properties	boolean Present [readonly]
 
 			If BDN is enabled, oFono halts the SIM initialization
 			procedure and only emergency calls are allowed.
+
+		dict{string,byte} Retries [readonly]
+
+			Contains all the retry counters available. The possible
+			values for the first field are the same as in
+			PinRequired property. The second field contains is the
+			counter for that pin type.
+
+			This property is updated after each operation that
+			might have changed the retry counters, i.e. calls to
+			ChangePin(), EnterPin(), ResetPin() LockPin(),
+			UnlockPin().
-- 
1.7.3.5


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH v3 6/6] atmodem: implement query for remaining pin retries
  2011-01-10 21:02 [PATCH v3 0/6] Query retry counters Lucas De Marchi
                   ` (4 preceding siblings ...)
  2011-01-10 21:02 ` [PATCH v3 5/6] doc: detail Retries property Lucas De Marchi
@ 2011-01-10 21:02 ` Lucas De Marchi
  2011-01-10 21:44   ` Denis Kenzior
  2011-01-10 21:43 ` [PATCH v3 0/6] Query retry counters Denis Kenzior
  6 siblings, 1 reply; 9+ messages in thread
From: Lucas De Marchi @ 2011-01-10 21:02 UTC (permalink / raw)
  To: ofono

[-- Attachment #1: Type: text/plain, Size: 3610 bytes --]

Implement query method for the remaining pin retries on huawei modem.
---
 drivers/atmodem/sim.c |   91 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 91 insertions(+), 0 deletions(-)

diff --git a/drivers/atmodem/sim.c b/drivers/atmodem/sim.c
index 33f756d..63dcbe1 100644
--- a/drivers/atmodem/sim.c
+++ b/drivers/atmodem/sim.c
@@ -44,6 +44,8 @@
 #define EF_STATUS_INVALIDATED 0
 #define EF_STATUS_VALID 1
 
+#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
+
 struct sim_data {
 	GAtChat *chat;
 	unsigned int vendor;
@@ -53,6 +55,7 @@ struct sim_data {
 static const char *crsm_prefix[] = { "+CRSM:", NULL };
 static const char *cpin_prefix[] = { "+CPIN:", NULL };
 static const char *clck_prefix[] = { "+CLCK:", NULL };
+static const char *huawei_cpin_prefix[] = { "^CPIN:", NULL };
 static const char *none_prefix[] = { NULL };
 
 static void at_crsm_info_cb(gboolean ok, GAtResult *result, gpointer user_data)
@@ -458,6 +461,93 @@ static struct {
 	{ OFONO_SIM_PASSWORD_PHCORP_PUK,	"PH-CORP PUK"	},
 };
 
+static void huawei_cpin_cb(gboolean ok, GAtResult *result, gpointer user_data)
+{
+	struct cb_data *cbd = user_data;
+	ofono_sim_pin_retries_cb_t cb = cbd->cb;
+	const char *final = g_at_result_final_response(result);
+	GAtResultIter iter;
+	struct ofono_error error;
+	int retries[OFONO_SIM_PASSWORD_INVALID];
+	size_t i;
+	static enum ofono_sim_password_type _password_types[] = {
+		OFONO_SIM_PASSWORD_SIM_PUK,
+		OFONO_SIM_PASSWORD_SIM_PIN,
+		OFONO_SIM_PASSWORD_SIM_PUK2,
+		OFONO_SIM_PASSWORD_SIM_PIN2,
+	};
+
+	decode_at_error(&error, final);
+
+	if (!ok) {
+		cb(&error, NULL, cbd->data);
+		return;
+	}
+
+	g_at_result_iter_init(&iter, result);
+
+	if (!g_at_result_iter_next(&iter, "^CPIN:"))
+		goto error;
+
+	/* Skip status since we are not interested in this */
+	if (!g_at_result_iter_skip_next(&iter))
+		goto error;
+
+	/* Skip "overall counter" since we'll grab each one individually */
+	if (!g_at_result_iter_skip_next(&iter))
+		goto error;
+
+	for (i = 0; i < OFONO_SIM_PASSWORD_INVALID; i++)
+		retries[i] = -1;
+
+	for (i = 0; i < ARRAY_SIZE(_password_types); i++) {
+		int val;
+
+		if (!g_at_result_iter_next_number(&iter, &val))
+			goto error;
+
+		retries[_password_types[i]]= val;
+
+		DBG("retry counter id=%d, val=%d", _password_types[i],
+						retries[_password_types[i]]);
+	}
+
+	cb(&error, retries, cbd->data);
+
+	return;
+
+error:
+	CALLBACK_WITH_FAILURE(cb, NULL, cbd->data);
+}
+
+static void at_pin_retries_query(struct ofono_sim *sim,
+				ofono_sim_pin_retries_cb_t cb, void *data)
+{
+	struct sim_data *sd = ofono_sim_get_data(sim);
+
+	DBG("");
+
+	if (sd->vendor == OFONO_VENDOR_HUAWEI) {
+		struct cb_data *cbd = cb_data_new(cb, data);
+
+		if (cbd == NULL) {
+			CALLBACK_WITH_FAILURE(cb, NULL, data);
+
+			return;
+		}
+
+		if (g_at_chat_send(sd->chat, "AT^CPIN?", huawei_cpin_prefix,
+					huawei_cpin_cb, cbd, g_free) > 0)
+			return;
+
+		g_free(cbd);
+
+		CALLBACK_WITH_FAILURE(cb, NULL, data);
+	}
+
+	CALLBACK_WITH_SUCCESS(cb, NULL, data);
+}
+
 static void at_cpin_cb(gboolean ok, GAtResult *result, gpointer user_data)
 {
 	struct cb_data *cbd = user_data;
@@ -888,6 +978,7 @@ static struct ofono_sim_driver driver = {
 	.write_file_cyclic	= at_sim_update_cyclic,
 	.read_imsi		= at_read_imsi,
 	.query_passwd_state	= at_pin_query,
+	.query_pin_retries	= at_pin_retries_query,
 	.send_passwd		= at_pin_send,
 	.reset_passwd		= at_pin_send_puk,
 	.lock			= at_pin_enable,
-- 
1.7.3.5


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH v3 0/6] Query retry counters
  2011-01-10 21:02 [PATCH v3 0/6] Query retry counters Lucas De Marchi
                   ` (5 preceding siblings ...)
  2011-01-10 21:02 ` [PATCH v3 6/6] atmodem: implement query for remaining pin retries Lucas De Marchi
@ 2011-01-10 21:43 ` Denis Kenzior
  6 siblings, 0 replies; 9+ messages in thread
From: Denis Kenzior @ 2011-01-10 21:43 UTC (permalink / raw)
  To: ofono

[-- Attachment #1: Type: text/plain, Size: 1297 bytes --]

Hi Lucas,

On 01/10/2011 03:02 PM, Lucas De Marchi wrote:
> Diff from previous version:
>  - memset(retries, -1, sizeof(retries)) works, but it's just because of luck in
>    2's complement logic. Use a loop instead.
>  - "^CPIN" command is exclusive to HUAWEI. So change "xcpin" prefix to
>    "huawei_cpin" and passs OFONO_VENDOR_HUAWEI quirk on sim creation. This change
>    needed 2 more patches (the first ones) in order to make it work.
>  - space cleanup
>  - use memcmp to compare the pin_retries array instead of a loop
> 
> Lucas De Marchi (6):
>   atmodem: check for VENDOR_HUAWEI on sim atom
>   huawei: use VENDOR_HUAWEI quirk on sim creation
>   include: add method to query pin Retries
>   sim: query remaining pin retries
>   doc: detail Retries property
>   atmodem: implement query for remaining pin retries
> 
>  doc/sim-api.txt       |   12 ++++++
>  drivers/atmodem/sim.c |   95 ++++++++++++++++++++++++++++++++++++++++++++++++-
>  include/sim.h         |    5 +++
>  plugins/huawei.c      |    2 +-
>  src/sim.c             |   90 ++++++++++++++++++++++++++++++++++++++++++++++
>  5 files changed, 202 insertions(+), 2 deletions(-)
> 

I have applied the first 5 patches in this series.  See my comments for
the last patch.

Regards,
-Denis

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v3 6/6] atmodem: implement query for remaining pin retries
  2011-01-10 21:02 ` [PATCH v3 6/6] atmodem: implement query for remaining pin retries Lucas De Marchi
@ 2011-01-10 21:44   ` Denis Kenzior
  0 siblings, 0 replies; 9+ messages in thread
From: Denis Kenzior @ 2011-01-10 21:44 UTC (permalink / raw)
  To: ofono

[-- Attachment #1: Type: text/plain, Size: 782 bytes --]

Hi Lucas,

> +static void at_pin_retries_query(struct ofono_sim *sim,
> +				ofono_sim_pin_retries_cb_t cb, void *data)
> +{
> +	struct sim_data *sd = ofono_sim_get_data(sim);
> +
> +	DBG("");
> +
> +	if (sd->vendor == OFONO_VENDOR_HUAWEI) {
> +		struct cb_data *cbd = cb_data_new(cb, data);
> +
> +		if (cbd == NULL) {
> +			CALLBACK_WITH_FAILURE(cb, NULL, data);
> +
> +			return;
> +		}
> +
> +		if (g_at_chat_send(sd->chat, "AT^CPIN?", huawei_cpin_prefix,
> +					huawei_cpin_cb, cbd, g_free) > 0)
> +			return;
> +
> +		g_free(cbd);
> +
> +		CALLBACK_WITH_FAILURE(cb, NULL, data);
> +	}
> +
> +	CALLBACK_WITH_SUCCESS(cb, NULL, data);

I believe this will cause the core to segfault when running on
non-huawei devices.

> +}

Regards,
-Denis

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2011-01-10 21:44 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-01-10 21:02 [PATCH v3 0/6] Query retry counters Lucas De Marchi
2011-01-10 21:02 ` [PATCH v3 1/6] atmodem: check for VENDOR_HUAWEI on sim atom Lucas De Marchi
2011-01-10 21:02 ` [PATCH v3 2/6] huawei: use VENDOR_HUAWEI quirk on sim creation Lucas De Marchi
2011-01-10 21:02 ` [PATCH v3 3/6] include: add method to query pin Retries Lucas De Marchi
2011-01-10 21:02 ` [PATCH v3 4/6] sim: query remaining pin retries Lucas De Marchi
2011-01-10 21:02 ` [PATCH v3 5/6] doc: detail Retries property Lucas De Marchi
2011-01-10 21:02 ` [PATCH v3 6/6] atmodem: implement query for remaining pin retries Lucas De Marchi
2011-01-10 21:44   ` Denis Kenzior
2011-01-10 21:43 ` [PATCH v3 0/6] Query retry counters Denis Kenzior

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox