123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255 |
-
- /**
- * \file blebrr_gatt.c
- *
- * This File contains the BLE Bearer interface for the GATT bearer over
- * Mindtree Mesh stack.
- */
- /*
- * Copyright (C) 2016. Mindtree Ltd.
- * All rights reserved.
- */
- /* ------------------------------- Header File Inclusion */
- #include "MS_brr_api.h"
- #include "MS_prov_api.h"
- #include "blebrr.h"
- /* --------------------------------------------- External Global Variables */
- /* --------------------------------------------- Global Definitions */
- /* GATT Proxy Segmentation and Reassembly related states */
- #define BLEBRR_GATT_SAR_COMPLETE_PKT 0x00
- #define BLEBRR_GATT_SAR_START_PKT 0x01
- #define BLEBRR_GATT_SAR_CONTINUE_PKT 0x02
- #define BLEBRR_GATT_SAR_END_PKT 0x03
- /* GATT Proxy Segmentation and Reassembly related state values */
- #define BLEBRR_GATT_SAR_INIT_STATE 0x00
- #define BLEBRR_GATT_SAR_TX_PROGRESS 0x01
- /* GATT PDU Size in octets */
- #define BLEBRR_GATT_PDU_SIZE 75
- /* --------------------------------------------- Macros */
- /* --------------------------------------------- Structures/Data Types */
- /* --------------------------------------------- Global Variables */
- /** GATT bearer Information */
- DECL_STATIC BRR_BEARER_INFO blebrr_gatt;
- /* TODO: Check if the MTU be global or part of specific context */
- /** GATT bearer specific identifiers */
- DECL_STATIC BRR_BEARER_CH_INFO blebrr_gatt_ch_info;
- /** GATT Current mode identifier - PROV or PROXY */
- DECL_STATIC UCHAR blebrr_gatt_mode = 0xFF;
- /* ------------------------------- Functions */
- /**
- * \brief
- *
- * \par Description
- *
- *
- * \param flag
- *
- * \return void
- */
- void blebrr_gatt_mode_set(UCHAR flag)
- {
- /**
- * The valid values for 'flag' are:
- * 0x00: BLEBRR_GATT_PROV_MODE GATT Provisioning Mode
- * 0x01: BLEBRR_GATT_PROXY_MODE GATT Proxy Mode
- * All other values are RFU.
- */
- blebrr_gatt_mode = ((flag == BLEBRR_GATT_PROV_MODE) || (flag == BLEBRR_GATT_PROXY_MODE))?
- flag: 0xFF;
- /* Notify GATT mode setting to blebrr pl */
- blebrr_set_gattmode_pl (blebrr_gatt_mode);
- }
- /**
- * \brief
- *
- * \par Description
- *
- * *
- * * \param void
- *
- * \return void
- */
- UCHAR blebrr_gatt_mode_get(void)
- {
- /**
- * The valid return values are:
- * 0x00: BLEBRR_GATT_PROV_MODE GATT Provisioning Mode
- * 0x01: BLEBRR_GATT_PROXY_MODE GATT Proxy Mode
- * All other values are RFU.
- */
- return blebrr_gatt_mode;
- }
- /**
- * \brief
- *
- * \par Description
- *
- *
- * \param handle
- * \param type
- * \param pdata
- * \param datalen
- *
- * \return void
- */
- DECL_STATIC API_RESULT blebrr_gatt_send
- (
- BRR_HANDLE * handle,
- UCHAR type,
- void * pdata,
- UINT16 datalen
- )
- {
- API_RESULT retval;
- MS_IGNORE_UNUSED_PARAM(type);
- retval = blebrr_gatt_send_pl
- (
- handle,
- pdata,
- datalen
- );
- // if (API_SUCCESS != retval)
- // {
- // BLEBRR_LOG("Error - 0x%04X\n", retval);
- // }
- return retval;
- }
- /**
- * \brief
- *
- * \par Description
- *
- *
- * \param handle
- * \param type
- * \param pdata
- * \param pdatalen
- *
- * \return void
- */
- API_RESULT blebrr_pl_recv_gattpacket
- (
- BRR_HANDLE * handle,
- UCHAR * pdata,
- UINT16 pdatalen
- )
- {
- if (NULL != blebrr_gatt.bearer_recv)
- {
- blebrr_gatt.bearer_recv
- (
- handle,
- pdata,
- pdatalen,
- NULL
- );
- }
- return API_SUCCESS;
- }
- /**
- * \brief
- *
- * \par Description
- *
- *
- * \param type
- * \param uuid
- * \param handle
- *
- * \return void
- */
- API_RESULT blebrr_pl_gatt_connection
- (
- BRR_HANDLE * handle,
- UCHAR role,
- UCHAR mode,
- UINT16 mtu
- )
- {
- MS_BUFFER buffer;
- API_RESULT retval;
- /* Initialize */
- retval = API_FAILURE;
- /* Populate the Bearer GATT Channel info */
- blebrr_gatt_ch_info.role = role;
- blebrr_gatt_ch_info.mtu = mtu;
- /* Add bearer to the mesh network */
- blebrr_gatt.bearer_send = blebrr_gatt_send;
- blebrr_gatt.binfo = &buffer;
- buffer.payload = (UCHAR*)&blebrr_gatt_ch_info;
- buffer.length = sizeof(blebrr_gatt_ch_info);
- retval = MS_brr_add_bearer(BRR_TYPE_GATT, &blebrr_gatt, handle);
- /* Check the PDU type received and Add bearer to Mesh stack */
- if (BLEBRR_SERVER_ROLE == role)
- {
- blebrr_pl_advertise_end();
- if (BLEBRR_GATT_PROXY_MODE == mode)
- {
- /* Start observing */
- blebrr_scan_enable();
- }
- }
- else if (BLEBRR_CLIENT_ROLE == role)
- {
- /* Do Nothing */
- /**
- * Currently, not enabling scan for Proxy Client.
- * Typically, Proxy Client supports only GATT Bearer.
- * Hence, not initiating 'SCAN' on Bearer UP event.
- */
- }
- return retval;
- }
- /**
- * \brief
- *
- * \par Description
- *
- *
- * \param type
- * \param handle
- *
- * \return void
- */
- API_RESULT blebrr_pl_gatt_disconnection
- (
- BRR_HANDLE * handle
- )
- {
- API_RESULT retval;
- retval = MS_brr_remove_bearer(BRR_TYPE_GATT, handle);
- return retval;
- }
|