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:
Wolfgang Betz
Date:
Thu Jul 23 14:48:36 2015 +0200
Revision:
93:728699ac5613
Parent:
92:709d44dc869a
Parent:
77:332b416123b4
Child:
94:2993df23d1ac
Merge branch 'master' of hg::http://wobetz@developer.mbed.org/teams/ST-Expansion-SW-Team/code/X_NUCLEO_IDB0XA1 into idb0xa1-split

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++) {
Wolfgang Betz 92:709d44dc869a 107 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
Andrea Palmieri 77:332b416123b4 206 uint8_t Appearance[2] = {0, 0};
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
Andrea Palmieri 77:332b416123b4 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 /*!
Andrea Palmieri 77:332b416123b4 416 @brief Disconnects if we are connected to a central device
Andrea Palmieri 77:332b416123b4 417
Andrea Palmieri 77:332b416123b4 418 @param[in] reason
Andrea Palmieri 77:332b416123b4 419 Disconnection Reason
Andrea Palmieri 77:332b416123b4 420
Andrea Palmieri 77:332b416123b4 421 @returns ble_error_t
Andrea Palmieri 77:332b416123b4 422
Andrea Palmieri 77:332b416123b4 423 @retval BLE_ERROR_NONE
Andrea Palmieri 77:332b416123b4 424 Everything executed properly
Andrea Palmieri 77:332b416123b4 425
Andrea Palmieri 77:332b416123b4 426 @section EXAMPLE
Andrea Palmieri 77:332b416123b4 427
Andrea Palmieri 77:332b416123b4 428 @code
Andrea Palmieri 77:332b416123b4 429
Andrea Palmieri 77:332b416123b4 430 @endcode
Andrea Palmieri 77:332b416123b4 431 */
Andrea Palmieri 77:332b416123b4 432 /**************************************************************************/
Andrea Palmieri 77:332b416123b4 433 ble_error_t BlueNRGGap::disconnect(Handle_t connectionHandle, Gap::DisconnectionReason_t reason)
Andrea Palmieri 77:332b416123b4 434 {
Andrea Palmieri 77:332b416123b4 435 tBleStatus ret;
Andrea Palmieri 77:332b416123b4 436 //For Reason codes check BlueTooth HCI Spec
Andrea Palmieri 77:332b416123b4 437
Andrea Palmieri 77:332b416123b4 438 if(connectionHandle != BLE_CONN_HANDLE_INVALID) {
Andrea Palmieri 77:332b416123b4 439 ret = aci_gap_terminate(connectionHandle, 0x16);//0x16 Connection Terminated by Local Host.
Andrea Palmieri 77:332b416123b4 440
Andrea Palmieri 77:332b416123b4 441 if (ret != BLE_STATUS_SUCCESS){
Andrea Palmieri 77:332b416123b4 442 DEBUG("Error in GAP termination!!\n\r") ;
Andrea Palmieri 77:332b416123b4 443 return BLE_ERROR_PARAM_OUT_OF_RANGE ; //Not correct Error Value
Andrea Palmieri 77:332b416123b4 444 //FIXME: Define Error values equivalent to BlueNRG Error Codes.
Andrea Palmieri 77:332b416123b4 445 }
Andrea Palmieri 77:332b416123b4 446
Andrea Palmieri 77:332b416123b4 447 //DEBUG("Disconnected from localhost!!\n\r") ;
Andrea Palmieri 77:332b416123b4 448 m_connectionHandle = BLE_CONN_HANDLE_INVALID;
Andrea Palmieri 77:332b416123b4 449 }
Andrea Palmieri 77:332b416123b4 450
Andrea Palmieri 77:332b416123b4 451 return BLE_ERROR_NONE;
Andrea Palmieri 77:332b416123b4 452 }
Andrea Palmieri 77:332b416123b4 453
Andrea Palmieri 77:332b416123b4 454 /**************************************************************************/
Andrea Palmieri 77:332b416123b4 455 /*!
Silvio Lucio Oliva 70:d20d30f59b1c 456 @brief Sets the 16-bit connection handle
Silvio Lucio Oliva 70:d20d30f59b1c 457
Silvio Lucio Oliva 70:d20d30f59b1c 458 @param[in] con_handle
Silvio Lucio Oliva 70:d20d30f59b1c 459 Connection Handle which is set in the Gap Instance
Silvio Lucio Oliva 70:d20d30f59b1c 460
Silvio Lucio Oliva 70:d20d30f59b1c 461 @returns void
Silvio Lucio Oliva 70:d20d30f59b1c 462 */
Silvio Lucio Oliva 70:d20d30f59b1c 463 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 464 void BlueNRGGap::setConnectionHandle(uint16_t con_handle)
Silvio Lucio Oliva 70:d20d30f59b1c 465 {
Silvio Lucio Oliva 70:d20d30f59b1c 466 m_connectionHandle = con_handle;
Silvio Lucio Oliva 70:d20d30f59b1c 467 }
Silvio Lucio Oliva 70:d20d30f59b1c 468
Silvio Lucio Oliva 70:d20d30f59b1c 469 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 470 /*!
Silvio Lucio Oliva 70:d20d30f59b1c 471 @brief Gets the 16-bit connection handle
Silvio Lucio Oliva 70:d20d30f59b1c 472
Silvio Lucio Oliva 70:d20d30f59b1c 473 @param[in] void
Silvio Lucio Oliva 70:d20d30f59b1c 474
Silvio Lucio Oliva 70:d20d30f59b1c 475 @returns uint16_t
Silvio Lucio Oliva 70:d20d30f59b1c 476 Connection Handle of the Gap Instance
Silvio Lucio Oliva 70:d20d30f59b1c 477 */
Silvio Lucio Oliva 70:d20d30f59b1c 478 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 479 uint16_t BlueNRGGap::getConnectionHandle(void)
Silvio Lucio Oliva 70:d20d30f59b1c 480 {
Silvio Lucio Oliva 70:d20d30f59b1c 481 return m_connectionHandle;
Silvio Lucio Oliva 70:d20d30f59b1c 482 }
Silvio Lucio Oliva 70:d20d30f59b1c 483
Silvio Lucio Oliva 70:d20d30f59b1c 484 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 485 /*!
Silvio Lucio Oliva 70:d20d30f59b1c 486 @brief Sets the BLE device address. SetAddress will reset the BLE
Silvio Lucio Oliva 70:d20d30f59b1c 487 device and re-initialize BTLE. Will not start advertising.
Silvio Lucio Oliva 70:d20d30f59b1c 488
Silvio Lucio Oliva 70:d20d30f59b1c 489 @param[in] type
Silvio Lucio Oliva 70:d20d30f59b1c 490 Type of Address
Silvio Lucio Oliva 70:d20d30f59b1c 491
Silvio Lucio Oliva 70:d20d30f59b1c 492 @param[in] address[6]
Silvio Lucio Oliva 70:d20d30f59b1c 493 Value of the Address to be set
Silvio Lucio Oliva 70:d20d30f59b1c 494
Silvio Lucio Oliva 70:d20d30f59b1c 495 @returns ble_error_t
Silvio Lucio Oliva 70:d20d30f59b1c 496
Silvio Lucio Oliva 70:d20d30f59b1c 497 @section EXAMPLE
Silvio Lucio Oliva 70:d20d30f59b1c 498
Silvio Lucio Oliva 70:d20d30f59b1c 499 @code
Silvio Lucio Oliva 70:d20d30f59b1c 500
Silvio Lucio Oliva 70:d20d30f59b1c 501 @endcode
Silvio Lucio Oliva 70:d20d30f59b1c 502 */
Silvio Lucio Oliva 70:d20d30f59b1c 503 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 504 ble_error_t BlueNRGGap::setAddress(addr_type_t type, const Address_t address)
Silvio Lucio Oliva 70:d20d30f59b1c 505 {
Andrea Palmieri 77:332b416123b4 506 //tBleStatus ret;
Silvio Lucio Oliva 70:d20d30f59b1c 507
Silvio Lucio Oliva 70:d20d30f59b1c 508 if (type > ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE) {
Silvio Lucio Oliva 70:d20d30f59b1c 509 return BLE_ERROR_PARAM_OUT_OF_RANGE;
Silvio Lucio Oliva 70:d20d30f59b1c 510 }
Silvio Lucio Oliva 70:d20d30f59b1c 511
Silvio Lucio Oliva 70:d20d30f59b1c 512 //copy address to bdAddr[6]
Silvio Lucio Oliva 70:d20d30f59b1c 513 for(int i=0; i<BDADDR_SIZE; i++) {
Silvio Lucio Oliva 70:d20d30f59b1c 514 bdaddr[i] = address[i];
Silvio Lucio Oliva 70:d20d30f59b1c 515 //DEBUG("i[%d]:0x%x\n\r",i,bdaddr[i]);
Silvio Lucio Oliva 70:d20d30f59b1c 516 }
Silvio Lucio Oliva 70:d20d30f59b1c 517
Silvio Lucio Oliva 70:d20d30f59b1c 518 if(!isSetAddress) isSetAddress = true;
Silvio Lucio Oliva 70:d20d30f59b1c 519
Silvio Lucio Oliva 70:d20d30f59b1c 520 //Re-Init the BTLE Device with SetAddress as true
Silvio Lucio Oliva 70:d20d30f59b1c 521 //if(BlueNRGDevice::getIsInitialized())//Re-init only initialization is already done
Silvio Lucio Oliva 70:d20d30f59b1c 522 // ANDREA
Silvio Lucio Oliva 70:d20d30f59b1c 523 //btle_init(isSetAddress, D11, D12, D3);
Silvio Lucio Oliva 70:d20d30f59b1c 524
Silvio Lucio Oliva 70:d20d30f59b1c 525 //if (ret==BLE_STATUS_SUCCESS)
Silvio Lucio Oliva 70:d20d30f59b1c 526 return BLE_ERROR_NONE;
Silvio Lucio Oliva 70:d20d30f59b1c 527 }
Silvio Lucio Oliva 70:d20d30f59b1c 528
Silvio Lucio Oliva 70:d20d30f59b1c 529 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 530 /*!
Silvio Lucio Oliva 70:d20d30f59b1c 531 @brief Returns boolean if the address of the device has been set
Silvio Lucio Oliva 70:d20d30f59b1c 532 or not
Silvio Lucio Oliva 70:d20d30f59b1c 533
Silvio Lucio Oliva 70:d20d30f59b1c 534 @returns bool
Silvio Lucio Oliva 70:d20d30f59b1c 535
Silvio Lucio Oliva 70:d20d30f59b1c 536 @section EXAMPLE
Silvio Lucio Oliva 70:d20d30f59b1c 537
Silvio Lucio Oliva 70:d20d30f59b1c 538 @code
Silvio Lucio Oliva 70:d20d30f59b1c 539
Silvio Lucio Oliva 70:d20d30f59b1c 540 @endcode
Silvio Lucio Oliva 70:d20d30f59b1c 541 */
Silvio Lucio Oliva 70:d20d30f59b1c 542 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 543 bool BlueNRGGap::getIsSetAddress()
Silvio Lucio Oliva 70:d20d30f59b1c 544 {
Silvio Lucio Oliva 70:d20d30f59b1c 545 return isSetAddress;
Silvio Lucio Oliva 70:d20d30f59b1c 546 }
Silvio Lucio Oliva 70:d20d30f59b1c 547
Silvio Lucio Oliva 70:d20d30f59b1c 548 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 549 /*!
Silvio Lucio Oliva 70:d20d30f59b1c 550 @brief Returns the address of the device if set
Silvio Lucio Oliva 70:d20d30f59b1c 551
Silvio Lucio Oliva 70:d20d30f59b1c 552 @returns Pointer to the address if Address is set else NULL
Silvio Lucio Oliva 70:d20d30f59b1c 553
Silvio Lucio Oliva 70:d20d30f59b1c 554 @section EXAMPLE
Silvio Lucio Oliva 70:d20d30f59b1c 555
Silvio Lucio Oliva 70:d20d30f59b1c 556 @code
Silvio Lucio Oliva 70:d20d30f59b1c 557
Silvio Lucio Oliva 70:d20d30f59b1c 558 @endcode
Silvio Lucio Oliva 70:d20d30f59b1c 559 */
Silvio Lucio Oliva 70:d20d30f59b1c 560 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 561 ble_error_t BlueNRGGap::getAddress(AddressType_t *typeP, Address_t address)
Silvio Lucio Oliva 70:d20d30f59b1c 562 {
Silvio Lucio Oliva 70:d20d30f59b1c 563 *typeP = Gap::ADDR_TYPE_PUBLIC;
Silvio Lucio Oliva 70:d20d30f59b1c 564
Silvio Lucio Oliva 70:d20d30f59b1c 565 if(isSetAddress)
Silvio Lucio Oliva 70:d20d30f59b1c 566 {
Silvio Lucio Oliva 70:d20d30f59b1c 567 for(int i=0; i<BDADDR_SIZE; i++) {
Silvio Lucio Oliva 70:d20d30f59b1c 568 address[i] = bdaddr[i];
Silvio Lucio Oliva 70:d20d30f59b1c 569 //DEBUG("i[%d]:0x%x\n\r",i,bdaddr[i]);
Silvio Lucio Oliva 70:d20d30f59b1c 570 }
Silvio Lucio Oliva 70:d20d30f59b1c 571 }
Silvio Lucio Oliva 70:d20d30f59b1c 572
Silvio Lucio Oliva 70:d20d30f59b1c 573 return BLE_ERROR_NONE;
Silvio Lucio Oliva 70:d20d30f59b1c 574 }
Silvio Lucio Oliva 70:d20d30f59b1c 575
Silvio Lucio Oliva 70:d20d30f59b1c 576 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 577 /*!
Silvio Lucio Oliva 70:d20d30f59b1c 578 @brief obtains preferred connection params
Silvio Lucio Oliva 70:d20d30f59b1c 579
Silvio Lucio Oliva 70:d20d30f59b1c 580 @returns ble_error_t
Silvio Lucio Oliva 70:d20d30f59b1c 581
Silvio Lucio Oliva 70:d20d30f59b1c 582 @section EXAMPLE
Silvio Lucio Oliva 70:d20d30f59b1c 583
Silvio Lucio Oliva 70:d20d30f59b1c 584 @code
Silvio Lucio Oliva 70:d20d30f59b1c 585
Silvio Lucio Oliva 70:d20d30f59b1c 586 @endcode
Silvio Lucio Oliva 70:d20d30f59b1c 587 */
Silvio Lucio Oliva 70:d20d30f59b1c 588 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 589 ble_error_t BlueNRGGap::getPreferredConnectionParams(ConnectionParams_t *params)
Silvio Lucio Oliva 70:d20d30f59b1c 590 {
Silvio Lucio Oliva 70:d20d30f59b1c 591 return BLE_ERROR_NONE;
Silvio Lucio Oliva 70:d20d30f59b1c 592 }
Silvio Lucio Oliva 70:d20d30f59b1c 593
Silvio Lucio Oliva 70:d20d30f59b1c 594
Silvio Lucio Oliva 70:d20d30f59b1c 595 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 596 /*!
Silvio Lucio Oliva 70:d20d30f59b1c 597 @brief sets preferred connection params
Silvio Lucio Oliva 70:d20d30f59b1c 598
Silvio Lucio Oliva 70:d20d30f59b1c 599 @returns ble_error_t
Silvio Lucio Oliva 70:d20d30f59b1c 600
Silvio Lucio Oliva 70:d20d30f59b1c 601 @section EXAMPLE
Silvio Lucio Oliva 70:d20d30f59b1c 602
Silvio Lucio Oliva 70:d20d30f59b1c 603 @code
Silvio Lucio Oliva 70:d20d30f59b1c 604
Silvio Lucio Oliva 70:d20d30f59b1c 605 @endcode
Silvio Lucio Oliva 70:d20d30f59b1c 606 */
Silvio Lucio Oliva 70:d20d30f59b1c 607 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 608 ble_error_t BlueNRGGap::setPreferredConnectionParams(const ConnectionParams_t *params)
Silvio Lucio Oliva 70:d20d30f59b1c 609 {
Silvio Lucio Oliva 70:d20d30f59b1c 610 return BLE_ERROR_NONE;
Silvio Lucio Oliva 70:d20d30f59b1c 611 }
Silvio Lucio Oliva 70:d20d30f59b1c 612
Silvio Lucio Oliva 70:d20d30f59b1c 613 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 614 /*!
Silvio Lucio Oliva 70:d20d30f59b1c 615 @brief updates preferred connection params
Silvio Lucio Oliva 70:d20d30f59b1c 616
Silvio Lucio Oliva 70:d20d30f59b1c 617 @returns ble_error_t
Silvio Lucio Oliva 70:d20d30f59b1c 618
Silvio Lucio Oliva 70:d20d30f59b1c 619 @section EXAMPLE
Silvio Lucio Oliva 70:d20d30f59b1c 620
Silvio Lucio Oliva 70:d20d30f59b1c 621 @code
Silvio Lucio Oliva 70:d20d30f59b1c 622
Silvio Lucio Oliva 70:d20d30f59b1c 623 @endcode
Silvio Lucio Oliva 70:d20d30f59b1c 624 */
Silvio Lucio Oliva 70:d20d30f59b1c 625 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 626 ble_error_t BlueNRGGap::updateConnectionParams(Handle_t handle, const ConnectionParams_t *params)
Silvio Lucio Oliva 70:d20d30f59b1c 627 {
Silvio Lucio Oliva 70:d20d30f59b1c 628 return BLE_ERROR_NONE;
Silvio Lucio Oliva 70:d20d30f59b1c 629 }
Silvio Lucio Oliva 70:d20d30f59b1c 630
Silvio Lucio Oliva 70:d20d30f59b1c 631 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 632 /*!
Silvio Lucio Oliva 70:d20d30f59b1c 633 @brief Sets the Device Name Characteristic
Silvio Lucio Oliva 70:d20d30f59b1c 634
Silvio Lucio Oliva 70:d20d30f59b1c 635 @param[in] deviceName
Silvio Lucio Oliva 70:d20d30f59b1c 636 pointer to device name to be set
Silvio Lucio Oliva 70:d20d30f59b1c 637
Silvio Lucio Oliva 70:d20d30f59b1c 638 @returns ble_error_t
Silvio Lucio Oliva 70:d20d30f59b1c 639
Silvio Lucio Oliva 70:d20d30f59b1c 640 @retval BLE_ERROR_NONE
Silvio Lucio Oliva 70:d20d30f59b1c 641 Everything executed properly
Silvio Lucio Oliva 70:d20d30f59b1c 642
Silvio Lucio Oliva 70:d20d30f59b1c 643 @section EXAMPLE
Silvio Lucio Oliva 70:d20d30f59b1c 644
Silvio Lucio Oliva 70:d20d30f59b1c 645 @code
Silvio Lucio Oliva 70:d20d30f59b1c 646
Silvio Lucio Oliva 70:d20d30f59b1c 647 @endcode
Silvio Lucio Oliva 70:d20d30f59b1c 648 */
Silvio Lucio Oliva 70:d20d30f59b1c 649 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 650 ble_error_t BlueNRGGap::setDeviceName(const uint8_t *deviceName)
Silvio Lucio Oliva 70:d20d30f59b1c 651 {
Silvio Lucio Oliva 70:d20d30f59b1c 652 int ret;
Silvio Lucio Oliva 70:d20d30f59b1c 653 uint8_t nameLen = 0;
Silvio Lucio Oliva 70:d20d30f59b1c 654
Silvio Lucio Oliva 70:d20d30f59b1c 655 DeviceName = (uint8_t *)deviceName;
Silvio Lucio Oliva 70:d20d30f59b1c 656 //DEBUG("SetDeviceName=%s\n\r", DeviceName);
Silvio Lucio Oliva 70:d20d30f59b1c 657
Silvio Lucio Oliva 70:d20d30f59b1c 658 nameLen = strlen((const char*)DeviceName);
Silvio Lucio Oliva 70:d20d30f59b1c 659 //DEBUG("DeviceName Size=%d\n\r", nameLen);
Silvio Lucio Oliva 70:d20d30f59b1c 660
Silvio Lucio Oliva 70:d20d30f59b1c 661 ret = aci_gatt_update_char_value(g_gap_service_handle,
Silvio Lucio Oliva 70:d20d30f59b1c 662 g_device_name_char_handle,
Silvio Lucio Oliva 70:d20d30f59b1c 663 0,
Silvio Lucio Oliva 70:d20d30f59b1c 664 nameLen,
Silvio Lucio Oliva 70:d20d30f59b1c 665 (uint8_t *)DeviceName);
Silvio Lucio Oliva 70:d20d30f59b1c 666
Silvio Lucio Oliva 70:d20d30f59b1c 667 if(ret){
Silvio Lucio Oliva 70:d20d30f59b1c 668 DEBUG("device set name failed\n\r");
Silvio Lucio Oliva 70:d20d30f59b1c 669 return BLE_ERROR_PARAM_OUT_OF_RANGE;//TODO:Wrong error code
Silvio Lucio Oliva 70:d20d30f59b1c 670 }
Silvio Lucio Oliva 70:d20d30f59b1c 671
Silvio Lucio Oliva 70:d20d30f59b1c 672 return BLE_ERROR_NONE;
Silvio Lucio Oliva 70:d20d30f59b1c 673 }
Silvio Lucio Oliva 70:d20d30f59b1c 674
Silvio Lucio Oliva 70:d20d30f59b1c 675 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 676 /*!
Silvio Lucio Oliva 70:d20d30f59b1c 677 @brief Gets the Device Name Characteristic
Silvio Lucio Oliva 70:d20d30f59b1c 678
Silvio Lucio Oliva 70:d20d30f59b1c 679 @param[in] deviceName
Silvio Lucio Oliva 70:d20d30f59b1c 680 pointer to device name
Silvio Lucio Oliva 70:d20d30f59b1c 681
Silvio Lucio Oliva 70:d20d30f59b1c 682 @param[in] lengthP
Silvio Lucio Oliva 70:d20d30f59b1c 683 pointer to device name length
Silvio Lucio Oliva 70:d20d30f59b1c 684
Silvio Lucio Oliva 70:d20d30f59b1c 685 @returns ble_error_t
Silvio Lucio Oliva 70:d20d30f59b1c 686
Silvio Lucio Oliva 70:d20d30f59b1c 687 @retval BLE_ERROR_NONE
Silvio Lucio Oliva 70:d20d30f59b1c 688 Everything executed properly
Silvio Lucio Oliva 70:d20d30f59b1c 689
Silvio Lucio Oliva 70:d20d30f59b1c 690 @section EXAMPLE
Silvio Lucio Oliva 70:d20d30f59b1c 691
Silvio Lucio Oliva 70:d20d30f59b1c 692 @code
Silvio Lucio Oliva 70:d20d30f59b1c 693
Silvio Lucio Oliva 70:d20d30f59b1c 694 @endcode
Silvio Lucio Oliva 70:d20d30f59b1c 695 */
Silvio Lucio Oliva 70:d20d30f59b1c 696 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 697 ble_error_t BlueNRGGap::getDeviceName(uint8_t *deviceName, unsigned *lengthP)
Silvio Lucio Oliva 70:d20d30f59b1c 698 {
Andrea Palmieri 77:332b416123b4 699 //int ret;
Silvio Lucio Oliva 70:d20d30f59b1c 700
Silvio Lucio Oliva 70:d20d30f59b1c 701 if(DeviceName==NULL)
Silvio Lucio Oliva 70:d20d30f59b1c 702 return BLE_ERROR_PARAM_OUT_OF_RANGE;
Silvio Lucio Oliva 70:d20d30f59b1c 703
Silvio Lucio Oliva 70:d20d30f59b1c 704 strcpy((char*)deviceName, (const char*)DeviceName);
Silvio Lucio Oliva 70:d20d30f59b1c 705 //DEBUG("GetDeviceName=%s\n\r", deviceName);
Silvio Lucio Oliva 70:d20d30f59b1c 706
Silvio Lucio Oliva 70:d20d30f59b1c 707 *lengthP = strlen((const char*)DeviceName);
Silvio Lucio Oliva 70:d20d30f59b1c 708 //DEBUG("DeviceName Size=%d\n\r", *lengthP);
Silvio Lucio Oliva 70:d20d30f59b1c 709
Silvio Lucio Oliva 70:d20d30f59b1c 710 return BLE_ERROR_NONE;
Silvio Lucio Oliva 70:d20d30f59b1c 711 }
Silvio Lucio Oliva 70:d20d30f59b1c 712
Silvio Lucio Oliva 70:d20d30f59b1c 713 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 714 /*!
Silvio Lucio Oliva 70:d20d30f59b1c 715 @brief Sets the Device Appearance Characteristic
Silvio Lucio Oliva 70:d20d30f59b1c 716
Silvio Lucio Oliva 70:d20d30f59b1c 717 @param[in] appearance
Silvio Lucio Oliva 70:d20d30f59b1c 718 device appearance
Silvio Lucio Oliva 70:d20d30f59b1c 719
Silvio Lucio Oliva 70:d20d30f59b1c 720 @returns ble_error_t
Silvio Lucio Oliva 70:d20d30f59b1c 721
Silvio Lucio Oliva 70:d20d30f59b1c 722 @retval BLE_ERROR_NONE
Silvio Lucio Oliva 70:d20d30f59b1c 723 Everything executed properly
Silvio Lucio Oliva 70:d20d30f59b1c 724
Silvio Lucio Oliva 70:d20d30f59b1c 725 @section EXAMPLE
Silvio Lucio Oliva 70:d20d30f59b1c 726
Silvio Lucio Oliva 70:d20d30f59b1c 727 @code
Silvio Lucio Oliva 70:d20d30f59b1c 728
Silvio Lucio Oliva 70:d20d30f59b1c 729 @endcode
Silvio Lucio Oliva 70:d20d30f59b1c 730 */
Silvio Lucio Oliva 70:d20d30f59b1c 731 /**************************************************************************/
Andrea Palmieri 77:332b416123b4 732 ble_error_t BlueNRGGap::setAppearance(GapAdvertisingData::Appearance appearance)
Silvio Lucio Oliva 70:d20d30f59b1c 733 {
Silvio Lucio Oliva 70:d20d30f59b1c 734 /*
Silvio Lucio Oliva 70:d20d30f59b1c 735 Tested with GapAdvertisingData::GENERIC_PHONE.
Silvio Lucio Oliva 70:d20d30f59b1c 736 for other appearances BLE Scanner android app is not behaving properly
Silvio Lucio Oliva 70:d20d30f59b1c 737 */
Silvio Lucio Oliva 70:d20d30f59b1c 738 //char deviceAppearance[2];
Silvio Lucio Oliva 70:d20d30f59b1c 739 STORE_LE_16(deviceAppearance, appearance);
Silvio Lucio Oliva 70:d20d30f59b1c 740 DEBUG("input: incoming = %d deviceAppearance= 0x%x 0x%x\n\r", appearance, deviceAppearance[1], deviceAppearance[0]);
Silvio Lucio Oliva 70:d20d30f59b1c 741
Silvio Lucio Oliva 70:d20d30f59b1c 742 aci_gatt_update_char_value(g_gap_service_handle, g_appearance_char_handle, 0, 2, (uint8_t *)deviceAppearance);
Silvio Lucio Oliva 70:d20d30f59b1c 743
Silvio Lucio Oliva 70:d20d30f59b1c 744 return BLE_ERROR_NONE;
Silvio Lucio Oliva 70:d20d30f59b1c 745 }
Silvio Lucio Oliva 70:d20d30f59b1c 746
Silvio Lucio Oliva 70:d20d30f59b1c 747 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 748 /*!
Silvio Lucio Oliva 70:d20d30f59b1c 749 @brief Gets the Device Appearance Characteristic
Silvio Lucio Oliva 70:d20d30f59b1c 750
Silvio Lucio Oliva 70:d20d30f59b1c 751 @param[in] appearance
Silvio Lucio Oliva 70:d20d30f59b1c 752 pointer to device appearance value
Silvio Lucio Oliva 70:d20d30f59b1c 753
Silvio Lucio Oliva 70:d20d30f59b1c 754 @returns ble_error_t
Silvio Lucio Oliva 70:d20d30f59b1c 755
Silvio Lucio Oliva 70:d20d30f59b1c 756 @retval BLE_ERROR_NONE
Silvio Lucio Oliva 70:d20d30f59b1c 757 Everything executed properly
Silvio Lucio Oliva 70:d20d30f59b1c 758
Silvio Lucio Oliva 70:d20d30f59b1c 759 @section EXAMPLE
Silvio Lucio Oliva 70:d20d30f59b1c 760
Silvio Lucio Oliva 70:d20d30f59b1c 761 @code
Silvio Lucio Oliva 70:d20d30f59b1c 762
Silvio Lucio Oliva 70:d20d30f59b1c 763 @endcode
Silvio Lucio Oliva 70:d20d30f59b1c 764 */
Silvio Lucio Oliva 70:d20d30f59b1c 765 /**************************************************************************/
Andrea Palmieri 77:332b416123b4 766 ble_error_t BlueNRGGap::getAppearance(GapAdvertisingData::Appearance *appearanceP)
Silvio Lucio Oliva 70:d20d30f59b1c 767 {
Silvio Lucio Oliva 70:d20d30f59b1c 768 uint16_t devP;
Silvio Lucio Oliva 70:d20d30f59b1c 769 if(!appearanceP) return BLE_ERROR_PARAM_OUT_OF_RANGE;
Silvio Lucio Oliva 70:d20d30f59b1c 770 devP = ((uint16_t)(0x0000|deviceAppearance[0])) | (((uint16_t)(0x0000|deviceAppearance[1]))<<8);
Silvio Lucio Oliva 70:d20d30f59b1c 771 strcpy((char*)appearanceP, (const char*)&devP);
Silvio Lucio Oliva 70:d20d30f59b1c 772
Silvio Lucio Oliva 70:d20d30f59b1c 773 return BLE_ERROR_NONE;
Silvio Lucio Oliva 70:d20d30f59b1c 774 }
Silvio Lucio Oliva 70:d20d30f59b1c 775
Silvio Lucio Oliva 70:d20d30f59b1c 776 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 777 /*!
Silvio Lucio Oliva 70:d20d30f59b1c 778 @brief Gets the value of maximum advertising interval in ms
Silvio Lucio Oliva 70:d20d30f59b1c 779
Silvio Lucio Oliva 70:d20d30f59b1c 780 @returns uint16_t
Silvio Lucio Oliva 70:d20d30f59b1c 781
Silvio Lucio Oliva 70:d20d30f59b1c 782 @retval value of maximum advertising interval in ms
Silvio Lucio Oliva 70:d20d30f59b1c 783
Silvio Lucio Oliva 70:d20d30f59b1c 784 @section EXAMPLE
Silvio Lucio Oliva 70:d20d30f59b1c 785
Silvio Lucio Oliva 70:d20d30f59b1c 786 @code
Silvio Lucio Oliva 70:d20d30f59b1c 787
Silvio Lucio Oliva 70:d20d30f59b1c 788 @endcode
Silvio Lucio Oliva 70:d20d30f59b1c 789 */
Silvio Lucio Oliva 70:d20d30f59b1c 790 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 791 uint16_t BlueNRGGap::getMaxAdvertisingInterval(void) const {
Silvio Lucio Oliva 70:d20d30f59b1c 792 return advtInterval;
Silvio Lucio Oliva 70:d20d30f59b1c 793 }
Silvio Lucio Oliva 70:d20d30f59b1c 794
Silvio Lucio Oliva 70:d20d30f59b1c 795
Silvio Lucio Oliva 70:d20d30f59b1c 796 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 797 /*!
Silvio Lucio Oliva 70:d20d30f59b1c 798 @brief Gets the value of minimum advertising interval in ms
Silvio Lucio Oliva 70:d20d30f59b1c 799
Silvio Lucio Oliva 70:d20d30f59b1c 800 @returns uint16_t
Silvio Lucio Oliva 70:d20d30f59b1c 801
Silvio Lucio Oliva 70:d20d30f59b1c 802 @retval value of minimum advertising interval in ms
Silvio Lucio Oliva 70:d20d30f59b1c 803
Silvio Lucio Oliva 70:d20d30f59b1c 804 @section EXAMPLE
Silvio Lucio Oliva 70:d20d30f59b1c 805
Silvio Lucio Oliva 70:d20d30f59b1c 806 @code
Silvio Lucio Oliva 70:d20d30f59b1c 807
Silvio Lucio Oliva 70:d20d30f59b1c 808 @endcode
Silvio Lucio Oliva 70:d20d30f59b1c 809 */
Silvio Lucio Oliva 70:d20d30f59b1c 810 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 811 uint16_t BlueNRGGap::getMinAdvertisingInterval(void) const {
Silvio Lucio Oliva 70:d20d30f59b1c 812 return 0; // minimum Advertising interval is 0
Silvio Lucio Oliva 70:d20d30f59b1c 813 }
Silvio Lucio Oliva 70:d20d30f59b1c 814
Silvio Lucio Oliva 70:d20d30f59b1c 815 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 816 /*!
Silvio Lucio Oliva 70:d20d30f59b1c 817 @brief Gets the value of minimum non connectable advertising interval in ms
Silvio Lucio Oliva 70:d20d30f59b1c 818
Silvio Lucio Oliva 70:d20d30f59b1c 819 @returns uint16_t
Silvio Lucio Oliva 70:d20d30f59b1c 820
Silvio Lucio Oliva 70:d20d30f59b1c 821 @retval value of minimum non connectable advertising interval in ms
Silvio Lucio Oliva 70:d20d30f59b1c 822
Silvio Lucio Oliva 70:d20d30f59b1c 823 @section EXAMPLE
Silvio Lucio Oliva 70:d20d30f59b1c 824
Silvio Lucio Oliva 70:d20d30f59b1c 825 @code
Silvio Lucio Oliva 70:d20d30f59b1c 826
Silvio Lucio Oliva 70:d20d30f59b1c 827 @endcode
Silvio Lucio Oliva 70:d20d30f59b1c 828 */
Silvio Lucio Oliva 70:d20d30f59b1c 829 /**************************************************************************/
Silvio Lucio Oliva 70:d20d30f59b1c 830 uint16_t BlueNRGGap::getMinNonConnectableAdvertisingInterval(void) const {
Silvio Lucio Oliva 70:d20d30f59b1c 831 return BLE_GAP_ADV_NONCON_INTERVAL_MIN;
Silvio Lucio Oliva 70:d20d30f59b1c 832 }
Silvio Lucio Oliva 70:d20d30f59b1c 833
Silvio Lucio Oliva 70:d20d30f59b1c 834 // ANDREA
Silvio Lucio Oliva 70:d20d30f59b1c 835 ble_error_t BlueNRGGap::startRadioScan(const GapScanningParams &scanningParams) {
Silvio Lucio Oliva 70:d20d30f59b1c 836 // Empty by now
Silvio Lucio Oliva 70:d20d30f59b1c 837 return BLE_ERROR_NONE;
Silvio Lucio Oliva 70:d20d30f59b1c 838 }
Silvio Lucio Oliva 70:d20d30f59b1c 839
Andrea Palmieri 77:332b416123b4 840 ble_error_t BlueNRGGap::stopScan() {
Silvio Lucio Oliva 70:d20d30f59b1c 841 // Empty by now
Silvio Lucio Oliva 70:d20d30f59b1c 842 return BLE_ERROR_NONE;
Silvio Lucio Oliva 70:d20d30f59b1c 843 }
Silvio Lucio Oliva 70:d20d30f59b1c 844
Andrea Palmieri 77:332b416123b4 845 /**************************************************************************/
Andrea Palmieri 77:332b416123b4 846 /*!
Andrea Palmieri 77:332b416123b4 847 @brief set Tx power level
Andrea Palmieri 77:332b416123b4 848 @param[in] txPower Transmission Power level
Andrea Palmieri 77:332b416123b4 849 @returns ble_error_t
Andrea Palmieri 77:332b416123b4 850 */
Andrea Palmieri 77:332b416123b4 851 /**************************************************************************/
Andrea Palmieri 77:332b416123b4 852 ble_error_t BlueNRGGap::setTxPower(int8_t txPower)
Andrea Palmieri 77:332b416123b4 853 {
Andrea Palmieri 77:332b416123b4 854 int8_t enHighPower = 0;
Andrea Palmieri 77:332b416123b4 855 int8_t paLevel = 0;
Andrea Palmieri 77:332b416123b4 856 int8_t dbmActuallySet = getHighPowerAndPALevelValue(txPower, enHighPower, paLevel);
Andrea Palmieri 77:332b416123b4 857 DEBUG("txPower=%d, dbmActuallySet=%d\n\r", txPower, dbmActuallySet);
Andrea Palmieri 77:332b416123b4 858 DEBUG("enHighPower=%d, paLevel=%d\n\r", enHighPower, paLevel);
Andrea Palmieri 77:332b416123b4 859 aci_hal_set_tx_power_level(enHighPower, paLevel);
Andrea Palmieri 77:332b416123b4 860 return BLE_ERROR_NONE;
Silvio Lucio Oliva 70:d20d30f59b1c 861 }
Silvio Lucio Oliva 70:d20d30f59b1c 862
Andrea Palmieri 77:332b416123b4 863 /**************************************************************************/
Andrea Palmieri 77:332b416123b4 864 /*!
Andrea Palmieri 77:332b416123b4 865 @brief get permitted Tx power values
Andrea Palmieri 77:332b416123b4 866 @param[in] values pointer to pointer to permitted power values
Andrea Palmieri 77:332b416123b4 867 @param[in] num number of values
Andrea Palmieri 77:332b416123b4 868 */
Andrea Palmieri 77:332b416123b4 869 /**************************************************************************/
Andrea Palmieri 77:332b416123b4 870 void BlueNRGGap::getPermittedTxPowerValues(const int8_t **valueArrayPP, size_t *countP) {
Andrea Palmieri 77:332b416123b4 871 static const int8_t permittedTxValues[] = {
Andrea Palmieri 77:332b416123b4 872 -18, -14, -11, -8, -4, -1, 1, 5, -15, -11, -8, -5, -2, 1, 4, 8
Andrea Palmieri 77:332b416123b4 873 };
Andrea Palmieri 77:332b416123b4 874
Andrea Palmieri 77:332b416123b4 875 *valueArrayPP = permittedTxValues;
Andrea Palmieri 77:332b416123b4 876 *countP = sizeof(permittedTxValues) / sizeof(int8_t);
Silvio Lucio Oliva 70:d20d30f59b1c 877 }
Andrea Palmieri 77:332b416123b4 878
Wolfgang Betz 92:709d44dc869a 879