aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/CMakeLists.txt9
-rw-r--r--src/deviceinfo-flashlight.c13
-rw-r--r--src/flashlight.c48
3 files changed, 56 insertions, 14 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index df2fd5d..f765f23 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -1,7 +1,14 @@
+if (ENABLE_DEVICEINFO)
+ set(FLASHLIGHT_DEVICEINFO
+ deviceinfo-flashlight.c)
+ add_definitions(-DENABLE_LIBDEVICEINFO)
+endif ()
+
# handwritten sources
set(SERVICE_MANUAL_SOURCES
brightness.c
datafiles.c
+ ${FLASHLIGHT_DEVICEINFO}
device-provider-mock.c
device-provider-upower.c
device-provider.c
@@ -45,5 +52,5 @@ link_directories(${SERVICE_DEPS_LIBRARY_DIRS})
# the executable: lib + main()
add_executable (${SERVICE_EXEC} main.c)
-target_link_libraries (${SERVICE_EXEC} ${SERVICE_LIB} ${SERVICE_DEPS_LIBRARIES})
+target_link_libraries (${SERVICE_EXEC} ${SERVICE_LIB} ${SERVICE_DEPS_LIBRARIES} ${DEVICEINFO_LIBRARIES})
install (TARGETS ${SERVICE_EXEC} RUNTIME DESTINATION "${CMAKE_INSTALL_FULL_LIBEXECDIR}/${CMAKE_PROJECT_NAME}")
diff --git a/src/deviceinfo-flashlight.c b/src/deviceinfo-flashlight.c
new file mode 100644
index 0000000..e31c1ff
--- /dev/null
+++ b/src/deviceinfo-flashlight.c
@@ -0,0 +1,13 @@
+#include <deviceinfo_c_api.h>
+
+char* flashlight_path()
+{
+ struct DeviceInfo* di = deviceinfo_new();
+ return deviceinfo_get(di, "FlashlightSysfsPath", "");
+}
+
+char* flashlight_switch_path()
+{
+ struct DeviceInfo* di = deviceinfo_new();
+ return deviceinfo_get(di, "FlashlightSwitchPath", "");
+}
diff --git a/src/flashlight.c b/src/flashlight.c
index 0a68af2..88e93fd 100644
--- a/src/flashlight.c
+++ b/src/flashlight.c
@@ -31,6 +31,11 @@
#define SIMPLE_ENABLE "1"
#define SIMPLE_DISABLE "0"
+#ifdef ENABLE_LIBDEVICEINFO
+extern char* flashlight_path();
+extern char* flashlight_switch_path();
+#endif
+
const size_t qcom_sysfs_size = 7;
const char* const qcom_sysfs[] = {"/sys/class/leds/torch-light/brightness",
"/sys/class/leds/led:flash_torch/brightness",
@@ -56,24 +61,41 @@ gboolean activated = 0;
int
set_sysfs_path()
{
- for (size_t i = 0; i < qcom_sysfs_size; i++) {
- if (access(qcom_sysfs[i], F_OK ) != -1){
- flash_sysfs_path = (char*)qcom_sysfs[i];
- torch_type = QCOM;
- /* Qualcomm torch; determine switch file (if one is needed) */
- for (size_t i = 0; i < qcom_switch_size; i++) {
- if (access(qcom_switch[i], F_OK ) != -1)
- qcom_switch_path = (char*)qcom_switch[i];
+# ifdef ENABLE_LIBDEVICEINFO
+ if (strcmp(flashlight_path(), "")) {
+ if (access(flashlight_path(), F_OK) != -1) {
+ flash_sysfs_path = flashlight_path();
+ if (strcmp(flashlight_switch_path(), "")) {
+ if (access(flashlight_switch_path(), F_OK) != -1) {
+ qcom_switch_path = flashlight_switch_path();
+ torch_type = QCOM;
+ }
}
return 1;
}
- }
- for (size_t i = 0; i < simple_sysfs_size; i++) {
- if (access(simple_sysfs[i], F_OK ) != -1){
- flash_sysfs_path = (char*)simple_sysfs[i];
- return 1;
+ } else {
+# endif
+ for (size_t i = 0; i < qcom_sysfs_size; i++) {
+ if (access(qcom_sysfs[i], F_OK ) != -1){
+ flash_sysfs_path = (char*)qcom_sysfs[i];
+ torch_type = QCOM;
+ /* Qualcomm torch; determine switch file (if one is needed) */
+ for (size_t i = 0; i < qcom_switch_size; i++) {
+ if (access(qcom_switch[i], F_OK ) != -1)
+ qcom_switch_path = (char*)qcom_switch[i];
+ }
+ return 1;
+ }
+ }
+ for (size_t i = 0; i < simple_sysfs_size; i++) {
+ if (access(simple_sysfs[i], F_OK ) != -1){
+ flash_sysfs_path = (char*)simple_sysfs[i];
+ return 1;
+ }
}
+# ifdef ENABLE_LIBDEVICEINFO
}
+# endif
return 0;
}