Skip to content

Commit 1c3bb5c

Browse files
committed
Reduce delays and remove them where not needed
1 parent a15ab1d commit 1c3bb5c

File tree

2 files changed

+16
-16
lines changed

2 files changed

+16
-16
lines changed

src/Arduino_BHY2Host.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ void Arduino_BHY2Host::update()
4848
eslovHandler.update();
4949
} else {
5050
uint8_t available = availableSensorData();
51+
delay(1);
5152
for (int i = 0; i < available; i++) {
5253
SensorDataPacket data;
5354
readSensorData(data);

src/EslovHandler.cpp

+15-16
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#include "EslovHandler.h"
22

3-
#define ESLOV_DELAY (10)
3+
#define ESLOV_DELAY (1)
44

55
EslovHandler::EslovHandler() :
66
_rxIndex(0),
@@ -70,8 +70,6 @@ void EslovHandler::update()
7070
dump();
7171

7272
_rxIndex = 0;
73-
74-
delay(ESLOV_DELAY);
7573

7674
Serial.write(ack);
7775
}
@@ -86,9 +84,15 @@ void EslovHandler::update()
8684

8785
SensorDataPacket sensorData;
8886
while (availableData) {
89-
//delay(ESLOV_DELAY);
9087
requestSensorData(sensorData);
91-
delay(ESLOV_DELAY);
88+
/*
89+
This delay is needed because the synchronization mechanism over the Eslov Int Pin
90+
may not apply for the requests from the host board to Nicla.
91+
It may happen that the onRequest callback on Nicla side is serviced after a certain delay.
92+
We need to add this delay of 10ms to avoid that a second request is issued before
93+
the first one is handled.
94+
*/
95+
delay(10);
9296
Serial.write((uint8_t*)&sensorData, sizeof(SensorDataPacket));
9397
availableData--;
9498
}
@@ -107,7 +111,7 @@ void EslovHandler::update()
107111
while (availableData) {
108112
//delay(ESLOV_DELAY);
109113
requestSensorLongData(sensorData);
110-
delay(ESLOV_DELAY);
114+
delay(10);
111115
Serial.write((uint8_t*)&sensorData, sizeof(SensorLongDataPacket));
112116
availableData--;
113117
}
@@ -180,31 +184,28 @@ void EslovHandler::writeDfuPacket(uint8_t *data, uint8_t length)
180184

181185
void EslovHandler::writeStateChange(EslovState state)
182186
{
183-
delay(ESLOV_DELAY);
184187
while(!digitalRead(_eslovIntPin)) {}
185188
uint8_t packet[2] = {ESLOV_SENSOR_STATE_OPCODE, state};
186189
Wire.beginTransmission(ESLOV_DEFAULT_ADDRESS);
187190
Wire.write((uint8_t*)packet, sizeof(packet));
188191
Wire.endTransmission();
189-
delay(ESLOV_DELAY);
190192
_eslovState = state;
191193
}
192194

193195
void EslovHandler::writeConfigPacket(SensorConfigurationPacket& config)
194196
{
195-
delay(ESLOV_DELAY);
197+
while(!digitalRead(_eslovIntPin)) {}
196198
uint8_t packet[sizeof(SensorConfigurationPacket) + 1];
197199
packet[0] = ESLOV_SENSOR_CONFIG_OPCODE;
198200
memcpy(&packet[1], &config, sizeof(SensorConfigurationPacket));
199201
Wire.beginTransmission(ESLOV_DEFAULT_ADDRESS);
200202
Wire.write(packet, sizeof(SensorConfigurationPacket) + 1);
201203
Wire.endTransmission();
202-
delay(ESLOV_DELAY);
203204
}
204205

205206
uint8_t EslovHandler::requestPacketAck()
206-
{
207-
delay(ESLOV_DELAY);
207+
{
208+
while(!digitalRead(_eslovIntPin)) {}
208209
uint8_t ret = 0;
209210
while(!ret) {
210211
ret = Wire.requestFrom(ESLOV_DEFAULT_ADDRESS, 1);
@@ -223,7 +224,6 @@ uint8_t EslovHandler::requestAvailableData()
223224
uint8_t ret = Wire.requestFrom(ESLOV_DEFAULT_ADDRESS, 1);
224225
if (!ret) return 0;
225226
return Wire.read();
226-
delay(ESLOV_DELAY);
227227
}
228228

229229
uint8_t EslovHandler::requestAvailableLongData()
@@ -240,9 +240,8 @@ bool EslovHandler::requestSensorData(SensorDataPacket &sData)
240240
{
241241
if (_eslovState != ESLOV_READ_SENSOR_STATE) {
242242
writeStateChange(ESLOV_READ_SENSOR_STATE);
243-
while(!digitalRead(_eslovIntPin)) {}
244243
}
245-
//uint8_t ret = Wire.requestFrom(ESLOV_DEFAULT_ADDRESS, sizeof(SensorDataPacket));
244+
while(!digitalRead(_eslovIntPin)) {}
246245
uint8_t ret = Wire.requestFrom(ESLOV_DEFAULT_ADDRESS, sizeof(SensorDataPacket));
247246
if (!ret) return false;
248247

@@ -257,8 +256,8 @@ bool EslovHandler::requestSensorLongData(SensorLongDataPacket &sData)
257256
{
258257
if (_eslovState != ESLOV_READ_LONG_SENSOR_STATE) {
259258
writeStateChange(ESLOV_READ_LONG_SENSOR_STATE);
260-
while(!digitalRead(_eslovIntPin)) {}
261259
}
260+
while(!digitalRead(_eslovIntPin)) {}
262261
uint8_t ret = Wire.requestFrom(ESLOV_DEFAULT_ADDRESS, sizeof(SensorLongDataPacket));
263262
if (!ret) return false;
264263

0 commit comments

Comments
 (0)