HW layer for the Nucleo board, it only work with old BLE_API

Dependents:   Hello_BLE F446RE-BLE

Fork of X_NUCLEO_IDB0XA1 by ST

Committer:
Andrea Palmieri
Date:
Tue Jun 09 10:52:16 2015 +0200
Revision:
71:d229db0a153b
Parent:
70:d20d30f59b1c
Child:
77:332b416123b4
Align BLE_API, BLE_BlueNRG and mbed libs

Signed-off-by: Andrea Palmieri <andrea.palmieri@st.com>

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Silvio Lucio Oliva 70:d20d30f59b1c 1 /* mbed Microcontroller Library
Silvio Lucio Oliva 70:d20d30f59b1c 2 * Copyright (c) 2006-2013 ARM Limited
Silvio Lucio Oliva 70:d20d30f59b1c 3 *
Silvio Lucio Oliva 70:d20d30f59b1c 4 * Licensed under the Apache License, Version 2.0 (the "License");
Silvio Lucio Oliva 70:d20d30f59b1c 5 * you may not use this file except in compliance with the License.
Silvio Lucio Oliva 70:d20d30f59b1c 6 * You may obtain a copy of the License at
Silvio Lucio Oliva 70:d20d30f59b1c 7 *
Silvio Lucio Oliva 70:d20d30f59b1c 8 * http://www.apache.org/licenses/LICENSE-2.0
Silvio Lucio Oliva 70:d20d30f59b1c 9 *
Silvio Lucio Oliva 70:d20d30f59b1c 10 * Unless required by applicable law or agreed to in writing, software
Silvio Lucio Oliva 70:d20d30f59b1c 11 * distributed under the License is distributed on an "AS IS" BASIS,
Silvio Lucio Oliva 70:d20d30f59b1c 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Silvio Lucio Oliva 70:d20d30f59b1c 13 * See the License for the specific language governing permissions and
Silvio Lucio Oliva 70:d20d30f59b1c 14 * limitations under the License.
Silvio Lucio Oliva 70:d20d30f59b1c 15 */
Silvio Lucio Oliva 70:d20d30f59b1c 16
Silvio Lucio Oliva 70:d20d30f59b1c 17
Silvio Lucio Oliva 70:d20d30f59b1c 18 /**
Silvio Lucio Oliva 70:d20d30f59b1c 19 ******************************************************************************
Silvio Lucio Oliva 70:d20d30f59b1c 20 * @file BlueNRGGap.cpp
Silvio Lucio Oliva 70:d20d30f59b1c 21 * @author STMicroelectronics
Silvio Lucio Oliva 70:d20d30f59b1c 22 * @brief Implementation of BLE_API Gap Class
Silvio Lucio Oliva 70:d20d30f59b1c 23 ******************************************************************************
Silvio Lucio Oliva 70:d20d30f59b1c 24 * @copy
Silvio Lucio Oliva 70:d20d30f59b1c 25 *
Silvio Lucio Oliva 70:d20d30f59b1c 26 * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
Silvio Lucio Oliva 70:d20d30f59b1c 27 * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
Silvio Lucio Oliva 70:d20d30f59b1c 28 * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
Silvio Lucio Oliva 70:d20d30f59b1c 29 * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
Silvio Lucio Oliva 70:d20d30f59b1c 30 * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
Silvio Lucio Oliva 70:d20d30f59b1c 31 * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
Silvio Lucio Oliva 70:d20d30f59b1c 32 *
Silvio Lucio Oliva 70:d20d30f59b1c 33 * <h2><center>&copy; COPYRIGHT 2013 STMicroelectronics</center></h2>
Silvio Lucio Oliva 70:d20d30f59b1c 34 */
Silvio Lucio Oliva 70:d20d30f59b1c 35
Silvio Lucio Oliva 70:d20d30f59b1c 36 // ANDREA: Changed some types (e.g., tHalUint8 --> uint8_t)
Silvio Lucio Oliva 70:d20d30f59b1c 37
Silvio Lucio Oliva 70:d20d30f59b1c 38 /** @defgroup BlueNRGGap
Silvio Lucio Oliva 70:d20d30f59b1c 39 * @brief BlueNRG BLE_API GAP Adaptation
Silvio Lucio Oliva 70:d20d30f59b1c 40 * @{
Silvio Lucio Oliva 70:d20d30f59b1c 41 */
Silvio Lucio Oliva 70:d20d30f59b1c 42
Silvio Lucio Oliva 70:d20d30f59b1c 43 #include "BlueNRGDevice.h"
Silvio Lucio Oliva 70:d20d30f59b1c 44 #include "mbed.h"
Silvio Lucio Oliva 70:d20d30f59b1c 45 #include "Payload.h"
Silvio Lucio Oliva 70:d20d30f59b1c 46 #include "Utils.h"
Silvio Lucio Oliva 70:d20d30f59b1c 47
Silvio Lucio Oliva 70:d20d30f59b1c 48 //Local Variables
Silvio Lucio Oliva 70:d20d30f59b1c 49 const char *local_name = NULL;
Silvio Lucio Oliva 70:d20d30f59b1c 50 uint8_t local_name_length = 0;
Silvio Lucio Oliva 70:d20d30f59b1c 51 const uint8_t *scan_response_payload = NULL;
Silvio Lucio Oliva 70:d20d30f59b1c 52 uint8_t scan_rsp_length = 0;
Silvio Lucio Oliva 70:d20d30f59b1c 53 uint8_t servUuidlength = 0;
Silvio Lucio Oliva 70:d20d30f59b1c 54 uint8_t* servUuidData = NULL;
Silvio Lucio Oliva 70:d20d30f59b1c 55
Silvio Lucio Oliva 70:d20d30f59b1c 56 uint32_t advtInterval = BLUENRG_GAP_ADV_INTERVAL_MAX;
Silvio Lucio Oliva 70:d20d30f59b1c 57
Silvio Lucio Oliva 70:d20d30f59b1c 58 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 59 /*!
Silvio Lucio Oliva 70:d20d30f59b1c 60 @brief Sets the advertising parameters and payload for the device.
Silvio Lucio Oliva 70:d20d30f59b1c 61 Note: Some data types give error when their adv data is updated using aci_gap_update_adv_data() API
Silvio Lucio Oliva 70:d20d30f59b1c 62
Silvio Lucio Oliva 70:d20d30f59b1c 63 @params[in] advData
Silvio Lucio Oliva 70:d20d30f59b1c 64 The primary advertising data payload
Silvio Lucio Oliva 70:d20d30f59b1c 65 @params[in] scanResponse
Silvio Lucio Oliva 70:d20d30f59b1c 66 The optional Scan Response payload if the advertising
Silvio Lucio Oliva 70:d20d30f59b1c 67 type is set to \ref GapAdvertisingParams::ADV_SCANNABLE_UNDIRECTED
Silvio Lucio Oliva 70:d20d30f59b1c 68 in \ref GapAdveritinngParams
Silvio Lucio Oliva 70:d20d30f59b1c 69
Silvio Lucio Oliva 70:d20d30f59b1c 70 @returns \ref ble_error_t
Silvio Lucio Oliva 70:d20d30f59b1c 71
Silvio Lucio Oliva 70:d20d30f59b1c 72 @retval BLE_ERROR_NONE
Silvio Lucio Oliva 70:d20d30f59b1c 73 Everything executed properly
Silvio Lucio Oliva 70:d20d30f59b1c 74
Silvio Lucio Oliva 70:d20d30f59b1c 75 @retval BLE_ERROR_BUFFER_OVERFLOW
Silvio Lucio Oliva 70:d20d30f59b1c 76 The proposed action would cause a buffer overflow. All
Silvio Lucio Oliva 70:d20d30f59b1c 77 advertising payloads must be <= 31 bytes, for example.
Silvio Lucio Oliva 70:d20d30f59b1c 78
Silvio Lucio Oliva 70:d20d30f59b1c 79 @retval BLE_ERROR_NOT_IMPLEMENTED
Silvio Lucio Oliva 70:d20d30f59b1c 80 A feature was requested that is not yet supported in the
Silvio Lucio Oliva 70:d20d30f59b1c 81 nRF51 firmware or hardware.
Silvio Lucio Oliva 70:d20d30f59b1c 82
Silvio Lucio Oliva 70:d20d30f59b1c 83 @retval BLE_ERROR_PARAM_OUT_OF_RANGE
Silvio Lucio Oliva 70:d20d30f59b1c 84 One of the proposed values is outside the valid range.
Silvio Lucio Oliva 70:d20d30f59b1c 85
Silvio Lucio Oliva 70:d20d30f59b1c 86 @section EXAMPLE
Silvio Lucio Oliva 70:d20d30f59b1c 87
Silvio Lucio Oliva 70:d20d30f59b1c 88 @code
Silvio Lucio Oliva 70:d20d30f59b1c 89
Silvio Lucio Oliva 70:d20d30f59b1c 90 @endcode
Silvio Lucio Oliva 70:d20d30f59b1c 91 */
Silvio Lucio Oliva 70:d20d30f59b1c 92 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 93 ble_error_t BlueNRGGap::setAdvertisingData(const GapAdvertisingData &advData, const GapAdvertisingData &scanResponse)
Silvio Lucio Oliva 70:d20d30f59b1c 94 {
Silvio Lucio Oliva 70:d20d30f59b1c 95 DEBUG("BlueNRGGap::setAdvertisingData\n\r");
Silvio Lucio Oliva 70:d20d30f59b1c 96 /* Make sure we don't exceed the advertising payload length */
Silvio Lucio Oliva 70:d20d30f59b1c 97 if (advData.getPayloadLen() > GAP_ADVERTISING_DATA_MAX_PAYLOAD) {
Silvio Lucio Oliva 70:d20d30f59b1c 98 return BLE_ERROR_BUFFER_OVERFLOW;
Silvio Lucio Oliva 70:d20d30f59b1c 99 }
Silvio Lucio Oliva 70:d20d30f59b1c 100
Silvio Lucio Oliva 70:d20d30f59b1c 101 /* Make sure we have a payload! */
Silvio Lucio Oliva 70:d20d30f59b1c 102 if (advData.getPayloadLen() <= 0) {
Silvio Lucio Oliva 70:d20d30f59b1c 103 return BLE_ERROR_PARAM_OUT_OF_RANGE;
Silvio Lucio Oliva 70:d20d30f59b1c 104 } else {
Silvio Lucio Oliva 70:d20d30f59b1c 105 PayloadPtr loadPtr(advData.getPayload(), advData.getPayloadLen());
Silvio Lucio Oliva 70:d20d30f59b1c 106 for(uint8_t index=0; index<loadPtr.getPayloadUnitCount(); index++) {
Silvio Lucio Oliva 70:d20d30f59b1c 107 PayloadUnit unit = loadPtr.getUnitAtIndex(index);
Silvio Lucio Oliva 70:d20d30f59b1c 108
Silvio Lucio Oliva 70:d20d30f59b1c 109 DEBUG("adData[%d].length=%d\n\r", index,(uint8_t)(*loadPtr.getUnitAtIndex(index).getLenPtr()));
Silvio Lucio Oliva 70:d20d30f59b1c 110 DEBUG("adData[%d].AdType=0x%x\n\r", index,(uint8_t)(*loadPtr.getUnitAtIndex(index).getAdTypePtr()));
Silvio Lucio Oliva 70:d20d30f59b1c 111
Silvio Lucio Oliva 70:d20d30f59b1c 112 switch(*loadPtr.getUnitAtIndex(index).getAdTypePtr()) {
Silvio Lucio Oliva 70:d20d30f59b1c 113 case GapAdvertisingData::FLAGS: /* ref *Flags */
Silvio Lucio Oliva 70:d20d30f59b1c 114 {
Silvio Lucio Oliva 70:d20d30f59b1c 115 //Check if Flags are OK. BlueNRG only supports LE Mode.
Silvio Lucio Oliva 70:d20d30f59b1c 116 uint8_t *flags = loadPtr.getUnitAtIndex(index).getDataPtr();
Silvio Lucio Oliva 70:d20d30f59b1c 117 if((*flags & GapAdvertisingData::BREDR_NOT_SUPPORTED) != GapAdvertisingData::BREDR_NOT_SUPPORTED) {
Silvio Lucio Oliva 70:d20d30f59b1c 118 DEBUG("BlueNRG does not support BR/EDR Mode");
Silvio Lucio Oliva 70:d20d30f59b1c 119 return BLE_ERROR_PARAM_OUT_OF_RANGE;
Silvio Lucio Oliva 70:d20d30f59b1c 120 }
Silvio Lucio Oliva 70:d20d30f59b1c 121
Silvio Lucio Oliva 70:d20d30f59b1c 122 break;
Silvio Lucio Oliva 70:d20d30f59b1c 123 }
Silvio Lucio Oliva 70:d20d30f59b1c 124 case GapAdvertisingData::INCOMPLETE_LIST_16BIT_SERVICE_IDS: /**< Incomplete list of 16-bit Service IDs */
Silvio Lucio Oliva 70:d20d30f59b1c 125 {
Silvio Lucio Oliva 70:d20d30f59b1c 126 break;
Silvio Lucio Oliva 70:d20d30f59b1c 127 }
Silvio Lucio Oliva 70:d20d30f59b1c 128 case GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS: /**< Complete list of 16-bit Service IDs */
Silvio Lucio Oliva 70:d20d30f59b1c 129 {
Silvio Lucio Oliva 70:d20d30f59b1c 130 DEBUG("Advertising type: COMPLETE_LIST_16BIT_SERVICE_IDS\n\r");
Silvio Lucio Oliva 70:d20d30f59b1c 131 DEBUG("Advertising type: COMPLETE_LIST_16BIT_SERVICE_IDS\n");
Silvio Lucio Oliva 70:d20d30f59b1c 132 #if 0
Silvio Lucio Oliva 70:d20d30f59b1c 133 int err = aci_gap_update_adv_data(*loadPtr.getUnitAtIndex(index).getLenPtr(), loadPtr.getUnitAtIndex(index).getAdTypePtr());
Silvio Lucio Oliva 70:d20d30f59b1c 134 if(BLE_STATUS_SUCCESS!=err) {
Silvio Lucio Oliva 70:d20d30f59b1c 135 DEBUG("error occurred while adding adv data\n");
Silvio Lucio Oliva 70:d20d30f59b1c 136 return BLE_ERROR_PARAM_OUT_OF_RANGE; // no other suitable error code is available
Silvio Lucio Oliva 70:d20d30f59b1c 137 }
Silvio Lucio Oliva 70:d20d30f59b1c 138 #endif
Silvio Lucio Oliva 70:d20d30f59b1c 139 break;
Silvio Lucio Oliva 70:d20d30f59b1c 140 }
Silvio Lucio Oliva 70:d20d30f59b1c 141 case GapAdvertisingData::INCOMPLETE_LIST_32BIT_SERVICE_IDS: /**< Incomplete list of 32-bit Service IDs (not relevant for Bluetooth 4.0) */
Silvio Lucio Oliva 70:d20d30f59b1c 142 {
Silvio Lucio Oliva 70:d20d30f59b1c 143 break;
Silvio Lucio Oliva 70:d20d30f59b1c 144 }
Silvio Lucio Oliva 70:d20d30f59b1c 145 case GapAdvertisingData::COMPLETE_LIST_32BIT_SERVICE_IDS: /**< Complete list of 32-bit Service IDs (not relevant for Bluetooth 4.0) */
Silvio Lucio Oliva 70:d20d30f59b1c 146 {
Silvio Lucio Oliva 70:d20d30f59b1c 147 break;
Silvio Lucio Oliva 70:d20d30f59b1c 148 }
Silvio Lucio Oliva 70:d20d30f59b1c 149 case GapAdvertisingData::INCOMPLETE_LIST_128BIT_SERVICE_IDS: /**< Incomplete list of 128-bit Service IDs */
Silvio Lucio Oliva 70:d20d30f59b1c 150 {
Silvio Lucio Oliva 70:d20d30f59b1c 151 break;
Silvio Lucio Oliva 70:d20d30f59b1c 152 }
Silvio Lucio Oliva 70:d20d30f59b1c 153 case GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS: /**< Complete list of 128-bit Service IDs */
Silvio Lucio Oliva 70:d20d30f59b1c 154 {
Silvio Lucio Oliva 70:d20d30f59b1c 155 break;
Silvio Lucio Oliva 70:d20d30f59b1c 156 }
Silvio Lucio Oliva 70:d20d30f59b1c 157 case GapAdvertisingData::SHORTENED_LOCAL_NAME: /**< Shortened Local Name */
Silvio Lucio Oliva 70:d20d30f59b1c 158 {
Silvio Lucio Oliva 70:d20d30f59b1c 159 break;
Silvio Lucio Oliva 70:d20d30f59b1c 160 }
Silvio Lucio Oliva 70:d20d30f59b1c 161 case GapAdvertisingData::COMPLETE_LOCAL_NAME: /**< Complete Local Name */
Silvio Lucio Oliva 70:d20d30f59b1c 162 {
Silvio Lucio Oliva 70:d20d30f59b1c 163 DEBUG("Advertising type: COMPLETE_LOCAL_NAME\n\r");
Silvio Lucio Oliva 70:d20d30f59b1c 164 loadPtr.getUnitAtIndex(index).printDataAsString();
Silvio Lucio Oliva 70:d20d30f59b1c 165 local_name_length = *loadPtr.getUnitAtIndex(index).getLenPtr()-1;
Silvio Lucio Oliva 70:d20d30f59b1c 166 local_name = (const char*)loadPtr.getUnitAtIndex(index).getAdTypePtr();
Silvio Lucio Oliva 70:d20d30f59b1c 167 //COMPLETE_LOCAL_NAME is only advertising device name. Gatt Device Name is not the same.(Must be set right after GAP/GATT init?)
Silvio Lucio Oliva 70:d20d30f59b1c 168
Silvio Lucio Oliva 70:d20d30f59b1c 169 DEBUG("device_name length=%d\n\r", local_name_length);
Silvio Lucio Oliva 70:d20d30f59b1c 170 break;
Silvio Lucio Oliva 70:d20d30f59b1c 171 }
Silvio Lucio Oliva 70:d20d30f59b1c 172 case GapAdvertisingData::TX_POWER_LEVEL: /**< TX Power Level (in dBm) */
Silvio Lucio Oliva 70:d20d30f59b1c 173 {
Silvio Lucio Oliva 70:d20d30f59b1c 174 DEBUG("Advertising type: TX_POWER_LEVEL\n\r");
Silvio Lucio Oliva 70:d20d30f59b1c 175 int8_t dbm = *loadPtr.getUnitAtIndex(index).getDataPtr();
Silvio Lucio Oliva 70:d20d30f59b1c 176 int8_t enHighPower = 0;
Silvio Lucio Oliva 70:d20d30f59b1c 177 int8_t paLevel = 0;
Silvio Lucio Oliva 70:d20d30f59b1c 178 int8_t dbmActuallySet = getHighPowerAndPALevelValue(dbm, enHighPower, paLevel);
Silvio Lucio Oliva 70:d20d30f59b1c 179 DEBUG("dbm=%d, dbmActuallySet=%d\n\r", dbm, dbmActuallySet);
Silvio Lucio Oliva 70:d20d30f59b1c 180 DEBUG("enHighPower=%d, paLevel=%d\n\r", enHighPower, paLevel);
Silvio Lucio Oliva 70:d20d30f59b1c 181 aci_hal_set_tx_power_level(enHighPower, paLevel);
Silvio Lucio Oliva 70:d20d30f59b1c 182 break;
Silvio Lucio Oliva 70:d20d30f59b1c 183 }
Silvio Lucio Oliva 70:d20d30f59b1c 184 case GapAdvertisingData::DEVICE_ID: /**< Device ID */
Silvio Lucio Oliva 70:d20d30f59b1c 185 {
Silvio Lucio Oliva 70:d20d30f59b1c 186 break;
Silvio Lucio Oliva 70:d20d30f59b1c 187 }
Silvio Lucio Oliva 70:d20d30f59b1c 188 case GapAdvertisingData::SLAVE_CONNECTION_INTERVAL_RANGE: /**< Slave :Connection Interval Range */
Silvio Lucio Oliva 70:d20d30f59b1c 189 {
Silvio Lucio Oliva 70:d20d30f59b1c 190 break;
Silvio Lucio Oliva 70:d20d30f59b1c 191 }
Silvio Lucio Oliva 70:d20d30f59b1c 192 case GapAdvertisingData::SERVICE_DATA: /**< Service Data */
Silvio Lucio Oliva 70:d20d30f59b1c 193 {
Silvio Lucio Oliva 70:d20d30f59b1c 194 break;
Silvio Lucio Oliva 70:d20d30f59b1c 195 }
Silvio Lucio Oliva 70:d20d30f59b1c 196 case GapAdvertisingData::APPEARANCE:
Silvio Lucio Oliva 70:d20d30f59b1c 197 {
Silvio Lucio Oliva 70:d20d30f59b1c 198 /*
Silvio Lucio Oliva 70:d20d30f59b1c 199 Tested with GapAdvertisingData::GENERIC_PHONE.
Silvio Lucio Oliva 70:d20d30f59b1c 200 for other appearances BLE Scanner android app is not behaving properly
Silvio Lucio Oliva 70:d20d30f59b1c 201 */
Silvio Lucio Oliva 70:d20d30f59b1c 202 DEBUG("Advertising type: APPEARANCE\n\r");
Silvio Lucio Oliva 70:d20d30f59b1c 203 const char *deviceAppearance = NULL;
Silvio Lucio Oliva 70:d20d30f59b1c 204 deviceAppearance = (const char*)loadPtr.getUnitAtIndex(index).getDataPtr(); // to be set later when startAdvertising() is called
Silvio Lucio Oliva 70:d20d30f59b1c 205
Silvio Lucio Oliva 70:d20d30f59b1c 206 uint8_t Appearance[2];
Silvio Lucio Oliva 70:d20d30f59b1c 207 uint16_t devP = (uint16_t)*deviceAppearance;
Silvio Lucio Oliva 70:d20d30f59b1c 208 STORE_LE_16(Appearance, (uint16_t)devP);
Silvio Lucio Oliva 70:d20d30f59b1c 209
Silvio Lucio Oliva 70:d20d30f59b1c 210 DEBUG("input: deviceAppearance= 0x%x 0x%x..., strlen(deviceAppearance)=%d\n\r", Appearance[1], Appearance[0], (uint8_t)*loadPtr.getUnitAtIndex(index).getLenPtr()-1); /**< \ref Appearance */
Silvio Lucio Oliva 70:d20d30f59b1c 211
Silvio Lucio Oliva 70:d20d30f59b1c 212 aci_gatt_update_char_value(g_gap_service_handle, g_appearance_char_handle, 0, 2, (uint8_t *)deviceAppearance);//not using array Appearance[2]
Silvio Lucio Oliva 70:d20d30f59b1c 213 break;
Silvio Lucio Oliva 70:d20d30f59b1c 214 }
Silvio Lucio Oliva 70:d20d30f59b1c 215 case GapAdvertisingData::ADVERTISING_INTERVAL: /**< Advertising Interval */
Silvio Lucio Oliva 70:d20d30f59b1c 216 {
Silvio Lucio Oliva 70:d20d30f59b1c 217 advtInterval = (uint16_t)(*loadPtr.getUnitAtIndex(index).getDataPtr());
Silvio Lucio Oliva 70:d20d30f59b1c 218 DEBUG("advtInterval=%d\n\r", advtInterval);
Silvio Lucio Oliva 70:d20d30f59b1c 219 break;
Silvio Lucio Oliva 70:d20d30f59b1c 220 }
Silvio Lucio Oliva 70:d20d30f59b1c 221 case GapAdvertisingData::MANUFACTURER_SPECIFIC_DATA: /**< Manufacturer Specific Data */
Silvio Lucio Oliva 70:d20d30f59b1c 222 {
Silvio Lucio Oliva 70:d20d30f59b1c 223 break;
Silvio Lucio Oliva 70:d20d30f59b1c 224 }
Silvio Lucio Oliva 70:d20d30f59b1c 225
Silvio Lucio Oliva 70:d20d30f59b1c 226 }
Silvio Lucio Oliva 70:d20d30f59b1c 227 }
Silvio Lucio Oliva 70:d20d30f59b1c 228 //Set the SCAN_RSP Payload
Silvio Lucio Oliva 70:d20d30f59b1c 229 scan_response_payload = scanResponse.getPayload();
Silvio Lucio Oliva 70:d20d30f59b1c 230 scan_rsp_length = scanResponse.getPayloadLen();
Silvio Lucio Oliva 70:d20d30f59b1c 231 }
Silvio Lucio Oliva 70:d20d30f59b1c 232 return BLE_ERROR_NONE;
Silvio Lucio Oliva 70:d20d30f59b1c 233 }
Silvio Lucio Oliva 70:d20d30f59b1c 234
Silvio Lucio Oliva 70:d20d30f59b1c 235 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 236 /*!
Silvio Lucio Oliva 70:d20d30f59b1c 237 @brief Starts the BLE HW, initialising any services that were
Silvio Lucio Oliva 70:d20d30f59b1c 238 added before this function was called.
Silvio Lucio Oliva 70:d20d30f59b1c 239
Silvio Lucio Oliva 70:d20d30f59b1c 240 @param[in] params
Silvio Lucio Oliva 70:d20d30f59b1c 241 Basic advertising details, including the advertising
Silvio Lucio Oliva 70:d20d30f59b1c 242 delay, timeout and how the device should be advertised
Silvio Lucio Oliva 70:d20d30f59b1c 243
Silvio Lucio Oliva 70:d20d30f59b1c 244 @note All services must be added before calling this function!
Silvio Lucio Oliva 70:d20d30f59b1c 245
Silvio Lucio Oliva 70:d20d30f59b1c 246 @returns ble_error_t
Silvio Lucio Oliva 70:d20d30f59b1c 247
Silvio Lucio Oliva 70:d20d30f59b1c 248 @retval BLE_ERROR_NONE
Silvio Lucio Oliva 70:d20d30f59b1c 249 Everything executed properly
Silvio Lucio Oliva 70:d20d30f59b1c 250
Silvio Lucio Oliva 70:d20d30f59b1c 251 @section EXAMPLE
Silvio Lucio Oliva 70:d20d30f59b1c 252
Silvio Lucio Oliva 70:d20d30f59b1c 253 @code
Silvio Lucio Oliva 70:d20d30f59b1c 254
Silvio Lucio Oliva 70:d20d30f59b1c 255 @endcode
Silvio Lucio Oliva 70:d20d30f59b1c 256 */
Silvio Lucio Oliva 70:d20d30f59b1c 257 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 258 ble_error_t BlueNRGGap::startAdvertising(const GapAdvertisingParams &params)
Silvio Lucio Oliva 70:d20d30f59b1c 259 {
Silvio Lucio Oliva 70:d20d30f59b1c 260 /* Make sure we support the advertising type */
Silvio Lucio Oliva 70:d20d30f59b1c 261 if (params.getAdvertisingType() == GapAdvertisingParams::ADV_CONNECTABLE_DIRECTED) {
Silvio Lucio Oliva 70:d20d30f59b1c 262 /* ToDo: This requires a propery security implementation, etc. */
Silvio Lucio Oliva 70:d20d30f59b1c 263 return BLE_ERROR_NOT_IMPLEMENTED;
Silvio Lucio Oliva 70:d20d30f59b1c 264 }
Silvio Lucio Oliva 70:d20d30f59b1c 265
Silvio Lucio Oliva 70:d20d30f59b1c 266 /* Check interval range */
Silvio Lucio Oliva 70:d20d30f59b1c 267 if (params.getAdvertisingType() == GapAdvertisingParams::ADV_NON_CONNECTABLE_UNDIRECTED) {
Silvio Lucio Oliva 70:d20d30f59b1c 268 /* Min delay is slightly longer for unconnectable devices */
Silvio Lucio Oliva 70:d20d30f59b1c 269 if ((params.getInterval() < GapAdvertisingParams::GAP_ADV_PARAMS_INTERVAL_MIN_NONCON) ||
Silvio Lucio Oliva 70:d20d30f59b1c 270 (params.getInterval() > GapAdvertisingParams::GAP_ADV_PARAMS_INTERVAL_MAX)) {
Silvio Lucio Oliva 70:d20d30f59b1c 271 return BLE_ERROR_PARAM_OUT_OF_RANGE;
Silvio Lucio Oliva 70:d20d30f59b1c 272 }
Silvio Lucio Oliva 70:d20d30f59b1c 273 } else {
Silvio Lucio Oliva 70:d20d30f59b1c 274 if ((params.getInterval() < GapAdvertisingParams::GAP_ADV_PARAMS_INTERVAL_MIN) ||
Silvio Lucio Oliva 70:d20d30f59b1c 275 (params.getInterval() > GapAdvertisingParams::GAP_ADV_PARAMS_INTERVAL_MAX)) {
Silvio Lucio Oliva 70:d20d30f59b1c 276 return BLE_ERROR_PARAM_OUT_OF_RANGE;
Silvio Lucio Oliva 70:d20d30f59b1c 277 }
Silvio Lucio Oliva 70:d20d30f59b1c 278 }
Silvio Lucio Oliva 70:d20d30f59b1c 279
Silvio Lucio Oliva 70:d20d30f59b1c 280 /* Check timeout is zero for Connectable Directed */
Silvio Lucio Oliva 70:d20d30f59b1c 281 if ((params.getAdvertisingType() == GapAdvertisingParams::ADV_CONNECTABLE_DIRECTED) && (params.getTimeout() != 0)) {
Silvio Lucio Oliva 70:d20d30f59b1c 282 /* Timeout must be 0 with this type, although we'll never get here */
Silvio Lucio Oliva 70:d20d30f59b1c 283 /* since this isn't implemented yet anyway */
Silvio Lucio Oliva 70:d20d30f59b1c 284 return BLE_ERROR_PARAM_OUT_OF_RANGE;
Silvio Lucio Oliva 70:d20d30f59b1c 285 }
Silvio Lucio Oliva 70:d20d30f59b1c 286
Silvio Lucio Oliva 70:d20d30f59b1c 287 /* Check timeout for other advertising types */
Silvio Lucio Oliva 70:d20d30f59b1c 288 if ((params.getAdvertisingType() != GapAdvertisingParams::ADV_CONNECTABLE_DIRECTED) &&
Silvio Lucio Oliva 70:d20d30f59b1c 289 (params.getTimeout() > GapAdvertisingParams::GAP_ADV_PARAMS_TIMEOUT_MAX)) {
Silvio Lucio Oliva 70:d20d30f59b1c 290 return BLE_ERROR_PARAM_OUT_OF_RANGE;
Silvio Lucio Oliva 70:d20d30f59b1c 291 }
Silvio Lucio Oliva 70:d20d30f59b1c 292
Silvio Lucio Oliva 70:d20d30f59b1c 293 tBleStatus ret;
Andrea Palmieri 71:d229db0a153b 294 //const LongUUIDBytes_t HRM_SERVICE_UUID_128 = {0x18, 0x0D};
Silvio Lucio Oliva 70:d20d30f59b1c 295 /* set scan response data */
Silvio Lucio Oliva 70:d20d30f59b1c 296 hci_le_set_scan_resp_data(scan_rsp_length, scan_response_payload); /*int hci_le_set_scan_resp_data(uint8_t length, const uint8_t data[]);*/
Silvio Lucio Oliva 70:d20d30f59b1c 297
Silvio Lucio Oliva 70:d20d30f59b1c 298 /*aci_gap_set_discoverable(Advertising_Event_Type, Adv_min_intvl, Adv_Max_Intvl, Addr_Type, Adv_Filter_Policy,
Silvio Lucio Oliva 70:d20d30f59b1c 299 Local_Name_Length, local_name, service_uuid_length, service_uuid_list, Slave_conn_intvl_min, Slave_conn_intvl_max);*/
Silvio Lucio Oliva 70:d20d30f59b1c 300 /*LINK_LAYER.H DESCRIBES THE ADVERTISING TYPES*/
Silvio Lucio Oliva 70:d20d30f59b1c 301
Silvio Lucio Oliva 70:d20d30f59b1c 302 char* name = NULL;
Silvio Lucio Oliva 70:d20d30f59b1c 303 uint8_t nameLen = 0;
Silvio Lucio Oliva 70:d20d30f59b1c 304 if(local_name!=NULL) {
Silvio Lucio Oliva 70:d20d30f59b1c 305 name = (char*)local_name;
Silvio Lucio Oliva 70:d20d30f59b1c 306 DEBUG("name=%s\n\r", name);
Silvio Lucio Oliva 70:d20d30f59b1c 307 nameLen = local_name_length;
Silvio Lucio Oliva 70:d20d30f59b1c 308 } else {
Silvio Lucio Oliva 70:d20d30f59b1c 309 char str[] = "ST_BLE_DEV";
Silvio Lucio Oliva 70:d20d30f59b1c 310 name = new char[strlen(str)+1];
Silvio Lucio Oliva 70:d20d30f59b1c 311 name[0] = AD_TYPE_COMPLETE_LOCAL_NAME;
Silvio Lucio Oliva 70:d20d30f59b1c 312 strcpy(name+1, str);
Silvio Lucio Oliva 70:d20d30f59b1c 313 nameLen = strlen(name);
Silvio Lucio Oliva 70:d20d30f59b1c 314 DEBUG("nameLen=%d\n\r", nameLen);
Silvio Lucio Oliva 70:d20d30f59b1c 315 DEBUG("name=%s\n\r", name);
Silvio Lucio Oliva 70:d20d30f59b1c 316 }
Silvio Lucio Oliva 70:d20d30f59b1c 317
Silvio Lucio Oliva 70:d20d30f59b1c 318
Silvio Lucio Oliva 70:d20d30f59b1c 319 advtInterval = params.getInterval(); // set advtInterval in case it is not already set by user application
Silvio Lucio Oliva 70:d20d30f59b1c 320 ret = aci_gap_set_discoverable(params.getAdvertisingType(), // Advertising_Event_Type
Silvio Lucio Oliva 70:d20d30f59b1c 321 BLUENRG_GAP_ADV_INTERVAL_MIN, // Adv_Interval_Min
Silvio Lucio Oliva 70:d20d30f59b1c 322 advtInterval, // Adv_Interval_Max
Silvio Lucio Oliva 70:d20d30f59b1c 323 PUBLIC_ADDR, // Address_Type
Silvio Lucio Oliva 70:d20d30f59b1c 324 NO_WHITE_LIST_USE, // Adv_Filter_Policy
Silvio Lucio Oliva 70:d20d30f59b1c 325 nameLen, //local_name_length, // Local_Name_Length
Silvio Lucio Oliva 70:d20d30f59b1c 326 (const char*)name, //local_name, // Local_Name
Silvio Lucio Oliva 70:d20d30f59b1c 327 servUuidlength, //Service_Uuid_Length
Silvio Lucio Oliva 70:d20d30f59b1c 328 servUuidData, //Service_Uuid_List
Silvio Lucio Oliva 70:d20d30f59b1c 329 0, // Slave_Conn_Interval_Min
Silvio Lucio Oliva 70:d20d30f59b1c 330 0); // Slave_Conn_Interval_Max
Silvio Lucio Oliva 70:d20d30f59b1c 331
Silvio Lucio Oliva 70:d20d30f59b1c 332 state.advertising = 1;
Silvio Lucio Oliva 70:d20d30f59b1c 333
Silvio Lucio Oliva 70:d20d30f59b1c 334 return BLE_ERROR_NONE;
Silvio Lucio Oliva 70:d20d30f59b1c 335 }
Silvio Lucio Oliva 70:d20d30f59b1c 336
Silvio Lucio Oliva 70:d20d30f59b1c 337 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 338 /*!
Silvio Lucio Oliva 70:d20d30f59b1c 339 @brief Stops the BLE HW and disconnects from any devices
Silvio Lucio Oliva 70:d20d30f59b1c 340
Silvio Lucio Oliva 70:d20d30f59b1c 341 @returns ble_error_t
Silvio Lucio Oliva 70:d20d30f59b1c 342
Silvio Lucio Oliva 70:d20d30f59b1c 343 @retval BLE_ERROR_NONE
Silvio Lucio Oliva 70:d20d30f59b1c 344 Everything executed properly
Silvio Lucio Oliva 70:d20d30f59b1c 345
Silvio Lucio Oliva 70:d20d30f59b1c 346 @section EXAMPLE
Silvio Lucio Oliva 70:d20d30f59b1c 347
Silvio Lucio Oliva 70:d20d30f59b1c 348 @code
Silvio Lucio Oliva 70:d20d30f59b1c 349
Silvio Lucio Oliva 70:d20d30f59b1c 350 @endcode
Silvio Lucio Oliva 70:d20d30f59b1c 351 */
Silvio Lucio Oliva 70:d20d30f59b1c 352 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 353 ble_error_t BlueNRGGap::stopAdvertising(void)
Silvio Lucio Oliva 70:d20d30f59b1c 354 {
Silvio Lucio Oliva 70:d20d30f59b1c 355 tBleStatus ret;
Silvio Lucio Oliva 70:d20d30f59b1c 356
Silvio Lucio Oliva 70:d20d30f59b1c 357 if(state.advertising == 1) {
Silvio Lucio Oliva 70:d20d30f59b1c 358 //Set non-discoverable to stop advertising
Silvio Lucio Oliva 70:d20d30f59b1c 359 ret = aci_gap_set_non_discoverable();
Silvio Lucio Oliva 70:d20d30f59b1c 360
Silvio Lucio Oliva 70:d20d30f59b1c 361 if (ret != BLE_STATUS_SUCCESS){
Silvio Lucio Oliva 70:d20d30f59b1c 362 DEBUG("Error in stopping advertisement!!\n\r") ;
Silvio Lucio Oliva 70:d20d30f59b1c 363 return BLE_ERROR_PARAM_OUT_OF_RANGE ; //Not correct Error Value
Silvio Lucio Oliva 70:d20d30f59b1c 364 //FIXME: Define Error values equivalent to BlueNRG Error Codes.
Silvio Lucio Oliva 70:d20d30f59b1c 365 }
Silvio Lucio Oliva 70:d20d30f59b1c 366 DEBUG("Advertisement stopped!!\n\r") ;
Silvio Lucio Oliva 70:d20d30f59b1c 367 //Set GapState_t::advertising state
Silvio Lucio Oliva 70:d20d30f59b1c 368 state.advertising = 0;
Silvio Lucio Oliva 70:d20d30f59b1c 369 }
Silvio Lucio Oliva 70:d20d30f59b1c 370
Silvio Lucio Oliva 70:d20d30f59b1c 371 return BLE_ERROR_NONE;
Silvio Lucio Oliva 70:d20d30f59b1c 372 }
Silvio Lucio Oliva 70:d20d30f59b1c 373
Silvio Lucio Oliva 70:d20d30f59b1c 374 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 375 /*!
Silvio Lucio Oliva 70:d20d30f59b1c 376 @brief Disconnects if we are connected to a central device
Silvio Lucio Oliva 70:d20d30f59b1c 377
Silvio Lucio Oliva 70:d20d30f59b1c 378 @param[in] reason
Silvio Lucio Oliva 70:d20d30f59b1c 379 Disconnection Reason
Silvio Lucio Oliva 70:d20d30f59b1c 380
Silvio Lucio Oliva 70:d20d30f59b1c 381 @returns ble_error_t
Silvio Lucio Oliva 70:d20d30f59b1c 382
Silvio Lucio Oliva 70:d20d30f59b1c 383 @retval BLE_ERROR_NONE
Silvio Lucio Oliva 70:d20d30f59b1c 384 Everything executed properly
Silvio Lucio Oliva 70:d20d30f59b1c 385
Silvio Lucio Oliva 70:d20d30f59b1c 386 @section EXAMPLE
Silvio Lucio Oliva 70:d20d30f59b1c 387
Silvio Lucio Oliva 70:d20d30f59b1c 388 @code
Silvio Lucio Oliva 70:d20d30f59b1c 389
Silvio Lucio Oliva 70:d20d30f59b1c 390 @endcode
Silvio Lucio Oliva 70:d20d30f59b1c 391 */
Silvio Lucio Oliva 70:d20d30f59b1c 392 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 393 ble_error_t BlueNRGGap::disconnect(Gap::DisconnectionReason_t reason)
Silvio Lucio Oliva 70:d20d30f59b1c 394 {
Silvio Lucio Oliva 70:d20d30f59b1c 395 tBleStatus ret;
Silvio Lucio Oliva 70:d20d30f59b1c 396 //For Reason codes check BlueTooth HCI Spec
Silvio Lucio Oliva 70:d20d30f59b1c 397
Silvio Lucio Oliva 70:d20d30f59b1c 398 if(m_connectionHandle != BLE_CONN_HANDLE_INVALID) {
Silvio Lucio Oliva 70:d20d30f59b1c 399 ret = aci_gap_terminate(m_connectionHandle, 0x16);//0x16 Connection Terminated by Local Host.
Silvio Lucio Oliva 70:d20d30f59b1c 400
Silvio Lucio Oliva 70:d20d30f59b1c 401 if (ret != BLE_STATUS_SUCCESS){
Silvio Lucio Oliva 70:d20d30f59b1c 402 DEBUG("Error in GAP termination!!\n\r") ;
Silvio Lucio Oliva 70:d20d30f59b1c 403 return BLE_ERROR_PARAM_OUT_OF_RANGE ; //Not correct Error Value
Silvio Lucio Oliva 70:d20d30f59b1c 404 //FIXME: Define Error values equivalent to BlueNRG Error Codes.
Silvio Lucio Oliva 70:d20d30f59b1c 405 }
Silvio Lucio Oliva 70:d20d30f59b1c 406
Silvio Lucio Oliva 70:d20d30f59b1c 407 //DEBUG("Disconnected from localhost!!\n\r") ;
Silvio Lucio Oliva 70:d20d30f59b1c 408 m_connectionHandle = BLE_CONN_HANDLE_INVALID;
Silvio Lucio Oliva 70:d20d30f59b1c 409 }
Silvio Lucio Oliva 70:d20d30f59b1c 410
Silvio Lucio Oliva 70:d20d30f59b1c 411 return BLE_ERROR_NONE;
Silvio Lucio Oliva 70:d20d30f59b1c 412 }
Silvio Lucio Oliva 70:d20d30f59b1c 413
Silvio Lucio Oliva 70:d20d30f59b1c 414 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 415 /*!
Silvio Lucio Oliva 70:d20d30f59b1c 416 @brief Sets the 16-bit connection handle
Silvio Lucio Oliva 70:d20d30f59b1c 417
Silvio Lucio Oliva 70:d20d30f59b1c 418 @param[in] con_handle
Silvio Lucio Oliva 70:d20d30f59b1c 419 Connection Handle which is set in the Gap Instance
Silvio Lucio Oliva 70:d20d30f59b1c 420
Silvio Lucio Oliva 70:d20d30f59b1c 421 @returns void
Silvio Lucio Oliva 70:d20d30f59b1c 422 */
Silvio Lucio Oliva 70:d20d30f59b1c 423 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 424 void BlueNRGGap::setConnectionHandle(uint16_t con_handle)
Silvio Lucio Oliva 70:d20d30f59b1c 425 {
Silvio Lucio Oliva 70:d20d30f59b1c 426 m_connectionHandle = con_handle;
Silvio Lucio Oliva 70:d20d30f59b1c 427 }
Silvio Lucio Oliva 70:d20d30f59b1c 428
Silvio Lucio Oliva 70:d20d30f59b1c 429 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 430 /*!
Silvio Lucio Oliva 70:d20d30f59b1c 431 @brief Gets the 16-bit connection handle
Silvio Lucio Oliva 70:d20d30f59b1c 432
Silvio Lucio Oliva 70:d20d30f59b1c 433 @param[in] void
Silvio Lucio Oliva 70:d20d30f59b1c 434
Silvio Lucio Oliva 70:d20d30f59b1c 435 @returns uint16_t
Silvio Lucio Oliva 70:d20d30f59b1c 436 Connection Handle of the Gap Instance
Silvio Lucio Oliva 70:d20d30f59b1c 437 */
Silvio Lucio Oliva 70:d20d30f59b1c 438 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 439 uint16_t BlueNRGGap::getConnectionHandle(void)
Silvio Lucio Oliva 70:d20d30f59b1c 440 {
Silvio Lucio Oliva 70:d20d30f59b1c 441 return m_connectionHandle;
Silvio Lucio Oliva 70:d20d30f59b1c 442 }
Silvio Lucio Oliva 70:d20d30f59b1c 443
Silvio Lucio Oliva 70:d20d30f59b1c 444 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 445 /*!
Silvio Lucio Oliva 70:d20d30f59b1c 446 @brief Sets the BLE device address. SetAddress will reset the BLE
Silvio Lucio Oliva 70:d20d30f59b1c 447 device and re-initialize BTLE. Will not start advertising.
Silvio Lucio Oliva 70:d20d30f59b1c 448
Silvio Lucio Oliva 70:d20d30f59b1c 449 @param[in] type
Silvio Lucio Oliva 70:d20d30f59b1c 450 Type of Address
Silvio Lucio Oliva 70:d20d30f59b1c 451
Silvio Lucio Oliva 70:d20d30f59b1c 452 @param[in] address[6]
Silvio Lucio Oliva 70:d20d30f59b1c 453 Value of the Address to be set
Silvio Lucio Oliva 70:d20d30f59b1c 454
Silvio Lucio Oliva 70:d20d30f59b1c 455 @returns ble_error_t
Silvio Lucio Oliva 70:d20d30f59b1c 456
Silvio Lucio Oliva 70:d20d30f59b1c 457 @section EXAMPLE
Silvio Lucio Oliva 70:d20d30f59b1c 458
Silvio Lucio Oliva 70:d20d30f59b1c 459 @code
Silvio Lucio Oliva 70:d20d30f59b1c 460
Silvio Lucio Oliva 70:d20d30f59b1c 461 @endcode
Silvio Lucio Oliva 70:d20d30f59b1c 462 */
Silvio Lucio Oliva 70:d20d30f59b1c 463 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 464 ble_error_t BlueNRGGap::setAddress(addr_type_t type, const Address_t address)
Silvio Lucio Oliva 70:d20d30f59b1c 465 {
Silvio Lucio Oliva 70:d20d30f59b1c 466 tBleStatus ret;
Silvio Lucio Oliva 70:d20d30f59b1c 467
Silvio Lucio Oliva 70:d20d30f59b1c 468 if (type > ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE) {
Silvio Lucio Oliva 70:d20d30f59b1c 469 return BLE_ERROR_PARAM_OUT_OF_RANGE;
Silvio Lucio Oliva 70:d20d30f59b1c 470 }
Silvio Lucio Oliva 70:d20d30f59b1c 471
Silvio Lucio Oliva 70:d20d30f59b1c 472 //copy address to bdAddr[6]
Silvio Lucio Oliva 70:d20d30f59b1c 473 for(int i=0; i<BDADDR_SIZE; i++) {
Silvio Lucio Oliva 70:d20d30f59b1c 474 bdaddr[i] = address[i];
Silvio Lucio Oliva 70:d20d30f59b1c 475 //DEBUG("i[%d]:0x%x\n\r",i,bdaddr[i]);
Silvio Lucio Oliva 70:d20d30f59b1c 476 }
Silvio Lucio Oliva 70:d20d30f59b1c 477
Silvio Lucio Oliva 70:d20d30f59b1c 478 if(!isSetAddress) isSetAddress = true;
Silvio Lucio Oliva 70:d20d30f59b1c 479
Silvio Lucio Oliva 70:d20d30f59b1c 480 //Re-Init the BTLE Device with SetAddress as true
Silvio Lucio Oliva 70:d20d30f59b1c 481 //if(BlueNRGDevice::getIsInitialized())//Re-init only initialization is already done
Silvio Lucio Oliva 70:d20d30f59b1c 482 // ANDREA
Silvio Lucio Oliva 70:d20d30f59b1c 483 //btle_init(isSetAddress, D11, D12, D3);
Silvio Lucio Oliva 70:d20d30f59b1c 484
Silvio Lucio Oliva 70:d20d30f59b1c 485 //if (ret==BLE_STATUS_SUCCESS)
Silvio Lucio Oliva 70:d20d30f59b1c 486 return BLE_ERROR_NONE;
Silvio Lucio Oliva 70:d20d30f59b1c 487 }
Silvio Lucio Oliva 70:d20d30f59b1c 488
Silvio Lucio Oliva 70:d20d30f59b1c 489 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 490 /*!
Silvio Lucio Oliva 70:d20d30f59b1c 491 @brief Returns boolean if the address of the device has been set
Silvio Lucio Oliva 70:d20d30f59b1c 492 or not
Silvio Lucio Oliva 70:d20d30f59b1c 493
Silvio Lucio Oliva 70:d20d30f59b1c 494 @returns bool
Silvio Lucio Oliva 70:d20d30f59b1c 495
Silvio Lucio Oliva 70:d20d30f59b1c 496 @section EXAMPLE
Silvio Lucio Oliva 70:d20d30f59b1c 497
Silvio Lucio Oliva 70:d20d30f59b1c 498 @code
Silvio Lucio Oliva 70:d20d30f59b1c 499
Silvio Lucio Oliva 70:d20d30f59b1c 500 @endcode
Silvio Lucio Oliva 70:d20d30f59b1c 501 */
Silvio Lucio Oliva 70:d20d30f59b1c 502 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 503 bool BlueNRGGap::getIsSetAddress()
Silvio Lucio Oliva 70:d20d30f59b1c 504 {
Silvio Lucio Oliva 70:d20d30f59b1c 505 return isSetAddress;
Silvio Lucio Oliva 70:d20d30f59b1c 506 }
Silvio Lucio Oliva 70:d20d30f59b1c 507
Silvio Lucio Oliva 70:d20d30f59b1c 508 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 509 /*!
Silvio Lucio Oliva 70:d20d30f59b1c 510 @brief Returns the address of the device if set
Silvio Lucio Oliva 70:d20d30f59b1c 511
Silvio Lucio Oliva 70:d20d30f59b1c 512 @returns Pointer to the address if Address is set else NULL
Silvio Lucio Oliva 70:d20d30f59b1c 513
Silvio Lucio Oliva 70:d20d30f59b1c 514 @section EXAMPLE
Silvio Lucio Oliva 70:d20d30f59b1c 515
Silvio Lucio Oliva 70:d20d30f59b1c 516 @code
Silvio Lucio Oliva 70:d20d30f59b1c 517
Silvio Lucio Oliva 70:d20d30f59b1c 518 @endcode
Silvio Lucio Oliva 70:d20d30f59b1c 519 */
Silvio Lucio Oliva 70:d20d30f59b1c 520 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 521 ble_error_t BlueNRGGap::getAddress(AddressType_t *typeP, Address_t address)
Silvio Lucio Oliva 70:d20d30f59b1c 522 {
Silvio Lucio Oliva 70:d20d30f59b1c 523 *typeP = Gap::ADDR_TYPE_PUBLIC;
Silvio Lucio Oliva 70:d20d30f59b1c 524
Silvio Lucio Oliva 70:d20d30f59b1c 525 if(isSetAddress)
Silvio Lucio Oliva 70:d20d30f59b1c 526 {
Silvio Lucio Oliva 70:d20d30f59b1c 527 for(int i=0; i<BDADDR_SIZE; i++) {
Silvio Lucio Oliva 70:d20d30f59b1c 528 address[i] = bdaddr[i];
Silvio Lucio Oliva 70:d20d30f59b1c 529 //DEBUG("i[%d]:0x%x\n\r",i,bdaddr[i]);
Silvio Lucio Oliva 70:d20d30f59b1c 530 }
Silvio Lucio Oliva 70:d20d30f59b1c 531 }
Silvio Lucio Oliva 70:d20d30f59b1c 532
Silvio Lucio Oliva 70:d20d30f59b1c 533 return BLE_ERROR_NONE;
Silvio Lucio Oliva 70:d20d30f59b1c 534 }
Silvio Lucio Oliva 70:d20d30f59b1c 535
Silvio Lucio Oliva 70:d20d30f59b1c 536 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 537 /*!
Silvio Lucio Oliva 70:d20d30f59b1c 538 @brief obtains preferred connection params
Silvio Lucio Oliva 70:d20d30f59b1c 539
Silvio Lucio Oliva 70:d20d30f59b1c 540 @returns ble_error_t
Silvio Lucio Oliva 70:d20d30f59b1c 541
Silvio Lucio Oliva 70:d20d30f59b1c 542 @section EXAMPLE
Silvio Lucio Oliva 70:d20d30f59b1c 543
Silvio Lucio Oliva 70:d20d30f59b1c 544 @code
Silvio Lucio Oliva 70:d20d30f59b1c 545
Silvio Lucio Oliva 70:d20d30f59b1c 546 @endcode
Silvio Lucio Oliva 70:d20d30f59b1c 547 */
Silvio Lucio Oliva 70:d20d30f59b1c 548 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 549 ble_error_t BlueNRGGap::getPreferredConnectionParams(ConnectionParams_t *params)
Silvio Lucio Oliva 70:d20d30f59b1c 550 {
Silvio Lucio Oliva 70:d20d30f59b1c 551 return BLE_ERROR_NONE;
Silvio Lucio Oliva 70:d20d30f59b1c 552 }
Silvio Lucio Oliva 70:d20d30f59b1c 553
Silvio Lucio Oliva 70:d20d30f59b1c 554
Silvio Lucio Oliva 70:d20d30f59b1c 555 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 556 /*!
Silvio Lucio Oliva 70:d20d30f59b1c 557 @brief sets preferred connection params
Silvio Lucio Oliva 70:d20d30f59b1c 558
Silvio Lucio Oliva 70:d20d30f59b1c 559 @returns ble_error_t
Silvio Lucio Oliva 70:d20d30f59b1c 560
Silvio Lucio Oliva 70:d20d30f59b1c 561 @section EXAMPLE
Silvio Lucio Oliva 70:d20d30f59b1c 562
Silvio Lucio Oliva 70:d20d30f59b1c 563 @code
Silvio Lucio Oliva 70:d20d30f59b1c 564
Silvio Lucio Oliva 70:d20d30f59b1c 565 @endcode
Silvio Lucio Oliva 70:d20d30f59b1c 566 */
Silvio Lucio Oliva 70:d20d30f59b1c 567 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 568 ble_error_t BlueNRGGap::setPreferredConnectionParams(const ConnectionParams_t *params)
Silvio Lucio Oliva 70:d20d30f59b1c 569 {
Silvio Lucio Oliva 70:d20d30f59b1c 570 return BLE_ERROR_NONE;
Silvio Lucio Oliva 70:d20d30f59b1c 571 }
Silvio Lucio Oliva 70:d20d30f59b1c 572
Silvio Lucio Oliva 70:d20d30f59b1c 573 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 574 /*!
Silvio Lucio Oliva 70:d20d30f59b1c 575 @brief updates preferred connection params
Silvio Lucio Oliva 70:d20d30f59b1c 576
Silvio Lucio Oliva 70:d20d30f59b1c 577 @returns ble_error_t
Silvio Lucio Oliva 70:d20d30f59b1c 578
Silvio Lucio Oliva 70:d20d30f59b1c 579 @section EXAMPLE
Silvio Lucio Oliva 70:d20d30f59b1c 580
Silvio Lucio Oliva 70:d20d30f59b1c 581 @code
Silvio Lucio Oliva 70:d20d30f59b1c 582
Silvio Lucio Oliva 70:d20d30f59b1c 583 @endcode
Silvio Lucio Oliva 70:d20d30f59b1c 584 */
Silvio Lucio Oliva 70:d20d30f59b1c 585 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 586 ble_error_t BlueNRGGap::updateConnectionParams(Handle_t handle, const ConnectionParams_t *params)
Silvio Lucio Oliva 70:d20d30f59b1c 587 {
Silvio Lucio Oliva 70:d20d30f59b1c 588 return BLE_ERROR_NONE;
Silvio Lucio Oliva 70:d20d30f59b1c 589 }
Silvio Lucio Oliva 70:d20d30f59b1c 590
Silvio Lucio Oliva 70:d20d30f59b1c 591 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 592 /*!
Silvio Lucio Oliva 70:d20d30f59b1c 593 @brief Sets the Device Name Characteristic
Silvio Lucio Oliva 70:d20d30f59b1c 594
Silvio Lucio Oliva 70:d20d30f59b1c 595 @param[in] deviceName
Silvio Lucio Oliva 70:d20d30f59b1c 596 pointer to device name to be set
Silvio Lucio Oliva 70:d20d30f59b1c 597
Silvio Lucio Oliva 70:d20d30f59b1c 598 @returns ble_error_t
Silvio Lucio Oliva 70:d20d30f59b1c 599
Silvio Lucio Oliva 70:d20d30f59b1c 600 @retval BLE_ERROR_NONE
Silvio Lucio Oliva 70:d20d30f59b1c 601 Everything executed properly
Silvio Lucio Oliva 70:d20d30f59b1c 602
Silvio Lucio Oliva 70:d20d30f59b1c 603 @section EXAMPLE
Silvio Lucio Oliva 70:d20d30f59b1c 604
Silvio Lucio Oliva 70:d20d30f59b1c 605 @code
Silvio Lucio Oliva 70:d20d30f59b1c 606
Silvio Lucio Oliva 70:d20d30f59b1c 607 @endcode
Silvio Lucio Oliva 70:d20d30f59b1c 608 */
Silvio Lucio Oliva 70:d20d30f59b1c 609 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 610 ble_error_t BlueNRGGap::setDeviceName(const uint8_t *deviceName)
Silvio Lucio Oliva 70:d20d30f59b1c 611 {
Silvio Lucio Oliva 70:d20d30f59b1c 612 int ret;
Silvio Lucio Oliva 70:d20d30f59b1c 613 uint8_t nameLen = 0;
Silvio Lucio Oliva 70:d20d30f59b1c 614
Silvio Lucio Oliva 70:d20d30f59b1c 615 DeviceName = (uint8_t *)deviceName;
Silvio Lucio Oliva 70:d20d30f59b1c 616 //DEBUG("SetDeviceName=%s\n\r", DeviceName);
Silvio Lucio Oliva 70:d20d30f59b1c 617
Silvio Lucio Oliva 70:d20d30f59b1c 618 nameLen = strlen((const char*)DeviceName);
Silvio Lucio Oliva 70:d20d30f59b1c 619 //DEBUG("DeviceName Size=%d\n\r", nameLen);
Silvio Lucio Oliva 70:d20d30f59b1c 620
Silvio Lucio Oliva 70:d20d30f59b1c 621 ret = aci_gatt_update_char_value(g_gap_service_handle,
Silvio Lucio Oliva 70:d20d30f59b1c 622 g_device_name_char_handle,
Silvio Lucio Oliva 70:d20d30f59b1c 623 0,
Silvio Lucio Oliva 70:d20d30f59b1c 624 nameLen,
Silvio Lucio Oliva 70:d20d30f59b1c 625 (uint8_t *)DeviceName);
Silvio Lucio Oliva 70:d20d30f59b1c 626
Silvio Lucio Oliva 70:d20d30f59b1c 627 if(ret){
Silvio Lucio Oliva 70:d20d30f59b1c 628 DEBUG("device set name failed\n\r");
Silvio Lucio Oliva 70:d20d30f59b1c 629 return BLE_ERROR_PARAM_OUT_OF_RANGE;//TODO:Wrong error code
Silvio Lucio Oliva 70:d20d30f59b1c 630 }
Silvio Lucio Oliva 70:d20d30f59b1c 631
Silvio Lucio Oliva 70:d20d30f59b1c 632 return BLE_ERROR_NONE;
Silvio Lucio Oliva 70:d20d30f59b1c 633 }
Silvio Lucio Oliva 70:d20d30f59b1c 634
Silvio Lucio Oliva 70:d20d30f59b1c 635 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 636 /*!
Silvio Lucio Oliva 70:d20d30f59b1c 637 @brief Gets the Device Name Characteristic
Silvio Lucio Oliva 70:d20d30f59b1c 638
Silvio Lucio Oliva 70:d20d30f59b1c 639 @param[in] deviceName
Silvio Lucio Oliva 70:d20d30f59b1c 640 pointer to device name
Silvio Lucio Oliva 70:d20d30f59b1c 641
Silvio Lucio Oliva 70:d20d30f59b1c 642 @param[in] lengthP
Silvio Lucio Oliva 70:d20d30f59b1c 643 pointer to device name length
Silvio Lucio Oliva 70:d20d30f59b1c 644
Silvio Lucio Oliva 70:d20d30f59b1c 645 @returns ble_error_t
Silvio Lucio Oliva 70:d20d30f59b1c 646
Silvio Lucio Oliva 70:d20d30f59b1c 647 @retval BLE_ERROR_NONE
Silvio Lucio Oliva 70:d20d30f59b1c 648 Everything executed properly
Silvio Lucio Oliva 70:d20d30f59b1c 649
Silvio Lucio Oliva 70:d20d30f59b1c 650 @section EXAMPLE
Silvio Lucio Oliva 70:d20d30f59b1c 651
Silvio Lucio Oliva 70:d20d30f59b1c 652 @code
Silvio Lucio Oliva 70:d20d30f59b1c 653
Silvio Lucio Oliva 70:d20d30f59b1c 654 @endcode
Silvio Lucio Oliva 70:d20d30f59b1c 655 */
Silvio Lucio Oliva 70:d20d30f59b1c 656 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 657 ble_error_t BlueNRGGap::getDeviceName(uint8_t *deviceName, unsigned *lengthP)
Silvio Lucio Oliva 70:d20d30f59b1c 658 {
Silvio Lucio Oliva 70:d20d30f59b1c 659 int ret;
Silvio Lucio Oliva 70:d20d30f59b1c 660
Silvio Lucio Oliva 70:d20d30f59b1c 661 if(DeviceName==NULL)
Silvio Lucio Oliva 70:d20d30f59b1c 662 return BLE_ERROR_PARAM_OUT_OF_RANGE;
Silvio Lucio Oliva 70:d20d30f59b1c 663
Silvio Lucio Oliva 70:d20d30f59b1c 664 strcpy((char*)deviceName, (const char*)DeviceName);
Silvio Lucio Oliva 70:d20d30f59b1c 665 //DEBUG("GetDeviceName=%s\n\r", deviceName);
Silvio Lucio Oliva 70:d20d30f59b1c 666
Silvio Lucio Oliva 70:d20d30f59b1c 667 *lengthP = strlen((const char*)DeviceName);
Silvio Lucio Oliva 70:d20d30f59b1c 668 //DEBUG("DeviceName Size=%d\n\r", *lengthP);
Silvio Lucio Oliva 70:d20d30f59b1c 669
Silvio Lucio Oliva 70:d20d30f59b1c 670 return BLE_ERROR_NONE;
Silvio Lucio Oliva 70:d20d30f59b1c 671 }
Silvio Lucio Oliva 70:d20d30f59b1c 672
Silvio Lucio Oliva 70:d20d30f59b1c 673 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 674 /*!
Silvio Lucio Oliva 70:d20d30f59b1c 675 @brief Sets the Device Appearance Characteristic
Silvio Lucio Oliva 70:d20d30f59b1c 676
Silvio Lucio Oliva 70:d20d30f59b1c 677 @param[in] appearance
Silvio Lucio Oliva 70:d20d30f59b1c 678 device appearance
Silvio Lucio Oliva 70:d20d30f59b1c 679
Silvio Lucio Oliva 70:d20d30f59b1c 680 @returns ble_error_t
Silvio Lucio Oliva 70:d20d30f59b1c 681
Silvio Lucio Oliva 70:d20d30f59b1c 682 @retval BLE_ERROR_NONE
Silvio Lucio Oliva 70:d20d30f59b1c 683 Everything executed properly
Silvio Lucio Oliva 70:d20d30f59b1c 684
Silvio Lucio Oliva 70:d20d30f59b1c 685 @section EXAMPLE
Silvio Lucio Oliva 70:d20d30f59b1c 686
Silvio Lucio Oliva 70:d20d30f59b1c 687 @code
Silvio Lucio Oliva 70:d20d30f59b1c 688
Silvio Lucio Oliva 70:d20d30f59b1c 689 @endcode
Silvio Lucio Oliva 70:d20d30f59b1c 690 */
Silvio Lucio Oliva 70:d20d30f59b1c 691 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 692 ble_error_t BlueNRGGap::setAppearance(uint16_t appearance)
Silvio Lucio Oliva 70:d20d30f59b1c 693 {
Silvio Lucio Oliva 70:d20d30f59b1c 694 /*
Silvio Lucio Oliva 70:d20d30f59b1c 695 Tested with GapAdvertisingData::GENERIC_PHONE.
Silvio Lucio Oliva 70:d20d30f59b1c 696 for other appearances BLE Scanner android app is not behaving properly
Silvio Lucio Oliva 70:d20d30f59b1c 697 */
Silvio Lucio Oliva 70:d20d30f59b1c 698 //char deviceAppearance[2];
Silvio Lucio Oliva 70:d20d30f59b1c 699 STORE_LE_16(deviceAppearance, appearance);
Silvio Lucio Oliva 70:d20d30f59b1c 700 DEBUG("input: incoming = %d deviceAppearance= 0x%x 0x%x\n\r", appearance, deviceAppearance[1], deviceAppearance[0]);
Silvio Lucio Oliva 70:d20d30f59b1c 701
Silvio Lucio Oliva 70:d20d30f59b1c 702 aci_gatt_update_char_value(g_gap_service_handle, g_appearance_char_handle, 0, 2, (uint8_t *)deviceAppearance);
Silvio Lucio Oliva 70:d20d30f59b1c 703
Silvio Lucio Oliva 70:d20d30f59b1c 704 return BLE_ERROR_NONE;
Silvio Lucio Oliva 70:d20d30f59b1c 705 }
Silvio Lucio Oliva 70:d20d30f59b1c 706
Silvio Lucio Oliva 70:d20d30f59b1c 707 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 708 /*!
Silvio Lucio Oliva 70:d20d30f59b1c 709 @brief Gets the Device Appearance Characteristic
Silvio Lucio Oliva 70:d20d30f59b1c 710
Silvio Lucio Oliva 70:d20d30f59b1c 711 @param[in] appearance
Silvio Lucio Oliva 70:d20d30f59b1c 712 pointer to device appearance value
Silvio Lucio Oliva 70:d20d30f59b1c 713
Silvio Lucio Oliva 70:d20d30f59b1c 714 @returns ble_error_t
Silvio Lucio Oliva 70:d20d30f59b1c 715
Silvio Lucio Oliva 70:d20d30f59b1c 716 @retval BLE_ERROR_NONE
Silvio Lucio Oliva 70:d20d30f59b1c 717 Everything executed properly
Silvio Lucio Oliva 70:d20d30f59b1c 718
Silvio Lucio Oliva 70:d20d30f59b1c 719 @section EXAMPLE
Silvio Lucio Oliva 70:d20d30f59b1c 720
Silvio Lucio Oliva 70:d20d30f59b1c 721 @code
Silvio Lucio Oliva 70:d20d30f59b1c 722
Silvio Lucio Oliva 70:d20d30f59b1c 723 @endcode
Silvio Lucio Oliva 70:d20d30f59b1c 724 */
Silvio Lucio Oliva 70:d20d30f59b1c 725 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 726 ble_error_t BlueNRGGap::getAppearance(uint16_t *appearanceP)
Silvio Lucio Oliva 70:d20d30f59b1c 727 {
Silvio Lucio Oliva 70:d20d30f59b1c 728 uint16_t devP;
Silvio Lucio Oliva 70:d20d30f59b1c 729 if(!appearanceP) return BLE_ERROR_PARAM_OUT_OF_RANGE;
Silvio Lucio Oliva 70:d20d30f59b1c 730 devP = ((uint16_t)(0x0000|deviceAppearance[0])) | (((uint16_t)(0x0000|deviceAppearance[1]))<<8);
Silvio Lucio Oliva 70:d20d30f59b1c 731 strcpy((char*)appearanceP, (const char*)&devP);
Silvio Lucio Oliva 70:d20d30f59b1c 732
Silvio Lucio Oliva 70:d20d30f59b1c 733 return BLE_ERROR_NONE;
Silvio Lucio Oliva 70:d20d30f59b1c 734 }
Silvio Lucio Oliva 70:d20d30f59b1c 735
Silvio Lucio Oliva 70:d20d30f59b1c 736 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 737 /*!
Silvio Lucio Oliva 70:d20d30f59b1c 738 @brief Gets the value of maximum advertising interval in ms
Silvio Lucio Oliva 70:d20d30f59b1c 739
Silvio Lucio Oliva 70:d20d30f59b1c 740 @returns uint16_t
Silvio Lucio Oliva 70:d20d30f59b1c 741
Silvio Lucio Oliva 70:d20d30f59b1c 742 @retval value of maximum advertising interval in ms
Silvio Lucio Oliva 70:d20d30f59b1c 743
Silvio Lucio Oliva 70:d20d30f59b1c 744 @section EXAMPLE
Silvio Lucio Oliva 70:d20d30f59b1c 745
Silvio Lucio Oliva 70:d20d30f59b1c 746 @code
Silvio Lucio Oliva 70:d20d30f59b1c 747
Silvio Lucio Oliva 70:d20d30f59b1c 748 @endcode
Silvio Lucio Oliva 70:d20d30f59b1c 749 */
Silvio Lucio Oliva 70:d20d30f59b1c 750 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 751 uint16_t BlueNRGGap::getMaxAdvertisingInterval(void) const {
Silvio Lucio Oliva 70:d20d30f59b1c 752 return advtInterval;
Silvio Lucio Oliva 70:d20d30f59b1c 753 }
Silvio Lucio Oliva 70:d20d30f59b1c 754
Silvio Lucio Oliva 70:d20d30f59b1c 755
Silvio Lucio Oliva 70:d20d30f59b1c 756 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 757 /*!
Silvio Lucio Oliva 70:d20d30f59b1c 758 @brief Gets the value of minimum advertising interval in ms
Silvio Lucio Oliva 70:d20d30f59b1c 759
Silvio Lucio Oliva 70:d20d30f59b1c 760 @returns uint16_t
Silvio Lucio Oliva 70:d20d30f59b1c 761
Silvio Lucio Oliva 70:d20d30f59b1c 762 @retval value of minimum advertising interval in ms
Silvio Lucio Oliva 70:d20d30f59b1c 763
Silvio Lucio Oliva 70:d20d30f59b1c 764 @section EXAMPLE
Silvio Lucio Oliva 70:d20d30f59b1c 765
Silvio Lucio Oliva 70:d20d30f59b1c 766 @code
Silvio Lucio Oliva 70:d20d30f59b1c 767
Silvio Lucio Oliva 70:d20d30f59b1c 768 @endcode
Silvio Lucio Oliva 70:d20d30f59b1c 769 */
Silvio Lucio Oliva 70:d20d30f59b1c 770 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 771 uint16_t BlueNRGGap::getMinAdvertisingInterval(void) const {
Silvio Lucio Oliva 70:d20d30f59b1c 772 return 0; // minimum Advertising interval is 0
Silvio Lucio Oliva 70:d20d30f59b1c 773 }
Silvio Lucio Oliva 70:d20d30f59b1c 774
Silvio Lucio Oliva 70:d20d30f59b1c 775 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 776 /*!
Silvio Lucio Oliva 70:d20d30f59b1c 777 @brief Gets the value of minimum non connectable advertising interval in ms
Silvio Lucio Oliva 70:d20d30f59b1c 778
Silvio Lucio Oliva 70:d20d30f59b1c 779 @returns uint16_t
Silvio Lucio Oliva 70:d20d30f59b1c 780
Silvio Lucio Oliva 70:d20d30f59b1c 781 @retval value of minimum non connectable advertising interval in ms
Silvio Lucio Oliva 70:d20d30f59b1c 782
Silvio Lucio Oliva 70:d20d30f59b1c 783 @section EXAMPLE
Silvio Lucio Oliva 70:d20d30f59b1c 784
Silvio Lucio Oliva 70:d20d30f59b1c 785 @code
Silvio Lucio Oliva 70:d20d30f59b1c 786
Silvio Lucio Oliva 70:d20d30f59b1c 787 @endcode
Silvio Lucio Oliva 70:d20d30f59b1c 788 */
Silvio Lucio Oliva 70:d20d30f59b1c 789 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 790 uint16_t BlueNRGGap::getMinNonConnectableAdvertisingInterval(void) const {
Silvio Lucio Oliva 70:d20d30f59b1c 791 return BLE_GAP_ADV_NONCON_INTERVAL_MIN;
Silvio Lucio Oliva 70:d20d30f59b1c 792 }
Silvio Lucio Oliva 70:d20d30f59b1c 793
Silvio Lucio Oliva 70:d20d30f59b1c 794 // ANDREA
Silvio Lucio Oliva 70:d20d30f59b1c 795 ble_error_t BlueNRGGap::startRadioScan(const GapScanningParams &scanningParams) {
Silvio Lucio Oliva 70:d20d30f59b1c 796 // Empty by now
Silvio Lucio Oliva 70:d20d30f59b1c 797 return BLE_ERROR_NONE;
Silvio Lucio Oliva 70:d20d30f59b1c 798 }
Silvio Lucio Oliva 70:d20d30f59b1c 799
Silvio Lucio Oliva 70:d20d30f59b1c 800 ble_error_t BlueNRGGap::getLinkSecurity(Gap::Handle_t connectionHandle, Gap::LinkSecurityStatus_t *securityStatusP) {
Silvio Lucio Oliva 70:d20d30f59b1c 801 // Empty by now
Silvio Lucio Oliva 70:d20d30f59b1c 802 return BLE_ERROR_NONE;
Silvio Lucio Oliva 70:d20d30f59b1c 803 }
Silvio Lucio Oliva 70:d20d30f59b1c 804
Silvio Lucio Oliva 70:d20d30f59b1c 805 ble_error_t BlueNRGGap::purgeAllBondingState(void) {
Silvio Lucio Oliva 70:d20d30f59b1c 806 // Empty by now
Silvio Lucio Oliva 70:d20d30f59b1c 807 return BLE_ERROR_NONE;
Silvio Lucio Oliva 70:d20d30f59b1c 808 }
Silvio Lucio Oliva 70:d20d30f59b1c 809
Silvio Lucio Oliva 70:d20d30f59b1c 810 ble_error_t BlueNRGGap::stopScan() {
Silvio Lucio Oliva 70:d20d30f59b1c 811 // Empty by now
Silvio Lucio Oliva 70:d20d30f59b1c 812 return BLE_ERROR_NONE;
Silvio Lucio Oliva 70:d20d30f59b1c 813 }
Silvio Lucio Oliva 70:d20d30f59b1c 814