Devchannel Team / X_NUCLEO_IDB0XA1

Dependents:   Hello_BLE F446RE-BLE

Fork of X_NUCLEO_IDB0XA1 by ST

Committer:
hemddabral
Date:
Tue Aug 19 05:41:48 2014 +0000
Revision:
25:f3ea48a2008b
mereged aci_gap_update_adv_data() related changes in GAP

Who changed what in which revision?

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