first commit

main
Ben 1 year ago
commit d330271396

@ -0,0 +1,39 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=cellled
PKG_VERSION:=0.0.1
PKG_RELEASE:=1
PKG_MAINTAINER:=Konstantine Shevlakov <shevlakov@132lan.ru>
include $(INCLUDE_DIR)/package.mk
define Package/$(PKG_NAME)
PKGARCH:=all
TITLE:=LED cellular signal signal strength
endef
define Package/$(PKG_NAME)/description
Indicate LED cellular signal signal strength.
endef
define Package/$(PKG_NAME)/conffiles
/etc/config/cellled
endef
define Build/Prepare
endef
define Build/Configure
endef
define Build/Compile
endef
define Package/$(PKG_NAME)/install
$(CP) ./root/* $(1)/
endef
$(eval $(call BuildPackage,$(PKG_NAME)))

@ -0,0 +1,25 @@
config device
option data_type 'qmi'
option device_qmi '/dev/cdc-wdm0'
option timeout '5'
config rssi_led
option led 'blue:sys'
option rssi_min '20'
option rssi_max '39'
config rssi_led
option led 'blue:wlan0'
option rssi_min '40'
option rssi_max '59'
config rssi_led
option led 'blue:wlan1'
option rssi_min '60'
option rssi_max '79'
config rssi_led
option led 'blue:net'
option rssi_min '80'
option rssi_max '100'

@ -0,0 +1,32 @@
#!/bin/sh /etc/rc.common
# Copyright (c) 2011-2015 OpenWrt.org
START=99
start() {
if [ ! -f "/var/run/cellled.pid" ]; then
/usr/bin/cellled >/dev/null 2>&1 &
PID=$(pgrep -f /usr/bin/cellled)
if [ $PID ]; then
echo $PID > /var/run/cellled.pid
fi
fi
return 0
}
stop() {
rm -f /var/run/cellled.pid
kill $(pgrep -f /usr/bin/cellled) >/dev/null 2>&1
/etc/init.d/led start
}
restart(){
stop
sleep 1
start
}
boot() {
(sleep 5 && start >/dev/null 2>&1) &
return 0
}

@ -0,0 +1,4 @@
#!/bin/sh
while true :; do
/usr/share/cellled.sh >/dev/null 2>&1
done

@ -0,0 +1,174 @@
#!/bin/sh
# get data
get_data(){
DATATYPE=$(uci -q get cellled.@device[0].data_type)
case $DATATYPE in
mm)
PORT=$(uci -q get cellled.@device[0].device_mm)
RSSI=$(mmcli -m ${PORT} -J | jsonfilter -e '@["modem"]["generic"]["signal-quality"]["value"]')
;;
qmi)
PORT=$(uci -q get cellled.@device[0].device_qmi)
QMICTL="qmicli -p -d $PORT"
RSSIDB=$($QMICTL --nas-get-signal-info | awk -F [\'\:\ ] '/RSSI:/{print $4}')
RSSI=$(echo $RSSIDB |awk '{printf "%d\n", (100*(1-(-51 - $1)/(-50 - -113)))}')
;;
uqmi)
PORT=$(uci -q get cellled.@device[0].device_qmi)
RSSIDB=$(uqmi -d ${PORT} --get-signal-info | jsonfilter -e '@["rssi"]')
RSSI=$(echo $RSSIDB |awk '{printf "%d\n", (100*(1-(-51 - $1)/(-51 - -113)))}')
;;
serial)
PORT=$(uci -q get cellled.@device[0].device)
RSSI=$(gcom -d ${PORT} -s /etc/gcom/getstrength.gcom | awk -F [:,] '/CSQ:/{printf "%.0f\n", $2*100/31}')
;;
esac
}
# get rssi levels
get_led_level(){
RSSI_MIN=$(uci -q get cellled.@rssi_led[$n].rssi_min)
RSSI_MAX=$(uci -q get cellled.@rssi_led[$n].rssi_max)
}
# set rgb light
set_led_rgb(){
if [ $RSSI -ge $RSSI_MIN -a $RSSI -le $RSSI_MAX ]; then
LED_ON=$(echo $RSSI_MIN $RSSI_MAX $RSSI | awk '{printf "%.0f\n", (255/($2-$1)*($3-$1))}')
STATE=true
else
LED_ON=0
STATE=false
fi
}
# set linear light
set_led_linear(){
if [ $RSSI -ge $RSSI_MIN -a $RSSI -lt $RSSI_MAX ]; then
STATE=true
elif [ $RSSI -ge $RSSI_MAX ]; then
STATE=true
elif [ $RSSI -lt $RSSI_MIN ]; then
STATE=false
else
STATE=false
fi
}
# set linear led level
if_linear(){
LED=$(uci -q get cellled.@rssi_led[$n].led)
get_led_level
set_led_linear
if [ $STATE = true -a $LED ]; then
LED_ON=255
echo $LED_ON > /sys/class/leds/$LED/brightness
else
LED_ON=0
echo $LED_ON > /sys/class/leds/$LED/brightness
fi
}
# set grb led level
if_rgb(){
PWM=$(uci -q get cellled.@device[0].pwm_mode)
LED_R=$(uci -q get cellled.@device[0].red_led)
LED_G=$(uci -q get cellled.@device[0].green_led)
LED_B=$(uci -q get cellled.@device[0].blue_led)
case $TYPE in
poor)
get_led_level
set_led_rgb
if [ $STATE = true ]; then
R=255
G=0
if [ "$PWM" = "1" ]; then
B=$((255-$LED_ON))
else
B=255
fi
fi
;;
bad)
get_led_level
set_led_rgb
if [ $STATE = true ]; then
R=255
if [ "$PWM" = "1" ]; then
G=$LED_ON
else
G=0
fi
B=0
fi
;;
fair)
get_led_level
set_led_rgb
if [ $STATE = true ]; then
if [ "$PWM" = "1" ]; then
R=$((255-$LED_ON))
else
R=255
fi
G=255
B=0
fi
;;
good|best|excellend)
get_led_level
set_led_rgb
if [ $STATE = true ]; then
R=0
G=255
B=0
fi
;;
esac
if [ ! $R ]; then R=0; fi
if [ ! $G ]; then G=0; fi
if [ ! $B ]; then B=0; fi
}
# select type led (rgb or linear)
select_led(){
if [ "$RGB_LED" = "1" ]; then
TYPE=$(uci -q get cellled.@rssi_led[$n].type)
if_rgb
else
if_linear
fi
}
# get param
get_param(){
RSSI=$RSSI
if [ $RSSI -lt 0 ]; then
RSSI=0
elif [ $RSSI -gt 100 ]; then
RSSI=100
fi
LED_ON=0
RGB_LED=$(uci -q get cellled.@device[0].rgb_led)
SECTIONS=$(uci show cellled | awk -F [\]\[\@=] '/=rssi_led/{print $3}')
TIMEOUT=$(uci -q get cellled.@device[0].timeout)
if [ -z $RSSI ]; then
exit 2
fi
}
get_data
get_param
for n in $SECTIONS; do
select_led
done
if [ "$RGB_LED" = "1" -a $LED_R -a $LED_G -a $LED_B ]; then
#echo "${LED_R}=${R} ${LED_G}=${G} ${LED_B}=${B}"
echo $R > /sys/class/leds/$LED_R/brightness
echo $G > /sys/class/leds/$LED_G/brightness
echo $B > /sys/class/leds/$LED_B/brightness
fi
sleep $TIMEOUT
Loading…
Cancel
Save