aboutsummaryrefslogtreecommitdiff
path: root/include/ble/misc.h
diff options
context:
space:
mode:
authorTrygve Laugstøl <trygvis@inamo.no>2018-11-22 19:30:14 +0100
committerTrygve Laugstøl <trygvis@inamo.no>2018-11-22 22:34:59 +0100
commitd88eee8fcf23e20ae76b3dd346b36af693849ccd (patch)
tree31407c1ef67b8e6a7f96189fc29906d70500346e /include/ble/misc.h
parente8aa2eadf309fbc0c0e1418c6bee482e505fa09b (diff)
downloadble-toys-d88eee8fcf23e20ae76b3dd346b36af693849ccd.tar.gz
ble-toys-d88eee8fcf23e20ae76b3dd346b36af693849ccd.tar.bz2
ble-toys-d88eee8fcf23e20ae76b3dd346b36af693849ccd.tar.xz
ble-toys-d88eee8fcf23e20ae76b3dd346b36af693849ccd.zip
o Working enabling of notifications.
Diffstat (limited to 'include/ble/misc.h')
-rw-r--r--include/ble/misc.h46
1 files changed, 45 insertions, 1 deletions
diff --git a/include/ble/misc.h b/include/ble/misc.h
index 2508d8e..70a19f5 100644
--- a/include/ble/misc.h
+++ b/include/ble/misc.h
@@ -1,7 +1,8 @@
#pragma once
-#include <optional>
+#include "ByteBuffer.h"
+#include <optional>
#include <cstring>
#include <cctype>
#include <stdexcept>
@@ -34,6 +35,10 @@ struct Uuid {
std::memcpy(this->value, value, 16);
}
+ explicit Uuid(ByteBuffer& buffer) noexcept : value() {
+ std::memcpy(value, buffer.cbegin(), 16);
+ }
+
Uuid(uint8_t b0, uint8_t b1, uint8_t b2, uint8_t b3, uint8_t b4, uint8_t b5, uint8_t b6, uint8_t b7,
uint8_t b8, uint8_t b9, uint8_t b10, uint8_t b11, uint8_t b12, uint8_t b13, uint8_t b14, uint8_t b15) noexcept : value{
b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15} {}
@@ -62,6 +67,8 @@ private:
public:
explicit ShortUuid(uint16_t value) noexcept : value(value) {}
+ explicit ShortUuid(ByteBuffer& buffer) noexcept : value(buffer.read16le()) {}
+
Uuid toLong() const noexcept
{
auto b2 = static_cast<uint8_t>(value >> 8);
@@ -91,5 +98,42 @@ const ShortUuid CLIENT_CHARACTERISTIC_CONFIG{0x2902};
const ShortUuid TemperatureMeasurement{0x2A1C};
}
+class CharacteristicProperties {
+public:
+ const uint16_t value;
+
+ bool broadcast() {
+ return static_cast<bool>(value & 0x01);
+ }
+
+ bool read() {
+ return static_cast<bool>(value & 0x02);
+ }
+
+ bool writeWithoutResponse() {
+ return static_cast<bool>(value & 0x04);
+ }
+
+ bool write() {
+ return static_cast<bool>(value & 0x08);
+ }
+
+ bool notify() {
+ return static_cast<bool>(value & 0x10);
+ }
+
+ bool indicate() {
+ return static_cast<bool>(value & 0x20);
+ }
+
+ bool authenticatedSignedWrites() {
+ return static_cast<bool>(value & 0x40);
+ }
+
+ bool extendedProperties() {
+ return static_cast<bool>(value & 0x80);
+ }
+};
+
} // namespace bluetooth
} // namespace trygvis