@@ -70,46 +70,56 @@ static void memrcpy(uint8_t* target, uint8_t* source, uint32_t size) {
70
70
*/
71
71
BLEUUID::BLEUUID (std::string value) {
72
72
m_valueSet = true ;
73
- if (value.length () == 2 ) {
73
+ if (value.length () == 4 ) {
74
74
m_uuid.len = ESP_UUID_LEN_16;
75
- m_uuid.uuid .uuid16 = value[0 ] | (value[1 ] << 8 );
75
+ m_uuid.uuid .uuid16 = 0 ;
76
+ for (int i=0 ;i<value.length ();){
77
+ uint8_t MSB = value.c_str ()[i];
78
+ uint8_t LSB = value.c_str ()[i+1 ];
79
+
80
+ if (MSB > ' 9' ) MSB -= 7 ;
81
+ if (LSB > ' 9' ) LSB -= 7 ;
82
+ m_uuid.uuid .uuid16 += (((MSB&0x0F ) <<4 ) | (LSB & 0x0F ))<<(2 -i)*4 ;
83
+ i+=2 ;
84
+ }
76
85
}
77
- else if (value.length () == 4 ) {
86
+ else if (value.length () == 8 ) {
78
87
m_uuid.len = ESP_UUID_LEN_32;
79
- m_uuid.uuid .uuid32 = value[0 ] | (value[1 ] << 8 ) | (value[2 ] << 16 ) | (value[3 ] << 24 );
88
+ m_uuid.uuid .uuid32 = 0 ;
89
+ for (int i=0 ;i<value.length ();){
90
+ uint8_t MSB = value.c_str ()[i];
91
+ uint8_t LSB = value.c_str ()[i+1 ];
92
+
93
+ if (MSB > ' 9' ) MSB -= 7 ;
94
+ if (LSB > ' 9' ) LSB -= 7 ;
95
+ m_uuid.uuid .uuid32 += (((MSB&0x0F ) <<4 ) | (LSB & 0x0F ))<<(6 -i)*4 ;
96
+ i+=2 ;
97
+ }
98
+ }
99
+ }
80
100
}
81
- else if (value.length () == 16 ) {
101
+ else if (value.length() == 16 ) { // how we can have 16 byte length string reprezenting 128 bit uuid??? needs to be investigated (lack of time)
82
102
m_uuid.len = ESP_UUID_LEN_128;
83
- memrcpy (m_uuid.uuid .uuid128 , (uint8_t *) value.data (), 16 );
103
+ memrcpy (m_uuid.uuid .uuid128 , (uint8_t *)value.data (), 16 );
84
104
}
85
105
else if (value.length() == 36 ) {
86
106
// If the length of the string is 36 bytes then we will assume it is a long hex string in
87
107
// UUID format.
88
108
m_uuid.len = ESP_UUID_LEN_128;
89
- int vals[16 ];
90
- sscanf (value.c_str (), " %2x%2x%2x%2x-%2x%2x-%2x%2x-%2x%2x-%2x%2x%2x%2x%2x%2x" ,
91
- &vals[15 ],
92
- &vals[14 ],
93
- &vals[13 ],
94
- &vals[12 ],
95
- &vals[11 ],
96
- &vals[10 ],
97
- &vals[9 ],
98
- &vals[8 ],
99
- &vals[7 ],
100
- &vals[6 ],
101
- &vals[5 ],
102
- &vals[4 ],
103
- &vals[3 ],
104
- &vals[2 ],
105
- &vals[1 ],
106
- &vals[0 ]
107
- );
108
-
109
- for (int i = 0 ; i < 16 ; i++) {
110
- m_uuid.uuid .uuid128 [i] = vals[i];
109
+ int n = 0 ;
110
+ for (int i=0 ;i<value.length ();){
111
+ if (value.c_str ()[i] == ' -' )
112
+ i++;
113
+ uint8_t MSB = value.c_str ()[i];
114
+ uint8_t LSB = value.c_str ()[i+1 ];
115
+
116
+ if (MSB > ' 9' ) MSB -= 7 ;
117
+ if (LSB > ' 9' ) LSB -= 7 ;
118
+ m_uuid.uuid .uuid128 [15 -n++] = ((MSB&0x0F ) <<4 ) | (LSB & 0x0F );
119
+ i+=2 ;
111
120
}
112
- } else {
121
+ }
122
+ else {
113
123
ESP_LOGE (LOG_TAG, " ERROR: UUID value not 2, 4, 16 or 36 bytes" );
114
124
m_valueSet = false ;
115
125
}
@@ -249,7 +259,7 @@ BLEUUID BLEUUID::fromString(std::string _uuid) {
249
259
}
250
260
uint8_t len = _uuid.length () - start; // Calculate the length of the string we are going to use.
251
261
252
- if (len == 4 ) {
262
+ if (len == 4 ) {
253
263
uint16_t x = strtoul (_uuid.substr (start, len).c_str (), NULL , 16 );
254
264
return BLEUUID (x);
255
265
} else if (len == 8 ) {
@@ -269,7 +279,7 @@ BLEUUID BLEUUID::fromString(std::string _uuid) {
269
279
*/
270
280
esp_bt_uuid_t * BLEUUID::getNative () {
271
281
// ESP_LOGD(TAG, ">> getNative()")
272
- if (! m_valueSet) {
282
+ if (m_valueSet == false ) {
273
283
ESP_LOGD (LOG_TAG, " << Return of un-initialized UUID!" );
274
284
return nullptr ;
275
285
}
0 commit comments