diff options
author | Mike Gabriel <mike.gabriel@das-netzwerkteam.de> | 2021-08-28 10:17:41 +0200 |
---|---|---|
committer | Mike Gabriel <mike.gabriel@das-netzwerkteam.de> | 2021-08-28 10:17:41 +0200 |
commit | 046a91ec739efdf1504e8716a28cec2fd5782303 (patch) | |
tree | 5e2c48a3dcd5992e4c190609484706a69d3393f8 /src/flashlight.c | |
parent | 92ac2554299affa7980dd754dfa5745ce1571bdd (diff) | |
parent | d5a53027e58b6153b86b6c4b832cfd393bcdefb0 (diff) | |
download | ayatana-indicator-power-046a91ec739efdf1504e8716a28cec2fd5782303.tar.gz ayatana-indicator-power-046a91ec739efdf1504e8716a28cec2fd5782303.tar.bz2 ayatana-indicator-power-046a91ec739efdf1504e8716a28cec2fd5782303.zip |
Merge branch 'tari01-pr/ubports-patches'
Attributes GH PR #33: https://github.com/AyatanaIndicators/ayatana-indicator-power/pull/33
Diffstat (limited to 'src/flashlight.c')
-rw-r--r-- | src/flashlight.c | 89 |
1 files changed, 71 insertions, 18 deletions
diff --git a/src/flashlight.c b/src/flashlight.c index 55a108a..064bd31 100644 --- a/src/flashlight.c +++ b/src/flashlight.c @@ -26,17 +26,29 @@ #define QCOM_ENABLE "255" #define QCOM_DISABLE "0" +#define SIMPLE_ENABLE "1" +#define SIMPLE_DISABLE "0" -const size_t qcom_sysfs_size = 5; +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", "/sys/class/leds/flashlight/brightness", "/sys/class/leds/torch-light0/brightness", - "/sys/class/leds/torch-light1/brightness"}; + "/sys/class/leds/torch-light1/brightness", + "/sys/class/leds/led:torch_0/brightness", + "/sys/class/leds/led:torch_1/brightness"}; +const size_t qcom_switch_size = 2; +const char* const qcom_switch[] = {"/sys/class/leds/led:switch/brightness", + "/sys/class/leds/led:switch_0/brightness"}; -const char* qcom_torch_enable = "/sys/class/leds/led:switch/brightness"; +const size_t simple_sysfs_size = 2; +const char* const simple_sysfs[] = {"/sys/class/flashlight_core/flashlight/flashlight_torch", + "/sys/class/leds/white:flash/brightness"}; char* flash_sysfs_path = NULL; +char* qcom_switch_path = NULL; + +enum TorchType torch_type = SIMPLE; gboolean activated = 0; int @@ -45,6 +57,18 @@ 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]; + } + 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; } } @@ -57,27 +81,17 @@ flashlight_activated() return activated; } -void -toggle_flashlight_action(GAction *action, - GVariant *parameter G_GNUC_UNUSED, - gpointer data G_GNUC_UNUSED) +int +toggle_flashlight_action_qcom() { - GVariant *state; FILE *fd1 = NULL, *fd2 = NULL; - int needs_enable; - if (!set_sysfs_path()) - return; - - state = g_action_get_state(action); - activated = g_variant_get_boolean(state); - g_variant_unref(state); fd1 = fopen(flash_sysfs_path, "w"); if (fd1 != NULL) { - needs_enable = access(qcom_torch_enable, F_OK ) != -1; + needs_enable = access(qcom_switch_path, F_OK ) != -1; if (needs_enable) - fd2 = fopen(qcom_torch_enable, "w"); + fd2 = fopen(qcom_switch_path, "w"); if (activated) if (needs_enable && fd2 != NULL) fprintf(fd2, "0"); @@ -91,8 +105,47 @@ toggle_flashlight_action(GAction *action, fclose(fd1); if (fd2 !=NULL) fclose(fd2); - g_action_change_state(action, g_variant_new_boolean(!activated)); + return 1; + } + return 0; +} + +int +toggle_flashlight_action_simple() +{ + FILE *fd = NULL; + + fd = fopen(flash_sysfs_path, "w"); + if (fd != NULL) { + fprintf(fd, activated ? SIMPLE_DISABLE : SIMPLE_ENABLE); + fclose(fd); + return 1; } + return 0; +} + +void +toggle_flashlight_action(GAction *action, + GVariant *parameter G_GNUC_UNUSED, + gpointer data G_GNUC_UNUSED) +{ + GVariant *state; + int toggled; + + if (!set_sysfs_path()) + return; + + state = g_action_get_state(action); + activated = g_variant_get_boolean(state); + g_variant_unref(state); + + if (torch_type == QCOM) + toggled = toggle_flashlight_action_qcom(); + else + toggled = toggle_flashlight_action_simple(); + + if (toggled) + g_action_change_state(action, g_variant_new_boolean(!activated)); } int |