Add debug output for lights.
As an example and also to expose which lights are
registered easily. Note, this is all the information
that we can print given the libhardware lights interface.
Bug: 70846424
Test: lshal debug
Change-Id: I5f55e3e64149fc63a45ab9dab94d5fea27bb61da
diff --git a/light/2.0/default/Light.cpp b/light/2.0/default/Light.cpp
index cde1536..5484d2d 100644
--- a/light/2.0/default/Light.cpp
+++ b/light/2.0/default/Light.cpp
@@ -18,6 +18,8 @@
#include <log/log.h>
+#include <stdio.h>
+
#include "Light.h"
namespace android {
@@ -107,6 +109,28 @@
{Type::WIFI, LIGHT_ID_WIFI}
};
+Return<void> Light::debug(const hidl_handle& handle, const hidl_vec<hidl_string>& /* options */) {
+ if (handle == nullptr || handle->numFds < 1) {
+ ALOGE("debug called with no handle\n");
+ return Void();
+ }
+
+ int fd = handle->data[0];
+ if (fd < 0) {
+ ALOGE("invalid FD: %d\n", handle->data[0]);
+ return Void();
+ }
+
+ dprintf(fd, "The following lights are registered: ");
+ for (auto const& pair : mLights) {
+ const Type type = pair.first;
+ dprintf(fd, "%s,", kLogicalLights.at(type));
+ }
+ dprintf(fd, ".\n");
+ fsync(fd);
+ return Void();
+}
+
light_device_t* getLightDevice(const char* name) {
light_device_t* lightDevice;
const hw_module_t* hwModule = NULL;
diff --git a/light/2.0/default/Light.h b/light/2.0/default/Light.h
index 8987036..8851461 100644
--- a/light/2.0/default/Light.h
+++ b/light/2.0/default/Light.h
@@ -42,11 +42,12 @@
struct Light : public ILight {
Light(std::map<Type, light_device_t*> &&lights);
- // Methods from ::android::hardware::light::V2_0::ILight follow.
Return<Status> setLight(Type type, const LightState& state) override;
Return<void> getSupportedTypes(getSupportedTypes_cb _hidl_cb) override;
-private:
+ Return<void> debug(const hidl_handle& handle, const hidl_vec<hidl_string>& options) override;
+
+ private:
std::map<Type, light_device_t*> mLights;
};