summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrzej Zaborowski <andrew.zaborowski@intel.com>2010-07-07 00:39:00 +0200
committerDenis Kenzior <denkenz@gmail.com>2010-07-08 14:27:33 -0500
commit79372d26f5165c82df88882f19b3d538796feb64 (patch)
tree3b20d004971da6fa7f93b9a8db064e4ffb78d1ca
parent30e16fb5cadf6def95f03f7ebf24d15cf18158d0 (diff)
downloadofono-79372d26f5165c82df88882f19b3d538796feb64.tar.bz2
atmodem: Make sim operations return sim error codes.
-rw-r--r--drivers/atmodem/sim.c32
-rw-r--r--drivers/atmodem/stk.c20
2 files changed, 37 insertions, 15 deletions
diff --git a/drivers/atmodem/sim.c b/drivers/atmodem/sim.c
index 2b4a8c63..d5d5ff98 100644
--- a/drivers/atmodem/sim.c
+++ b/drivers/atmodem/sim.c
@@ -82,8 +82,15 @@ static void at_crsm_info_cb(gboolean ok, GAtResult *result, gpointer user_data)
if (!g_at_result_iter_next_hexstring(&iter, &response, &len) ||
(sw1 != 0x90 && sw1 != 0x91 && sw1 != 0x92) ||
- (sw1 == 0x90 && sw2 != 0x00))
- goto error;
+ (sw1 == 0x90 && sw2 != 0x00)) {
+ memset(&error, 0, sizeof(error));
+
+ error.type = OFONO_ERROR_TYPE_SIM;
+ error.error = (sw1 << 8) | sw2;
+
+ cb(&error, -1, -1, -1, NULL, cbd->data);
+ return;
+ }
DBG("crsm_info_cb: %02x, %02x, %i", sw1, sw2, len);
@@ -165,9 +172,18 @@ static void at_crsm_read_cb(gboolean ok, GAtResult *result,
g_at_result_iter_next_number(&iter, &sw1);
g_at_result_iter_next_number(&iter, &sw2);
- if (!g_at_result_iter_next_hexstring(&iter, &response, &len) ||
- (sw1 != 0x90 && sw1 != 0x91 && sw1 != 0x92 && sw1 != 0x9f) ||
- (sw1 == 0x90 && sw2 != 0x00)) {
+ if ((sw1 != 0x90 && sw1 != 0x91 && sw1 != 0x92 && sw1 != 0x9f) ||
+ (sw1 == 0x90 && sw2 != 0x00)) {
+ memset(&error, 0, sizeof(error));
+
+ error.type = OFONO_ERROR_TYPE_SIM;
+ error.error = (sw1 << 8) | sw2;
+
+ cb(&error, NULL, 0, cbd->data);
+ return;
+ }
+
+ if (!g_at_result_iter_next_hexstring(&iter, &response, &len)) {
CALLBACK_WITH_FAILURE(cb, NULL, 0, cbd->data);
return;
}
@@ -255,8 +271,10 @@ static void at_crsm_update_cb(gboolean ok, GAtResult *result,
if ((sw1 != 0x90 && sw1 != 0x91 && sw1 != 0x92 && sw1 != 0x9f) ||
(sw1 == 0x90 && sw2 != 0x00)) {
- CALLBACK_WITH_FAILURE(cb, cbd->data);
- return;
+ memset(&error, 0, sizeof(error));
+
+ error.type = OFONO_ERROR_TYPE_SIM;
+ error.error = (sw1 << 8) | sw2;
}
DBG("crsm_update_cb: %02x, %02x", sw1, sw2);
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);