Общение с устройствами Neuroplay по протоколу Bluetooth 4 (BLE)

Режим работы устройств

Устройства Neuroplay работают в режимах с частотой опроса кратной 125 Гц. Выбор режима работы заключается в задании частоты. Любое устройство Neuroplay в независимости от реального числа каналов получает по 8 сэмплов. Распределение каналов в сэмпле: Особые Bluetooth-сервисы устройств Neuroplay:

Разбор пакетов и получение семплов

Каждая нотификация от сервиса BLUETOOTH_UUID_EEG занимает 20 байт. Необходимо накопить 4 таких посылки и разобрать на семплы [FN1,??,A3,A2,A1,B3,B2,B1,C3,C2,C1,D3,D2,D1,E3,E2,E1,F3,F2,F1] [FN2,??,G3,G2,G1,H3,H2,H1,I3,I2,I1,J3,J2,J1,K3,K2,K1,L3,L2,L1] [FN3,??,M3,M2,M1,N3,N2,N1,O3,O2,O1,P3,P2,P1,Q3,Q2,Q1,R3,R2,R1] [FN3,??,S3,S2,S1,T3,T2,T1,U3,U2,U1,V3,V2,V1,W3,W2,W1,X3,X2,X1] Здесь FNi - номер посылки (frame number), причём FNi+1 = FNi + 1 Из посылки надо взять последние 18 байт (3 байта * 6 значений). Каждые три байта надо сложить в int32 (состоящий из 4 байт) в таком порядке: INT32 SampleA = [0x00, A1, A2, A3]; Умножить на коэффициент приведения к микровольтам MAGIC_MICROVOLTS_BIT = 0.000186265 double SA = MAGIC_MICROVOLTS_BIT * SampleA; Таким образом получится массив [SA,SB,SC,SD,SE,SF,SG,SH,SI,SJ,SK,SL,SM,SN,SO,SP,SQ,SR,SS,ST,SU,SV,SW,SX] Иначе говоря, масcив из 24 значений. Он представляет собой channel-wise пачки по 3 сэмпла. SAMPLES = [[S1_01...S1_08], [S2_01...S2_08], [S3_01...S3_08]] Распределение сэмплов по реальным каналам

Резюме

    Поиск и запуск
  1. Поиск устройств по сервису BLUETOOTH_UUID_EEG
  2. Выставить начало опроса BLUETOOTH_UUID_EEG_DATAENABLE –> [0x01, 0x00]
  3. Выставить количество каналов BLUETOOTH_UUID_EEG_CONTROL –> [0x01, 0xNN]
  4. Выставить чтение нотификаций от сервиса BLUETOOTH_UUID_EEG
  5. Чтение данных
  6. Получать от BLUETOOTH_UUID_EEG по 20 байт за каждую нотификацию и копить массив посылок
  7. Как только в массиве будет 4 посылки (80 байт) – разбирать пакет и получать сэмплы
  8. Завершение
  9. Для окончания опроса отключить нотификации от BLUETOOTH_UUID_EEG и послать BLUETOOTH_UUID_EEG_DATAENABLE –> [0x00, 0x00]