| 461 | } |
| 462 | |
| 463 | void Explore::parse_env_data (const ExploreHeader *header, double *package, unsigned char *payload) |
| 464 | { |
| 465 | int payload_size = header->payload_size; |
| 466 | if ((payload[payload_size - 4] != 0xAF) || (payload[payload_size - 3] != 0xBE) || |
| 467 | (payload[payload_size - 2] != 0xAD) || (payload[payload_size - 1] != 0xDE)) |
| 468 | { |
| 469 | safe_logger (spdlog::level::warn, "checksum failed, {} {} {} {}", payload[payload_size - 4], |
| 470 | payload[payload_size - 3], payload[payload_size - 2], payload[payload_size - 1]); |
| 471 | return; |
| 472 | } |
| 473 | payload_size = payload_size - 4; |
| 474 | if (payload_size < 5) |
| 475 | { |
| 476 | safe_logger (spdlog::level::warn, "invalid size for env package: {}", payload_size); |
| 477 | return; |
| 478 | } |
| 479 | int temperature_channel = board_descr["ancillary"]["temperature_channels"][0]; |
| 480 | int battery_channel = board_descr["ancillary"]["battery_channel"]; |
| 481 | int other_channel = board_descr["ancillary"]["other_channels"][0]; |
| 482 | |
| 483 | uint16_t battery_raw = 0; |
| 484 | memcpy (&battery_raw, payload + 3, 2); |
| 485 | double battery = (16.8 / 6.8) * (1.8 / 2457) * battery_raw; |
| 486 | package[temperature_channel] = (double)payload[0]; |
| 487 | package[battery_channel] = get_battery_percentage (battery); |
| 488 | uint16_t light_raw = 0; |
| 489 | memcpy (&light_raw, payload + 1, 2); |
| 490 | package[other_channel] = (1000.0 / 4095.0) * light_raw; |
| 491 | package[board_descr["ancillary"]["timestamp_channel"].get<int> ()] = get_timestamp (); |
| 492 | package[board_descr["ancillary"]["package_num_channel"].get<int> ()] = header->counter; |
| 493 | push_package (package, (int)BrainFlowPresets::ANCILLARY_PRESET); |
| 494 | } |
| 495 | |
| 496 | double Explore::get_battery_percentage (double battery) |
| 497 | { |
nothing calls this directly
no test coverage detected