---
 drivers/atmodem/stk.c |   20 ++++++++++++--------
 include/types.h       |    1 +
 2 files changed, 13 insertions(+), 8 deletions(-)

diff --git a/drivers/atmodem/stk.c b/drivers/atmodem/stk.c
index 8cff4a2..aede668 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);
 
diff --git a/include/types.h b/include/types.h
index 2b154f0..6098cba 100644
--- a/include/types.h
+++ b/include/types.h
@@ -60,6 +60,7 @@ enum ofono_error_type {
        OFONO_ERROR_TYPE_CME,
        OFONO_ERROR_TYPE_CMS,
        OFONO_ERROR_TYPE_CEER,
+       OFONO_ERROR_TYPE_SIM,
        OFONO_ERROR_TYPE_FAILURE
 };
 
-- 
1.7.1.86.g0e460.dirty

_______________________________________________
ofono mailing list
[email protected]
http://lists.ofono.org/listinfo/ofono

Reply via email to