summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/modem.c20
-rw-r--r--src/ofono.h6
2 files changed, 26 insertions, 0 deletions
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);