1
1
#include " EslovHandler.h"
2
2
3
- #define ESLOV_DELAY (1 )
3
+ #define ESLOV_DELAY (10 )
4
4
5
5
EslovHandler::EslovHandler () :
6
6
_rxIndex(0 ),
@@ -70,6 +70,8 @@ void EslovHandler::update()
70
70
dump ();
71
71
72
72
_rxIndex = 0 ;
73
+
74
+ delay (ESLOV_DELAY);
73
75
74
76
Serial.write (ack);
75
77
}
@@ -84,15 +86,9 @@ void EslovHandler::update()
84
86
85
87
SensorDataPacket sensorData;
86
88
while (availableData) {
89
+ // delay(ESLOV_DELAY);
87
90
requestSensorData (sensorData);
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 );
91
+ delay (ESLOV_DELAY);
96
92
Serial.write ((uint8_t *)&sensorData, sizeof (SensorDataPacket));
97
93
availableData--;
98
94
}
@@ -111,7 +107,7 @@ void EslovHandler::update()
111
107
while (availableData) {
112
108
// delay(ESLOV_DELAY);
113
109
requestSensorLongData (sensorData);
114
- delay (10 );
110
+ delay (ESLOV_DELAY );
115
111
Serial.write ((uint8_t *)&sensorData, sizeof (SensorLongDataPacket));
116
112
availableData--;
117
113
}
@@ -184,28 +180,31 @@ void EslovHandler::writeDfuPacket(uint8_t *data, uint8_t length)
184
180
185
181
void EslovHandler::writeStateChange (EslovState state)
186
182
{
183
+ delay (ESLOV_DELAY);
187
184
while (!digitalRead (_eslovIntPin)) {}
188
185
uint8_t packet[2 ] = {ESLOV_SENSOR_STATE_OPCODE, state};
189
186
Wire.beginTransmission (ESLOV_DEFAULT_ADDRESS);
190
187
Wire.write ((uint8_t *)packet, sizeof (packet));
191
188
Wire.endTransmission ();
189
+ delay (ESLOV_DELAY);
192
190
_eslovState = state;
193
191
}
194
192
195
193
void EslovHandler::writeConfigPacket (SensorConfigurationPacket& config)
196
194
{
197
- while (! digitalRead (_eslovIntPin)) {}
195
+ delay (ESLOV_DELAY);
198
196
uint8_t packet[sizeof (SensorConfigurationPacket) + 1 ];
199
197
packet[0 ] = ESLOV_SENSOR_CONFIG_OPCODE;
200
198
memcpy (&packet[1 ], &config, sizeof (SensorConfigurationPacket));
201
199
Wire.beginTransmission (ESLOV_DEFAULT_ADDRESS);
202
200
Wire.write (packet, sizeof (SensorConfigurationPacket) + 1 );
203
201
Wire.endTransmission ();
202
+ delay (ESLOV_DELAY);
204
203
}
205
204
206
205
uint8_t EslovHandler::requestPacketAck ()
207
- {
208
- while (! digitalRead (_eslovIntPin)) {}
206
+ {
207
+ delay (ESLOV_DELAY);
209
208
uint8_t ret = 0 ;
210
209
while (!ret) {
211
210
ret = Wire.requestFrom (ESLOV_DEFAULT_ADDRESS, 1 );
@@ -224,6 +223,7 @@ uint8_t EslovHandler::requestAvailableData()
224
223
uint8_t ret = Wire.requestFrom (ESLOV_DEFAULT_ADDRESS, 1 );
225
224
if (!ret) return 0 ;
226
225
return Wire.read ();
226
+ delay (ESLOV_DELAY);
227
227
}
228
228
229
229
uint8_t EslovHandler::requestAvailableLongData ()
@@ -240,8 +240,9 @@ bool EslovHandler::requestSensorData(SensorDataPacket &sData)
240
240
{
241
241
if (_eslovState != ESLOV_READ_SENSOR_STATE) {
242
242
writeStateChange (ESLOV_READ_SENSOR_STATE);
243
+ while (!digitalRead (_eslovIntPin)) {}
243
244
}
244
- while (! digitalRead (_eslovIntPin)) {}
245
+ // uint8_t ret = Wire.requestFrom(ESLOV_DEFAULT_ADDRESS, sizeof(SensorDataPacket));
245
246
uint8_t ret = Wire.requestFrom (ESLOV_DEFAULT_ADDRESS, sizeof (SensorDataPacket));
246
247
if (!ret) return false ;
247
248
@@ -256,8 +257,8 @@ bool EslovHandler::requestSensorLongData(SensorLongDataPacket &sData)
256
257
{
257
258
if (_eslovState != ESLOV_READ_LONG_SENSOR_STATE) {
258
259
writeStateChange (ESLOV_READ_LONG_SENSOR_STATE);
260
+ while (!digitalRead (_eslovIntPin)) {}
259
261
}
260
- while (!digitalRead (_eslovIntPin)) {}
261
262
uint8_t ret = Wire.requestFrom (ESLOV_DEFAULT_ADDRESS, sizeof (SensorLongDataPacket));
262
263
if (!ret) return false ;
263
264
0 commit comments