diff options
author | Denis Kenzior <denkenz@gmail.com> | 2012-11-23 06:41:27 -0600 |
---|---|---|
committer | Denis Kenzior <denkenz@gmail.com> | 2012-11-23 07:22:25 -0600 |
commit | 736f44e0d33e1bc1c859be84bf64035bfd56d799 (patch) | |
tree | 95f803be5bc22d3cc65eceff3d46583c28c0ed7f /src/sim.c | |
parent | 6eb95429073d52a05ba8d14c7459b1096b4e8e30 (diff) | |
download | ofono-736f44e0d33e1bc1c859be84bf64035bfd56d799.tar.gz |
sim: Read icons with a full SIM/USIM path
Diffstat (limited to 'src/sim.c')
-rw-r--r-- | src/sim.c | 22 |
1 files changed, 18 insertions, 4 deletions
@@ -923,6 +923,8 @@ static void sim_iidf_read_cb(int ok, int length, int record, unsigned short iidf_id; unsigned short offset; unsigned short clut_len; + unsigned char path[6]; + unsigned int path_len; DBG("ok: %d", ok); @@ -952,8 +954,12 @@ static void sim_iidf_read_cb(int ok, int length, int record, iidf_id = efimg[3] << 8 | efimg[4]; sim->iidf_image = g_memdup(data, length); + /* The path it the same between 2G and 3G */ + path_len = sim_ef_db_get_path_3g(SIM_EFIMG_FILEID, path); + /* read the clut data */ ofono_sim_read_bytes(sim->context, iidf_id, offset, clut_len, + path, path_len, sim_iidf_read_clut_cb, sim); } @@ -987,9 +993,16 @@ static void sim_get_image(struct ofono_sim *sim, unsigned char id, iidf_len = efimg[7] << 8 | efimg[8]; /* read the image data */ - if (image == NULL) + if (image == NULL) { + unsigned char path[6]; + unsigned int path_len; + + /* The path it the same between 2G and 3G */ + path_len = sim_ef_db_get_path_3g(SIM_EFIMG_FILEID, path); ofono_sim_read_bytes(sim->context, iidf_id, iidf_offset, - iidf_len, sim_iidf_read_cb, sim); + iidf_len, path, path_len, + sim_iidf_read_cb, sim); + } if (sim->iidf_watch_ids[id] > 0) return; @@ -2156,20 +2169,21 @@ void ofono_sim_context_free(struct ofono_sim_context *context) int ofono_sim_read_bytes(struct ofono_sim_context *context, int id, unsigned short offset, unsigned short num_bytes, + const unsigned char *path, unsigned int len, ofono_sim_file_read_cb_t cb, void *data) { if (num_bytes == 0) return -1; return sim_fs_read(context, id, OFONO_SIM_FILE_STRUCTURE_TRANSPARENT, - offset, num_bytes, cb, data); + offset, num_bytes, path, len, cb, data); } int ofono_sim_read(struct ofono_sim_context *context, int id, enum ofono_sim_file_structure expected_type, ofono_sim_file_read_cb_t cb, void *data) { - return sim_fs_read(context, id, expected_type, 0, 0, cb, data); + return sim_fs_read(context, id, expected_type, 0, 0, NULL, 0, cb, data); } int ofono_sim_write(struct ofono_sim_context *context, int id, |