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:
parent
7b3188c7ce
commit
f70701309a
28 changed files with 3722 additions and 3054 deletions
0
luci-app-ouad/LICENSE
Executable file → Normal file
0
luci-app-ouad/LICENSE
Executable file → Normal file
12
luci-app-ouad/Makefile
Executable file → Normal file
12
luci-app-ouad/Makefile
Executable file → Normal file
|
@ -8,12 +8,18 @@
|
||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
LUCI_Title:=LuCI support for ssd1306 0.91\' 138x32 display
|
LUCI_Title:=LuCI support for ssd1306 0.91\' 138x32 display
|
||||||
LUCI_DEPENDS:=+i2c-tools +coreutils-nohup +libuci
|
LUCI_DEPENDS:=+libconfig
|
||||||
LUCI_PKGARCH:=all
|
LUCI_PKGARCH:=$(if $(realpath src/Makefile),,all)
|
||||||
|
PKG_VERSION:=20230927
|
||||||
|
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
|
||||||
|
|
||||||
|
|
|
@ -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
5
luci-app-ouad/luasrc/controller/oled.lua
Executable file → Normal file
|
@ -4,6 +4,11 @@ function index()
|
||||||
if not nixio.fs.access("/etc/config/oled") then
|
if not nixio.fs.access("/etc/config/oled") then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
local uci = require "luci.model.uci".cursor()
|
||||||
|
local showmenu = uci:get_first("oled", "oled", "showmenu", "0")
|
||||||
|
if showmenu == "0" then
|
||||||
|
return
|
||||||
|
end
|
||||||
entry({"admin", "services", "oled"}, alias("admin", "services", "oled", "setting"),_("OLED"), 90).dependent = true
|
entry({"admin", "services", "oled"}, alias("admin", "services", "oled", "setting"),_("OLED"), 90).dependent = true
|
||||||
entry({"admin", "services", "oled", "status"}, call("act_status"))
|
entry({"admin", "services", "oled", "status"}, call("act_status"))
|
||||||
entry({"admin", "services", "oled", "setting"}, cbi("oled/setting"),_("Setting"),30).leaf = true
|
entry({"admin", "services", "oled", "setting"}, cbi("oled/setting"),_("Setting"),30).leaf = true
|
||||||
|
|
3
luci-app-ouad/luasrc/model/cbi/oled/setting.lua
Executable file → Normal file
3
luci-app-ouad/luasrc/model/cbi/oled/setting.lua
Executable file → Normal file
|
@ -40,6 +40,9 @@ o = s:taboption("info", Flag, "date", translate("Date"), translate('Format YYYY-
|
||||||
o.default=0
|
o.default=0
|
||||||
o = s:taboption("info", Flag, "lanip", translate("IP"), translate("LAN IP address"))
|
o = s:taboption("info", Flag, "lanip", translate("IP"), translate("LAN IP address"))
|
||||||
o.default=0
|
o.default=0
|
||||||
|
o = s:taboption("info", Value, "ipifname", translate("which eth to monitor"))
|
||||||
|
o:depends("lanip",'1')
|
||||||
|
o.default='br-lan'
|
||||||
o = s:taboption("info", Flag, "cputemp", translate("CPU temperature"))
|
o = s:taboption("info", Flag, "cputemp", translate("CPU temperature"))
|
||||||
o.default=0
|
o.default=0
|
||||||
o = s:taboption("info", Flag, "cpufreq", translate("CPU frequency"))
|
o = s:taboption("info", Flag, "cpufreq", translate("CPU frequency"))
|
||||||
|
|
0
luci-app-ouad/luasrc/view/oled/status.htm
Executable file → Normal file
0
luci-app-ouad/luasrc/view/oled/status.htm
Executable file → Normal file
1
luci-app-ouad/po/zh-cn
Symbolic link
1
luci-app-ouad/po/zh-cn
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
zh_Hans
|
1
luci-app-ouad/po/zh-tw
Symbolic link
1
luci-app-ouad/po/zh-tw
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
zh_Hant
|
0
luci-app-ouad/po/zh_Hans/oled.po
Executable file → Normal file
0
luci-app-ouad/po/zh_Hans/oled.po
Executable file → Normal file
0
luci-app-ouad/po/zh_Hant/oled.po
Executable file → Normal file
0
luci-app-ouad/po/zh_Hant/oled.po
Executable file → Normal file
7
luci-app-ouad/root/etc/config/oled
Executable file → Normal file
7
luci-app-ouad/root/etc/config/oled
Executable file → Normal file
|
@ -1,4 +1,5 @@
|
||||||
config oled
|
config oled
|
||||||
|
option showmenu '1'
|
||||||
option enable '1'
|
option enable '1'
|
||||||
option drawline '0'
|
option drawline '0'
|
||||||
option drawrect '0'
|
option drawrect '0'
|
||||||
|
@ -14,11 +15,15 @@ config oled
|
||||||
option date '1'
|
option date '1'
|
||||||
option netspeed '1'
|
option netspeed '1'
|
||||||
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'
|
||||||
|
option from '0'
|
||||||
|
option to '1440'
|
||||||
option autoswitch '0'
|
option autoswitch '0'
|
||||||
option rotate '0'
|
option rotate '0'
|
||||||
option scroll '0'
|
option scroll '0'
|
||||||
option netsource 'br-lan'
|
option text 'Openmptcprouter'
|
||||||
|
option netsource 'eth0'
|
||||||
option path '/dev/i2c-0'
|
option path '/dev/i2c-0'
|
||||||
|
|
|
@ -1,144 +1,118 @@
|
||||||
#!/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 --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() {
|
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
|
|
||||||
}
|
}
|
||||||
|
|
18
luci-app-ouad/root/etc/uci-defaults/oled
Executable file → Normal file
18
luci-app-ouad/root/etc/uci-defaults/oled
Executable file → Normal file
|
@ -1,16 +1,23 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
uci_write_config() {
|
uci_write_config() {
|
||||||
uci -q set oled.@oled[0].path="$1"
|
[[ `uci -q get oled.@oled[0].showmenu` -eq 1 ]] && return
|
||||||
uci -q set oled.@oled[0].rotate="$2"
|
uci -q batch <<-EOF >/dev/null
|
||||||
uci -q commit oled
|
set oled.@oled[0].showmenu="1"
|
||||||
|
set oled.@oled[0].enable="1"
|
||||||
|
set oled.@oled[0].path="$1"
|
||||||
|
set oled.@oled[0].rotate="$2"
|
||||||
|
set oled.@oled[0].netspeed="$3"
|
||||||
|
set oled.@oled[0].netsource="$4"
|
||||||
|
commit oled
|
||||||
|
EOF
|
||||||
}
|
}
|
||||||
|
|
||||||
. /lib/functions/system.sh
|
. /lib/functions/system.sh
|
||||||
|
|
||||||
case "$(board_name)" in
|
case "$(board_name)" in
|
||||||
hinlink,opc-h69k)
|
"hinlink,opc-h69k"|"hlink,opc-h69k"|"hlink,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
|
||||||
|
|
0
luci-app-ouad/root/usr/share/rpcd/acl.d/luci-app-oled.json
Executable file → Normal file
0
luci-app-ouad/root/usr/share/rpcd/acl.d/luci-app-oled.json
Executable file → Normal file
183
luci-app-ouad/src/Example_Code/.clang-format
Normal file
183
luci-app-ouad/src/Example_Code/.clang-format
Normal file
|
@ -0,0 +1,183 @@
|
||||||
|
---
|
||||||
|
Language: Cpp
|
||||||
|
# BasedOnStyle: Google
|
||||||
|
AccessModifierOffset: -1
|
||||||
|
AlignAfterOpenBracket: Align
|
||||||
|
AlignConsecutiveMacros: false
|
||||||
|
AlignConsecutiveAssignments: false
|
||||||
|
AlignConsecutiveBitFields: false
|
||||||
|
AlignConsecutiveDeclarations: false
|
||||||
|
AlignEscapedNewlines: Left
|
||||||
|
AlignOperands: Align
|
||||||
|
AlignTrailingComments: true
|
||||||
|
AllowAllArgumentsOnNextLine: true
|
||||||
|
AllowAllConstructorInitializersOnNextLine: true
|
||||||
|
AllowAllParametersOfDeclarationOnNextLine: true
|
||||||
|
AllowShortEnumsOnASingleLine: true
|
||||||
|
AllowShortBlocksOnASingleLine: Never
|
||||||
|
AllowShortCaseLabelsOnASingleLine: false
|
||||||
|
AllowShortFunctionsOnASingleLine: All
|
||||||
|
AllowShortLambdasOnASingleLine: All
|
||||||
|
AllowShortIfStatementsOnASingleLine: WithoutElse
|
||||||
|
AllowShortLoopsOnASingleLine: true
|
||||||
|
AlwaysBreakAfterDefinitionReturnType: None
|
||||||
|
AlwaysBreakAfterReturnType: None
|
||||||
|
AlwaysBreakBeforeMultilineStrings: true
|
||||||
|
AlwaysBreakTemplateDeclarations: Yes
|
||||||
|
BinPackArguments: true
|
||||||
|
BinPackParameters: true
|
||||||
|
BraceWrapping:
|
||||||
|
AfterCaseLabel: false
|
||||||
|
AfterClass: false
|
||||||
|
AfterControlStatement: Never
|
||||||
|
AfterEnum: false
|
||||||
|
AfterFunction: false
|
||||||
|
AfterNamespace: false
|
||||||
|
AfterObjCDeclaration: false
|
||||||
|
AfterStruct: false
|
||||||
|
AfterUnion: false
|
||||||
|
AfterExternBlock: false
|
||||||
|
BeforeCatch: false
|
||||||
|
BeforeElse: false
|
||||||
|
BeforeLambdaBody: false
|
||||||
|
BeforeWhile: false
|
||||||
|
IndentBraces: false
|
||||||
|
SplitEmptyFunction: true
|
||||||
|
SplitEmptyRecord: true
|
||||||
|
SplitEmptyNamespace: true
|
||||||
|
BreakBeforeBinaryOperators: None
|
||||||
|
BreakBeforeBraces: Attach
|
||||||
|
BreakBeforeInheritanceComma: false
|
||||||
|
BreakInheritanceList: BeforeColon
|
||||||
|
BreakBeforeTernaryOperators: true
|
||||||
|
BreakConstructorInitializersBeforeComma: false
|
||||||
|
BreakConstructorInitializers: BeforeColon
|
||||||
|
BreakAfterJavaFieldAnnotations: false
|
||||||
|
BreakStringLiterals: true
|
||||||
|
ColumnLimit: 80
|
||||||
|
CommentPragmas: '^ IWYU pragma:'
|
||||||
|
CompactNamespaces: false
|
||||||
|
ConstructorInitializerAllOnOneLineOrOnePerLine: true
|
||||||
|
ConstructorInitializerIndentWidth: 4
|
||||||
|
ContinuationIndentWidth: 4
|
||||||
|
Cpp11BracedListStyle: true
|
||||||
|
DeriveLineEnding: true
|
||||||
|
DerivePointerAlignment: true
|
||||||
|
DisableFormat: false
|
||||||
|
ExperimentalAutoDetectBinPacking: false
|
||||||
|
FixNamespaceComments: true
|
||||||
|
ForEachMacros:
|
||||||
|
- foreach
|
||||||
|
- Q_FOREACH
|
||||||
|
- BOOST_FOREACH
|
||||||
|
IncludeBlocks: Regroup
|
||||||
|
IncludeCategories:
|
||||||
|
- Regex: '^<ext/.*\.h>'
|
||||||
|
Priority: 2
|
||||||
|
SortPriority: 0
|
||||||
|
- Regex: '^<.*\.h>'
|
||||||
|
Priority: 1
|
||||||
|
SortPriority: 0
|
||||||
|
- Regex: '^<.*'
|
||||||
|
Priority: 2
|
||||||
|
SortPriority: 0
|
||||||
|
- Regex: '.*'
|
||||||
|
Priority: 3
|
||||||
|
SortPriority: 0
|
||||||
|
IncludeIsMainRegex: '([-_](test|unittest))?$'
|
||||||
|
IncludeIsMainSourceRegex: ''
|
||||||
|
IndentCaseLabels: true
|
||||||
|
IndentCaseBlocks: false
|
||||||
|
IndentGotoLabels: true
|
||||||
|
IndentPPDirectives: None
|
||||||
|
IndentExternBlock: AfterExternBlock
|
||||||
|
IndentWidth: 2
|
||||||
|
IndentWrappedFunctionNames: false
|
||||||
|
InsertTrailingCommas: None
|
||||||
|
JavaScriptQuotes: Leave
|
||||||
|
JavaScriptWrapImports: true
|
||||||
|
KeepEmptyLinesAtTheStartOfBlocks: false
|
||||||
|
MacroBlockBegin: ''
|
||||||
|
MacroBlockEnd: ''
|
||||||
|
MaxEmptyLinesToKeep: 1
|
||||||
|
NamespaceIndentation: None
|
||||||
|
ObjCBinPackProtocolList: Never
|
||||||
|
ObjCBlockIndentWidth: 2
|
||||||
|
ObjCBreakBeforeNestedBlockParam: true
|
||||||
|
ObjCSpaceAfterProperty: false
|
||||||
|
ObjCSpaceBeforeProtocolList: true
|
||||||
|
PenaltyBreakAssignment: 2
|
||||||
|
PenaltyBreakBeforeFirstCallParameter: 1
|
||||||
|
PenaltyBreakComment: 300
|
||||||
|
PenaltyBreakFirstLessLess: 120
|
||||||
|
PenaltyBreakString: 1000
|
||||||
|
PenaltyBreakTemplateDeclaration: 10
|
||||||
|
PenaltyExcessCharacter: 1000000
|
||||||
|
PenaltyReturnTypeOnItsOwnLine: 200
|
||||||
|
PointerAlignment: Left
|
||||||
|
RawStringFormats:
|
||||||
|
- Language: Cpp
|
||||||
|
Delimiters:
|
||||||
|
- cc
|
||||||
|
- CC
|
||||||
|
- cpp
|
||||||
|
- Cpp
|
||||||
|
- CPP
|
||||||
|
- 'c++'
|
||||||
|
- 'C++'
|
||||||
|
CanonicalDelimiter: ''
|
||||||
|
BasedOnStyle: google
|
||||||
|
- Language: TextProto
|
||||||
|
Delimiters:
|
||||||
|
- pb
|
||||||
|
- PB
|
||||||
|
- proto
|
||||||
|
- PROTO
|
||||||
|
EnclosingFunctions:
|
||||||
|
- EqualsProto
|
||||||
|
- EquivToProto
|
||||||
|
- PARSE_PARTIAL_TEXT_PROTO
|
||||||
|
- PARSE_TEST_PROTO
|
||||||
|
- PARSE_TEXT_PROTO
|
||||||
|
- ParseTextOrDie
|
||||||
|
- ParseTextProtoOrDie
|
||||||
|
- ParseTestProto
|
||||||
|
- ParsePartialTestProto
|
||||||
|
CanonicalDelimiter: ''
|
||||||
|
BasedOnStyle: google
|
||||||
|
ReflowComments: true
|
||||||
|
SortIncludes: true
|
||||||
|
SortUsingDeclarations: true
|
||||||
|
SpaceAfterCStyleCast: false
|
||||||
|
SpaceAfterLogicalNot: false
|
||||||
|
SpaceAfterTemplateKeyword: true
|
||||||
|
SpaceBeforeAssignmentOperators: true
|
||||||
|
SpaceBeforeCpp11BracedList: false
|
||||||
|
SpaceBeforeCtorInitializerColon: true
|
||||||
|
SpaceBeforeInheritanceColon: true
|
||||||
|
SpaceBeforeParens: ControlStatements
|
||||||
|
SpaceBeforeRangeBasedForLoopColon: true
|
||||||
|
SpaceInEmptyBlock: false
|
||||||
|
SpaceInEmptyParentheses: false
|
||||||
|
SpacesBeforeTrailingComments: 2
|
||||||
|
SpacesInAngles: false
|
||||||
|
SpacesInConditionalStatement: false
|
||||||
|
SpacesInContainerLiterals: true
|
||||||
|
SpacesInCStyleCastParentheses: false
|
||||||
|
SpacesInParentheses: false
|
||||||
|
SpacesInSquareBrackets: false
|
||||||
|
SpaceBeforeSquareBrackets: false
|
||||||
|
Standard: Auto
|
||||||
|
StatementMacros:
|
||||||
|
- Q_UNUSED
|
||||||
|
- QT_REQUIRE_VERSION
|
||||||
|
IndentWidth: 8
|
||||||
|
TabWidth: 8
|
||||||
|
UseCRLF: false
|
||||||
|
UseTab: Always
|
||||||
|
WhitespaceSensitiveMacros:
|
||||||
|
- STRINGIZE
|
||||||
|
- PP_STRINGIZE
|
||||||
|
- BOOST_PP_STRINGIZE
|
||||||
|
...
|
||||||
|
|
1000
luci-app-ouad/src/Example_Code/Main.c
Executable file → Normal file
1000
luci-app-ouad/src/Example_Code/Main.c
Executable file → Normal file
File diff suppressed because it is too large
Load diff
670
luci-app-ouad/src/Example_Code/example_app.c
Executable file → Normal file
670
luci-app-ouad/src/Example_Code/example_app.c
Executable file → Normal 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
18
luci-app-ouad/src/Example_Code/example_app.h
Executable file → Normal 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);
|
||||||
|
|
||||||
|
|
||||||
|
|
183
luci-app-ouad/src/I2C_Library/.clang-format
Normal file
183
luci-app-ouad/src/I2C_Library/.clang-format
Normal file
|
@ -0,0 +1,183 @@
|
||||||
|
---
|
||||||
|
Language: Cpp
|
||||||
|
# BasedOnStyle: Google
|
||||||
|
AccessModifierOffset: -1
|
||||||
|
AlignAfterOpenBracket: Align
|
||||||
|
AlignConsecutiveMacros: false
|
||||||
|
AlignConsecutiveAssignments: false
|
||||||
|
AlignConsecutiveBitFields: false
|
||||||
|
AlignConsecutiveDeclarations: false
|
||||||
|
AlignEscapedNewlines: Left
|
||||||
|
AlignOperands: Align
|
||||||
|
AlignTrailingComments: true
|
||||||
|
AllowAllArgumentsOnNextLine: true
|
||||||
|
AllowAllConstructorInitializersOnNextLine: true
|
||||||
|
AllowAllParametersOfDeclarationOnNextLine: true
|
||||||
|
AllowShortEnumsOnASingleLine: true
|
||||||
|
AllowShortBlocksOnASingleLine: Never
|
||||||
|
AllowShortCaseLabelsOnASingleLine: false
|
||||||
|
AllowShortFunctionsOnASingleLine: All
|
||||||
|
AllowShortLambdasOnASingleLine: All
|
||||||
|
AllowShortIfStatementsOnASingleLine: WithoutElse
|
||||||
|
AllowShortLoopsOnASingleLine: true
|
||||||
|
AlwaysBreakAfterDefinitionReturnType: None
|
||||||
|
AlwaysBreakAfterReturnType: None
|
||||||
|
AlwaysBreakBeforeMultilineStrings: true
|
||||||
|
AlwaysBreakTemplateDeclarations: Yes
|
||||||
|
BinPackArguments: true
|
||||||
|
BinPackParameters: true
|
||||||
|
BraceWrapping:
|
||||||
|
AfterCaseLabel: false
|
||||||
|
AfterClass: false
|
||||||
|
AfterControlStatement: Never
|
||||||
|
AfterEnum: false
|
||||||
|
AfterFunction: false
|
||||||
|
AfterNamespace: false
|
||||||
|
AfterObjCDeclaration: false
|
||||||
|
AfterStruct: false
|
||||||
|
AfterUnion: false
|
||||||
|
AfterExternBlock: false
|
||||||
|
BeforeCatch: false
|
||||||
|
BeforeElse: false
|
||||||
|
BeforeLambdaBody: false
|
||||||
|
BeforeWhile: false
|
||||||
|
IndentBraces: false
|
||||||
|
SplitEmptyFunction: true
|
||||||
|
SplitEmptyRecord: true
|
||||||
|
SplitEmptyNamespace: true
|
||||||
|
BreakBeforeBinaryOperators: None
|
||||||
|
BreakBeforeBraces: Attach
|
||||||
|
BreakBeforeInheritanceComma: false
|
||||||
|
BreakInheritanceList: BeforeColon
|
||||||
|
BreakBeforeTernaryOperators: true
|
||||||
|
BreakConstructorInitializersBeforeComma: false
|
||||||
|
BreakConstructorInitializers: BeforeColon
|
||||||
|
BreakAfterJavaFieldAnnotations: false
|
||||||
|
BreakStringLiterals: true
|
||||||
|
ColumnLimit: 80
|
||||||
|
CommentPragmas: '^ IWYU pragma:'
|
||||||
|
CompactNamespaces: false
|
||||||
|
ConstructorInitializerAllOnOneLineOrOnePerLine: true
|
||||||
|
ConstructorInitializerIndentWidth: 4
|
||||||
|
ContinuationIndentWidth: 4
|
||||||
|
Cpp11BracedListStyle: true
|
||||||
|
DeriveLineEnding: true
|
||||||
|
DerivePointerAlignment: true
|
||||||
|
DisableFormat: false
|
||||||
|
ExperimentalAutoDetectBinPacking: false
|
||||||
|
FixNamespaceComments: true
|
||||||
|
ForEachMacros:
|
||||||
|
- foreach
|
||||||
|
- Q_FOREACH
|
||||||
|
- BOOST_FOREACH
|
||||||
|
IncludeBlocks: Regroup
|
||||||
|
IncludeCategories:
|
||||||
|
- Regex: '^<ext/.*\.h>'
|
||||||
|
Priority: 2
|
||||||
|
SortPriority: 0
|
||||||
|
- Regex: '^<.*\.h>'
|
||||||
|
Priority: 1
|
||||||
|
SortPriority: 0
|
||||||
|
- Regex: '^<.*'
|
||||||
|
Priority: 2
|
||||||
|
SortPriority: 0
|
||||||
|
- Regex: '.*'
|
||||||
|
Priority: 3
|
||||||
|
SortPriority: 0
|
||||||
|
IncludeIsMainRegex: '([-_](test|unittest))?$'
|
||||||
|
IncludeIsMainSourceRegex: ''
|
||||||
|
IndentCaseLabels: true
|
||||||
|
IndentCaseBlocks: false
|
||||||
|
IndentGotoLabels: true
|
||||||
|
IndentPPDirectives: None
|
||||||
|
IndentExternBlock: AfterExternBlock
|
||||||
|
IndentWidth: 2
|
||||||
|
IndentWrappedFunctionNames: false
|
||||||
|
InsertTrailingCommas: None
|
||||||
|
JavaScriptQuotes: Leave
|
||||||
|
JavaScriptWrapImports: true
|
||||||
|
KeepEmptyLinesAtTheStartOfBlocks: false
|
||||||
|
MacroBlockBegin: ''
|
||||||
|
MacroBlockEnd: ''
|
||||||
|
MaxEmptyLinesToKeep: 1
|
||||||
|
NamespaceIndentation: None
|
||||||
|
ObjCBinPackProtocolList: Never
|
||||||
|
ObjCBlockIndentWidth: 2
|
||||||
|
ObjCBreakBeforeNestedBlockParam: true
|
||||||
|
ObjCSpaceAfterProperty: false
|
||||||
|
ObjCSpaceBeforeProtocolList: true
|
||||||
|
PenaltyBreakAssignment: 2
|
||||||
|
PenaltyBreakBeforeFirstCallParameter: 1
|
||||||
|
PenaltyBreakComment: 300
|
||||||
|
PenaltyBreakFirstLessLess: 120
|
||||||
|
PenaltyBreakString: 1000
|
||||||
|
PenaltyBreakTemplateDeclaration: 10
|
||||||
|
PenaltyExcessCharacter: 1000000
|
||||||
|
PenaltyReturnTypeOnItsOwnLine: 200
|
||||||
|
PointerAlignment: Left
|
||||||
|
RawStringFormats:
|
||||||
|
- Language: Cpp
|
||||||
|
Delimiters:
|
||||||
|
- cc
|
||||||
|
- CC
|
||||||
|
- cpp
|
||||||
|
- Cpp
|
||||||
|
- CPP
|
||||||
|
- 'c++'
|
||||||
|
- 'C++'
|
||||||
|
CanonicalDelimiter: ''
|
||||||
|
BasedOnStyle: google
|
||||||
|
- Language: TextProto
|
||||||
|
Delimiters:
|
||||||
|
- pb
|
||||||
|
- PB
|
||||||
|
- proto
|
||||||
|
- PROTO
|
||||||
|
EnclosingFunctions:
|
||||||
|
- EqualsProto
|
||||||
|
- EquivToProto
|
||||||
|
- PARSE_PARTIAL_TEXT_PROTO
|
||||||
|
- PARSE_TEST_PROTO
|
||||||
|
- PARSE_TEXT_PROTO
|
||||||
|
- ParseTextOrDie
|
||||||
|
- ParseTextProtoOrDie
|
||||||
|
- ParseTestProto
|
||||||
|
- ParsePartialTestProto
|
||||||
|
CanonicalDelimiter: ''
|
||||||
|
BasedOnStyle: google
|
||||||
|
ReflowComments: true
|
||||||
|
SortIncludes: true
|
||||||
|
SortUsingDeclarations: true
|
||||||
|
SpaceAfterCStyleCast: false
|
||||||
|
SpaceAfterLogicalNot: false
|
||||||
|
SpaceAfterTemplateKeyword: true
|
||||||
|
SpaceBeforeAssignmentOperators: true
|
||||||
|
SpaceBeforeCpp11BracedList: false
|
||||||
|
SpaceBeforeCtorInitializerColon: true
|
||||||
|
SpaceBeforeInheritanceColon: true
|
||||||
|
SpaceBeforeParens: ControlStatements
|
||||||
|
SpaceBeforeRangeBasedForLoopColon: true
|
||||||
|
SpaceInEmptyBlock: false
|
||||||
|
SpaceInEmptyParentheses: false
|
||||||
|
SpacesBeforeTrailingComments: 2
|
||||||
|
SpacesInAngles: false
|
||||||
|
SpacesInConditionalStatement: false
|
||||||
|
SpacesInContainerLiterals: true
|
||||||
|
SpacesInCStyleCastParentheses: false
|
||||||
|
SpacesInParentheses: false
|
||||||
|
SpacesInSquareBrackets: false
|
||||||
|
SpaceBeforeSquareBrackets: false
|
||||||
|
Standard: Auto
|
||||||
|
StatementMacros:
|
||||||
|
- Q_UNUSED
|
||||||
|
- QT_REQUIRE_VERSION
|
||||||
|
IndentWidth: 8
|
||||||
|
TabWidth: 8
|
||||||
|
UseCRLF: false
|
||||||
|
UseTab: Always
|
||||||
|
WhitespaceSensitiveMacros:
|
||||||
|
- STRINGIZE
|
||||||
|
- PP_STRINGIZE
|
||||||
|
- BOOST_PP_STRINGIZE
|
||||||
|
...
|
||||||
|
|
94
luci-app-ouad/src/I2C_Library/I2C.c
Executable file → Normal file
94
luci-app-ouad/src/I2C_Library/I2C.c
Executable file → Normal file
|
@ -25,17 +25,18 @@ SOFTWARE.
|
||||||
*
|
*
|
||||||
* Created on : September 19, 2017
|
* Created on : September 19, 2017
|
||||||
* Author : Vinay Divakar
|
* Author : Vinay Divakar
|
||||||
* Description : This is an I2C Library for the BeagleBone that consists of the API's to support the standard
|
* Description : This is an I2C Library for the BeagleBone that consists of the
|
||||||
|
API's to support the standard
|
||||||
* I2C operations.
|
* I2C operations.
|
||||||
* Website : www.deeplyembedded.org
|
* Website : www.deeplyembedded.org
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*Libs Includes*/
|
/*Libs Includes*/
|
||||||
#include<stdio.h>
|
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
#include <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,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
|
* 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;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
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);
|
||||||
|
}
|
||||||
|
|
12
luci-app-ouad/src/I2C_Library/I2C.h
Executable file → Normal file
12
luci-app-ouad/src/I2C_Library/I2C.h
Executable file → Normal file
|
@ -56,14 +56,20 @@ 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);
|
||||||
|
|
||||||
|
/* Close I2C connect */
|
||||||
|
extern int Close_I2C();
|
||||||
|
|
||||||
#endif /* I2C_H_ */
|
#endif /* I2C_H_ */
|
||||||
|
|
0
luci-app-ouad/src/LICENSE
Executable file → Normal file
0
luci-app-ouad/src/LICENSE
Executable file → Normal file
21
luci-app-ouad/src/Makefile
Executable file → Normal file
21
luci-app-ouad/src/Makefile
Executable file → Normal file
|
@ -1,16 +1,27 @@
|
||||||
|
ifndef CC
|
||||||
CC = gcc
|
CC = gcc
|
||||||
LD = gcc
|
endif
|
||||||
|
ifndef LD
|
||||||
|
LD = ld
|
||||||
|
endif
|
||||||
|
|
||||||
SOURCES = SSD1306_OLED_Library/SSD1306_OLED.c Example_Code/Main.c Example_Code/example_app.c I2C_Library/I2C.c
|
SOURCES = SSD1306_OLED_Library/SSD1306_OLED.c Example_Code/main.c Example_Code/example_app.c I2C_Library/I2C.c
|
||||||
OBJS := $(SOURCES:.c=.o)
|
OBJS := $(SOURCES:.c=.o)
|
||||||
CPPFLAGS := -I SSD1306_OLED_Library -I I2C_Library
|
CPPFLAGS := -I SSD1306_OLED_Library -I I2C_Library
|
||||||
CFLAGS := -g
|
ifndef CFLAGS
|
||||||
|
CFLAGS := -O2
|
||||||
|
endif
|
||||||
|
LDFLAGS := -lpthread -lconfig
|
||||||
|
|
||||||
oled: $(OBJS)
|
oled: $(OBJS)
|
||||||
$(CC) $^ -o $@
|
$(CC) $^ -o $@ $(LDFLAGS)
|
||||||
|
|
||||||
|
ssd1306: $(OBJS)
|
||||||
|
$(CC) $^ -o $@ $(LDFLAGS) --static
|
||||||
|
strip $@
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -rf oled $(OBJS)
|
rm -rf oled ssd1306 $(OBJS)
|
||||||
|
|
||||||
compile: oled
|
compile: oled
|
||||||
|
|
||||||
|
|
0
luci-app-ouad/src/README.md
Executable file → Normal file
0
luci-app-ouad/src/README.md
Executable file → Normal file
183
luci-app-ouad/src/SSD1306_OLED_Library/.clang-format
Normal file
183
luci-app-ouad/src/SSD1306_OLED_Library/.clang-format
Normal file
|
@ -0,0 +1,183 @@
|
||||||
|
---
|
||||||
|
Language: Cpp
|
||||||
|
# BasedOnStyle: Google
|
||||||
|
AccessModifierOffset: -1
|
||||||
|
AlignAfterOpenBracket: Align
|
||||||
|
AlignConsecutiveMacros: false
|
||||||
|
AlignConsecutiveAssignments: false
|
||||||
|
AlignConsecutiveBitFields: false
|
||||||
|
AlignConsecutiveDeclarations: false
|
||||||
|
AlignEscapedNewlines: Left
|
||||||
|
AlignOperands: Align
|
||||||
|
AlignTrailingComments: true
|
||||||
|
AllowAllArgumentsOnNextLine: true
|
||||||
|
AllowAllConstructorInitializersOnNextLine: true
|
||||||
|
AllowAllParametersOfDeclarationOnNextLine: true
|
||||||
|
AllowShortEnumsOnASingleLine: true
|
||||||
|
AllowShortBlocksOnASingleLine: Never
|
||||||
|
AllowShortCaseLabelsOnASingleLine: false
|
||||||
|
AllowShortFunctionsOnASingleLine: All
|
||||||
|
AllowShortLambdasOnASingleLine: All
|
||||||
|
AllowShortIfStatementsOnASingleLine: WithoutElse
|
||||||
|
AllowShortLoopsOnASingleLine: true
|
||||||
|
AlwaysBreakAfterDefinitionReturnType: None
|
||||||
|
AlwaysBreakAfterReturnType: None
|
||||||
|
AlwaysBreakBeforeMultilineStrings: true
|
||||||
|
AlwaysBreakTemplateDeclarations: Yes
|
||||||
|
BinPackArguments: true
|
||||||
|
BinPackParameters: true
|
||||||
|
BraceWrapping:
|
||||||
|
AfterCaseLabel: false
|
||||||
|
AfterClass: false
|
||||||
|
AfterControlStatement: Never
|
||||||
|
AfterEnum: false
|
||||||
|
AfterFunction: false
|
||||||
|
AfterNamespace: false
|
||||||
|
AfterObjCDeclaration: false
|
||||||
|
AfterStruct: false
|
||||||
|
AfterUnion: false
|
||||||
|
AfterExternBlock: false
|
||||||
|
BeforeCatch: false
|
||||||
|
BeforeElse: false
|
||||||
|
BeforeLambdaBody: false
|
||||||
|
BeforeWhile: false
|
||||||
|
IndentBraces: false
|
||||||
|
SplitEmptyFunction: true
|
||||||
|
SplitEmptyRecord: true
|
||||||
|
SplitEmptyNamespace: true
|
||||||
|
BreakBeforeBinaryOperators: None
|
||||||
|
BreakBeforeBraces: Attach
|
||||||
|
BreakBeforeInheritanceComma: false
|
||||||
|
BreakInheritanceList: BeforeColon
|
||||||
|
BreakBeforeTernaryOperators: true
|
||||||
|
BreakConstructorInitializersBeforeComma: false
|
||||||
|
BreakConstructorInitializers: BeforeColon
|
||||||
|
BreakAfterJavaFieldAnnotations: false
|
||||||
|
BreakStringLiterals: true
|
||||||
|
ColumnLimit: 80
|
||||||
|
CommentPragmas: '^ IWYU pragma:'
|
||||||
|
CompactNamespaces: false
|
||||||
|
ConstructorInitializerAllOnOneLineOrOnePerLine: true
|
||||||
|
ConstructorInitializerIndentWidth: 4
|
||||||
|
ContinuationIndentWidth: 4
|
||||||
|
Cpp11BracedListStyle: true
|
||||||
|
DeriveLineEnding: true
|
||||||
|
DerivePointerAlignment: true
|
||||||
|
DisableFormat: false
|
||||||
|
ExperimentalAutoDetectBinPacking: false
|
||||||
|
FixNamespaceComments: true
|
||||||
|
ForEachMacros:
|
||||||
|
- foreach
|
||||||
|
- Q_FOREACH
|
||||||
|
- BOOST_FOREACH
|
||||||
|
IncludeBlocks: Regroup
|
||||||
|
IncludeCategories:
|
||||||
|
- Regex: '^<ext/.*\.h>'
|
||||||
|
Priority: 2
|
||||||
|
SortPriority: 0
|
||||||
|
- Regex: '^<.*\.h>'
|
||||||
|
Priority: 1
|
||||||
|
SortPriority: 0
|
||||||
|
- Regex: '^<.*'
|
||||||
|
Priority: 2
|
||||||
|
SortPriority: 0
|
||||||
|
- Regex: '.*'
|
||||||
|
Priority: 3
|
||||||
|
SortPriority: 0
|
||||||
|
IncludeIsMainRegex: '([-_](test|unittest))?$'
|
||||||
|
IncludeIsMainSourceRegex: ''
|
||||||
|
IndentCaseLabels: true
|
||||||
|
IndentCaseBlocks: false
|
||||||
|
IndentGotoLabels: true
|
||||||
|
IndentPPDirectives: None
|
||||||
|
IndentExternBlock: AfterExternBlock
|
||||||
|
IndentWidth: 2
|
||||||
|
IndentWrappedFunctionNames: false
|
||||||
|
InsertTrailingCommas: None
|
||||||
|
JavaScriptQuotes: Leave
|
||||||
|
JavaScriptWrapImports: true
|
||||||
|
KeepEmptyLinesAtTheStartOfBlocks: false
|
||||||
|
MacroBlockBegin: ''
|
||||||
|
MacroBlockEnd: ''
|
||||||
|
MaxEmptyLinesToKeep: 1
|
||||||
|
NamespaceIndentation: None
|
||||||
|
ObjCBinPackProtocolList: Never
|
||||||
|
ObjCBlockIndentWidth: 2
|
||||||
|
ObjCBreakBeforeNestedBlockParam: true
|
||||||
|
ObjCSpaceAfterProperty: false
|
||||||
|
ObjCSpaceBeforeProtocolList: true
|
||||||
|
PenaltyBreakAssignment: 2
|
||||||
|
PenaltyBreakBeforeFirstCallParameter: 1
|
||||||
|
PenaltyBreakComment: 300
|
||||||
|
PenaltyBreakFirstLessLess: 120
|
||||||
|
PenaltyBreakString: 1000
|
||||||
|
PenaltyBreakTemplateDeclaration: 10
|
||||||
|
PenaltyExcessCharacter: 1000000
|
||||||
|
PenaltyReturnTypeOnItsOwnLine: 200
|
||||||
|
PointerAlignment: Left
|
||||||
|
RawStringFormats:
|
||||||
|
- Language: Cpp
|
||||||
|
Delimiters:
|
||||||
|
- cc
|
||||||
|
- CC
|
||||||
|
- cpp
|
||||||
|
- Cpp
|
||||||
|
- CPP
|
||||||
|
- 'c++'
|
||||||
|
- 'C++'
|
||||||
|
CanonicalDelimiter: ''
|
||||||
|
BasedOnStyle: google
|
||||||
|
- Language: TextProto
|
||||||
|
Delimiters:
|
||||||
|
- pb
|
||||||
|
- PB
|
||||||
|
- proto
|
||||||
|
- PROTO
|
||||||
|
EnclosingFunctions:
|
||||||
|
- EqualsProto
|
||||||
|
- EquivToProto
|
||||||
|
- PARSE_PARTIAL_TEXT_PROTO
|
||||||
|
- PARSE_TEST_PROTO
|
||||||
|
- PARSE_TEXT_PROTO
|
||||||
|
- ParseTextOrDie
|
||||||
|
- ParseTextProtoOrDie
|
||||||
|
- ParseTestProto
|
||||||
|
- ParsePartialTestProto
|
||||||
|
CanonicalDelimiter: ''
|
||||||
|
BasedOnStyle: google
|
||||||
|
ReflowComments: true
|
||||||
|
SortIncludes: true
|
||||||
|
SortUsingDeclarations: true
|
||||||
|
SpaceAfterCStyleCast: false
|
||||||
|
SpaceAfterLogicalNot: false
|
||||||
|
SpaceAfterTemplateKeyword: true
|
||||||
|
SpaceBeforeAssignmentOperators: true
|
||||||
|
SpaceBeforeCpp11BracedList: false
|
||||||
|
SpaceBeforeCtorInitializerColon: true
|
||||||
|
SpaceBeforeInheritanceColon: true
|
||||||
|
SpaceBeforeParens: ControlStatements
|
||||||
|
SpaceBeforeRangeBasedForLoopColon: true
|
||||||
|
SpaceInEmptyBlock: false
|
||||||
|
SpaceInEmptyParentheses: false
|
||||||
|
SpacesBeforeTrailingComments: 2
|
||||||
|
SpacesInAngles: false
|
||||||
|
SpacesInConditionalStatement: false
|
||||||
|
SpacesInContainerLiterals: true
|
||||||
|
SpacesInCStyleCastParentheses: false
|
||||||
|
SpacesInParentheses: false
|
||||||
|
SpacesInSquareBrackets: false
|
||||||
|
SpaceBeforeSquareBrackets: false
|
||||||
|
Standard: Auto
|
||||||
|
StatementMacros:
|
||||||
|
- Q_UNUSED
|
||||||
|
- QT_REQUIRE_VERSION
|
||||||
|
IndentWidth: 8
|
||||||
|
TabWidth: 8
|
||||||
|
UseCRLF: false
|
||||||
|
UseTab: Always
|
||||||
|
WhitespaceSensitiveMacros:
|
||||||
|
- STRINGIZE
|
||||||
|
- PP_STRINGIZE
|
||||||
|
- BOOST_PP_STRINGIZE
|
||||||
|
...
|
||||||
|
|
1577
luci-app-ouad/src/SSD1306_OLED_Library/SSD1306_OLED.c
Executable file → Normal file
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
38
luci-app-ouad/src/SSD1306_OLED_Library/SSD1306_OLED.h
Executable file → Normal file
38
luci-app-ouad/src/SSD1306_OLED_Library/SSD1306_OLED.h
Executable file → Normal file
|
@ -60,8 +60,8 @@ 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
0
luci-app-ouad/src/SSD1306_OLED_Library/gfxfont.h
Executable file → Normal file
Loading…
Add table
Add a link
Reference in a new issue