aboutsummaryrefslogtreecommitdiffstats
path: root/arduino/libraries/Bluefruit52Lib/src/BLECharacteristic.h
diff options
context:
space:
mode:
authorClyne Sullivan <tullivan99@gmail.com>2019-02-28 17:04:22 -0500
committerClyne Sullivan <tullivan99@gmail.com>2019-02-28 17:04:22 -0500
commitd6869d1ec4bd24cd2c3eafa534f0849b25ec5607 (patch)
tree79e54ed27b39c31864895535d11399708d5a45c0 /arduino/libraries/Bluefruit52Lib/src/BLECharacteristic.h
parent614ee97bf3a2270c413527a7f35c54cbecd9e601 (diff)
added basic code
Diffstat (limited to 'arduino/libraries/Bluefruit52Lib/src/BLECharacteristic.h')
-rwxr-xr-xarduino/libraries/Bluefruit52Lib/src/BLECharacteristic.h198
1 files changed, 198 insertions, 0 deletions
diff --git a/arduino/libraries/Bluefruit52Lib/src/BLECharacteristic.h b/arduino/libraries/Bluefruit52Lib/src/BLECharacteristic.h
new file mode 100755
index 0000000..f0b1d9e
--- /dev/null
+++ b/arduino/libraries/Bluefruit52Lib/src/BLECharacteristic.h
@@ -0,0 +1,198 @@
+/**************************************************************************/
+/*!
+ @file BLECharacteristic.h
+ @author hathach (tinyusb.org)
+
+ @section LICENSE
+
+ Software License Agreement (BSD License)
+
+ Copyright (c) 2018, Adafruit Industries (adafruit.com)
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. Neither the name of the copyright holders nor the
+ names of its contributors may be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
+ EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+/**************************************************************************/
+#ifndef BLECHARACTERISTIC_H_
+#define BLECHARACTERISTIC_H_
+
+#include "bluefruit_common.h"
+#include "BLEUuid.h"
+
+// Forward declaration
+class AdafruitBluefruit;
+class BLEService;
+
+enum BleSecurityMode
+{
+ SECMODE_NO_ACCESS = 0x00,
+ SECMODE_OPEN = 0x11,
+ SECMODE_ENC_NO_MITM = 0x21,
+ SECMODE_ENC_WITH_MITM = 0x31,
+ SECMODE_SIGNED_NO_MITM = 0x12,
+ SECMODE_SIGNED_WITH_MITM = 0x22
+};
+
+#define BLE_SECMODE_NO_ACCESS ((ble_gap_conn_sec_mode_t) { .sm = 0, .lv = 0 })
+#define BLE_SECMODE_OPEN ((ble_gap_conn_sec_mode_t) { .sm = 1, .lv = 1 })
+#define BLE_SECMODE_ENC_NO_MITM ((ble_gap_conn_sec_mode_t) { .sm = 1, .lv = 2 })
+#define BLE_SECMODE_ENC_WITH_MITM ((ble_gap_conn_sec_mode_t) { .sm = 1, .lv = 3 })
+#define BLE_SECMODE_SIGNED_NO_MITM ((ble_gap_conn_sec_mode_t) { .sm = 2, .lv = 1 })
+#define BLE_SECMODE_SIGNED_WITH_MITM ((ble_gap_conn_sec_mode_t) { .sm = 2, .lv = 2 })
+
+enum CharsProperties
+{
+ CHR_PROPS_BROADCAST = bit(0),
+ CHR_PROPS_READ = bit(1),
+ CHR_PROPS_WRITE_WO_RESP = bit(2),
+ CHR_PROPS_WRITE = bit(3),
+ CHR_PROPS_NOTIFY = bit(4),
+ CHR_PROPS_INDICATE = bit(5)
+};
+
+class BLECharacteristic
+{
+ public:
+ /*--------- Callback Signatures ----------*/
+ typedef void (*read_authorize_cb_t) (BLECharacteristic& chr, ble_gatts_evt_read_t * request);
+ typedef void (*write_authorize_cb_t) (BLECharacteristic& chr, ble_gatts_evt_write_t* request);
+ typedef void (*write_cb_t) (BLECharacteristic& chr, uint8_t* data, uint16_t len, uint16_t offset);
+ typedef void (*write_cccd_cb_t) (BLECharacteristic& chr, uint16_t value);
+
+ BLEUuid uuid;
+
+ // Constructors
+ BLECharacteristic(void);
+ BLECharacteristic(BLEUuid bleuuid);
+
+ // Destructor
+ virtual ~BLECharacteristic();
+
+ BLEService& parentService(void);
+
+ void setTempMemory(void);
+
+ /*------------- Configure -------------*/
+ void setUuid(BLEUuid bleuuid);
+ void setProperties(uint8_t prop);
+ void setPermission(BleSecurityMode read_perm, BleSecurityMode write_perm);
+ void setMaxLen(uint16_t max_len);
+ void setFixedLen(uint16_t fixed_len);
+
+ /*------------- Descriptors -------------*/
+ void setUserDescriptor(const char* descriptor); // aka user descriptor
+ void setReportRefDescriptor(uint8_t id, uint8_t type); // TODO refactor to use addDescriptor()
+ void setPresentationFormatDescriptor(uint8_t type, int8_t exponent, uint16_t unit, uint8_t name_space = 1, uint16_t descritpor = 0);
+
+ /*------------- Callbacks -------------*/
+ void setWriteCallback (write_cb_t fp);
+ void setCccdWriteCallback (write_cccd_cb_t fp);
+ void setReadAuthorizeCallback(read_authorize_cb_t fp);
+ void setWriteAuthorizeCallback(write_authorize_cb_t fp);
+
+ virtual err_t begin(void);
+
+ // Add Descriptor function must be called right after begin()
+ err_t addDescriptor(BLEUuid bleuuid, void const * content, uint16_t len, BleSecurityMode read_perm = SECMODE_OPEN, BleSecurityMode write_perm = SECMODE_NO_ACCESS);
+
+ ble_gatts_char_handles_t handles(void);
+
+ /*------------- Write -------------*/
+ uint16_t write(const void* data, uint16_t len);
+ uint16_t write(const char* str);
+
+ uint16_t write8 (uint8_t num);
+ uint16_t write16 (uint16_t num);
+ uint16_t write32 (uint32_t num);
+ uint16_t write32 (int num);
+
+
+ /*------------- Read -------------*/
+ uint16_t read(void* buffer, uint16_t bufsize, uint16_t offset = 0);
+
+ uint8_t read8 (void);
+ uint16_t read16(void);
+ uint32_t read32(void);
+
+ /*------------- Notify -------------*/
+ uint16_t getCccd(void);
+
+ bool notifyEnabled(void);
+
+ bool notify(const void* data, uint16_t len);
+ bool notify(const char* str);
+
+ bool notify8 (uint8_t num);
+ bool notify16 (uint16_t num);
+ bool notify32 (uint32_t num);
+ bool notify32 (int num);
+
+ /*------------- Indicate -------------*/
+ bool indicateEnabled(void);
+
+ bool indicate(const void* data, uint16_t len);
+ bool indicate(const char* str);
+
+ bool indicate8 (uint8_t num);
+ bool indicate16 (uint16_t num);
+ bool indicate32 (uint32_t num);
+ bool indicate32 (int num);
+
+ /*------------- Internal Functions -------------*/
+ virtual void _eventHandler(ble_evt_t* event);
+
+ protected:
+ bool _is_temp;
+ uint16_t _max_len;
+ BLEService* _service; // pointer to parent's service
+
+ /*------------- Descriptors -------------*/
+ const char* _usr_descriptor;
+ struct ATTR_PACKED {
+ uint8_t id;
+ uint8_t type;
+ }_report_ref_desc;
+
+ ble_gatts_char_pf_t _format_desc;
+ ble_gatt_char_props_t _properties;
+ ble_gatts_attr_md_t _attr_meta;
+ ble_gatts_char_handles_t _handles;
+
+ struct {
+ uint8_t* buffer;
+ uint16_t bufsize;
+ uint16_t count;
+ }_long_wr;
+
+ /*------------- Callback pointers -------------*/
+ read_authorize_cb_t _rd_authorize_cb;
+ write_authorize_cb_t _wr_authorize_cb;
+
+ write_cb_t _wr_cb;
+ write_cccd_cb_t _cccd_wr_cb;
+
+ /*------------- Internal Functions -------------*/
+ void _init(void);
+};
+
+#endif /* BLECHARACTERISTIC_H_ */