mirror of
https://github.com/jam422470459/EPD-nRF52-hema213.git
synced 2025-12-19 14:53:19 +08:00
move components to SDK dir
This commit is contained in:
263
SDK/12.3.0_d7731ad/components/ble/ble_services/ble_lbs/ble_lbs.c
Normal file
263
SDK/12.3.0_d7731ad/components/ble/ble_services/ble_lbs/ble_lbs.c
Normal file
@@ -0,0 +1,263 @@
|
||||
/**
|
||||
* Copyright (c) 2013 - 2017, Nordic Semiconductor ASA
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||
* list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form, except as embedded into a Nordic
|
||||
* Semiconductor ASA integrated circuit in a product or a software update for
|
||||
* such product, must reproduce the above copyright notice, this list of
|
||||
* conditions and the following disclaimer in the documentation and/or other
|
||||
* materials provided with the distribution.
|
||||
*
|
||||
* 3. Neither the name of Nordic Semiconductor ASA nor the names of its
|
||||
* contributors may be used to endorse or promote products derived from this
|
||||
* software without specific prior written permission.
|
||||
*
|
||||
* 4. This software, with or without modification, must only be used with a
|
||||
* Nordic Semiconductor ASA integrated circuit.
|
||||
*
|
||||
* 5. Any software provided in binary form under this license must not be reverse
|
||||
* engineered, decompiled, modified and/or disassembled.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
|
||||
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
#include "sdk_common.h"
|
||||
#if NRF_MODULE_ENABLED(BLE_LBS)
|
||||
#include "ble_lbs.h"
|
||||
#include "ble_srv_common.h"
|
||||
|
||||
|
||||
/**@brief Function for handling the Connect event.
|
||||
*
|
||||
* @param[in] p_lbs LED Button Service structure.
|
||||
* @param[in] p_ble_evt Event received from the BLE stack.
|
||||
*/
|
||||
static void on_connect(ble_lbs_t * p_lbs, ble_evt_t * p_ble_evt)
|
||||
{
|
||||
p_lbs->conn_handle = p_ble_evt->evt.gap_evt.conn_handle;
|
||||
}
|
||||
|
||||
|
||||
/**@brief Function for handling the Disconnect event.
|
||||
*
|
||||
* @param[in] p_lbs LED Button Service structure.
|
||||
* @param[in] p_ble_evt Event received from the BLE stack.
|
||||
*/
|
||||
static void on_disconnect(ble_lbs_t * p_lbs, ble_evt_t * p_ble_evt)
|
||||
{
|
||||
UNUSED_PARAMETER(p_ble_evt);
|
||||
p_lbs->conn_handle = BLE_CONN_HANDLE_INVALID;
|
||||
}
|
||||
|
||||
|
||||
/**@brief Function for handling the Write event.
|
||||
*
|
||||
* @param[in] p_lbs LED Button Service structure.
|
||||
* @param[in] p_ble_evt Event received from the BLE stack.
|
||||
*/
|
||||
static void on_write(ble_lbs_t * p_lbs, ble_evt_t * p_ble_evt)
|
||||
{
|
||||
ble_gatts_evt_write_t * p_evt_write = &p_ble_evt->evt.gatts_evt.params.write;
|
||||
|
||||
if ((p_evt_write->handle == p_lbs->led_char_handles.value_handle) &&
|
||||
(p_evt_write->len == 1) &&
|
||||
(p_lbs->led_write_handler != NULL))
|
||||
{
|
||||
p_lbs->led_write_handler(p_lbs, p_evt_write->data[0]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void ble_lbs_on_ble_evt(ble_lbs_t * p_lbs, ble_evt_t * p_ble_evt)
|
||||
{
|
||||
switch (p_ble_evt->header.evt_id)
|
||||
{
|
||||
case BLE_GAP_EVT_CONNECTED:
|
||||
on_connect(p_lbs, p_ble_evt);
|
||||
break;
|
||||
|
||||
case BLE_GAP_EVT_DISCONNECTED:
|
||||
on_disconnect(p_lbs, p_ble_evt);
|
||||
break;
|
||||
|
||||
case BLE_GATTS_EVT_WRITE:
|
||||
on_write(p_lbs, p_ble_evt);
|
||||
break;
|
||||
|
||||
default:
|
||||
// No implementation needed.
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**@brief Function for adding the LED Characteristic.
|
||||
*
|
||||
* @param[in] p_lbs LED Button Service structure.
|
||||
* @param[in] p_lbs_init LED Button Service initialization structure.
|
||||
*
|
||||
* @retval NRF_SUCCESS on success, else an error value from the SoftDevice
|
||||
*/
|
||||
static uint32_t led_char_add(ble_lbs_t * p_lbs, const ble_lbs_init_t * p_lbs_init)
|
||||
{
|
||||
ble_gatts_char_md_t char_md;
|
||||
ble_gatts_attr_t attr_char_value;
|
||||
ble_uuid_t ble_uuid;
|
||||
ble_gatts_attr_md_t attr_md;
|
||||
|
||||
memset(&char_md, 0, sizeof(char_md));
|
||||
|
||||
char_md.char_props.read = 1;
|
||||
char_md.char_props.write = 1;
|
||||
char_md.p_char_user_desc = NULL;
|
||||
char_md.p_char_pf = NULL;
|
||||
char_md.p_user_desc_md = NULL;
|
||||
char_md.p_cccd_md = NULL;
|
||||
char_md.p_sccd_md = NULL;
|
||||
|
||||
ble_uuid.type = p_lbs->uuid_type;
|
||||
ble_uuid.uuid = LBS_UUID_LED_CHAR;
|
||||
|
||||
memset(&attr_md, 0, sizeof(attr_md));
|
||||
|
||||
BLE_GAP_CONN_SEC_MODE_SET_OPEN(&attr_md.read_perm);
|
||||
BLE_GAP_CONN_SEC_MODE_SET_OPEN(&attr_md.write_perm);
|
||||
attr_md.vloc = BLE_GATTS_VLOC_STACK;
|
||||
attr_md.rd_auth = 0;
|
||||
attr_md.wr_auth = 0;
|
||||
attr_md.vlen = 0;
|
||||
|
||||
memset(&attr_char_value, 0, sizeof(attr_char_value));
|
||||
|
||||
attr_char_value.p_uuid = &ble_uuid;
|
||||
attr_char_value.p_attr_md = &attr_md;
|
||||
attr_char_value.init_len = sizeof(uint8_t);
|
||||
attr_char_value.init_offs = 0;
|
||||
attr_char_value.max_len = sizeof(uint8_t);
|
||||
attr_char_value.p_value = NULL;
|
||||
|
||||
return sd_ble_gatts_characteristic_add(p_lbs->service_handle,
|
||||
&char_md,
|
||||
&attr_char_value,
|
||||
&p_lbs->led_char_handles);
|
||||
}
|
||||
|
||||
|
||||
/**@brief Function for adding the Button Characteristic.
|
||||
*
|
||||
* @param[in] p_lbs LED Button Service structure.
|
||||
* @param[in] p_lbs_init LED Button Service initialization structure.
|
||||
*
|
||||
* @retval NRF_SUCCESS on success, else an error value from the SoftDevice
|
||||
*/
|
||||
static uint32_t button_char_add(ble_lbs_t * p_lbs, const ble_lbs_init_t * p_lbs_init)
|
||||
{
|
||||
ble_gatts_char_md_t char_md;
|
||||
ble_gatts_attr_md_t cccd_md;
|
||||
ble_gatts_attr_t attr_char_value;
|
||||
ble_uuid_t ble_uuid;
|
||||
ble_gatts_attr_md_t attr_md;
|
||||
|
||||
memset(&cccd_md, 0, sizeof(cccd_md));
|
||||
|
||||
BLE_GAP_CONN_SEC_MODE_SET_OPEN(&cccd_md.read_perm);
|
||||
BLE_GAP_CONN_SEC_MODE_SET_OPEN(&cccd_md.write_perm);
|
||||
cccd_md.vloc = BLE_GATTS_VLOC_STACK;
|
||||
|
||||
memset(&char_md, 0, sizeof(char_md));
|
||||
|
||||
char_md.char_props.read = 1;
|
||||
char_md.char_props.notify = 1;
|
||||
char_md.p_char_user_desc = NULL;
|
||||
char_md.p_char_pf = NULL;
|
||||
char_md.p_user_desc_md = NULL;
|
||||
char_md.p_cccd_md = &cccd_md;
|
||||
char_md.p_sccd_md = NULL;
|
||||
|
||||
ble_uuid.type = p_lbs->uuid_type;
|
||||
ble_uuid.uuid = LBS_UUID_BUTTON_CHAR;
|
||||
|
||||
memset(&attr_md, 0, sizeof(attr_md));
|
||||
|
||||
BLE_GAP_CONN_SEC_MODE_SET_OPEN(&attr_md.read_perm);
|
||||
BLE_GAP_CONN_SEC_MODE_SET_NO_ACCESS(&attr_md.write_perm);
|
||||
attr_md.vloc = BLE_GATTS_VLOC_STACK;
|
||||
attr_md.rd_auth = 0;
|
||||
attr_md.wr_auth = 0;
|
||||
attr_md.vlen = 0;
|
||||
|
||||
memset(&attr_char_value, 0, sizeof(attr_char_value));
|
||||
|
||||
attr_char_value.p_uuid = &ble_uuid;
|
||||
attr_char_value.p_attr_md = &attr_md;
|
||||
attr_char_value.init_len = sizeof(uint8_t);
|
||||
attr_char_value.init_offs = 0;
|
||||
attr_char_value.max_len = sizeof(uint8_t);
|
||||
attr_char_value.p_value = NULL;
|
||||
|
||||
return sd_ble_gatts_characteristic_add(p_lbs->service_handle,
|
||||
&char_md,
|
||||
&attr_char_value,
|
||||
&p_lbs->button_char_handles);
|
||||
}
|
||||
|
||||
uint32_t ble_lbs_init(ble_lbs_t * p_lbs, const ble_lbs_init_t * p_lbs_init)
|
||||
{
|
||||
uint32_t err_code;
|
||||
ble_uuid_t ble_uuid;
|
||||
|
||||
// Initialize service structure.
|
||||
p_lbs->conn_handle = BLE_CONN_HANDLE_INVALID;
|
||||
p_lbs->led_write_handler = p_lbs_init->led_write_handler;
|
||||
|
||||
// Add service.
|
||||
ble_uuid128_t base_uuid = {LBS_UUID_BASE};
|
||||
err_code = sd_ble_uuid_vs_add(&base_uuid, &p_lbs->uuid_type);
|
||||
VERIFY_SUCCESS(err_code);
|
||||
|
||||
ble_uuid.type = p_lbs->uuid_type;
|
||||
ble_uuid.uuid = LBS_UUID_SERVICE;
|
||||
|
||||
err_code = sd_ble_gatts_service_add(BLE_GATTS_SRVC_TYPE_PRIMARY, &ble_uuid, &p_lbs->service_handle);
|
||||
VERIFY_SUCCESS(err_code);
|
||||
|
||||
// Add characteristics.
|
||||
err_code = button_char_add(p_lbs, p_lbs_init);
|
||||
VERIFY_SUCCESS(err_code);
|
||||
|
||||
err_code = led_char_add(p_lbs, p_lbs_init);
|
||||
VERIFY_SUCCESS(err_code);
|
||||
|
||||
return NRF_SUCCESS;
|
||||
}
|
||||
|
||||
uint32_t ble_lbs_on_button_change(ble_lbs_t * p_lbs, uint8_t button_state)
|
||||
{
|
||||
ble_gatts_hvx_params_t params;
|
||||
uint16_t len = sizeof(button_state);
|
||||
|
||||
memset(¶ms, 0, sizeof(params));
|
||||
params.type = BLE_GATT_HVX_NOTIFICATION;
|
||||
params.handle = p_lbs->button_char_handles.value_handle;
|
||||
params.p_data = &button_state;
|
||||
params.p_len = &len;
|
||||
|
||||
return sd_ble_gatts_hvx(p_lbs->conn_handle, ¶ms);
|
||||
}
|
||||
#endif // NRF_MODULE_ENABLED(BLE_LBS)
|
||||
141
SDK/12.3.0_d7731ad/components/ble/ble_services/ble_lbs/ble_lbs.h
Normal file
141
SDK/12.3.0_d7731ad/components/ble/ble_services/ble_lbs/ble_lbs.h
Normal file
@@ -0,0 +1,141 @@
|
||||
/**
|
||||
* Copyright (c) 2015 - 2017, Nordic Semiconductor ASA
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||
* list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form, except as embedded into a Nordic
|
||||
* Semiconductor ASA integrated circuit in a product or a software update for
|
||||
* such product, must reproduce the above copyright notice, this list of
|
||||
* conditions and the following disclaimer in the documentation and/or other
|
||||
* materials provided with the distribution.
|
||||
*
|
||||
* 3. Neither the name of Nordic Semiconductor ASA nor the names of its
|
||||
* contributors may be used to endorse or promote products derived from this
|
||||
* software without specific prior written permission.
|
||||
*
|
||||
* 4. This software, with or without modification, must only be used with a
|
||||
* Nordic Semiconductor ASA integrated circuit.
|
||||
*
|
||||
* 5. Any software provided in binary form under this license must not be reverse
|
||||
* engineered, decompiled, modified and/or disassembled.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
|
||||
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
/** @file
|
||||
*
|
||||
* @defgroup ble_lbs LED Button Service Server
|
||||
* @{
|
||||
* @ingroup ble_sdk_srv
|
||||
*
|
||||
* @brief LED Button Service Server module.
|
||||
*
|
||||
* @details This module implements a custom LED Button Service with an LED and Button Characteristics.
|
||||
* During initialization, the module adds the LED Button Service and Characteristics
|
||||
* to the BLE stack database.
|
||||
*
|
||||
* The application must supply an event handler for receiving LED Button Service
|
||||
* events. Using this handler, the service notifies the application when the
|
||||
* LED value changes.
|
||||
*
|
||||
* The service also provides a function for letting the application notify
|
||||
* the state of the Button Characteristic to connected peers.
|
||||
*
|
||||
* @note The application must propagate BLE stack events to the LED Button Service
|
||||
* module by calling ble_lbs_on_ble_evt() from the @ref softdevice_handler callback.
|
||||
*/
|
||||
|
||||
#ifndef BLE_LBS_H__
|
||||
#define BLE_LBS_H__
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include "ble.h"
|
||||
#include "ble_srv_common.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define LBS_UUID_BASE {0x23, 0xD1, 0xBC, 0xEA, 0x5F, 0x78, 0x23, 0x15, \
|
||||
0xDE, 0xEF, 0x12, 0x12, 0x00, 0x00, 0x00, 0x00}
|
||||
#define LBS_UUID_SERVICE 0x1523
|
||||
#define LBS_UUID_BUTTON_CHAR 0x1524
|
||||
#define LBS_UUID_LED_CHAR 0x1525
|
||||
|
||||
// Forward declaration of the ble_lbs_t type.
|
||||
typedef struct ble_lbs_s ble_lbs_t;
|
||||
|
||||
typedef void (*ble_lbs_led_write_handler_t) (ble_lbs_t * p_lbs, uint8_t new_state);
|
||||
|
||||
/** @brief LED Button Service init structure. This structure contains all options and data needed for
|
||||
* initialization of the service.*/
|
||||
typedef struct
|
||||
{
|
||||
ble_lbs_led_write_handler_t led_write_handler; /**< Event handler to be called when the LED Characteristic is written. */
|
||||
} ble_lbs_init_t;
|
||||
|
||||
/**@brief LED Button Service structure. This structure contains various status information for the service. */
|
||||
struct ble_lbs_s
|
||||
{
|
||||
uint16_t service_handle; /**< Handle of LED Button Service (as provided by the BLE stack). */
|
||||
ble_gatts_char_handles_t led_char_handles; /**< Handles related to the LED Characteristic. */
|
||||
ble_gatts_char_handles_t button_char_handles; /**< Handles related to the Button Characteristic. */
|
||||
uint8_t uuid_type; /**< UUID type for the LED Button Service. */
|
||||
uint16_t conn_handle; /**< Handle of the current connection (as provided by the BLE stack). BLE_CONN_HANDLE_INVALID if not in a connection. */
|
||||
ble_lbs_led_write_handler_t led_write_handler; /**< Event handler to be called when the LED Characteristic is written. */
|
||||
};
|
||||
|
||||
/**@brief Function for initializing the LED Button Service.
|
||||
*
|
||||
* @param[out] p_lbs LED Button Service structure. This structure must be supplied by
|
||||
* the application. It is initialized by this function and will later
|
||||
* be used to identify this particular service instance.
|
||||
* @param[in] p_lbs_init Information needed to initialize the service.
|
||||
*
|
||||
* @retval NRF_SUCCESS If the service was initialized successfully. Otherwise, an error code is returned.
|
||||
*/
|
||||
uint32_t ble_lbs_init(ble_lbs_t * p_lbs, const ble_lbs_init_t * p_lbs_init);
|
||||
|
||||
/**@brief Function for handling the application's BLE stack events.
|
||||
*
|
||||
* @details This function handles all events from the BLE stack that are of interest to the LED Button Service.
|
||||
*
|
||||
* @param[in] p_lbs LED Button Service structure.
|
||||
* @param[in] p_ble_evt Event received from the BLE stack.
|
||||
*/
|
||||
void ble_lbs_on_ble_evt(ble_lbs_t * p_lbs, ble_evt_t * p_ble_evt);
|
||||
|
||||
/**@brief Function for sending a button state notification.
|
||||
*
|
||||
* @param[in] p_lbs LED Button Service structure.
|
||||
* @param[in] button_state New button state.
|
||||
*
|
||||
* @retval NRF_SUCCESS If the notification was sent successfully. Otherwise, an error code is returned.
|
||||
*/
|
||||
uint32_t ble_lbs_on_button_change(ble_lbs_t * p_lbs, uint8_t button_state);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // BLE_LBS_H__
|
||||
|
||||
/** @} */
|
||||
Reference in New Issue
Block a user