aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Williams <dcbw@redhat.com>2012-01-09 12:40:30 -0600
committerAleksander Morgado <aleksander@lanedo.com>2012-03-15 14:14:48 +0100
commitcb2d6d610524f32fd95633e4a491ba88f983e956 (patch)
treefa36de9d8a72f2ff94cb93cdf76ec5fcae20ac63
parent4e06e0e67d1f4180e0ea2c86aae3f63701c176d7 (diff)
base-modem-at: indicate sequence status to response parsers
Let parsers know if this command is the last in a sequence since they may want to handle errors differently if that's the case.
-rw-r--r--src/mm-base-modem-at.c6
-rw-r--r--src/mm-base-modem-at.h5
-rw-r--r--src/mm-broadband-modem.c5
3 files changed, 15 insertions, 1 deletions
diff --git a/src/mm-base-modem-at.c b/src/mm-base-modem-at.c
index 4ecb64de..cd0565c3 100644
--- a/src/mm-base-modem-at.c
+++ b/src/mm-base-modem-at.c
@@ -140,12 +140,15 @@ at_sequence_parse_response (MMAtSerialPort *port,
/* No need to process response, go on to next command */
continue_sequence = TRUE;
else {
+ const MMBaseModemAtCommand *next = ctx->current + 1;
+
/* Response processor will tell us if we need to keep on the sequence */
continue_sequence = !ctx->current->response_processor (
ctx->self,
ctx->response_processor_context,
ctx->current->command,
response->str,
+ next->command ? FALSE : TRUE, /* Last command in sequence? */
error,
&result,
&result_error);
@@ -300,6 +303,7 @@ mm_base_modem_response_processor_string (MMBaseModem *self,
gpointer none,
const gchar *command,
const gchar *response,
+ gboolean last_command,
const GError *error,
GVariant **result,
GError **result_error)
@@ -318,6 +322,7 @@ mm_base_modem_response_processor_no_result (MMBaseModem *self,
gpointer none,
const gchar *command,
const gchar *response,
+ gboolean last_command,
const GError *error,
GVariant **result,
GError **result_error)
@@ -336,6 +341,7 @@ mm_base_modem_response_processor_no_result_continue (MMBaseModem *self,
gpointer none,
const gchar *command,
const gchar *response,
+ gboolean last_command,
const GError *error,
GVariant **result,
GError **result_error)
diff --git a/src/mm-base-modem-at.h b/src/mm-base-modem-at.h
index 0b39107c..b4b2f651 100644
--- a/src/mm-base-modem-at.h
+++ b/src/mm-base-modem-at.h
@@ -46,6 +46,7 @@ typedef gboolean (* MMBaseModemAtResponseProcessor) (MMBaseModem *self,
gpointer response_processor_context,
const gchar *command,
const gchar *response,
+ gboolean last_command,
const GError *error,
GVariant **result,
GError **result_error);
@@ -95,6 +96,7 @@ gboolean mm_base_modem_response_processor_string (MMBaseModem *self,
gpointer none,
const gchar *command,
const gchar *response,
+ gboolean last_command,
const GError *error,
GVariant **result,
GError **result_error);
@@ -103,6 +105,7 @@ gboolean mm_base_modem_response_processor_no_result (MMBaseModem *self,
gpointer none,
const gchar *command,
const gchar *response,
+ gboolean last_command,
const GError *error,
GVariant **result,
GError **result_error);
@@ -111,11 +114,11 @@ gboolean mm_base_modem_response_processor_no_result_continue (MMBaseModem *self,
gpointer none,
const gchar *command,
const gchar *response,
+ gboolean last_command,
const GError *error,
GVariant **result,
GError **result_error);
-
/* Single AT command, returning the whole response string */
void mm_base_modem_at_command (MMBaseModem *self,
const gchar *command,
diff --git a/src/mm-broadband-modem.c b/src/mm-broadband-modem.c
index 2e83ecbb..18c6a0b2 100644
--- a/src/mm-broadband-modem.c
+++ b/src/mm-broadband-modem.c
@@ -331,6 +331,7 @@ parse_caps_gcap (MMBaseModem *self,
gpointer none,
const gchar *command,
const gchar *response,
+ gboolean last_command,
const GError *error,
GVariant **variant,
GError **result_error)
@@ -363,6 +364,7 @@ parse_caps_cpin (MMBaseModem *self,
gpointer none,
const gchar *command,
const gchar *response,
+ gboolean last_command,
const GError *error,
GVariant **result,
GError **result_error)
@@ -395,10 +397,12 @@ parse_caps_cgmm (MMBaseModem *self,
gpointer none,
const gchar *command,
const gchar *response,
+ gboolean last_command,
const GError *error,
GVariant **result,
GError **result_error)
{
+ /* This check detects some really old Motorola GPRS dongles and phones */
if (strstr (response, "GSM900") ||
strstr (response, "GSM1800") ||
strstr (response, "GSM1900") ||
@@ -2612,6 +2616,7 @@ parse_reg_setup_reply (MMBaseModem *self,
gpointer none,
const gchar *command,
const gchar *response,
+ gboolean last_command,
const GError *error,
GVariant **result,
GError **result_error)