From 417b445eaf0a4d8bcff59fb93e865e83c7d92b78 Mon Sep 17 00:00:00 2001 From: Denis Kenzior Date: Mon, 7 Feb 2011 12:19:14 -0600 Subject: simfs: Add file changed watches to simfs contexts --- src/simfs.c | 39 +++++++++++++++++++++++++++++++++++++++ src/simfs.h | 7 +++++++ 2 files changed, 46 insertions(+) (limited to 'src') diff --git a/src/simfs.c b/src/simfs.c index 04594477..9f7dba71 100644 --- a/src/simfs.c +++ b/src/simfs.c @@ -109,8 +109,14 @@ void sim_fs_free(struct sim_fs *fs) g_free(fs); } +struct file_watch { + struct ofono_watchlist_item item; + int ef; +}; + struct ofono_sim_context { struct sim_fs *fs; + struct ofono_watchlist *file_watches; }; struct sim_fs *sim_fs_new(struct ofono_sim *sim, @@ -164,9 +170,42 @@ void sim_fs_context_free(struct ofono_sim_context *context) g_queue_remove(context->fs->op_q, op); } + if (context->file_watches) + __ofono_watchlist_free(context->file_watches); + g_free(context); } +unsigned int sim_fs_file_watch_add(struct ofono_sim_context *context, int id, + ofono_sim_file_changed_cb_t cb, + void *userdata, + ofono_destroy_func destroy) +{ + struct file_watch *watch; + + if (cb == NULL) + return 0; + + if (context->file_watches == NULL) + context->file_watches = __ofono_watchlist_new(g_free); + + watch = g_new0(struct file_watch, 1); + + watch->ef = id; + watch->item.notify = cb; + watch->item.notify_data = userdata; + watch->item.destroy = destroy; + + return __ofono_watchlist_add_item(context->file_watches, + (struct ofono_watchlist_item *) watch); +} + +void sim_fs_file_watch_remove(struct ofono_sim_context *context, + unsigned int id) +{ + __ofono_watchlist_remove_item(context->file_watches, id); +} + static void sim_fs_end_current(struct sim_fs *fs) { struct sim_fs_op *op = g_queue_pop_head(fs->op_q); diff --git a/src/simfs.h b/src/simfs.h index d93d96e8..d6bda5eb 100644 --- a/src/simfs.h +++ b/src/simfs.h @@ -29,6 +29,13 @@ struct sim_fs *sim_fs_new(struct ofono_sim *sim, const struct ofono_sim_driver *driver); struct ofono_sim_context *sim_fs_context_new(struct sim_fs *fs); +unsigned int sim_fs_file_watch_add(struct ofono_sim_context *context, + int id, ofono_sim_file_changed_cb_t cb, + void *userdata, + ofono_destroy_func destroy); +void sim_fs_file_watch_remove(struct ofono_sim_context *context, + unsigned int id); + int sim_fs_read(struct ofono_sim_context *context, int id, enum ofono_sim_file_structure expected_type, unsigned short offset, unsigned short num_bytes, -- cgit v1.2.3