MCPcopy Create free account
hub / github.com/brainflow-dev/brainflow / parse_orientation_data

Method parse_orientation_data

src/board_controller/mentalab/explore.cpp:349–396  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

347}
348
349void Explore::parse_orientation_data (
350 const ExploreHeader *header, double *package, unsigned char *payload)
351{
352 int payload_size = header->payload_size;
353 if ((payload[payload_size - 4] != 0xAF) || (payload[payload_size - 3] != 0xBE) ||
354 (payload[payload_size - 2] != 0xAD) || (payload[payload_size - 1] != 0xDE))
355 {
356 safe_logger (spdlog::level::warn, "checksum failed, {} {} {} {}", payload[payload_size - 4],
357 payload[payload_size - 3], payload[payload_size - 2], payload[payload_size - 1]);
358 return;
359 }
360 payload_size = payload_size - 4;
361
362 std::vector<int> accel_channels = board_descr["auxiliary"]["accel_channels"];
363 std::vector<int> gyro_channels = board_descr["auxiliary"]["gyro_channels"];
364 std::vector<int> magnetometer_channels = board_descr["auxiliary"]["magnetometer_channels"];
365
366 if (payload_size % 2 != 0) // 2 is int16
367 {
368 safe_logger (spdlog::level::warn, "Invalid payload size for Orn package: {}");
369 return;
370 }
371 int num_datapoints = payload_size / 2;
372
373 for (int i = 0; i < num_datapoints; i++)
374 {
375 double data = (double)cast_16bit_to_int32_swap_order ((unsigned char *)(payload + 2 * i));
376 if (i < 3)
377 {
378 package[accel_channels[i]] = 0.061 * data;
379 }
380 else if (i < 6)
381 {
382 package[gyro_channels[i - 3]] = 8.750 * data;
383 }
384 else
385 {
386 if (i == 6)
387 {
388 data *= -1; // no idea why, copypaste, maybe bug in fw
389 }
390 package[magnetometer_channels[i - 6]] = 1.52 * data;
391 }
392 }
393 package[board_descr["auxiliary"]["timestamp_channel"].get<int> ()] = get_timestamp ();
394 package[board_descr["auxiliary"]["package_num_channel"].get<int> ()] = header->counter;
395 push_package (package, (int)BrainFlowPresets::AUXILIARY_PRESET);
396}
397
398void Explore::parse_eeg_data (const ExploreHeader *header, double *package, unsigned char *payload,
399 double vref, int n_packages)

Callers

nothing calls this directly

Calls 2

get_timestampFunction · 0.85

Tested by

no test coverage detected