1
0
Fork 0
mirror of https://github.com/Ysurac/openmptcprouter-feeds.git synced 2025-03-09 15:40:03 +00:00

coverage test

This commit is contained in:
suyuan 2023-10-22 14:53:12 +08:00
parent 7b3188c7ce
commit f70701309a
28 changed files with 3722 additions and 3054 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
LUCI_Title:=LuCI support for ssd1306 0.91\' 138x32 display
LUCI_DEPENDS:=+i2c-tools +coreutils-nohup +libuci
LUCI_PKGARCH:=all
LUCI_DEPENDS:=+libconfig
LUCI_PKGARCH:=$(if $(realpath src/Makefile),,all)
PKG_VERSION:=20230927
PKG_RELEASE:=1
PKG_LICENSE:=GPLv3
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

View file

@ -1,80 +0,0 @@
# luci-app-oled
This is the LuCI app written for openwrt (**tested ~~only~~ on NanoPi R2S**) which supports ssd 1306 0.91' oled display.
**Raspberry Pi CM4**
This has been tested on Raspberry Pi CM4 as described in issue [#10](https://github.com/NateLol/luci-app-oled/issues/10#issuecomment-922245476).
You can find what revisions you need to make to have it work on your device.
Enjoy!
## Features|功能
---
### Dispaly Info|显示信息
**0. Enable|开启**
开启oled显示。
**1. Autoswitch|定时开关**
由于夜间oled的显示屏太亮并且也几乎不会看它所以应邀提供定时开关的功能选中autoswitch之后可以设置**显示**的起始和结束时间。
**2. Time|时间**
显示时间。
**3. IP|IP地址**
显示LAN口的IP地址记得LAN口不可以去除**桥接**选项,否则失效。由于使用的是`br-lan`,因为不同固件可能会交换`eth0``eth1`
**4. CPU Temp|CPU温度**
显示CPU温度。
**5. CPU Freq|CPU频率**
显示实时CPU频率
**6. Network Speed|网速**
提供不同接口的选择,`eth0``eth1`,个人可以按需修改。网速单位基准为字节(Byte)而不是一般的位bit[MB/s, KB/s, B/s]这样显示的数字能够比较小,不至于过长。
**7. Display Interval|显示间隔**
为了延缓oled的光衰提供屏保服务每隔设定的时间运行一次屏保程序。
---
### Screensavers|屏保
屏保提供不同的选择,默认推荐的是`Scroll Text|文字滚动`,其他的选择自行探索。
## Q&A
Q0. 如何使用该程序?|在那里找到luci界面
A0. 该程序安装位置在luci界面的`services|服务`下的`OLED`,点击即可找到。
---
Q1. 是否会支持其他oled屏幕例如同系列的0.96'的?
A1. 由于开发者身边并没有相应的屏幕去调试所以是暂时不考虑吧。如果你想贡献代码非常欢迎请开PR。
---
Q2. 为什么我的IP地址显示错误
A2. 很大原因是你修改了LAN接口的属性例如去除了该接口的**桥接**属性。
---
Q3. 为什么我的oled不显示
A3. 很有可能是您的固件内核驱动不完整,该程序的运行需要在内核驱动中加上**kmod-i2c-xxx**见issue [#10](https://github.com/NateLol/luci-app-oled/issues/10)。
---
如果你在使用过程中还遇到问题请开issue。

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
return
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", "status"}, call("act_status"))
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 = s:taboption("info", Flag, "lanip", translate("IP"), translate("LAN IP address"))
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.default=0
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

51
luci-app-ouad/root/etc/config/oled Executable file → Normal file
View file

@ -1,24 +1,29 @@
config oled
option enable '1'
option drawline '0'
option drawrect '0'
option fillrect '0'
option drawcircle '0'
option drawroundrect '0'
option fillroundrect '0'
option drawtriangle '0'
option filltriangle '0'
option displaybitmap '0'
option displayinvertnormal '0'
option drawbitmapeg '0'
option date '1'
option netspeed '1'
option lanip '1'
option cpufreq '1'
option cputemp '1'
option time '60'
option autoswitch '0'
option rotate '0'
option scroll '0'
option netsource 'br-lan'
option path '/dev/i2c-0'
option showmenu '1'
option enable '1'
option drawline '0'
option drawrect '0'
option fillrect '0'
option drawcircle '0'
option drawroundrect '0'
option fillroundrect '0'
option drawtriangle '0'
option filltriangle '0'
option displaybitmap '0'
option displayinvertnormal '0'
option drawbitmapeg '0'
option date '1'
option netspeed '1'
option lanip '1'
option ipifname 'br-lan'
option cpufreq '1'
option cputemp '1'
option time '60'
option from '0'
option to '1440'
option autoswitch '0'
option rotate '0'
option scroll '0'
option text 'Openmptcprouter'
option netsource 'eth0'
option path '/dev/i2c-0'

View file

@ -1,144 +1,118 @@
#!/bin/sh /etc/rc.common
START=88
START=88
STOP=11
USE_PROCD=1
PROG=/usr/bin/oled
stop() {
kill -2 $(pgrep /usr/bin/oled)
kill -9 $(pgrep -f /usr/sbin/netspeed)
echo "oled exit..."
get_section() {
eval "export -n ${2}=\"$1\""
return 1
}
start() {
enabled=$(uci get oled.@oled[0].enable)
if [ $enabled -eq 0 ]; then
exit 0
start_service() {
local mainsection
config_load oled
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
autoswitch=$(uci get oled.@oled[0].autoswitch)
from=$(uci get oled.@oled[0].from)
to=$(uci get oled.@oled[0].to)
procd_open_instance
procd_set_param command ${PROG}
procd_append_param command --needInit
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
local param
# default /dev/i2c-0
config_get param "$section" path
[ "$param" != "" ] && procd_append_param command --i2cDevPath="$param"
#crontab daemon
if ! grep "/etc/init.d/oled \+restart" /etc/crontabs/root >/dev/null 2>&1; then
echo "*/5 * * * * /etc/init.d/oled restart >/dev/null 2>&1" >> /etc/crontabs/root
fi
# from begin_minitues to end_minitues
# default 0 - 1440
config_get param "$section" from
[ "$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)
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)
config_get param "$section" date
[ "$param" == "1" ] && procd_append_param command --displayDate
if [ ${netspeed} -eq 1 ] && [ -z "$(pgrep -f netspeed)" ]; then
nohup /usr/sbin/netspeed ${netsource} >/dev/null 2>&1 &
config_get param "$section" lanip
[ "$param" == "1" ] && procd_append_param command --displayIp
config_get param "$section" ipifname
if [ "$param" != "" ];then
procd_append_param command --ipIfName="$param"
else
[ -n "$(pgrep -f /usr/sbin/netspeed)" ] && kill -9 $(pgrep -f /usr/sbin/netspeed) 2>&1 >/dev/null
rm -f /tmp/netspeed
procd_append_param command --ipIfName="br-lan"
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 &
nohup ${PROG} eth0 /dev/i2c-0 > /dev/null 2>&1 &
config_get param "$section" cputemp
[ "$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 --drawRoundRect
config_get param "$section" fillroundrect
[ "$param" == "1" ] && procd_append_param command --fillRoundRect
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
# oled收到 SIGTERM 信号后,会跑完最后一个显示效果再退出,因此需要一定的等待时间
# 否则进程被 SIGKILL 强杀,会导致显示屏不能清空。
procd_set_param term_timeout 30 # wait before sending SIGKILL
procd_close_instance
}
restart() {
enabled=$(uci get oled.@oled[0].enable)
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
service_triggers() {
procd_add_reload_trigger "oled"
}

18
luci-app-ouad/root/etc/uci-defaults/oled Executable file → Normal file
View file

@ -1,16 +1,23 @@
#!/bin/sh
uci_write_config() {
uci -q set oled.@oled[0].path="$1"
uci -q set oled.@oled[0].rotate="$2"
uci -q commit oled
[[ `uci -q get oled.@oled[0].showmenu` -eq 1 ]] && return
uci -q batch <<-EOF >/dev/null
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
case "$(board_name)" in
hinlink,opc-h69k)
uci_write_config '/dev/i2c-5' 1
"hinlink,opc-h69k"|"hlink,opc-h69k"|"hlink,h69k")
uci_write_config '/dev/i2c-5' 1 1 eth0
;;
esac
@ -21,5 +28,6 @@ uci -q batch <<-EOF >/dev/null
commit ucitrack
EOF
sed -e "/\/etc\/init\.d\/oled/d" -i /etc/crontabs/root && /etc/init.d/cron reload
rm -rf /tmp/luci-*
exit 0

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

1030
luci-app-ouad/src/Example_Code/Main.c Executable file → Normal file

File diff suppressed because it is too large Load diff

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

File diff suppressed because it is too large Load diff

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

@ -1,7 +1,10 @@
#define CENTER 0 //single item display
#define SPLIT 1 //two items
#define CENTER 0 // single item display
#define SPLIT 1 // two items
#define MERGE 2
#define FULL 3
#define KB_BYTES (1024)
#define MB_BYTES (1024 * 1024)
#define GB_BYTES (1024 * 1024 * 1024)
void testdrawline();
void testdrawrect();
@ -16,20 +19,15 @@ void testscrolltext(char *str);
void display_texts();
void display_bitmap();
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 deeplyembedded_credits();
void testprintinfo();
void testinfo1();
void testinfo2();
void testdate(int mode, int y);
void testlanip(int mode, int y);
void testvpsip(int mode, int y);
void testip(int mode, int y, char *ifname);
void testcpufreq(int mode, int y);
void testcputemp(int mode, int y);
void testnetspeed(int mode, int y);
void testintfstatus(int mode, int y);
void testnetspeed(int mode, int y, unsigned long int rx, unsigned long int tx);
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
...

124
luci-app-ouad/src/I2C_Library/I2C.c Executable file → Normal file
View file

@ -25,17 +25,18 @@ SOFTWARE.
*
* Created on : September 19, 2017
* 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.
* Website : www.deeplyembedded.org
*/
/*Libs Includes*/
#include<stdio.h>
#include<fcntl.h>
#include<sys/ioctl.h>
#include <unistd.h>
#include <fcntl.h>
#include <linux/i2c-dev.h>
#include <stdio.h>
#include <sys/ioctl.h>
#include <unistd.h>
// heuristic to guess what version of i2c-dev.h we have:
// the one installed with `apt-get install libi2c-dev`
// would conflict with linux/i2c.h, while the stock
@ -52,7 +53,6 @@ typedef char i2c_char_t;
/* Header Files */
#include "I2C.h"
/* Exposed objects for i2c-x */
I2C_DeviceT I2C_DEV_2;
@ -63,30 +63,26 @@ I2C_DeviceT I2C_DEV_2;
* Params @i2c_dev_path: Path to the I2C device
* @fd: Variable to store the file handler
****************************************************************/
int Open_device(char *i2c_dev_path, int *fd)
{
if((*fd = open(i2c_dev_path, O_RDWR))<0)
int Open_device(char *i2c_dev_path, int *fd) {
if ((*fd = open(i2c_dev_path, O_RDWR)) < 0)
return -1;
else
return 0;
}
/****************************************************************
* Function Name : Close_device
* Description : Closes the I2C device in use
* Returns : 0 on success, -1 on failure
* Params : @fd: file descriptor
****************************************************************/
int Close_device(int fd)
{
if(close(fd) == -1)
int Close_device(int fd) {
if (close(fd) == -1)
return -1;
else
return 0;
}
/****************************************************************
* Function Name : Set_slave_addr
* Description : Connect to the Slave device
@ -95,15 +91,13 @@ int Close_device(int fd)
* @slave_addr: Address of the slave device to
* talk to.
****************************************************************/
int Set_slave_addr(int fd, unsigned char slave_addr)
{
if(ioctl(fd, I2C_SLAVE, slave_addr) < 0)
int Set_slave_addr(int fd, unsigned char slave_addr) {
if (ioctl(fd, I2C_SLAVE, slave_addr) < 0)
return -1;
else
return 0;
}
/****************************************************************
* Function Name : i2c_write
* Description : Write a byte on SDA
@ -111,17 +105,15 @@ int Set_slave_addr(int fd, unsigned char slave_addr)
* Params @fd: File descriptor
* @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;
ret = write(fd, &data, I2C_ONE_BYTE);
if((ret == -1) || (ret != 1))
if ((ret == -1) || (ret != 1))
return -1;
else
return(ret);
return (ret);
}
/****************************************************************
* Function Name : i2c_read
* 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
* 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;
ret = read(fd, &read_data, I2C_ONE_BYTE);
if(ret == -1)
perror("I2C: Failed to read |");
if(ret == 0)
perror("I2C: End of FILE |");
return(ret);
if (ret == -1) perror("I2C: Failed to read |");
if (ret == 0) perror("I2C: End of FILE |");
return (ret);
}
/****************************************************************
* Function Name : i2c_read_register
* 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
* 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;
if(i2c_write(fd, read_addr) == -1)
{
if (i2c_write(fd, read_addr) == -1) {
perror("I2C: Failed to write |");
return -1;
}
ret = read(fd, &read_data, I2C_ONE_BYTE);
if(ret == -1)
perror("I2C: Failed to read |");
if(ret == 0)
perror("I2C: End of FILE |");
return(ret);
if (ret == -1) perror("I2C: Failed to read |");
if (ret == 0) perror("I2C: End of FILE |");
return (ret);
}
/****************************************************************
* Function Name : i2c_read_registers
* 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
****************************************************************/
int i2c_read_registers(int fd, int num, unsigned char starting_addr,
unsigned char *buff_Ptr)
{
unsigned char *buff_Ptr) {
int ret = 0;
if(i2c_write(fd, starting_addr) == -1)
{
if (i2c_write(fd, starting_addr) == -1) {
perror("I2C: Failed to write |");
return -1;
}
ret = read(fd, buff_Ptr, num);
if(ret == -1)
perror("I2C: Failed to read |");
if(ret == 0)
perror("I2C: End of FILE |");
return(ret);
if (ret == -1) perror("I2C: Failed to read |");
if (ret == 0) perror("I2C: End of FILE |");
return (ret);
}
/****************************************************************
* Function Name : i2c_multiple_writes
* Description : Write multiple bytes on SDA
@ -205,17 +184,15 @@ int i2c_read_registers(int fd, int num, unsigned char starting_addr,
* @Ptr_buff: Pointer to the buffer containing the
* 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;
ret = write(fd, Ptr_buff, num);
if((ret == -1) || (ret != num))
if ((ret == -1) || (ret != num))
return -1;
else
return(ret);
return (ret);
}
/****************************************************************
* Function Name : i2c_write_register
* Description : Write a control byte or byte to a register
@ -226,20 +203,19 @@ int i2c_multiple_writes(int fd, int num, unsigned char *Ptr_buff)
* @val: Command or value to be written in the
* 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];
int ret = 0;
buff[0] = reg_addr_or_cntrl;
buff[1] = val;
ret = write(fd, buff, I2C_TWO_BYTES);
if((ret == -1) || (ret != I2C_TWO_BYTES))
if ((ret == -1) || (ret != I2C_TWO_BYTES))
return -1;
else
return(ret);
return (ret);
}
/****************************************************************
* Function Name : config_i2c_struct
* 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
* @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->fd_i2c = 0;
i2c_dev->i2c_slave_addr = slave_addr;
}
/****************************************************************
* Function Name : init_i2c_dev
* Description : Connect the i2c bus to the slave device
@ -263,19 +238,26 @@ void config_i2c_struct(char *i2c_dev_path, unsigned char slave_addr, I2C_DeviceP
* Params @i2c_path: the path to the device
* @slave_addr: Slave device address
****************************************************************/
int init_i2c_dev(const char* i2c_path, unsigned char slave_address)
{
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)
{
int init_i2c_dev(const char *i2c_path, unsigned char slave_address) {
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) {
perror("I2C: Failed to open device |");
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 |");
return -1;
}
return 0;
}
/****************************************************************
* Function Name : Close_I2C
* Description : Close I2C Connect
* Returns : 0 on success, -1 on failure
* Params : non
****************************************************************/
extern int Close_I2C() {
return Close_device(I2C_DEV_2.fd_i2c);
}

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

@ -26,29 +26,29 @@ SOFTWARE.
* Created on : Sep 4, 2017
* Author : Vinay Divakar
* Website : www.deeplyembedded.org
*/
*/
#ifndef I2C_H_
#define I2C_H_
#include<stdint.h>
#include <stdint.h>
/* No. of bytes per transaction */
#define I2C_ONE_BYTE 1
#define I2C_TWO_BYTES 2
#define I2C_THREE_BYTES 3
#define I2C_ONE_BYTE 1
#define I2C_TWO_BYTES 2
#define I2C_THREE_BYTES 3
/*Definitions specific to i2c-x */
#define I2C_DEV0_PATH "/dev/i2c-0"
#define I2C_DEV1_PATH "/dev/i2c-1"
#define I2C_DEV2_PATH "/dev/i2c-2"
#define I2C_DEV0_PATH "/dev/i2c-0"
#define I2C_DEV1_PATH "/dev/i2c-1"
#define I2C_DEV2_PATH "/dev/i2c-2"
/*I2C device configuration structure*/
typedef struct{
char* i2c_dev_path;
typedef struct {
char *i2c_dev_path;
int fd_i2c;
unsigned char i2c_slave_addr;
}I2C_DeviceT, *I2C_DevicePtr;
} I2C_DeviceT, *I2C_DevicePtr;
/* Exposed Generic I2C Functions */
extern int Open_device(char *i2c_dev_path, int *fd);
@ -56,14 +56,20 @@ extern int Close_device(int fd);
extern int Set_slave_addr(int fd, unsigned char slave_addr);
extern int i2c_write(int fd, unsigned char 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,
unsigned char *buff_Ptr);
extern void config_i2c_struct(char *i2c_dev_path, unsigned char slave_addr, I2C_DevicePtr i2c_dev);
unsigned char *buff_Ptr);
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_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 */
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);
/* Close I2C connect */
extern int Close_I2C();
#endif /* I2C_H_ */

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
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)
CPPFLAGS := -I SSD1306_OLED_Library -I I2C_Library
CFLAGS := -g
ifndef CFLAGS
CFLAGS := -O2
endif
LDFLAGS := -lpthread -lconfig
oled: $(OBJS)
$(CC) $^ -o $@
$(CC) $^ -o $@ $(LDFLAGS)
ssd1306: $(OBJS)
$(CC) $^ -o $@ $(LDFLAGS) --static
strip $@
clean:
rm -rf oled $(OBJS)
rm -rf oled ssd1306 $(OBJS)
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
...

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

File diff suppressed because it is too large Load diff

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

@ -35,33 +35,33 @@ SOFTWARE.
#include <stdbool.h>
/* Find Min and Max - MACROS */
#define MIN(a,b) (((a)<(b))?(a):(b))
#define MAX(a,b) (((a)>(b))?(a):(b))
#define MIN(a, b) (((a) < (b)) ? (a) : (b))
#define MAX(a, b) (((a) > (b)) ? (a) : (b))
/* I2C Address of SSD1306 */
#define SSD1306_OLED_ADDR 0x3C
#define DISPLAY_BUFF_SIZE (SSD1306_LCDWIDTH*SSD1306_LCDHEIGHT/8)
#define SSD1306_OLED_ADDR 0x3C
#define DISPLAY_BUFF_SIZE (SSD1306_LCDWIDTH * SSD1306_LCDHEIGHT / 8)
/* COLOR MACROS */
#define WHITE 1
#define BLACK 0
#define INVERSE 2
#define WHITE 1
#define BLACK 0
#define INVERSE 2
/* Number output format */
#define DEC 10
#define HEX 16
#define OCT 8
#define BIN 2
#define DEFAULT 0
#define DEC 10
#define HEX 16
#define OCT 8
#define BIN 2
#define DEFAULT 0
/*D/C# bit is '0' indicating that following
* byte is a command. '1' is for data
*/
#define SSD1306_CNTRL_CMD 0x00
#define SSD1306_CNTRL_DATA 0x40
#define SSD1306_CNTRL_CMD 0x00
#define SSD1306_CNTRL_DATA 0x40
/*-----------------------Enable the WxL of the Display ---------------------------*/
/*-----------------------Enable the WxL of the Display
* ---------------------------*/
#define SSD1306_128_64
//#define SSD1306_128_32
//#define SSD1306_96_16
@ -69,85 +69,87 @@ SOFTWARE.
/* LCD HxW i.e. 64x128 || WxL i.e. 128x64 */
#if defined SSD1306_128_64
#define SSD1306_LCDWIDTH 128
#define SSD1306_LCDHEIGHT 64
#define SSD1306_LCDWIDTH 128
#define SSD1306_LCDHEIGHT 64
#endif
#if defined SSD1306_128_32
#define SSD1306_LCDWIDTH 128
#define SSD1306_LCDHEIGHT 32
#define SSD1306_LCDWIDTH 128
#define SSD1306_LCDHEIGHT 32
#endif
#if defined SSD1306_96_16
#define SSD1306_LCDWIDTH 96
#define SSD1306_LCDHEIGHT 16
#define SSD1306_LCDWIDTH 96
#define SSD1306_LCDHEIGHT 16
#endif
/* SSD1306 Commands */
#define SSD1306_DISPLAY_OFF 0xAE
#define SSD1306_SET_DISP_CLK 0xD5
#define SSD1306_SET_MULTIPLEX 0xA8
#define SSD1306_SET_DISP_OFFSET 0xD3
#define SSD1306_SET_DISP_START_LINE 0x40
#define SSD1306_CONFIG_CHARGE_PUMP 0x8D
#define SSD1306_SET_MEM_ADDR_MODE 0x20
#define SSD1306_SEG_REMAP (0xA0 | 0x01)
#define SSD1306_SEG_REMAP1 0xA0
#define SSD1306_SET_COMSCANDEC 0xC8
#define SSD1306_SET_COMSCANDEC1 0xC0
#define SSD1306_SET_COMPINS 0xDA
#define SSD1306_SET_CONTRAST 0x81
#define SSD1306_SET_PRECHARGE 0xD9
#define SSD1306_SET_VCOMDETECT 0xDB
#define SSD1306_DISPLAYALLON_RESUME 0xA4
#define SSD1306_NORMAL_DISPLAY 0xA6
#define SSD1306_DISPLAYON 0xAF
#define SSD1306_SET_COL_ADDR 0x21
#define SSD1306_PAGEADDR 0x22
#define SSD1306_INVERT_DISPLAY 0x01
#define SSD1306_NORMALIZE_DISPLAY 0x00
#define SSD1306_DISPLAY_OFF 0xAE
#define SSD1306_SET_DISP_CLK 0xD5
#define SSD1306_SET_MULTIPLEX 0xA8
#define SSD1306_SET_DISP_OFFSET 0xD3
#define SSD1306_SET_DISP_START_LINE 0x40
#define SSD1306_CONFIG_CHARGE_PUMP 0x8D
#define SSD1306_SET_MEM_ADDR_MODE 0x20
#define SSD1306_SEG_REMAP (0xA0 | 0x01)
#define SSD1306_SEG_REMAP1 0xA0
#define SSD1306_SET_COMSCANDEC 0xC8
#define SSD1306_SET_COMSCANDEC1 0xC0
#define SSD1306_SET_COMPINS 0xDA
#define SSD1306_SET_CONTRAST 0x81
#define SSD1306_SET_PRECHARGE 0xD9
#define SSD1306_SET_VCOMDETECT 0xDB
#define SSD1306_DISPLAYALLON_RESUME 0xA4
#define SSD1306_NORMAL_DISPLAY 0xA6
#define SSD1306_DISPLAYON 0xAF
#define SSD1306_SET_COL_ADDR 0x21
#define SSD1306_PAGEADDR 0x22
#define SSD1306_INVERT_DISPLAY 0x01
#define SSD1306_NORMALIZE_DISPLAY 0x00
/* SDD1306 Scroll Commands */
#define SSD1306_SET_VERTICAL_SCROLL_AREA 0xA3
#define SSD1306_ACTIVATE_SCROLL 0x2F
#define SSD1306_DEACTIVATE_SCROLL 0x2E
#define SSD1306_RIGHT_HORIZONTAL_SCROLL 0x26
#define SSD1306_LEFT_HORIZONTAL_SCROLL 0x27
#define SSD1306_VERTICAL_AND_RIGHT_HORIZONTAL_SCROLL 0x29
#define SSD1306_VERTICAL_AND_LEFT_HORIZONTAL_SCROLL 0x2A
#define SSD1306_INVERTDISPLAY 0xA7
#define SSD1306_SET_VERTICAL_SCROLL_AREA 0xA3
#define SSD1306_ACTIVATE_SCROLL 0x2F
#define SSD1306_DEACTIVATE_SCROLL 0x2E
#define SSD1306_RIGHT_HORIZONTAL_SCROLL 0x26
#define SSD1306_LEFT_HORIZONTAL_SCROLL 0x27
#define SSD1306_VERTICAL_AND_RIGHT_HORIZONTAL_SCROLL 0x29
#define SSD1306_VERTICAL_AND_LEFT_HORIZONTAL_SCROLL 0x2A
#define SSD1306_INVERTDISPLAY 0xA7
/* SSD1306 Configuration Commands */
#define SSD1306_DISPCLK_DIV 0x80
#define SSD1306_DISPCLK_DIV 0x80
#if defined SSD1306_128_64
#define SSD1306_MULT_64 0x3F
#define SSD1306_MULT_64 0x3F
#endif
#if defined SSD1306_128_32
#define SSD1306_MULT_64 0x1F
#define SSD1306_MULT_64 0x1F
#endif
#define SSD1306_MULT_64 0x1F
#define SSD1306_DISP_OFFSET_VAL 0x00
#define SSD1306_COL_START_ADDR 0x00 //Reset to = 0
#define SSD1306_COL_END_ADDR (SSD1306_LCDWIDTH - 1) //Reset to = 127
#define SSD1306_PG_START_ADDR 0x00
#define SSD1306_PG_END_ADDR 7
#define SSD1306_CHARGE_PUMP_EN 0x14
#define SSD1306_MULT_64 0x1F
#define SSD1306_DISP_OFFSET_VAL 0x00
#define SSD1306_COL_START_ADDR 0x00 // Reset to = 0
#define SSD1306_COL_END_ADDR (SSD1306_LCDWIDTH - 1) // Reset to = 127
#define SSD1306_PG_START_ADDR 0x00
#define SSD1306_PG_END_ADDR 7
#define SSD1306_CHARGE_PUMP_EN 0x14
#if defined SSD1306_128_64
#define SSD1306_CONFIG_COM_PINS 0x12
#define SSD1306_CONFIG_COM_PINS 0x12
#endif
#if defined SSD1306_128_32
#define SSD1306_CONFIG_COM_PINS 0x02
#define SSD1306_CONFIG_COM_PINS 0x02
#endif
#define SSD1306_CONTRAST_VAL 0xCF //207
#define SSD1306_PRECHARGE_VAL 0xF1
#define SSD1306_VCOMH_VAL 0x40
#define SSD1306_MULT_DAT (SSD1306_LCDHEIGHT - 1)
#define SSD1306_HOR_MM 0x00
#define SSD1306_CONTRAST_VAL 0xCF // 207
#define SSD1306_PRECHARGE_VAL 0xF1
#define SSD1306_VCOMH_VAL 0x40
#define SSD1306_MULT_DAT (SSD1306_LCDHEIGHT - 1)
#define SSD1306_HOR_MM 0x00
/*SSD1306 Display API's */
extern void clearDisplay();
extern void display_Init_seq();
extern void Display();
extern void Init_Col_PG_addrs(unsigned char col_start_addr, unsigned char col_end_addr,
unsigned char pg_start_addr, unsigned char pg_end_addr);
extern void Init_Col_PG_addrs(unsigned char col_start_addr,
unsigned char col_end_addr,
unsigned char pg_start_addr,
unsigned char pg_end_addr);
extern void setRotation(unsigned char x);
extern void startscrollright(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 unsigned char getRotation();
extern void invertDisplay(unsigned char i);
extern void display_rotate();
extern void display_normal();
/*SSD1306 Graphics Handling API's */
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 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 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 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 drawTriangle(short x0, short y0, short x1, short y1, short x2, short y2, short color);
extern void fillTriangle(short x0, short y0, short x1, short y1, short x2, short y2, 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 void drawTriangle(short x0, short y0, short x1, short y1, short x2,
short y2, short color);
extern void fillTriangle(short x0, short y0, short x1, short y1, short x2,
short y2, 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);
/*SSD1306 Text and Character Handling API's */
extern void setTextSize(unsigned char s);
extern void setTextColor(short c);
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 println();
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_ln(double num, int digits);
#endif /* SSD1306_OLED_H_ */

22
luci-app-ouad/src/SSD1306_OLED_Library/gfxfont.h Executable file → Normal file
View file

@ -1,18 +1,18 @@
#ifndef _GFXFONT_H_
#define _GFXFONT_H_
typedef struct { // Data stored PER GLYPH
unsigned short bitmapOffset; // Pointer into GFXfont->bitmap
unsigned char width, height; // Bitmap dimensions in pixels
unsigned char xAdvance; // Distance to advance cursor (x axis)
char xOffset, yOffset; // Dist from cursor pos to UL corner
typedef struct { // Data stored PER GLYPH
unsigned short bitmapOffset; // Pointer into GFXfont->bitmap
unsigned char width, height; // Bitmap dimensions in pixels
unsigned char xAdvance; // Distance to advance cursor (x axis)
char xOffset, yOffset; // Dist from cursor pos to UL corner
} GFXglyphT, *GFXglyphPtr;
typedef struct { // Data stored for FONT AS A WHOLE:
unsigned char *bitmap; // Glyph bitmaps, concatenated
GFXglyphPtr glyph; // Glyph array
unsigned char first, last; // ASCII extents
unsigned char yAdvance; // Newline distance (y axis)
typedef struct { // Data stored for FONT AS A WHOLE:
unsigned char *bitmap; // Glyph bitmaps, concatenated
GFXglyphPtr glyph; // Glyph array
unsigned char first, last; // ASCII extents
unsigned char yAdvance; // Newline distance (y axis)
} GFXfontT, *GFXfontPtr;
#endif // _GFXFONT_H_
#endif // _GFXFONT_H_