summaryrefslogtreecommitdiffstats
path: root/drivers/atmodem/stk.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/atmodem/stk.c')
-rw-r--r--drivers/atmodem/stk.c20
1 files changed, 12 insertions, 8 deletions
diff --git a/drivers/atmodem/stk.c b/drivers/atmodem/stk.c
index 8cff4a22..aede668b 100644
--- a/drivers/atmodem/stk.c
+++ b/drivers/atmodem/stk.c
@@ -74,11 +74,13 @@ static void at_csim_envelope_cb(gboolean ok, GAtResult *result,
if (rlen != len * 2 || len < 2)
goto error;
- if (response[len - 2] != 0x90 && response[len - 2] != 0x91)
- goto error;
+ if ((response[len - 2] != 0x90 && response[len - 2] != 0x91) ||
+ (response[len - 2] == 0x90 && response[len - 1] != 0)) {
+ memset(&error, 0, sizeof(error));
- if (response[len - 2] == 0x90 && response[len - 1] != 0)
- goto error;
+ error.type = OFONO_ERROR_TYPE_SIM;
+ error.error = (response[len - 2] << 8) | response[len - 1];
+ }
DBG("csim_envelope_cb: %i", len);
@@ -157,11 +159,13 @@ static void at_csim_terminal_response_cb(gboolean ok, GAtResult *result,
if (rlen != len * 2 || len < 2)
goto error;
- if (response[len - 2] != 0x90 && response[len - 2] != 0x91)
- goto error;
+ if ((response[len - 2] != 0x90 && response[len - 2] != 0x91) ||
+ (response[len - 2] == 0x90 && response[len - 1] != 0)) {
+ memset(&error, 0, sizeof(error));
- if (response[len - 2] == 0x90 && response[len - 1] != 0)
- goto error;
+ error.type = OFONO_ERROR_TYPE_SIM;
+ error.error = (response[len - 2] << 8) | response[len - 1];
+ }
DBG("csim_terminal_response_cb: %i", len);