att.h revision dafe0b2820611bf40851eb6b551ccb80e6b42deb
1/*
2 *
3 *  BlueZ - Bluetooth protocol stack for Linux
4 *
5 *  Copyright (C) 2002-2010  Marcel Holtmann <marcel@holtmann.org>
6 *
7 *
8 *  This program is free software; you can redistribute it and/or modify
9 *  it under the terms of the GNU General Public License as published by
10 *  the Free Software Foundation; either version 2 of the License, or
11 *  (at your option) any later version.
12 *
13 *  This program is distributed in the hope that it will be useful,
14 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
15 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 *  GNU General Public License for more details.
17 *
18 *  You should have received a copy of the GNU General Public License
19 *  along with this program; if not, write to the Free Software
20 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
21 *
22 */
23
24#ifndef __ATT_H
25#define __ATT_H
26
27#ifdef __cplusplus
28extern "C" {
29#endif
30
31/* GATT Profile Attribute types */
32#define GATT_PRIM_SVC_UUID		0x2800
33#define GATT_SND_SVC_UUID		0x2801
34#define GATT_INCLUDE_UUID		0x2802
35#define GATT_CHARAC_UUID		0x2803
36
37/* GATT Characteristic Types */
38#define GATT_CHARAC_DEVICE_NAME			0x2A00
39#define GATT_CHARAC_APPEARANCE			0x2A01
40#define GATT_CHARAC_PERIPHERAL_PRIV_FLAG	0x2A02
41#define GATT_CHARAC_RECONNECTION_ADDRESS	0x2A03
42#define GATT_CHARAC_PERIPHERAL_PREF_CONN	0x2A04
43#define GATT_CHARAC_SERVICE_CHANGED		0x2A05
44
45/* GATT Characteristic Descriptors */
46#define GATT_CHARAC_EXT_PROPER_UUID	0x2900
47#define GATT_CHARAC_USER_DESC_UUID	0x2901
48#define GATT_CLIENT_CHARAC_CFG_UUID	0x2902
49#define GATT_SERVER_CHARAC_CFG_UUID	0x2903
50#define GATT_CHARAC_FMT_UUID		0x2904
51#define GATT_CHARAC_AGREG_FMT_UUID	0x2905
52
53/* Attribute Protocol Opcodes */
54#define ATT_OP_ERROR			0x01
55#define ATT_OP_MTU_REQ			0x02
56#define ATT_OP_MTU_RESP			0x03
57#define ATT_OP_FIND_INFO_REQ		0x04
58#define ATT_OP_FIND_INFO_RESP		0x05
59#define ATT_OP_FIND_BY_TYPE_REQ		0x06
60#define ATT_OP_FIND_BY_TYPE_RESP	0x07
61#define ATT_OP_READ_BY_TYPE_REQ		0x08
62#define ATT_OP_READ_BY_TYPE_RESP	0x09
63#define ATT_OP_READ_REQ			0x0A
64#define ATT_OP_READ_RESP		0x0B
65#define ATT_OP_READ_BLOB_REQ		0x0C
66#define ATT_OP_READ_BLOB_RESP		0x0D
67#define ATT_OP_READ_MULTI_REQ		0x0E
68#define ATT_OP_READ_MULTI_RESP		0x0F
69#define ATT_OP_READ_BY_GROUP_REQ	0x10
70#define ATT_OP_READ_BY_GROUP_RESP	0x11
71#define ATT_OP_WRITE_REQ		0x12
72#define ATT_OP_WRITE_RESP		0x13
73#define ATT_OP_WRITE_CMD		0x14
74#define ATT_OP_PREP_WRITE_REQ		0x16
75#define ATT_OP_PREP_WRITE_RESP		0x17
76#define ATT_OP_EXEC_WRITE_REQ		0x18
77#define ATT_OP_EXEC_WRITE_RESP		0x19
78#define ATT_OP_HANDLE_NOTIFY		0x1B
79#define ATT_OP_HANDLE_IND		0x1D
80#define ATT_OP_HANDLE_CNF		0x1E
81#define ATT_OP_SIGNED_WRITE_CMD		0x94
82
83/* Error codes for Error response PDU */
84#define ATT_ECODE_INVALID_HANDLE		0x01
85#define ATT_ECODE_READ_NOT_PERM			0x02
86#define ATT_ECODE_WRITE_NOT_PERM		0x03
87#define ATT_ECODE_INVALID_PDU			0x04
88#define ATT_ECODE_INSUFF_AUTHEN			0x05
89#define ATT_ECODE_REQ_NOT_SUPP			0x06
90#define ATT_ECODE_INVALID_OFFSET		0x07
91#define ATT_ECODE_INSUFF_AUTHO			0x08
92#define ATT_ECODE_PREP_QUEUE_FULL		0x09
93#define ATT_ECODE_ATTR_NOT_FOUND		0x0A
94#define ATT_ECODE_ATTR_NOT_LONG			0x0B
95#define ATT_ECODE_INSUFF_ENCR_KEY_SIZE		0x0C
96#define ATT_ECODE_INVAL_ATTR_VALUE_LEN		0x0D
97#define ATT_ECODE_UNLIKELY			0x0E
98#define ATT_ECODE_INSUFF_ENC			0x0F
99#define ATT_ECODE_UNSUPP_GRP_SIZE		0x10
100#define ATT_ECODE_INSUFF_RESOURCES		0x11
101/* Application error */
102#define ATT_ECODE_IO				0xFF
103
104/* Characteristic Property bit field */
105#define ATT_CHAR_PROPER_BROADCAST		0x01
106#define ATT_CHAR_PROPER_READ			0x02
107#define ATT_CHAR_PROPER_WRITE_WITHOUT_RESP	0x04
108#define ATT_CHAR_PROPER_WRITE			0x08
109#define ATT_CHAR_PROPER_NOTIFY			0x10
110#define ATT_CHAR_PROPER_INDICATE		0x20
111#define ATT_CHAR_PROPER_AUTH			0x40
112#define ATT_CHAR_PROPER_EXT_PROPER		0x80
113
114
115#define ATT_MTU					256
116
117struct att_data_list {
118	uint16_t num;
119	uint16_t len;
120	uint8_t **data;
121};
122
123void att_data_list_free(struct att_data_list *list);
124
125const char *att_ecode2str(uint8_t status);
126uint16_t att_read_by_grp_type_encode(uint16_t start, uint16_t end, uuid_t *uuid,
127							uint8_t *pdu, int len);
128uint16_t att_find_by_type_encode(uint16_t start, uint16_t end, uuid_t *uuid,
129							uint8_t *pdu, int len);
130struct att_data_list *att_read_by_grp_type_decode(const uint8_t *pdu, int len);
131uint16_t att_read_by_type_encode(uint16_t start, uint16_t end, uuid_t *uuid,
132							uint8_t *pdu, int len);
133struct att_data_list *add_read_by_type_decode(const uint8_t *pdu, int len);
134
135#ifdef __cplusplus
136}
137#endif
138
139#endif /* __ATT_H */
140