summaryrefslogtreecommitdiff
path: root/libsensors_iio/src/SWSensorBase.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libsensors_iio/src/SWSensorBase.cpp')
-rw-r--r--libsensors_iio/src/SWSensorBase.cpp29
1 files changed, 18 insertions, 11 deletions
diff --git a/libsensors_iio/src/SWSensorBase.cpp b/libsensors_iio/src/SWSensorBase.cpp
index 97ad409..83da79f 100644
--- a/libsensors_iio/src/SWSensorBase.cpp
+++ b/libsensors_iio/src/SWSensorBase.cpp
@@ -97,9 +97,9 @@ int SWSensorBase::FlushData(bool /*need_report_event*/)
}
if (report_event_at_once)
- return SensorBase::FlushData(false);
- else
- return 0;
+ SensorBase::FlushData(false);
+
+ return 0;
} else
return -EINVAL;
}
@@ -147,7 +147,7 @@ int SWSensorBaseWithPollrate::SetDelay(int handle, int64_t period_ns, int64_t ti
void SWSensorBaseWithPollrate::WriteDataToPipe()
{
- int err;
+ int err, retry = 3;
std::vector<int64_t>::iterator it;
if (!GetStatusOfHandle(sensor_t_data.handle))
@@ -170,24 +170,31 @@ void SWSensorBaseWithPollrate::WriteDataToPipe()
flush_event_data.type = SENSOR_TYPE_META_DATA;
flush_event_data.version = META_DATA_VERSION;
- err = write(android_pipe_fd, &flush_event_data, sizeof(sensor_event));
+ while (retry) {
+ err = SensorBase::WritePipeWithPoll(&flush_event_data, sizeof(sensor_event),
+ POLL_TIMEOUT_FLUSH_EVENT);
+ if (err > 0)
+ break;
- if (err < 0) {
- ALOGE("%s: Failed to write SW flush_complete, errno=%d", android_name, errno);
- return;
+ retry--;
+ ALOGI("%s: Retry writing flush event data to pipe, retry_cnt: %d.", android_name, 3-retry);
}
+ if (retry == 0)
+ ALOGE("%s: Failed to write SW flush_complete, err=%d", android_name, err);
+ else
+ ALOGD("SW flush_complete sent");
+
last_timestamp = *it;
it = SensorBase::timestamp.erase(it);
- ALOGD("SW flush_complete sent");
} else
break;
}
}
if (sensor_event.timestamp >= (last_data_timestamp + real_pollrate * 9 / 10)) {
- err = write(android_pipe_fd, &sensor_event, sizeof(sensor_event));
- if (err < 0) {
+ err = SensorBase::WritePipeWithPoll(&sensor_event, sizeof(sensor_event), POLL_TIMEOUT_DATA_EVENT);
+ if (err <= 0) {
ALOGE("%s: Failed to write sensor data - err=%d.", android_name, err);
return;
}