172 lines
7.6 KiB
C
172 lines
7.6 KiB
C
|
|||
|
|
/**
|
||
|
|
******************************************************************************
|
||
|
|
* @file svc_ctl.h
|
||
|
|
* @author MCD Application Team
|
||
|
|
* @brief Header for ble_controller.c module
|
||
|
|
******************************************************************************
|
||
|
|
* @attention
|
||
|
|
*
|
||
|
|
* Copyright (c) 2018-2021 STMicroelectronics.
|
||
|
|
* All rights reserved.
|
||
|
|
*
|
||
|
|
* This software is licensed under terms that can be found in the LICENSE file
|
||
|
|
* in the root directory of this software component.
|
||
|
|
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||
|
|
*
|
||
|
|
******************************************************************************
|
||
|
|
*/
|
||
|
|
|
||
|
|
|
||
|
|
/**
|
||
|
|
* The BLE Controller supports the application to handle services and clients.
|
||
|
|
* It provides an API to initialize the BLE core Device and a handler mechanism to rout the GATT/GAP events to the
|
||
|
|
* application. When the ble_controller is used (recommended), the application shall register a callback for each
|
||
|
|
* Service and each Client implemented. This is already done with the Services and Clients provided in that delivery.
|
||
|
|
* + A GATT event is relevant to only one Service and/or one Client. When a GATT event is received, it is notified to
|
||
|
|
* the registered handlers to the BLE controller. When no registered handler acknowledges positively the GATT event,
|
||
|
|
* it is reported to the application.
|
||
|
|
* + A GAP event is not relevant to either a Service or a Client. It is sent to the application
|
||
|
|
* + In case the application does not want to take benefit from the ble_controller, it could bypass it. In that case,
|
||
|
|
* the application shall:
|
||
|
|
* - call SVCCTL_Init() to initialize the BLE core device (or implement on its own what is inside that function
|
||
|
|
* - implement TLHCI_UserEvtRx() which is the notification from the HCI layer to report all events (GATT/GAP).
|
||
|
|
*/
|
||
|
|
|
||
|
|
/* Define to prevent recursive inclusion -------------------------------------*/
|
||
|
|
#ifndef __SVCCTL_H
|
||
|
|
#define __SVCCTL_H
|
||
|
|
|
||
|
|
#ifdef __cplusplus
|
||
|
|
extern "C" {
|
||
|
|
#endif
|
||
|
|
|
||
|
|
/* Includes ------------------------------------------------------------------*/
|
||
|
|
/* Exported types ------------------------------------------------------------*/
|
||
|
|
typedef enum
|
||
|
|
{
|
||
|
|
SVCCTL_EvtNotAck,
|
||
|
|
SVCCTL_EvtAckFlowEnable,
|
||
|
|
SVCCTL_EvtAckFlowDisable,
|
||
|
|
} SVCCTL_EvtAckStatus_t;
|
||
|
|
|
||
|
|
typedef enum
|
||
|
|
{
|
||
|
|
SVCCTL_UserEvtFlowDisable,
|
||
|
|
SVCCTL_UserEvtFlowEnable,
|
||
|
|
} SVCCTL_UserEvtFlowStatus_t;
|
||
|
|
|
||
|
|
typedef SVCCTL_EvtAckStatus_t (*SVC_CTL_p_EvtHandler_t)(void *p_evt);
|
||
|
|
|
||
|
|
/* Exported constants --------------------------------------------------------*/
|
||
|
|
/* External variables --------------------------------------------------------*/
|
||
|
|
/* Exported macros -----------------------------------------------------------*/
|
||
|
|
|
||
|
|
/* Exported functions ------------------------------------------------------- */
|
||
|
|
/**
|
||
|
|
* @brief It initializes the BLE core Driver and sends some commands to initialize the BLE core device
|
||
|
|
* It shall be called before any BLE operation
|
||
|
|
*
|
||
|
|
* @param None
|
||
|
|
* @retval None
|
||
|
|
*/
|
||
|
|
void SVCCTL_Init( void );
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief This API registers a handler to be called when a GATT user event is received from the BLE core device. When
|
||
|
|
* a Service is created, it shall register a callback to be notified when a GATT event is received from the
|
||
|
|
* BLE core device. When a GATT event is received, it shall be checked in the handler if the GATT events belongs
|
||
|
|
* to the Service or not. The handler shall return the correct status depending on the result. As soon as one
|
||
|
|
* Service handler registered acknowledges positively the GATT event, the ble_controller stops calling the
|
||
|
|
* registered Service handlers.
|
||
|
|
* This handler is called in the TL_BLE_HCI_UserEvtProc() context
|
||
|
|
*
|
||
|
|
* @param pfBLE_SVC_Service_Event_Handler: This is the Service handler that the ble_controller calls to report a GATT
|
||
|
|
* event received. If the GATT event belongs to that Service, the callback shall return positively with
|
||
|
|
* SVCCTL_EvtAckFlowEnable.
|
||
|
|
* @retval None
|
||
|
|
*/
|
||
|
|
void SVCCTL_RegisterSvcHandler( SVC_CTL_p_EvtHandler_t pfBLE_SVC_Service_Event_Handler );
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief This API registers a handler to be called when a GATT user event is received from the BLE core device. When
|
||
|
|
* a Client is created, it shall register a callback to be notified when a GATT event is received from the
|
||
|
|
* BLE core device. When a GATT event is received, it shall be checked in the handler if the GATT events belongs
|
||
|
|
* to the Client or not. The handler shall return the correct status depending on the result. As soon as one
|
||
|
|
* Client handler registered acknowledges positively the GATT event, the ble_controller stops calling the
|
||
|
|
* registered Client handlers.
|
||
|
|
* This handler is called in the TL_BLE_HCI_UserEvtProc() context
|
||
|
|
*
|
||
|
|
* @param pfBLE_SVC_Client_Event_Handler: This is the Client handler that the ble_controller calls to report a GATT
|
||
|
|
* event received. If the GATT event belongs to that Client, the callback shall return positively with
|
||
|
|
* SVCCTL_EvtAckFlowEnable.
|
||
|
|
* @retval None
|
||
|
|
*/
|
||
|
|
void SVCCTL_RegisterCltHandler( SVC_CTL_p_EvtHandler_t pfBLE_SVC_Client_Event_Handler );
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief This API is used to resume the User Event Flow that has been stopped in return of SVCCTL_UserEvtRx()
|
||
|
|
*
|
||
|
|
* @param None
|
||
|
|
* @retval None
|
||
|
|
*/
|
||
|
|
void SVCCTL_ResumeUserEventFlow( void );
|
||
|
|
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief This callback is triggered when either
|
||
|
|
* + a GAP event is received from the BLE core device.
|
||
|
|
* + a GATT event that has not been positively acknowledged by the registered handler is received from the
|
||
|
|
* BLE core device.
|
||
|
|
* The event is returned in a HCI packet. The full HCI packet is stored in a single buffer and is available when
|
||
|
|
* this callback is triggered. However, an ACI event may be longer than a HCI packet and could be fragmented over
|
||
|
|
* several HCI packets. The HCI layer only handles HCI packets so when an ACI packet is split over several HCI
|
||
|
|
* packets, this callback is triggered for each HCI fragment. It is the responsibility of the application to
|
||
|
|
* reassemble the ACI event.
|
||
|
|
* This callback is triggered in the TL_BLE_HCI_UserEvtProc() context
|
||
|
|
*
|
||
|
|
* @param pckt: The user event received from the BLE core device
|
||
|
|
* @retval None
|
||
|
|
*/
|
||
|
|
SVCCTL_UserEvtFlowStatus_t SVCCTL_App_Notification( void *pckt );
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief
|
||
|
|
*
|
||
|
|
*
|
||
|
|
* @param pckt: The user event received from the BLE core device
|
||
|
|
* @retval SVCCTL_UserEvtFlowStatus_t: SVCCTL_UserEvtFlowEnable when the packet has been processed
|
||
|
|
* SVCCTL_UserEvtFlowDisable otherwise (the packet is kept in the queue)
|
||
|
|
*/
|
||
|
|
SVCCTL_UserEvtFlowStatus_t SVCCTL_UserEvtRx( void *pckt );
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief This API may be used by the application when the Service Controller is used to add a custom service
|
||
|
|
*
|
||
|
|
*
|
||
|
|
* @param None
|
||
|
|
* @retval None
|
||
|
|
*/
|
||
|
|
void SVCCTL_InitCustomSvc( void );
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief This API may be overloaded by the application to select a limited list of ble services to initialize.
|
||
|
|
* It is called by SVCCTL_Init()
|
||
|
|
* By default, SVCCTL_SvcInit() is implemented to initialize all BLE services which are included in the
|
||
|
|
* application at build time
|
||
|
|
* If it is required to initialize only limited part of the BLE service available in the application,
|
||
|
|
* this API may be used to call the initialization API of the subset of needed services at run time.
|
||
|
|
*
|
||
|
|
* @param None
|
||
|
|
* @retval None
|
||
|
|
*/
|
||
|
|
void SVCCTL_SvcInit( void );
|
||
|
|
|
||
|
|
#ifdef __cplusplus
|
||
|
|
}
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#endif /*__SVCCTL_H */
|
||
|
|
|
||
|
|
|