mirror of
				https://github.com/0xFEEDC0DE64/arduino-esp32.git
				synced 2025-10-31 22:21:39 +01:00 
			
		
		
		
	
		
			
	
	
		
			339 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			339 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|   | /******************************************************************************
 | ||
|  |  * | ||
|  |  *  Copyright (C) 1999-2013 Broadcom Corporation | ||
|  |  * | ||
|  |  *  Licensed under the Apache License, Version 2.0 (the "License"); | ||
|  |  *  you may not use this file except in compliance with the License. | ||
|  |  *  You may obtain a copy of the License at: | ||
|  |  * | ||
|  |  *  http://www.apache.org/licenses/LICENSE-2.0
 | ||
|  |  * | ||
|  |  *  Unless required by applicable law or agreed to in writing, software | ||
|  |  *  distributed under the License is distributed on an "AS IS" BASIS, | ||
|  |  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
|  |  *  See the License for the specific language governing permissions and | ||
|  |  *  limitations under the License. | ||
|  |  * | ||
|  |  ******************************************************************************/ | ||
|  | 
 | ||
|  | /*******************************************************************************
 | ||
|  | ** | ||
|  | ** Header file for profile folder. | ||
|  | ** | ||
|  | ********************************************************************************/ | ||
|  | 
 | ||
|  | #ifndef SRVC_DIS_API_H
 | ||
|  | #define SRVC_DIS_API_H
 | ||
|  | 
 | ||
|  | #include "bt_target.h"
 | ||
|  | #include "gatt_api.h"
 | ||
|  | #include "gattdefs.h"
 | ||
|  | #include "esp_gatts_api.h"
 | ||
|  | 
 | ||
|  | #define DIS_SUCCESS             GATT_SUCCESS
 | ||
|  | #define DIS_ILLEGAL_PARAM       GATT_ILLEGAL_PARAMETER
 | ||
|  | #define DIS_NO_RESOURCES        GATT_NO_RESOURCES
 | ||
|  | typedef UINT8 tDIS_STATUS; | ||
|  | 
 | ||
|  | 
 | ||
|  | /*****************************************************************************
 | ||
|  | **  Data structure for DIS | ||
|  | *****************************************************************************/ | ||
|  | 
 | ||
|  | #define DIS_ATTR_SYS_ID_BIT         0x0001
 | ||
|  | #define DIS_ATTR_MODEL_NUM_BIT      0x0002
 | ||
|  | #define DIS_ATTR_SERIAL_NUM_BIT     0x0004
 | ||
|  | #define DIS_ATTR_FW_NUM_BIT         0x0008
 | ||
|  | #define DIS_ATTR_HW_NUM_BIT         0x0010
 | ||
|  | #define DIS_ATTR_SW_NUM_BIT         0x0020
 | ||
|  | #define DIS_ATTR_MANU_NAME_BIT      0x0040
 | ||
|  | #define DIS_ATTR_IEEE_DATA_BIT      0x0080
 | ||
|  | #define DIS_ATTR_PNP_ID_BIT         0x0100
 | ||
|  | typedef UINT16  tDIS_ATTR_MASK; | ||
|  | 
 | ||
|  | #define DIS_ATTR_ALL_MASK           0xffff
 | ||
|  | 
 | ||
|  | typedef tDIS_ATTR_MASK tDIS_ATTR_BIT ; | ||
|  | 
 | ||
|  | #define DIS_MAX_NUM_INC_SVR         0
 | ||
|  | #define DIS_MAX_CHAR_NUM            9
 | ||
|  | #define DIS_MAX_ATTR_NUM            (DIS_MAX_CHAR_NUM * 2 + DIS_MAX_NUM_INC_SVR + 1)
 | ||
|  | 
 | ||
|  | #ifndef DIS_ATTR_DB_SIZE
 | ||
|  | #define DIS_ATTR_DB_SIZE            GATT_DB_MEM_SIZE(DIS_MAX_NUM_INC_SVR, DIS_MAX_CHAR_NUM, 0)
 | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #define DIS_SYSTEM_ID_SIZE          8
 | ||
|  | #define DIS_PNP_ID_SIZE             7
 | ||
|  | 
 | ||
|  | 
 | ||
|  | typedef struct { | ||
|  |     UINT16      uuid; | ||
|  |     UINT16      handle; | ||
|  | } tDIS_DB_ENTRY; | ||
|  | 
 | ||
|  | typedef struct { | ||
|  |     UINT16      len; | ||
|  |     UINT8       *p_data; | ||
|  | } tDIS_STRING; | ||
|  | 
 | ||
|  | typedef struct { | ||
|  |     UINT16       vendor_id; | ||
|  |     UINT16       product_id; | ||
|  |     UINT16       product_version; | ||
|  |     UINT8        vendor_id_src; | ||
|  | 
 | ||
|  | } tDIS_PNP_ID; | ||
|  | 
 | ||
|  | typedef union { | ||
|  |     UINT64              system_id; | ||
|  |     tDIS_PNP_ID         pnp_id; | ||
|  |     tDIS_STRING         data_str; | ||
|  | } tDIS_ATTR; | ||
|  | 
 | ||
|  | #define DIS_MAX_STRING_DATA     7
 | ||
|  | 
 | ||
|  | typedef struct { | ||
|  |     UINT16                  attr_mask; | ||
|  |     UINT64                  system_id; | ||
|  |     tDIS_PNP_ID             pnp_id; | ||
|  |     UINT8                   *data_string[DIS_MAX_STRING_DATA]; | ||
|  | } tDIS_VALUE; | ||
|  | 
 | ||
|  | //typedef void (tDIS_READ_CBACK)(BD_ADDR addr, tDIS_VALUE *p_dis_value);
 | ||
|  | 
 | ||
|  | typedef struct { | ||
|  |     tDIS_DB_ENTRY           dis_attr[DIS_MAX_CHAR_NUM]; | ||
|  |     tDIS_VALUE              dis_value; | ||
|  | 
 | ||
|  | //    tDIS_READ_CBACK         *p_read_dis_cback;
 | ||
|  | 
 | ||
|  |     UINT16                  service_handle; | ||
|  |     UINT16                  max_handle; | ||
|  | 
 | ||
|  |     bool                    enabled; | ||
|  | 
 | ||
|  |     //  UINT8                   dis_read_uuid_idx;
 | ||
|  |     //  tDIS_ATTR_MASK          request_mask;
 | ||
|  | } tDIS_CB; | ||
|  | 
 | ||
|  | /*****************************************************************************
 | ||
|  | **  Data structure used by Battery Service | ||
|  | *****************************************************************************/ | ||
|  | 
 | ||
|  | #ifndef BA_MAX_INT_NUM
 | ||
|  | #define BA_MAX_INT_NUM  4
 | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #define BATTERY_LEVEL_SIZE   1
 | ||
|  | 
 | ||
|  | typedef struct { | ||
|  |     BD_ADDR remote_bda; | ||
|  |     BOOLEAN need_rsp; | ||
|  |     UINT16  clt_cfg; | ||
|  | } tBA_WRITE_DATA; | ||
|  | 
 | ||
|  | #define BA_READ_CLT_CFG_REQ     1
 | ||
|  | #define BA_READ_PRE_FMT_REQ     2
 | ||
|  | #define BA_READ_RPT_REF_REQ     3
 | ||
|  | #define BA_READ_LEVEL_REQ       4
 | ||
|  | #define BA_WRITE_CLT_CFG_REQ    5
 | ||
|  | 
 | ||
|  | typedef void (tBA_CBACK)(UINT32 trans_id, UINT16 conn_id, UINT8 app_id, UINT8 event, tBA_WRITE_DATA *p_data); | ||
|  | 
 | ||
|  | #define BA_LEVEL_NOTIFY         0x01
 | ||
|  | #define BA_LEVEL_PRE_FMT        0x02
 | ||
|  | #define BA_LEVEL_RPT_REF        0x04
 | ||
|  | typedef UINT8   tBA_LEVEL_DESCR; | ||
|  | 
 | ||
|  | typedef struct { | ||
|  |     BOOLEAN         is_pri; | ||
|  |     tBA_LEVEL_DESCR     ba_level_descr; | ||
|  |     tGATT_TRANSPORT transport; | ||
|  |     tBA_CBACK       *p_cback; | ||
|  | 
 | ||
|  | } tBA_REG_INFO; | ||
|  | 
 | ||
|  | typedef union { | ||
|  |     UINT8       ba_level; | ||
|  |     UINT16      clt_cfg; | ||
|  |     tGATT_CHAR_RPT_REF  rpt_ref; | ||
|  |     tGATT_CHAR_PRES     pres_fmt; | ||
|  | } tBA_RSP_DATA; | ||
|  | 
 | ||
|  | typedef struct { | ||
|  |     UINT8       app_id; | ||
|  |     UINT16      ba_level_hdl; | ||
|  |     UINT16      clt_cfg_hdl; | ||
|  |     UINT16      rpt_ref_hdl; | ||
|  |     UINT16      pres_fmt_hdl; | ||
|  | 
 | ||
|  |     tBA_CBACK   *p_cback; | ||
|  | 
 | ||
|  |     UINT16      pending_handle; | ||
|  |     //UINT8       pending_clcb_idx;
 | ||
|  |     UINT8       pending_evt; | ||
|  | } tBA_INST; | ||
|  | 
 | ||
|  | typedef struct { | ||
|  |     tBA_INST        battery_inst[BA_MAX_INT_NUM]; | ||
|  |     UINT8           inst_id; | ||
|  |     bool            enabled; | ||
|  | } tBATTERY_CB; | ||
|  | /*****************************************************************************
 | ||
|  | **  External Function Declarations | ||
|  | *****************************************************************************/ | ||
|  | #ifdef __cplusplus
 | ||
|  | extern "C" | ||
|  | { | ||
|  | #endif
 | ||
|  | /*****************************************************************************
 | ||
|  | **  Service Engine API | ||
|  | *****************************************************************************/ | ||
|  | /*******************************************************************************
 | ||
|  | ** | ||
|  | ** Function         srvc_eng_init | ||
|  | ** | ||
|  | ** Description      Initializa the GATT Service engine, register a GATT application | ||
|  | **                  as for a central service management. | ||
|  | ** | ||
|  | *******************************************************************************/ | ||
|  | //extern tGATT_STATUS srvc_eng_init (void);
 | ||
|  | 
 | ||
|  | 
 | ||
|  | /*****************************************************************************
 | ||
|  | **  DIS Server Function | ||
|  | *****************************************************************************/ | ||
|  | 
 | ||
|  | extern bool dis_valid_handle_range(UINT16 handle); | ||
|  | /*******************************************************************************
 | ||
|  | ** | ||
|  | ** Function         DIS_Init | ||
|  | ** | ||
|  | ** Description      Initializa the Device Information Service Server. | ||
|  | ** | ||
|  | *******************************************************************************/ | ||
|  | extern void DIS_Init (tBTA_GATTS_IF gatt_if, tDIS_ATTR_MASK dis_attr_mask); | ||
|  | /*******************************************************************************
 | ||
|  | ** | ||
|  | ** Function         DIS_SrUpdate | ||
|  | ** | ||
|  | ** Description      Update the DIS server attribute values | ||
|  | ** | ||
|  | *******************************************************************************/ | ||
|  | extern tDIS_STATUS DIS_SrUpdate(tDIS_ATTR_BIT dis_attr_bit, tDIS_ATTR *p_info); | ||
|  | /*******************************************************************************
 | ||
|  | ** | ||
|  | ** Function         dis_AddChar | ||
|  | ** | ||
|  | ** Description      add characteristic for dis | ||
|  | ** | ||
|  | *******************************************************************************/ | ||
|  | extern void dis_AddChar(UINT16 service_id); | ||
|  | /*******************************************************************************
 | ||
|  | **   dis_s_read_attr_value | ||
|  | ** | ||
|  | **   Process read DIS attribute request. | ||
|  | *******************************************************************************/ | ||
|  | 
 | ||
|  | extern void dis_s_read_attr_value (tGATTS_DATA *p_data, tGATT_VALUE *p_value, | ||
|  |                                    UINT32 trans_id, UINT16 conn_id); | ||
|  | /*****************************************************************************
 | ||
|  | **  DIS Client Function | ||
|  | *****************************************************************************/ | ||
|  | /*******************************************************************************
 | ||
|  | ** | ||
|  | ** Function         DIS_ReadDISInfo | ||
|  | ** | ||
|  | ** Description      Read remote device DIS information. | ||
|  | ** | ||
|  | ** Returns          void | ||
|  | ** | ||
|  | *******************************************************************************/ | ||
|  | //extern BOOLEAN DIS_ReadDISInfo(BD_ADDR peer_bda, tDIS_READ_CBACK *p_cback,
 | ||
|  | //                              tDIS_ATTR_MASK mask);
 | ||
|  | 
 | ||
|  | /*******************************************************************************
 | ||
|  | **      BATTERY SERVICE API | ||
|  | *******************************************************************************/ | ||
|  | /***************************************************************
 | ||
|  | ** | ||
|  | ** Function     bas_register | ||
|  | ** | ||
|  | ** Description  register app for battery service | ||
|  | ** | ||
|  | ****************************************************************/ | ||
|  | extern void bas_register(void); | ||
|  | /***************************************************************
 | ||
|  | ** | ||
|  | ** Function     bas_init | ||
|  | ** | ||
|  | ** Description  register battery service | ||
|  | ** | ||
|  | ****************************************************************/ | ||
|  | extern void bas_init(tBTA_GATTS_IF gatt_if, UINT16 app_id); | ||
|  | 
 | ||
|  | /***************************************************************
 | ||
|  | ** | ||
|  | ** Function     bas_AddChar | ||
|  | ** | ||
|  | ** Description  add characteristic for battery service | ||
|  | ** | ||
|  | ****************************************************************/ | ||
|  | extern void bas_AddChar(UINT16 service_id, tBT_UUID *char_uuid); | ||
|  | /***************************************************************
 | ||
|  | ** | ||
|  | ** Function     bas_AddCharDescr | ||
|  | ** | ||
|  | ** Description  add descriptor for battery service if needed | ||
|  | ** | ||
|  | ****************************************************************/ | ||
|  | extern void bas_AddCharDescr(UINT16 service_id, UINT16 attr_id); | ||
|  | /***************************************************************
 | ||
|  | ** | ||
|  | ** Function     bas_service_cmpl | ||
|  | ** | ||
|  | ** Description  create battery service complete | ||
|  | ** | ||
|  | ****************************************************************/ | ||
|  | extern void bas_service_cmpl(UINT16 service_id, tBTA_GATT_STATUS status); | ||
|  | /*******************************************************************************
 | ||
|  | ** | ||
|  | ** Function         Battery_Rsp | ||
|  | ** | ||
|  | ** Description      Respond to a battery service request | ||
|  | ** | ||
|  | *******************************************************************************/ | ||
|  | extern void Battery_Rsp (UINT32 trans_id, UINT16 conn_id, UINT8 app_id, | ||
|  |                          tGATT_STATUS st, UINT8 event, tBA_RSP_DATA *p_rsp); | ||
|  | /*******************************************************************************
 | ||
|  | ** | ||
|  | ** Function         Battery_Notify | ||
|  | ** | ||
|  | ** Description      Send battery level notification | ||
|  | ** | ||
|  | *******************************************************************************/ | ||
|  | extern void Battery_Notify (UINT16 conn_id, UINT8 app_id, BD_ADDR remote_bda, UINT8 battery_level); | ||
|  | 
 | ||
|  | /*****************************************************************************
 | ||
|  | ** Function      bas_s_read_attr_value | ||
|  | ** | ||
|  | ** Description   it will be called when client send a read request | ||
|  | ******************************************************************************/ | ||
|  | extern void bas_s_read_attr_value(tGATTS_DATA *p_data, UINT32 trans_id, UINT16 conn_id); | ||
|  | /*****************************************************************************
 | ||
|  | ** Function      bas_s_write_attr_value | ||
|  | ** | ||
|  | ** Description   it will be called when client send a write request | ||
|  | ******************************************************************************/ | ||
|  | extern void bas_s_write_attr_value(tGATTS_DATA *p_data, UINT32 trans_id, | ||
|  |                                    UINT16 conn_id, BD_ADDR bd_addr); | ||
|  | 
 | ||
|  | extern void gatts_server_test(void); | ||
|  | #ifdef __cplusplus
 | ||
|  | 
 | ||
|  | } | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #endif
 |