1
0
Fork 0
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:
suyuan 2023-10-08 15:15:19 +08:00
parent 2e0365edad
commit dd13942d68
33 changed files with 3539 additions and 3029 deletions

0
luci-app-ouad/LICENSE Executable file → Normal file
View file

12
luci-app-ouad/Makefile Executable file → Normal file
View 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
View 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
View 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
View file

1
luci-app-ouad/po/zh-cn Symbolic link
View file

@ -0,0 +1 @@
zh_Hans

1
luci-app-ouad/po/zh-tw Symbolic link
View file

@ -0,0 +1 @@
zh_Hant

0
luci-app-ouad/po/zh_Hans/oled.po Executable file → Normal file
View file

0
luci-app-ouad/po/zh_Hant/oled.po Executable file → Normal file
View file

4
luci-app-ouad/root/etc/config/oled Executable file → Normal file
View 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'

View file

@ -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
View 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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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)"

View file

@ -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}"
}

View file

@ -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

View file

View 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
...

829
luci-app-ouad/src/Example_Code/Main.c Executable file → Normal file
View 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;
/* Alarm Signal Handler */ /** Shared variable by the threads */
void ALARMhandler(int sig) 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 */
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) {
if (get_sleep_flag() == 0 && stcfg->scroll) {
testscrolltext(stcfg->scroll_text);
usleep(DISPLAY_INTERVAL);
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); // setCursor(0,0);
setTextColor(WHITE); setTextColor(WHITE);
testintfstatus(FULL, 0); // info display
display_bitmap_uploaddownload(); int sum = stcfg->disp_date + stcfg->disp_ip +
testnetspeed(SPLIT, 120); stcfg->disp_cpu_freq + stcfg->disp_cpu_temp +
testvpsip(FULL, 52); stcfg->disp_net_speed;
Display(); if (sum == 0) {
usleep(5000000);
clearDisplay(); clearDisplay();
testinfo1();
Display(); Display();
usleep(1000000); usleep(DISPLAY_INTERVAL);
clearDisplay(); continue;
testinfo2(); }
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(); Display();
usleep(800000); usleep(DISPLAY_INTERVAL);
clearDisplay(); clearDisplay();
testinfo3(); } 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(); Display();
usleep(200000); usleep(DISPLAY_INTERVAL);
clearDisplay(); 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);
}

670
luci-app-ouad/src/Example_Code/example_app.c Executable file → Normal file
View file

@ -29,16 +29,24 @@ SOFTWARE.
*/ */
/* Lib Includes */ /* Lib Includes */
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <stdint.h>
#include <signal.h>
#include <unistd.h>
#include <time.h>
#include "SSD1306_OLED.h"
#include "example_app.h" #include "example_app.h"
#include <arpa/inet.h>
#include <net/if.h>
#include <netinet/in.h>
#include <signal.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <time.h>
#include <unistd.h>
#include "SSD1306_OLED.h"
#define BUFMAX SSD1306_LCDWIDTH *SSD1306_LCDHEIGHT #define BUFMAX SSD1306_LCDWIDTH *SSD1306_LCDHEIGHT
/* MACRO's */ /* MACRO's */
@ -49,190 +57,41 @@ SOFTWARE.
#define YPOS 1 #define YPOS 1
#define DELTAY 2 #define DELTAY 2
#define TIMESIZE 64 #define TIMESIZE 64
// temperature // temperature
#define TEMPPATH "/sys/class/thermal/thermal_zone0/temp" #define TEMPPATH "/sys/class/thermal/thermal_zone0/temp"
#define TEMPSIZE 5 #define TEMPSIZE 5
// cpu // cpu
#define FREQSIZE 8 #define FREQSIZE 8
#define FREQPATH "cat /sys/devices/system/cpu/cpu[04]/cpufreq/cpuinfo_cur_freq" #define FREQPATH "/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq"
// ip // ip
#define IPPATH "ifconfig br-lan|grep 'inet addr:'|cut -d: -f2|awk '{print $1}'"
#define IPSIZE 20 #define IPSIZE 20
//netspeed
#define NETPATH "cat /tmp/netspeed"
//interfaces status
#define INTFPATH "/usr/sbin/status_interfaces.sh"
//VPS IP
#define VPSIPPATH "/usr/sbin/status_server.sh"
#define INFO1PATH "/usr/sbin/status_page1.sh"
#define INFO2PATH "/usr/sbin/status_page2.sh"
#define INFO3PATH "/usr/sbin/status_page3.sh"
/* Extern volatile */ /* Extern volatile */
extern volatile unsigned char flag; extern volatile unsigned char flag;
/* Bit Map - Taken from Adafruit SSD1306 OLED Library */ /* Bit Map - Taken from Adafruit SSD1306 OLED Library */
static const unsigned char logo16_glcd_bmp[] = static const unsigned char logo16_glcd_bmp[] = {
{ 0b00000000, 0b11000000, 0b00000001, 0b11000000, 0b00000001, 0b11000000,
0b00000000, 0b11000000, 0b00000011, 0b11100000, 0b11110011, 0b11100000, 0b11111110, 0b11111000,
0b00000001, 0b11000000, 0b01111110, 0b11111111, 0b00110011, 0b10011111, 0b00011111, 0b11111100,
0b00000001, 0b11000000, 0b00001101, 0b01110000, 0b00011011, 0b10100000, 0b00111111, 0b11100000,
0b00000011, 0b11100000, 0b00111111, 0b11110000, 0b01111100, 0b11110000, 0b01110000, 0b01110000,
0b11110011, 0b11100000, 0b00000000, 0b00110000};
0b11111110, 0b11111000,
0b01111110, 0b11111111,
0b00110011, 0b10011111,
0b00011111, 0b11111100,
0b00001101, 0b01110000,
0b00011011, 0b10100000,
0b00111111, 0b11100000,
0b00111111, 0b11110000,
0b01111100, 0b11110000,
0b01110000, 0b01110000,
0b00000000, 0b00110000
};
#define jiantou_xiangshang_width 16
#define jiantou_xiangshang_height 16
static const unsigned char jiantou_xiangshang_data[] = {
0b00000000,0b00000000,
0b00000000,0b00000000,
0b00000001,0b10000000,
0b00000011,0b11000000,
0b00000011,0b11000000,
0b00000101,0b10100000,
0b00000001,0b10000000,
0b00000001,0b10000000,
0b00000001,0b10000000,
0b00000001,0b10000000,
0b00000001,0b10000000,
0b00000001,0b10000000,
0b00000001,0b10000000,
0b00000001,0b10000000,
0b00000000,0b00000000,
0b00000000,0b00000000,
};
static const unsigned char jiantou_xiangshangd_data[] = {
0b00000000,0b00000000,
0b00000000,0b00000000,
0b00000001,0b10000000,
0b00000001,0b10000000,
0b00000001,0b10000000,
0b00000001,0b10000000,
0b00000001,0b10000000,
0b00000001,0b10000000,
0b00000001,0b10000000,
0b00000001,0b10000000,
0b00000101,0b10100000,
0b00000011,0b11000000,
0b00000011,0b11000000,
0b00000001,0b10000000,
0b00000000,0b00000000,
0b00000000,0b00000000,
};
static const unsigned char level4_data[] = {
0b00000000,0b00000000,
0b00000000,0b00000000,
0b00000000,0b00000111,
0b00000000,0b00000111,
0b00000000,0b01110111,
0b00000000,0b01110111,
0b00000111,0b01110111,
0b00000111,0b01110111,
0b01110111,0b01110111,
0b01110111,0b01110111,
};
static const unsigned char level3_data[] = {
0b00000000,0b00000000,
0b00000000,0b00000000,
0b00000000,0b00000000,
0b00000000,0b00000000,
0b00000000,0b01110000,
0b00000000,0b01110000,
0b00000111,0b01110000,
0b00000111,0b01110000,
0b01110111,0b01110000,
0b01110111,0b01110000,
};
static const unsigned char level2_data[] = {
0b00000000,0b00000000,
0b00000000,0b00000000,
0b00000000,0b00000000,
0b00000000,0b00000000,
0b00000000,0b00000000,
0b00000000,0b00000000,
0b00000111,0b00000000,
0b00000111,0b00000000,
0b01110111,0b00000000,
0b01110111,0b00000000,
};
static const unsigned char level1_data[] = {
0b00000000,0b00000000,
0b00000000,0b00000000,
0b00000000,0b00000000,
0b00000000,0b00000000,
0b00000000,0b00000000,
0b00000000,0b00000000,
0b00000000,0b00000000,
0b00000000,0b00000000,
0b01110000,0b00000000,
0b01110000,0b00000000,
};
static const unsigned char level0_data[] = {
0b00000000,0b00000000,
0b00000001,0b10000000,
0b00000001,0b10000000,
0b00000001,0b10000000,
0b00000001,0b10000000,
0b00000001,0b10000000,
0b00000001,0b10000000,
0b00000000,0b00000000,
0b00000001,0b10000000,
0b00000001,0b10000000,
};
static const unsigned char levelok_data[] = {
0b00000000,0b00000000,
0b00000000,0b00000000,
0b00000000,0b00011000,
0b00000000,0b00110000,
0b00000000,0b01100000,
0b00000000,0b11000000,
0b00000001,0b10000000,
0b01100011,0b00000000,
0b00110110,0b00000000,
0b00011100,0b00000000,
};
FILE *fp; FILE *fp;
char content_buff[BUFMAX]; char content_buff[BUFMAX];
char buf[BUFMAX]; char buf[BUFMAX];
int display_offset = 7; int display_offset = 7;
/* draw many lines */ /* draw many lines */
void testdrawline() void testdrawline() {
{
short i = 0; short i = 0;
for (i=0; i<SSD1306_LCDWIDTH; i+=4) for (i = 0; i < SSD1306_LCDWIDTH; i += 4) {
{
drawLine(0, 0, i, SSD1306_LCDHEIGHT - 1, WHITE); drawLine(0, 0, i, SSD1306_LCDHEIGHT - 1, WHITE);
Display(); Display();
usleep(1000); usleep(1000);
} }
for (i=0; i<SSD1306_LCDHEIGHT; i+=4) for (i = 0; i < SSD1306_LCDHEIGHT; i += 4) {
{
drawLine(0, 0, SSD1306_LCDWIDTH - 1, i, WHITE); drawLine(0, 0, SSD1306_LCDWIDTH - 1, i, WHITE);
Display(); Display();
usleep(1000); usleep(1000);
@ -240,44 +99,43 @@ void testdrawline()
usleep(250000); usleep(250000);
clearDisplay(); clearDisplay();
for (i=0; i<SSD1306_LCDWIDTH; i+=4) for (i = 0; i < SSD1306_LCDWIDTH; i += 4) {
{
drawLine(0, SSD1306_LCDHEIGHT - 1, i, 0, WHITE); drawLine(0, SSD1306_LCDHEIGHT - 1, i, 0, WHITE);
Display(); Display();
usleep(1000); usleep(1000);
} }
for (i=SSD1306_LCDHEIGHT-1; i>=0; i-=4) for (i = SSD1306_LCDHEIGHT - 1; i >= 0; i -= 4) {
{ drawLine(0, SSD1306_LCDHEIGHT - 1, SSD1306_LCDWIDTH - 1, i,
drawLine(0, SSD1306_LCDHEIGHT-1, SSD1306_LCDWIDTH-1, i, WHITE); WHITE);
Display(); Display();
usleep(1000); usleep(1000);
} }
usleep(250000); usleep(250000);
clearDisplay(); clearDisplay();
for (i=SSD1306_LCDWIDTH-1; i>=0; i-=4) for (i = SSD1306_LCDWIDTH - 1; i >= 0; i -= 4) {
{ drawLine(SSD1306_LCDWIDTH - 1, SSD1306_LCDHEIGHT - 1, i, 0,
drawLine(SSD1306_LCDWIDTH-1, SSD1306_LCDHEIGHT-1, i, 0, WHITE); WHITE);
Display(); Display();
usleep(1000); usleep(1000);
} }
for (i=SSD1306_LCDHEIGHT-1; i>=0; i-=4) for (i = SSD1306_LCDHEIGHT - 1; i >= 0; i -= 4) {
{ drawLine(SSD1306_LCDWIDTH - 1, SSD1306_LCDHEIGHT - 1, 0, i,
drawLine(SSD1306_LCDWIDTH-1, SSD1306_LCDHEIGHT-1, 0, i, WHITE); WHITE);
Display(); Display();
usleep(1000); usleep(1000);
} }
usleep(250000); usleep(250000);
clearDisplay(); clearDisplay();
for (i=0; i<SSD1306_LCDHEIGHT; i+=4) for (i = 0; i < SSD1306_LCDHEIGHT; i += 4) {
{
drawLine(SSD1306_LCDWIDTH - 1, 0, 0, i, WHITE); drawLine(SSD1306_LCDWIDTH - 1, 0, 0, i, WHITE);
Display(); Display();
usleep(1000); usleep(1000);
} }
for (i = 0; i < SSD1306_LCDWIDTH; i += 4) { for (i = 0; i < SSD1306_LCDWIDTH; i += 4) {
drawLine(SSD1306_LCDWIDTH-1, 0, i, SSD1306_LCDHEIGHT-1, WHITE); drawLine(SSD1306_LCDWIDTH - 1, 0, i, SSD1306_LCDHEIGHT - 1,
WHITE);
Display(); Display();
usleep(1000); usleep(1000);
} }
@ -285,26 +143,24 @@ void testdrawline()
} }
/* draw rectangles */ /* draw rectangles */
void testdrawrect() void testdrawrect() {
{
short i = 0; short i = 0;
for (i=0; i<SSD1306_LCDHEIGHT/2; i+=2) for (i = 0; i < SSD1306_LCDHEIGHT / 2; i += 2) {
{ drawRect(i, i, SSD1306_LCDWIDTH - 2 * i,
drawRect(i, i,SSD1306_LCDWIDTH-2*i, SSD1306_LCDHEIGHT-2*i, WHITE); SSD1306_LCDHEIGHT - 2 * i, WHITE);
Display(); Display();
usleep(1000); usleep(1000);
} }
} }
/* draw multiple rectangles */ /* draw multiple rectangles */
void testfillrect() void testfillrect() {
{
unsigned char color = 1; unsigned char color = 1;
short i = 0; short i = 0;
for (i=0; i<SSD1306_LCDHEIGHT/2; i+=3) for (i = 0; i < SSD1306_LCDHEIGHT / 2; i += 3) {
{
// alternate colors // alternate colors
fillRect(i, i, SSD1306_LCDWIDTH-i*2, SSD1306_LCDHEIGHT-i*2, color%2); fillRect(i, i, SSD1306_LCDWIDTH - i * 2,
SSD1306_LCDHEIGHT - i * 2, color % 2);
Display(); Display();
usleep(1000); usleep(1000);
color++; color++;
@ -312,35 +168,35 @@ void testfillrect()
} }
/* draw mulitple circles */ /* draw mulitple circles */
void testdrawcircle() void testdrawcircle() {
{
short i = 0; short i = 0;
for (i=0; i<SSD1306_LCDHEIGHT; i+=2) for (i = 0; i < SSD1306_LCDHEIGHT; i += 2) {
{ drawCircle(SSD1306_LCDWIDTH / 2, SSD1306_LCDHEIGHT / 2, i,
drawCircle(SSD1306_LCDWIDTH/2,SSD1306_LCDHEIGHT/2, i, WHITE); WHITE);
Display(); Display();
usleep(1000); usleep(1000);
} }
} }
/*draw a white circle, 10 pixel radius */ /*draw a white circle, 10 pixel radius */
void testdrawroundrect() void testdrawroundrect() {
{
short i = 0; short i = 0;
for (i = 0; i < SSD1306_LCDHEIGHT / 2 - 2; i += 2) { for (i = 0; i < SSD1306_LCDHEIGHT / 2 - 2; i += 2) {
drawRoundRect(i, i,SSD1306_LCDWIDTH-2*i, SSD1306_LCDHEIGHT-2*i, SSD1306_LCDHEIGHT/4, WHITE); drawRoundRect(i, i, SSD1306_LCDWIDTH - 2 * i,
SSD1306_LCDHEIGHT - 2 * i, SSD1306_LCDHEIGHT / 4,
WHITE);
Display(); Display();
usleep(1000); usleep(1000);
} }
} }
/* Fill the round rectangle */ /* Fill the round rectangle */
void testfillroundrect() void testfillroundrect() {
{
short color = WHITE, i = 0; short color = WHITE, i = 0;
for (i=0; i<SSD1306_LCDHEIGHT/2-2; i+=2) for (i = 0; i < SSD1306_LCDHEIGHT / 2 - 2; i += 2) {
{ fillRoundRect(i, i, SSD1306_LCDWIDTH - 2 * i,
fillRoundRect(i, i, SSD1306_LCDWIDTH-2*i, SSD1306_LCDHEIGHT-2*i, SSD1306_LCDHEIGHT/4, color); SSD1306_LCDHEIGHT - 2 * i, SSD1306_LCDHEIGHT / 4,
color);
if (color == WHITE) if (color == WHITE)
color = BLACK; color = BLACK;
else else
@ -351,12 +207,11 @@ void testfillroundrect()
} }
/* Draw triangles */ /* Draw triangles */
void testdrawtriangle() void testdrawtriangle() {
{
short i = 0; short i = 0;
for (i=0; i<MIN(SSD1306_LCDWIDTH,SSD1306_LCDHEIGHT)/2; i+=5) for (i = 0; i < MIN(SSD1306_LCDWIDTH, SSD1306_LCDHEIGHT) / 2; i += 5) {
{ drawTriangle(
drawTriangle(SSD1306_LCDWIDTH/2, SSD1306_LCDHEIGHT/2-i, SSD1306_LCDWIDTH / 2, SSD1306_LCDHEIGHT / 2 - i,
SSD1306_LCDWIDTH / 2 - i, SSD1306_LCDHEIGHT / 2 + i, SSD1306_LCDWIDTH / 2 - i, SSD1306_LCDHEIGHT / 2 + i,
SSD1306_LCDWIDTH / 2 + i, SSD1306_LCDHEIGHT / 2 + i, WHITE); SSD1306_LCDWIDTH / 2 + i, SSD1306_LCDHEIGHT / 2 + i, WHITE);
Display(); Display();
@ -365,13 +220,12 @@ void testdrawtriangle()
} }
/* Fill triangles */ /* Fill triangles */
void testfilltriangle() void testfilltriangle() {
{
unsigned char color = WHITE; unsigned char color = WHITE;
short i = 0; short i = 0;
for (i=MIN(SSD1306_LCDWIDTH,SSD1306_LCDHEIGHT)/2; i>0; i-=5) for (i = MIN(SSD1306_LCDWIDTH, SSD1306_LCDHEIGHT) / 2; i > 0; i -= 5) {
{ fillTriangle(
fillTriangle(SSD1306_LCDWIDTH/2, SSD1306_LCDHEIGHT/2-i, SSD1306_LCDWIDTH / 2, SSD1306_LCDHEIGHT / 2 - i,
SSD1306_LCDWIDTH / 2 - i, SSD1306_LCDHEIGHT / 2 + i, SSD1306_LCDWIDTH / 2 - i, SSD1306_LCDHEIGHT / 2 + i,
SSD1306_LCDWIDTH / 2 + i, SSD1306_LCDHEIGHT / 2 + i, WHITE); SSD1306_LCDWIDTH / 2 + i, SSD1306_LCDHEIGHT / 2 + i, WHITE);
if (color == WHITE) if (color == WHITE)
@ -384,28 +238,23 @@ void testfilltriangle()
} }
/* Display a bunch of characters and emoticons */ /* Display a bunch of characters and emoticons */
void testdrawchar() void testdrawchar() {
{
unsigned char i = 0; unsigned char i = 0;
setTextSize(1); setTextSize(1);
setTextColor(WHITE); setTextColor(WHITE);
setCursor(0, 0); setCursor(0, 0);
for (i=0; i < 168; i++) for (i = 0; i < 168; i++) {
{ if (i == '\n') continue;
if (i == '\n')
continue;
oled_write(i); oled_write(i);
if ((i > 0) && (i % 21 == 0)) if ((i > 0) && (i % 21 == 0)) println();
println();
} }
Display(); Display();
usleep(1000); usleep(1000);
} }
/* Display "scroll" and scroll around */ /* Display "scroll" and scroll around */
void testscrolltext(char* str) void testscrolltext(char *str) {
{
setTextSize(2); setTextSize(2);
setTextColor(WHITE); setTextColor(WHITE);
setCursor(10, 8); setCursor(10, 8);
@ -428,11 +277,8 @@ void testscrolltext(char* str)
stopscroll(); stopscroll();
} }
/* Display Texts */ /* Display Texts */
void display_texts() void display_texts() {
{
setTextSize(1); setTextSize(1);
setTextColor(WHITE); setTextColor(WHITE);
setCursor(10, 0); setCursor(10, 0);
@ -448,21 +294,10 @@ void display_texts()
} }
/* Display miniature bitmap */ /* Display miniature bitmap */
void display_bitmap() void display_bitmap() { drawBitmap(30, 16, logo16_glcd_bmp, 16, 16, 1); }
{
drawBitmap(30, 16, logo16_glcd_bmp, 16, 16, 1);
}
/* Display miniature bitmap */
void display_bitmap_uploaddownload()
{
drawBitmap(10, 18, jiantou_xiangshang_data, 16, 16, 1);
drawBitmap(10, 35, jiantou_xiangshangd_data, 16, 16, 1);
}
/* Invert Display and Normalize it */ /* Invert Display and Normalize it */
void display_invert_normal() void display_invert_normal() {
{
invertDisplay(SSD1306_INVERT_DISPLAY); invertDisplay(SSD1306_INVERT_DISPLAY);
usleep(1000000); usleep(1000000);
invertDisplay(SSD1306_NORMALIZE_DISPLAY); invertDisplay(SSD1306_NORMALIZE_DISPLAY);
@ -470,13 +305,12 @@ void display_invert_normal()
} }
/* Draw a bitmap and 'animate' movement */ /* Draw a bitmap and 'animate' movement */
void testdrawbitmap(const unsigned char *bitmap, unsigned char w, unsigned char h) void testdrawbitmap(const unsigned char *bitmap, unsigned char w,
{ unsigned char h) {
unsigned char icons[NUMFLAKES][3], f = 0; unsigned char icons[NUMFLAKES][3], f = 0;
// initialize // initialize
for (f=0; f< NUMFLAKES; f++) for (f = 0; f < NUMFLAKES; f++) {
{
icons[f][XPOS] = rand() % SSD1306_LCDWIDTH; icons[f][XPOS] = rand() % SSD1306_LCDWIDTH;
icons[f][YPOS] = 0; icons[f][YPOS] = 0;
icons[f][DELTAY] = (rand() % 5) + 1; icons[f][DELTAY] = (rand() % 5) + 1;
@ -490,27 +324,25 @@ void testdrawbitmap(const unsigned char *bitmap, unsigned char w, unsigned char
// printNumber_UC(icons[f][DELTAY], DEC); // printNumber_UC(icons[f][DELTAY], DEC);
} }
while (flag != 5) while (flag != 5) {
{
// draw each icon // draw each icon
for (f=0; f< NUMFLAKES; f++) for (f = 0; f < NUMFLAKES; f++) {
{ drawBitmap(icons[f][XPOS], icons[f][YPOS], bitmap, w, h,
drawBitmap(icons[f][XPOS], icons[f][YPOS], bitmap, w, h, WHITE); WHITE);
} }
Display(); Display();
usleep(200000); usleep(200000);
// then erase it + move it // then erase it + move it
for (f=0; f< NUMFLAKES; f++) for (f = 0; f < NUMFLAKES; f++) {
{ drawBitmap(icons[f][XPOS], icons[f][YPOS], bitmap, w, h,
drawBitmap(icons[f][XPOS], icons[f][YPOS], bitmap, w, h, BLACK); BLACK);
// move it // move it
icons[f][YPOS] += icons[f][DELTAY]; icons[f][YPOS] += icons[f][DELTAY];
// if its gone, reinit // if its gone, reinit
if (icons[f][YPOS] > SSD1306_LCDHEIGHT) if (icons[f][YPOS] > SSD1306_LCDHEIGHT) {
{
icons[f][XPOS] = rand() % SSD1306_LCDWIDTH; icons[f][XPOS] = rand() % SSD1306_LCDWIDTH;
icons[f][YPOS] = 0; icons[f][YPOS] = 0;
icons[f][DELTAY] = (rand() % 5) + 1; icons[f][DELTAY] = (rand() % 5) + 1;
@ -520,8 +352,7 @@ void testdrawbitmap(const unsigned char *bitmap, unsigned char w, unsigned char
} }
/* Draw bitmap and animate */ /* Draw bitmap and animate */
void testdrawbitmap_eg() void testdrawbitmap_eg() {
{
setTextSize(1); setTextSize(1);
setTextColor(WHITE); setTextColor(WHITE);
setCursor(10, 0); setCursor(10, 0);
@ -529,8 +360,7 @@ void testdrawbitmap_eg()
} }
/* Intro */ /* Intro */
void deeplyembedded_credits() void deeplyembedded_credits() {
{
setTextSize(1); setTextSize(1);
setTextColor(WHITE); setTextColor(WHITE);
setCursor(1, 0); setCursor(1, 0);
@ -542,16 +372,13 @@ void deeplyembedded_credits()
print_strln("THANK YOU"); print_strln("THANK YOU");
} }
void testdate(int mode, int y) {
void testdate(int mode, int y)
{
time_t rawtime; time_t rawtime;
time_t curtime; time_t curtime;
uint8_t timebuff[TIMESIZE]; uint8_t timebuff[TIMESIZE];
curtime = time(NULL); curtime = time(NULL);
time(&rawtime); time(&rawtime);
switch (mode) switch (mode) {
{
case CENTER: case CENTER:
setTextSize(2); setTextSize(2);
strftime(timebuff, 80, "%H:%M", localtime(&rawtime)); strftime(timebuff, 80, "%H:%M", localtime(&rawtime));
@ -560,246 +387,141 @@ void testdate(int mode, int y)
break; break;
case FULL: case FULL:
setTextSize(1); setTextSize(1);
strftime(timebuff,80,"%Y-%m-%d %H:%M:%S",localtime(&rawtime)); strftime(timebuff, 80, "%Y-%m-%d %H:%M:%S",
localtime(&rawtime));
sprintf(buf, "%s", timebuff); sprintf(buf, "%s", timebuff);
setCursor(display_offset, y); setCursor(display_offset, y);
} }
print_strln(buf); print_strln(buf);
} }
char *get_ip_addr(char *ifname) {
int n;
struct ifreq ifr;
void testlanip(int mode, int y) n = socket(AF_INET, SOCK_DGRAM, 0);
{ // Type of address to retrieve - IPv4 IP address
ifr.ifr_addr.sa_family = AF_INET;
// Copy the interface name in the ifreq structure
strncpy(ifr.ifr_name, ifname, IFNAMSIZ - 1);
ioctl(n, SIOCGIFADDR, &ifr);
close(n);
return inet_ntoa(((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr);
}
void testip(int mode, int y, char *ifname) {
setTextSize(1); setTextSize(1);
if((fp=popen(IPPATH,"r"))!=NULL) switch (mode) {
{
fscanf(fp,"%s",content_buff);
fclose(fp);
//ipbuff[strlen(ipbuff)-1]=32;
switch(mode)
{
case CENTER: case CENTER:
setTextSize(1); setTextSize(1);
sprintf(buf,"%s",content_buff); sprintf(buf, "%s", get_ip_addr(ifname));
setCursor((127 - strlen(buf) * 6) / 2, y + 4); setCursor((127 - strlen(buf) * 6) / 2, y + 4);
break; break;
case FULL: case FULL:
setTextSize(1); setTextSize(1);
sprintf(buf,"IP:%s",content_buff); sprintf(buf, "IP:%s", get_ip_addr(ifname));
setCursor(display_offset, y); setCursor(display_offset, y);
} }
print_strln(buf); print_strln(buf);
} }
} void testcputemp(int mode, int y) {
if ((fp = fopen(TEMPPATH, "r")) != NULL) {
void testvpsip(int mode, int y) if (fgets(content_buff, TEMPSIZE, fp))
{ ;
if((fp=popen(VPSIPPATH,"r"))!=NULL)
{
while(fgets(content_buff, sizeof(content_buff),fp) != NULL) {
setTextSize(1);
sprintf(buf,"%s",content_buff);
setCursor(0, y);
print_strln(buf);
}
fclose(fp); fclose(fp);
} switch (mode) {
}
void testinfo1(int mode, int y)
{
int i = 0;
setTextSize(1);
if((fp=popen(INFO1PATH,"r"))!=NULL)
{
while(fgets(content_buff, sizeof(content_buff),fp) != NULL) {
sprintf(buf," %s",content_buff);
setCursor(0, y + i * 10);
print_strln(buf);
i++;
}
fclose(fp);
}
}
void testinfo2(int mode, int y)
{
int i = 0;
setTextSize(1);
if((fp=popen(INFO2PATH,"r"))!=NULL)
{
while(fgets(content_buff, sizeof(content_buff),fp) != NULL) {
sprintf(buf," %s",content_buff);
setCursor(0, y + i * 10);
print_strln(buf);
i++;
}
fclose(fp);
}
}
void testinfo3(int mode, int y)
{
int i = 0;
setTextSize(1);
if((fp=popen(INFO3PATH,"r"))!=NULL)
{
while(fgets(content_buff, sizeof(content_buff),fp) != NULL) {
sprintf(buf," %s",content_buff);
setCursor(0, y + i * 10);
print_strln(buf);
i++;
}
fclose(fp);
}
}
void testintfstatus(int mode, int y)
{
char intf[BUFMAX];
char status[BUFMAX];
char level[BUFMAX];
int i = 0;
setTextSize(1);
if((fp=popen(INTFPATH,"r"))!=NULL)
{
while (true) {
int ret = fscanf(fp,"%s %s %s",intf,status,level);
if (ret != EOF) {
setTextSize(1);
//sprintf(buf,"%s %s %s",intf,status,level);
sprintf(buf,"%s",intf);
setCursor(display_offset + i * 32, y);
print_strln(buf);
if (strcmp(level,"4/4") == 0) {
drawBitmap(display_offset + i * 32, y + 7, level4_data, 16, 10, 1);
} else if (strcmp(level,"3/4") == 0) {
drawBitmap(display_offset + i * 32, y + 7, level3_data, 16, 10, 1);
} else if (strcmp(level,"2/4") == 0) {
drawBitmap(display_offset + i * 32, y + 7, level2_data, 16, 10, 1);
} else if (strcmp(level,"1/4") == 0) {
drawBitmap(display_offset + i * 32, y + 7, level1_data, 16, 10, 1);
} else if (strcmp(level,"0/4") == 0) {
drawBitmap(display_offset + i * 32, y + 7, level0_data, 16, 10, 1);
} else if (strcmp(level,"none") == 0) {
drawBitmap(display_offset + i * 32, y + 7, level0_data, 16, 10, 1);
} else if (strcmp(level,"up") == 0) {
drawBitmap(display_offset + i * 32, y + 7, levelok_data, 16, 10, 1);
//} else {
// drawBitmap(display_offset + i * 32, y + 8, level2_data, 16, 10, 1);
}
//sprintf(buf,"%s",level);
//setCursor(display_offset + i * 32, y + 8);
//print_strln(buf);
i++;
} else {
break;
}
}
fclose(fp);
}
}
void testcputemp(int mode, int y)
{
if((fp=fopen(TEMPPATH,"r"))!=NULL)
{
fgets(content_buff,TEMPSIZE,fp);
fclose(fp);
switch (mode)
{
case CENTER: case CENTER:
setTextSize(2); setTextSize(2);
sprintf(buf, "%.2f",atoi(content_buff)/100.0); sprintf(buf, "%.2f",
setCursor((127-(strlen(buf)+2)*11)/2-4, y); atoi(content_buff) / 100.0);
setCursor(
(127 - (strlen(buf) + 2) * 11) / 2 - 4, y);
print_str(buf); print_str(buf);
oled_write(0); oled_write(0);
oled_write(67); oled_write(67);
drawCircle(getCursorX()-16, getCursorY()+3, 2, WHITE); drawCircle(getCursorX() - 16, getCursorY() + 3,
2, WHITE);
break; break;
case FULL: case FULL:
setTextSize(1); setTextSize(1);
sprintf(buf,"CPU TEMP:%.2f",atoi(content_buff)/100.0); sprintf(buf, "CPU TEMP:%.2f",
atoi(content_buff) / 100.0);
setCursor(display_offset, y); setCursor(display_offset, y);
print_str(buf); print_str(buf);
oled_write(0); oled_write(0);
oled_write(67); oled_write(67);
drawCircle(getCursorX()-8, getCursorY()+1, 1, WHITE); drawCircle(getCursorX() - 8, getCursorY() + 1,
1, WHITE);
}
}
} }
} void testcpufreq(int mode, int y) {
if ((fp = fopen(FREQPATH, "r")) != NULL) {
} if (fgets(content_buff, FREQSIZE, fp))
;
void testcpufreq(int mode, int y)
{
if((fp=popen(FREQPATH,"r")) != NULL)
{
fgets(content_buff,FREQSIZE,fp);
fclose(fp); fclose(fp);
switch(mode) switch (mode) {
{
case CENTER: case CENTER:
setTextSize(2); setTextSize(2);
sprintf(buf,"%4dMHz",atoi(content_buff)/1000); sprintf(buf, "%4dMHz",
atoi(content_buff) / 1000);
setCursor((127 - strlen(buf) * 11) / 2 - 4, y); setCursor((127 - strlen(buf) * 11) / 2 - 4, y);
break; break;
case FULL: case FULL:
setTextSize(1); setTextSize(1);
sprintf(buf,"CPU FREQ:%4dMHz",atoi(content_buff)/1000); sprintf(buf, "CPU FREQ:%4dMHz",
atoi(content_buff) / 1000);
setCursor(display_offset, y); setCursor(display_offset, y);
} }
print_strln(buf); print_strln(buf);
} }
} }
void testnetspeed(int mode, int y) void testnetspeed(int mode, int y, unsigned long int rx, unsigned long int tx) {
{ char tx_str[8], rx_str[8];
int rx,tx;
if((fp=popen(NETPATH,"r")) != NULL) if (tx < KB_BYTES) {
{ sprintf(tx_str, "%4dB ", (unsigned int)tx);
fscanf(fp,"%d %d", &rx, &tx); } else if (tx >= MB_BYTES) {
fclose(fp); sprintf(tx_str, "%4dM ", (unsigned int)tx / MB_BYTES);
rx = rx; } else {
tx = tx; sprintf(tx_str, "%4dK ", (unsigned int)tx / KB_BYTES);
switch(mode) }
{
if (rx < KB_BYTES) {
sprintf(rx_str, "%4dB ", (unsigned int)rx);
} else if (rx >= MB_BYTES) {
sprintf(rx_str, "%4dM ", (unsigned int)rx / MB_BYTES);
} else {
sprintf(rx_str, "%4dK ", (unsigned int)rx / KB_BYTES);
}
// printf("rxspeed: %s txspeed: %s\n", rx_str, tx_str);
switch (mode) {
case SPLIT: case SPLIT:
setTextSize(2); setTextSize(2);
if (tx < 1000) sprintf(buf, "%dB/s", tx); strcpy(buf, tx_str);
else if (tx > 1000000) sprintf(buf, "%dMb/s", tx/1000000); setCursor((127 - (strlen(buf) + 1) * 11) / 2, 0);
else sprintf(buf, "%dKb/s", tx/1000); oled_write(24);
setCursor(30,19);
//oled_write(24);
print_str(buf); print_str(buf);
if (rx < 1000) sprintf(buf, "%dB/s", rx); strcpy(buf, rx_str);
else if (rx > 1000000) sprintf(buf, "%dMb/s", rx/1000000); setCursor((127 - (strlen(buf) + 1) * 11) / 2, 16);
else sprintf(buf, "%dKb/s", rx/1000); oled_write(25);
setCursor(30,35);
//oled_write(25);
print_str(buf); print_str(buf);
break; break;
case MERGE: case MERGE:
setTextSize(1); setTextSize(1);
if (tx < 1000) sprintf(buf, "%03dB ", tx); strcpy(buf, tx_str);
else if (tx > 1000000) sprintf(buf, "%03dM", tx/1000000); setCursor((127 - (2 * strlen(buf) - 1) * 6) / 2 - 4,
else sprintf(buf, "%03dK ", tx/1000); y + 4);
setCursor((127-(2*strlen(buf)-1)*6)/2-4, y+4);
oled_write(24); oled_write(24);
print_str(buf); print_str(buf);
if (rx < 1000) sprintf(buf, "%03dB", rx); strcpy(buf, rx_str);
else if (rx > 1000000) sprintf(buf, "%03dM", rx/1000000);
else sprintf(buf, "%03dK", rx/1000);
oled_write(25); oled_write(25);
print_str(buf); print_str(buf);
break; break;
@ -807,37 +529,31 @@ void testnetspeed(int mode, int y)
setTextSize(1); setTextSize(1);
setCursor(display_offset, y); setCursor(display_offset, y);
oled_write(24); oled_write(24);
if (tx < 1000) sprintf(buf, "%03dB ", tx); strcpy(buf, tx_str);
else if (tx > 1000000) sprintf(buf, "%03dM", tx/1000000);
else sprintf(buf, "%03dK ", tx/1000);
print_str(buf); print_str(buf);
oled_write(25); oled_write(25);
if (rx < 1000) sprintf(buf, "%03dB", rx); strcpy(buf, rx_str);
else if (rx > 1000000) sprintf(buf, "%03dM", rx/1000000);
else sprintf(buf, "%03dK", rx/1000);
print_str(buf); print_str(buf);
} }
} }
}
void testcpu(int y) void testcpu(int y) {
{
// freq // freq
setTextSize(1); setTextSize(1);
setCursor(display_offset, y); setCursor(display_offset, y);
if((fp=popen(FREQPATH,"r")) != NULL) if ((fp = fopen(FREQPATH, "r")) != NULL) {
{ if (fgets(content_buff, FREQSIZE, fp))
fgets(content_buff,FREQSIZE,fp); ;
fclose(fp); fclose(fp);
sprintf(buf, "CPU:%4dMHz ", atoi(content_buff) / 1000); sprintf(buf, "CPU:%4dMHz ", atoi(content_buff) / 1000);
print_str(buf); print_str(buf);
} }
// temp // temp
if((fp=fopen(TEMPPATH,"r"))!=NULL) if ((fp = fopen(TEMPPATH, "r")) != NULL) {
{ if (fgets(content_buff, TEMPSIZE, fp))
fgets(content_buff,TEMPSIZE,fp); ;
fclose(fp); fclose(fp);
sprintf(buf, "%.2f", atoi(content_buff) / 100.0); sprintf(buf, "%.2f", atoi(content_buff) / 100.0);
print_str(buf); print_str(buf);
@ -847,14 +563,12 @@ void testcpu(int y)
} }
} }
void testprintinfo() {
void testprintinfo()
{
setTextSize(1); setTextSize(1);
setTextColor(WHITE); setTextColor(WHITE);
setCursor(0, 0); setCursor(0, 0);
//DATE
// date
time_t rawtime; time_t rawtime;
time_t curtime; time_t curtime;
uint8_t timebuff[TIMESIZE]; uint8_t timebuff[TIMESIZE];
@ -865,34 +579,24 @@ void testprintinfo()
print_strln(buf); print_strln(buf);
// br-lan ip // br-lan ip
if((fp=popen(IPPATH,"r"))!=NULL) sprintf(buf, "IP:%s", get_ip_addr("br-lan"));
{
fscanf(fp,"%s",content_buff);
fclose(fp);
//ipbuff[strlen(ipbuff)-1]=32;
sprintf(buf,"IP:%s",content_buff);
print_strln(buf); print_strln(buf);
}
// CPU temp // CPU temp
if((fp=popen(FREQPATH,"r")) != NULL) if ((fp = fopen(FREQPATH, "r")) != NULL) {
{ if (fgets(content_buff, FREQSIZE, fp))
fgets(content_buff,FREQSIZE,fp); ;
fclose(fp); fclose(fp);
sprintf(buf, "CPU freq:%d MHz ", atoi(content_buff) / 1000); sprintf(buf, "CPU freq:%d MHz ", atoi(content_buff) / 1000);
print_strln(buf); print_strln(buf);
} }
// cpu freq // cpu freq
if((fp=fopen(TEMPPATH,"r"))!=NULL) if ((fp = fopen(TEMPPATH, "r")) != NULL) {
{ if (fgets(content_buff, TEMPSIZE, fp))
fgets(content_buff,TEMPSIZE,fp); ;
fclose(fp); fclose(fp);
sprintf(buf, "CPU temp:%.2f C", atoi(content_buff) / 100.0); sprintf(buf, "CPU temp:%.2f C", atoi(content_buff) / 100.0);
print_strln(buf); print_strln(buf);
} }
} }

18
luci-app-ouad/src/Example_Code/example_app.h Executable file → Normal file
View file

@ -2,6 +2,9 @@
#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);

View 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
...

84
luci-app-ouad/src/I2C_Library/I2C.c Executable file → Normal file
View 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 <linux/i2c-dev.h>
#include <stdio.h>
#include <sys/ioctl.h> #include <sys/ioctl.h>
#include <unistd.h> #include <unistd.h>
#include <linux/i2c-dev.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,8 +105,7 @@ 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))
@ -121,7 +114,6 @@ int i2c_write(int fd, unsigned char data)
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)
perror("I2C: End of FILE |");
return (ret); 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)
perror("I2C: End of FILE |");
return (ret); 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)
perror("I2C: End of FILE |");
return (ret); 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,8 +184,7 @@ 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))
@ -215,7 +193,6 @@ int i2c_multiple_writes(int fd, int num, unsigned char *Ptr_buff)
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,8 +203,8 @@ 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;
@ -239,7 +216,6 @@ int i2c_write_register(int fd, unsigned char reg_addr_or_cntrl, unsigned char va
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;
} }

9
luci-app-ouad/src/I2C_Library/I2C.h Executable file → Normal file
View file

@ -56,12 +56,15 @@ 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);

0
luci-app-ouad/src/LICENSE Executable file → Normal file
View file

21
luci-app-ouad/src/Makefile Executable file → Normal file
View 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
View file

View 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
...

1577
luci-app-ouad/src/SSD1306_OLED_Library/SSD1306_OLED.c Executable file → Normal file

File diff suppressed because it is too large Load diff

42
luci-app-ouad/src/SSD1306_OLED_Library/SSD1306_OLED.h Executable file → Normal file
View file

@ -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
/*--------------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------------*/
@ -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
View file