@@ -12,7 +12,6 @@ struct _sinkBuffers {
12
12
rtos::Semaphore* sem;
13
13
RingBuffer rxBuffer;
14
14
RingBuffer txBuffer;
15
- uint32_t lastTimestamp;
16
15
};
17
16
18
17
#define READ_READY_UNBLOCK (1 << 1 )
@@ -65,15 +64,13 @@ class SerialClassDispatcher : public HardwareSerial {
65
64
66
65
size_t write (uint8_t data) {
67
66
findSemaphore (rtos::ThisThread::get_id ())->acquire ();
68
- *findLastTimestamp (rtos::ThisThread::get_id ()) = millis ();
69
67
findThreadTxBuffer (rtos::ThisThread::get_id ()).store_char (data);
70
68
findSemaphore (rtos::ThisThread::get_id ())->release ();
71
69
unlock_print.set (READ_READY_UNBLOCK);
72
70
}
73
71
74
72
size_t write (const uint8_t * data, size_t len) {
75
73
findSemaphore (rtos::ThisThread::get_id ())->acquire ();
76
- *findLastTimestamp (rtos::ThisThread::get_id ()) = millis ();
77
74
for (int i=0 ; i<len; i++) {
78
75
findThreadTxBuffer (rtos::ThisThread::get_id ()).store_char (data[i]);
79
76
}
@@ -124,13 +121,13 @@ class SerialClassDispatcher : public HardwareSerial {
124
121
while (1 ) {
125
122
unlock_print.wait_any (READ_READY_UNBLOCK, osWaitForever, true );
126
123
for (int i = 0 ; i < users; i++) {
124
+ sinkBuffers[i].sem ->acquire ();
127
125
// Implementation "leak", should be changed at RingBuffer API level
128
126
int c = sinkBuffers[i].txBuffer ._iHead == 0 ?
129
127
sinkBuffers[i].txBuffer ._aucBuffer [sizeof (sinkBuffers[i].txBuffer ._aucBuffer ) -1 ] :
130
128
sinkBuffers[i].txBuffer ._aucBuffer [sinkBuffers[i].txBuffer ._iHead - 1 ];
131
129
if ((!sinkBuffers[i].raw && (c == ' \n ' /* || c == '\r' */ || c == ' \0 ' )) ||
132
- (sinkBuffers[i].raw && (millis () - sinkBuffers[i].lastTimestamp > 10 ))) {
133
- sinkBuffers[i].sem ->acquire ();
130
+ sinkBuffers[i].raw || !sinkBuffers[i].txBuffer .availableForStore ()) {
134
131
if (sinkBuffers[i].txBuffer .available () && print_tags) {
135
132
serial.print (" [" );
136
133
serial.print (i);
@@ -139,8 +136,8 @@ class SerialClassDispatcher : public HardwareSerial {
139
136
while (sinkBuffers[i].txBuffer .available ()) {
140
137
serial.write (sinkBuffers[i].txBuffer .read_char ());
141
138
}
142
- sinkBuffers[i].sem ->release ();
143
139
}
140
+ sinkBuffers[i].sem ->release ();
144
141
}
145
142
}
146
143
}
@@ -161,14 +158,6 @@ class SerialClassDispatcher : public HardwareSerial {
161
158
}
162
159
}
163
160
164
- uint32_t * findLastTimestamp (osThreadId_t id) {
165
- for (int i = 0 ; i < 10 ; i++) {
166
- if (id == sinkBuffers[i].id ) {
167
- return &sinkBuffers[i].lastTimestamp ;
168
- }
169
- }
170
- }
171
-
172
161
rtos::Semaphore* findSemaphore (osThreadId_t id) {
173
162
for (int i = 0 ; i < 10 ; i++) {
174
163
if (id == sinkBuffers[i].id ) {
0 commit comments