History

don't kill serial when polling too quickly

Stephen Birarda committed 13 years ago

Commit 9774dd51 parent fd73b8d2 files · +14 −15Browse files

Showing the changes to interface/src/SerialInterface.cpp (1 of 2 files). Show all

Unified · Split

interface/src/SerialInterface.cpp+13−14
@@ -27,7 +27,7 @@ char serial_buffer[MAX_BUFFER]; · 26 unmodified lines
2727 int serial_buffer_pos = 0;
2828
2929 const int ZERO_OFFSET = 2048;
30−const short NO_READ_MAXIMUM = 10;
30+const short NO_READ_MAXIMUM_MSECS = 3000;
3131 const short SAMPLES_TO_DISCARD = 100;
3232
3333 void SerialInterface::pair() {
@@ -166,14 +166,12 @@ void SerialInterface::readData() { · 132 unmodified lines
166166
167167 int initialSamples = totalSamples;
168168
169− while (read(serial_fd, &bufchar, 1) > 0)
170− {
169+ while (read(serial_fd, &bufchar, 1) > 0) {
171170 //std::cout << bufchar[0];
172171 serial_buffer[serial_buffer_pos] = bufchar[0];
173172 serial_buffer_pos++;
174173 // Have we reached end of a line of input?
175− if ((bufchar[0] == '\n') || (serial_buffer_pos >= MAX_BUFFER))
176− {
174+ if ((bufchar[0] == '\n') || (serial_buffer_pos >= MAX_BUFFER)) {
177175 std::string serialLine(serial_buffer, serial_buffer_pos-1);
178176 //std::cout << serialLine << "\n";
179177 int spot;
@@ -204,26 +202,27 @@ void SerialInterface::readData() { · 24 unmodified lines
204202 }
205203 }
206204
207− if (initialSamples == totalSamples) {
208− noReadCount++;
209− std::cout << "#" << noReadCount << " blank read from serial.\n";
205+ if (initialSamples == totalSamples) {
206+ timeval now;
207+ gettimeofday(&now, NULL);
210208
211− if (noReadCount >= NO_READ_MAXIMUM) {
209+ if (diffclock(&lastGoodRead, &now) > NO_READ_MAXIMUM_MSECS) {
210+ std::cout << "No data coming over serial. Shutting down SerialInterface.\n";
212211 resetSerial();
213212 }
213+ } else {
214+ gettimeofday(&lastGoodRead, NULL);
214215 }
215216 }
216217
217218 void SerialInterface::resetSerial() {
218− std::cout << "Reached maximum blank read count. Shutting down serial.\n";
219−
220219 active = false;
221− noReadCount = 0;
222220 totalSamples = 0;
223221
222+ gettimeofday(&lastGoodRead, NULL);
223+
224224 // Clear the measured and average channel data
225− for (int i = 0; i < NUM_CHANNELS; i++)
226− {
225+ for (int i = 0; i < NUM_CHANNELS; i++) {
227226 lastMeasured[i] = 0;
228227 trailingAverage[i] = 0.0;
229228 }