0 votos

¿Cómo activar y desactivar periódicamente la linterna con una frecuencia de 1kHz en un Redmi Note 5 Oro rooteado?

Mi objetivo es escribir un script de shell para apagar y encender periódicamente la linterna de mi teléfono (aproximadamente 1 kHz o 500 Hz). Mi teléfono está rooteado. Así que obtuve acceso de shell de superusuario (#)

Estos son los archivos en mi sys/class/leds/flashlight

whyred:/sys/class/leds/flashlight # ls
brightness device max_brightness power subsystem trigger uevent

(Captura de pantalla original de la terminal)

Pude modificar el contenido del archivo brightness y pude encender y apagar manualmente mi linterna. Sin embargo, quiero hacerlo periódicamente con un retraso y para eso, necesito un disparador de temporizador. Pero dentro del archivo trigger de arriba, no hay ninguna sección de retraso indicada. Solo había algunos contenidos dentro del archivo (sin números)

whyred:/sys/class/leds/flashlight # cat trigger
[none] bkl-trigger switch0_trigger flash0_trigger flash1_trigger torch0_trigger torch1_trigger switch1_trigger flash2_trigger torch2_trigger dc-online usb-online main-online pc_port-online battery-charging-or-full battery-charging battery-full battery-charging-blink-full-solid rfkill0 mmc0 mmc1 bms-online parallel-online rfkill1

(Captura de pantalla original de la terminal)

Pude ajustar un periodo de aproximadamente 1-3 ms escribiendo un script bash, que hace eco de brillo 100 seguido de sleep y luego hace eco de 0 de brillo

Script:

while [ 1 le 100]
do
echo "100" > ~/sys/class/leds/brightness  
sleep(0.001)  
echo "100" > ~/sys/class/leds/brightness)
sleep(0.001)
done  # end

Pero quiero al menos una frecuencia de 1 kHz, por lo que un temporizador es lo correcto, la función sleep no es aconsejable.

¿Cómo puedo lograr mi objetivo?

0 votos

No creo que encuentres un disparador con una frecuencia tan alta. En su lugar, escribiría un pequeño programa en C que intente habilitar/deshabilitar la linterna. Para el tiempo, utiliza la espera ocupada y como fuente de tiempo puede ser clock_gettime(CLOCK_MONOTONIC,..).

0 votos

Hola , he echado un vistazo a tu enlace, pero perdón por ser principiante, me resulta difícil entenderlo, ¿puedes publicar algún otro enlace o un código C que haga lo mismo en el kernel de Linux?

1 votos

Lo siento Edmund, pero este sitio aquí es para usuarios finales, no para programadores/desarrolladores. Pero otro consejo sería buscar aplicaciones de automatización como tasker, que también debería ser capaz de activar la linterna.

0voto

box cpm Puntos 1

Hay Termux y Termux:API.

Termux:

Emulador de terminal de Android y aplicación de entorno Linux que funciona directamente sin necesidad de rootear o configurar. Se instala automáticamente un sistema base mínimo, y paquetes adicionales están disponibles usando el gestor de paquetes.

Termux:API:

Este complemento expone la funcionalidad del dispositivo como API a programas de línea de comandos en Termux.

Instala ambos desde el sitio web F-droid.

Luego abre Termux y ejecuta pkg install termux-api nano

Crea un script shell con nano usando nano torch.sh

Utiliza termux-torch on y termux-torch off para encender y apagar la linterna.

También realiza otras ediciones para satisfacer tus necesidades. Si deseas hacerlo periódicamente, usa un bucle while.

Guarda y sale del archivo con Ctrl + X, luego escribe "Y" y presiona Enter.

Ejecuta cat torch.sh para asegurarte de que el script shell se haya editado correctamente.

Asegúrate de que el script shell sea ejecutable ejecutando chmod +x torch.sh

Finalmente, ejecuta ./torch.sh

P.D. Ni siquiera necesitas ser root para hacer eso jaja

1 votos

Hola box cpm, una respuesta fantástica en realidad, hice lo que indicaste y pude controlar la linterna encendida y apagada utilizando el script anterior, como simplemente dentro de un bucle while, escribí termux-torch on y termux-torch off (sin retraso entre estas 2 declaraciones), ¡y tu método funciona incluso en teléfonos no rooteados! ¡Increíble! Pero hay un problema, incluso sin introducir un retraso entre las declaraciones de encendido y apagado, el período es demasiado alto, como 0.5 segundos, ¡quiero un período en el rango de 1 ms, tienes alguna otra solución para resolver este problema!

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X