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