mbed os with nrf51 internal bandgap enabled to read battery level

Dependents:   BLE_file_test BLE_Blink ExternalEncoder

Committer:
elessair
Date:
Sun Oct 23 15:10:02 2016 +0000
Revision:
0:f269e3021894
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
elessair 0:f269e3021894 1 /* mbed Microcontroller Library
elessair 0:f269e3021894 2 * Copyright (c) 2006-2013 ARM Limited
elessair 0:f269e3021894 3 *
elessair 0:f269e3021894 4 * Licensed under the Apache License, Version 2.0 (the "License");
elessair 0:f269e3021894 5 * you may not use this file except in compliance with the License.
elessair 0:f269e3021894 6 * You may obtain a copy of the License at
elessair 0:f269e3021894 7 *
elessair 0:f269e3021894 8 * http://www.apache.org/licenses/LICENSE-2.0
elessair 0:f269e3021894 9 *
elessair 0:f269e3021894 10 * Unless required by applicable law or agreed to in writing, software
elessair 0:f269e3021894 11 * distributed under the License is distributed on an "AS IS" BASIS,
elessair 0:f269e3021894 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
elessair 0:f269e3021894 13 * See the License for the specific language governing permissions and
elessair 0:f269e3021894 14 * limitations under the License.
elessair 0:f269e3021894 15 */
elessair 0:f269e3021894 16
elessair 0:f269e3021894 17 #ifndef __GATT_ATTRIBUTE_H__
elessair 0:f269e3021894 18 #define __GATT_ATTRIBUTE_H__
elessair 0:f269e3021894 19
elessair 0:f269e3021894 20 #include "UUID.h"
elessair 0:f269e3021894 21
elessair 0:f269e3021894 22 /**
elessair 0:f269e3021894 23 * Instances of this class encapsulate the data that belongs to a Bluetooth Low
elessair 0:f269e3021894 24 * Energy attribute.
elessair 0:f269e3021894 25 */
elessair 0:f269e3021894 26 class GattAttribute {
elessair 0:f269e3021894 27 public:
elessair 0:f269e3021894 28 /**
elessair 0:f269e3021894 29 * Type for the handle or ID of the attribute in the ATT table. These are
elessair 0:f269e3021894 30 * unique and are usually generated by the underlying BLE stack.
elessair 0:f269e3021894 31 */
elessair 0:f269e3021894 32 typedef uint16_t Handle_t;
elessair 0:f269e3021894 33 /**
elessair 0:f269e3021894 34 * Define the value of an invalid attribute handle.
elessair 0:f269e3021894 35 */
elessair 0:f269e3021894 36 static const Handle_t INVALID_HANDLE = 0x0000;
elessair 0:f269e3021894 37
elessair 0:f269e3021894 38 public:
elessair 0:f269e3021894 39 /**
elessair 0:f269e3021894 40 * @brief Creates a new GattAttribute using the specified
elessair 0:f269e3021894 41 * UUID, value length, and inital value.
elessair 0:f269e3021894 42 *
elessair 0:f269e3021894 43 * @param[in] uuid
elessair 0:f269e3021894 44 * The UUID to use for this attribute.
elessair 0:f269e3021894 45 * @param[in] valuePtr
elessair 0:f269e3021894 46 * The memory holding the initial value.
elessair 0:f269e3021894 47 * @param[in] len
elessair 0:f269e3021894 48 * The length in bytes of this attribute's value.
elessair 0:f269e3021894 49 * @param[in] maxLen
elessair 0:f269e3021894 50 * The max length in bytes of this attribute's value.
elessair 0:f269e3021894 51 * @param[in] hasVariableLen
elessair 0:f269e3021894 52 * Whether the attribute's value length changes overtime.
elessair 0:f269e3021894 53 *
elessair 0:f269e3021894 54 * @section EXAMPLE
elessair 0:f269e3021894 55 *
elessair 0:f269e3021894 56 * @code
elessair 0:f269e3021894 57 *
elessair 0:f269e3021894 58 * // UUID = 0x2A19, Min length 2, Max len = 2
elessair 0:f269e3021894 59 * GattAttribute attr = GattAttribute(0x2A19, &someValue, 2, 2);
elessair 0:f269e3021894 60 *
elessair 0:f269e3021894 61 * @endcode
elessair 0:f269e3021894 62 */
elessair 0:f269e3021894 63 GattAttribute(const UUID &uuid, uint8_t *valuePtr = NULL, uint16_t len = 0, uint16_t maxLen = 0, bool hasVariableLen = true) :
elessair 0:f269e3021894 64 _uuid(uuid), _valuePtr(valuePtr), _lenMax(maxLen), _len(len), _hasVariableLen(hasVariableLen), _handle() {
elessair 0:f269e3021894 65 /* Empty */
elessair 0:f269e3021894 66 }
elessair 0:f269e3021894 67
elessair 0:f269e3021894 68 public:
elessair 0:f269e3021894 69 /**
elessair 0:f269e3021894 70 * Get the attribute's handle in the ATT table.
elessair 0:f269e3021894 71 *
elessair 0:f269e3021894 72 * @return The attribute's handle.
elessair 0:f269e3021894 73 */
elessair 0:f269e3021894 74 Handle_t getHandle(void) const {
elessair 0:f269e3021894 75 return _handle;
elessair 0:f269e3021894 76 }
elessair 0:f269e3021894 77
elessair 0:f269e3021894 78 /**
elessair 0:f269e3021894 79 * The UUID of the characteristic that this attribute belongs to.
elessair 0:f269e3021894 80 *
elessair 0:f269e3021894 81 * @return The characteristic's UUID.
elessair 0:f269e3021894 82 */
elessair 0:f269e3021894 83 const UUID &getUUID(void) const {
elessair 0:f269e3021894 84 return _uuid;
elessair 0:f269e3021894 85 }
elessair 0:f269e3021894 86
elessair 0:f269e3021894 87 /**
elessair 0:f269e3021894 88 * Get the current length of the attribute value.
elessair 0:f269e3021894 89 *
elessair 0:f269e3021894 90 * @return The current length of the attribute value.
elessair 0:f269e3021894 91 */
elessair 0:f269e3021894 92 uint16_t getLength(void) const {
elessair 0:f269e3021894 93 return _len;
elessair 0:f269e3021894 94 }
elessair 0:f269e3021894 95
elessair 0:f269e3021894 96 /**
elessair 0:f269e3021894 97 * Get the maximum length of the attribute value.
elessair 0:f269e3021894 98 *
elessair 0:f269e3021894 99 * The maximum length of the attribute value.
elessair 0:f269e3021894 100 */
elessair 0:f269e3021894 101 uint16_t getMaxLength(void) const {
elessair 0:f269e3021894 102 return _lenMax;
elessair 0:f269e3021894 103 }
elessair 0:f269e3021894 104
elessair 0:f269e3021894 105 /**
elessair 0:f269e3021894 106 * Get a pointer to the current length of the attribute value.
elessair 0:f269e3021894 107 *
elessair 0:f269e3021894 108 * @return A pointer to the current length of the attribute value.
elessair 0:f269e3021894 109 */
elessair 0:f269e3021894 110 uint16_t *getLengthPtr(void) {
elessair 0:f269e3021894 111 return &_len;
elessair 0:f269e3021894 112 }
elessair 0:f269e3021894 113
elessair 0:f269e3021894 114 /**
elessair 0:f269e3021894 115 * Set the attribute handle.
elessair 0:f269e3021894 116 *
elessair 0:f269e3021894 117 * @param[in] id
elessair 0:f269e3021894 118 * The new attribute handle.
elessair 0:f269e3021894 119 */
elessair 0:f269e3021894 120 void setHandle(Handle_t id) {
elessair 0:f269e3021894 121 _handle = id;
elessair 0:f269e3021894 122 }
elessair 0:f269e3021894 123
elessair 0:f269e3021894 124 /**
elessair 0:f269e3021894 125 * Get a pointer to the attribute value.
elessair 0:f269e3021894 126 *
elessair 0:f269e3021894 127 * @return A pointer to the attribute value.
elessair 0:f269e3021894 128 */
elessair 0:f269e3021894 129 uint8_t *getValuePtr(void) {
elessair 0:f269e3021894 130 return _valuePtr;
elessair 0:f269e3021894 131 }
elessair 0:f269e3021894 132
elessair 0:f269e3021894 133 /**
elessair 0:f269e3021894 134 * Check whether the length of the attribute's value can change over time.
elessair 0:f269e3021894 135 *
elessair 0:f269e3021894 136 * @return true if the attribute has variable length, false otherwise.
elessair 0:f269e3021894 137 */
elessair 0:f269e3021894 138 bool hasVariableLength(void) const {
elessair 0:f269e3021894 139 return _hasVariableLen;
elessair 0:f269e3021894 140 }
elessair 0:f269e3021894 141
elessair 0:f269e3021894 142 private:
elessair 0:f269e3021894 143 /**
elessair 0:f269e3021894 144 * Characteristic's UUID.
elessair 0:f269e3021894 145 */
elessair 0:f269e3021894 146 UUID _uuid;
elessair 0:f269e3021894 147 /**
elessair 0:f269e3021894 148 * Pointer to the attribute's value.
elessair 0:f269e3021894 149 */
elessair 0:f269e3021894 150 uint8_t *_valuePtr;
elessair 0:f269e3021894 151 /**
elessair 0:f269e3021894 152 * Maximum length of the value pointed to by GattAttribute::_valuePtr.
elessair 0:f269e3021894 153 */
elessair 0:f269e3021894 154 uint16_t _lenMax;
elessair 0:f269e3021894 155 /**
elessair 0:f269e3021894 156 * Current length of the value pointed to by GattAttribute::_valuePtr.
elessair 0:f269e3021894 157 */
elessair 0:f269e3021894 158 uint16_t _len;
elessair 0:f269e3021894 159 /**
elessair 0:f269e3021894 160 * Whether the length of the value can change over time.
elessair 0:f269e3021894 161 */
elessair 0:f269e3021894 162 bool _hasVariableLen;
elessair 0:f269e3021894 163 /**
elessair 0:f269e3021894 164 * The attribute's handle in the ATT table.
elessair 0:f269e3021894 165 */
elessair 0:f269e3021894 166 Handle_t _handle;
elessair 0:f269e3021894 167
elessair 0:f269e3021894 168 private:
elessair 0:f269e3021894 169 /* Disallow copy and assignment. */
elessair 0:f269e3021894 170 GattAttribute(const GattAttribute &);
elessair 0:f269e3021894 171 GattAttribute& operator=(const GattAttribute &);
elessair 0:f269e3021894 172 };
elessair 0:f269e3021894 173
elessair 0:f269e3021894 174 #endif /* ifndef __GATT_ATTRIBUTE_H__ */