blob: c22bc748229e6148d1056b00c91b03db4a89e58e [file] [log] [blame]
/* gatt.h - Bluetooth tester headers */
/*
* Copyright (c) 2015-2016 Intel Corporation
* Copyright (c) 2022 Codecoup
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <zephyr/sys/util.h>
#include <zephyr/bluetooth/addr.h>
/* GATT Service */
/* commands */
#define BTP_GATT_READ_SUPPORTED_COMMANDS 0x01
struct btp_gatt_read_supported_commands_rp {
uint8_t data[0];
} __packed;
#define BTP_GATT_SERVICE_PRIMARY 0x00
#define BTP_GATT_SERVICE_SECONDARY 0x01
#define BTP_GATT_ADD_SERVICE 0x02
struct btp_gatt_add_service_cmd {
uint8_t type;
uint8_t uuid_length;
uint8_t uuid[];
} __packed;
struct btp_gatt_add_service_rp {
uint16_t svc_id;
} __packed;
#define BTP_GATT_ADD_CHARACTERISTIC 0x03
struct btp_gatt_add_characteristic_cmd {
uint16_t svc_id;
uint8_t properties;
uint8_t permissions;
uint8_t uuid_length;
uint8_t uuid[];
} __packed;
struct btp_gatt_add_characteristic_rp {
uint16_t char_id;
} __packed;
#define BTP_GATT_ADD_DESCRIPTOR 0x04
struct btp_gatt_add_descriptor_cmd {
uint16_t char_id;
uint8_t permissions;
uint8_t uuid_length;
uint8_t uuid[];
} __packed;
struct btp_gatt_add_descriptor_rp {
uint16_t desc_id;
} __packed;
#define BTP_GATT_ADD_INCLUDED_SERVICE 0x05
struct btp_gatt_add_included_service_cmd {
uint16_t svc_id;
} __packed;
struct btp_gatt_add_included_service_rp {
uint16_t included_service_id;
} __packed;
#define BTP_GATT_SET_VALUE 0x06
struct btp_gatt_set_value_cmd {
uint16_t attr_id;
uint16_t len;
uint8_t value[];
} __packed;
#define BTP_GATT_START_SERVER 0x07
struct btp_gatt_start_server_rp {
uint16_t db_attr_off;
uint8_t db_attr_cnt;
} __packed;
#define BTP_GATT_RESET_SERVER 0x08
#define BTP_GATT_SET_ENC_KEY_SIZE 0x09
struct btp_gatt_set_enc_key_size_cmd {
uint16_t attr_id;
uint8_t key_size;
} __packed;
/* Gatt Client */
struct btp_gatt_service {
uint16_t start_handle;
uint16_t end_handle;
uint8_t uuid_length;
uint8_t uuid[];
} __packed;
struct btp_gatt_included {
uint16_t included_handle;
struct btp_gatt_service service;
} __packed;
struct btp_gatt_characteristic {
uint16_t characteristic_handle;
uint16_t value_handle;
uint8_t properties;
uint8_t uuid_length;
uint8_t uuid[];
} __packed;
struct btp_gatt_descriptor {
uint16_t descriptor_handle;
uint8_t uuid_length;
uint8_t uuid[];
} __packed;
#define BTP_GATT_EXCHANGE_MTU 0x0a
struct btp_gatt_exchange_mtu_cmd {
bt_addr_le_t address;
} __packed;
#define BTP_GATT_DISC_ALL_PRIM 0x0b
struct btp_gatt_disc_all_prim_cmd {
bt_addr_le_t address;
} __packed;
struct btp_gatt_disc_all_prim_rp {
uint8_t services_count;
struct btp_gatt_service services[];
} __packed;
#define BTP_GATT_DISC_PRIM_UUID 0x0c
struct btp_gatt_disc_prim_uuid_cmd {
bt_addr_le_t address;
uint8_t uuid_length;
uint8_t uuid[];
} __packed;
struct btp_gatt_disc_prim_rp {
uint8_t services_count;
struct btp_gatt_service services[];
} __packed;
#define BTP_GATT_FIND_INCLUDED 0x0d
struct btp_gatt_find_included_cmd {
bt_addr_le_t address;
uint16_t start_handle;
uint16_t end_handle;
} __packed;
struct btp_gatt_find_included_rp {
uint8_t services_count;
struct btp_gatt_included included[];
} __packed;
#define BTP_GATT_DISC_ALL_CHRC 0x0e
struct btp_gatt_disc_all_chrc_cmd {
bt_addr_le_t address;
uint16_t start_handle;
uint16_t end_handle;
} __packed;
struct btp_gatt_disc_chrc_rp {
uint8_t characteristics_count;
struct btp_gatt_characteristic characteristics[];
} __packed;
#define BTP_GATT_DISC_CHRC_UUID 0x0f
struct btp_gatt_disc_chrc_uuid_cmd {
bt_addr_le_t address;
uint16_t start_handle;
uint16_t end_handle;
uint8_t uuid_length;
uint8_t uuid[];
} __packed;
#define BTP_GATT_DISC_ALL_DESC 0x10
struct btp_gatt_disc_all_desc_cmd {
bt_addr_le_t address;
uint16_t start_handle;
uint16_t end_handle;
} __packed;
struct btp_gatt_disc_all_desc_rp {
uint8_t descriptors_count;
struct btp_gatt_descriptor descriptors[];
} __packed;
#define BTP_GATT_READ 0x11
struct btp_gatt_read_cmd {
bt_addr_le_t address;
uint16_t handle;
} __packed;
struct btp_gatt_read_rp {
uint8_t att_response;
uint16_t data_length;
uint8_t data[];
} __packed;
struct btp_gatt_char_value {
uint16_t handle;
uint8_t data_len;
uint8_t data[0];
} __packed;
#define BTP_GATT_READ_UUID 0x12
struct btp_gatt_read_uuid_cmd {
bt_addr_le_t address;
uint16_t start_handle;
uint16_t end_handle;
uint8_t uuid_length;
uint8_t uuid[];
} __packed;
struct btp_gatt_read_uuid_rp {
uint8_t att_response;
uint8_t values_count;
struct btp_gatt_char_value values[0];
} __packed;
#define BTP_GATT_READ_LONG 0x13
struct btp_gatt_read_long_cmd {
bt_addr_le_t address;
uint16_t handle;
uint16_t offset;
} __packed;
struct btp_gatt_read_long_rp {
uint8_t att_response;
uint16_t data_length;
uint8_t data[];
} __packed;
#define BTP_GATT_READ_MULTIPLE 0x14
struct btp_gatt_read_multiple_cmd {
bt_addr_le_t address;
uint8_t handles_count;
uint16_t handles[];
} __packed;
struct btp_gatt_read_multiple_rp {
uint8_t att_response;
uint16_t data_length;
uint8_t data[];
} __packed;
#define BTP_GATT_WRITE_WITHOUT_RSP 0x15
struct btp_gatt_write_without_rsp_cmd {
bt_addr_le_t address;
uint16_t handle;
uint16_t data_length;
uint8_t data[];
} __packed;
#define BTP_GATT_SIGNED_WRITE_WITHOUT_RSP 0x16
struct btp_gatt_signed_write_without_rsp_cmd {
bt_addr_le_t address;
uint16_t handle;
uint16_t data_length;
uint8_t data[];
} __packed;
#define BTP_GATT_WRITE 0x17
struct btp_gatt_write_cmd {
bt_addr_le_t address;
uint16_t handle;
uint16_t data_length;
uint8_t data[];
} __packed;
struct btp_gatt_write_rp {
uint8_t att_response;
} __packed;
#define BTP_GATT_WRITE_LONG 0x18
struct btp_gatt_write_long_cmd {
bt_addr_le_t address;
uint16_t handle;
uint16_t offset;
uint16_t data_length;
uint8_t data[];
} __packed;
struct btp_gatt_write_long_rp {
uint8_t att_response;
} __packed;
#define BTP_GATT_RELIABLE_WRITE 0x19
struct btp_gatt_reliable_write_cmd {
bt_addr_le_t address;
uint16_t handle;
uint16_t offset;
uint16_t data_length;
uint8_t data[];
} __packed;
struct btp_gatt_reliable_write_rp {
uint8_t att_response;
} __packed;
#define BTP_GATT_CFG_NOTIFY 0x1a
#define BTP_GATT_CFG_INDICATE 0x1b
struct btp_gatt_cfg_notify_cmd {
bt_addr_le_t address;
uint8_t enable;
uint16_t ccc_handle;
} __packed;
#define BTP_GATT_GET_ATTRIBUTES 0x1c
struct btp_gatt_get_attributes_cmd {
uint16_t start_handle;
uint16_t end_handle;
uint8_t type_length;
uint8_t type[];
} __packed;
struct btp_gatt_get_attributes_rp {
uint8_t attrs_count;
uint8_t attrs[];
} __packed;
struct btp_gatt_attr {
uint16_t handle;
uint8_t permission;
uint8_t type_length;
uint8_t type[];
} __packed;
#define BTP_GATT_GET_ATTRIBUTE_VALUE 0x1d
struct btp_gatt_get_attribute_value_cmd {
bt_addr_le_t address;
uint16_t handle;
} __packed;
struct btp_gatt_get_attribute_value_rp {
uint8_t att_response;
uint16_t value_length;
uint8_t value[];
} __packed;
#define BTP_GATT_CHANGE_DB_REMOVE 0x00
#define BTP_GATT_CHANGE_DB_ADD 0x01
#define BTP_GATT_CHANGE_DB_ANY 0x02
#define BTP_GATT_CHANGE_DB 0x1e
struct btp_gatt_change_db_cmd {
uint16_t start_handle;
uint16_t end_handle;
uint8_t operation;
} __packed;
#define BTP_GATT_EATT_CONNECT 0x1f
struct btp_gatt_eatt_connect_cmd {
bt_addr_le_t address;
uint8_t num_channels;
} __packed;
#define BTP_GATT_READ_MULTIPLE_VAR 0x20
struct btp_gatt_read_multiple_var_cmd {
bt_addr_le_t address;
uint8_t handles_count;
uint16_t handles[];
} __packed;
struct btp_gatt_read_multiple_var_rp {
uint8_t att_response;
uint16_t data_length;
uint8_t data[];
} __packed;
#define BTP_GATT_NOTIFY_MULTIPLE 0x21
struct btp_gatt_cfg_notify_mult_cmd {
bt_addr_le_t address;
uint16_t cnt;
uint16_t attr_id[];
} __packed;
/* GATT events */
#define BTP_GATT_EV_NOTIFICATION 0x80
struct btp_gatt_notification_ev {
bt_addr_le_t address;
uint8_t type;
uint16_t handle;
uint16_t data_length;
uint8_t data[];
} __packed;
#define BTP_GATT_EV_ATTR_VALUE_CHANGED 0x81
struct btp_gatt_attr_value_changed_ev {
uint16_t handle;
uint16_t data_length;
uint8_t data[];
} __packed;