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