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:
hemddabral
Date:
Tue Aug 05 06:33:39 2014 +0000
Revision:
12:a5d7db4a1e49
Parent:
11:87ddcfa4fa48
Child:
14:baa7a1464517
support for setting tx power level

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mridup 2:a2b623661316 1 /* mbed Microcontroller Library
mridup 2:a2b623661316 2 * Copyright (c) 2006-2013 ARM Limited
mridup 2:a2b623661316 3 *
mridup 2:a2b623661316 4 * Licensed under the Apache License, Version 2.0 (the "License");
mridup 2:a2b623661316 5 * you may not use this file except in compliance with the License.
mridup 2:a2b623661316 6 * You may obtain a copy of the License at
mridup 2:a2b623661316 7 *
mridup 2:a2b623661316 8 * http://www.apache.org/licenses/LICENSE-2.0
mridup 2:a2b623661316 9 *
mridup 2:a2b623661316 10 * Unless required by applicable law or agreed to in writing, software
mridup 2:a2b623661316 11 * distributed under the License is distributed on an "AS IS" BASIS,
mridup 2:a2b623661316 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
mridup 2:a2b623661316 13 * See the License for the specific language governing permissions and
mridup 2:a2b623661316 14 * limitations under the License.
mridup 2:a2b623661316 15 */
mridup 2:a2b623661316 16
mridup 2:a2b623661316 17 #include "BlueNRGDevice.h"
mridup 2:a2b623661316 18 #include "mbed.h"
hemddabral 10:814262eb0746 19 #include "Payload.h"
hemddabral 12:a5d7db4a1e49 20 #include "Utils.h"
mridup 2:a2b623661316 21
mridup 3:9c4c13795643 22 //Local Variables
hemddabral 10:814262eb0746 23 const char *local_name = NULL;
hemddabral 10:814262eb0746 24 uint8_t local_name_length = 0;
hemddabral 10:814262eb0746 25
hemddabral 10:814262eb0746 26 Serial pc1(USBTX, USBRX); // tx, rx. For obtaining logs on terminal
mridup 2:a2b623661316 27
mridup 2:a2b623661316 28 /**************************************************************************/
mridup 2:a2b623661316 29 /*!
mridup 2:a2b623661316 30 @brief Sets the advertising parameters and payload for the device
mridup 2:a2b623661316 31
mridup 2:a2b623661316 32 @param[in] params
mridup 2:a2b623661316 33 Basic advertising details, including the advertising
mridup 2:a2b623661316 34 delay, timeout and how the device should be advertised
mridup 2:a2b623661316 35 @params[in] advData
mridup 2:a2b623661316 36 The primary advertising data payload
mridup 2:a2b623661316 37 @params[in] scanResponse
mridup 2:a2b623661316 38 The optional Scan Response payload if the advertising
mridup 2:a2b623661316 39 type is set to \ref GapAdvertisingParams::ADV_SCANNABLE_UNDIRECTED
mridup 2:a2b623661316 40 in \ref GapAdveritinngParams
mridup 2:a2b623661316 41
mridup 2:a2b623661316 42 @returns \ref ble_error_t
mridup 2:a2b623661316 43
mridup 2:a2b623661316 44 @retval BLE_ERROR_NONE
mridup 2:a2b623661316 45 Everything executed properly
mridup 2:a2b623661316 46
mridup 2:a2b623661316 47 @retval BLE_ERROR_BUFFER_OVERFLOW
mridup 2:a2b623661316 48 The proposed action would cause a buffer overflow. All
mridup 2:a2b623661316 49 advertising payloads must be <= 31 bytes, for example.
mridup 2:a2b623661316 50
mridup 2:a2b623661316 51 @retval BLE_ERROR_NOT_IMPLEMENTED
mridup 2:a2b623661316 52 A feature was requested that is not yet supported in the
mridup 2:a2b623661316 53 nRF51 firmware or hardware.
mridup 2:a2b623661316 54
mridup 2:a2b623661316 55 @retval BLE_ERROR_PARAM_OUT_OF_RANGE
mridup 2:a2b623661316 56 One of the proposed values is outside the valid range.
mridup 2:a2b623661316 57
mridup 2:a2b623661316 58 @section EXAMPLE
mridup 2:a2b623661316 59
mridup 2:a2b623661316 60 @code
mridup 2:a2b623661316 61
mridup 2:a2b623661316 62 @endcode
mridup 2:a2b623661316 63 */
mridup 2:a2b623661316 64 /**************************************************************************/
mridup 2:a2b623661316 65 ble_error_t BlueNRGGap::setAdvertisingData(const GapAdvertisingData &advData, const GapAdvertisingData &scanResponse)
mridup 2:a2b623661316 66 {
mridup 2:a2b623661316 67 /* Make sure we don't exceed the advertising payload length */
mridup 2:a2b623661316 68 if (advData.getPayloadLen() > GAP_ADVERTISING_DATA_MAX_PAYLOAD) {
mridup 2:a2b623661316 69 return BLE_ERROR_BUFFER_OVERFLOW;
mridup 2:a2b623661316 70 }
mridup 2:a2b623661316 71
mridup 2:a2b623661316 72 /* Make sure we have a payload! */
hemddabral 10:814262eb0746 73 if (advData.getPayloadLen() <= 0) {
mridup 2:a2b623661316 74 return BLE_ERROR_PARAM_OUT_OF_RANGE;
hemddabral 10:814262eb0746 75 } else { //set the advData here in some local variable so that startAdvertising can use it.
hemddabral 10:814262eb0746 76 Payload load(advData.getPayload(), advData.getPayloadLen());
hemddabral 10:814262eb0746 77
hemddabral 10:814262eb0746 78 for(uint8_t index=0; index<load.getPayloadUnitCount(); index++) {
hemddabral 12:a5d7db4a1e49 79 //UnitPayload unitLoad = load.getPayLoadAtIndex(index);
hemddabral 10:814262eb0746 80 switch(load.getIDAtIndex(index)) {
hemddabral 10:814262eb0746 81 case GapAdvertisingData::FLAGS: /* ref *Flags */
hemddabral 10:814262eb0746 82 break;
hemddabral 10:814262eb0746 83 case GapAdvertisingData::INCOMPLETE_LIST_16BIT_SERVICE_IDS: /**< Incomplete list of 16-bit Service IDs */
hemddabral 10:814262eb0746 84 break;
hemddabral 10:814262eb0746 85 case GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS: /**< Complete list of 16-bit Service IDs */
hemddabral 10:814262eb0746 86 break;
hemddabral 10:814262eb0746 87 case GapAdvertisingData::INCOMPLETE_LIST_32BIT_SERVICE_IDS: /**< Incomplete list of 32-bit Service IDs (not relevant for Bluetooth 4.0) */
hemddabral 10:814262eb0746 88 break;
hemddabral 10:814262eb0746 89 case GapAdvertisingData::COMPLETE_LIST_32BIT_SERVICE_IDS: /**< Complete list of 32-bit Service IDs (not relevant for Bluetooth 4.0) */
hemddabral 10:814262eb0746 90 break;
hemddabral 10:814262eb0746 91 case GapAdvertisingData::INCOMPLETE_LIST_128BIT_SERVICE_IDS: /**< Incomplete list of 128-bit Service IDs */
hemddabral 10:814262eb0746 92 break;
hemddabral 10:814262eb0746 93 case GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS: /**< Complete list of 128-bit Service IDs */
hemddabral 10:814262eb0746 94 break;
hemddabral 10:814262eb0746 95 case GapAdvertisingData::SHORTENED_LOCAL_NAME: /**< Shortened Local Name */
hemddabral 10:814262eb0746 96 break;
hemddabral 10:814262eb0746 97 case GapAdvertisingData::COMPLETE_LOCAL_NAME: /**< Complete Local Name */
hemddabral 11:87ddcfa4fa48 98 pc1.printf("Advertising type: COMPLETE_LOCAL_NAME\n");
hemddabral 10:814262eb0746 99 const char *device_name = NULL;
hemddabral 10:814262eb0746 100 device_name = (const char*)load.getDataAtIndex(index); // to be set later when startAdvertising() is called
hemddabral 11:87ddcfa4fa48 101 pc1.printf("input: device_name= %s...\n", device_name);
hemddabral 11:87ddcfa4fa48 102 pc1.printf("input: device_name length= %d...\n", load.getLengthAtIndex(index)-1);
hemddabral 11:87ddcfa4fa48 103 if(device_name != NULL) {
hemddabral 11:87ddcfa4fa48 104 char *namePtr = new char[load.getLengthAtIndex(index)];
hemddabral 10:814262eb0746 105 namePtr[0] = AD_TYPE_COMPLETE_LOCAL_NAME;
hemddabral 11:87ddcfa4fa48 106 strcpy(namePtr+1, device_name);
hemddabral 11:87ddcfa4fa48 107 local_name_length = load.getLengthAtIndex(index)-1;
hemddabral 11:87ddcfa4fa48 108 local_name = (const char*)namePtr;
hemddabral 11:87ddcfa4fa48 109 pc1.printf("setting name to: %s...\n", namePtr+1);
hemddabral 11:87ddcfa4fa48 110 pc1.printf("name string length: %d...\n", local_name_length+1); // This includes 'AD_TYPE_COMPLETE_LOCAL_NAME' byte
hemddabral 10:814262eb0746 111 pc1.printf("device_name length=%d", local_name_length);
hemddabral 10:814262eb0746 112 }
hemddabral 10:814262eb0746 113 break;
hemddabral 10:814262eb0746 114
hemddabral 10:814262eb0746 115 case GapAdvertisingData::TX_POWER_LEVEL: /**< TX Power Level (in dBm) */
hemddabral 12:a5d7db4a1e49 116 pc1.printf("Advertising type: TX_POWER_LEVEL\n");
hemddabral 12:a5d7db4a1e49 117 int8_t dbm = load.getInt8AtIndex(index);
hemddabral 12:a5d7db4a1e49 118 int8_t enHighPower = 0;
hemddabral 12:a5d7db4a1e49 119 int8_t paLevel = 0;
hemddabral 12:a5d7db4a1e49 120 int8_t dbmActuallySet = getHighPowerAndPALevelValue(dbm, enHighPower, paLevel);
hemddabral 12:a5d7db4a1e49 121 pc1.printf("dbm=%d, dbmActuallySet=%d\n", dbm, dbmActuallySet);
hemddabral 12:a5d7db4a1e49 122 pc1.printf("enHighPower=%d, paLevel=%d\n", enHighPower, paLevel);
hemddabral 12:a5d7db4a1e49 123 aci_hal_set_tx_power_level(enHighPower, paLevel);
hemddabral 12:a5d7db4a1e49 124 break;
hemddabral 10:814262eb0746 125 case GapAdvertisingData::DEVICE_ID: /**< Device ID */
hemddabral 10:814262eb0746 126 break;
hemddabral 10:814262eb0746 127 case GapAdvertisingData::SLAVE_CONNECTION_INTERVAL_RANGE: /**< Slave :Connection Interval Range */
hemddabral 10:814262eb0746 128 break;
hemddabral 10:814262eb0746 129 case GapAdvertisingData::SERVICE_DATA: /**< Service Data */
hemddabral 10:814262eb0746 130 break;
hemddabral 10:814262eb0746 131 case GapAdvertisingData::APPEARANCE: /**< \ref Appearance */
hemddabral 10:814262eb0746 132 break;
hemddabral 10:814262eb0746 133 case GapAdvertisingData::ADVERTISING_INTERVAL: /**< Advertising Interval */
hemddabral 10:814262eb0746 134 // taken care of in startAdvertising(params)
hemddabral 10:814262eb0746 135 break;
hemddabral 10:814262eb0746 136 case GapAdvertisingData::MANUFACTURER_SPECIFIC_DATA: /**< Manufacturer Specific Data */
hemddabral 10:814262eb0746 137 break;
hemddabral 10:814262eb0746 138
hemddabral 10:814262eb0746 139 }
mridup 2:a2b623661316 140 }
hemddabral 10:814262eb0746 141 //const uint8_t *payload = advData.getPayload();
mridup 2:a2b623661316 142
mridup 3:9c4c13795643 143 }
mridup 3:9c4c13795643 144
mridup 2:a2b623661316 145 return BLE_ERROR_NONE;
mridup 2:a2b623661316 146 }
mridup 2:a2b623661316 147
mridup 2:a2b623661316 148 /**************************************************************************/
mridup 2:a2b623661316 149 /*!
mridup 2:a2b623661316 150 @brief Starts the BLE HW, initialising any services that were
mridup 2:a2b623661316 151 added before this function was called.
mridup 2:a2b623661316 152
mridup 2:a2b623661316 153 @note All services must be added before calling this function!
mridup 2:a2b623661316 154
mridup 2:a2b623661316 155 @returns ble_error_t
mridup 2:a2b623661316 156
mridup 2:a2b623661316 157 @retval BLE_ERROR_NONE
mridup 2:a2b623661316 158 Everything executed properly
mridup 2:a2b623661316 159
mridup 2:a2b623661316 160 @section EXAMPLE
mridup 2:a2b623661316 161
mridup 2:a2b623661316 162 @code
mridup 2:a2b623661316 163
mridup 2:a2b623661316 164 @endcode
mridup 2:a2b623661316 165 */
mridup 2:a2b623661316 166 /**************************************************************************/
mridup 2:a2b623661316 167 ble_error_t BlueNRGGap::startAdvertising(const GapAdvertisingParams &params)
mridup 2:a2b623661316 168 {
mridup 2:a2b623661316 169 /* Make sure we support the advertising type */
mridup 2:a2b623661316 170 if (params.getAdvertisingType() == GapAdvertisingParams::ADV_CONNECTABLE_DIRECTED) {
mridup 2:a2b623661316 171 /* ToDo: This requires a propery security implementation, etc. */
mridup 2:a2b623661316 172 return BLE_ERROR_NOT_IMPLEMENTED;
mridup 2:a2b623661316 173 }
mridup 2:a2b623661316 174
mridup 2:a2b623661316 175 /* Check interval range */
mridup 2:a2b623661316 176 if (params.getAdvertisingType() == GapAdvertisingParams::ADV_NON_CONNECTABLE_UNDIRECTED) {
mridup 2:a2b623661316 177 /* Min delay is slightly longer for unconnectable devices */
mridup 2:a2b623661316 178 if ((params.getInterval() < GAP_ADV_PARAMS_INTERVAL_MIN_NONCON) ||
mridup 2:a2b623661316 179 (params.getInterval() > GAP_ADV_PARAMS_INTERVAL_MAX)) {
mridup 2:a2b623661316 180 return BLE_ERROR_PARAM_OUT_OF_RANGE;
mridup 2:a2b623661316 181 }
mridup 2:a2b623661316 182 } else {
mridup 2:a2b623661316 183 if ((params.getInterval() < GAP_ADV_PARAMS_INTERVAL_MIN) ||
mridup 2:a2b623661316 184 (params.getInterval() > GAP_ADV_PARAMS_INTERVAL_MAX)) {
mridup 2:a2b623661316 185 return BLE_ERROR_PARAM_OUT_OF_RANGE;
mridup 2:a2b623661316 186 }
mridup 2:a2b623661316 187 }
mridup 2:a2b623661316 188
mridup 2:a2b623661316 189 /* Check timeout is zero for Connectable Directed */
mridup 2:a2b623661316 190 if ((params.getAdvertisingType() == GapAdvertisingParams::ADV_CONNECTABLE_DIRECTED) && (params.getTimeout() != 0)) {
mridup 2:a2b623661316 191 /* Timeout must be 0 with this type, although we'll never get here */
mridup 2:a2b623661316 192 /* since this isn't implemented yet anyway */
mridup 2:a2b623661316 193 return BLE_ERROR_PARAM_OUT_OF_RANGE;
mridup 2:a2b623661316 194 }
mridup 2:a2b623661316 195
mridup 2:a2b623661316 196 /* Check timeout for other advertising types */
mridup 2:a2b623661316 197 if ((params.getAdvertisingType() != GapAdvertisingParams::ADV_CONNECTABLE_DIRECTED) &&
mridup 2:a2b623661316 198 (params.getTimeout() > GAP_ADV_PARAMS_TIMEOUT_MAX)) {
mridup 2:a2b623661316 199 return BLE_ERROR_PARAM_OUT_OF_RANGE;
mridup 2:a2b623661316 200 }
mridup 2:a2b623661316 201
mridup 2:a2b623661316 202 tBleStatus ret;
mridup 2:a2b623661316 203
mridup 3:9c4c13795643 204 //const char local_name[] = {AD_TYPE_COMPLETE_LOCAL_NAME,'B','l','u','e','N','R','G'};
mridup 5:31dedfa19a12 205 //const char local_name[] = {AD_TYPE_COMPLETE_LOCAL_NAME,device_name[27],device_name[28],device_name[29],device_name[30], device_name[31],
mridup 5:31dedfa19a12 206 // device_name[32], device_name[33], device_name[34], device_name[35], device_name[36]};
mridup 2:a2b623661316 207
hemddabral 10:814262eb0746 208
mridup 5:31dedfa19a12 209
mridup 5:31dedfa19a12 210 //const char local_name[] = {AD_TYPE_COMPLETE_LOCAL_NAME,device_name[27],device_name[28]};
mridup 5:31dedfa19a12 211 const LongUUID_t HRM_SERVICE_UUID_128 = {0x18, 0x0D};
mridup 2:a2b623661316 212 /* disable scan response */
mridup 2:a2b623661316 213 hci_le_set_scan_resp_data(0,NULL);
mridup 2:a2b623661316 214
mridup 2:a2b623661316 215 /*aci_gap_set_discoverable(Advertising_Event_Type, Adv_min_intvl, Adv_Max_Intvl, Addr_Type, Adv_Filter_Policy,
mridup 2:a2b623661316 216 Local_Name_Length, local_name, service_uuid_length, service_uuid_list, Slave_conn_intvl_min, Slave_conn_intvl_max);*/
mridup 2:a2b623661316 217 /*LINK_LAYER.H DESCRIBES THE ADVERTISING TYPES*/
mridup 2:a2b623661316 218
hemddabral 10:814262eb0746 219
hemddabral 11:87ddcfa4fa48 220 ret = aci_gap_set_discoverable(params.getAdvertisingType(), // Advertising_Event_Type
hemddabral 11:87ddcfa4fa48 221 0, // Adv_Interval_Min
hemddabral 10:814262eb0746 222 params.getInterval(), // Adv_Interval_Max
hemddabral 11:87ddcfa4fa48 223 RANDOM_ADDR, // Address_Type <hdd> It seems there is some problem with RANDOM_ADDRESS. <problem_desc> When RANDOM_ADDRESS is selected device name is not being handled properly, i.e. wrong device name is seen by android app </problem_desc>
hemddabral 10:814262eb0746 224 NO_WHITE_LIST_USE, // Adv_Filter_Policy
hemddabral 10:814262eb0746 225 local_name_length, // Local_Name_Length
hemddabral 10:814262eb0746 226 local_name, // Local_Name
hemddabral 10:814262eb0746 227 0, //Service_Uuid_Length
hemddabral 10:814262eb0746 228 NULL, //Service_Uuid_List
hemddabral 10:814262eb0746 229 0, // Slave_Conn_Interval_Min
hemddabral 10:814262eb0746 230 0); // Slave_Conn_Interval_Max
hemddabral 10:814262eb0746 231
mridup 4:fa5b5693c1b5 232 state.advertising = 1;
mridup 2:a2b623661316 233
mridup 2:a2b623661316 234 return BLE_ERROR_NONE;
mridup 2:a2b623661316 235 }
mridup 2:a2b623661316 236
mridup 2:a2b623661316 237 /**************************************************************************/
mridup 2:a2b623661316 238 /*!
mridup 2:a2b623661316 239 @brief Stops the BLE HW and disconnects from any devices
mridup 2:a2b623661316 240
mridup 2:a2b623661316 241 @returns ble_error_t
mridup 2:a2b623661316 242
mridup 2:a2b623661316 243 @retval BLE_ERROR_NONE
mridup 2:a2b623661316 244 Everything executed properly
mridup 2:a2b623661316 245
mridup 2:a2b623661316 246 @section EXAMPLE
mridup 2:a2b623661316 247
mridup 2:a2b623661316 248 @code
mridup 2:a2b623661316 249
mridup 2:a2b623661316 250 @endcode
mridup 2:a2b623661316 251 */
mridup 2:a2b623661316 252 /**************************************************************************/
mridup 2:a2b623661316 253 ble_error_t BlueNRGGap::stopAdvertising(void)
mridup 2:a2b623661316 254 {
mridup 2:a2b623661316 255
mridup 2:a2b623661316 256
mridup 2:a2b623661316 257 return BLE_ERROR_NONE;
mridup 2:a2b623661316 258 }
mridup 2:a2b623661316 259
mridup 2:a2b623661316 260 /**************************************************************************/
mridup 2:a2b623661316 261 /*!
mridup 2:a2b623661316 262 @brief Disconnects if we are connected to a central device
mridup 2:a2b623661316 263
mridup 2:a2b623661316 264 @returns ble_error_t
mridup 2:a2b623661316 265
mridup 2:a2b623661316 266 @retval BLE_ERROR_NONE
mridup 2:a2b623661316 267 Everything executed properly
mridup 2:a2b623661316 268
mridup 2:a2b623661316 269 @section EXAMPLE
mridup 2:a2b623661316 270
mridup 2:a2b623661316 271 @code
mridup 2:a2b623661316 272
mridup 2:a2b623661316 273 @endcode
mridup 2:a2b623661316 274 */
mridup 2:a2b623661316 275 /**************************************************************************/
mridup 2:a2b623661316 276 ble_error_t BlueNRGGap::disconnect(void)
mridup 2:a2b623661316 277 {
mridup 2:a2b623661316 278
mridup 2:a2b623661316 279 return BLE_ERROR_NONE;
mridup 2:a2b623661316 280 }
mridup 2:a2b623661316 281
mridup 2:a2b623661316 282 /**************************************************************************/
mridup 2:a2b623661316 283 /*!
mridup 2:a2b623661316 284 @brief Sets the 16-bit connection handle
mridup 2:a2b623661316 285 */
mridup 2:a2b623661316 286 /**************************************************************************/
mridup 2:a2b623661316 287 void BlueNRGGap::setConnectionHandle(uint16_t con_handle)
mridup 2:a2b623661316 288 {
mridup 2:a2b623661316 289 m_connectionHandle = con_handle;
mridup 2:a2b623661316 290 }
mridup 2:a2b623661316 291
mridup 2:a2b623661316 292 /**************************************************************************/
mridup 2:a2b623661316 293 /*!
mridup 2:a2b623661316 294 @brief Gets the 16-bit connection handle
mridup 2:a2b623661316 295 */
mridup 2:a2b623661316 296 /**************************************************************************/
mridup 2:a2b623661316 297 uint16_t BlueNRGGap::getConnectionHandle(void)
mridup 2:a2b623661316 298 {
mridup 2:a2b623661316 299 return m_connectionHandle;
mridup 2:a2b623661316 300 }
mridup 2:a2b623661316 301
mridup 2:a2b623661316 302 /**************************************************************************/
mridup 2:a2b623661316 303 /*!
mridup 2:a2b623661316 304 @brief Sets the BLE device address
mridup 2:a2b623661316 305
mridup 2:a2b623661316 306 @returns ble_error_t
mridup 2:a2b623661316 307
mridup 2:a2b623661316 308 @section EXAMPLE
mridup 2:a2b623661316 309
mridup 2:a2b623661316 310 @code
mridup 2:a2b623661316 311
mridup 2:a2b623661316 312 @endcode
mridup 2:a2b623661316 313 */
mridup 2:a2b623661316 314 /**************************************************************************/
mridup 2:a2b623661316 315 ble_error_t BlueNRGGap::setAddress(addr_type_t type, const uint8_t address[6])
mridup 2:a2b623661316 316 {
mridup 4:fa5b5693c1b5 317 tBleStatus ret;
mridup 4:fa5b5693c1b5 318
mridup 2:a2b623661316 319 if (type > ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE) {
mridup 2:a2b623661316 320 return BLE_ERROR_PARAM_OUT_OF_RANGE;
mridup 2:a2b623661316 321 }
mridup 4:fa5b5693c1b5 322
mridup 4:fa5b5693c1b5 323 ret = aci_hal_write_config_data(CONFIG_DATA_PUBADDR_OFFSET, CONFIG_DATA_PUBADDR_LEN, (const tHalUint8*)address);
mridup 4:fa5b5693c1b5 324
mridup 4:fa5b5693c1b5 325 //if (ret==BLE_STATUS_SUCCESS)
mridup 2:a2b623661316 326 return BLE_ERROR_NONE;
mridup 4:fa5b5693c1b5 327
mridup 4:fa5b5693c1b5 328 //return BLE_ERROR_PARAM_OUT_OF_RANGE;
mridup 2:a2b623661316 329 }