* Status code. Errors are always negative.
*/
enum bt_notification_iterator_status {
+ /** No error, okay. */
+ BT_NOTIFICATION_ITERATOR_STATUS_OK = 0,
/** Invalid arguments. */
- /* -22 for compatibility with -EINVAL */
- BT_NOTIFICATION_ITERATOR_STATUS_INVAL = -22,
-
- /** End of trace. */
- BT_NOTIFICATION_ITERATOR_STATUS_EOT = -3,
-
+ BT_NOTIFICATION_ITERATOR_STATUS_INVAL = -1,
/** General error. */
BT_NOTIFICATION_ITERATOR_STATUS_ERROR = -2,
-
/** Unsupported iterator feature. */
- BT_NOTIFICATION_ITERATOR_STATUS_UNSUPPORTED = -1,
+ BT_NOTIFICATION_ITERATOR_STATUS_UNSUPPORTED = -3,
- /** No error, okay. */
- BT_NOTIFICATION_ITERATOR_STATUS_OK = 0,
};
/**
struct bt_notification *ctf_fs_iterator_get(
struct bt_notification_iterator *iterator)
{
- return NULL;
+ struct bt_notification *notification = NULL;
+ struct ctf_fs_component *ctf_fs;
+ struct bt_component *component = bt_notification_iterator_get_component(
+ iterator);
+
+ if (!component) {
+ goto end;
+ }
+
+ ctf_fs = bt_component_get_private_data(component);
+ if (!ctf_fs) {
+ goto end;
+ }
+
+ notification = bt_get(ctf_fs->current_notification);
+end:
+ return notification;
}
static
enum bt_notification_iterator_status ctf_fs_iterator_next(
struct bt_notification_iterator *iterator)
{
- return BT_NOTIFICATION_ITERATOR_STATUS_UNSUPPORTED;
+ enum bt_notification_iterator_status ret;
+ struct bt_ctf_notif_iter_notif *notification;
+// struct bt_notification *notification = NULL;
+ struct ctf_fs_component *ctf_fs;
+ struct bt_component *component = bt_notification_iterator_get_component(
+ iterator);
+
+ if (!component) {
+ ret = BT_NOTIFICATION_ITERATOR_STATUS_ERROR;
+ goto end;
+ }
+
+ ret = ctf_fs_data_stream_get_next_notification(ctf_fs, ¬ification);
+ if (ret || !notification) {
+ goto end;
+ }
+
+ switch (notification->type) {
+ case BT_CTF_NOTIF_ITER_NOTIF_NEW_PACKET:
+ {
+ struct bt_ctf_notif_iter_notif_new_packet *notif =
+ (struct bt_ctf_notif_iter_notif_new_packet *) notification;
+ break;
+ }
+ case BT_CTF_NOTIF_ITER_NOTIF_EVENT:
+ {
+ struct bt_ctf_notif_iter_notif_event *notif =
+ (struct bt_ctf_notif_iter_notif_event *) notification;
+ break;
+ }
+ case BT_CTF_NOTIF_ITER_NOTIF_END_OF_PACKET:
+ {
+ struct bt_ctf_notif_iter_notif_end_of_packet *notif =
+ (struct bt_ctf_notif_iter_notif_end_of_packet *) notification;
+ break;
+ }
+ default:
+ break;
+ }
+
+end:
+ return ret;
}
static
ctf_fs_metadata_fini(&component->metadata);
ctf_fs_data_stream_fini(&component->data_stream);
+ BT_PUT(component->current_notification);
g_free(component);
}