All of lore.kernel.org
 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.