+static
+int create_subscription_mask_from_notification_types(
+ struct bt_notification_iterator *iterator,
+ const enum bt_notification_type *notif_types)
+{
+ const enum bt_notification_type *notif_type;
+ int ret = 0;
+
+ assert(notif_types);
+ iterator->subscription_mask = 0;
+
+ for (notif_type = notif_types;
+ *notif_type != BT_NOTIFICATION_TYPE_SENTINEL;
+ notif_type++) {
+ switch (*notif_type) {
+ case BT_NOTIFICATION_TYPE_ALL:
+ iterator->subscription_mask |=
+ BT_NOTIFICATION_ITERATOR_NOTIF_TYPE_EVENT |
+ BT_NOTIFICATION_ITERATOR_NOTIF_TYPE_INACTIVITY |
+ BT_NOTIFICATION_ITERATOR_NOTIF_TYPE_STREAM_BEGIN |
+ BT_NOTIFICATION_ITERATOR_NOTIF_TYPE_STREAM_END |
+ BT_NOTIFICATION_ITERATOR_NOTIF_TYPE_PACKET_BEGIN |
+ BT_NOTIFICATION_ITERATOR_NOTIF_TYPE_PACKET_END;
+ break;
+ case BT_NOTIFICATION_TYPE_EVENT:
+ iterator->subscription_mask |= BT_NOTIFICATION_ITERATOR_NOTIF_TYPE_EVENT;
+ break;
+ case BT_NOTIFICATION_TYPE_INACTIVITY:
+ iterator->subscription_mask |= BT_NOTIFICATION_ITERATOR_NOTIF_TYPE_INACTIVITY;
+ break;
+ case BT_NOTIFICATION_TYPE_STREAM_BEGIN:
+ iterator->subscription_mask |= BT_NOTIFICATION_ITERATOR_NOTIF_TYPE_STREAM_BEGIN;
+ break;
+ case BT_NOTIFICATION_TYPE_STREAM_END:
+ iterator->subscription_mask |= BT_NOTIFICATION_ITERATOR_NOTIF_TYPE_STREAM_END;
+ break;
+ case BT_NOTIFICATION_TYPE_PACKET_BEGIN:
+ iterator->subscription_mask |= BT_NOTIFICATION_ITERATOR_NOTIF_TYPE_PACKET_BEGIN;
+ break;
+ case BT_NOTIFICATION_TYPE_PACKET_END:
+ iterator->subscription_mask |= BT_NOTIFICATION_ITERATOR_NOTIF_TYPE_PACKET_END;
+ break;
+ default:
+ ret = -1;
+ goto end;
+ }
+ }
+
+end:
+ return ret;
+}
+