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

Method read_thread

src/board_controller/emotibit/emotibit.cpp:181–431  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

179}
180
181void Emotibit::read_thread ()
182{
183 constexpr int max_size = 32768;
184 char message[max_size];
185
186 // emotibit sends multiple data points per transaction and for example accelerometer x and y
187 // data are in different transactions, we have to align them and use max_datapoints_in_package
188 // arrays instead single one
189 constexpr int max_datapoints_in_package =
190 1024; // experimental(random) value, in practice I saw max 9
191 double *default_packages[max_datapoints_in_package];
192 double *aux_packages[max_datapoints_in_package];
193 double *anc_packages[max_datapoints_in_package];
194 int num_default_rows = board_descr["default"]["num_rows"];
195 int num_aux_rows = board_descr["auxiliary"]["num_rows"];
196 int num_anc_rows = board_descr["ancillary"]["num_rows"];
197
198 for (int cur_package = 0; cur_package < max_datapoints_in_package; cur_package++)
199 {
200 default_packages[cur_package] = new double[num_default_rows];
201 for (int i = 0; i < num_default_rows; i++)
202 {
203 default_packages[cur_package][i] = 0.0;
204 }
205 aux_packages[cur_package] = new double[num_aux_rows];
206 for (int i = 0; i < num_aux_rows; i++)
207 {
208 aux_packages[cur_package][i] = 0.0;
209 }
210 anc_packages[cur_package] = new double[num_anc_rows];
211 for (int i = 0; i < num_anc_rows; i++)
212 {
213 anc_packages[cur_package][i] = 0.0;
214 }
215 }
216
217 while (keep_alive)
218 {
219 int bytes_recv = data_socket->recv (message, max_size);
220 if (bytes_recv < 1)
221 {
222 safe_logger (spdlog::level::trace, "no data received");
223 continue;
224 }
225 std::string message_received = std::string (message, bytes_recv);
226 std::vector<std::string> splitted_packages =
227 split_string (message_received, PACKET_DELIMITER_CSV);
228 for (std::string recv_package : splitted_packages)
229 {
230 int package_num = 0;
231 int data_len = 0;
232 std::string type_tag = "";
233 if (get_header (recv_package, &package_num, &data_len, type_tag))
234 {
235 // default package
236 std::vector<std::string> payload = get_payload (recv_package, data_len);
237 int channel = -1;
238 if (type_tag == ACCELEROMETER_X)

Callers 1

start_streamMethod · 0.95

Calls 2

get_timestampFunction · 0.85
recvMethod · 0.45

Tested by

no test coverage detected