mirror of
https://github.com/esphome/esphome.git
synced 2025-10-08 21:03:49 +01:00
[esp32_ble] Refactor ESPBTUUID::from_raw to use parse_hex helpers
This commit is contained in:
@@ -42,32 +42,18 @@ ESPBTUUID ESPBTUUID::from_raw_reversed(const uint8_t *data) {
|
|||||||
ESPBTUUID ESPBTUUID::from_raw(const std::string &data) {
|
ESPBTUUID ESPBTUUID::from_raw(const std::string &data) {
|
||||||
ESPBTUUID ret;
|
ESPBTUUID ret;
|
||||||
if (data.length() == 4) {
|
if (data.length() == 4) {
|
||||||
ret.uuid_.len = ESP_UUID_LEN_16;
|
// 16-bit UUID as 4-character hex string
|
||||||
ret.uuid_.uuid.uuid16 = 0;
|
auto parsed = parse_hex<uint16_t>(data);
|
||||||
for (uint i = 0; i < data.length(); i += 2) {
|
if (parsed.has_value()) {
|
||||||
uint8_t msb = data.c_str()[i];
|
ret.uuid_.len = ESP_UUID_LEN_16;
|
||||||
uint8_t lsb = data.c_str()[i + 1];
|
ret.uuid_.uuid.uuid16 = parsed.value();
|
||||||
uint8_t lsb_shift = i <= 2 ? (2 - i) * 4 : 0;
|
|
||||||
|
|
||||||
if (msb > '9')
|
|
||||||
msb -= 7;
|
|
||||||
if (lsb > '9')
|
|
||||||
lsb -= 7;
|
|
||||||
ret.uuid_.uuid.uuid16 += (((msb & 0x0F) << 4) | (lsb & 0x0F)) << lsb_shift;
|
|
||||||
}
|
}
|
||||||
} else if (data.length() == 8) {
|
} else if (data.length() == 8) {
|
||||||
ret.uuid_.len = ESP_UUID_LEN_32;
|
// 32-bit UUID as 8-character hex string
|
||||||
ret.uuid_.uuid.uuid32 = 0;
|
auto parsed = parse_hex<uint32_t>(data);
|
||||||
for (uint i = 0; i < data.length(); i += 2) {
|
if (parsed.has_value()) {
|
||||||
uint8_t msb = data.c_str()[i];
|
ret.uuid_.len = ESP_UUID_LEN_32;
|
||||||
uint8_t lsb = data.c_str()[i + 1];
|
ret.uuid_.uuid.uuid32 = parsed.value();
|
||||||
uint8_t lsb_shift = i <= 6 ? (6 - i) * 4 : 0;
|
|
||||||
|
|
||||||
if (msb > '9')
|
|
||||||
msb -= 7;
|
|
||||||
if (lsb > '9')
|
|
||||||
lsb -= 7;
|
|
||||||
ret.uuid_.uuid.uuid32 += (((msb & 0x0F) << 4) | (lsb & 0x0F)) << lsb_shift;
|
|
||||||
}
|
}
|
||||||
} else if (data.length() == 16) { // how we can have 16 byte length string reprezenting 128 bit uuid??? needs to be
|
} else if (data.length() == 16) { // how we can have 16 byte length string reprezenting 128 bit uuid??? needs to be
|
||||||
// investigated (lack of time)
|
// investigated (lack of time)
|
||||||
|
Reference in New Issue
Block a user