/** ***************************************************************************************** * Copyright(c) 2017, Realtek Semiconductor Corporation. All rights reserved. ***************************************************************************************** * @file simple_ble_service.h * @brief Demonstration of how to implement a self-definition service. * @details Demonstration of different kinds of service interfaces. * @author * @date * @version * ************************************************************************************* */ /* Define to prevent recursive inclusion */ #ifndef _SIMPLE_BLE_SERVICE_H_ #define _SIMPLE_BLE_SERVICE_H_ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /* Add Includes here */ #include #include /** @defgroup SIMP_Service Simple Ble Service * @brief Simple BLE service * @{ */ /*============================================================================* * Macros *============================================================================*/ /** @defgroup SIMP_Service_Exported_Macros SIMP Service Exported Macros * @brief * @{ */ /** @defgroup SIMP_Service_Application_Parameters SIMP Service Application Parameters * @brief Type of parameters set/got from application. * @{ */ typedef enum { SIMPLE_BLE_SERVICE_PARAM_V1_READ_CHAR_VAL = 0x01, } T_SIMP_PARAM_TYPE; /** @} */ /** @defgroup SIMP_Service_Upstream_Message SIMP Service Upstream Message * @brief Upstream message used to inform application. * @{ */ /** @defgroup SIMP_Service_Read_Info SIMP Service Read Info * @brief Parameter for reading characteristic value. * @{ */ #define SIMP_READ_V1 1 /** @} */ /** @defgroup SIMP_Service_Write_Info SIMP Service Write Info * @brief Parameter for writing characteristic value. * @{ */ #define SIMP_WRITE_V2 1 /** @} */ /** @defgroup SIMP_Service_Notify_Indicate_Info SIMP Service Notify Indicate Info * @brief Parameter for enable or disable notification or indication. * @{ */ #define SIMP_NOTIFY_INDICATE_V3_ENABLE 1 #define SIMP_NOTIFY_INDICATE_V3_DISABLE 2 #define SIMP_NOTIFY_INDICATE_V4_ENABLE 3 #define SIMP_NOTIFY_INDICATE_V4_DISABLE 4 /** @} */ #define SIMP_READ_V1_MAX_LEN 300 /** @} End of SIMP_Service_Upstream_Message */ /** @} End of SIMP_Service_Exported_Macros */ /*============================================================================* * Types *============================================================================*/ /** @defgroup SIMP_Service_Exported_Types SIMP Service Exported Types * @brief * @{ */ /** @defgroup TSIMP_WRITE_MSG TSIMP_WRITE_MSG * @brief Simple BLE service written msg to application. * @{ */ typedef struct { uint8_t opcode; //!< ref: @ref SIMP_Service_Write_Info T_WRITE_TYPE write_type; uint16_t len; uint8_t *p_value; } TSIMP_WRITE_MSG; /** @} End of TSIMP_WRITE_MSG */ /** @defgroup TSIMP_UPSTREAM_MSG_DATA TSIMP_UPSTREAM_MSG_DATA * @brief Simple BLE service callback message content. * @{ */ typedef union { uint8_t notification_indification_index; //!< ref: @ref SIMP_Service_Notify_Indicate_Info uint8_t read_value_index; //!< ref: @ref SIMP_Service_Read_Info TSIMP_WRITE_MSG write; } TSIMP_UPSTREAM_MSG_DATA; /** @} End of TSIMP_UPSTREAM_MSG_DATA */ /** @defgroup TSIMP_CALLBACK_DATA TSIMP_CALLBACK_DATA * @brief Simple BLE service data to inform application. * @{ */ typedef struct { uint8_t conn_id; T_SERVICE_CALLBACK_TYPE msg_type; TSIMP_UPSTREAM_MSG_DATA msg_data; } TSIMP_CALLBACK_DATA; /** @} End of TSIMP_CALLBACK_DATA */ /** @} End of SIMP_Service_Exported_Types */ /*============================================================================* * Functions *============================================================================*/ /** @defgroup SIMP_Service_Exported_Functions SIMP Service Exported Functions * @brief * @{ */ /** * @brief Add simple BLE service to the BLE stack database. * * @param[in] p_func Callback when service attribute was read, write or cccd update. * @return Service id generated by the BLE stack: @ref T_SERVER_ID. * @retval 0xFF Operation failure. * @retval others Service id assigned by stack. * */ T_SERVER_ID simp_ble_service_add_service(void *p_func); /** * @brief Set service related data from application. * * @param[in] param_type parameter type to set. * @param[in] len value length to be set. * @param[in] p_value value to set. * @return parameter set result. * @retval 0 false * @retval 1 true */ bool simp_ble_service_set_parameter(T_SIMP_PARAM_TYPE param_type, uint16_t len, void *p_value); /** * @brief send notification of simple notify characteristic value. * * @param[in] conn_id connection id * @param[in] service_id service ID of service. * @param[in] p_value characteristic value to notify * @param[in] length characteristic value length to notify * @return notification action result * @retval 1 true * @retval 0 false */ bool simp_ble_service_send_v3_notify(uint8_t conn_id, T_SERVER_ID service_id, void *p_value, uint16_t length); /** * @brief send indication of simple indicate characteristic value. * * @param[in] conn_id connection id * @param[in] service_id service ID of service. * @param[in] p_value characteristic value to notify * @param[in] length characteristic value length to notify * @return notification action result * @retval 1 true * @retval 0 false */ bool simp_ble_service_send_v4_indicate(uint8_t conn_id, T_SERVER_ID service_id, void *p_value, uint16_t length); /** @} End of SIMP_Service_Exported_Functions */ /** @} End of SIMP_Service */ #ifdef __cplusplus } #endif #endif /* _SIMPLE_BLE_SERVICE_H_ */