mirror of
https://git.kernel.org/pub/scm/bluetooth/bluez.git
synced 2024-12-11 13:04:10 +08:00
ed3344c96b
Some services like HID over LE can reference another service using included services. See Vol 3, Part G, section 2.6.3 of Core specification for more details.
110 lines
3.5 KiB
C
110 lines
3.5 KiB
C
/*
|
|
*
|
|
* BlueZ - Bluetooth protocol stack for Linux
|
|
*
|
|
* Copyright (C) 2010 Nokia Corporation
|
|
* Copyright (C) 2010 Marcel Holtmann <marcel@holtmann.org>
|
|
*
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*
|
|
*/
|
|
|
|
#include <bluetooth/sdp.h>
|
|
|
|
/* GATT Profile Attribute types */
|
|
#define GATT_PRIM_SVC_UUID 0x2800
|
|
#define GATT_SND_SVC_UUID 0x2801
|
|
#define GATT_INCLUDE_UUID 0x2802
|
|
#define GATT_CHARAC_UUID 0x2803
|
|
|
|
/* GATT Characteristic Types */
|
|
#define GATT_CHARAC_DEVICE_NAME 0x2A00
|
|
#define GATT_CHARAC_APPEARANCE 0x2A01
|
|
#define GATT_CHARAC_PERIPHERAL_PRIV_FLAG 0x2A02
|
|
#define GATT_CHARAC_RECONNECTION_ADDRESS 0x2A03
|
|
#define GATT_CHARAC_PERIPHERAL_PREF_CONN 0x2A04
|
|
#define GATT_CHARAC_SERVICE_CHANGED 0x2A05
|
|
|
|
/* GATT Characteristic Descriptors */
|
|
#define GATT_CHARAC_EXT_PROPER_UUID 0x2900
|
|
#define GATT_CHARAC_USER_DESC_UUID 0x2901
|
|
#define GATT_CLIENT_CHARAC_CFG_UUID 0x2902
|
|
#define GATT_SERVER_CHARAC_CFG_UUID 0x2903
|
|
#define GATT_CHARAC_FMT_UUID 0x2904
|
|
#define GATT_CHARAC_AGREG_FMT_UUID 0x2905
|
|
#define GATT_CHARAC_VALID_RANGE_UUID 0x2906
|
|
#define GATT_EXTERNAL_REPORT_REFERENCE 0x2907
|
|
#define GATT_REPORT_REFERENCE 0x2908
|
|
|
|
/* Client Characteristic Configuration bit field */
|
|
#define GATT_CLIENT_CHARAC_CFG_NOTIF_BIT 0x0001
|
|
#define GATT_CLIENT_CHARAC_CFG_IND_BIT 0x0002
|
|
|
|
typedef void (*gatt_cb_t) (GSList *l, guint8 status, gpointer user_data);
|
|
|
|
struct gatt_primary {
|
|
char uuid[MAX_LEN_UUID_STR + 1];
|
|
gboolean changed;
|
|
struct att_range range;
|
|
};
|
|
|
|
struct gatt_included {
|
|
char uuid[MAX_LEN_UUID_STR + 1];
|
|
uint16_t handle;
|
|
struct att_range range;
|
|
};
|
|
|
|
struct gatt_char {
|
|
char uuid[MAX_LEN_UUID_STR + 1];
|
|
uint16_t handle;
|
|
uint8_t properties;
|
|
uint16_t value_handle;
|
|
};
|
|
|
|
guint gatt_discover_primary(GAttrib *attrib, bt_uuid_t *uuid, gatt_cb_t func,
|
|
gpointer user_data);
|
|
|
|
unsigned int gatt_find_included(GAttrib *attrib, uint16_t start, uint16_t end,
|
|
gatt_cb_t func, gpointer user_data);
|
|
|
|
guint gatt_discover_char(GAttrib *attrib, uint16_t start, uint16_t end,
|
|
bt_uuid_t *uuid, gatt_cb_t func,
|
|
gpointer user_data);
|
|
|
|
guint gatt_read_char(GAttrib *attrib, uint16_t handle, GAttribResultFunc func,
|
|
gpointer user_data);
|
|
|
|
guint gatt_write_char(GAttrib *attrib, uint16_t handle, uint8_t *value,
|
|
size_t vlen, GAttribResultFunc func,
|
|
gpointer user_data);
|
|
|
|
guint gatt_find_info(GAttrib *attrib, uint16_t start, uint16_t end,
|
|
GAttribResultFunc func, gpointer user_data);
|
|
|
|
guint gatt_write_cmd(GAttrib *attrib, uint16_t handle, uint8_t *value, int vlen,
|
|
GDestroyNotify notify, gpointer user_data);
|
|
|
|
guint gatt_read_char_by_uuid(GAttrib *attrib, uint16_t start, uint16_t end,
|
|
bt_uuid_t *uuid, GAttribResultFunc func,
|
|
gpointer user_data);
|
|
|
|
guint gatt_exchange_mtu(GAttrib *attrib, uint16_t mtu, GAttribResultFunc func,
|
|
gpointer user_data);
|
|
|
|
gboolean gatt_parse_record(const sdp_record_t *rec,
|
|
uuid_t *prim_uuid, uint16_t *psm,
|
|
uint16_t *start, uint16_t *end);
|