Commit graph

9 commits

Author SHA1 Message Date
Nicolas Fella
988c33a627 Port flashlight to declarative type registration 2025-04-20 18:02:19 +02:00
Florian RICHER
5c6a97caa5 Flashlight : Use udev instead of hardcoded pinephone device file
# Goal of this patch

Use udev to change or detect flash device instead of hardcoded pinephone device file.
Inspired by phosh flash manager because it works in many devices. https://gitlab.gnome.org/World/Phosh/phosh/-/blob/main/src/torch-manager.c?ref_type=heads#L168-198

# Remaining work

- [x] Minimal project for testing
- [x] Try to build for pmOS to test in my device (OP6)
- [x] Need udev rules to work (Require write permission in brightness)

# Stabilization

- [x] read permission removed in max_brightness to check if no crash
> "Failed to read max_brightness from udev device" in log
- [x] read permission removed in brightness to check if no crash
> "Failed to read brightness from udev device" in log
- [x] "Break" match in my side to check if no crash occured when no device found
> "No flashlight found" in log

# Minimal project

It run in my device perfectly, it find device, get current value and max value and toggle flashlight. It require **root** permissions to write in device file.

```cpp
#include <iostream>
#include <cstring>
#include <libudev.h>

#define TORCH_SUBSYSTEM "leds"

int main() {
    struct udev* udev = udev_new();
    struct udev_enumerate* enumerate = udev_enumerate_new(udev);

    // Use to find all devices in subsystem "leds"
    // And use match sysname to filter only flash or torch
    // Example:
    //  - /sys/devices/platform/soc@0/c440000.spmi/spmi-0/0-03/c440000.spmi:pmic@3:led-controller@d300/leds/white:flash On OP6
    //  - /sys/devices/platform/soc@0/c440000.spmi/spmi-0/0-03/c440000.spmi:pmic@3:led-controller@d300/leds/yellow:flash On OP6
    //  - /sys/devices/platform/led-controller/leds/white:flash/brightness On pinephone
    udev_enumerate_add_match_subsystem(enumerate, TORCH_SUBSYSTEM);
    udev_enumerate_add_match_sysname(enumerate, "*:torch");
    udev_enumerate_add_match_sysname(enumerate, "*:flash");
    udev_enumerate_scan_devices(enumerate);

    struct udev_list_entry *devices = udev_enumerate_get_list_entry(enumerate);
    struct udev_list_entry *entry = udev_list_entry_get_next(devices);

    if (entry == nullptr) {
        std::cout << "No flashlight found" << std::endl;
        return 1;
    }

    const char *path = udev_list_entry_get_name(entry);
    struct udev_device *torch = udev_device_new_from_syspath(udev, path);

    const char *max_brightness = udev_device_get_sysattr_value(torch, "max_brightness");

    const char *brightness = udev_device_get_sysattr_value(torch, "brightness");

    bool enabled = std::strcmp(brightness, "0") != 0;
    udev_device_set_sysattr_value(torch, "brightness", const_cast<char*>(enabled ? "0" : max_brightness));

    udev_device_unref(torch);
    udev_enumerate_unref(enumerate);
    udev_unref(udev);
    return 0;
}
```

Build with `g++ torch.cpp -ludev -o torch`
Run with `sudo ./torch`

# Important info

- **udev** dependencies added
- destructor for flashlightutil added to unref udev_device

# Require udev rules

Files `/etc/udev/rules.d/99-flashlight.rules`
```bash
# Allow everyone to set brightness of flashlight (Required for plasma-mobile flashlightplugin)
SUBSYSTEMS=="leds", KERNEL=="*:flash|*:torch", RUN+="/bin/chmod 666 %S%p/brightness"
```

pmOS : See to add depends `eudev` and makedepends `eudev-dev`
2023-12-31 17:11:28 +00:00
Alexander Lohnau
749bb82ace Link to QtQml/QtQuick instead of KDeclarative targets
We actually don'T need any of those classes
2023-03-21 11:30:17 +00:00
Devin Lin
1dbb1c78f6 Port to Qt6/KF6 2023-03-03 06:01:23 +00:00
David Redondo
750d5581ef Revert "Show all headers in qtc6"
There was no consensus for this in Plasma.
This reverts commit c79ca828f3.
2023-01-24 08:51:18 +01:00
Laurent Montel
c79ca828f3 Show all headers in qtc6 2023-01-22 18:30:45 +00:00
Nicolas Fella
6099bf491f Use undeprecated install dirs
Using kde-dev-scripts/kf5/cmakelists_install_vars.pl
2022-04-21 01:27:43 +00:00
Devin Lin
31ae31737c quicksettings: Ensure package ids don't conflict with existing applets 2022-03-17 15:57:40 -04:00
Devin Lin
500132e56b quicksettings/flashlight: Move C++ out of ShellUtil into package 2022-03-17 00:07:29 -04:00