blob: 7ade66495f1a7e860024d46de3bdc61ccc82250c [file] [log] [blame]
/*
* Copyright (c) 2020 Nordic Semiconductor ASA
*
* SPDX-License-Identifier: Apache-2.0
*/
#ifndef BT_GATT_OTS_INTERNAL_H_
#define BT_GATT_OTS_INTERNAL_H_
#ifdef __cplusplus
extern "C" {
#endif
#include <zephyr/types.h>
#include "ots_l2cap_internal.h"
#include "ots_oacp_internal.h"
#include "ots_olcp_internal.h"
/** Maximum size of the Directory Listing Object Record. Table 4.1 in the OTS spec. */
#define DIR_LIST_OBJ_RECORD_MIN_SIZE 13
#define DIR_LIST_OBJ_RECORD_MAX_SIZE 172
#define DIR_LIST_MAX_SIZE (DIR_LIST_OBJ_RECORD_MAX_SIZE * CONFIG_BT_OTS_MAX_OBJ_CNT)
/** @brief ID of the Directory Listing Object */
#define OTS_OBJ_ID_DIR_LIST 0x000000000000
/**@brief OTS Attribute Protocol Application Error codes. */
enum bt_gatt_ots_att_err_codes {
/** An attempt was made to write a value that is invalid or
* not supported by this Server for a reason other than
* the attribute permissions.
*/
BT_GATT_OTS_WRITE_REQUEST_REJECTED = 0x80,
/** An attempt was made to read or write to an Object Metadata
* characteristic while the Current Object was an Invalid Object.
*/
BT_GATT_OTS_OBJECT_NOT_SELECTED = 0x81,
/** The Server is unable to service the Read Request or Write Request
* because it exceeds the concurrency limit of the service.
*/
BT_GATT_OTS_CONCURRENCY_LIMIT_EXCEEDED = 0x82,
/** The requested object name was rejected because
* the name was already in use by an existing object on the Server.
*/
BT_GATT_OTS_OBJECT_NAME_ALREADY_EXISTS = 0x83,
};
enum bt_gatt_ots_object_state_type {
BT_GATT_OTS_OBJECT_IDLE_STATE,
BT_GATT_OTS_OBJECT_READ_OP_STATE,
};
struct bt_gatt_ots_object_state {
enum bt_gatt_ots_object_state_type type;
union {
struct bt_gatt_ots_object_read_op {
struct bt_gatt_ots_oacp_read_params oacp_params;
uint32_t sent_len;
} read_op;
};
};
struct bt_gatt_ots_object {
uint64_t id;
struct bt_ots_obj_metadata metadata;
struct bt_gatt_ots_object_state state;
};
struct bt_gatt_ots_indicate {
struct bt_gatt_indicate_params params;
struct bt_gatt_attr attr;
struct _bt_gatt_ccc ccc;
bool is_enabled;
};
struct bt_ots {
struct bt_ots_feat features;
struct bt_gatt_ots_object *cur_obj;
struct bt_gatt_service *service;
struct bt_gatt_ots_indicate oacp_ind;
struct bt_gatt_ots_indicate olcp_ind;
struct bt_gatt_ots_l2cap l2cap;
struct bt_ots_cb *cb;
struct bt_ots_dir_list *dir_list;
void *obj_manager;
};
#ifdef __cplusplus
}
#endif
#endif /* BT_GATT_OTS_INTERNAL_H_ */