26 (edytowany przez MiG25 2020-05-03 09:17:26)

Odp: QCA4531 Obsługa przycisków

Kiedy to prawda smile

standardowe komendy są , echo , cat , no i warunki ,while , do , if ,fi

#!/bin/ash

#LED
echo 2 > /sys/class/gpio/export
echo 3 > /sys/class/gpio/export
echo 13 > /sys/class/gpio/export
echo 15 > /sys/class/gpio/export

#link
echo 10 > /sys/class/gpio/export

#buttons
echo 0 > /sys/class/gpio/export
echo 1 > /sys/class/gpio/export
echo 16 > /sys/class/gpio/export


while :
do

ButtonReset=`cat /sys/kernel/debug/gpio|grep gpio-0|cut -d ")" -f 2|cut -d " " -f 4`
ButtonWPS=`cat /sys/kernel/debug/gpio|grep -e "gpio-1 "|cut -d ")" -f 2|cut -d " " -f 4`
ButtonCheck=`cat /sys/kernel/debug/gpio|grep gpio-16|cut -d ")" -f 2|cut -d " " -f 4`
CNCNTLink=`cat /sys/kernel/debug/gpio|grep gpio-10|cut -d ")" -f 2|cut -d " " -f 4`

#białe
if [ "$ButtonReset" = 'lo' ] && [ "$ButtonWPS" = 'lo' ] && [ "$ButtonCheck" = 'hi' ] ; then
echo high > /sys/class/gpio/gpio2/direction
echo high > /sys/class/gpio/gpio13/direction
echo high > /sys/class/gpio/gpio15/direction
fi

#niebieskie
if [ "$ButtonReset" = 'hi' ] || [ "$ButtonWPS" = 'hi' ] || [ "$ButtonCheck" = 'lo' ] ; then
echo high > /sys/class/gpio/gpio2/direction
echo low > /sys/class/gpio/gpio13/direction
echo low > /sys/class/gpio/gpio15/direction
fi

#zolte
if [ "$ButtonReset" = 'hi' ] && [ "$ButtonWPS" = 'hi' ] ; then
echo low > /sys/class/gpio/gpio2/direction
echo high > /sys/class/gpio/gpio13/direction
echo high > /sys/class/gpio/gpio15/direction
fi
if [ "$ButtonReset" = 'hi' ] && [ "$ButtonCheck" = 'lo' ] ;then
echo low > /sys/class/gpio/gpio2/direction
echo high > /sys/class/gpio/gpio13/direction
echo high > /sys/class/gpio/gpio15/direction
fi
if [ "$ButtonWPS" = 'hi' ] && [ "$ButtonCheck" = 'lo' ] ; then
echo low > /sys/class/gpio/gpio2/direction
echo high > /sys/class/gpio/gpio13/direction
echo high > /sys/class/gpio/gpio15/direction
fi

#fw side switch
if [ "$ButtonReset" = 'hi' ] && [ "$ButtonWPS" = 'hi' ] && [ "$ButtonCheck" = 'lo' ] ; then
echo low > /sys/class/gpio/gpio2/direction
echo low > /sys/class/gpio/gpio13/direction
echo high > /sys/class/gpio/gpio15/direction
fwupdate sw > /dev/null 2>&1
sync
reboot
fi

if [ "$CNCNTLink" = 'hi' ] ; then
echo low > /sys/class/gpio/gpio3/direction
fi
if [ "$CNCNTLink" = 'lo' ] ; then
echo high > /sys/class/gpio/gpio3/direction
fi

done

exit 0

27

Odp: QCA4531 Obsługa przycisków

cat /sys/kernel/debug/gpio|grep gpio-0|cut -d ")" -f 2|cut -d " " -f 4 możesz zamienić na

grep gpio-0  /sys/kernel/debug/gpio | cut -d ")" -f 2|cut -d " " -f 4

Ten cat jest w ogóle niepotrzebny. A jak byś to zamienił w ogóle na awk to pozbył byś się i grepów i cutów. Ale to już kwestia stylu.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

28

Odp: QCA4531 Obsługa przycisków

To nie kwestia stylu , tylko znalezionego w necie wzoru. Bo przecież sam na to nie wpadnę smile
Jeśli zamiana na awk będzie lepsza , to serdeczna prośba o wzór smile

29 (edytowany przez Cezary 2020-05-03 09:53:21)

Odp: QCA4531 Obsługa przycisków

cat /sys/kernel/debug/gpio|grep gpio-0|cut -d ")" -f 2|cut -d " " -f 4

to to samo co

awk '/gpio-0 /{print $6}' /sys/kernel/debug/gpio

- wywołanie tylko jednego programu
- mniej wycinania

PS. Ta spacja po gpio-0 jest potrzebna, bo jak by jej nie było to np. gpio-1 i gpio-10 by się załapało.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

30

Odp: QCA4531 Obsługa przycisków

Ok , dzięki smile
btw musi być {print $5}  , bo 6 nic nie wyświetla .
Zamieniony fragment na:

ButtonReset=`awk '/gpio-0 /{print $5}' /sys/kernel/debug/gpio`
ButtonWPS=`awk '/gpio-1 /{print $5}' /sys/kernel/debug/gpio`
ButtonCheck=`awk '/gpio-16 /{print $5}' /sys/kernel/debug/gpio`
CNCNTLink=`awk '/gpio-10 /{print $5}' /sys/kernel/debug/gpio`

I wygląda ok . Czyli żadnych wycieków pamięci być nie może smile

31

Odp: QCA4531 Obsługa przycisków

A to już zależy co tam masz w tym /sys/kernel/debug/gpio smile

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

32

Odp: QCA4531 Obsługa przycisków

Cezary napisał/a:

A to już zależy co tam masz w tym /sys/kernel/debug/gpio smile

To odnosi się do tego {print $5}   ,czy wycieków pamięci ?

Tam bo wysłaniu echo na te wszystkie gpio jest coś takiego:

root@OpenWrt:/tmp# cat /sys/kernel/debug/gpio
GPIOs 0-17, ath79:
 gpio-0   (sysfs               ) in  lo
 gpio-1   (sysfs               ) in  lo
 gpio-2   (sysfs               ) out hi
 gpio-3   (sysfs               ) out lo
 gpio-10  (sysfs               ) in  hi
 gpio-13  (sysfs               ) out hi
 gpio-15  (sysfs               ) out hi
 gpio-16  (sysfs               ) in  hi

33

Odp: QCA4531 Obsługa przycisków

Do zawartości. W r6220 wygląda to tak:

gpiochip0: GPIOs 0-31, parent: platform/1e000600.gpio, 1e000600.gpio:
 gpio-7   (                    |wps                 ) in  hi    
 gpio-8   (                    |wifi                ) in  hi    
 gpio-10  (                    |usb_vbus            ) out hi    
 gpio-12  (                    |r6220:green:wps     ) out hi    
 gpio-13  (                    |r6220:green:wan     ) out hi    
 gpio-14  (                    |reset               ) in  hi    
 gpio-15  (                    |r6220:green:usb     ) out hi    
 gpio-16  (                    |r6220:green:wifi    ) out lo    
 gpio-18  (                    |r6220:green:power   ) out hi  
Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

34 (edytowany przez MiG25 2020-05-03 10:44:44)

Odp: QCA4531 Obsługa przycisków

Ok , załapałem , dzięki .
Czyli żadnych przeciwskazań z ciągłego tego odpytywania nie ma ?

35

Odp: QCA4531 Obsługa przycisków

Po za tym że system będzie obciążony tak działającym skryptem to nie. Jeżeli możesz sobie pozwolić na to to możesz dać sleep 1 pod koniec pętli żeby system miał czas robić inne rzeczy, ale oczywiście spowoduje to sekundowe opóźnienie w odczycie.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.