123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637 |
- /**
- * @file
- * @author chipsea
- * @brief
- * @version 0.1
- * @date 2020-11-30
- * @copyright Copyright (c) 2020, CHIPSEA Co., Ltd.
- * @note
- */
- /**
- @headerfile: gattservapp.h
- $Date:
- $Revision:
- @mainpage BLE GATT Server Application API
- Description: This file contains the GATT Server Application (GATTServApp)
- definitions and prototypes.<BR><BR>
- **************************************************************************************************/
- #ifndef GATTSERVAPP_H
- #define GATTSERVAPP_H
- #ifdef __cplusplus
- extern "C"
- {
- #endif
- /*********************************************************************
- * INCLUDES
- */
- #include "bcomdef.h"
- #include "OSAL.h"
- /*********************************************************************
- * CONSTANTS
- */
- /** @defgroup GATT_SERV_MSG_EVENT_DEFINES GATT Server Message IDs
- * @{
- */
- #define GATT_CLIENT_CHAR_CFG_UPDATED_EVENT 0x00 //!< Sent when a Client Characteristic Configuration is updated. This event is sent as an OSAL message defined as gattCharCfgUpdatedEvent_t.
- /** @} End GATT_SERV_MSG_EVENT_DEFINES */
- /** @defgroup GATT_PROP_BITMAPS_DEFINES GATT Characteristic Properties Bit Fields
- * @{
- */
- #define GATT_PROP_BCAST 0x01 //!< Permits broadcasts of the Characteristic Value
- #define GATT_PROP_READ 0x02 //!< Permits reads of the Characteristic Value
- #define GATT_PROP_WRITE_NO_RSP 0x04 //!< Permits writes of the Characteristic Value without response
- #define GATT_PROP_WRITE 0x08 //!< Permits writes of the Characteristic Value with response
- #define GATT_PROP_NOTIFY 0x10 //!< Permits notifications of a Characteristic Value without acknowledgement
- #define GATT_PROP_INDICATE 0x20 //!< Permits indications of a Characteristic Value with acknowledgement
- #define GATT_PROP_AUTHEN 0x40 //!< Permits signed writes to the Characteristic Value
- #define GATT_PROP_EXTENDED 0x80 //!< Additional characteristic properties are defined in the Characteristic Extended Properties Descriptor
- /** @} End GATT_PROP_BITMAPS_DEFINES */
- /** @defgroup GATT_EXT_PROP_BITMAPS_DEFINES GATT Characteristic Extended Properties Bit Fields
- * @{
- */
- #define GATT_EXT_PROP_RELIABLE_WRITE 0x0001 //!< Permits reliable writes of the Characteristic Value
- #define GATT_EXT_PROP_WRITABLE_AUX 0x0002 //!< Permits writes to the characteristic descriptor
- /** @} End GATT_EXT_PROP_BITMAPS_DEFINES */
- /** @defgroup GATT_CLIENT_CFG_BITMAPS_DEFINES GATT Client Characteristic Configuration Bit Fields
- * @{
- */
- #define GATT_CLIENT_CFG_NOTIFY 0x0001 //!< The Characteristic Value shall be notified
- #define GATT_CLIENT_CFG_INDICATE 0x0002 //!< The Characteristic Value shall be indicated
- /** @} End GATT_CLIENT_CFG_BITMAPS_DEFINES */
- /** @defgroup GATT_SERV_CFG_BITMAPS_DEFINES GATT Server Characteristic Configuration Bit Fields
- * @{
- */
- #define GATT_SERV_CFG_BCAST 0x0001 //!< The Characteristic Value shall be broadcast when the server is in the broadcast procedure if advertising data resources are available
- /** @} End GATT_SERV_CFG_BITMAPS_DEFINES */
- #define GATT_CFG_NO_OPERATION 0x0000 // No operation
- /** @defgroup GATT_FORMAT_TYPES_DEFINES GATT Characteristic Format Types
- * @{
- */
- #define GATT_FORMAT_BOOL 0x01 //!< Unsigned 1 bit; 0 = false, 1 = true
- #define GATT_FORMAT_2BIT 0x02 //!< Unsigned 2 bit integer
- #define GATT_FORMAT_NIBBLE 0x03 //!< Unsigned 4 bit integer
- #define GATT_FORMAT_UINT8 0x04 //!< Unsigned 8 bit integer
- #define GATT_FORMAT_UINT12 0x05 //!< Unsigned 12 bit integer
- #define GATT_FORMAT_UINT16 0x06 //!< Unsigned 16 bit integer
- #define GATT_FORMAT_UINT24 0x07 //!< Unsigned 24 bit integer
- #define GATT_FORMAT_UINT32 0x08 //!< Unsigned 32 bit integer
- #define GATT_FORMAT_UINT48 0x09 //!< Unsigned 48 bit integer
- #define GATT_FORMAT_UINT64 0x0a //!< Unsigned 64 bit integer
- #define GATT_FORMAT_UINT128 0x0b //!< Unsigned 128 bit integer
- #define GATT_FORMAT_SINT8 0x0c //!< Signed 8 bit integer
- #define GATT_FORMAT_SINT12 0x0d //!< Signed 12 bit integer
- #define GATT_FORMAT_SINT16 0x0e //!< Signed 16 bit integer
- #define GATT_FORMAT_SINT24 0x0f //!< Signed 24 bit integer
- #define GATT_FORMAT_SINT32 0x10 //!< Signed 32 bit integer
- #define GATT_FORMAT_SINT48 0x11 //!< Signed 48 bit integer
- #define GATT_FORMAT_SINT64 0x12 //!< Signed 64 bit integer
- #define GATT_FORMAT_SINT128 0x13 //!< Signed 128 bit integer
- #define GATT_FORMAT_FLOAT32 0x14 //!< IEEE-754 32 bit floating point
- #define GATT_FORMAT_FLOAT64 0x15 //!< IEEE-754 64 bit floating point
- #define GATT_FORMAT_SFLOAT 0x16 //!< IEEE-11073 16 bit SFLOAT
- #define GATT_FORMAT_FLOAT 0x17 //!< IEEE-11073 32 bit FLOAT
- #define GATT_FORMAT_DUINT16 0x18 //!< IEEE-20601 format
- #define GATT_FORMAT_UTF8S 0x19 //!< UTF-8 string
- #define GATT_FORMAT_UTF16S 0x1a //!< UTF-16 string
- #define GATT_FORMAT_STRUCT 0x1b //!< Opaque structure
- /** @} End GATT_FORMAT_TYPES_DEFINES */
- /** @defgroup GATT_NS_TYPES_DEFINES GATT Namespace Types
- * @{
- */
- #define GATT_NS_NONE 0x00 //!< No namespace
- #define GATT_NS_BT_SIG 0x01 //!< Bluetooth SIG namespace
- /** @} End GATT_NS_TYPES_DEFINES */
- /** @defgroup GATT_NS_BT_DESC_DEFINES GATT Bluetooth Namespace Descriptions
- * @{
- */
- #define GATT_NS_BT_DESC_UNKNOWN 0x0000 //!< The description is unknown
- /** @} End GATT_NS_BT_DESC_DEFINES */
- // All profile services bit fields
- #define GATT_ALL_SERVICES 0xFFFFFFFF
- // GATT Services bit fields
- #define GATT_SERVICE 0x00000001
- #if defined ( TESTMODES )
- // GATT Test Modes
- #define GATT_TESTMODE_OFF 0 // Test mode off
- #define GATT_TESTMODE_NO_RSP 1 // Ignore incoming request
- #define GATT_TESTMODE_PREPARE_WRITE 2 // Forward Prepare Write Request right away
- #define GATT_TESTMODE_MAX_MTU_SIZE 3 // Use Max ATT MTU size with Exchange MTU Rsp
- #define GATT_TESTMODE_CORRUPT_PW_DATA 4 // Corrupt incoming Prepare Write Request data
- #endif
- // GATT Server Parameters
- #define GATT_PARAM_NUM_PREPARE_WRITES 0 // RW uint8
- /*********************************************************************
- * VARIABLES
- */
- /*********************************************************************
- * MACROS
- */
- // The number of attribute records in a given attribute table
- #define GATT_NUM_ATTRS( attrs ) ( sizeof( attrs ) / sizeof( gattAttribute_t ) )
- // The handle of a service is the handle of the first attribute
- #define GATT_SERVICE_HANDLE( attrs ) ( (attrs)[0].handle )
- // The handle of the first included service (i = 1) is the value of the second attribute
- #define GATT_INCLUDED_HANDLE( attrs, i ) ( *((uint16 *)((attrs)[(i)].pValue)) )
- /*********************************************************************
- * TYPEDEFS
- */
- /**
- * @defgroup GATT_SERV_APP_CB_API GATT Server App Callback API Functions
- *
- * @{
- */
- /**
- * @brief Callback function prototype to read an attribute value.
- *
- * @param connHandle - connection request was received on
- * @param pAttr - pointer to attribute
- * @param pValue - pointer to data to be read (to be returned)
- * @param pLen - length of data (to be returned)
- * @param offset - offset of the first octet to be read
- * @param maxLen - maximum length of data to be read
- *
- * @return SUCCESS: Read was successfully.<BR>
- * Error, otherwise: ref ATT_ERR_CODE_DEFINES.<BR>
- */
- typedef bStatus_t (*pfnGATTReadAttrCB_t)( uint16 connHandle, gattAttribute_t *pAttr,
- uint8 *pValue, uint16 *pLen, uint16 offset,
- uint8 maxLen );
- /**
- * @brief Callback function prototype to write an attribute value.
- *
- * @param connHandle - connection request was received on
- * @param pAttr - pointer to attribute
- * @param pValue - pointer to data to be written
- * @param pLen - length of data
- * @param offset - offset of the first octet to be written
- *
- * @return SUCCESS: Write was successfully.<BR>
- * Error, otherwise: ref ATT_ERR_CODE_DEFINES.<BR>
- */
- typedef bStatus_t (*pfnGATTWriteAttrCB_t)( uint16 connHandle, gattAttribute_t *pAttr,
- uint8 *pValue, uint16 len, uint16 offset );
- /**
- * @brief Callback function prototype to authorize a Read or Write operation
- * on a given attribute.
- *
- * @param connHandle - connection request was received on
- * @param pAttr - pointer to attribute
- * @param opcode - request opcode (ATT_READ_REQ or ATT_WRITE_REQ)
- *
- * @return SUCCESS: Operation authorized.<BR>
- * ATT_ERR_INSUFFICIENT_AUTHOR: Authorization required.<BR>
- */
- typedef bStatus_t (*pfnGATTAuthorizeAttrCB_t)( uint16 connHandle, gattAttribute_t *pAttr,
- uint8 opcode );
- /**
- * @}
- */
- /**
- * GATT Structure for Characteristic Presentation Format Value.
- */
- typedef struct
- {
- uint8 format; //!< Format of the value of this characteristic
- int8 exponent; //!< A sign integer which represents the exponent of an integer
- uint16 unit; //!< Unit of this attribute as defined in the data dictionary
- uint8 nameSpace; //!< Name space of the description
- uint16 desc; //!< Description of this attribute as defined in a higher layer profile
- } gattCharFormat_t;
- /**
- * GATT Structure for Client Characteristic Configuration.
- */
- typedef struct
- {
- uint16 connHandle; //!< Client connection handle
- uint8 value; //!< Characteristic configuration value for this client
- } gattCharCfg_t;
- /**
- * GATT Structure for service callback functions - must be setup by the application
- * and used when GATTServApp_RegisterService() is called.
- */
- typedef struct
- {
- pfnGATTReadAttrCB_t pfnReadAttrCB; //!< Read callback function pointer
- pfnGATTWriteAttrCB_t pfnWriteAttrCB; //!< Write callback function pointer
- pfnGATTAuthorizeAttrCB_t pfnAuthorizeAttrCB; //!< Authorization callback function pointer
- } gattServiceCBs_t;
- /**
- * GATT Server App event header format.
- */
- typedef struct
- {
- osal_event_hdr_t hdr; //!< GATT_SERV_MSG_EVENT and status
- uint16 connHandle; //!< Connection message was received on
- uint8 method; //!< GATT type of command. Ref: @ref GATT_SERV_MSG_EVENT_DEFINES
- } gattEventHdr_t;
- /**
- * GATT_CLIENT_CHAR_CFG_UPDATED_EVENT message format. This message is sent to
- * the app when a Client Characteristic Configuration is updated.
- */
- typedef struct
- {
- osal_event_hdr_t hdr; //!< GATT_SERV_MSG_EVENT and status
- uint16 connHandle; //!< Connection message was received on
- uint8 method; //!< GATT_CLIENT_CHAR_CFG_UPDATED_EVENT
- uint16 attrHandle; //!< attribute handle
- uint16 value; //!< attribute new value
- } gattClientCharCfgUpdatedEvent_t;
- typedef void (*gattServMsgCB_t)( gattMsgEvent_t*pMsg);
- /*********************************************************************
- * VARIABLES
- */
- /*********************************************************************
- * API FUNCTIONS
- */
- /**
- * @defgroup GATT_SERV_APP_API GATT Server App API Functions
- *
- * @{
- */
- /**
- * @brief Register your task ID to receive event messages
- * from the GATT Server Application.
- *
- * @param taskID - Default task ID to send events.
- *
- * @return none
- */
- extern void GATTServApp_RegisterForMsg( uint8 taskID );
- /**
- * @brief Register a service's attribute list and callback functions with
- * the GATT Server Application.
- *
- * @param pAttrs - Array of attribute records to be registered
- * @param numAttrs - Number of attributes in array
- * @param pServiceCBs - Service callback function pointers
- *
- * @return SUCCESS: Service registered successfully.<BR>
- * INVALIDPARAMETER: Invalid service field.<BR>
- * FAILURE: Not enough attribute handles available.<BR>
- * bleMemAllocError: Memory allocation error occurred.<BR>
- */
- extern bStatus_t GATTServApp_RegisterService( gattAttribute_t *pAttrs, uint16 numAttrs,
- CONST gattServiceCBs_t *pServiceCBs );
- /**
- * @brief Deregister a service's attribute list and callback functions from
- * the GATT Server Application.
- *
- * NOTE: It's the caller's responsibility to free the service attribute
- * list returned from this API.
- *
- * @param handle - handle of service to be deregistered
- * @param p2pAttrs - pointer to array of attribute records (to be returned)
- *
- * @return SUCCESS: Service deregistered successfully.
- * FAILURE: Service not found.
- */
- bStatus_t GATTServApp_DeregisterService( uint16 handle, gattAttribute_t **p2pAttrs );
- /**
- * @brief Find the attribute record within a service attribute
- * table for a given attribute value pointer.
- *
- * @param pAttrTbl - pointer to attribute table
- * @param numAttrs - number of attributes in attribute table
- * @param pValue - pointer to attribute value
- *
- * @return Pointer to attribute record. NULL, if not found.
- */
- extern gattAttribute_t *GATTServApp_FindAttr( gattAttribute_t *pAttrTbl,
- uint16 numAttrs, uint8 *pValue );
- /**
- * @brief Add function for the GATT Service.
- *
- * @param services - services to add. This is a bit map and can
- * contain more than one service.
- *
- * @return SUCCESS: Service added successfully.<BR>
- * INVALIDPARAMETER: Invalid service field.<BR>
- * FAILURE: Not enough attribute handles available.<BR>
- * bleMemAllocError: Memory allocation error occurred.<BR>
- */
- extern bStatus_t GATTServApp_AddService( uint32 services );
- /**
- * @brief Delete function for the GATT Service.
- *
- * @param services - services to delete. This is a bit map and can
- * contain more than one service.
- *
- * @return SUCCESS: Service deleted successfully.<BR>
- * FAILURE: Service not found.<BR>
- */
- extern bStatus_t GATTServApp_DelService( uint32 services );
- /**
- * @brief Set a GATT Server parameter.
- *
- * @param param - Profile parameter ID
- * @param len - length of data to right
- * @param pValue - pointer to data to write. This is dependent on the
- * parameter ID and WILL be cast to the appropriate
- * data type (example: data type of uint16 will be cast
- * to uint16 pointer).
- *
- * @return SUCCESS: Parameter set successful
- * FAILURE: Parameter in use
- * INVALIDPARAMETER: Invalid parameter
- * bleInvalidRange: Invalid value
- * bleMemAllocError: Memory allocation failed
- */
- extern bStatus_t GATTServApp_SetParameter( uint8 param, uint8 len, void *pValue );
- /**
- * @brief Get a GATT Server parameter.
- *
- * @param param - Profile parameter ID
- * @param pValue - pointer to data to put. This is dependent on the
- * parameter ID and WILL be cast to the appropriate
- * data type (example: data type of uint16 will be
- * cast to uint16 pointer).
- *
- * @return SUCCESS: Parameter get successful
- * INVALIDPARAMETER: Invalid parameter
- */
- extern bStatus_t GATTServApp_GetParameter( uint8 param, void *pValue );
- /**
- * @brief Update the Client Characteristic Configuration for a given
- * Client.
- *
- * Note: This API should only be called from the Bond Manager.
- *
- * @param connHandle - connection handle.
- * @param attrHandle - attribute handle.
- * @param value - characteristic configuration value.
- *
- * @return SUCCESS: Parameter get successful
- * INVALIDPARAMETER: Invalid parameter
- */
- extern bStatus_t GATTServApp_UpdateCharCfg( uint16 connHandle, uint16 attrHandle, uint16 value );
- /**
- * @brief Initialize the client characteristic configuration table.
- *
- * Note: Each client has its own instantiation of the Client
- * Characteristic Configuration. Reads/Writes of the Client
- * Characteristic Configuration only only affect the
- * configuration of that client.
- *
- * @param connHandle - connection handle (0xFFFF for all connections).
- * @param charCfgTbl - client characteristic configuration table.
- *
- * @return none
- */
- extern void GATTServApp_InitCharCfg( uint16 connHandle, gattCharCfg_t *charCfgTbl );
- /**
- * @brief Read the client characteristic configuration for a given
- * client.
- *
- * Note: Each client has its own instantiation of the Client
- * Characteristic Configuration. Reads of the Client
- * Characteristic Configuration only shows the configuration
- * for that client.
- *
- * @param connHandle - connection handle.
- * @param charCfgTbl - client characteristic configuration table.
- *
- * @return attribute value
- */
- extern uint16 GATTServApp_ReadCharCfg( uint16 connHandle, gattCharCfg_t *charCfgTbl );
- /**
- * @brief Write the client characteristic configuration for a given
- * client.
- *
- * Note: Each client has its own instantiation of the Client
- * Characteristic Configuration. Writes of the Client
- * Characteristic Configuration only only affect the
- * configuration of that client.
- *
- * @param connHandle - connection handle.
- * @param charCfgTbl - client characteristic configuration table.
- * @param value - attribute new value.
- *
- * @return Success or Failure
- */
- extern uint8 GATTServApp_WriteCharCfg( uint16 connHandle, gattCharCfg_t *charCfgTbl, uint16 value );
- /**
- * @brief Process the client characteristic configuration
- * write request for a given client.
- *
- * @param connHandle - connection message was received on.
- * @param pAttr - pointer to attribute.
- * @param pValue - pointer to data to be written.
- * @param len - length of data.
- * @param offset - offset of the first octet to be written.
- * @param validCfg - valid configuration.
- *
- * @return Success or Failure
- */
- extern bStatus_t GATTServApp_ProcessCCCWriteReq( uint16 connHandle, gattAttribute_t *pAttr,
- uint8 *pValue, uint8 len, uint16 offset,
- uint16 validCfg );
- /**
- * @brief Process Client Charateristic Configuration change.
- *
- * @param charCfgTbl - characteristic configuration table.
- * @param pValue - pointer to attribute value.
- * @param authenticated - whether an authenticated link is required.
- * @param attrTbl - attribute table.
- * @param numAttrs - number of attributes in attribute table.
- * @param taskId - task to be notified of confirmation.
- *
- * @return Success or Failure
- */
- extern bStatus_t GATTServApp_ProcessCharCfg( gattCharCfg_t *charCfgTbl, uint8 *pValue,
- uint8 authenticated, gattAttribute_t *attrTbl,
- uint16 numAttrs, uint8 taskId );
- /**
- * @brief Build and send the GATT_CLIENT_CHAR_CFG_UPDATED_EVENT to
- * the application.
- *
- * @param connHandle - connection handle
- * @param attrHandle - attribute handle
- * @param value - attribute new value
- *
- * @return none
- */
- extern void GATTServApp_SendCCCUpdatedEvent( uint16 connHandle, uint16 attrHandle, uint16 value );
- /**
- * @brief Send out a Service Changed Indication.
- *
- * @param connHandle - connection to use
- * @param taskId - task to be notified of confirmation
- *
- * @return SUCCESS: Indication was sent successfully.<BR>
- * FAILURE: Service Changed attribute not found.<BR>
- * INVALIDPARAMETER: Invalid connection handle or request field.<BR>
- * MSG_BUFFER_NOT_AVAIL: No HCI buffer is available.<BR>
- * bleNotConnected: Connection is down.<BR>
- * blePending: A confirmation is pending with this client.<BR>
- */
- extern bStatus_t GATTServApp_SendServiceChangedInd( uint16 connHandle, uint8 taskId );
- /**
- * @brief Read an attribute. If the format of the attribute value
- * is unknown to GATT Server, use the callback function
- * provided by the Service.
- *
- * @param connHandle - connection message was received on
- * @param pAttr - pointer to attribute
- * @param service - handle of owner service
- * @param pValue - pointer to data to be read
- * @param pLen - length of data to be read
- * @param offset - offset of the first octet to be read
- * @param maxLen - maximum length of data to be read
- *
- * @return Success or Failure
- */
- extern uint8 GATTServApp_ReadAttr( uint16 connHandle, gattAttribute_t *pAttr,
- uint16 service, uint8 *pValue, uint16 *pLen,
- uint16 offset, uint8 maxLen );
- /**
- * @brief Write attribute data
- *
- * @param connHandle - connection message was received on
- * @param handle - attribute handle
- * @param pValue - pointer to data to be written
- * @param len - length of data
- * @param offset - offset of the first octet to be written
- *
- * @return Success or Failure
- */
- extern uint8 GATTServApp_WriteAttr( uint16 connHandle, uint16 handle,
- uint8 *pValue, uint16 len, uint16 offset );
- /**
- * @}
- */
- /**
- * @brief Set a GATT Server Application Parameter value. Use this
- * function to change the default GATT parameter values.
- *
- * @param value - new param value
- *
- * @return void
- */
- extern void GATTServApp_SetParamValue( uint16 value );
- /**
- * @brief Get a GATT Server Application Parameter value.
- *
- * @param none
- *
- * @return GATT Parameter value
- */
- extern uint16 GATTServApp_GetParamValue( void );
- /*-------------------------------------------------------------------
- * TASK API - These functions must only be called by OSAL.
- */
- /**
- * @internal
- *
- * @brief Initialize the GATT Server Test Application.
- *
- * @param taskId - Task identifier for the desired task
- *
- * @return void
- *
- */
- extern void GATTServApp_Init( uint8 taskId );
- /**
- * @internal
- *
- * @brief GATT Server Application Task event processor. This function
- * is called to process all events for the task. Events include
- * timers, messages and any other user defined events.
- *
- * @param task_id - The OSAL assigned task ID.
- * @param events - events to process. This is a bit map and can
- * contain more than one event.
- *
- * @return none
- */
- extern uint16 GATTServApp_ProcessEvent( uint8 taskId, uint16 events );
- bStatus_t gattServApp_RegisterCB(gattServMsgCB_t cb);
- /*********************************************************************
- *********************************************************************/
- #ifdef __cplusplus
- }
- #endif
- #endif /* GATTSERVAPP_H */
|