| 382 | } |
| 383 | |
| 384 | void BrainAlive::read_data (simpleble_uuid_t service, simpleble_uuid_t characteristic, |
| 385 | const uint8_t *data, size_t size, int channel_num) |
| 386 | { |
| 387 | if (size == brainalive_packet_size) |
| 388 | { |
| 389 | for (int i = 0; i < (int)size; i += brainalive_single_packet_size) |
| 390 | { |
| 391 | |
| 392 | int num_rows = board_descr["default"]["num_rows"]; |
| 393 | double *package = new double[num_rows]; |
| 394 | for (int i = 0; i < num_rows; i++) |
| 395 | { |
| 396 | package[i] = 0.0; |
| 397 | } |
| 398 | std::vector<int> eeg_channels = board_descr["default"]["eeg_channels"]; |
| 399 | std::vector<int> accel_channels = board_descr["default"]["accel_channels"]; |
| 400 | std::vector<int> gyro_channels = board_descr["default"]["gyro_channels"]; |
| 401 | |
| 402 | package[board_descr["default"]["package_num_channel"].get<int> ()] = |
| 403 | data[brainalive_packet_index + i]; |
| 404 | |
| 405 | for (int j = i + brainalive_eeg_Start_index, k = 0; j < i + brainalive_eeg_end_index; |
| 406 | j += 3, k++) |
| 407 | { |
| 408 | package[eeg_channels[k]] = |
| 409 | (float)(((data[j] << 16 | data[j + 1] << 8 | data[j + 2]) << 8) >> 8) * |
| 410 | ((((float)get_ref_voltage () * 1000) / |
| 411 | (float)(get_internal_gain () * get_external_gain () * FSR_Value))); |
| 412 | } |
| 413 | |
| 414 | for (int j = i + brainalive_axl_start_index, k = 0; j < i + brainalive_axl_end_index; |
| 415 | j += 2, k++) |
| 416 | { |
| 417 | package[accel_channels[k]] = (data[j] << 8) | data[j + 1]; |
| 418 | if (package[accel_channels[k]] > 32767) |
| 419 | package[accel_channels[k]] = package[accel_channels[k]] - 65535; |
| 420 | } |
| 421 | for (int j = i + brainalive_gyro_start_index, k = 0; j < i + brainalive_gyro_end_index; |
| 422 | j += 2, k++) |
| 423 | { |
| 424 | package[gyro_channels[k]] = (data[j] << 8) | data[j + 1]; |
| 425 | if (package[gyro_channels[k]] > 32767) |
| 426 | package[gyro_channels[k]] = package[gyro_channels[k]] - 65535; |
| 427 | } |
| 428 | package[board_descr["default"]["marker_channel"].get<int> ()] = |
| 429 | data[(brainalive_packet_index + 1) + i]; |
| 430 | package[board_descr["default"]["timestamp_channel"].get<int> ()] = get_timestamp (); |
| 431 | |
| 432 | push_package (&package[0]); |
| 433 | } |
| 434 | } |
| 435 | else |
| 436 | { |
| 437 | safe_logger (spdlog::level::warn, "unknown size of BrainAlive Data {}", size); |
| 438 | return; |
| 439 | } |
| 440 | } |
no test coverage detected