summaryrefslogtreecommitdiff
path: root/src/BLEUUID.cpp
diff options
context:
space:
mode:
authorkolban <kolban1@kolban.com>2017-10-13 10:52:17 -0500
committerkolban <kolban1@kolban.com>2017-10-13 10:52:17 -0500
commit34902f4e7fc6926a005a5ccfd4e530d6a6321613 (patch)
tree512593068ed656012ee31fced9526bff80ecad55 /src/BLEUUID.cpp
parentMerge pull request #5 from sebastiankliem/master (diff)
downloadthermostat-34902f4e7fc6926a005a5ccfd4e530d6a6321613.tar.gz
thermostat-34902f4e7fc6926a005a5ccfd4e530d6a6321613.tar.bz2
thermostat-34902f4e7fc6926a005a5ccfd4e530d6a6321613.zip
Sync update for 0.4.3 take 2
Diffstat (limited to 'src/BLEUUID.cpp')
-rw-r--r--src/BLEUUID.cpp102
1 files changed, 62 insertions, 40 deletions
diff --git a/src/BLEUUID.cpp b/src/BLEUUID.cpp
index 9a4fe45..19da518 100644
--- a/src/BLEUUID.cpp
+++ b/src/BLEUUID.cpp
@@ -35,6 +35,7 @@ static const char* LOG_TAG = "BLEUUID";
* @param [in] size The number of bytes to copy
*/
static void memrcpy(uint8_t* target, uint8_t* source, uint32_t size) {
+ assert(size > 0);
target+=(size-1); // Point target to the last byte of the target data
while (size > 0) {
*target = *source;
@@ -65,15 +66,18 @@ static void memrcpy(uint8_t* target, uint8_t* source, uint32_t size) {
BLEUUID::BLEUUID(std::string value) {
m_valueSet = true;
if (value.length() == 2) {
- m_uuid.len = ESP_UUID_LEN_16;
+ m_uuid.len = ESP_UUID_LEN_16;
m_uuid.uuid.uuid16 = value[0] | (value[1] << 8);
- } else if (value.length() == 4) {
- m_uuid.len = ESP_UUID_LEN_32;
+ }
+ else if (value.length() == 4) {
+ m_uuid.len = ESP_UUID_LEN_32;
m_uuid.uuid.uuid32 = value[0] | (value[1] << 8) | (value[2] << 16) | (value[3] << 24);
- } else if (value.length() == 16) {
+ }
+ else if (value.length() == 16) {
m_uuid.len = ESP_UUID_LEN_128;
memrcpy(m_uuid.uuid.uuid128, (uint8_t*)value.data(), 16);
- } else if (value.length() == 36) {
+ }
+ else if (value.length() == 36) {
// If the length of the string is 36 bytes then we will assume it is a long hex string in
// UUID format.
m_uuid.len = ESP_UUID_LEN_128;
@@ -130,6 +134,7 @@ BLEUUID::BLEUUID(uint8_t* pData, size_t size, bool msbFirst) {
m_valueSet = true;
} // BLEUUID
+
/**
* @brief Create a UUID from the 16bit value.
*
@@ -166,11 +171,11 @@ BLEUUID::BLEUUID(esp_bt_uuid_t uuid) {
/**
- * @brief Create a UUID from the ESP32 esp_gatt_srvc_id_t.
+ * @brief Create a UUID from the ESP32 esp_gat_id_t.
*
- * @param [in] srvcId The data to create the UUID from.
+ * @param [in] gattId The data to create the UUID from.
*/
-BLEUUID::BLEUUID(esp_gatt_srvc_id_t srcvId) : BLEUUID(srcvId.id.uuid) {
+BLEUUID::BLEUUID(esp_gatt_id_t gattId) : BLEUUID(gattId.uuid) {
} // BLEUUID
@@ -277,50 +282,67 @@ BLEUUID BLEUUID::to128() {
} // to128
-//01234567 8901 2345 6789 012345678901
-//0000180d-0000-1000-8000-00805f9b34fb
-//0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+
/**
* @brief Get a string representation of the UUID.
*
+ * The format of a string is:
+ * 01234567 8901 2345 6789 012345678901
+ * 0000180d-0000-1000-8000-00805f9b34fb
+ * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+ *
* @return A string representation of the UUID.
*/
std::string BLEUUID::toString() {
- if (m_valueSet == false) {
+ if (m_valueSet == false) { // If we have no value, nothing to format.
return "<NULL>";
}
- if (m_uuid.len == ESP_UUID_LEN_16) {
- std::stringstream ss;
- ss << "0000" << std::hex << std::setfill('0') << std::setw(4) << m_uuid.uuid.uuid16 << "-0000-1000-8000-00805f9b34fb";
- return ss.str();
- }
-
- if (m_uuid.len == ESP_UUID_LEN_32) {
- std::stringstream ss;
- ss << std::hex << std::setfill('0') << std::setw(8) << m_uuid.uuid.uuid32 << "-0000-1000-8000-00805f9b34fb";
- return ss.str();
- }
-
+ // If the UUIDs are 16 or 32 bit, pad correctly.
std::stringstream ss;
+
+ if (m_uuid.len == ESP_UUID_LEN_16) { // If the UUID is 16bit, pad correctly.
+ ss << "0000" <<
+ std::hex <<
+ std::setfill('0') <<
+ std::setw(4) <<
+ m_uuid.uuid.uuid16 <<
+ "-0000-1000-8000-00805f9b34fb";
+ return ss.str(); // Return the string
+ } // End 16bit UUID
+
+ if (m_uuid.len == ESP_UUID_LEN_32) { // If the UUID is 32bit, pad correctly.
+ ss << std::hex <<
+ std::setfill('0') <<
+ std::setw(8) <<
+ m_uuid.uuid.uuid32 <<
+ "-0000-1000-8000-00805f9b34fb";
+ return ss.str(); // return the string
+ } // End 32bit UUID
+
+ // The UUID is not 16bit or 32bit which means that it is 128bit.
+ //
+ // UUID string format:
+ // AABBCCDD-EEFF-GGHH-IIJJ-KKLLMMNNOOPP
+ //
ss << std::hex << std::setfill('0') <<
- std::setw(2) << (int)m_uuid.uuid.uuid128[15] <<
- std::setw(2) << (int)m_uuid.uuid.uuid128[14] <<
- std::setw(2) << (int)m_uuid.uuid.uuid128[13] <<
- std::setw(2) << (int)m_uuid.uuid.uuid128[12] << "-" <<
- std::setw(2) << (int)m_uuid.uuid.uuid128[11] <<
- std::setw(2) << (int)m_uuid.uuid.uuid128[10] << "-" <<
- std::setw(2) << (int)m_uuid.uuid.uuid128[9] <<
- std::setw(2) << (int)m_uuid.uuid.uuid128[8] << "-" <<
- std::setw(2) << (int)m_uuid.uuid.uuid128[7] <<
- std::setw(2) << (int)m_uuid.uuid.uuid128[6] << "-" <<
- std::setw(2) << (int)m_uuid.uuid.uuid128[5] <<
- std::setw(2) << (int)m_uuid.uuid.uuid128[4] <<
- std::setw(2) << (int)m_uuid.uuid.uuid128[3] <<
- std::setw(2) << (int)m_uuid.uuid.uuid128[2] <<
- std::setw(2) << (int)m_uuid.uuid.uuid128[1] <<
- std::setw(2) << (int)m_uuid.uuid.uuid128[0];
+ std::setw(2) << (int)m_uuid.uuid.uuid128[15] <<
+ std::setw(2) << (int)m_uuid.uuid.uuid128[14] <<
+ std::setw(2) << (int)m_uuid.uuid.uuid128[13] <<
+ std::setw(2) << (int)m_uuid.uuid.uuid128[12] << "-" <<
+ std::setw(2) << (int)m_uuid.uuid.uuid128[11] <<
+ std::setw(2) << (int)m_uuid.uuid.uuid128[10] << "-" <<
+ std::setw(2) << (int)m_uuid.uuid.uuid128[9] <<
+ std::setw(2) << (int)m_uuid.uuid.uuid128[8] << "-" <<
+ std::setw(2) << (int)m_uuid.uuid.uuid128[7] <<
+ std::setw(2) << (int)m_uuid.uuid.uuid128[6] << "-" <<
+ std::setw(2) << (int)m_uuid.uuid.uuid128[5] <<
+ std::setw(2) << (int)m_uuid.uuid.uuid128[4] <<
+ std::setw(2) << (int)m_uuid.uuid.uuid128[3] <<
+ std::setw(2) << (int)m_uuid.uuid.uuid128[2] <<
+ std::setw(2) << (int)m_uuid.uuid.uuid128[1] <<
+ std::setw(2) << (int)m_uuid.uuid.uuid128[0];
return ss.str();
} // toString
#endif /* CONFIG_BT_ENABLED */