Skip to content

Commit 5e9029f

Browse files
committed
Add support for Muse S Anthena device
Signed-off-by: Andrey Parfenov <[email protected]>
1 parent b859225 commit 5e9029f

File tree

14 files changed

+528
-5
lines changed

14 files changed

+528
-5
lines changed

csharp_package/brainflow/brainflow/board_controller_library.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ public enum BoardIds
124124
SYNCHRONI_UNO_1_CHANNELS_BOARD = 62,
125125
OB3000_24_CHANNELS_BOARD = 63,
126126
BIOLISTENER_BOARD = 64,
127+
MUSE_S_ANTHENA_BOARD = 65
127128
};
128129

129130

java_package/brainflow/src/main/java/brainflow/BoardIds.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,8 @@ public enum BoardIds
7373
SYNCHRONI_PENTO_8_CHANNELS_BOARD(61),
7474
SYNCHRONI_UNO_1_CHANNELS_BOARD(62),
7575
OB3000_24_CHANNELS_BOARD(63),
76-
BIOLISTENER_BOARD(64);
76+
BIOLISTENER_BOARD(64),
77+
MUSE_S_ANTHENA_BOARD(65);
7778

7879
private final int board_id;
7980
private static final Map<Integer, BoardIds> bi_map = new HashMap<Integer, BoardIds> ();

julia_package/brainflow/src/board_shim.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ export BrainFlowInputParams
6969
SYNCHRONI_UNO_1_CHANNELS_BOARD = 62
7070
OB3000_24_CHANNELS_BOARD = 63
7171
BIOLISTENER_BOARD = 64
72+
MUSE_S_ANTHENA_BOARD = 65
7273

7374
end
7475

matlab_package/brainflow/BoardIds.m

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,5 +67,6 @@
6767
SYNCHRONI_UNO_1_CHANNELS_BOARD(62)
6868
OB3000_24_CHANNELS_BOARD(63)
6969
BIOLISTENER_BOARD(64)
70+
MUSE_S_ANTHENA_BOARD(65)
7071
end
7172
end

nodejs_package/brainflow/brainflow.types.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,8 @@ export enum BoardIds {
7676
SYNCHRONI_PENTO_8_CHANNELS_BOARD = 61,
7777
SYNCHRONI_UNO_1_CHANNELS_BOARD = 62,
7878
OB3000_24_CHANNELS_BOARD = 63,
79-
BIOLISTENER_BOARD = 64
79+
BIOLISTENER_BOARD = 64,
80+
MUSE_S_ANTHENA_BOARD = 65
8081
}
8182

8283
export enum IpProtocolTypes {

python_package/brainflow/board_shim.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ class BoardIds(enum.IntEnum):
8282
SYNCHRONI_UNO_1_CHANNELS_BOARD = 62 #:
8383
OB3000_24_CHANNELS_BOARD = 63 #:
8484
BIOLISTENER_BOARD = 64 #:
85+
MUSE_S_ANTHENA_BOARD = 65 #:
8586

8687

8788
class IpProtocolTypes(enum.IntEnum):

src/board_controller/board_controller.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
#include "json.hpp"
5050
#include "knight.h"
5151
#include "muse.h"
52+
#include "muse_anthena.h"
5253
#include "muse_bled.h"
5354
#include "notion_osc.h"
5455
#include "ntl_wifi.h"
@@ -237,6 +238,9 @@ int prepare_session (int board_id, const char *json_brainflow_input_params)
237238
case BoardIds::MUSE_S_BOARD:
238239
board = std::shared_ptr<Board> (new Muse (board_id, params));
239240
break;
241+
case BoardIds::MUSE_S_ANTHENA_BOARD:
242+
board = std::shared_ptr<Board> (new MuseAnthena (board_id, params));
243+
break;
240244
case BoardIds::BRAINALIVE_BOARD:
241245
board = std::shared_ptr<Board> (new BrainAlive (params));
242246
break;

src/board_controller/brainflow_boards.cpp

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,8 @@ BrainFlowBoards::BrainFlowBoards()
8282
{"61", json::object()},
8383
{"62", json::object()},
8484
{"63", json::object()},
85-
{"64", json::object()}
85+
{"64", json::object()},
86+
{"65", json::object()}
8687
}
8788
}};
8889

@@ -1221,6 +1222,29 @@ BrainFlowBoards::BrainFlowBoards()
12211222
{"battery_channel", 8},
12221223
{"other_channels", {9, 10}}
12231224
};
1225+
brainflow_boards_json["boards"]["65"]["default"] =
1226+
{
1227+
{"name", "MuseAnthena"},
1228+
{"sampling_rate", 256},
1229+
{"timestamp_channel", 6},
1230+
{"marker_channel", 7},
1231+
{"package_num_channel", 0},
1232+
{"num_rows", 8},
1233+
{"eeg_channels", {1, 2, 3, 4}},
1234+
{"eeg_names", "TP9,AF7,AF8,TP10"},
1235+
{"other_channels", {5}}
1236+
};
1237+
brainflow_boards_json["boards"]["65"]["auxiliary"] =
1238+
{
1239+
{"name", "MuseAnthenaAux"},
1240+
{"sampling_rate", 52},
1241+
{"timestamp_channel", 7},
1242+
{"marker_channel", 8},
1243+
{"package_num_channel", 0},
1244+
{"num_rows", 9},
1245+
{"accel_channels", {1, 2, 3}},
1246+
{"gyro_channels", {4, 5, 6}}
1247+
};
12241248
}
12251249

12261250
BrainFlowBoards boards_struct;

src/board_controller/build.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ SET (BOARD_CONTROLLER_SRC
8080
${CMAKE_CURRENT_SOURCE_DIR}/src/board_controller/enophone/enophone.cpp
8181
${CMAKE_CURRENT_SOURCE_DIR}/src/board_controller/ble_lib_board.cpp
8282
${CMAKE_CURRENT_SOURCE_DIR}/src/board_controller/muse/muse.cpp
83+
${CMAKE_CURRENT_SOURCE_DIR}/src/board_controller/muse/muse_anthena.cpp
8384
${CMAKE_CURRENT_SOURCE_DIR}/src/board_controller/brainalive/brainalive.cpp
8485
${CMAKE_CURRENT_SOURCE_DIR}/src/board_controller/emotibit/emotibit.cpp
8586
${CMAKE_CURRENT_SOURCE_DIR}/src/board_controller/ntl/ntl_wifi.cpp
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
#pragma once
2+
3+
#include <condition_variable>
4+
#include <mutex>
5+
#include <utility>
6+
#include <vector>
7+
8+
#include "ble_lib_board.h"
9+
10+
11+
class MuseAnthena : public BLELibBoard
12+
{
13+
14+
protected:
15+
volatile simpleble_adapter_t muse_adapter;
16+
volatile simpleble_peripheral_t muse_peripheral;
17+
bool initialized;
18+
bool is_streaming;
19+
std::mutex m;
20+
std::condition_variable cv;
21+
std::vector<std::pair<simpleble_uuid_t, simpleble_uuid_t>> notified_characteristics;
22+
std::pair<simpleble_uuid_t, simpleble_uuid_t> control_characteristics;
23+
24+
std::string bytes_to_string (const uint8_t *data, size_t size);
25+
26+
public:
27+
MuseAnthena (int board_id, struct BrainFlowInputParams params);
28+
~MuseAnthena ();
29+
30+
int prepare_session ();
31+
int start_stream (int buffer_size, const char *streamer_params);
32+
int stop_stream ();
33+
int release_session ();
34+
int config_board (std::string config, std::string &response);
35+
int config_board (std::string config);
36+
37+
void adapter_on_scan_found (simpleble_adapter_t adapter, simpleble_peripheral_t peripheral);
38+
void peripheral_on_eeg (simpleble_peripheral_t peripheral, simpleble_uuid_t service,
39+
simpleble_uuid_t characteristic, const uint8_t *data, size_t size);
40+
void peripheral_on_aux (simpleble_peripheral_t peripheral, simpleble_uuid_t service,
41+
simpleble_uuid_t characteristic, const uint8_t *data, size_t size);
42+
void peripheral_on_status (simpleble_peripheral_t peripheral, simpleble_uuid_t service,
43+
simpleble_uuid_t characteristic, const uint8_t *data, size_t size);
44+
};

0 commit comments

Comments
 (0)