mirror of
https://github.com/Ysurac/openmptcprouter-feeds.git
synced 2025-03-09 15:40:03 +00:00
Sync to latest
This commit is contained in:
parent
2e0365edad
commit
dd13942d68
33 changed files with 3539 additions and 3029 deletions
0
luci-app-ouad/LICENSE
Executable file → Normal file
0
luci-app-ouad/LICENSE
Executable file → Normal file
12
luci-app-ouad/Makefile
Executable file → Normal file
12
luci-app-ouad/Makefile
Executable file → Normal file
|
@ -8,12 +8,18 @@
|
||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
LUCI_Title:=LuCI support for ssd1306 0.91\' 138x32 display
|
LUCI_Title:=LuCI support for ssd1306 0.91\' 138x32 display
|
||||||
LUCI_DEPENDS:=+i2c-tools +coreutils-nohup +libuci
|
LUCI_DEPENDS:=+libconfig
|
||||||
LUCI_PKGARCH:=all
|
LUCI_PKGARCH:=$(if $(realpath src/Makefile),,all)
|
||||||
|
PKG_VERSION:=20230823
|
||||||
|
PKG_RELEASE:=1
|
||||||
|
|
||||||
PKG_LICENSE:=GPLv3
|
PKG_LICENSE:=GPLv3
|
||||||
PKG_LINCESE_FILES:=LICENSE
|
PKG_LINCESE_FILES:=LICENSE
|
||||||
PKF_MAINTAINER:=natelol <natelol@github.com>
|
PKG_MAINTAINER:=natelol <natelol@github.com>
|
||||||
|
|
||||||
|
define Package/luci-app-oled/conffiles
|
||||||
|
/etc/config/oled
|
||||||
|
endef
|
||||||
|
|
||||||
include $(TOPDIR)/feeds/luci/luci.mk
|
include $(TOPDIR)/feeds/luci/luci.mk
|
||||||
|
|
||||||
|
|
5
luci-app-ouad/luasrc/controller/oled.lua
Executable file → Normal file
5
luci-app-ouad/luasrc/controller/oled.lua
Executable file → Normal file
|
@ -4,6 +4,11 @@ function index()
|
||||||
if not nixio.fs.access("/etc/config/oled") then
|
if not nixio.fs.access("/etc/config/oled") then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
local uci = require "luci.model.uci".cursor()
|
||||||
|
local showmenu = uci:get_first("oled", "oled", "showmenu", "0")
|
||||||
|
if showmenu == "0" then
|
||||||
|
return
|
||||||
|
end
|
||||||
entry({"admin", "services", "oled"}, alias("admin", "services", "oled", "setting"),_("OLED"), 90).dependent = true
|
entry({"admin", "services", "oled"}, alias("admin", "services", "oled", "setting"),_("OLED"), 90).dependent = true
|
||||||
entry({"admin", "services", "oled", "status"}, call("act_status"))
|
entry({"admin", "services", "oled", "status"}, call("act_status"))
|
||||||
entry({"admin", "services", "oled", "setting"}, cbi("oled/setting"),_("Setting"),30).leaf = true
|
entry({"admin", "services", "oled", "setting"}, cbi("oled/setting"),_("Setting"),30).leaf = true
|
||||||
|
|
3
luci-app-ouad/luasrc/model/cbi/oled/setting.lua
Executable file → Normal file
3
luci-app-ouad/luasrc/model/cbi/oled/setting.lua
Executable file → Normal file
|
@ -40,6 +40,9 @@ o = s:taboption("info", Flag, "date", translate("Date"), translate('Format YYYY-
|
||||||
o.default=0
|
o.default=0
|
||||||
o = s:taboption("info", Flag, "lanip", translate("IP"), translate("LAN IP address"))
|
o = s:taboption("info", Flag, "lanip", translate("IP"), translate("LAN IP address"))
|
||||||
o.default=0
|
o.default=0
|
||||||
|
o = s:taboption("info", Value, "ipifname", translate("which eth to monitor"))
|
||||||
|
o:depends("lanip",'1')
|
||||||
|
o.default='br-lan'
|
||||||
o = s:taboption("info", Flag, "cputemp", translate("CPU temperature"))
|
o = s:taboption("info", Flag, "cputemp", translate("CPU temperature"))
|
||||||
o.default=0
|
o.default=0
|
||||||
o = s:taboption("info", Flag, "cpufreq", translate("CPU frequency"))
|
o = s:taboption("info", Flag, "cpufreq", translate("CPU frequency"))
|
||||||
|
|
0
luci-app-ouad/luasrc/view/oled/status.htm
Executable file → Normal file
0
luci-app-ouad/luasrc/view/oled/status.htm
Executable file → Normal file
1
luci-app-ouad/po/zh-cn
Symbolic link
1
luci-app-ouad/po/zh-cn
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
zh_Hans
|
1
luci-app-ouad/po/zh-tw
Symbolic link
1
luci-app-ouad/po/zh-tw
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
zh_Hant
|
0
luci-app-ouad/po/zh_Hans/oled.po
Executable file → Normal file
0
luci-app-ouad/po/zh_Hans/oled.po
Executable file → Normal file
0
luci-app-ouad/po/zh_Hant/oled.po
Executable file → Normal file
0
luci-app-ouad/po/zh_Hant/oled.po
Executable file → Normal file
4
luci-app-ouad/root/etc/config/oled
Executable file → Normal file
4
luci-app-ouad/root/etc/config/oled
Executable file → Normal file
|
@ -1,5 +1,6 @@
|
||||||
config oled
|
config oled
|
||||||
option enable '1'
|
option showmenu '0'
|
||||||
|
option enable '0'
|
||||||
option drawline '0'
|
option drawline '0'
|
||||||
option drawrect '0'
|
option drawrect '0'
|
||||||
option fillrect '0'
|
option fillrect '0'
|
||||||
|
@ -14,6 +15,7 @@ config oled
|
||||||
option date '1'
|
option date '1'
|
||||||
option netspeed '0'
|
option netspeed '0'
|
||||||
option lanip '1'
|
option lanip '1'
|
||||||
|
option ipifname 'br-lan'
|
||||||
option cpufreq '1'
|
option cpufreq '1'
|
||||||
option cputemp '1'
|
option cputemp '1'
|
||||||
option time '60'
|
option time '60'
|
||||||
|
|
|
@ -1,144 +1,115 @@
|
||||||
#!/bin/sh /etc/rc.common
|
#!/bin/sh /etc/rc.common
|
||||||
START=88
|
|
||||||
|
|
||||||
|
START=88
|
||||||
|
STOP=11
|
||||||
|
USE_PROCD=1
|
||||||
PROG=/usr/bin/oled
|
PROG=/usr/bin/oled
|
||||||
|
|
||||||
stop() {
|
get_section() {
|
||||||
kill -2 $(pgrep /usr/bin/oled)
|
eval "export -n ${2}=\"$1\""
|
||||||
kill -9 $(pgrep -f /usr/sbin/netspeed)
|
return 1
|
||||||
echo "oled exit..."
|
|
||||||
}
|
}
|
||||||
|
|
||||||
start() {
|
start_service() {
|
||||||
enabled=$(uci get oled.@oled[0].enable)
|
local mainsection
|
||||||
if [ $enabled -eq 0 ]; then
|
config_load oled
|
||||||
exit 0
|
config_foreach get_section oled mainsection
|
||||||
|
local section=$mainsection
|
||||||
|
|
||||||
|
local enabled ; config_get enabled "$section" enable 0
|
||||||
|
if [[ $enabled -eq 0 ]]; then
|
||||||
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
autoswitch=$(uci get oled.@oled[0].autoswitch)
|
procd_open_instance
|
||||||
from=$(uci get oled.@oled[0].from)
|
procd_set_param command ${PROG}
|
||||||
to=$(uci get oled.@oled[0].to)
|
procd_append_param command --needInit
|
||||||
|
|
||||||
if [ ${autoswitch} -eq 1 ]; then
|
local param
|
||||||
hour=$(date +"%H")
|
# default /dev/i2c-0
|
||||||
min=$(date +"%M")
|
config_get param "$section" path
|
||||||
ihour=`expr $hour + 0`
|
[ "$param" != "" ] && procd_append_param command --i2cDevPath="$param"
|
||||||
imin=`expr $min + 0`
|
|
||||||
now=$(($ihour*60+$imin))
|
|
||||||
if [[ $now -lt $from || $now -gt $to ]]; then
|
|
||||||
stop
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
#crontab daemon
|
# from begin_minitues to end_minitues
|
||||||
if ! grep "/etc/init.d/oled \+restart" /etc/crontabs/root >/dev/null 2>&1; then
|
# default 0 - 1440
|
||||||
echo "*/5 * * * * /etc/init.d/oled restart >/dev/null 2>&1" >> /etc/crontabs/root
|
config_get param "$section" from
|
||||||
fi
|
[ "$param" != "" ] && procd_append_param command --from="$param"
|
||||||
|
config_get param "$section" to
|
||||||
|
[ "$param" != "" ] && procd_append_param command --to="$param"
|
||||||
|
|
||||||
date=$(uci get oled.@oled[0].date)
|
config_get param "$section" date
|
||||||
lanip=$(uci get oled.@oled[0].lanip)
|
[ "$param" == "1" ] && procd_append_param command --displayDate
|
||||||
cputemp=$(uci get oled.@oled[0].cputemp)
|
|
||||||
cpufreq=$(uci get oled.@oled[0].cpufreq)
|
|
||||||
netspeed=$(uci get oled.@oled[0].netspeed)
|
|
||||||
time=$(uci get oled.@oled[0].time)
|
|
||||||
drawline=$(uci get oled.@oled[0].drawline)
|
|
||||||
drawrect=$(uci get oled.@oled[0].drawrect)
|
|
||||||
fillrect=$(uci get oled.@oled[0].fillrect)
|
|
||||||
drawcircle=$(uci get oled.@oled[0].drawcircle)
|
|
||||||
drawroundrect=$(uci get oled.@oled[0].drawroundrect)
|
|
||||||
fillroundrect=$(uci get oled.@oled[0].fillroundrect)
|
|
||||||
drawtriangle=$(uci get oled.@oled[0].drawtriangle)
|
|
||||||
filltriangle=$(uci get oled.@oled[0].filltriangle)
|
|
||||||
displaybitmap=$(uci get oled.@oled[0].displaybitmap)
|
|
||||||
displayinvertnormal=$(uci get oled.@oled[0].displayinvertnormal)
|
|
||||||
drawbitmapeg=$(uci get oled.@oled[0].drawbitmapeg)
|
|
||||||
rotate=$(uci get oled.@oled[0].rotate)
|
|
||||||
scroll=$(uci get oled.@oled[0].scroll)
|
|
||||||
text=$(uci get oled.@oled[0].text)
|
|
||||||
netsource=$(uci get oled.@oled[0].netsource)
|
|
||||||
path=$(uci get oled.@oled[0].path)
|
|
||||||
|
|
||||||
if [ ${netspeed} -eq 1 ] && [ -z "$(pgrep -f netspeed)" ]; then
|
config_get param "$section" lanip
|
||||||
nohup /usr/sbin/netspeed ${netsource} >/dev/null 2>&1 &
|
[ "$param" == "1" ] && procd_append_param command --displayIp
|
||||||
|
config_get param "$section" ipifname
|
||||||
|
if [ "$param" != "" ];then
|
||||||
|
procd_append_param command --ipIfName="$param"
|
||||||
else
|
else
|
||||||
[ -n "$(pgrep -f /usr/sbin/netspeed)" ] && kill -9 $(pgrep -f /usr/sbin/netspeed) 2>&1 >/dev/null
|
procd_append_param command --ipIfName="br-lan"
|
||||||
rm -f /tmp/netspeed
|
|
||||||
fi
|
fi
|
||||||
#logger -t "oled" "${PROG} ${date} ${lanip} ${cputemp} ${cpufreq} ${netspeed} ${time} ${drawline} ${drawrect} ${fillrect} ${drawcircle} ${drawroundrect} ${fillroundrect} ${drawtriangle} ${filltriangle} ${displaybitmap} ${displayinvertnormal} ${drawbitmapeg} ${scroll} ${text} ${netsource} ${path} ${rotate} 1"
|
|
||||||
#nohup ${PROG} ${date} ${lanip} ${cputemp} ${cpufreq} ${netspeed} ${time} ${drawline} ${drawrect} ${fillrect} ${drawcircle} ${drawroundrect} ${fillroundrect} ${drawtriangle} ${filltriangle} ${displaybitmap} ${displayinvertnormal} ${drawbitmapeg} ${scroll} "${text}" "${netsource}" "${path}" ${rotate} 1 > /dev/null 2>&1 &
|
config_get param "$section" cputemp
|
||||||
nohup ${PROG} eth0 /dev/i2c-0 > /dev/null 2>&1 &
|
[ "$param" == "1" ] && procd_append_param command --displayCpuTemp
|
||||||
|
|
||||||
|
config_get param "$section" cpufreq
|
||||||
|
[ "$param" == "1" ] && procd_append_param command --displayCpuFreq
|
||||||
|
|
||||||
|
config_get param "$section" netspeed
|
||||||
|
[ "$param" == "1" ] && procd_append_param command --displayNetSpeed
|
||||||
|
# default eth0
|
||||||
|
config_get param "$section" netsource
|
||||||
|
[ "$param" != "" ] && procd_append_param command --speedIfName="$param"
|
||||||
|
|
||||||
|
# default 60
|
||||||
|
config_get param "$section" time
|
||||||
|
[ "$param" != "" ] && procd_append_param command --interval="$param"
|
||||||
|
|
||||||
|
config_get param "$section" drawline
|
||||||
|
[ "$param" == "1" ] && procd_append_param command --drawLine
|
||||||
|
|
||||||
|
config_get param "$section" drawrect
|
||||||
|
[ "$param" == "1" ] && procd_append_param command --drawRect
|
||||||
|
|
||||||
|
config_get param "$section" fillrect
|
||||||
|
[ "$param" == "1" ] && procd_append_param command --fillRect
|
||||||
|
|
||||||
|
config_get param "$section" drawcircle
|
||||||
|
[ "$param" == "1" ] && procd_append_param command --drawCircle
|
||||||
|
|
||||||
|
config_get param "$section" drawroundrect
|
||||||
|
[ "$param" == "1" ] && procd_append_param command --drawRoundCircle
|
||||||
|
|
||||||
|
config_get param "$section" fillroundrect
|
||||||
|
[ "$param" == "1" ] && procd_append_param command --fillRoundCircle
|
||||||
|
|
||||||
|
config_get param "$section" drawtriangle
|
||||||
|
[ "$param" == "1" ] && procd_append_param command --drawTriangle
|
||||||
|
|
||||||
|
config_get param "$section" filltriangle
|
||||||
|
[ "$param" == "1" ] && procd_append_param command --fillTriangle
|
||||||
|
|
||||||
|
config_get param "$section" displaybitmap
|
||||||
|
[ "$param" == "1" ] && procd_append_param command --displayBitmap
|
||||||
|
|
||||||
|
config_get param "$section" drawbitmapeg
|
||||||
|
[ "$param" == "1" ] && procd_append_param command --drawBitmapEg
|
||||||
|
|
||||||
|
config_get param "$section" displayinvertnormal
|
||||||
|
[ "$param" == "1" ] && procd_append_param command --displayInvertNormal
|
||||||
|
|
||||||
|
config_get param "$section" rotate
|
||||||
|
[ "$param" == "1" ] && procd_append_param command --rotate
|
||||||
|
|
||||||
|
config_get param "$section" scroll
|
||||||
|
[ "$param" == "1" ] && procd_append_param command --scroll
|
||||||
|
config_get param "$section" text
|
||||||
|
[ "$param" != "" ] && procd_append_param command --scrollText="$param"
|
||||||
|
|
||||||
|
procd_set_param respawn
|
||||||
|
procd_close_instance
|
||||||
}
|
}
|
||||||
|
|
||||||
restart() {
|
service_triggers() {
|
||||||
enabled=$(uci get oled.@oled[0].enable)
|
procd_add_reload_trigger "oled"
|
||||||
pgrep -f ${PROG} >/dev/null
|
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
if [ $enabled -eq 1 ]; then
|
|
||||||
autoswitch=$(uci get oled.@oled[0].autoswitch)
|
|
||||||
from=$(uci get oled.@oled[0].from)
|
|
||||||
to=$(uci get oled.@oled[0].to)
|
|
||||||
if [ ${autoswitch} -eq 1 ]; then
|
|
||||||
hour=$(date +"%H")
|
|
||||||
min=$(date +"%M")
|
|
||||||
ihour=`expr $hour + 0`
|
|
||||||
imin=`expr $min + 0`
|
|
||||||
now=$(($ihour*60+$imin))
|
|
||||||
if [[ $now -lt $from || $now -gt $to ]]; then
|
|
||||||
stop
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
date=$(uci get oled.@oled[0].date)
|
|
||||||
lanip=$(uci get oled.@oled[0].lanip)
|
|
||||||
cputemp=$(uci get oled.@oled[0].cputemp)
|
|
||||||
cpufreq=$(uci get oled.@oled[0].cpufreq)
|
|
||||||
netspeed=$(uci get oled.@oled[0].netspeed)
|
|
||||||
time=$(uci get oled.@oled[0].time)
|
|
||||||
drawline=$(uci get oled.@oled[0].drawline)
|
|
||||||
drawrect=$(uci get oled.@oled[0].drawrect)
|
|
||||||
fillrect=$(uci get oled.@oled[0].fillrect)
|
|
||||||
drawcircle=$(uci get oled.@oled[0].drawcircle)
|
|
||||||
drawroundrect=$(uci get oled.@oled[0].drawroundrect)
|
|
||||||
fillroundrect=$(uci get oled.@oled[0].fillroundrect)
|
|
||||||
drawtriangle=$(uci get oled.@oled[0].drawtriangle)
|
|
||||||
filltriangle=$(uci get oled.@oled[0].filltriangle)
|
|
||||||
displaybitmap=$(uci get oled.@oled[0].displaybitmap)
|
|
||||||
displayinvertnormal=$(uci get oled.@oled[0].displayinvertnormal)
|
|
||||||
drawbitmapeg=$(uci get oled.@oled[0].drawbitmapeg)
|
|
||||||
rotate=$(uci get oled.@oled[0].rotate)
|
|
||||||
scroll=$(uci get oled.@oled[0].scroll)
|
|
||||||
text=$(uci get oled.@oled[0].text)
|
|
||||||
netsource=$(uci get oled.@oled[0].netsource)
|
|
||||||
path=$(uci get oled.@oled[0].path)
|
|
||||||
vpsip=0
|
|
||||||
intfstatus=0
|
|
||||||
|
|
||||||
[ -n "$(pgrep /usr/bin/oled)" ] && kill -9 $(pgrep /usr/bin/oled) 2>&1 >/dev/null
|
|
||||||
[ -n "$(pgrep -f /usr/sbin/netspeed)" ] && kill -9 $(pgrep -f /usr/sbin/netspeed) 2>&1 >/dev/null
|
|
||||||
|
|
||||||
if [ ${netspeed} -eq 1 ]; then
|
|
||||||
nohup /usr/sbin/netspeed ${netsource} >/dev/null 2>&1 &
|
|
||||||
else
|
|
||||||
#kill -9 $(pgrep -f /usr/sbin/netspeed)
|
|
||||||
rm -f /tmp/netspeed
|
|
||||||
fi
|
|
||||||
#nohup ${PROG} ${date} ${lanip} ${cputemp} ${cpufreq} ${netspeed} ${time} ${drawline} ${drawrect} ${fillrect} ${drawcircle} ${drawroundrect} ${fillroundrect} ${drawtriangle} ${filltriangle} ${displaybitmap} ${displayinvertnormal} ${drawbitmapeg} ${scroll} "${text}" "${netsource}" "${path}" ${rotate} 0 > /dev/null 2>&1 &
|
|
||||||
#nohup ${PROG} 1 1 1 1 0 60 0 0 0 0 0 0 0 0 0 0 0 0 OPENWRT eth0 /dev/i2c-0 0 1 1 1 > /dev/null 2>&1 &
|
|
||||||
nohup ${PROG} eth0 /dev/i2c-0 > /dev/null 2>&1 &
|
|
||||||
else
|
|
||||||
stop
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
if [ $enabled -eq 1 ]; then
|
|
||||||
start
|
|
||||||
else
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
boot() {
|
|
||||||
start
|
|
||||||
}
|
}
|
||||||
|
|
16
luci-app-ouad/root/etc/uci-defaults/oled
Executable file → Normal file
16
luci-app-ouad/root/etc/uci-defaults/oled
Executable file → Normal file
|
@ -1,16 +1,23 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
uci_write_config() {
|
uci_write_config() {
|
||||||
uci -q set oled.@oled[0].path="$1"
|
[[ `uci -q get oled.@oled[0].showmenu` -eq 1 ]] && return
|
||||||
uci -q set oled.@oled[0].rotate="$2"
|
uci -q batch <<-EOF >/dev/null
|
||||||
uci -q commit oled
|
set oled.@oled[0].showmenu="1"
|
||||||
|
set oled.@oled[0].enable="1"
|
||||||
|
set oled.@oled[0].path="$1"
|
||||||
|
set oled.@oled[0].rotate="$2"
|
||||||
|
set oled.@oled[0].netspeed="$3"
|
||||||
|
set oled.@oled[0].netsource="$4"
|
||||||
|
commit oled
|
||||||
|
EOF
|
||||||
}
|
}
|
||||||
|
|
||||||
. /lib/functions/system.sh
|
. /lib/functions/system.sh
|
||||||
|
|
||||||
case "$(board_name)" in
|
case "$(board_name)" in
|
||||||
hinlink,opc-h69k)
|
hinlink,opc-h69k)
|
||||||
uci_write_config '/dev/i2c-5' 1
|
uci_write_config '/dev/i2c-5' 1 1 eth0
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
@ -21,5 +28,6 @@ uci -q batch <<-EOF >/dev/null
|
||||||
commit ucitrack
|
commit ucitrack
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
sed -e "/\/etc\/init\.d\/oled/d" -i /etc/crontabs/root && /etc/init.d/cron reload
|
||||||
rm -rf /tmp/luci-*
|
rm -rf /tmp/luci-*
|
||||||
exit 0
|
exit 0
|
||||||
|
|
|
@ -1,20 +0,0 @@
|
||||||
#!/bin/ash
|
|
||||||
IF=$1
|
|
||||||
if [ -z "$IF" ]; then
|
|
||||||
IF=`ls -1 /sys/class/net/ | head -1`
|
|
||||||
fi
|
|
||||||
RXPREV=-1
|
|
||||||
TXPREV=-1
|
|
||||||
echo "Listening $IF..."
|
|
||||||
while [ 1 == 1 ] ; do
|
|
||||||
RX=`cat /sys/class/net/${IF}/statistics/rx_bytes`
|
|
||||||
TX=`cat /sys/class/net/${IF}/statistics/tx_bytes`
|
|
||||||
if [ $RXPREV -ne -1 ] ; then
|
|
||||||
let BWRX=$RX-$RXPREV
|
|
||||||
let BWTX=$TX-$TXPREV
|
|
||||||
echo "$BWRX $BWTX">/tmp/netspeed
|
|
||||||
fi
|
|
||||||
RXPREV=$RX
|
|
||||||
TXPREV=$TX
|
|
||||||
sleep 1
|
|
||||||
done
|
|
|
@ -1,26 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
alldata=$(ubus call openmptcprouter status)
|
|
||||||
labels=$(echo $alldata | jsonfilter -e '@.wans[@.multipath!="off"].label')
|
|
||||||
for wan in $labels; do
|
|
||||||
wandata=$(echo $alldata | jsonfilter -e "@.wans[@.label=\"${wan}\"]")
|
|
||||||
status=$(echo $wandata | jsonfilter -e '@.status')
|
|
||||||
signal=$(echo $wandata | jsonfilter -e '@.signal')
|
|
||||||
echo -n "$wan $status "
|
|
||||||
if [ "$signal" != "" ]; then
|
|
||||||
if [ "$signal" -eq "0" ]; then
|
|
||||||
echo -n "0/4"
|
|
||||||
elif [ "$signal" -lt "25" ]; then
|
|
||||||
echo -n "1/4"
|
|
||||||
elif [ "$signal" -lt "50" ]; then
|
|
||||||
echo -n "2/4"
|
|
||||||
elif [ "$signal" -lt "75" ]; then
|
|
||||||
echo -n "3/4"
|
|
||||||
else
|
|
||||||
echo -n "4/4"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo -n "$(echo $wandata | jsonfilter -e '@.state')"
|
|
||||||
fi
|
|
||||||
echo
|
|
||||||
done
|
|
|
@ -1,10 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
ubus call openmptcprouter status | jsonfilter -e '@.wans[@.multipath!="off"]' | while read data; do
|
|
||||||
label=$(echo $data | jsonfilter -e '@.label')
|
|
||||||
latency=$(echo $data | jsonfilter -e '@.latency')
|
|
||||||
[ -n "$latency" ] && latency="${latency}ms"
|
|
||||||
whois=$(echo $data | jsonfilter -e '@.whois')
|
|
||||||
multipath=$(echo $data | jsonfilter -e '@.multipath')
|
|
||||||
echo "${label}: ${multipath} ${whois} ${latency}"
|
|
||||||
done
|
|
|
@ -1,6 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
echo "router: $(uci -q get openmptcprouter.settings.version)"
|
|
||||||
echo "server: $(uci -q get openmptcprouter.vps.omr_version)"
|
|
||||||
echo "uptime: $(uptime | awk -F, '{sub(".*up ",x,$1);print $1,$2}' | sed 's/ */ /g')"
|
|
||||||
echo "temp: $(awk '{printf("%.1f°C",$1/1e3)}' /sys/class/thermal/thermal_zone0/temp)"
|
|
|
@ -1,14 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
routerid=$(uci -q get rtty.@rtty[0].id | cut -c-9)
|
|
||||||
vpsip=$(curl https://55860.com/modules/addons/flowpacket/api.php?routeid=${routerid} | jsonfilter -e '@.data.dedicatedip')
|
|
||||||
[ -n "$vpsip" ] && {
|
|
||||||
vpsdata=$(curl https://55860.com/modules/addons/flowpacket/getWay.php?routeid=${vpsip})
|
|
||||||
user=$(echo ${vpsdata} | jsonfilter -r '@.email')
|
|
||||||
data=$(echo ${vpsdata} | jsonfilter -r '@.data')
|
|
||||||
nextduedate=$(echo ${vpsdata} | jsonfilter -r '@.nextduedate')
|
|
||||||
echo "user: ${user}"
|
|
||||||
echo "residual flow: ${data}
|
|
||||||
echo "router ID: ${routerid}
|
|
||||||
echo "next due date: ${nextduedate}"
|
|
||||||
}
|
|
|
@ -1,8 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
public_ip=$(uci -q get openmptcprouter.omr.detected_public_ipv4 | tr -d "\n")
|
|
||||||
if [ -n "$public_ip" ]; then
|
|
||||||
echo "IP: ${public_ip}"
|
|
||||||
else
|
|
||||||
echo "Waiting for server..."
|
|
||||||
fi
|
|
0
luci-app-ouad/root/usr/share/rpcd/acl.d/luci-app-oled.json
Executable file → Normal file
0
luci-app-ouad/root/usr/share/rpcd/acl.d/luci-app-oled.json
Executable file → Normal file
183
luci-app-ouad/src/Example_Code/.clang-format
Normal file
183
luci-app-ouad/src/Example_Code/.clang-format
Normal file
|
@ -0,0 +1,183 @@
|
||||||
|
---
|
||||||
|
Language: Cpp
|
||||||
|
# BasedOnStyle: Google
|
||||||
|
AccessModifierOffset: -1
|
||||||
|
AlignAfterOpenBracket: Align
|
||||||
|
AlignConsecutiveMacros: false
|
||||||
|
AlignConsecutiveAssignments: false
|
||||||
|
AlignConsecutiveBitFields: false
|
||||||
|
AlignConsecutiveDeclarations: false
|
||||||
|
AlignEscapedNewlines: Left
|
||||||
|
AlignOperands: Align
|
||||||
|
AlignTrailingComments: true
|
||||||
|
AllowAllArgumentsOnNextLine: true
|
||||||
|
AllowAllConstructorInitializersOnNextLine: true
|
||||||
|
AllowAllParametersOfDeclarationOnNextLine: true
|
||||||
|
AllowShortEnumsOnASingleLine: true
|
||||||
|
AllowShortBlocksOnASingleLine: Never
|
||||||
|
AllowShortCaseLabelsOnASingleLine: false
|
||||||
|
AllowShortFunctionsOnASingleLine: All
|
||||||
|
AllowShortLambdasOnASingleLine: All
|
||||||
|
AllowShortIfStatementsOnASingleLine: WithoutElse
|
||||||
|
AllowShortLoopsOnASingleLine: true
|
||||||
|
AlwaysBreakAfterDefinitionReturnType: None
|
||||||
|
AlwaysBreakAfterReturnType: None
|
||||||
|
AlwaysBreakBeforeMultilineStrings: true
|
||||||
|
AlwaysBreakTemplateDeclarations: Yes
|
||||||
|
BinPackArguments: true
|
||||||
|
BinPackParameters: true
|
||||||
|
BraceWrapping:
|
||||||
|
AfterCaseLabel: false
|
||||||
|
AfterClass: false
|
||||||
|
AfterControlStatement: Never
|
||||||
|
AfterEnum: false
|
||||||
|
AfterFunction: false
|
||||||
|
AfterNamespace: false
|
||||||
|
AfterObjCDeclaration: false
|
||||||
|
AfterStruct: false
|
||||||
|
AfterUnion: false
|
||||||
|
AfterExternBlock: false
|
||||||
|
BeforeCatch: false
|
||||||
|
BeforeElse: false
|
||||||
|
BeforeLambdaBody: false
|
||||||
|
BeforeWhile: false
|
||||||
|
IndentBraces: false
|
||||||
|
SplitEmptyFunction: true
|
||||||
|
SplitEmptyRecord: true
|
||||||
|
SplitEmptyNamespace: true
|
||||||
|
BreakBeforeBinaryOperators: None
|
||||||
|
BreakBeforeBraces: Attach
|
||||||
|
BreakBeforeInheritanceComma: false
|
||||||
|
BreakInheritanceList: BeforeColon
|
||||||
|
BreakBeforeTernaryOperators: true
|
||||||
|
BreakConstructorInitializersBeforeComma: false
|
||||||
|
BreakConstructorInitializers: BeforeColon
|
||||||
|
BreakAfterJavaFieldAnnotations: false
|
||||||
|
BreakStringLiterals: true
|
||||||
|
ColumnLimit: 80
|
||||||
|
CommentPragmas: '^ IWYU pragma:'
|
||||||
|
CompactNamespaces: false
|
||||||
|
ConstructorInitializerAllOnOneLineOrOnePerLine: true
|
||||||
|
ConstructorInitializerIndentWidth: 4
|
||||||
|
ContinuationIndentWidth: 4
|
||||||
|
Cpp11BracedListStyle: true
|
||||||
|
DeriveLineEnding: true
|
||||||
|
DerivePointerAlignment: true
|
||||||
|
DisableFormat: false
|
||||||
|
ExperimentalAutoDetectBinPacking: false
|
||||||
|
FixNamespaceComments: true
|
||||||
|
ForEachMacros:
|
||||||
|
- foreach
|
||||||
|
- Q_FOREACH
|
||||||
|
- BOOST_FOREACH
|
||||||
|
IncludeBlocks: Regroup
|
||||||
|
IncludeCategories:
|
||||||
|
- Regex: '^<ext/.*\.h>'
|
||||||
|
Priority: 2
|
||||||
|
SortPriority: 0
|
||||||
|
- Regex: '^<.*\.h>'
|
||||||
|
Priority: 1
|
||||||
|
SortPriority: 0
|
||||||
|
- Regex: '^<.*'
|
||||||
|
Priority: 2
|
||||||
|
SortPriority: 0
|
||||||
|
- Regex: '.*'
|
||||||
|
Priority: 3
|
||||||
|
SortPriority: 0
|
||||||
|
IncludeIsMainRegex: '([-_](test|unittest))?$'
|
||||||
|
IncludeIsMainSourceRegex: ''
|
||||||
|
IndentCaseLabels: true
|
||||||
|
IndentCaseBlocks: false
|
||||||
|
IndentGotoLabels: true
|
||||||
|
IndentPPDirectives: None
|
||||||
|
IndentExternBlock: AfterExternBlock
|
||||||
|
IndentWidth: 2
|
||||||
|
IndentWrappedFunctionNames: false
|
||||||
|
InsertTrailingCommas: None
|
||||||
|
JavaScriptQuotes: Leave
|
||||||
|
JavaScriptWrapImports: true
|
||||||
|
KeepEmptyLinesAtTheStartOfBlocks: false
|
||||||
|
MacroBlockBegin: ''
|
||||||
|
MacroBlockEnd: ''
|
||||||
|
MaxEmptyLinesToKeep: 1
|
||||||
|
NamespaceIndentation: None
|
||||||
|
ObjCBinPackProtocolList: Never
|
||||||
|
ObjCBlockIndentWidth: 2
|
||||||
|
ObjCBreakBeforeNestedBlockParam: true
|
||||||
|
ObjCSpaceAfterProperty: false
|
||||||
|
ObjCSpaceBeforeProtocolList: true
|
||||||
|
PenaltyBreakAssignment: 2
|
||||||
|
PenaltyBreakBeforeFirstCallParameter: 1
|
||||||
|
PenaltyBreakComment: 300
|
||||||
|
PenaltyBreakFirstLessLess: 120
|
||||||
|
PenaltyBreakString: 1000
|
||||||
|
PenaltyBreakTemplateDeclaration: 10
|
||||||
|
PenaltyExcessCharacter: 1000000
|
||||||
|
PenaltyReturnTypeOnItsOwnLine: 200
|
||||||
|
PointerAlignment: Left
|
||||||
|
RawStringFormats:
|
||||||
|
- Language: Cpp
|
||||||
|
Delimiters:
|
||||||
|
- cc
|
||||||
|
- CC
|
||||||
|
- cpp
|
||||||
|
- Cpp
|
||||||
|
- CPP
|
||||||
|
- 'c++'
|
||||||
|
- 'C++'
|
||||||
|
CanonicalDelimiter: ''
|
||||||
|
BasedOnStyle: google
|
||||||
|
- Language: TextProto
|
||||||
|
Delimiters:
|
||||||
|
- pb
|
||||||
|
- PB
|
||||||
|
- proto
|
||||||
|
- PROTO
|
||||||
|
EnclosingFunctions:
|
||||||
|
- EqualsProto
|
||||||
|
- EquivToProto
|
||||||
|
- PARSE_PARTIAL_TEXT_PROTO
|
||||||
|
- PARSE_TEST_PROTO
|
||||||
|
- PARSE_TEXT_PROTO
|
||||||
|
- ParseTextOrDie
|
||||||
|
- ParseTextProtoOrDie
|
||||||
|
- ParseTestProto
|
||||||
|
- ParsePartialTestProto
|
||||||
|
CanonicalDelimiter: ''
|
||||||
|
BasedOnStyle: google
|
||||||
|
ReflowComments: true
|
||||||
|
SortIncludes: true
|
||||||
|
SortUsingDeclarations: true
|
||||||
|
SpaceAfterCStyleCast: false
|
||||||
|
SpaceAfterLogicalNot: false
|
||||||
|
SpaceAfterTemplateKeyword: true
|
||||||
|
SpaceBeforeAssignmentOperators: true
|
||||||
|
SpaceBeforeCpp11BracedList: false
|
||||||
|
SpaceBeforeCtorInitializerColon: true
|
||||||
|
SpaceBeforeInheritanceColon: true
|
||||||
|
SpaceBeforeParens: ControlStatements
|
||||||
|
SpaceBeforeRangeBasedForLoopColon: true
|
||||||
|
SpaceInEmptyBlock: false
|
||||||
|
SpaceInEmptyParentheses: false
|
||||||
|
SpacesBeforeTrailingComments: 2
|
||||||
|
SpacesInAngles: false
|
||||||
|
SpacesInConditionalStatement: false
|
||||||
|
SpacesInContainerLiterals: true
|
||||||
|
SpacesInCStyleCastParentheses: false
|
||||||
|
SpacesInParentheses: false
|
||||||
|
SpacesInSquareBrackets: false
|
||||||
|
SpaceBeforeSquareBrackets: false
|
||||||
|
Standard: Auto
|
||||||
|
StatementMacros:
|
||||||
|
- Q_UNUSED
|
||||||
|
- QT_REQUIRE_VERSION
|
||||||
|
IndentWidth: 8
|
||||||
|
TabWidth: 8
|
||||||
|
UseCRLF: false
|
||||||
|
UseTab: Always
|
||||||
|
WhitespaceSensitiveMacros:
|
||||||
|
- STRINGIZE
|
||||||
|
- PP_STRINGIZE
|
||||||
|
- BOOST_PP_STRINGIZE
|
||||||
|
...
|
||||||
|
|
853
luci-app-ouad/src/Example_Code/Main.c
Executable file → Normal file
853
luci-app-ouad/src/Example_Code/Main.c
Executable file → Normal file
|
@ -8,100 +8,833 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Lib Includes */
|
/* Lib Includes */
|
||||||
#include <stdlib.h>
|
#include <getopt.h>
|
||||||
#include <stdio.h>
|
#include <libconfig.h>
|
||||||
#include <string.h>
|
#include <limits.h>
|
||||||
#include <unistd.h>
|
#include <pthread.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <time.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
/* Header Files */
|
/* Header Files */
|
||||||
#include "I2C.h"
|
#include "I2C.h"
|
||||||
#include "SSD1306_OLED.h"
|
#include "SSD1306_OLED.h"
|
||||||
#include "example_app.h"
|
#include "example_app.h"
|
||||||
|
|
||||||
|
#define NETSPEED_INTERVAL 1000000
|
||||||
|
#define DISPLAY_INTERVAL 1000000
|
||||||
|
#define TIME_CHECK_INTERVAL 5000000
|
||||||
|
|
||||||
|
struct st_config {
|
||||||
|
unsigned int disp_date;
|
||||||
|
unsigned int disp_ip;
|
||||||
|
char *ip_if_name;
|
||||||
|
unsigned int disp_cpu_temp;
|
||||||
|
unsigned int disp_cpu_freq;
|
||||||
|
unsigned int disp_net_speed;
|
||||||
|
char *speed_if_name;
|
||||||
|
unsigned int interval;
|
||||||
|
unsigned int draw_line;
|
||||||
|
unsigned int draw_rect;
|
||||||
|
unsigned int fill_rect;
|
||||||
|
unsigned int draw_circle;
|
||||||
|
unsigned int draw_round_circle;
|
||||||
|
unsigned int fill_round_circle;
|
||||||
|
unsigned int draw_triangle;
|
||||||
|
unsigned int fill_triangle;
|
||||||
|
unsigned int disp_bitmap;
|
||||||
|
unsigned int disp_invert_normal;
|
||||||
|
unsigned int draw_bitmap_eg;
|
||||||
|
unsigned int scroll;
|
||||||
|
char *scroll_text;
|
||||||
|
char *i2c_dev_path;
|
||||||
|
unsigned int rotate;
|
||||||
|
unsigned int need_init;
|
||||||
|
int from;
|
||||||
|
int to;
|
||||||
|
};
|
||||||
|
|
||||||
|
static void printHelp() {
|
||||||
|
printf(
|
||||||
|
"\n\
|
||||||
|
Usage: oled [options] ...\n\
|
||||||
|
Options:\n\
|
||||||
|
--help or -h Display this information.\n\
|
||||||
|
--version or -v Display compiler version information.\n\
|
||||||
|
\n\
|
||||||
|
--config=file or -c file Specify configuration file.\n\
|
||||||
|
\n\
|
||||||
|
--i2cDevPath=path or -d path Specify the i2c device, default is /dev/i2c-0.\n\
|
||||||
|
--from=minutes or -f minites Specify the time(in minutes of day) to start displaying, default is 0.\n\
|
||||||
|
--to=minutes or -t minites Specify the time(in minutes of day) to stop displaying, default is 1440.\n\
|
||||||
|
--neetInit or -N Turn on init, default is on.\n\
|
||||||
|
--interval=n or -l n Specify the display interval, default is 60(s).\n\
|
||||||
|
--displayInvertNormal or -I Turn on the invert normal mode.\n\
|
||||||
|
--rotate or -H Turn on rotate.\n\
|
||||||
|
\n\
|
||||||
|
--displayDate or -D Turn on the date display.\n\
|
||||||
|
--displayIp or -A Turn on the IP address display.\n\
|
||||||
|
--ipIfName=ifname or -a ifname Specify the eth device to display the ip address, default is br-lan.\n\
|
||||||
|
--displayNetSpeed or -S Turn on the net speed display.\n\
|
||||||
|
--speedIfName=ifname or -s ifname Specify the eth device to display the net speed, default is eth0.\n\
|
||||||
|
--displayCpuTemp or -T Turn on the CPU temperature.\n\
|
||||||
|
--displayCpuFreq or -F Turn on the CPU frequency.\n\
|
||||||
|
\n\
|
||||||
|
--drawLine or -L Turn on draw line.\n\
|
||||||
|
--drawRect or -W Turn on draw rect.\n\
|
||||||
|
--fillRect or -w Turn on fill rect.\n\
|
||||||
|
--drawCircle or -C Turn on draw circle.\n\
|
||||||
|
--drawRoundCircle or -R Turn on draw round circle.\n\
|
||||||
|
--fillRoundCircle or -r Turn on fill round circle.\n\
|
||||||
|
--drawTriangle or -G Turn on draw triangle.\n\
|
||||||
|
--fillTriangle or -g Turn on fill triangle.\n\
|
||||||
|
--displayBitmap or -B Turn on display bitmap.\n\
|
||||||
|
--drawBitmapEg or -E Turn on draw bitmap eg.\n\
|
||||||
|
--scroll or -O Turn on scroll text.\n\
|
||||||
|
--scrollText=text or -o text Specify the scroll text, default is 'Hello world'.\n\
|
||||||
|
\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
static void printVersion() {
|
||||||
|
// Code to print version information
|
||||||
|
printf("Version: 1.0\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
static void read_conf_file(const char *filename, struct st_config *stcfg) {
|
||||||
|
config_t cfg;
|
||||||
|
config_init(&cfg);
|
||||||
|
char *buff;
|
||||||
|
|
||||||
|
if (!config_read_file(&cfg, filename)) {
|
||||||
|
fprintf(stderr, "Error reading configuration file: %s\n",
|
||||||
|
config_error_text(&cfg));
|
||||||
|
config_destroy(&cfg);
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
config_lookup_int(&cfg, "displayDate", &stcfg->disp_date);
|
||||||
|
config_lookup_int(&cfg, "displayIp", &stcfg->disp_ip);
|
||||||
|
|
||||||
|
if (config_lookup_string(&cfg, "ipIfName", (const char **)&buff)) {
|
||||||
|
sprintf(stcfg->ip_if_name, "%s", buff);
|
||||||
|
}
|
||||||
|
|
||||||
|
config_lookup_int(&cfg, "displayCpuTemp", &stcfg->disp_cpu_temp);
|
||||||
|
config_lookup_int(&cfg, "displayCpuFreq", &stcfg->disp_cpu_freq);
|
||||||
|
config_lookup_int(&cfg, "displayNetSpeed", &stcfg->disp_net_speed);
|
||||||
|
|
||||||
|
if (config_lookup_string(&cfg, "speedIfName", (const char **)&buff)) {
|
||||||
|
sprintf(stcfg->speed_if_name, "%s", buff);
|
||||||
|
}
|
||||||
|
|
||||||
|
config_lookup_int(&cfg, "interval", &stcfg->interval);
|
||||||
|
config_lookup_int(&cfg, "drawLine", &stcfg->draw_line);
|
||||||
|
config_lookup_int(&cfg, "drawRect", &stcfg->draw_rect);
|
||||||
|
config_lookup_int(&cfg, "fillRect", &stcfg->fill_rect);
|
||||||
|
config_lookup_int(&cfg, "drawCircle", &stcfg->draw_circle);
|
||||||
|
config_lookup_int(&cfg, "drawRoundCircle", &stcfg->draw_round_circle);
|
||||||
|
config_lookup_int(&cfg, "fillRoundCircle", &stcfg->fill_round_circle);
|
||||||
|
config_lookup_int(&cfg, "drawTriangle", &stcfg->draw_triangle);
|
||||||
|
config_lookup_int(&cfg, "fillTriangle", &stcfg->fill_triangle);
|
||||||
|
config_lookup_int(&cfg, "displayBitmap", &stcfg->disp_bitmap);
|
||||||
|
config_lookup_int(&cfg, "displayInvertNormal",
|
||||||
|
&stcfg->disp_invert_normal);
|
||||||
|
config_lookup_int(&cfg, "drawBitmapEg", &stcfg->draw_bitmap_eg);
|
||||||
|
config_lookup_int(&cfg, "scroll", &stcfg->scroll);
|
||||||
|
|
||||||
|
if (config_lookup_string(&cfg, "scrollText", (const char **)&buff)) {
|
||||||
|
sprintf(stcfg->scroll_text, "%s", buff);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (config_lookup_string(&cfg, "i2cDevPath", (const char **)&buff)) {
|
||||||
|
sprintf(stcfg->i2c_dev_path, "%s", buff);
|
||||||
|
}
|
||||||
|
|
||||||
|
config_lookup_int(&cfg, "rotate", &stcfg->rotate);
|
||||||
|
config_lookup_int(&cfg, "needInit", &stcfg->need_init);
|
||||||
|
config_lookup_int(&cfg, "from", &stcfg->from);
|
||||||
|
config_lookup_int(&cfg, "to", &stcfg->to);
|
||||||
|
|
||||||
|
config_destroy(&cfg);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int get_current_minitues() {
|
||||||
|
time_t rawtime;
|
||||||
|
struct tm *info;
|
||||||
|
time(&rawtime);
|
||||||
|
info = localtime(&rawtime);
|
||||||
|
// printf("Current local time and date: %s", asctime(info));
|
||||||
|
// printf("Current minutues: %d\n", info->tm_hour * 60 + info->tm_min);
|
||||||
|
return (info->tm_hour * 60 + info->tm_min);
|
||||||
|
}
|
||||||
|
|
||||||
/* Oh Compiler-Please leave me as is */
|
/* Oh Compiler-Please leave me as is */
|
||||||
volatile unsigned char flag = 0;
|
volatile unsigned char flag = 0;
|
||||||
|
|
||||||
|
/** Shared variable by the threads */
|
||||||
|
static unsigned long int __shared_rx_speed = 0;
|
||||||
|
static unsigned long int __shared_tx_speed = 0;
|
||||||
|
static int __shared_sleeped = 0;
|
||||||
|
|
||||||
|
/** Mutual exclusion of the shared variable */
|
||||||
|
static pthread_mutex_t __mutex_shared_variable =
|
||||||
|
(pthread_mutex_t)PTHREAD_MUTEX_INITIALIZER;
|
||||||
|
|
||||||
|
static pthread_mutex_t __mutex_shared_variable1 =
|
||||||
|
(pthread_mutex_t)PTHREAD_MUTEX_INITIALIZER;
|
||||||
|
|
||||||
|
/* thread id */
|
||||||
|
static pthread_t tid = 0;
|
||||||
|
static pthread_t tid1 = 0;
|
||||||
|
|
||||||
|
static float get_uptime() {
|
||||||
|
FILE *fp1;
|
||||||
|
float uptime = 0, idletime = 0;
|
||||||
|
if ((fp1 = fopen("/proc/uptime", "r")) != NULL) {
|
||||||
|
if (fscanf(fp1, "%f %f", &uptime, &idletime))
|
||||||
|
;
|
||||||
|
fclose(fp1);
|
||||||
|
}
|
||||||
|
return uptime;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void *pth_time_check(void *arg) {
|
||||||
|
int now;
|
||||||
|
struct st_config *stcfg;
|
||||||
|
stcfg = (struct st_config *)arg;
|
||||||
|
while (1) {
|
||||||
|
// Work only during specified time periods
|
||||||
|
now = get_current_minitues();
|
||||||
|
pthread_mutex_lock(&__mutex_shared_variable1);
|
||||||
|
{
|
||||||
|
if (stcfg->from != stcfg->to &&
|
||||||
|
(now < stcfg->from || now >= stcfg->to)) {
|
||||||
|
if (__shared_sleeped == 0) {
|
||||||
|
clearDisplay();
|
||||||
|
Display();
|
||||||
|
}
|
||||||
|
__shared_sleeped = 1;
|
||||||
|
} else {
|
||||||
|
__shared_sleeped = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pthread_mutex_unlock(&__mutex_shared_variable1);
|
||||||
|
usleep(TIME_CHECK_INTERVAL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline int get_sleep_flag() {
|
||||||
|
int flag;
|
||||||
|
pthread_mutex_lock(&__mutex_shared_variable1);
|
||||||
|
{ flag = __shared_sleeped; }
|
||||||
|
pthread_mutex_unlock(&__mutex_shared_variable1);
|
||||||
|
return flag;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void *pth_netspeed(char *ifname) {
|
||||||
|
char rxbytes_path[80];
|
||||||
|
char txbytes_path[80];
|
||||||
|
unsigned long long int llu_bytes;
|
||||||
|
unsigned long int rx_bytes = 0, tx_bytes = 0, last_rx_bytes = 0,
|
||||||
|
last_tx_bytes = 0;
|
||||||
|
unsigned long int rx_speed, tx_speed;
|
||||||
|
FILE *fp1;
|
||||||
|
float last_uptime, uptime;
|
||||||
|
|
||||||
|
sprintf(rxbytes_path, "/sys/class/net/%s/statistics/rx_bytes", ifname);
|
||||||
|
sprintf(txbytes_path, "/sys/class/net/%s/statistics/tx_bytes", ifname);
|
||||||
|
last_uptime = get_uptime();
|
||||||
|
while (1) {
|
||||||
|
uptime = get_uptime();
|
||||||
|
if ((fp1 = fopen(rxbytes_path, "r")) != NULL) {
|
||||||
|
if (fscanf(fp1, "%llu", &llu_bytes))
|
||||||
|
;
|
||||||
|
fclose(fp1);
|
||||||
|
rx_bytes = llu_bytes % ULONG_MAX;
|
||||||
|
} else {
|
||||||
|
last_uptime = uptime;
|
||||||
|
usleep(NETSPEED_INTERVAL);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((fp1 = fopen(txbytes_path, "r")) != NULL) {
|
||||||
|
if (fscanf(fp1, "%llu", &llu_bytes))
|
||||||
|
;
|
||||||
|
fclose(fp1);
|
||||||
|
tx_bytes = llu_bytes % ULONG_MAX;
|
||||||
|
} else {
|
||||||
|
last_uptime = uptime;
|
||||||
|
usleep(NETSPEED_INTERVAL);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((last_rx_bytes == 0 && last_tx_bytes == 0) ||
|
||||||
|
(rx_bytes < last_rx_bytes) || (tx_bytes < last_tx_bytes) ||
|
||||||
|
(uptime <= last_uptime)) {
|
||||||
|
last_rx_bytes = rx_bytes;
|
||||||
|
last_tx_bytes = tx_bytes;
|
||||||
|
} else {
|
||||||
|
rx_speed =
|
||||||
|
(rx_bytes - last_rx_bytes) / (uptime - last_uptime);
|
||||||
|
tx_speed =
|
||||||
|
(tx_bytes - last_tx_bytes) / (uptime - last_uptime);
|
||||||
|
|
||||||
|
// write shared variables;
|
||||||
|
pthread_mutex_lock(&__mutex_shared_variable);
|
||||||
|
{
|
||||||
|
__shared_rx_speed = rx_speed;
|
||||||
|
__shared_tx_speed = tx_speed;
|
||||||
|
}
|
||||||
|
pthread_mutex_unlock(&__mutex_shared_variable);
|
||||||
|
|
||||||
|
last_rx_bytes = rx_bytes;
|
||||||
|
last_tx_bytes = tx_bytes;
|
||||||
|
}
|
||||||
|
last_uptime = uptime;
|
||||||
|
usleep(NETSPEED_INTERVAL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Alarm Signal Handler */
|
/* Alarm Signal Handler */
|
||||||
void ALARMhandler(int sig)
|
void ALARMhandler(int sig) {
|
||||||
{
|
|
||||||
/* Set flag */
|
/* Set flag */
|
||||||
flag = 5;
|
flag = 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
void BreakDeal(int sig)
|
void BreakDeal(int sig) {
|
||||||
{
|
printf("Recived a KILL signal!\n");
|
||||||
|
if (tid != 0) {
|
||||||
|
pthread_cancel(tid);
|
||||||
|
pthread_join(tid, NULL);
|
||||||
|
}
|
||||||
|
if (tid1 != 0) {
|
||||||
|
pthread_cancel(tid1);
|
||||||
|
pthread_join(tid1, NULL);
|
||||||
|
}
|
||||||
clearDisplay();
|
clearDisplay();
|
||||||
usleep(1000000);
|
usleep(DISPLAY_INTERVAL);
|
||||||
Display();
|
Display();
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char* argv[])
|
int main(int argc, char *argv[]) {
|
||||||
{
|
int option;
|
||||||
char *eth=argv[1];
|
int option_index = 0;
|
||||||
char *path=argv[2];
|
char *config_file = NULL;
|
||||||
|
unsigned long int rx_speed, tx_speed;
|
||||||
|
struct st_config *stcfg;
|
||||||
|
|
||||||
if(path == NULL)
|
static struct option long_options[] = {
|
||||||
path = I2C_DEV0_PATH;
|
{"config", required_argument, 0, 'c'},
|
||||||
|
{"help", no_argument, 0, 'h'},
|
||||||
|
{"version", no_argument, 0, 'v'},
|
||||||
|
{"displayDate", no_argument, 0, 'D'},
|
||||||
|
{"displayIp", no_argument, 0, 'A'},
|
||||||
|
{"ipIfName", required_argument, 0, 'a'},
|
||||||
|
{"displayNetSpeed", no_argument, 0, 'S'},
|
||||||
|
{"speedIfName", required_argument, 0, 's'},
|
||||||
|
{"displayCpuTemp", no_argument, 0, 'T'},
|
||||||
|
{"displayCpuFreq", no_argument, 0, 'F'},
|
||||||
|
{"displayInvertNormal", no_argument, 0, 'I'},
|
||||||
|
{"interval", required_argument, 0, 'l'},
|
||||||
|
{"drawLine", no_argument, 0, 'L'},
|
||||||
|
{"drawRect", no_argument, 0, 'W'},
|
||||||
|
{"fillRect", no_argument, 0, 'w'},
|
||||||
|
{"drawCircle", no_argument, 0, 'C'},
|
||||||
|
{"drawRoundCircle", no_argument, 0, 'R'},
|
||||||
|
{"fillRoundCircle", no_argument, 0, 'r'},
|
||||||
|
{"drawTriangle", no_argument, 0, 'G'},
|
||||||
|
{"fillTriangle", no_argument, 0, 'g'},
|
||||||
|
{"displayBitmap", no_argument, 0, 'B'},
|
||||||
|
{"drawBitmapEg", no_argument, 0, 'E'},
|
||||||
|
{"scroll", no_argument, 0, 'O'},
|
||||||
|
{"scrollText", required_argument, 0, 'o'},
|
||||||
|
{"i2cDevPath", required_argument, 0, 'd'},
|
||||||
|
{"rotate", no_argument, 0, 'H'},
|
||||||
|
{"needInit", no_argument, 0, 'N'},
|
||||||
|
{"from", required_argument, 0, 'f'},
|
||||||
|
{"to", required_argument, 0, 't'},
|
||||||
|
{0, 0, 0, 0}};
|
||||||
|
|
||||||
|
stcfg = (struct st_config *)malloc(sizeof(struct st_config));
|
||||||
|
memset(stcfg, 0, sizeof(struct st_config));
|
||||||
|
|
||||||
|
/* set default value for config */
|
||||||
|
stcfg->need_init = 1;
|
||||||
|
stcfg->interval = 60;
|
||||||
|
stcfg->from = 0;
|
||||||
|
stcfg->to = 1440;
|
||||||
|
|
||||||
|
stcfg->ip_if_name = malloc(sizeof(char) * 20);
|
||||||
|
sprintf(stcfg->ip_if_name, "br-lan");
|
||||||
|
|
||||||
|
stcfg->speed_if_name = malloc(sizeof(char) * 20);
|
||||||
|
sprintf(stcfg->speed_if_name, "eth0");
|
||||||
|
|
||||||
|
stcfg->scroll_text = malloc(sizeof(char) * 100);
|
||||||
|
sprintf(stcfg->scroll_text, "Hello");
|
||||||
|
|
||||||
|
stcfg->i2c_dev_path = malloc(sizeof(char) * 20);
|
||||||
|
sprintf(stcfg->i2c_dev_path, "%s", I2C_DEV0_PATH);
|
||||||
|
/* The end of set default value for config */
|
||||||
|
|
||||||
|
while ((option = getopt_long(argc, argv,
|
||||||
|
"c:hvDAa:Ss:TFIl:LWwCRrGgBEOo:d:HNf:t:",
|
||||||
|
long_options, &option_index)) != -1) {
|
||||||
|
switch (option) {
|
||||||
|
case 'c':
|
||||||
|
config_file = optarg;
|
||||||
|
break;
|
||||||
|
case 'h':
|
||||||
|
printHelp();
|
||||||
|
exit(EXIT_SUCCESS);
|
||||||
|
case 'v':
|
||||||
|
printVersion();
|
||||||
|
exit(EXIT_SUCCESS);
|
||||||
|
case '?':
|
||||||
|
// Invalid option or missing argument
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
default:
|
||||||
|
// Handle other parameters
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (config_file != NULL) {
|
||||||
|
// Read parameters from the configuration file
|
||||||
|
read_conf_file(config_file, stcfg);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update config from the command params
|
||||||
|
optind = 0;
|
||||||
|
while ((option = getopt_long(argc, argv,
|
||||||
|
"c:hvDAa:Ss:TFIl:LWwCRrGgBEOo:d:HNf:t:",
|
||||||
|
long_options, &option_index)) != -1) {
|
||||||
|
switch (option) {
|
||||||
|
case 'D':
|
||||||
|
stcfg->disp_date = 1;
|
||||||
|
break;
|
||||||
|
case 'A':
|
||||||
|
stcfg->disp_ip = 1;
|
||||||
|
break;
|
||||||
|
case 'a':
|
||||||
|
sprintf(stcfg->ip_if_name, "%s", optarg);
|
||||||
|
break;
|
||||||
|
case 'S':
|
||||||
|
stcfg->disp_net_speed = 1;
|
||||||
|
break;
|
||||||
|
case 's':
|
||||||
|
sprintf(stcfg->speed_if_name, "%s", optarg);
|
||||||
|
break;
|
||||||
|
case 'T':
|
||||||
|
stcfg->disp_cpu_temp = 1;
|
||||||
|
break;
|
||||||
|
case 'F':
|
||||||
|
stcfg->disp_cpu_freq = 1;
|
||||||
|
break;
|
||||||
|
case 'I':
|
||||||
|
stcfg->disp_invert_normal = 1;
|
||||||
|
break;
|
||||||
|
case 'l':
|
||||||
|
stcfg->interval = atoi(optarg);
|
||||||
|
break;
|
||||||
|
case 'L':
|
||||||
|
stcfg->draw_line = 1;
|
||||||
|
break;
|
||||||
|
case 'W':
|
||||||
|
stcfg->draw_rect = 1;
|
||||||
|
break;
|
||||||
|
case 'w':
|
||||||
|
stcfg->fill_rect = 1;
|
||||||
|
break;
|
||||||
|
case 'C':
|
||||||
|
stcfg->draw_circle = 1;
|
||||||
|
break;
|
||||||
|
case 'R':
|
||||||
|
stcfg->draw_round_circle = 1;
|
||||||
|
break;
|
||||||
|
case 'r':
|
||||||
|
stcfg->fill_round_circle = 1;
|
||||||
|
break;
|
||||||
|
case 'G':
|
||||||
|
stcfg->draw_triangle = 1;
|
||||||
|
break;
|
||||||
|
case 'g':
|
||||||
|
stcfg->fill_triangle = 1;
|
||||||
|
break;
|
||||||
|
case 'B':
|
||||||
|
stcfg->disp_bitmap = 1;
|
||||||
|
break;
|
||||||
|
case 'E':
|
||||||
|
stcfg->draw_bitmap_eg = 1;
|
||||||
|
break;
|
||||||
|
case 'O':
|
||||||
|
stcfg->scroll = 1;
|
||||||
|
break;
|
||||||
|
case 'o':
|
||||||
|
sprintf(stcfg->scroll_text, "%s", optarg);
|
||||||
|
break;
|
||||||
|
case 'd':
|
||||||
|
sprintf(stcfg->i2c_dev_path, "%s", optarg);
|
||||||
|
break;
|
||||||
|
case 'H':
|
||||||
|
stcfg->rotate = 1;
|
||||||
|
break;
|
||||||
|
case 'N':
|
||||||
|
stcfg->need_init = 1;
|
||||||
|
break;
|
||||||
|
case 'f':
|
||||||
|
stcfg->from = atoi(optarg);
|
||||||
|
break;
|
||||||
|
case 't':
|
||||||
|
stcfg->to = atoi(optarg);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// Handle other parameters
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (stcfg->i2c_dev_path == NULL)
|
||||||
|
sprintf(stcfg->i2c_dev_path, "%s", I2C_DEV0_PATH);
|
||||||
|
|
||||||
/* Initialize I2C bus and connect to the I2C Device */
|
/* Initialize I2C bus and connect to the I2C Device */
|
||||||
if(init_i2c_dev(path, SSD1306_OLED_ADDR) == 0)
|
if (init_i2c_dev(stcfg->i2c_dev_path, SSD1306_OLED_ADDR) == 0) {
|
||||||
{
|
printf("Successfully connected to I2C device: %s\n",
|
||||||
printf("I2C: Bus Connected to SSD1306\r\n");
|
stcfg->i2c_dev_path);
|
||||||
|
} else {
|
||||||
|
printf("Oops! There seems to be something wrong: %s\n",
|
||||||
|
stcfg->i2c_dev_path);
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (stcfg->disp_net_speed == 1 &&
|
||||||
|
strcmp(stcfg->speed_if_name, "") != 0) {
|
||||||
|
pthread_create(&tid, NULL, (void *)pth_netspeed,
|
||||||
|
stcfg->speed_if_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Run SDD1306 Initialization Sequence */
|
||||||
|
if (stcfg->need_init == 1) display_Init_seq();
|
||||||
|
|
||||||
|
if (stcfg->rotate == 1)
|
||||||
|
display_rotate();
|
||||||
else
|
else
|
||||||
{
|
display_normal();
|
||||||
printf("I2C: OOPS! Something Went Wrong\r\n");
|
|
||||||
exit(1);
|
/* Clear display */
|
||||||
|
clearDisplay();
|
||||||
|
|
||||||
|
if (stcfg->from <= 0 || stcfg->from > 1440) {
|
||||||
|
stcfg->from = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (stcfg->to <= 0 || stcfg->to > 1440) {
|
||||||
|
stcfg->to = 1440;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (stcfg->from > stcfg->to) {
|
||||||
|
int temp = stcfg->from;
|
||||||
|
stcfg->from = stcfg->to;
|
||||||
|
stcfg->to = temp;
|
||||||
|
}
|
||||||
|
|
||||||
|
pthread_create(&tid1, NULL, (void *)pth_time_check, (void *)stcfg);
|
||||||
|
|
||||||
/* Register the Alarm Handler */
|
/* Register the Alarm Handler */
|
||||||
signal(SIGALRM, ALARMhandler);
|
signal(SIGALRM, ALARMhandler);
|
||||||
signal(SIGINT, BreakDeal);
|
signal(SIGINT, BreakDeal);
|
||||||
//signal(SIGTERM, BreakDeal);
|
signal(SIGTERM, BreakDeal);
|
||||||
|
|
||||||
/* Run SDD1306 Initialization Sequence */
|
|
||||||
/* if (needinit==1)
|
|
||||||
display_Init_seq();
|
|
||||||
|
|
||||||
if (rotate==1)
|
|
||||||
display_rotate();
|
|
||||||
else
|
|
||||||
display_normal();
|
|
||||||
*/
|
|
||||||
/* Clear display */
|
|
||||||
clearDisplay();
|
|
||||||
|
|
||||||
// draw a single pixel
|
// draw a single pixel
|
||||||
// drawPixel(0, 1, WHITE);
|
// drawPixel(0, 1, WHITE);
|
||||||
// Display();
|
// Display();
|
||||||
// usleep(1000000);
|
// usleep(DISPLAY_INTERVAL);
|
||||||
// clearDisplay();
|
// clearDisplay();
|
||||||
|
|
||||||
// draw many lines
|
// draw many lines
|
||||||
while(1){
|
while (1) {
|
||||||
//setCursor(0,0);
|
if (get_sleep_flag() == 0 && stcfg->scroll) {
|
||||||
setTextColor(WHITE);
|
testscrolltext(stcfg->scroll_text);
|
||||||
|
usleep(DISPLAY_INTERVAL);
|
||||||
testintfstatus(FULL, 0);
|
|
||||||
display_bitmap_uploaddownload();
|
|
||||||
testnetspeed(SPLIT, 120);
|
|
||||||
testvpsip(FULL, 52);
|
|
||||||
Display();
|
|
||||||
usleep(5000000);
|
|
||||||
clearDisplay();
|
|
||||||
testinfo1();
|
|
||||||
Display();
|
|
||||||
usleep(1000000);
|
|
||||||
clearDisplay();
|
|
||||||
testinfo2();
|
|
||||||
Display();
|
|
||||||
usleep(800000);
|
|
||||||
clearDisplay();
|
|
||||||
testinfo3();
|
|
||||||
Display();
|
|
||||||
usleep(200000);
|
|
||||||
clearDisplay();
|
clearDisplay();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (get_sleep_flag() == 0 && stcfg->draw_line) {
|
||||||
|
testdrawline();
|
||||||
|
usleep(DISPLAY_INTERVAL);
|
||||||
|
clearDisplay();
|
||||||
|
}
|
||||||
|
|
||||||
|
// draw rectangles
|
||||||
|
if (get_sleep_flag() == 0 && stcfg->draw_rect) {
|
||||||
|
testdrawrect();
|
||||||
|
usleep(DISPLAY_INTERVAL);
|
||||||
|
clearDisplay();
|
||||||
|
}
|
||||||
|
|
||||||
|
// draw multiple rectangles
|
||||||
|
if (get_sleep_flag() == 0 && stcfg->fill_rect) {
|
||||||
|
testfillrect();
|
||||||
|
usleep(DISPLAY_INTERVAL);
|
||||||
|
clearDisplay();
|
||||||
|
}
|
||||||
|
|
||||||
|
// draw mulitple circles
|
||||||
|
if (get_sleep_flag() == 0 && stcfg->draw_circle) {
|
||||||
|
testdrawcircle();
|
||||||
|
usleep(DISPLAY_INTERVAL);
|
||||||
|
clearDisplay();
|
||||||
|
}
|
||||||
|
|
||||||
|
// draw a white circle, 10 pixel radius
|
||||||
|
if (get_sleep_flag() == 0 && stcfg->draw_round_circle) {
|
||||||
|
testdrawroundrect();
|
||||||
|
usleep(DISPLAY_INTERVAL);
|
||||||
|
clearDisplay();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fill the round rectangle
|
||||||
|
if (get_sleep_flag() == 0 && stcfg->fill_round_circle) {
|
||||||
|
testfillroundrect();
|
||||||
|
usleep(DISPLAY_INTERVAL);
|
||||||
|
clearDisplay();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Draw triangles
|
||||||
|
if (get_sleep_flag() == 0 && stcfg->draw_triangle) {
|
||||||
|
testdrawtriangle();
|
||||||
|
usleep(DISPLAY_INTERVAL);
|
||||||
|
clearDisplay();
|
||||||
|
}
|
||||||
|
// Fill triangles
|
||||||
|
if (get_sleep_flag() == 0 && stcfg->fill_triangle) {
|
||||||
|
testfilltriangle();
|
||||||
|
usleep(DISPLAY_INTERVAL);
|
||||||
|
clearDisplay();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Display miniature bitmap
|
||||||
|
if (get_sleep_flag() == 0 && stcfg->disp_bitmap) {
|
||||||
|
display_bitmap();
|
||||||
|
Display();
|
||||||
|
usleep(DISPLAY_INTERVAL);
|
||||||
|
};
|
||||||
|
|
||||||
|
// Display Inverted image and normalize it back
|
||||||
|
if (get_sleep_flag() == 0 && stcfg->disp_invert_normal) {
|
||||||
|
display_invert_normal();
|
||||||
|
clearDisplay();
|
||||||
|
usleep(DISPLAY_INTERVAL);
|
||||||
|
Display();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Generate Signal after 20 Seconds
|
||||||
|
|
||||||
|
// draw a bitmap icon and 'animate' movement
|
||||||
|
if (get_sleep_flag() == 0 && stcfg->draw_bitmap_eg) {
|
||||||
|
alarm(10);
|
||||||
|
flag = 0;
|
||||||
|
testdrawbitmap_eg();
|
||||||
|
clearDisplay();
|
||||||
|
usleep(DISPLAY_INTERVAL);
|
||||||
|
Display();
|
||||||
|
}
|
||||||
|
|
||||||
|
// setCursor(0,0);
|
||||||
|
setTextColor(WHITE);
|
||||||
|
|
||||||
|
// info display
|
||||||
|
int sum = stcfg->disp_date + stcfg->disp_ip +
|
||||||
|
stcfg->disp_cpu_freq + stcfg->disp_cpu_temp +
|
||||||
|
stcfg->disp_net_speed;
|
||||||
|
if (sum == 0) {
|
||||||
|
clearDisplay();
|
||||||
|
Display();
|
||||||
|
usleep(DISPLAY_INTERVAL);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 1; i < stcfg->interval; i++) {
|
||||||
|
if (get_sleep_flag() == 1) {
|
||||||
|
usleep(DISPLAY_INTERVAL);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sum == 1) { // only one item for display
|
||||||
|
if (stcfg->disp_date) testdate(CENTER, 8);
|
||||||
|
if (stcfg->disp_ip)
|
||||||
|
testip(CENTER, 8, stcfg->ip_if_name);
|
||||||
|
if (stcfg->disp_cpu_freq)
|
||||||
|
testcpufreq(CENTER, 8);
|
||||||
|
if (stcfg->disp_cpu_temp)
|
||||||
|
testcputemp(CENTER, 8);
|
||||||
|
if (stcfg->disp_net_speed) {
|
||||||
|
// read shared variables;
|
||||||
|
pthread_mutex_lock(
|
||||||
|
&__mutex_shared_variable);
|
||||||
|
{
|
||||||
|
rx_speed = __shared_rx_speed;
|
||||||
|
tx_speed = __shared_tx_speed;
|
||||||
|
}
|
||||||
|
pthread_mutex_unlock(
|
||||||
|
&__mutex_shared_variable);
|
||||||
|
|
||||||
|
testnetspeed(SPLIT, 0, rx_speed,
|
||||||
|
tx_speed);
|
||||||
|
}
|
||||||
|
Display();
|
||||||
|
usleep(DISPLAY_INTERVAL);
|
||||||
|
clearDisplay();
|
||||||
|
} else if (sum == 2) { // two items for display
|
||||||
|
if (stcfg->disp_date) {
|
||||||
|
testdate(CENTER,
|
||||||
|
16 * (stcfg->disp_date - 1));
|
||||||
|
}
|
||||||
|
if (stcfg->disp_ip) {
|
||||||
|
testip(CENTER,
|
||||||
|
16 * (stcfg->disp_date +
|
||||||
|
stcfg->disp_ip - 1),
|
||||||
|
stcfg->ip_if_name);
|
||||||
|
}
|
||||||
|
if (stcfg->disp_cpu_freq) {
|
||||||
|
testcpufreq(
|
||||||
|
CENTER,
|
||||||
|
16 * (stcfg->disp_date +
|
||||||
|
stcfg->disp_ip +
|
||||||
|
stcfg->disp_cpu_freq - 1));
|
||||||
|
}
|
||||||
|
if (stcfg->disp_cpu_temp) {
|
||||||
|
testcputemp(
|
||||||
|
CENTER,
|
||||||
|
16 * (stcfg->disp_date +
|
||||||
|
stcfg->disp_ip +
|
||||||
|
stcfg->disp_cpu_freq +
|
||||||
|
stcfg->disp_cpu_temp - 1));
|
||||||
|
}
|
||||||
|
if (stcfg->disp_net_speed) {
|
||||||
|
// read shared variables;
|
||||||
|
pthread_mutex_lock(
|
||||||
|
&__mutex_shared_variable);
|
||||||
|
{
|
||||||
|
rx_speed = __shared_rx_speed;
|
||||||
|
tx_speed = __shared_tx_speed;
|
||||||
|
}
|
||||||
|
pthread_mutex_unlock(
|
||||||
|
&__mutex_shared_variable);
|
||||||
|
|
||||||
|
testnetspeed(
|
||||||
|
MERGE,
|
||||||
|
16 * (stcfg->disp_date +
|
||||||
|
stcfg->disp_ip +
|
||||||
|
stcfg->disp_cpu_freq +
|
||||||
|
stcfg->disp_cpu_temp +
|
||||||
|
stcfg->disp_net_speed - 1),
|
||||||
|
rx_speed, tx_speed);
|
||||||
|
}
|
||||||
|
Display();
|
||||||
|
usleep(DISPLAY_INTERVAL);
|
||||||
|
clearDisplay();
|
||||||
|
} else { // more than two items for display
|
||||||
|
if (stcfg->disp_date) {
|
||||||
|
testdate(FULL,
|
||||||
|
8 * (stcfg->disp_date - 1));
|
||||||
|
}
|
||||||
|
if (stcfg->disp_ip) {
|
||||||
|
testip(FULL,
|
||||||
|
8 * (stcfg->disp_date +
|
||||||
|
stcfg->disp_ip - 1),
|
||||||
|
stcfg->ip_if_name);
|
||||||
|
}
|
||||||
|
if (stcfg->disp_cpu_freq &&
|
||||||
|
stcfg->disp_cpu_temp) {
|
||||||
|
testcpu(8 * (stcfg->disp_date +
|
||||||
|
stcfg->disp_ip));
|
||||||
|
if (stcfg->disp_net_speed) {
|
||||||
|
// read shared variables;
|
||||||
|
pthread_mutex_lock(
|
||||||
|
&__mutex_shared_variable);
|
||||||
|
{
|
||||||
|
rx_speed =
|
||||||
|
__shared_rx_speed;
|
||||||
|
tx_speed =
|
||||||
|
__shared_tx_speed;
|
||||||
|
}
|
||||||
|
pthread_mutex_unlock(
|
||||||
|
&__mutex_shared_variable);
|
||||||
|
|
||||||
|
testnetspeed(
|
||||||
|
FULL,
|
||||||
|
8 * (stcfg->disp_date +
|
||||||
|
stcfg->disp_ip + 1 +
|
||||||
|
stcfg->disp_net_speed -
|
||||||
|
1),
|
||||||
|
rx_speed, tx_speed);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (stcfg->disp_cpu_freq) {
|
||||||
|
testcpufreq(
|
||||||
|
FULL,
|
||||||
|
8 * (stcfg->disp_date +
|
||||||
|
stcfg->disp_ip +
|
||||||
|
stcfg->disp_cpu_freq -
|
||||||
|
1));
|
||||||
|
}
|
||||||
|
if (stcfg->disp_cpu_temp) {
|
||||||
|
testcputemp(
|
||||||
|
FULL,
|
||||||
|
8 * (stcfg->disp_date +
|
||||||
|
stcfg->disp_ip +
|
||||||
|
stcfg->disp_cpu_freq +
|
||||||
|
stcfg->disp_cpu_temp -
|
||||||
|
1));
|
||||||
|
}
|
||||||
|
if (stcfg->disp_net_speed) {
|
||||||
|
// read shared variables;
|
||||||
|
pthread_mutex_lock(
|
||||||
|
&__mutex_shared_variable);
|
||||||
|
{
|
||||||
|
rx_speed =
|
||||||
|
__shared_rx_speed;
|
||||||
|
tx_speed =
|
||||||
|
__shared_tx_speed;
|
||||||
|
}
|
||||||
|
pthread_mutex_unlock(
|
||||||
|
&__mutex_shared_variable);
|
||||||
|
|
||||||
|
testnetspeed(
|
||||||
|
FULL,
|
||||||
|
8 * (stcfg->disp_date +
|
||||||
|
stcfg->disp_ip +
|
||||||
|
stcfg->disp_cpu_freq +
|
||||||
|
stcfg->disp_cpu_temp +
|
||||||
|
stcfg->disp_net_speed -
|
||||||
|
1),
|
||||||
|
rx_speed, tx_speed);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Display();
|
||||||
|
usleep(DISPLAY_INTERVAL);
|
||||||
|
clearDisplay();
|
||||||
|
}
|
||||||
|
} // for
|
||||||
|
} //while
|
||||||
|
|
||||||
|
if (stcfg->disp_net_speed == 1 &&
|
||||||
|
strcmp(stcfg->speed_if_name, "") != 0) {
|
||||||
|
pthread_cancel(tid);
|
||||||
|
pthread_join(tid, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tid1 != 0) {
|
||||||
|
pthread_cancel(tid1);
|
||||||
|
pthread_join(tid1, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
clearDisplay();
|
||||||
|
Display();
|
||||||
|
exit(EXIT_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
810
luci-app-ouad/src/Example_Code/example_app.c
Executable file → Normal file
810
luci-app-ouad/src/Example_Code/example_app.c
Executable file → Normal file
File diff suppressed because it is too large
Load diff
22
luci-app-ouad/src/Example_Code/example_app.h
Executable file → Normal file
22
luci-app-ouad/src/Example_Code/example_app.h
Executable file → Normal file
|
@ -1,7 +1,10 @@
|
||||||
#define CENTER 0 //single item display
|
#define CENTER 0 // single item display
|
||||||
#define SPLIT 1 //two items
|
#define SPLIT 1 // two items
|
||||||
#define MERGE 2
|
#define MERGE 2
|
||||||
#define FULL 3
|
#define FULL 3
|
||||||
|
#define KB_BYTES (1024)
|
||||||
|
#define MB_BYTES (1024 * 1024)
|
||||||
|
#define GB_BYTES (1024 * 1024 * 1024)
|
||||||
|
|
||||||
void testdrawline();
|
void testdrawline();
|
||||||
void testdrawrect();
|
void testdrawrect();
|
||||||
|
@ -16,20 +19,15 @@ void testscrolltext(char *str);
|
||||||
void display_texts();
|
void display_texts();
|
||||||
void display_bitmap();
|
void display_bitmap();
|
||||||
void display_invert_normal();
|
void display_invert_normal();
|
||||||
void testdrawbitmap(const unsigned char *bitmap, unsigned char w, unsigned char h);
|
void testdrawbitmap(const unsigned char *bitmap, unsigned char w,
|
||||||
|
unsigned char h);
|
||||||
void testdrawbitmap_eg();
|
void testdrawbitmap_eg();
|
||||||
void deeplyembedded_credits();
|
void deeplyembedded_credits();
|
||||||
void testprintinfo();
|
void testprintinfo();
|
||||||
void testinfo1();
|
|
||||||
void testinfo2();
|
|
||||||
void testdate(int mode, int y);
|
void testdate(int mode, int y);
|
||||||
void testlanip(int mode, int y);
|
void testip(int mode, int y, char *ifname);
|
||||||
void testvpsip(int mode, int y);
|
|
||||||
void testcpufreq(int mode, int y);
|
void testcpufreq(int mode, int y);
|
||||||
void testcputemp(int mode, int y);
|
void testcputemp(int mode, int y);
|
||||||
void testnetspeed(int mode, int y);
|
void testnetspeed(int mode, int y, unsigned long int rx, unsigned long int tx);
|
||||||
void testintfstatus(int mode, int y);
|
|
||||||
void testcpu(int y);
|
void testcpu(int y);
|
||||||
void display_bitmap_uploaddownload();
|
char *get_ip_addr(char *ifname);
|
||||||
|
|
||||||
|
|
||||||
|
|
183
luci-app-ouad/src/I2C_Library/.clang-format
Normal file
183
luci-app-ouad/src/I2C_Library/.clang-format
Normal file
|
@ -0,0 +1,183 @@
|
||||||
|
---
|
||||||
|
Language: Cpp
|
||||||
|
# BasedOnStyle: Google
|
||||||
|
AccessModifierOffset: -1
|
||||||
|
AlignAfterOpenBracket: Align
|
||||||
|
AlignConsecutiveMacros: false
|
||||||
|
AlignConsecutiveAssignments: false
|
||||||
|
AlignConsecutiveBitFields: false
|
||||||
|
AlignConsecutiveDeclarations: false
|
||||||
|
AlignEscapedNewlines: Left
|
||||||
|
AlignOperands: Align
|
||||||
|
AlignTrailingComments: true
|
||||||
|
AllowAllArgumentsOnNextLine: true
|
||||||
|
AllowAllConstructorInitializersOnNextLine: true
|
||||||
|
AllowAllParametersOfDeclarationOnNextLine: true
|
||||||
|
AllowShortEnumsOnASingleLine: true
|
||||||
|
AllowShortBlocksOnASingleLine: Never
|
||||||
|
AllowShortCaseLabelsOnASingleLine: false
|
||||||
|
AllowShortFunctionsOnASingleLine: All
|
||||||
|
AllowShortLambdasOnASingleLine: All
|
||||||
|
AllowShortIfStatementsOnASingleLine: WithoutElse
|
||||||
|
AllowShortLoopsOnASingleLine: true
|
||||||
|
AlwaysBreakAfterDefinitionReturnType: None
|
||||||
|
AlwaysBreakAfterReturnType: None
|
||||||
|
AlwaysBreakBeforeMultilineStrings: true
|
||||||
|
AlwaysBreakTemplateDeclarations: Yes
|
||||||
|
BinPackArguments: true
|
||||||
|
BinPackParameters: true
|
||||||
|
BraceWrapping:
|
||||||
|
AfterCaseLabel: false
|
||||||
|
AfterClass: false
|
||||||
|
AfterControlStatement: Never
|
||||||
|
AfterEnum: false
|
||||||
|
AfterFunction: false
|
||||||
|
AfterNamespace: false
|
||||||
|
AfterObjCDeclaration: false
|
||||||
|
AfterStruct: false
|
||||||
|
AfterUnion: false
|
||||||
|
AfterExternBlock: false
|
||||||
|
BeforeCatch: false
|
||||||
|
BeforeElse: false
|
||||||
|
BeforeLambdaBody: false
|
||||||
|
BeforeWhile: false
|
||||||
|
IndentBraces: false
|
||||||
|
SplitEmptyFunction: true
|
||||||
|
SplitEmptyRecord: true
|
||||||
|
SplitEmptyNamespace: true
|
||||||
|
BreakBeforeBinaryOperators: None
|
||||||
|
BreakBeforeBraces: Attach
|
||||||
|
BreakBeforeInheritanceComma: false
|
||||||
|
BreakInheritanceList: BeforeColon
|
||||||
|
BreakBeforeTernaryOperators: true
|
||||||
|
BreakConstructorInitializersBeforeComma: false
|
||||||
|
BreakConstructorInitializers: BeforeColon
|
||||||
|
BreakAfterJavaFieldAnnotations: false
|
||||||
|
BreakStringLiterals: true
|
||||||
|
ColumnLimit: 80
|
||||||
|
CommentPragmas: '^ IWYU pragma:'
|
||||||
|
CompactNamespaces: false
|
||||||
|
ConstructorInitializerAllOnOneLineOrOnePerLine: true
|
||||||
|
ConstructorInitializerIndentWidth: 4
|
||||||
|
ContinuationIndentWidth: 4
|
||||||
|
Cpp11BracedListStyle: true
|
||||||
|
DeriveLineEnding: true
|
||||||
|
DerivePointerAlignment: true
|
||||||
|
DisableFormat: false
|
||||||
|
ExperimentalAutoDetectBinPacking: false
|
||||||
|
FixNamespaceComments: true
|
||||||
|
ForEachMacros:
|
||||||
|
- foreach
|
||||||
|
- Q_FOREACH
|
||||||
|
- BOOST_FOREACH
|
||||||
|
IncludeBlocks: Regroup
|
||||||
|
IncludeCategories:
|
||||||
|
- Regex: '^<ext/.*\.h>'
|
||||||
|
Priority: 2
|
||||||
|
SortPriority: 0
|
||||||
|
- Regex: '^<.*\.h>'
|
||||||
|
Priority: 1
|
||||||
|
SortPriority: 0
|
||||||
|
- Regex: '^<.*'
|
||||||
|
Priority: 2
|
||||||
|
SortPriority: 0
|
||||||
|
- Regex: '.*'
|
||||||
|
Priority: 3
|
||||||
|
SortPriority: 0
|
||||||
|
IncludeIsMainRegex: '([-_](test|unittest))?$'
|
||||||
|
IncludeIsMainSourceRegex: ''
|
||||||
|
IndentCaseLabels: true
|
||||||
|
IndentCaseBlocks: false
|
||||||
|
IndentGotoLabels: true
|
||||||
|
IndentPPDirectives: None
|
||||||
|
IndentExternBlock: AfterExternBlock
|
||||||
|
IndentWidth: 2
|
||||||
|
IndentWrappedFunctionNames: false
|
||||||
|
InsertTrailingCommas: None
|
||||||
|
JavaScriptQuotes: Leave
|
||||||
|
JavaScriptWrapImports: true
|
||||||
|
KeepEmptyLinesAtTheStartOfBlocks: false
|
||||||
|
MacroBlockBegin: ''
|
||||||
|
MacroBlockEnd: ''
|
||||||
|
MaxEmptyLinesToKeep: 1
|
||||||
|
NamespaceIndentation: None
|
||||||
|
ObjCBinPackProtocolList: Never
|
||||||
|
ObjCBlockIndentWidth: 2
|
||||||
|
ObjCBreakBeforeNestedBlockParam: true
|
||||||
|
ObjCSpaceAfterProperty: false
|
||||||
|
ObjCSpaceBeforeProtocolList: true
|
||||||
|
PenaltyBreakAssignment: 2
|
||||||
|
PenaltyBreakBeforeFirstCallParameter: 1
|
||||||
|
PenaltyBreakComment: 300
|
||||||
|
PenaltyBreakFirstLessLess: 120
|
||||||
|
PenaltyBreakString: 1000
|
||||||
|
PenaltyBreakTemplateDeclaration: 10
|
||||||
|
PenaltyExcessCharacter: 1000000
|
||||||
|
PenaltyReturnTypeOnItsOwnLine: 200
|
||||||
|
PointerAlignment: Left
|
||||||
|
RawStringFormats:
|
||||||
|
- Language: Cpp
|
||||||
|
Delimiters:
|
||||||
|
- cc
|
||||||
|
- CC
|
||||||
|
- cpp
|
||||||
|
- Cpp
|
||||||
|
- CPP
|
||||||
|
- 'c++'
|
||||||
|
- 'C++'
|
||||||
|
CanonicalDelimiter: ''
|
||||||
|
BasedOnStyle: google
|
||||||
|
- Language: TextProto
|
||||||
|
Delimiters:
|
||||||
|
- pb
|
||||||
|
- PB
|
||||||
|
- proto
|
||||||
|
- PROTO
|
||||||
|
EnclosingFunctions:
|
||||||
|
- EqualsProto
|
||||||
|
- EquivToProto
|
||||||
|
- PARSE_PARTIAL_TEXT_PROTO
|
||||||
|
- PARSE_TEST_PROTO
|
||||||
|
- PARSE_TEXT_PROTO
|
||||||
|
- ParseTextOrDie
|
||||||
|
- ParseTextProtoOrDie
|
||||||
|
- ParseTestProto
|
||||||
|
- ParsePartialTestProto
|
||||||
|
CanonicalDelimiter: ''
|
||||||
|
BasedOnStyle: google
|
||||||
|
ReflowComments: true
|
||||||
|
SortIncludes: true
|
||||||
|
SortUsingDeclarations: true
|
||||||
|
SpaceAfterCStyleCast: false
|
||||||
|
SpaceAfterLogicalNot: false
|
||||||
|
SpaceAfterTemplateKeyword: true
|
||||||
|
SpaceBeforeAssignmentOperators: true
|
||||||
|
SpaceBeforeCpp11BracedList: false
|
||||||
|
SpaceBeforeCtorInitializerColon: true
|
||||||
|
SpaceBeforeInheritanceColon: true
|
||||||
|
SpaceBeforeParens: ControlStatements
|
||||||
|
SpaceBeforeRangeBasedForLoopColon: true
|
||||||
|
SpaceInEmptyBlock: false
|
||||||
|
SpaceInEmptyParentheses: false
|
||||||
|
SpacesBeforeTrailingComments: 2
|
||||||
|
SpacesInAngles: false
|
||||||
|
SpacesInConditionalStatement: false
|
||||||
|
SpacesInContainerLiterals: true
|
||||||
|
SpacesInCStyleCastParentheses: false
|
||||||
|
SpacesInParentheses: false
|
||||||
|
SpacesInSquareBrackets: false
|
||||||
|
SpaceBeforeSquareBrackets: false
|
||||||
|
Standard: Auto
|
||||||
|
StatementMacros:
|
||||||
|
- Q_UNUSED
|
||||||
|
- QT_REQUIRE_VERSION
|
||||||
|
IndentWidth: 8
|
||||||
|
TabWidth: 8
|
||||||
|
UseCRLF: false
|
||||||
|
UseTab: Always
|
||||||
|
WhitespaceSensitiveMacros:
|
||||||
|
- STRINGIZE
|
||||||
|
- PP_STRINGIZE
|
||||||
|
- BOOST_PP_STRINGIZE
|
||||||
|
...
|
||||||
|
|
114
luci-app-ouad/src/I2C_Library/I2C.c
Executable file → Normal file
114
luci-app-ouad/src/I2C_Library/I2C.c
Executable file → Normal file
|
@ -25,17 +25,18 @@ SOFTWARE.
|
||||||
*
|
*
|
||||||
* Created on : September 19, 2017
|
* Created on : September 19, 2017
|
||||||
* Author : Vinay Divakar
|
* Author : Vinay Divakar
|
||||||
* Description : This is an I2C Library for the BeagleBone that consists of the API's to support the standard
|
* Description : This is an I2C Library for the BeagleBone that consists of the
|
||||||
|
API's to support the standard
|
||||||
* I2C operations.
|
* I2C operations.
|
||||||
* Website : www.deeplyembedded.org
|
* Website : www.deeplyembedded.org
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*Libs Includes*/
|
/*Libs Includes*/
|
||||||
#include<stdio.h>
|
#include <fcntl.h>
|
||||||
#include<fcntl.h>
|
|
||||||
#include<sys/ioctl.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <linux/i2c-dev.h>
|
#include <linux/i2c-dev.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <sys/ioctl.h>
|
||||||
|
#include <unistd.h>
|
||||||
// heuristic to guess what version of i2c-dev.h we have:
|
// heuristic to guess what version of i2c-dev.h we have:
|
||||||
// the one installed with `apt-get install libi2c-dev`
|
// the one installed with `apt-get install libi2c-dev`
|
||||||
// would conflict with linux/i2c.h, while the stock
|
// would conflict with linux/i2c.h, while the stock
|
||||||
|
@ -52,7 +53,6 @@ typedef char i2c_char_t;
|
||||||
/* Header Files */
|
/* Header Files */
|
||||||
#include "I2C.h"
|
#include "I2C.h"
|
||||||
|
|
||||||
|
|
||||||
/* Exposed objects for i2c-x */
|
/* Exposed objects for i2c-x */
|
||||||
I2C_DeviceT I2C_DEV_2;
|
I2C_DeviceT I2C_DEV_2;
|
||||||
|
|
||||||
|
@ -63,30 +63,26 @@ I2C_DeviceT I2C_DEV_2;
|
||||||
* Params @i2c_dev_path: Path to the I2C device
|
* Params @i2c_dev_path: Path to the I2C device
|
||||||
* @fd: Variable to store the file handler
|
* @fd: Variable to store the file handler
|
||||||
****************************************************************/
|
****************************************************************/
|
||||||
int Open_device(char *i2c_dev_path, int *fd)
|
int Open_device(char *i2c_dev_path, int *fd) {
|
||||||
{
|
if ((*fd = open(i2c_dev_path, O_RDWR)) < 0)
|
||||||
if((*fd = open(i2c_dev_path, O_RDWR))<0)
|
|
||||||
return -1;
|
return -1;
|
||||||
else
|
else
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************
|
/****************************************************************
|
||||||
* Function Name : Close_device
|
* Function Name : Close_device
|
||||||
* Description : Closes the I2C device in use
|
* Description : Closes the I2C device in use
|
||||||
* Returns : 0 on success, -1 on failure
|
* Returns : 0 on success, -1 on failure
|
||||||
* Params : @fd: file descriptor
|
* Params : @fd: file descriptor
|
||||||
****************************************************************/
|
****************************************************************/
|
||||||
int Close_device(int fd)
|
int Close_device(int fd) {
|
||||||
{
|
if (close(fd) == -1)
|
||||||
if(close(fd) == -1)
|
|
||||||
return -1;
|
return -1;
|
||||||
else
|
else
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************
|
/****************************************************************
|
||||||
* Function Name : Set_slave_addr
|
* Function Name : Set_slave_addr
|
||||||
* Description : Connect to the Slave device
|
* Description : Connect to the Slave device
|
||||||
|
@ -95,15 +91,13 @@ int Close_device(int fd)
|
||||||
* @slave_addr: Address of the slave device to
|
* @slave_addr: Address of the slave device to
|
||||||
* talk to.
|
* talk to.
|
||||||
****************************************************************/
|
****************************************************************/
|
||||||
int Set_slave_addr(int fd, unsigned char slave_addr)
|
int Set_slave_addr(int fd, unsigned char slave_addr) {
|
||||||
{
|
if (ioctl(fd, I2C_SLAVE, slave_addr) < 0)
|
||||||
if(ioctl(fd, I2C_SLAVE, slave_addr) < 0)
|
|
||||||
return -1;
|
return -1;
|
||||||
else
|
else
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************
|
/****************************************************************
|
||||||
* Function Name : i2c_write
|
* Function Name : i2c_write
|
||||||
* Description : Write a byte on SDA
|
* Description : Write a byte on SDA
|
||||||
|
@ -111,17 +105,15 @@ int Set_slave_addr(int fd, unsigned char slave_addr)
|
||||||
* Params @fd: File descriptor
|
* Params @fd: File descriptor
|
||||||
* @data: data to write on SDA
|
* @data: data to write on SDA
|
||||||
****************************************************************/
|
****************************************************************/
|
||||||
int i2c_write(int fd, unsigned char data)
|
int i2c_write(int fd, unsigned char data) {
|
||||||
{
|
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
ret = write(fd, &data, I2C_ONE_BYTE);
|
ret = write(fd, &data, I2C_ONE_BYTE);
|
||||||
if((ret == -1) || (ret != 1))
|
if ((ret == -1) || (ret != 1))
|
||||||
return -1;
|
return -1;
|
||||||
else
|
else
|
||||||
return(ret);
|
return (ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************
|
/****************************************************************
|
||||||
* Function Name : i2c_read
|
* Function Name : i2c_read
|
||||||
* Description : Read a byte on SDA
|
* Description : Read a byte on SDA
|
||||||
|
@ -130,18 +122,14 @@ int i2c_write(int fd, unsigned char data)
|
||||||
* @read_data: Points to the variable that stores
|
* @read_data: Points to the variable that stores
|
||||||
* the read data byte
|
* the read data byte
|
||||||
****************************************************************/
|
****************************************************************/
|
||||||
int i2c_read(int fd, unsigned char *read_data)
|
int i2c_read(int fd, unsigned char *read_data) {
|
||||||
{
|
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
ret = read(fd, &read_data, I2C_ONE_BYTE);
|
ret = read(fd, &read_data, I2C_ONE_BYTE);
|
||||||
if(ret == -1)
|
if (ret == -1) perror("I2C: Failed to read |");
|
||||||
perror("I2C: Failed to read |");
|
if (ret == 0) perror("I2C: End of FILE |");
|
||||||
if(ret == 0)
|
return (ret);
|
||||||
perror("I2C: End of FILE |");
|
|
||||||
return(ret);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************
|
/****************************************************************
|
||||||
* Function Name : i2c_read_register
|
* Function Name : i2c_read_register
|
||||||
* Description : Read a single register of the slave device
|
* Description : Read a single register of the slave device
|
||||||
|
@ -151,23 +139,19 @@ int i2c_read(int fd, unsigned char *read_data)
|
||||||
* @read_data: Points to the variable that stores
|
* @read_data: Points to the variable that stores
|
||||||
* the read data byte
|
* the read data byte
|
||||||
****************************************************************/
|
****************************************************************/
|
||||||
int i2c_read_register(int fd, unsigned char read_addr, unsigned char *read_data)
|
int i2c_read_register(int fd, unsigned char read_addr,
|
||||||
{
|
unsigned char *read_data) {
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
if(i2c_write(fd, read_addr) == -1)
|
if (i2c_write(fd, read_addr) == -1) {
|
||||||
{
|
|
||||||
perror("I2C: Failed to write |");
|
perror("I2C: Failed to write |");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
ret = read(fd, &read_data, I2C_ONE_BYTE);
|
ret = read(fd, &read_data, I2C_ONE_BYTE);
|
||||||
if(ret == -1)
|
if (ret == -1) perror("I2C: Failed to read |");
|
||||||
perror("I2C: Failed to read |");
|
if (ret == 0) perror("I2C: End of FILE |");
|
||||||
if(ret == 0)
|
return (ret);
|
||||||
perror("I2C: End of FILE |");
|
|
||||||
return(ret);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************
|
/****************************************************************
|
||||||
* Function Name : i2c_read_registers
|
* Function Name : i2c_read_registers
|
||||||
* Description : Read a multiple registers on the slave device
|
* Description : Read a multiple registers on the slave device
|
||||||
|
@ -179,23 +163,18 @@ int i2c_read_register(int fd, unsigned char read_addr, unsigned char *read_data)
|
||||||
* @buff_Ptr: Buffer to store the read bytes
|
* @buff_Ptr: Buffer to store the read bytes
|
||||||
****************************************************************/
|
****************************************************************/
|
||||||
int i2c_read_registers(int fd, int num, unsigned char starting_addr,
|
int i2c_read_registers(int fd, int num, unsigned char starting_addr,
|
||||||
unsigned char *buff_Ptr)
|
unsigned char *buff_Ptr) {
|
||||||
{
|
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
if(i2c_write(fd, starting_addr) == -1)
|
if (i2c_write(fd, starting_addr) == -1) {
|
||||||
{
|
|
||||||
perror("I2C: Failed to write |");
|
perror("I2C: Failed to write |");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
ret = read(fd, buff_Ptr, num);
|
ret = read(fd, buff_Ptr, num);
|
||||||
if(ret == -1)
|
if (ret == -1) perror("I2C: Failed to read |");
|
||||||
perror("I2C: Failed to read |");
|
if (ret == 0) perror("I2C: End of FILE |");
|
||||||
if(ret == 0)
|
return (ret);
|
||||||
perror("I2C: End of FILE |");
|
|
||||||
return(ret);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************
|
/****************************************************************
|
||||||
* Function Name : i2c_multiple_writes
|
* Function Name : i2c_multiple_writes
|
||||||
* Description : Write multiple bytes on SDA
|
* Description : Write multiple bytes on SDA
|
||||||
|
@ -205,17 +184,15 @@ int i2c_read_registers(int fd, int num, unsigned char starting_addr,
|
||||||
* @Ptr_buff: Pointer to the buffer containing the
|
* @Ptr_buff: Pointer to the buffer containing the
|
||||||
* bytes to be written on the SDA
|
* bytes to be written on the SDA
|
||||||
****************************************************************/
|
****************************************************************/
|
||||||
int i2c_multiple_writes(int fd, int num, unsigned char *Ptr_buff)
|
int i2c_multiple_writes(int fd, int num, unsigned char *Ptr_buff) {
|
||||||
{
|
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
ret = write(fd, Ptr_buff, num);
|
ret = write(fd, Ptr_buff, num);
|
||||||
if((ret == -1) || (ret != num))
|
if ((ret == -1) || (ret != num))
|
||||||
return -1;
|
return -1;
|
||||||
else
|
else
|
||||||
return(ret);
|
return (ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************
|
/****************************************************************
|
||||||
* Function Name : i2c_write_register
|
* Function Name : i2c_write_register
|
||||||
* Description : Write a control byte or byte to a register
|
* Description : Write a control byte or byte to a register
|
||||||
|
@ -226,20 +203,19 @@ int i2c_multiple_writes(int fd, int num, unsigned char *Ptr_buff)
|
||||||
* @val: Command or value to be written in the
|
* @val: Command or value to be written in the
|
||||||
* addressed register
|
* addressed register
|
||||||
****************************************************************/
|
****************************************************************/
|
||||||
int i2c_write_register(int fd, unsigned char reg_addr_or_cntrl, unsigned char val)
|
int i2c_write_register(int fd, unsigned char reg_addr_or_cntrl,
|
||||||
{
|
unsigned char val) {
|
||||||
unsigned char buff[2];
|
unsigned char buff[2];
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
buff[0] = reg_addr_or_cntrl;
|
buff[0] = reg_addr_or_cntrl;
|
||||||
buff[1] = val;
|
buff[1] = val;
|
||||||
ret = write(fd, buff, I2C_TWO_BYTES);
|
ret = write(fd, buff, I2C_TWO_BYTES);
|
||||||
if((ret == -1) || (ret != I2C_TWO_BYTES))
|
if ((ret == -1) || (ret != I2C_TWO_BYTES))
|
||||||
return -1;
|
return -1;
|
||||||
else
|
else
|
||||||
return(ret);
|
return (ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************
|
/****************************************************************
|
||||||
* Function Name : config_i2c_struct
|
* Function Name : config_i2c_struct
|
||||||
* Description : Initialize the I2C device structure
|
* Description : Initialize the I2C device structure
|
||||||
|
@ -248,14 +224,13 @@ int i2c_write_register(int fd, unsigned char reg_addr_or_cntrl, unsigned char va
|
||||||
* @slave_addr: Slave device address
|
* @slave_addr: Slave device address
|
||||||
* @i2c_dev: Pointer to the device structure
|
* @i2c_dev: Pointer to the device structure
|
||||||
****************************************************************/
|
****************************************************************/
|
||||||
void config_i2c_struct(char *i2c_dev_path, unsigned char slave_addr, I2C_DevicePtr i2c_dev)
|
void config_i2c_struct(char *i2c_dev_path, unsigned char slave_addr,
|
||||||
{
|
I2C_DevicePtr i2c_dev) {
|
||||||
i2c_dev->i2c_dev_path = i2c_dev_path;
|
i2c_dev->i2c_dev_path = i2c_dev_path;
|
||||||
i2c_dev->fd_i2c = 0;
|
i2c_dev->fd_i2c = 0;
|
||||||
i2c_dev->i2c_slave_addr = slave_addr;
|
i2c_dev->i2c_slave_addr = slave_addr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************
|
/****************************************************************
|
||||||
* Function Name : init_i2c_dev
|
* Function Name : init_i2c_dev
|
||||||
* Description : Connect the i2c bus to the slave device
|
* Description : Connect the i2c bus to the slave device
|
||||||
|
@ -263,16 +238,13 @@ void config_i2c_struct(char *i2c_dev_path, unsigned char slave_addr, I2C_DeviceP
|
||||||
* Params @i2c_path: the path to the device
|
* Params @i2c_path: the path to the device
|
||||||
* @slave_addr: Slave device address
|
* @slave_addr: Slave device address
|
||||||
****************************************************************/
|
****************************************************************/
|
||||||
int init_i2c_dev(const char* i2c_path, unsigned char slave_address)
|
int init_i2c_dev(const char *i2c_path, unsigned char slave_address) {
|
||||||
{
|
config_i2c_struct((char *)i2c_path, slave_address, &I2C_DEV_2);
|
||||||
config_i2c_struct((char*)i2c_path, slave_address, &I2C_DEV_2);
|
if (Open_device(I2C_DEV_2.i2c_dev_path, &I2C_DEV_2.fd_i2c) == -1) {
|
||||||
if(Open_device(I2C_DEV_2.i2c_dev_path, &I2C_DEV_2.fd_i2c) == -1)
|
|
||||||
{
|
|
||||||
perror("I2C: Failed to open device |");
|
perror("I2C: Failed to open device |");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if(Set_slave_addr(I2C_DEV_2.fd_i2c, I2C_DEV_2.i2c_slave_addr) == -1)
|
if (Set_slave_addr(I2C_DEV_2.fd_i2c, I2C_DEV_2.i2c_slave_addr) == -1) {
|
||||||
{
|
|
||||||
perror("I2C: Failed to connect to slave device |");
|
perror("I2C: Failed to connect to slave device |");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
19
luci-app-ouad/src/I2C_Library/I2C.h
Executable file → Normal file
19
luci-app-ouad/src/I2C_Library/I2C.h
Executable file → Normal file
|
@ -31,7 +31,7 @@ SOFTWARE.
|
||||||
#ifndef I2C_H_
|
#ifndef I2C_H_
|
||||||
#define I2C_H_
|
#define I2C_H_
|
||||||
|
|
||||||
#include<stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
/* No. of bytes per transaction */
|
/* No. of bytes per transaction */
|
||||||
#define I2C_ONE_BYTE 1
|
#define I2C_ONE_BYTE 1
|
||||||
|
@ -44,11 +44,11 @@ SOFTWARE.
|
||||||
#define I2C_DEV2_PATH "/dev/i2c-2"
|
#define I2C_DEV2_PATH "/dev/i2c-2"
|
||||||
|
|
||||||
/*I2C device configuration structure*/
|
/*I2C device configuration structure*/
|
||||||
typedef struct{
|
typedef struct {
|
||||||
char* i2c_dev_path;
|
char *i2c_dev_path;
|
||||||
int fd_i2c;
|
int fd_i2c;
|
||||||
unsigned char i2c_slave_addr;
|
unsigned char i2c_slave_addr;
|
||||||
}I2C_DeviceT, *I2C_DevicePtr;
|
} I2C_DeviceT, *I2C_DevicePtr;
|
||||||
|
|
||||||
/* Exposed Generic I2C Functions */
|
/* Exposed Generic I2C Functions */
|
||||||
extern int Open_device(char *i2c_dev_path, int *fd);
|
extern int Open_device(char *i2c_dev_path, int *fd);
|
||||||
|
@ -56,14 +56,17 @@ extern int Close_device(int fd);
|
||||||
extern int Set_slave_addr(int fd, unsigned char slave_addr);
|
extern int Set_slave_addr(int fd, unsigned char slave_addr);
|
||||||
extern int i2c_write(int fd, unsigned char data);
|
extern int i2c_write(int fd, unsigned char data);
|
||||||
extern int i2c_read(int fd, unsigned char *read_data);
|
extern int i2c_read(int fd, unsigned char *read_data);
|
||||||
extern int i2c_read_register(int fd, unsigned char read_addr, unsigned char *read_data);
|
extern int i2c_read_register(int fd, unsigned char read_addr,
|
||||||
|
unsigned char *read_data);
|
||||||
extern int i2c_read_registers(int fd, int num, unsigned char starting_addr,
|
extern int i2c_read_registers(int fd, int num, unsigned char starting_addr,
|
||||||
unsigned char *buff_Ptr);
|
unsigned char *buff_Ptr);
|
||||||
extern void config_i2c_struct(char *i2c_dev_path, unsigned char slave_addr, I2C_DevicePtr i2c_dev);
|
extern void config_i2c_struct(char *i2c_dev_path, unsigned char slave_addr,
|
||||||
|
I2C_DevicePtr i2c_dev);
|
||||||
extern int i2c_multiple_writes(int fd, int num, unsigned char *Ptr_buff);
|
extern int i2c_multiple_writes(int fd, int num, unsigned char *Ptr_buff);
|
||||||
extern int i2c_write_register(int fd, unsigned char reg_addr_or_cntrl, unsigned char val);
|
extern int i2c_write_register(int fd, unsigned char reg_addr_or_cntrl,
|
||||||
|
unsigned char val);
|
||||||
|
|
||||||
/* Exposed I2C-x Specific Functions */
|
/* Exposed I2C-x Specific Functions */
|
||||||
extern int init_i2c_dev(const char* i2c_path, unsigned char slave_address);
|
extern int init_i2c_dev(const char *i2c_path, unsigned char slave_address);
|
||||||
|
|
||||||
#endif /* I2C_H_ */
|
#endif /* I2C_H_ */
|
||||||
|
|
0
luci-app-ouad/src/LICENSE
Executable file → Normal file
0
luci-app-ouad/src/LICENSE
Executable file → Normal file
21
luci-app-ouad/src/Makefile
Executable file → Normal file
21
luci-app-ouad/src/Makefile
Executable file → Normal file
|
@ -1,16 +1,27 @@
|
||||||
|
ifndef CC
|
||||||
CC = gcc
|
CC = gcc
|
||||||
LD = gcc
|
endif
|
||||||
|
ifndef LD
|
||||||
|
LD = ld
|
||||||
|
endif
|
||||||
|
|
||||||
SOURCES = SSD1306_OLED_Library/SSD1306_OLED.c Example_Code/Main.c Example_Code/example_app.c I2C_Library/I2C.c
|
SOURCES = SSD1306_OLED_Library/SSD1306_OLED.c Example_Code/main.c Example_Code/example_app.c I2C_Library/I2C.c
|
||||||
OBJS := $(SOURCES:.c=.o)
|
OBJS := $(SOURCES:.c=.o)
|
||||||
CPPFLAGS := -I SSD1306_OLED_Library -I I2C_Library
|
CPPFLAGS := -I SSD1306_OLED_Library -I I2C_Library
|
||||||
CFLAGS := -g
|
ifndef CFLAGS
|
||||||
|
CFLAGS := -O2
|
||||||
|
endif
|
||||||
|
LDFLAGS := -lpthread -lconfig
|
||||||
|
|
||||||
oled: $(OBJS)
|
oled: $(OBJS)
|
||||||
$(CC) $^ -o $@
|
$(CC) $^ -o $@ $(LDFLAGS)
|
||||||
|
|
||||||
|
ssd1306: $(OBJS)
|
||||||
|
$(CC) $^ -o $@ $(LDFLAGS) --static
|
||||||
|
strip $@
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -rf oled $(OBJS)
|
rm -rf oled ssd1306 $(OBJS)
|
||||||
|
|
||||||
compile: oled
|
compile: oled
|
||||||
|
|
||||||
|
|
0
luci-app-ouad/src/README.md
Executable file → Normal file
0
luci-app-ouad/src/README.md
Executable file → Normal file
183
luci-app-ouad/src/SSD1306_OLED_Library/.clang-format
Normal file
183
luci-app-ouad/src/SSD1306_OLED_Library/.clang-format
Normal file
|
@ -0,0 +1,183 @@
|
||||||
|
---
|
||||||
|
Language: Cpp
|
||||||
|
# BasedOnStyle: Google
|
||||||
|
AccessModifierOffset: -1
|
||||||
|
AlignAfterOpenBracket: Align
|
||||||
|
AlignConsecutiveMacros: false
|
||||||
|
AlignConsecutiveAssignments: false
|
||||||
|
AlignConsecutiveBitFields: false
|
||||||
|
AlignConsecutiveDeclarations: false
|
||||||
|
AlignEscapedNewlines: Left
|
||||||
|
AlignOperands: Align
|
||||||
|
AlignTrailingComments: true
|
||||||
|
AllowAllArgumentsOnNextLine: true
|
||||||
|
AllowAllConstructorInitializersOnNextLine: true
|
||||||
|
AllowAllParametersOfDeclarationOnNextLine: true
|
||||||
|
AllowShortEnumsOnASingleLine: true
|
||||||
|
AllowShortBlocksOnASingleLine: Never
|
||||||
|
AllowShortCaseLabelsOnASingleLine: false
|
||||||
|
AllowShortFunctionsOnASingleLine: All
|
||||||
|
AllowShortLambdasOnASingleLine: All
|
||||||
|
AllowShortIfStatementsOnASingleLine: WithoutElse
|
||||||
|
AllowShortLoopsOnASingleLine: true
|
||||||
|
AlwaysBreakAfterDefinitionReturnType: None
|
||||||
|
AlwaysBreakAfterReturnType: None
|
||||||
|
AlwaysBreakBeforeMultilineStrings: true
|
||||||
|
AlwaysBreakTemplateDeclarations: Yes
|
||||||
|
BinPackArguments: true
|
||||||
|
BinPackParameters: true
|
||||||
|
BraceWrapping:
|
||||||
|
AfterCaseLabel: false
|
||||||
|
AfterClass: false
|
||||||
|
AfterControlStatement: Never
|
||||||
|
AfterEnum: false
|
||||||
|
AfterFunction: false
|
||||||
|
AfterNamespace: false
|
||||||
|
AfterObjCDeclaration: false
|
||||||
|
AfterStruct: false
|
||||||
|
AfterUnion: false
|
||||||
|
AfterExternBlock: false
|
||||||
|
BeforeCatch: false
|
||||||
|
BeforeElse: false
|
||||||
|
BeforeLambdaBody: false
|
||||||
|
BeforeWhile: false
|
||||||
|
IndentBraces: false
|
||||||
|
SplitEmptyFunction: true
|
||||||
|
SplitEmptyRecord: true
|
||||||
|
SplitEmptyNamespace: true
|
||||||
|
BreakBeforeBinaryOperators: None
|
||||||
|
BreakBeforeBraces: Attach
|
||||||
|
BreakBeforeInheritanceComma: false
|
||||||
|
BreakInheritanceList: BeforeColon
|
||||||
|
BreakBeforeTernaryOperators: true
|
||||||
|
BreakConstructorInitializersBeforeComma: false
|
||||||
|
BreakConstructorInitializers: BeforeColon
|
||||||
|
BreakAfterJavaFieldAnnotations: false
|
||||||
|
BreakStringLiterals: true
|
||||||
|
ColumnLimit: 80
|
||||||
|
CommentPragmas: '^ IWYU pragma:'
|
||||||
|
CompactNamespaces: false
|
||||||
|
ConstructorInitializerAllOnOneLineOrOnePerLine: true
|
||||||
|
ConstructorInitializerIndentWidth: 4
|
||||||
|
ContinuationIndentWidth: 4
|
||||||
|
Cpp11BracedListStyle: true
|
||||||
|
DeriveLineEnding: true
|
||||||
|
DerivePointerAlignment: true
|
||||||
|
DisableFormat: false
|
||||||
|
ExperimentalAutoDetectBinPacking: false
|
||||||
|
FixNamespaceComments: true
|
||||||
|
ForEachMacros:
|
||||||
|
- foreach
|
||||||
|
- Q_FOREACH
|
||||||
|
- BOOST_FOREACH
|
||||||
|
IncludeBlocks: Regroup
|
||||||
|
IncludeCategories:
|
||||||
|
- Regex: '^<ext/.*\.h>'
|
||||||
|
Priority: 2
|
||||||
|
SortPriority: 0
|
||||||
|
- Regex: '^<.*\.h>'
|
||||||
|
Priority: 1
|
||||||
|
SortPriority: 0
|
||||||
|
- Regex: '^<.*'
|
||||||
|
Priority: 2
|
||||||
|
SortPriority: 0
|
||||||
|
- Regex: '.*'
|
||||||
|
Priority: 3
|
||||||
|
SortPriority: 0
|
||||||
|
IncludeIsMainRegex: '([-_](test|unittest))?$'
|
||||||
|
IncludeIsMainSourceRegex: ''
|
||||||
|
IndentCaseLabels: true
|
||||||
|
IndentCaseBlocks: false
|
||||||
|
IndentGotoLabels: true
|
||||||
|
IndentPPDirectives: None
|
||||||
|
IndentExternBlock: AfterExternBlock
|
||||||
|
IndentWidth: 2
|
||||||
|
IndentWrappedFunctionNames: false
|
||||||
|
InsertTrailingCommas: None
|
||||||
|
JavaScriptQuotes: Leave
|
||||||
|
JavaScriptWrapImports: true
|
||||||
|
KeepEmptyLinesAtTheStartOfBlocks: false
|
||||||
|
MacroBlockBegin: ''
|
||||||
|
MacroBlockEnd: ''
|
||||||
|
MaxEmptyLinesToKeep: 1
|
||||||
|
NamespaceIndentation: None
|
||||||
|
ObjCBinPackProtocolList: Never
|
||||||
|
ObjCBlockIndentWidth: 2
|
||||||
|
ObjCBreakBeforeNestedBlockParam: true
|
||||||
|
ObjCSpaceAfterProperty: false
|
||||||
|
ObjCSpaceBeforeProtocolList: true
|
||||||
|
PenaltyBreakAssignment: 2
|
||||||
|
PenaltyBreakBeforeFirstCallParameter: 1
|
||||||
|
PenaltyBreakComment: 300
|
||||||
|
PenaltyBreakFirstLessLess: 120
|
||||||
|
PenaltyBreakString: 1000
|
||||||
|
PenaltyBreakTemplateDeclaration: 10
|
||||||
|
PenaltyExcessCharacter: 1000000
|
||||||
|
PenaltyReturnTypeOnItsOwnLine: 200
|
||||||
|
PointerAlignment: Left
|
||||||
|
RawStringFormats:
|
||||||
|
- Language: Cpp
|
||||||
|
Delimiters:
|
||||||
|
- cc
|
||||||
|
- CC
|
||||||
|
- cpp
|
||||||
|
- Cpp
|
||||||
|
- CPP
|
||||||
|
- 'c++'
|
||||||
|
- 'C++'
|
||||||
|
CanonicalDelimiter: ''
|
||||||
|
BasedOnStyle: google
|
||||||
|
- Language: TextProto
|
||||||
|
Delimiters:
|
||||||
|
- pb
|
||||||
|
- PB
|
||||||
|
- proto
|
||||||
|
- PROTO
|
||||||
|
EnclosingFunctions:
|
||||||
|
- EqualsProto
|
||||||
|
- EquivToProto
|
||||||
|
- PARSE_PARTIAL_TEXT_PROTO
|
||||||
|
- PARSE_TEST_PROTO
|
||||||
|
- PARSE_TEXT_PROTO
|
||||||
|
- ParseTextOrDie
|
||||||
|
- ParseTextProtoOrDie
|
||||||
|
- ParseTestProto
|
||||||
|
- ParsePartialTestProto
|
||||||
|
CanonicalDelimiter: ''
|
||||||
|
BasedOnStyle: google
|
||||||
|
ReflowComments: true
|
||||||
|
SortIncludes: true
|
||||||
|
SortUsingDeclarations: true
|
||||||
|
SpaceAfterCStyleCast: false
|
||||||
|
SpaceAfterLogicalNot: false
|
||||||
|
SpaceAfterTemplateKeyword: true
|
||||||
|
SpaceBeforeAssignmentOperators: true
|
||||||
|
SpaceBeforeCpp11BracedList: false
|
||||||
|
SpaceBeforeCtorInitializerColon: true
|
||||||
|
SpaceBeforeInheritanceColon: true
|
||||||
|
SpaceBeforeParens: ControlStatements
|
||||||
|
SpaceBeforeRangeBasedForLoopColon: true
|
||||||
|
SpaceInEmptyBlock: false
|
||||||
|
SpaceInEmptyParentheses: false
|
||||||
|
SpacesBeforeTrailingComments: 2
|
||||||
|
SpacesInAngles: false
|
||||||
|
SpacesInConditionalStatement: false
|
||||||
|
SpacesInContainerLiterals: true
|
||||||
|
SpacesInCStyleCastParentheses: false
|
||||||
|
SpacesInParentheses: false
|
||||||
|
SpacesInSquareBrackets: false
|
||||||
|
SpaceBeforeSquareBrackets: false
|
||||||
|
Standard: Auto
|
||||||
|
StatementMacros:
|
||||||
|
- Q_UNUSED
|
||||||
|
- QT_REQUIRE_VERSION
|
||||||
|
IndentWidth: 8
|
||||||
|
TabWidth: 8
|
||||||
|
UseCRLF: false
|
||||||
|
UseTab: Always
|
||||||
|
WhitespaceSensitiveMacros:
|
||||||
|
- STRINGIZE
|
||||||
|
- PP_STRINGIZE
|
||||||
|
- BOOST_PP_STRINGIZE
|
||||||
|
...
|
||||||
|
|
1751
luci-app-ouad/src/SSD1306_OLED_Library/SSD1306_OLED.c
Executable file → Normal file
1751
luci-app-ouad/src/SSD1306_OLED_Library/SSD1306_OLED.c
Executable file → Normal file
File diff suppressed because it is too large
Load diff
66
luci-app-ouad/src/SSD1306_OLED_Library/SSD1306_OLED.h
Executable file → Normal file
66
luci-app-ouad/src/SSD1306_OLED_Library/SSD1306_OLED.h
Executable file → Normal file
|
@ -35,12 +35,12 @@ SOFTWARE.
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
||||||
/* Find Min and Max - MACROS */
|
/* Find Min and Max - MACROS */
|
||||||
#define MIN(a,b) (((a)<(b))?(a):(b))
|
#define MIN(a, b) (((a) < (b)) ? (a) : (b))
|
||||||
#define MAX(a,b) (((a)>(b))?(a):(b))
|
#define MAX(a, b) (((a) > (b)) ? (a) : (b))
|
||||||
|
|
||||||
/* I2C Address of SSD1306 */
|
/* I2C Address of SSD1306 */
|
||||||
#define SSD1306_OLED_ADDR 0x3C
|
#define SSD1306_OLED_ADDR 0x3C
|
||||||
#define DISPLAY_BUFF_SIZE (SSD1306_LCDWIDTH*SSD1306_LCDHEIGHT/8)
|
#define DISPLAY_BUFF_SIZE (SSD1306_LCDWIDTH * SSD1306_LCDHEIGHT / 8)
|
||||||
|
|
||||||
/* COLOR MACROS */
|
/* COLOR MACROS */
|
||||||
#define WHITE 1
|
#define WHITE 1
|
||||||
|
@ -60,10 +60,10 @@ SOFTWARE.
|
||||||
#define SSD1306_CNTRL_CMD 0x00
|
#define SSD1306_CNTRL_CMD 0x00
|
||||||
#define SSD1306_CNTRL_DATA 0x40
|
#define SSD1306_CNTRL_DATA 0x40
|
||||||
|
|
||||||
|
/*-----------------------Enable the WxL of the Display
|
||||||
/*-----------------------Enable the WxL of the Display ---------------------------*/
|
* ---------------------------*/
|
||||||
#define SSD1306_128_64
|
//#define SSD1306_128_64
|
||||||
//#define SSD1306_128_32
|
#define SSD1306_128_32
|
||||||
//#define SSD1306_96_16
|
//#define SSD1306_96_16
|
||||||
/*--------------------------------------------------------------------------------*/
|
/*--------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
@ -73,12 +73,12 @@ SOFTWARE.
|
||||||
#define SSD1306_LCDHEIGHT 64
|
#define SSD1306_LCDHEIGHT 64
|
||||||
#endif
|
#endif
|
||||||
#if defined SSD1306_128_32
|
#if defined SSD1306_128_32
|
||||||
#define SSD1306_LCDWIDTH 128
|
#define SSD1306_LCDWIDTH 128
|
||||||
#define SSD1306_LCDHEIGHT 32
|
#define SSD1306_LCDHEIGHT 32
|
||||||
#endif
|
#endif
|
||||||
#if defined SSD1306_96_16
|
#if defined SSD1306_96_16
|
||||||
#define SSD1306_LCDWIDTH 96
|
#define SSD1306_LCDWIDTH 96
|
||||||
#define SSD1306_LCDHEIGHT 16
|
#define SSD1306_LCDHEIGHT 16
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* SSD1306 Commands */
|
/* SSD1306 Commands */
|
||||||
|
@ -121,12 +121,12 @@ SOFTWARE.
|
||||||
#define SSD1306_MULT_64 0x3F
|
#define SSD1306_MULT_64 0x3F
|
||||||
#endif
|
#endif
|
||||||
#if defined SSD1306_128_32
|
#if defined SSD1306_128_32
|
||||||
#define SSD1306_MULT_64 0x1F
|
#define SSD1306_MULT_64 0x1F
|
||||||
#endif
|
#endif
|
||||||
#define SSD1306_MULT_64 0x1F
|
#define SSD1306_MULT_64 0x1F
|
||||||
#define SSD1306_DISP_OFFSET_VAL 0x00
|
#define SSD1306_DISP_OFFSET_VAL 0x00
|
||||||
#define SSD1306_COL_START_ADDR 0x00 //Reset to = 0
|
#define SSD1306_COL_START_ADDR 0x00 // Reset to = 0
|
||||||
#define SSD1306_COL_END_ADDR (SSD1306_LCDWIDTH - 1) //Reset to = 127
|
#define SSD1306_COL_END_ADDR (SSD1306_LCDWIDTH - 1) // Reset to = 127
|
||||||
#define SSD1306_PG_START_ADDR 0x00
|
#define SSD1306_PG_START_ADDR 0x00
|
||||||
#define SSD1306_PG_END_ADDR 7
|
#define SSD1306_PG_END_ADDR 7
|
||||||
#define SSD1306_CHARGE_PUMP_EN 0x14
|
#define SSD1306_CHARGE_PUMP_EN 0x14
|
||||||
|
@ -134,9 +134,9 @@ SOFTWARE.
|
||||||
#define SSD1306_CONFIG_COM_PINS 0x12
|
#define SSD1306_CONFIG_COM_PINS 0x12
|
||||||
#endif
|
#endif
|
||||||
#if defined SSD1306_128_32
|
#if defined SSD1306_128_32
|
||||||
#define SSD1306_CONFIG_COM_PINS 0x02
|
#define SSD1306_CONFIG_COM_PINS 0x02
|
||||||
#endif
|
#endif
|
||||||
#define SSD1306_CONTRAST_VAL 0xCF //207
|
#define SSD1306_CONTRAST_VAL 0xCF // 207
|
||||||
#define SSD1306_PRECHARGE_VAL 0xF1
|
#define SSD1306_PRECHARGE_VAL 0xF1
|
||||||
#define SSD1306_VCOMH_VAL 0x40
|
#define SSD1306_VCOMH_VAL 0x40
|
||||||
#define SSD1306_MULT_DAT (SSD1306_LCDHEIGHT - 1)
|
#define SSD1306_MULT_DAT (SSD1306_LCDHEIGHT - 1)
|
||||||
|
@ -146,8 +146,10 @@ SOFTWARE.
|
||||||
extern void clearDisplay();
|
extern void clearDisplay();
|
||||||
extern void display_Init_seq();
|
extern void display_Init_seq();
|
||||||
extern void Display();
|
extern void Display();
|
||||||
extern void Init_Col_PG_addrs(unsigned char col_start_addr, unsigned char col_end_addr,
|
extern void Init_Col_PG_addrs(unsigned char col_start_addr,
|
||||||
unsigned char pg_start_addr, unsigned char pg_end_addr);
|
unsigned char col_end_addr,
|
||||||
|
unsigned char pg_start_addr,
|
||||||
|
unsigned char pg_end_addr);
|
||||||
extern void setRotation(unsigned char x);
|
extern void setRotation(unsigned char x);
|
||||||
extern void startscrollright(unsigned char start, unsigned char stop);
|
extern void startscrollright(unsigned char start, unsigned char stop);
|
||||||
extern void startscrollleft(unsigned char start, unsigned char stop);
|
extern void startscrollleft(unsigned char start, unsigned char stop);
|
||||||
|
@ -159,29 +161,40 @@ extern short getCursorX();
|
||||||
extern short getCursorY();
|
extern short getCursorY();
|
||||||
extern unsigned char getRotation();
|
extern unsigned char getRotation();
|
||||||
extern void invertDisplay(unsigned char i);
|
extern void invertDisplay(unsigned char i);
|
||||||
|
extern void display_rotate();
|
||||||
|
extern void display_normal();
|
||||||
|
|
||||||
/*SSD1306 Graphics Handling API's */
|
/*SSD1306 Graphics Handling API's */
|
||||||
extern signed char drawPixel(short x, short y, short color);
|
extern signed char drawPixel(short x, short y, short color);
|
||||||
extern void writeLine(short x0, short y0, short x1, short y1, short color);
|
extern void writeLine(short x0, short y0, short x1, short y1, short color);
|
||||||
extern void drawCircleHelper( short x0, short y0, short r, unsigned char cornername, short color);
|
extern void drawCircleHelper(short x0, short y0, short r,
|
||||||
|
unsigned char cornername, short color);
|
||||||
extern void drawLine(short x0, short y0, short x1, short y1, short color);
|
extern void drawLine(short x0, short y0, short x1, short y1, short color);
|
||||||
extern void drawRect(short x, short y, short w, short h, short color);
|
extern void drawRect(short x, short y, short w, short h, short color);
|
||||||
extern void fillRect(short x, short y, short w, short h, short color);
|
extern void fillRect(short x, short y, short w, short h, short color);
|
||||||
extern void drawCircle(short x0, short y0, short r, short color);
|
extern void drawCircle(short x0, short y0, short r, short color);
|
||||||
extern void fillCircleHelper(short x0, short y0, short r, unsigned char cornername, short delta, short color);
|
extern void fillCircleHelper(short x0, short y0, short r,
|
||||||
|
unsigned char cornername, short delta,
|
||||||
|
short color);
|
||||||
extern void fillCircle(short x0, short y0, short r, short color);
|
extern void fillCircle(short x0, short y0, short r, short color);
|
||||||
extern void drawTriangle(short x0, short y0, short x1, short y1, short x2, short y2, short color);
|
extern void drawTriangle(short x0, short y0, short x1, short y1, short x2,
|
||||||
extern void fillTriangle(short x0, short y0, short x1, short y1, short x2, short y2, short color);
|
short y2, short color);
|
||||||
extern void drawRoundRect(short x, short y, short w, short h, short r, short color);
|
extern void fillTriangle(short x0, short y0, short x1, short y1, short x2,
|
||||||
extern void fillRoundRect(short x, short y, short w, short h, short r, short color);
|
short y2, short color);
|
||||||
extern void drawBitmap(short x, short y, const unsigned char bitmap[], short w, short h, short color);
|
extern void drawRoundRect(short x, short y, short w, short h, short r,
|
||||||
|
short color);
|
||||||
|
extern void fillRoundRect(short x, short y, short w, short h, short r,
|
||||||
|
short color);
|
||||||
|
extern void drawBitmap(short x, short y, const unsigned char bitmap[], short w,
|
||||||
|
short h, short color);
|
||||||
extern short oled_write(unsigned char c);
|
extern short oled_write(unsigned char c);
|
||||||
|
|
||||||
/*SSD1306 Text and Character Handling API's */
|
/*SSD1306 Text and Character Handling API's */
|
||||||
extern void setTextSize(unsigned char s);
|
extern void setTextSize(unsigned char s);
|
||||||
extern void setTextColor(short c);
|
extern void setTextColor(short c);
|
||||||
extern void setTextWrap(bool w);
|
extern void setTextWrap(bool w);
|
||||||
extern void drawChar(short x, short y, unsigned char c, short color, short bg, unsigned char size);
|
extern void drawChar(short x, short y, unsigned char c, short color, short bg,
|
||||||
|
unsigned char size);
|
||||||
extern short print_str(const unsigned char *strPtr);
|
extern short print_str(const unsigned char *strPtr);
|
||||||
extern short println();
|
extern short println();
|
||||||
extern short print_strln(const unsigned char *strPtr);
|
extern short print_strln(const unsigned char *strPtr);
|
||||||
|
@ -201,4 +214,3 @@ extern short printNumber_I_ln(int n, int base);
|
||||||
extern short printFloat(double number, unsigned char digits);
|
extern short printFloat(double number, unsigned char digits);
|
||||||
extern short printFloat_ln(double num, int digits);
|
extern short printFloat_ln(double num, int digits);
|
||||||
#endif /* SSD1306_OLED_H_ */
|
#endif /* SSD1306_OLED_H_ */
|
||||||
|
|
||||||
|
|
0
luci-app-ouad/src/SSD1306_OLED_Library/gfxfont.h
Executable file → Normal file
0
luci-app-ouad/src/SSD1306_OLED_Library/gfxfont.h
Executable file → Normal file
Loading…
Add table
Add a link
Reference in a new issue