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

Method read_thread

src/board_controller/freeeeg/freeeeg.cpp:132–187  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

130}
131
132void FreeEEG::read_thread ()
133{
134 int res;
135 constexpr int max_size = 1000; // random value bigger than package size which is unknown
136 unsigned char b[max_size] = {0};
137 float eeg_scale = FreeEEG::ads_vref / float ((pow (2, 23) - 1)) / FreeEEG::ads_gain * 1000000.;
138 int num_rows = board_descr["default"]["num_rows"];
139 double *package = new double[num_rows];
140 for (int i = 0; i < num_rows; i++)
141 {
142 package[i] = 0.0;
143 }
144 bool first_package_received = false;
145
146 std::vector<int> eeg_channels = board_descr["default"]["eeg_channels"];
147
148 while (keep_alive)
149 {
150 int pos = 0;
151 bool complete_package = false;
152 while ((keep_alive) && (pos < max_size - 2))
153 {
154 res = serial->read_from_serial_port (b + pos, 1);
155 int prev_id = (pos <= 0) ? 0 : pos - 1;
156 if ((b[pos] == FreeEEG::start_byte) && (b[prev_id] == FreeEEG::end_byte) &&
157 (pos >= min_package_size))
158 {
159 complete_package = true;
160 break;
161 }
162 pos += res;
163 }
164 if (complete_package)
165 {
166 // handle the case that we start reading in the middle of data stream
167 if (!first_package_received)
168 {
169 first_package_received = true;
170 continue;
171 }
172 package[board_descr["default"]["package_num_channel"].get<int> ()] = (double)b[0];
173 for (unsigned int i = 0; i < eeg_channels.size (); i++)
174 {
175 package[eeg_channels[i]] = (double)eeg_scale * cast_24bit_to_int32 (b + 1 + 3 * i);
176 }
177 package[board_descr["default"]["timestamp_channel"].get<int> ()] = get_timestamp ();
178 push_package (package);
179 }
180 else
181 {
182 safe_logger (
183 spdlog::level::trace, "stopped with pos: {}, keep_alive: {}", pos, keep_alive);
184 }
185 }
186 delete[] package;
187}
188
189int FreeEEG::open_port ()

Callers 1

start_streamMethod · 0.95

Calls 3

cast_24bit_to_int32Function · 0.85
get_timestampFunction · 0.85
read_from_serial_portMethod · 0.45

Tested by

no test coverage detected