summaryrefslogtreecommitdiffstats
path: root/src/message-waiting.c
diff options
context:
space:
mode:
authorAndrzej Zaborowski <andrew.zaborowski@intel.com>2011-02-03 08:37:37 +0100
committerDenis Kenzior <denkenz@gmail.com>2011-02-03 13:13:37 -0600
commita7a0cb1ed04bb75c8ee29f990fb818b806ace825 (patch)
tree721b04e5c3b268cc382d507591d2632fce43ec94 /src/message-waiting.c
parent0ecc99973a2ccafcacd1c24c976d85950fb6cbae (diff)
downloadofono-a7a0cb1ed04bb75c8ee29f990fb818b806ace825.tar.bz2
simfs: implement ofono_sim_context api
Diffstat (limited to 'src/message-waiting.c')
-rw-r--r--src/message-waiting.c37
1 files changed, 25 insertions, 12 deletions
diff --git a/src/message-waiting.c b/src/message-waiting.c
index 48eecc19..c0293e7b 100644
--- a/src/message-waiting.c
+++ b/src/message-waiting.c
@@ -55,6 +55,7 @@ struct ofono_message_waiting {
gboolean cphs_mbdn_not_provided;
struct ofono_phone_number mailbox_number[5];
struct ofono_sim *sim;
+ struct ofono_sim_context *sim_context;
struct ofono_atom *atom;
};
@@ -202,7 +203,7 @@ static DBusMessage *set_cphs_mbdn(struct ofono_message_waiting *mw,
sim_adn_build(efmbdn, req->mw->ef_cphs_mbdn_length,
&req->number, NULL);
- if (ofono_sim_write(mw->sim, SIM_EF_CPHS_MBDN_FILEID,
+ if (ofono_sim_write(mw->sim_context, SIM_EF_CPHS_MBDN_FILEID,
sync ? cphs_mbdn_sync_cb : mbdn_set_cb,
OFONO_SIM_FILE_STRUCTURE_FIXED,
mw_mailbox_to_cphs_record[mailbox],
@@ -300,10 +301,10 @@ static DBusMessage *set_mbdn(struct ofono_message_waiting *mw, int mailbox,
sim_adn_build(efmbdn, req->mw->efmbdn_length, &req->number, NULL);
- if (ofono_sim_write(req->mw->sim, SIM_EFMBDN_FILEID, mbdn_set_cb,
- OFONO_SIM_FILE_STRUCTURE_FIXED,
- req->mw->efmbdn_record_id[mailbox],
- efmbdn, req->mw->efmbdn_length, req) == -1) {
+ if (ofono_sim_write(req->mw->sim_context, SIM_EFMBDN_FILEID,
+ mbdn_set_cb, OFONO_SIM_FILE_STRUCTURE_FIXED,
+ req->mw->efmbdn_record_id[mailbox],
+ efmbdn, req->mw->efmbdn_length, req) == -1) {
g_free(req);
if (msg)
@@ -600,7 +601,7 @@ static void mw_mbi_read_cb(int ok, int total_length, int record,
for (i = 0; i < 5 && i < record_length; i++)
mw->efmbdn_record_id[i] = data[i];
- err = ofono_sim_read(mw->sim, SIM_EFMBDN_FILEID,
+ err = ofono_sim_read(mw->sim_context, SIM_EFMBDN_FILEID,
OFONO_SIM_FILE_STRUCTURE_FIXED,
mw_mbdn_read_cb, mw);
@@ -615,7 +616,7 @@ out:
st = ofono_sim_get_cphs_service_table(mw->sim);
if (st && bit_field(st[0], 4, 2) == 3)
- ofono_sim_read(mw->sim, SIM_EF_CPHS_MBDN_FILEID,
+ ofono_sim_read(mw->sim_context, SIM_EF_CPHS_MBDN_FILEID,
OFONO_SIM_FILE_STRUCTURE_FIXED,
mw_cphs_mbdn_read_cb, mw);
}
@@ -689,7 +690,8 @@ static void mw_set_indicator(struct ofono_message_waiting *mw, int profile,
if (mw->messages[i].indication)
efmwis[0] |= 1 << i;
- if (ofono_sim_write(mw->sim, SIM_EFMWIS_FILEID, mw_mwis_write_cb,
+ if (ofono_sim_write(mw->sim_context, SIM_EFMWIS_FILEID,
+ mw_mwis_write_cb,
OFONO_SIM_FILE_STRUCTURE_FIXED, 1,
efmwis, mw->efmwis_length, mw) != 0) {
ofono_error("Queuing a EF-MWI write to SIM failed");
@@ -707,7 +709,8 @@ try_cphs:
efmwis[1] = mw->messages[1].indication ? 0xa : 0x5 |
mw->messages[3].indication ? 0xa0 : 0x50;
- if (ofono_sim_write(mw->sim, SIM_EF_CPHS_MWIS_FILEID, mw_mwis_write_cb,
+ if (ofono_sim_write(mw->sim_context, SIM_EF_CPHS_MWIS_FILEID,
+ mw_mwis_write_cb,
OFONO_SIM_FILE_STRUCTURE_TRANSPARENT, 0,
efmwis, mw->ef_cphs_mwis_length, mw) != 0)
ofono_error("Queuing a EF-MWIS write to SIM failed (CPHS)");
@@ -918,6 +921,14 @@ static void message_waiting_unregister(struct ofono_atom *atom)
DBusConnection *conn = ofono_dbus_get_connection();
struct ofono_modem *modem = __ofono_atom_get_modem(atom);
const char *path = __ofono_atom_get_path(atom);
+ struct ofono_message_waiting *mw = __ofono_atom_get_data(atom);
+
+ if (mw->sim_context) {
+ ofono_sim_context_free(mw->sim_context);
+ mw->sim_context = NULL;
+ }
+
+ mw->sim = NULL;
g_dbus_unregister_interface(conn, path,
OFONO_MESSAGE_WAITING_INTERFACE);
@@ -956,16 +967,18 @@ void ofono_message_waiting_register(struct ofono_message_waiting *mw)
/* Assume that if sim atom exists, it is ready */
mw->sim = __ofono_atom_get_data(sim_atom);
+ mw->sim_context = ofono_sim_context_create(mw->sim);
+
/* Loads MWI states and MBDN from SIM */
- ofono_sim_read(mw->sim, SIM_EFMWIS_FILEID,
+ ofono_sim_read(mw->sim_context, SIM_EFMWIS_FILEID,
OFONO_SIM_FILE_STRUCTURE_FIXED,
mw_mwis_read_cb, mw);
- ofono_sim_read(mw->sim, SIM_EFMBI_FILEID,
+ ofono_sim_read(mw->sim_context, SIM_EFMBI_FILEID,
OFONO_SIM_FILE_STRUCTURE_FIXED,
mw_mbi_read_cb, mw);
/* Also read CPHS MWIS field */
- ofono_sim_read(mw->sim, SIM_EF_CPHS_MWIS_FILEID,
+ ofono_sim_read(mw->sim_context, SIM_EF_CPHS_MWIS_FILEID,
OFONO_SIM_FILE_STRUCTURE_TRANSPARENT,
mw_cphs_mwis_read_cb, mw);
}