| 282 | return props; |
| 283 | } |
| 284 | parsePermissions(permissions) { |
| 285 | let perms = []; |
| 286 | let readPerms = 0; |
| 287 | let writePerms = 0; |
| 288 | permissions.forEach(p => { |
| 289 | switch(p.trim()) { |
| 290 | case "read": |
| 291 | ++readPerms; |
| 292 | perms.push("ESP_GATT_PERM_READ"); |
| 293 | break; |
| 294 | case "readEncrypted": |
| 295 | ++readPerms; |
| 296 | perms.push("ESP_GATT_PERM_READ_ENCRYPTED"); |
| 297 | break; |
| 298 | case "write": |
| 299 | ++writePerms; |
| 300 | perms.push("ESP_GATT_PERM_WRITE"); |
| 301 | break; |
| 302 | case "writeEncrypted": |
| 303 | ++writePerms; |
| 304 | perms.push("ESP_GATT_PERM_WRITE_ENCRYPTED"); |
| 305 | break; |
| 306 | default: |
| 307 | throw new Error("unsupported permission"); |
| 308 | } |
| 309 | }); |
| 310 | if (readPerms > 1) |
| 311 | throw new Error("only one of read/readEncrypted can be specified"); |
| 312 | if (writePerms > 1) |
| 313 | throw new Error("only one of write/writeEncrypted can be specified"); |
| 314 | |
| 315 | return perms.join("|"); |
| 316 | } |
| 317 | writeAttributeValue(file, attribute, index, prefix) { |
| 318 | let buffer = typedValueToBuffer(attribute.type, attribute.value); |
| 319 | attribute._length = buffer.byteLength; |