blob: d633bfe692c1c2ac0a5163483b6e8d034274f264 [file]
/* SPDX-License-Identifier: LGPL-2.1-or-later */
/*
*
* BlueZ - Bluetooth protocol stack for Linux
*
* Copyright (C) 2025 Pauli Virtanen. All rights reserved.
*
*/
#include <stdbool.h>
#include <inttypes.h>
#define BT_GMAP_ROLE_UGG BIT(0)
#define BT_GMAP_ROLE_UGT BIT(1)
#define BT_GMAP_ROLE_BGS BIT(2)
#define BT_GMAP_ROLE_BGR BIT(3)
#define BT_GMAP_ROLE_MASK (BIT(4) - 1)
#define BT_GMAP_UGG_MULTIPLEX (BIT(0) << 0)
#define BT_GMAP_UGG_96KBPS_SOURCE (BIT(1) << 0)
#define BT_GMAP_UGG_MULTISINK (BIT(2) << 0)
#define BT_GMAP_UGG_FEATURE_MASK ((BIT(3) - 1) << 0)
#define BT_GMAP_UGG_FEATURE_SHIFT 0
#define BT_GMAP_UGT_SOURCE (BIT(0) << 8)
#define BT_GMAP_UGT_80KBPS_SOURCE (BIT(1) << 8)
#define BT_GMAP_UGT_SINK (BIT(2) << 8)
#define BT_GMAP_UGT_64KBPS_SINK (BIT(3) << 8)
#define BT_GMAP_UGT_MULTIPLEX (BIT(4) << 8)
#define BT_GMAP_UGT_MULTISINK (BIT(5) << 8)
#define BT_GMAP_UGT_MULTISOURCE (BIT(6) << 8)
#define BT_GMAP_UGT_FEATURE_MASK ((BIT(7) - 1) << 8)
#define BT_GMAP_UGT_FEATURE_SHIFT 8
#define BT_GMAP_BGS_96KBPS (BIT(0) << 16)
#define BT_GMAP_BGS_FEATURE_MASK ((BIT(1) - 1) << 16)
#define BT_GMAP_BGS_FEATURE_SHIFT 16
#define BT_GMAP_BGR_MULTISINK (BIT(0) << 24)
#define BT_GMAP_BGR_MULTIPLEX (BIT(1) << 24)
#define BT_GMAP_BGR_FEATURE_MASK ((BIT(2) - 1) << 24)
#define BT_GMAP_BGR_FEATURE_SHIFT 24
#define BT_GMAP_FEATURE_MASK (BT_GMAP_UGG_FEATURE_MASK | \
BT_GMAP_UGT_FEATURE_MASK | \
BT_GMAP_BGS_FEATURE_MASK | \
BT_GMAP_BGR_FEATURE_MASK)
#define BT_GMAP_ROLE_UGG_STR "ugg"
#define BT_GMAP_ROLE_UGT_STR "ugt"
#define BT_GMAP_ROLE_BGS_STR "bgs"
#define BT_GMAP_ROLE_BGR_STR "bgr"
#define BT_GMAP_UGG_MULTIPLEX_STR "ugg-multiplex"
#define BT_GMAP_UGG_96KBPS_SOURCE_STR "ugg-96kbps-source"
#define BT_GMAP_UGG_MULTISINK_STR "ugg-multisink"
#define BT_GMAP_UGT_SOURCE_STR "ugt-source"
#define BT_GMAP_UGT_80KBPS_SOURCE_STR "ugt-80kbps-source"
#define BT_GMAP_UGT_SINK_STR "ugt-sink"
#define BT_GMAP_UGT_64KBPS_SINK_STR "ugt-64kbps-sink"
#define BT_GMAP_UGT_MULTIPLEX_STR "ugt-multiplex"
#define BT_GMAP_UGT_MULTISINK_STR "ugt-multisink"
#define BT_GMAP_UGT_MULTISOURCE_STR "ugt-multisource"
#define BT_GMAP_BGS_96KBPS_STR "bgs-96kbps"
#define BT_GMAP_BGR_MULTISINK_STR "bgr-multisink"
#define BT_GMAP_BGR_MULTIPLEX_STR "bgr-multiplex"
#define BT_GMAP_ROLE_LIST(role) \
role(BT_GMAP_ROLE_UGG) \
role(BT_GMAP_ROLE_UGT) \
role(BT_GMAP_ROLE_BGS) \
role(BT_GMAP_ROLE_BGR)
#define BT_GMAP_FEATURE_LIST(feature) \
feature(BT_GMAP_UGG_MULTIPLEX) \
feature(BT_GMAP_UGG_96KBPS_SOURCE) \
feature(BT_GMAP_UGG_MULTISINK) \
feature(BT_GMAP_UGT_SOURCE) \
feature(BT_GMAP_UGT_80KBPS_SOURCE) \
feature(BT_GMAP_UGT_SINK) \
feature(BT_GMAP_UGT_64KBPS_SINK) \
feature(BT_GMAP_UGT_MULTIPLEX) \
feature(BT_GMAP_UGT_MULTISINK) \
feature(BT_GMAP_UGT_MULTISOURCE) \
feature(BT_GMAP_BGS_96KBPS) \
feature(BT_GMAP_BGR_MULTISINK) \
feature(BT_GMAP_BGR_MULTIPLEX)
struct bt_gmap;
typedef void (*bt_gmap_ready_func_t)(struct bt_gmap *gmap, void *user_data);
typedef void (*bt_gmap_destroy_func_t)(void *user_data);
typedef void (*bt_gmap_debug_func_t)(const char *str, void *user_data);
struct bt_gmap *bt_gmap_ref(struct bt_gmap *gmap);
void bt_gmap_unref(struct bt_gmap *gmap);
struct bt_gmap *bt_gmap_attach(struct bt_gatt_client *client,
bt_gmap_ready_func_t ready, void *user_data);
struct bt_gmap *bt_gmap_find(struct gatt_db *db);
struct bt_gmap *bt_gmap_add_db(struct gatt_db *db);
uint8_t bt_gmap_get_role(struct bt_gmap *gmap);
uint32_t bt_gmap_get_features(struct bt_gmap *gmap);
void bt_gmap_set_role(struct bt_gmap *gmas, uint8_t role);
void bt_gmap_set_features(struct bt_gmap *gmas, uint32_t features);
bool bt_gmap_set_debug(struct bt_gmap *gmap, bt_gmap_debug_func_t cb,
void *user_data, bt_gmap_destroy_func_t destroy);