diff --git a/src/modem.c b/src/modem.c index dc571141..bf1ca330 100644 --- a/src/modem.c +++ b/src/modem.c @@ -293,6 +293,26 @@ struct ofono_atom *__ofono_modem_find_atom(struct ofono_modem *modem, return NULL; } +void __ofono_modem_foreach_atom(struct ofono_modem *modem, + enum ofono_atom_type type, + ofono_atom_func callback, void *data) +{ + GSList *l; + struct ofono_atom *atom; + + if (modem == NULL) + return; + + for (l = modem->atoms; l; l = l->next) { + atom = l->data; + + if (atom->type != type) + continue; + + callback(atom, data); + } +} + void __ofono_atom_free(struct ofono_atom *atom) { struct ofono_modem *modem = atom->modem; diff --git a/src/ofono.h b/src/ofono.h index 13fd5776..3f1f8115 100644 --- a/src/ofono.h +++ b/src/ofono.h @@ -107,6 +107,8 @@ typedef void (*ofono_atom_watch_func)(struct ofono_atom *atom, enum ofono_atom_watch_condition cond, void *data); +typedef void (*ofono_atom_func)(struct ofono_atom *atom, void *data); + struct ofono_atom *__ofono_modem_add_atom(struct ofono_modem *modem, enum ofono_atom_type type, void (*destruct)(struct ofono_atom *), @@ -115,6 +117,10 @@ struct ofono_atom *__ofono_modem_add_atom(struct ofono_modem *modem, struct ofono_atom *__ofono_modem_find_atom(struct ofono_modem *modem, enum ofono_atom_type type); +void __ofono_modem_foreach_atom(struct ofono_modem *modem, + enum ofono_atom_type type, + ofono_atom_func callback, void *data); + void *__ofono_atom_get_data(struct ofono_atom *atom); const char *__ofono_atom_get_path(struct ofono_atom *atom); struct ofono_modem *__ofono_atom_get_modem(struct ofono_atom *atom);