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:
Fri Aug 08 10:45:53 2014 +0000
Revision:
18:6d5f4c638f6a
Parent:
16:8aeb0c44869b
Child:
19:0f87aaf1362d
(1)  Device name characteristic update (2) More efficient scheme of parsing advertising data implemented

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 14:baa7a1464517 26 uint8_t servUuidlength = 0;
hemddabral 14:baa7a1464517 27 uint8_t* servUuidData = NULL;
hemddabral 14:baa7a1464517 28
hemddabral 16:8aeb0c44869b 29 uint32_t advtInterval = 0;
mridup 2:a2b623661316 30
mridup 2:a2b623661316 31 /**************************************************************************/
mridup 2:a2b623661316 32 /*!
mridup 2:a2b623661316 33 @brief Sets the advertising parameters and payload for the device
mridup 2:a2b623661316 34
mridup 2:a2b623661316 35 @param[in] params
mridup 2:a2b623661316 36 Basic advertising details, including the advertising
mridup 2:a2b623661316 37 delay, timeout and how the device should be advertised
mridup 2:a2b623661316 38 @params[in] advData
mridup 2:a2b623661316 39 The primary advertising data payload
mridup 2:a2b623661316 40 @params[in] scanResponse
mridup 2:a2b623661316 41 The optional Scan Response payload if the advertising
mridup 2:a2b623661316 42 type is set to \ref GapAdvertisingParams::ADV_SCANNABLE_UNDIRECTED
mridup 2:a2b623661316 43 in \ref GapAdveritinngParams
mridup 2:a2b623661316 44
mridup 2:a2b623661316 45 @returns \ref ble_error_t
mridup 2:a2b623661316 46
mridup 2:a2b623661316 47 @retval BLE_ERROR_NONE
mridup 2:a2b623661316 48 Everything executed properly
mridup 2:a2b623661316 49
mridup 2:a2b623661316 50 @retval BLE_ERROR_BUFFER_OVERFLOW
mridup 2:a2b623661316 51 The proposed action would cause a buffer overflow. All
mridup 2:a2b623661316 52 advertising payloads must be <= 31 bytes, for example.
mridup 2:a2b623661316 53
mridup 2:a2b623661316 54 @retval BLE_ERROR_NOT_IMPLEMENTED
mridup 2:a2b623661316 55 A feature was requested that is not yet supported in the
mridup 2:a2b623661316 56 nRF51 firmware or hardware.
mridup 2:a2b623661316 57
mridup 2:a2b623661316 58 @retval BLE_ERROR_PARAM_OUT_OF_RANGE
mridup 2:a2b623661316 59 One of the proposed values is outside the valid range.
mridup 2:a2b623661316 60
mridup 2:a2b623661316 61 @section EXAMPLE
mridup 2:a2b623661316 62
mridup 2:a2b623661316 63 @code
mridup 2:a2b623661316 64
mridup 2:a2b623661316 65 @endcode
mridup 2:a2b623661316 66 */
mridup 2:a2b623661316 67 /**************************************************************************/
mridup 2:a2b623661316 68 ble_error_t BlueNRGGap::setAdvertisingData(const GapAdvertisingData &advData, const GapAdvertisingData &scanResponse)
mridup 2:a2b623661316 69 {
hemddabral 18:6d5f4c638f6a 70 #if 1
hemddabral 18:6d5f4c638f6a 71 DEBUG("BlueNRGGap::setAdvertisingData\n");
mridup 2:a2b623661316 72 /* Make sure we don't exceed the advertising payload length */
mridup 2:a2b623661316 73 if (advData.getPayloadLen() > GAP_ADVERTISING_DATA_MAX_PAYLOAD) {
mridup 2:a2b623661316 74 return BLE_ERROR_BUFFER_OVERFLOW;
mridup 2:a2b623661316 75 }
mridup 2:a2b623661316 76
mridup 2:a2b623661316 77 /* Make sure we have a payload! */
hemddabral 10:814262eb0746 78 if (advData.getPayloadLen() <= 0) {
mridup 2:a2b623661316 79 return BLE_ERROR_PARAM_OUT_OF_RANGE;
hemddabral 18:6d5f4c638f6a 80 } else {
hemddabral 18:6d5f4c638f6a 81 PayloadPtr loadPtr(advData.getPayload(), advData.getPayloadLen());
hemddabral 18:6d5f4c638f6a 82 for(uint8_t index=0; index<loadPtr.getPayloadUnitCount(); index++) {
hemddabral 18:6d5f4c638f6a 83 // add AD data to the
hemddabral 18:6d5f4c638f6a 84 PayloadUnit unit = loadPtr.getUnitAtIndex(index);
hemddabral 18:6d5f4c638f6a 85 DEBUG("adData[%d].length=%d\n", index,(uint8_t)(*loadPtr.getUnitAtIndex(index).getLenPtr()));
hemddabral 18:6d5f4c638f6a 86 DEBUG("adData[%d].AdType=0x%x\n", index,(uint8_t)(*loadPtr.getUnitAtIndex(index).getAdTypePtr()));
hemddabral 18:6d5f4c638f6a 87 #if 0
hemddabral 18:6d5f4c638f6a 88 int err = aci_gap_update_adv_data(*loadPtr.getUnitAtIndex(index).getLenPtr(), loadPtr.getUnitAtIndex(index).getAdTypePtr());
hemddabral 18:6d5f4c638f6a 89
hemddabral 18:6d5f4c638f6a 90 if(BLE_STATUS_SUCCESS!=err) {
hemddabral 18:6d5f4c638f6a 91 DEBUG("error occurred while adding adv data\n");
hemddabral 18:6d5f4c638f6a 92 return BLE_ERROR_PARAM_OUT_OF_RANGE; // no other suitable error code is available
hemddabral 18:6d5f4c638f6a 93 }
hemddabral 18:6d5f4c638f6a 94 #endif
hemddabral 12:a5d7db4a1e49 95 //UnitPayload unitLoad = load.getPayLoadAtIndex(index);
hemddabral 18:6d5f4c638f6a 96 switch(*loadPtr.getUnitAtIndex(index).getAdTypePtr()) {
hemddabral 18:6d5f4c638f6a 97 case GapAdvertisingData::FLAGS: /* ref *Flags */
hemddabral 10:814262eb0746 98 break;
hemddabral 10:814262eb0746 99 case GapAdvertisingData::INCOMPLETE_LIST_16BIT_SERVICE_IDS: /**< Incomplete list of 16-bit Service IDs */
hemddabral 10:814262eb0746 100 break;
hemddabral 10:814262eb0746 101 case GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS: /**< Complete list of 16-bit Service IDs */
hemddabral 16:8aeb0c44869b 102 DEBUG("Advertising type: COMPLETE_LIST_16BIT_SERVICE_IDS\n");
hemddabral 14:baa7a1464517 103 break;
hemddabral 10:814262eb0746 104 case GapAdvertisingData::INCOMPLETE_LIST_32BIT_SERVICE_IDS: /**< Incomplete list of 32-bit Service IDs (not relevant for Bluetooth 4.0) */
hemddabral 10:814262eb0746 105 break;
hemddabral 10:814262eb0746 106 case GapAdvertisingData::COMPLETE_LIST_32BIT_SERVICE_IDS: /**< Complete list of 32-bit Service IDs (not relevant for Bluetooth 4.0) */
hemddabral 10:814262eb0746 107 break;
hemddabral 10:814262eb0746 108 case GapAdvertisingData::INCOMPLETE_LIST_128BIT_SERVICE_IDS: /**< Incomplete list of 128-bit Service IDs */
hemddabral 10:814262eb0746 109 break;
hemddabral 10:814262eb0746 110 case GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS: /**< Complete list of 128-bit Service IDs */
hemddabral 10:814262eb0746 111 break;
hemddabral 10:814262eb0746 112 case GapAdvertisingData::SHORTENED_LOCAL_NAME: /**< Shortened Local Name */
hemddabral 10:814262eb0746 113 break;
hemddabral 10:814262eb0746 114 case GapAdvertisingData::COMPLETE_LOCAL_NAME: /**< Complete Local Name */
hemddabral 16:8aeb0c44869b 115 DEBUG("Advertising type: COMPLETE_LOCAL_NAME\n");
hemddabral 18:6d5f4c638f6a 116 loadPtr.getUnitAtIndex(index).printDataAsString();
hemddabral 18:6d5f4c638f6a 117 local_name_length = *loadPtr.getUnitAtIndex(index).getLenPtr()-1;
hemddabral 18:6d5f4c638f6a 118 local_name = (const char*)loadPtr.getUnitAtIndex(index).getAdTypePtr();
hemddabral 18:6d5f4c638f6a 119 //for(int i=0; i<local_name_length; i++)
hemddabral 18:6d5f4c638f6a 120 // DEBUG("\n%c", local_name[i]);
hemddabral 18:6d5f4c638f6a 121 aci_gatt_update_char_value(g_gap_service_handle,
hemddabral 18:6d5f4c638f6a 122 g_device_name_char_handle,
hemddabral 18:6d5f4c638f6a 123 0,
hemddabral 18:6d5f4c638f6a 124 local_name_length,
hemddabral 18:6d5f4c638f6a 125 (tHalUint8 *)local_name);
hemddabral 18:6d5f4c638f6a 126
hemddabral 18:6d5f4c638f6a 127
hemddabral 16:8aeb0c44869b 128 DEBUG("device_name length=%d", local_name_length);
hemddabral 10:814262eb0746 129 break;
hemddabral 10:814262eb0746 130
hemddabral 10:814262eb0746 131 case GapAdvertisingData::TX_POWER_LEVEL: /**< TX Power Level (in dBm) */
hemddabral 18:6d5f4c638f6a 132 DEBUG("Advertising type: TX_POWER_LEVEL\n");
hemddabral 18:6d5f4c638f6a 133 int8_t dbm = *loadPtr.getUnitAtIndex(index).getDataPtr();
hemddabral 12:a5d7db4a1e49 134 int8_t enHighPower = 0;
hemddabral 12:a5d7db4a1e49 135 int8_t paLevel = 0;
hemddabral 12:a5d7db4a1e49 136 int8_t dbmActuallySet = getHighPowerAndPALevelValue(dbm, enHighPower, paLevel);
hemddabral 16:8aeb0c44869b 137 DEBUG("dbm=%d, dbmActuallySet=%d\n", dbm, dbmActuallySet);
hemddabral 18:6d5f4c638f6a 138 DEBUG("enHighPower=%d, paLevel=%d\n", enHighPower, paLevel);
hemddabral 12:a5d7db4a1e49 139 aci_hal_set_tx_power_level(enHighPower, paLevel);
hemddabral 12:a5d7db4a1e49 140 break;
hemddabral 10:814262eb0746 141 case GapAdvertisingData::DEVICE_ID: /**< Device ID */
hemddabral 10:814262eb0746 142 break;
hemddabral 10:814262eb0746 143 case GapAdvertisingData::SLAVE_CONNECTION_INTERVAL_RANGE: /**< Slave :Connection Interval Range */
hemddabral 10:814262eb0746 144 break;
hemddabral 10:814262eb0746 145 case GapAdvertisingData::SERVICE_DATA: /**< Service Data */
hemddabral 10:814262eb0746 146 break;
hemddabral 14:baa7a1464517 147 case GapAdvertisingData::APPEARANCE:
hemddabral 14:baa7a1464517 148 /*
hemddabral 14:baa7a1464517 149 Tested with GapAdvertisingData::GENERIC_PHONE.
hemddabral 14:baa7a1464517 150 for other appearances BLE Scanner android app is not behaving properly
hemddabral 14:baa7a1464517 151 */
hemddabral 16:8aeb0c44869b 152 DEBUG("Advertising type: APPEARANCE\n");
hemddabral 18:6d5f4c638f6a 153 const char *deviceAppearance = NULL;
hemddabral 18:6d5f4c638f6a 154 deviceAppearance = (const char*)loadPtr.getUnitAtIndex(index).getDataPtr(); // to be set later when startAdvertising() is called
hemddabral 18:6d5f4c638f6a 155 DEBUG("input: deviceAppearance= 0x%x 0x%x..., strlen(deviceAppearance)=%d\n", deviceAppearance[1], deviceAppearance[0], (uint8_t)*loadPtr.getUnitAtIndex(index).getLenPtr()-1); /**< \ref Appearance */
hemddabral 14:baa7a1464517 156 aci_gatt_update_char_value(g_gap_service_handle, g_appearance_char_handle, 0, 2, (tHalUint8 *)deviceAppearance);
hemddabral 14:baa7a1464517 157 break;
hemddabral 10:814262eb0746 158 case GapAdvertisingData::ADVERTISING_INTERVAL: /**< Advertising Interval */
hemddabral 18:6d5f4c638f6a 159 advtInterval = (uint16_t)(*loadPtr.getUnitAtIndex(index).getDataPtr());
hemddabral 16:8aeb0c44869b 160 DEBUG("advtInterval=%d\n", advtInterval);
hemddabral 10:814262eb0746 161 break;
hemddabral 10:814262eb0746 162 case GapAdvertisingData::MANUFACTURER_SPECIFIC_DATA: /**< Manufacturer Specific Data */
hemddabral 10:814262eb0746 163 break;
hemddabral 10:814262eb0746 164
hemddabral 10:814262eb0746 165 }
hemddabral 18:6d5f4c638f6a 166 //#endif
mridup 2:a2b623661316 167 }
hemddabral 10:814262eb0746 168 //const uint8_t *payload = advData.getPayload();
mridup 2:a2b623661316 169
mridup 3:9c4c13795643 170 }
hemddabral 18:6d5f4c638f6a 171 #endif
mridup 2:a2b623661316 172 return BLE_ERROR_NONE;
mridup 2:a2b623661316 173 }
mridup 2:a2b623661316 174
mridup 2:a2b623661316 175 /**************************************************************************/
mridup 2:a2b623661316 176 /*!
mridup 2:a2b623661316 177 @brief Starts the BLE HW, initialising any services that were
mridup 2:a2b623661316 178 added before this function was called.
mridup 2:a2b623661316 179
mridup 2:a2b623661316 180 @note All services must be added before calling this function!
mridup 2:a2b623661316 181
mridup 2:a2b623661316 182 @returns ble_error_t
mridup 2:a2b623661316 183
mridup 2:a2b623661316 184 @retval BLE_ERROR_NONE
mridup 2:a2b623661316 185 Everything executed properly
mridup 2:a2b623661316 186
mridup 2:a2b623661316 187 @section EXAMPLE
mridup 2:a2b623661316 188
mridup 2:a2b623661316 189 @code
mridup 2:a2b623661316 190
mridup 2:a2b623661316 191 @endcode
mridup 2:a2b623661316 192 */
mridup 2:a2b623661316 193 /**************************************************************************/
mridup 2:a2b623661316 194 ble_error_t BlueNRGGap::startAdvertising(const GapAdvertisingParams &params)
mridup 2:a2b623661316 195 {
mridup 2:a2b623661316 196 /* Make sure we support the advertising type */
mridup 2:a2b623661316 197 if (params.getAdvertisingType() == GapAdvertisingParams::ADV_CONNECTABLE_DIRECTED) {
mridup 2:a2b623661316 198 /* ToDo: This requires a propery security implementation, etc. */
mridup 2:a2b623661316 199 return BLE_ERROR_NOT_IMPLEMENTED;
mridup 2:a2b623661316 200 }
mridup 2:a2b623661316 201
mridup 2:a2b623661316 202 /* Check interval range */
mridup 2:a2b623661316 203 if (params.getAdvertisingType() == GapAdvertisingParams::ADV_NON_CONNECTABLE_UNDIRECTED) {
mridup 2:a2b623661316 204 /* Min delay is slightly longer for unconnectable devices */
mridup 2:a2b623661316 205 if ((params.getInterval() < GAP_ADV_PARAMS_INTERVAL_MIN_NONCON) ||
mridup 2:a2b623661316 206 (params.getInterval() > GAP_ADV_PARAMS_INTERVAL_MAX)) {
mridup 2:a2b623661316 207 return BLE_ERROR_PARAM_OUT_OF_RANGE;
mridup 2:a2b623661316 208 }
mridup 2:a2b623661316 209 } else {
mridup 2:a2b623661316 210 if ((params.getInterval() < GAP_ADV_PARAMS_INTERVAL_MIN) ||
mridup 2:a2b623661316 211 (params.getInterval() > GAP_ADV_PARAMS_INTERVAL_MAX)) {
mridup 2:a2b623661316 212 return BLE_ERROR_PARAM_OUT_OF_RANGE;
mridup 2:a2b623661316 213 }
mridup 2:a2b623661316 214 }
mridup 2:a2b623661316 215
mridup 2:a2b623661316 216 /* Check timeout is zero for Connectable Directed */
mridup 2:a2b623661316 217 if ((params.getAdvertisingType() == GapAdvertisingParams::ADV_CONNECTABLE_DIRECTED) && (params.getTimeout() != 0)) {
mridup 2:a2b623661316 218 /* Timeout must be 0 with this type, although we'll never get here */
mridup 2:a2b623661316 219 /* since this isn't implemented yet anyway */
mridup 2:a2b623661316 220 return BLE_ERROR_PARAM_OUT_OF_RANGE;
mridup 2:a2b623661316 221 }
mridup 2:a2b623661316 222
mridup 2:a2b623661316 223 /* Check timeout for other advertising types */
mridup 2:a2b623661316 224 if ((params.getAdvertisingType() != GapAdvertisingParams::ADV_CONNECTABLE_DIRECTED) &&
mridup 2:a2b623661316 225 (params.getTimeout() > GAP_ADV_PARAMS_TIMEOUT_MAX)) {
mridup 2:a2b623661316 226 return BLE_ERROR_PARAM_OUT_OF_RANGE;
mridup 2:a2b623661316 227 }
mridup 2:a2b623661316 228
mridup 2:a2b623661316 229 tBleStatus ret;
mridup 2:a2b623661316 230
mridup 3:9c4c13795643 231 //const char local_name[] = {AD_TYPE_COMPLETE_LOCAL_NAME,'B','l','u','e','N','R','G'};
mridup 5:31dedfa19a12 232 //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 233 // device_name[32], device_name[33], device_name[34], device_name[35], device_name[36]};
mridup 2:a2b623661316 234
hemddabral 10:814262eb0746 235
mridup 5:31dedfa19a12 236
mridup 5:31dedfa19a12 237 //const char local_name[] = {AD_TYPE_COMPLETE_LOCAL_NAME,device_name[27],device_name[28]};
mridup 5:31dedfa19a12 238 const LongUUID_t HRM_SERVICE_UUID_128 = {0x18, 0x0D};
mridup 2:a2b623661316 239 /* disable scan response */
mridup 2:a2b623661316 240 hci_le_set_scan_resp_data(0,NULL);
mridup 2:a2b623661316 241
mridup 2:a2b623661316 242 /*aci_gap_set_discoverable(Advertising_Event_Type, Adv_min_intvl, Adv_Max_Intvl, Addr_Type, Adv_Filter_Policy,
mridup 2:a2b623661316 243 Local_Name_Length, local_name, service_uuid_length, service_uuid_list, Slave_conn_intvl_min, Slave_conn_intvl_max);*/
mridup 2:a2b623661316 244 /*LINK_LAYER.H DESCRIBES THE ADVERTISING TYPES*/
hemddabral 18:6d5f4c638f6a 245
hemddabral 18:6d5f4c638f6a 246 char* name = NULL;
hemddabral 18:6d5f4c638f6a 247 uint8_t nameLen = 0;
hemddabral 18:6d5f4c638f6a 248 if(local_name!=NULL) {
hemddabral 18:6d5f4c638f6a 249 name = (char*)local_name;
hemddabral 18:6d5f4c638f6a 250 nameLen = local_name_length;
hemddabral 18:6d5f4c638f6a 251 } else {
hemddabral 18:6d5f4c638f6a 252 char str[] = "ST_BLE_DEV";
hemddabral 18:6d5f4c638f6a 253 name = new char[strlen(str)+1];
hemddabral 18:6d5f4c638f6a 254 name[0] = AD_TYPE_COMPLETE_LOCAL_NAME;
hemddabral 18:6d5f4c638f6a 255 strcpy(name+1, str);
hemddabral 18:6d5f4c638f6a 256 nameLen = strlen(name);
hemddabral 18:6d5f4c638f6a 257 DEBUG("nameLen=%d\n", nameLen);
hemddabral 18:6d5f4c638f6a 258 DEBUG("name=%s\n", name);
hemddabral 18:6d5f4c638f6a 259 }
hemddabral 18:6d5f4c638f6a 260
hemddabral 18:6d5f4c638f6a 261
hemddabral 16:8aeb0c44869b 262 advtInterval = params.getInterval(); // set advtInterval in case it is not already set by user application
hemddabral 11:87ddcfa4fa48 263 ret = aci_gap_set_discoverable(params.getAdvertisingType(), // Advertising_Event_Type
hemddabral 11:87ddcfa4fa48 264 0, // Adv_Interval_Min
hemddabral 16:8aeb0c44869b 265 advtInterval, // Adv_Interval_Max
hemddabral 11:87ddcfa4fa48 266 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 267 NO_WHITE_LIST_USE, // Adv_Filter_Policy
hemddabral 18:6d5f4c638f6a 268 nameLen, //local_name_length, // Local_Name_Length
hemddabral 18:6d5f4c638f6a 269 (const char*)name, //local_name, // Local_Name
hemddabral 14:baa7a1464517 270 servUuidlength, //Service_Uuid_Length
hemddabral 14:baa7a1464517 271 servUuidData, //Service_Uuid_List
hemddabral 10:814262eb0746 272 0, // Slave_Conn_Interval_Min
hemddabral 10:814262eb0746 273 0); // Slave_Conn_Interval_Max
hemddabral 10:814262eb0746 274
mridup 4:fa5b5693c1b5 275 state.advertising = 1;
mridup 2:a2b623661316 276
mridup 2:a2b623661316 277 return BLE_ERROR_NONE;
mridup 2:a2b623661316 278 }
mridup 2:a2b623661316 279
mridup 2:a2b623661316 280 /**************************************************************************/
mridup 2:a2b623661316 281 /*!
mridup 2:a2b623661316 282 @brief Stops the BLE HW and disconnects from any devices
mridup 2:a2b623661316 283
mridup 2:a2b623661316 284 @returns ble_error_t
mridup 2:a2b623661316 285
mridup 2:a2b623661316 286 @retval BLE_ERROR_NONE
mridup 2:a2b623661316 287 Everything executed properly
mridup 2:a2b623661316 288
mridup 2:a2b623661316 289 @section EXAMPLE
mridup 2:a2b623661316 290
mridup 2:a2b623661316 291 @code
mridup 2:a2b623661316 292
mridup 2:a2b623661316 293 @endcode
mridup 2:a2b623661316 294 */
mridup 2:a2b623661316 295 /**************************************************************************/
mridup 2:a2b623661316 296 ble_error_t BlueNRGGap::stopAdvertising(void)
mridup 2:a2b623661316 297 {
mridup 2:a2b623661316 298
mridup 2:a2b623661316 299
mridup 2:a2b623661316 300 return BLE_ERROR_NONE;
mridup 2:a2b623661316 301 }
mridup 2:a2b623661316 302
mridup 2:a2b623661316 303 /**************************************************************************/
mridup 2:a2b623661316 304 /*!
mridup 2:a2b623661316 305 @brief Disconnects if we are connected to a central device
mridup 2:a2b623661316 306
mridup 2:a2b623661316 307 @returns ble_error_t
mridup 2:a2b623661316 308
mridup 2:a2b623661316 309 @retval BLE_ERROR_NONE
mridup 2:a2b623661316 310 Everything executed properly
mridup 2:a2b623661316 311
mridup 2:a2b623661316 312 @section EXAMPLE
mridup 2:a2b623661316 313
mridup 2:a2b623661316 314 @code
mridup 2:a2b623661316 315
mridup 2:a2b623661316 316 @endcode
mridup 2:a2b623661316 317 */
mridup 2:a2b623661316 318 /**************************************************************************/
mridup 2:a2b623661316 319 ble_error_t BlueNRGGap::disconnect(void)
mridup 2:a2b623661316 320 {
mridup 2:a2b623661316 321
mridup 2:a2b623661316 322 return BLE_ERROR_NONE;
mridup 2:a2b623661316 323 }
mridup 2:a2b623661316 324
mridup 2:a2b623661316 325 /**************************************************************************/
mridup 2:a2b623661316 326 /*!
mridup 2:a2b623661316 327 @brief Sets the 16-bit connection handle
mridup 2:a2b623661316 328 */
mridup 2:a2b623661316 329 /**************************************************************************/
mridup 2:a2b623661316 330 void BlueNRGGap::setConnectionHandle(uint16_t con_handle)
mridup 2:a2b623661316 331 {
mridup 2:a2b623661316 332 m_connectionHandle = con_handle;
mridup 2:a2b623661316 333 }
mridup 2:a2b623661316 334
mridup 2:a2b623661316 335 /**************************************************************************/
mridup 2:a2b623661316 336 /*!
mridup 2:a2b623661316 337 @brief Gets the 16-bit connection handle
mridup 2:a2b623661316 338 */
mridup 2:a2b623661316 339 /**************************************************************************/
mridup 2:a2b623661316 340 uint16_t BlueNRGGap::getConnectionHandle(void)
mridup 2:a2b623661316 341 {
mridup 2:a2b623661316 342 return m_connectionHandle;
mridup 2:a2b623661316 343 }
mridup 2:a2b623661316 344
mridup 2:a2b623661316 345 /**************************************************************************/
mridup 2:a2b623661316 346 /*!
mridup 2:a2b623661316 347 @brief Sets the BLE device address
mridup 2:a2b623661316 348
mridup 2:a2b623661316 349 @returns ble_error_t
mridup 2:a2b623661316 350
mridup 2:a2b623661316 351 @section EXAMPLE
mridup 2:a2b623661316 352
mridup 2:a2b623661316 353 @code
mridup 2:a2b623661316 354
mridup 2:a2b623661316 355 @endcode
mridup 2:a2b623661316 356 */
mridup 2:a2b623661316 357 /**************************************************************************/
mridup 2:a2b623661316 358 ble_error_t BlueNRGGap::setAddress(addr_type_t type, const uint8_t address[6])
mridup 2:a2b623661316 359 {
mridup 4:fa5b5693c1b5 360 tBleStatus ret;
mridup 4:fa5b5693c1b5 361
mridup 2:a2b623661316 362 if (type > ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE) {
mridup 2:a2b623661316 363 return BLE_ERROR_PARAM_OUT_OF_RANGE;
mridup 2:a2b623661316 364 }
mridup 4:fa5b5693c1b5 365
mridup 4:fa5b5693c1b5 366 ret = aci_hal_write_config_data(CONFIG_DATA_PUBADDR_OFFSET, CONFIG_DATA_PUBADDR_LEN, (const tHalUint8*)address);
mridup 4:fa5b5693c1b5 367
mridup 4:fa5b5693c1b5 368 //if (ret==BLE_STATUS_SUCCESS)
mridup 2:a2b623661316 369 return BLE_ERROR_NONE;
mridup 4:fa5b5693c1b5 370
mridup 4:fa5b5693c1b5 371 //return BLE_ERROR_PARAM_OUT_OF_RANGE;
mridup 2:a2b623661316 372 }