first commit
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…
Reference in New Issue