| 509 | } |
| 510 | |
| 511 | void GanglionNative::read_data ( |
| 512 | simpleble_uuid_t service, simpleble_uuid_t characteristic, const uint8_t *data, size_t size) |
| 513 | { |
| 514 | if (size < 2) |
| 515 | { |
| 516 | safe_logger (spdlog::level::warn, "unexpected number of bytes received: {}", size); |
| 517 | return; |
| 518 | } |
| 519 | |
| 520 | int num_rows = board_descr["default"]["num_rows"]; |
| 521 | double *package = new double[num_rows]; |
| 522 | |
| 523 | for (int i = 0; i < num_rows; i++) |
| 524 | { |
| 525 | package[i] = 0.0; |
| 526 | } |
| 527 | |
| 528 | if (data[0] <= 200 && size == 20) |
| 529 | { |
| 530 | if (firmware == 3) |
| 531 | { |
| 532 | decompress_firmware_3 (data, package); |
| 533 | } |
| 534 | else if (firmware == 2) |
| 535 | { |
| 536 | decompress_firmware_2 (data, package); |
| 537 | } |
| 538 | delete[] package; |
| 539 | } |
| 540 | else if ((data[0] > 200) && (data[0] < 206)) |
| 541 | { |
| 542 | // ASCII string with value and 'Z' in the end |
| 543 | int val = 0; |
| 544 | int i = 0; |
| 545 | for (i = 1; i < 6; i++) |
| 546 | { |
| 547 | if (data[i] == 'Z') |
| 548 | { |
| 549 | break; |
| 550 | } |
| 551 | } |
| 552 | std::string ascii_value ((const char *)(data + 1), i - 1); |
| 553 | |
| 554 | try |
| 555 | { |
| 556 | val = std::stoi (ascii_value); |
| 557 | } |
| 558 | catch (...) |
| 559 | { |
| 560 | safe_logger ( |
| 561 | spdlog::level::err, "failed to parse impedance data: {}", ascii_value.c_str ()); |
| 562 | delete[] package; |
| 563 | return; |
| 564 | } |
| 565 | |
| 566 | switch (data[0] % 10) |
| 567 | { |
| 568 | case 1: |
no test coverage detected