diff options
author | Peng Xu <pengxu@google.com> | 2017-04-04 01:31:54 -0700 |
---|---|---|
committer | Peng Xu <pengxu@google.com> | 2017-04-20 23:23:53 +0000 |
commit | 4715d1734d2c60cc91ef70d409678d8eda382fde (patch) | |
tree | 4a7968a6472431119e43f4ad0ad9520fee541c44 /modules/sensors/dynamic_sensor/DummyDynamicAccelDaemon.cpp | |
parent | c87b15a2245b6fac68bd2e259cb0f4b4efbcf045 (diff) |
HID dynamic sensor: add support to three types of sensor
Implemented HID dynamic sensor using linux hidraw driver and
HidUtils. Support the following cases:
1) HID Sensor spec defined accelerometer, gyroscope, magnetometer
and orientation (quaternion).
2) Android defined type sensors (HID sensor custom type): ambient
temperature, barometer, light and heart rate sensor.
3) Android custom type sensor (based on HID sensor custom type).
Test: run tests/examples in test/
Test: test with a USB HID hardware (launchpad sensor) and marlin
Bug: 37482951
Bug: 31026607
Change-Id: I9d679fb34d15324a9df1cf19647ea638fd1a0e68
Diffstat (limited to 'modules/sensors/dynamic_sensor/DummyDynamicAccelDaemon.cpp')
-rw-r--r-- | modules/sensors/dynamic_sensor/DummyDynamicAccelDaemon.cpp | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/modules/sensors/dynamic_sensor/DummyDynamicAccelDaemon.cpp b/modules/sensors/dynamic_sensor/DummyDynamicAccelDaemon.cpp index 19779678..a1a47e81 100644 --- a/modules/sensors/dynamic_sensor/DummyDynamicAccelDaemon.cpp +++ b/modules/sensors/dynamic_sensor/DummyDynamicAccelDaemon.cpp @@ -51,23 +51,30 @@ DummyDynamicAccelDaemon::DummyDynamicAccelDaemon(DynamicSensorManager& manager) } } -BaseSensorObject * DummyDynamicAccelDaemon::createSensor(const std::string &deviceKey) { +BaseSensorVector DummyDynamicAccelDaemon::createSensor(const std::string &deviceKey) { + BaseSensorVector ret; if (deviceKey.compare(0, 1, "/") == 0) { // file detector result, deviceKey is file absolute path - size_t start = std::max(static_cast<size_t>(0), - deviceKey.length() - (::strlen(FILE_NAME_BASE) + 1)); - return new DummySensor(deviceKey.substr(start)); - + const size_t len = ::strlen(FILE_NAME_BASE) + 1; // +1 for number + if (deviceKey.length() < len) { + ALOGE("illegal file device key %s", deviceKey.c_str()); + } else { + size_t start = deviceKey.length() - len; + ret.emplace_back(new DummySensor(deviceKey.substr(start))); + } } else if (deviceKey.compare(0, ::strlen("socket:"), "socket:") == 0) { - return new DummySensor(deviceKey); + ret.emplace_back(new DummySensor(deviceKey)); } else { // unknown deviceKey - return nullptr; + ALOGE("unknown deviceKey: %s", deviceKey.c_str()); } + return ret; } -DummyDynamicAccelDaemon::DummySensor::DummySensor(const std::string &name) : mRunState(false) { +DummyDynamicAccelDaemon::DummySensor::DummySensor(const std::string &name) + : Thread(false /*canCallJava*/), mRunState(false) { mSensorName = "Dummy Accel - " + name; + // fake sensor information for dummy sensor mSensor = (struct sensor_t) { mSensorName.c_str(), "DemoSense, Inc.", @@ -120,7 +127,8 @@ int DummyDynamicAccelDaemon::DummySensor::enable(bool enable) { return 0; } -int DummyDynamicAccelDaemon::DummySensor::batch(nsecs_t, nsecs_t) { +int DummyDynamicAccelDaemon::DummySensor::batch(int64_t /*samplePeriod*/, int64_t /*batchPeriod*/) { + // Dummy sensor does not support changing rate and batching. But return successful anyway. return 0; } |