/**
 * @file
 * @brief Internal APIs for Bluetooth CSIS
 *
 * Copyright (c) 2021 Nordic Semiconductor ASA
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <bluetooth/audio/csis.h>


#define BT_CSIS_SIRK_TYPE_ENCRYPTED             0x00
#define BT_CSIS_SIRK_TYPE_PLAIN                 0x01

#define BT_CSIS_RELEASE_VALUE                   0x01
#define BT_CSIS_LOCK_VALUE                      0x02

#define BT_CSIS_PSRI_SIZE                       6

struct csis_pending_notifications {
	bt_addr_le_t addr;
	bool pending;
	bool active;

/* Since there's a 1-to-1 connection between bonded devices, and devices in
 * the array containing this struct, if the security manager overwrites
 * the oldest keys, we also overwrite the oldest entry
 */
#if IS_ENABLED(CONFIG_BT_KEYS_OVERWRITE_OLDEST)
	uint32_t age;
#endif /* CONFIG_BT_KEYS_OVERWRITE_OLDEST */
};

struct bt_csis_set_sirk {
	uint8_t type;
	uint8_t value[BT_CSIS_SET_SIRK_SIZE];
} __packed;

struct bt_csis_client_svc_inst {
	uint8_t rank;
	uint8_t set_lock;

	uint16_t start_handle;
	uint16_t end_handle;
	uint16_t set_sirk_handle;
	uint16_t set_size_handle;
	uint16_t set_lock_handle;
	uint16_t rank_handle;

	uint8_t idx;
	struct bt_gatt_subscribe_params sirk_sub_params;
	struct bt_gatt_discover_params sirk_sub_disc_params;
	struct bt_gatt_subscribe_params size_sub_params;
	struct bt_gatt_discover_params size_sub_disc_params;
	struct bt_gatt_subscribe_params lock_sub_params;
	struct bt_gatt_discover_params lock_sub_disc_params;

	struct bt_conn *conn;
};

/* TODO: Rename to bt_csis_svc_inst */
struct bt_csis_server {
	struct bt_csis_set_sirk set_sirk;
	uint8_t psri[BT_CSIS_PSRI_SIZE];
	uint8_t set_size;
	uint8_t set_lock;
	uint8_t rank;
	bool adv_enabled;
	struct k_work_delayable set_lock_timer;
	bt_addr_le_t lock_client_addr;
	struct bt_gatt_service *service_p;
	struct csis_pending_notifications pend_notify[CONFIG_BT_MAX_PAIRED];
#if IS_ENABLED(CONFIG_BT_KEYS_OVERWRITE_OLDEST)
	uint32_t age_counter;
#endif /* CONFIG_BT_KEYS_OVERWRITE_OLDEST */
#if defined(CONFIG_BT_EXT_ADV)
	uint8_t conn_cnt;
	struct bt_le_ext_adv *adv;
	struct bt_le_ext_adv_cb adv_cb;
	struct k_work work;
#endif /* CONFIG_BT_EXT_ADV */
};

struct bt_csis {
	bool client_instance;
	union {
#if defined(CONFIG_BT_CSIS)
		struct bt_csis_server srv;
#endif /* CONFIG_BT_CSIS */
#if defined(CONFIG_BT_CSIS_CLIENT)
		struct bt_csis_client_svc_inst cli;
#endif /* CONFIG_BT_CSIS_CLIENT */
	};
};
