Previous version which works for my stm32f401 Nucleo board

Fork of X_NUCLEO_IDB0XA1 by ST

Committer:
mridup
Date:
Fri Jul 25 06:56:02 2014 +0000
Revision:
5:31dedfa19a12
Parent:
2:a2b623661316
Child:
7:55ac052585db
Initial implementation of GattServer. AddService and Characteristic implemented. 16bit UUID.

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 "BlueNRGGattServer.h"
mridup 2:a2b623661316 18 #include "mbed.h"
mridup 2:a2b623661316 19 #include "BlueNRGGap.h"
mridup 2:a2b623661316 20
mridup 5:31dedfa19a12 21 #define STORE_LE_16(buf, val) ( ((buf)[0] = (tHalUint8) (val) ) , \
mridup 5:31dedfa19a12 22 ((buf)[1] = (tHalUint8) (val>>8) ) )
mridup 5:31dedfa19a12 23
mridup 5:31dedfa19a12 24 #define STORE_LE_32(buf, val) ( ((buf)[0] = (tHalUint8) (val) ) , \
mridup 5:31dedfa19a12 25 ((buf)[1] = (tHalUint8) (val>>8) ) , \
mridup 5:31dedfa19a12 26 ((buf)[2] = (tHalUint8) (val>>16) ) , \
mridup 5:31dedfa19a12 27 ((buf)[3] = (tHalUint8) (val>>24) ) )
mridup 5:31dedfa19a12 28
mridup 2:a2b623661316 29 /**************************************************************************/
mridup 2:a2b623661316 30 /*!
mridup 2:a2b623661316 31 @brief Adds a new service to the GATT table on the peripheral
mridup 2:a2b623661316 32
mridup 2:a2b623661316 33 @returns ble_error_t
mridup 2:a2b623661316 34
mridup 2:a2b623661316 35 @retval BLE_ERROR_NONE
mridup 2:a2b623661316 36 Everything executed properly
mridup 2:a2b623661316 37
mridup 2:a2b623661316 38 @section EXAMPLE
mridup 2:a2b623661316 39
mridup 2:a2b623661316 40 @code
mridup 2:a2b623661316 41
mridup 2:a2b623661316 42 @endcode
mridup 2:a2b623661316 43 */
mridup 2:a2b623661316 44 /**************************************************************************/
mridup 2:a2b623661316 45 ble_error_t BlueNRGGattServer::addService(GattService &service)
mridup 2:a2b623661316 46 {
mridup 2:a2b623661316 47 /* ToDo: Make sure we don't overflow the array, etc. */
mridup 2:a2b623661316 48 /* ToDo: Make sure this service UUID doesn't already exist (?) */
mridup 2:a2b623661316 49 /* ToDo: Basic validation */
mridup 5:31dedfa19a12 50
mridup 5:31dedfa19a12 51 tBleStatus ret;
mridup 5:31dedfa19a12 52
mridup 5:31dedfa19a12 53
mridup 5:31dedfa19a12 54 /* Add the service to the BlueNRG */
mridup 5:31dedfa19a12 55 uint16_t primary_uuid = (service.getUUID()).getShortUUID();
mridup 5:31dedfa19a12 56
mridup 5:31dedfa19a12 57 ret = aci_gatt_add_serv(UUID_TYPE_16, (const uint8_t*)primary_uuid, PRIMARY_SERVICE, 7,
mridup 5:31dedfa19a12 58 &hrmServHandle);
mridup 5:31dedfa19a12 59 service.setHandle(hrmServHandle);
mridup 2:a2b623661316 60
mridup 5:31dedfa19a12 61 GattCharacteristic *p_char = service.getCharacteristic(0);
mridup 5:31dedfa19a12 62 uint16_t char_uuid = (p_char->getUUID()).getShortUUID();
mridup 5:31dedfa19a12 63 ret = aci_gatt_add_char(service.getHandle(), UUID_TYPE_16, (const uint8_t*)char_uuid, 1,
mridup 5:31dedfa19a12 64 CHAR_PROP_NOTIFY, ATTR_PERMISSION_NONE, 0,
mridup 5:31dedfa19a12 65 16, 0, &hrmCharHandle);
mridup 5:31dedfa19a12 66
mridup 5:31dedfa19a12 67 p_characteristics[characteristicCount++] = p_char;
mridup 5:31dedfa19a12 68 p_char->setHandle(hrmCharHandle);
mridup 5:31dedfa19a12 69 serviceCount++;
mridup 5:31dedfa19a12 70
mridup 5:31dedfa19a12 71 if ((p_char->getValuePtr() != NULL) && (p_char->getInitialLength() > 0)) {
mridup 5:31dedfa19a12 72 updateValue(hrmCharHandle, p_char->getValuePtr(), p_char->getInitialLength(), false /* localOnly */);
mridup 5:31dedfa19a12 73 }
mridup 5:31dedfa19a12 74
mridup 2:a2b623661316 75 return BLE_ERROR_NONE;
mridup 2:a2b623661316 76 }
mridup 2:a2b623661316 77
mridup 2:a2b623661316 78 /**************************************************************************/
mridup 2:a2b623661316 79 /*!
mridup 2:a2b623661316 80 @brief Reads the value of a characteristic, based on the service
mridup 2:a2b623661316 81 and characteristic index fields
mridup 2:a2b623661316 82
mridup 2:a2b623661316 83 @param[in] charHandle
mridup 2:a2b623661316 84 The handle of the GattCharacteristic to read from
mridup 2:a2b623661316 85 @param[in] buffer
mridup 2:a2b623661316 86 Buffer to hold the the characteristic's value
mridup 2:a2b623661316 87 (raw byte array in LSB format)
mridup 2:a2b623661316 88 @param[in] len
mridup 2:a2b623661316 89 The number of bytes read into the buffer
mridup 2:a2b623661316 90
mridup 2:a2b623661316 91 @returns ble_error_t
mridup 2:a2b623661316 92
mridup 2:a2b623661316 93 @retval BLE_ERROR_NONE
mridup 2:a2b623661316 94 Everything executed properly
mridup 2:a2b623661316 95
mridup 2:a2b623661316 96 @section EXAMPLE
mridup 2:a2b623661316 97
mridup 2:a2b623661316 98 @code
mridup 2:a2b623661316 99
mridup 2:a2b623661316 100 @endcode
mridup 2:a2b623661316 101 */
mridup 2:a2b623661316 102 /**************************************************************************/
mridup 2:a2b623661316 103 ble_error_t BlueNRGGattServer::readValue(uint16_t charHandle, uint8_t buffer[], uint16_t *const lengthP)
mridup 2:a2b623661316 104 {
mridup 2:a2b623661316 105
mridup 2:a2b623661316 106 return BLE_ERROR_NONE;
mridup 2:a2b623661316 107 }
mridup 2:a2b623661316 108
mridup 2:a2b623661316 109 /**************************************************************************/
mridup 2:a2b623661316 110 /*!
mridup 2:a2b623661316 111 @brief Updates the value of a characteristic, based on the service
mridup 2:a2b623661316 112 and characteristic index fields
mridup 2:a2b623661316 113
mridup 2:a2b623661316 114 @param[in] charHandle
mridup 2:a2b623661316 115 The handle of the GattCharacteristic to write to
mridup 2:a2b623661316 116 @param[in] buffer
mridup 2:a2b623661316 117 Data to use when updating the characteristic's value
mridup 2:a2b623661316 118 (raw byte array in LSB format)
mridup 2:a2b623661316 119 @param[in] len
mridup 2:a2b623661316 120 The number of bytes in buffer
mridup 2:a2b623661316 121
mridup 2:a2b623661316 122 @returns ble_error_t
mridup 2:a2b623661316 123
mridup 2:a2b623661316 124 @retval BLE_ERROR_NONE
mridup 2:a2b623661316 125 Everything executed properly
mridup 2:a2b623661316 126
mridup 2:a2b623661316 127 @section EXAMPLE
mridup 2:a2b623661316 128
mridup 2:a2b623661316 129 @code
mridup 2:a2b623661316 130
mridup 2:a2b623661316 131 @endcode
mridup 2:a2b623661316 132 */
mridup 2:a2b623661316 133 /**************************************************************************/
mridup 2:a2b623661316 134 ble_error_t BlueNRGGattServer::updateValue(uint16_t charHandle, uint8_t buffer[], uint16_t len, bool localOnly)
mridup 2:a2b623661316 135 {
mridup 5:31dedfa19a12 136 tBleStatus ret;
mridup 5:31dedfa19a12 137 tHalUint8 buff[6];
mridup 2:a2b623661316 138
mridup 5:31dedfa19a12 139 STORE_LE_16(buff,125);
mridup 5:31dedfa19a12 140 STORE_LE_16(buff+2,145);
mridup 5:31dedfa19a12 141 STORE_LE_16(buff+4,543);
mridup 5:31dedfa19a12 142
mridup 5:31dedfa19a12 143 ret = aci_gatt_update_char_value(hrmServHandle, charHandle, 0, 6, buff);
mridup 2:a2b623661316 144
mridup 2:a2b623661316 145 return BLE_ERROR_NONE;
mridup 2:a2b623661316 146 }