pinebuds/services/ble_stack/hl/api/gattm_task.h
2022-08-15 17:20:27 +08:00

375 lines
9.5 KiB
C

#ifndef GATTM_TASK_H_
#define GATTM_TASK_H_
/**
****************************************************************************************
* @addtogroup GATTMTASK Task
* @ingroup GATTM
* @brief Handles ALL GATT block operations not related to a connection.
*
* The GATTMTASK is responsible for managing internal attribute database and state of
* GATT controller which manage GATT block operations related to a connection.
*
* Messages may originate from @ref ATTM "ATTM", @ref GAP "GAP" and Application.
*
* @{
****************************************************************************************
*/
/*
* INCLUDE FILES
****************************************************************************************
*/
#include "rwip_task.h" // Task definitions
#include "att.h"
/*
* DEFINES
****************************************************************************************
*/
/// GATT Task messages
enum gattm_msg_id
{
/* Database Management */
/// Add service in database request
GATTM_ADD_SVC_REQ = TASK_FIRST_MSG(TASK_ID_GATTM),
/// Add service in database response
GATTM_ADD_SVC_RSP,
/* Service management */
/// Get permission settings of service request
GATTM_SVC_GET_PERMISSION_REQ,
/// Get permission settings of service response
GATTM_SVC_GET_PERMISSION_RSP,
/// Set permission settings of service request
GATTM_SVC_SET_PERMISSION_REQ,
/// Set permission settings of service response
GATTM_SVC_SET_PERMISSION_RSP,
/* Attribute Manipulation */
/// Get permission settings of attribute request
GATTM_ATT_GET_PERMISSION_REQ,
/// Get permission settings of attribute response
GATTM_ATT_GET_PERMISSION_RSP,
/// Set permission settings of attribute request
GATTM_ATT_SET_PERMISSION_REQ,
/// Set permission settings of attribute response
GATTM_ATT_SET_PERMISSION_RSP,
/// Get attribute value request
GATTM_ATT_GET_VALUE_REQ,
/// Get attribute value response
GATTM_ATT_GET_VALUE_RSP,
/// Set attribute value request
GATTM_ATT_SET_VALUE_REQ,
/// Set attribute value response
GATTM_ATT_SET_VALUE_RSP,
/* Debug messages */
/// DEBUG ONLY: Destroy Attribute database request
GATTM_DESTROY_DB_REQ,
/// DEBUG ONLY: Destroy Attribute database response
GATTM_DESTROY_DB_RSP,
/// DEBUG ONLY: Retrieve list of services request
GATTM_SVC_GET_LIST_REQ,
/// DEBUG ONLY: Retrieve list of services response
GATTM_SVC_GET_LIST_RSP,
/// DEBUG ONLY: Retrieve information of attribute request
GATTM_ATT_GET_INFO_REQ,
/// DEBUG ONLY: Retrieve information of attribute response
GATTM_ATT_GET_INFO_RSP,
};
/**
* Attribute Description
*/
struct gattm_att_desc
{
/** Attribute UUID (LSB First) */
uint8_t uuid[ATT_UUID_128_LEN];
/**
* Attribute Permission (@see attm_perm_mask)
*/
uint16_t perm;
/**
* Maximum length of the attribute
*
* Note:
* For Included Services and Characteristic Declarations, this field contains targeted
* handle.
*
* For Characteristic Extended Properties, this field contains 2 byte value
*
* Not used Client Characteristic Configuration and Server Characteristic Configuration,
* this field is not used.
*/
uint16_t max_len;
/**
* Attribute Extended permissions
*
* Extended Value permission bit field
*
* 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
* +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
* | RI |UUID_LEN |EKS | Reserved |
* +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
*
* Bit [0-11] : Reserved
* Bit [12] : Encryption key Size must be 16 bytes
* Bit [13-14]: UUID Length (0 = 16 bits, 1 = 32 bits, 2 = 128 bits, 3 = RFU)
* Bit [15] : Trigger Read Indication (0 = Value present in Database, 1 = Value not present in Database)
*/
uint16_t ext_perm;
};
/**
* Service description
*/
struct gattm_svc_desc
{
/// Attribute Start Handle (0 = dynamically allocated)
uint16_t start_hdl;
/// Task identifier that manages service
uint16_t task_id;
/**
* 7 6 5 4 3 2 1 0
* +----+----+----+----+----+----+----+----+
* |SEC |UUID_LEN |DIS | AUTH |EKS | MI |
* +----+----+----+----+----+----+----+----+
*
* Bit [0] : Task that manage service is multi-instantiated (Connection index is conveyed)
* Bit [1] : Encryption key Size must be 16 bytes
* Bit [2-3]: Service Permission (0 = NO_AUTH, 1 = UNAUTH, 2 = AUTH, 3 = Secure Connect)
* Bit [4] : Disable the service
* Bit [5-6]: UUID Length (0 = 16 bits, 1 = 32 bits, 2 = 128 bits, 3 = RFU)
* Bit [7] : Secondary Service (0 = Primary Service, 1 = Secondary Service)
*/
uint8_t perm;
/// Number of attributes
uint8_t nb_att;
/** Service UUID */
uint8_t uuid[ATT_UUID_128_LEN];
/**
* List of attribute description present in service.
*/
struct gattm_att_desc atts[__ARRAY_EMPTY];
};
/// Add service in database request
struct gattm_add_svc_req
{
/// service description
struct gattm_svc_desc svc_desc;
};
/// Add service in database response
struct gattm_add_svc_rsp
{
/// Start handle of allocated service in attribute database
uint16_t start_hdl;
/// Return status of service allocation in attribute database.
uint8_t status;
};
/* Service management */
/// Get permission settings of service request
struct gattm_svc_get_permission_req
{
/// Service start attribute handle
uint16_t start_hdl;
};
/// Get permission settings of service response
struct gattm_svc_get_permission_rsp
{
/// Service start attribute handle
uint16_t start_hdl;
/// service permission
uint8_t perm;
/// Return status
uint8_t status;
};
/// Set permission settings of service request
struct gattm_svc_set_permission_req
{
/// Service start attribute handle
uint16_t start_hdl;
/// service permission
uint8_t perm;
};
/// Set permission settings of service response
struct gattm_svc_set_permission_rsp
{
/// Service start attribute handle
uint16_t start_hdl;
/// Return status
uint8_t status;
};
/* Attribute management */
/// Get permission settings of attribute request
struct gattm_att_get_permission_req
{
/// Handle of the attribute
uint16_t handle;
};
/// Get permission settings of attribute response
struct gattm_att_get_permission_rsp
{
/// Handle of the attribute
uint16_t handle;
/// Attribute permission
uint16_t perm;
/// Extended Attribute permission
uint16_t ext_perm;
/// Return status
uint8_t status;
};
/// Set permission settings of attribute request
struct gattm_att_set_permission_req
{
/// Handle of the attribute
uint16_t handle;
/// Attribute permission
uint16_t perm;
/// Extended Attribute permission
uint16_t ext_perm;
};
/// Set permission settings of attribute response
struct gattm_att_set_permission_rsp
{
/// Handle of the attribute
uint16_t handle;
/// Return status
uint8_t status;
};
/// Get attribute value request
struct gattm_att_get_value_req
{
/// Handle of the attribute
uint16_t handle;
};
/// Get attribute value response
struct gattm_att_get_value_rsp
{
/// Handle of the attribute
uint16_t handle;
/// Attribute value length
uint16_t length;
/// Return status
uint8_t status;
/// Attribute value
uint8_t value[__ARRAY_EMPTY];
};
/// Set attribute value request
struct gattm_att_set_value_req
{
/// Handle of the attribute
uint16_t handle;
/// Attribute value length
uint16_t length;
/// Attribute value
uint8_t value[__ARRAY_EMPTY];
};
/// Set attribute value response
struct gattm_att_set_value_rsp
{
/// Handle of the attribute
uint16_t handle;
/// Return status
uint8_t status;
};
/// DEBUG ONLY: Destroy Attribute database request
struct gattm_destroy_db_req
{
/// New Gap Start Handle
uint16_t gap_hdl;
/// New Gatt Start Handle
uint16_t gatt_hdl;
};
/// DEBUG ONLY: Destroy Attribute database Response
struct gattm_destroy_db_rsp
{
/// Return status
uint8_t status;
};
/// Service information
struct gattm_svc_info
{
/// Service start handle
uint16_t start_hdl;
/// Service end handle
uint16_t end_hdl;
/// Service task_id
uint16_t task_id;
/// Service permission
uint8_t perm;
};
/// DEBUG ONLY: Retrieve list of services response
struct gattm_svc_get_list_rsp
{
/// Return status
uint8_t status;
/// Number of services
uint8_t nb_svc;
/// Array of information about services
struct gattm_svc_info svc[__ARRAY_EMPTY];
};
/// DEBUG ONLY: Retrieve information of attribute request
struct gattm_att_get_info_req
{
/// Attribute Handle
uint16_t handle;
};
/// DEBUG ONLY: Retrieve information of attribute response
struct gattm_att_get_info_rsp
{
/// Return status
uint8_t status;
/// UUID Length
uint8_t uuid_len;
/// Attribute Handle
uint16_t handle;
/// Attribute Permissions
uint16_t perm;
/// Extended Attribute permission
uint16_t ext_perm;
/// UUID value
uint8_t uuid[ATT_UUID_128_LEN];
};
/*
* FUNCTION DECLARATIONS
****************************************************************************************
*/
/// @} GATTMTASK
#endif // GATTM_TASK_H_