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
|
||||
|
||||
LUCI_Title:=LuCI support for ssd1306 0.91\' 138x32 display
|
||||
LUCI_DEPENDS:=+i2c-tools +coreutils-nohup +libuci
|
||||
LUCI_PKGARCH:=all
|
||||
LUCI_DEPENDS:=+libconfig
|
||||
LUCI_PKGARCH:=$(if $(realpath src/Makefile),,all)
|
||||
PKG_VERSION:=20230927
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_LICENSE:=GPLv3
|
||||
PKG_LINCESE_FILES:=LICENSE
|
||||
PKF_MAINTAINER:=natelol <natelol@github.com>
|
||||
PKG_MAINTAINER:=natelol <natelol@github.com>
|
||||
|
||||
define Package/luci-app-oled/conffiles
|
||||
/etc/config/oled
|
||||
endef
|
||||
|
||||
include $(TOPDIR)/feeds/luci/luci.mk
|
||||
|
||||
|
|
|
@ -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
|
||||
return
|
||||
end
|
||||
local uci = require "luci.model.uci".cursor()
|
||||
local showmenu = uci:get_first("oled", "oled", "showmenu", "0")
|
||||
if showmenu == "0" then
|
||||
return
|
||||
end
|
||||
entry({"admin", "services", "oled"}, alias("admin", "services", "oled", "setting"),_("OLED"), 90).dependent = true
|
||||
entry({"admin", "services", "oled", "status"}, call("act_status"))
|
||||
entry({"admin", "services", "oled", "setting"}, cbi("oled/setting"),_("Setting"),30).leaf = true
|
||||
|
|
3
luci-app-ouad/luasrc/model/cbi/oled/setting.lua
Executable file → Normal file
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 = s:taboption("info", Flag, "lanip", translate("IP"), translate("LAN IP address"))
|
||||
o.default=0
|
||||
o = s:taboption("info", Value, "ipifname", translate("which eth to monitor"))
|
||||
o:depends("lanip",'1')
|
||||
o.default='br-lan'
|
||||
o = s:taboption("info", Flag, "cputemp", translate("CPU temperature"))
|
||||
o.default=0
|
||||
o = s:taboption("info", Flag, "cpufreq", translate("CPU frequency"))
|
||||
|
|
0
luci-app-ouad/luasrc/view/oled/status.htm
Executable file → Normal file
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
51
luci-app-ouad/root/etc/config/oled
Executable file → Normal file
51
luci-app-ouad/root/etc/config/oled
Executable file → Normal file
|
@ -1,24 +1,29 @@
|
|||
config oled
|
||||
option enable '1'
|
||||
option drawline '0'
|
||||
option drawrect '0'
|
||||
option fillrect '0'
|
||||
option drawcircle '0'
|
||||
option drawroundrect '0'
|
||||
option fillroundrect '0'
|
||||
option drawtriangle '0'
|
||||
option filltriangle '0'
|
||||
option displaybitmap '0'
|
||||
option displayinvertnormal '0'
|
||||
option drawbitmapeg '0'
|
||||
option date '1'
|
||||
option netspeed '1'
|
||||
option lanip '1'
|
||||
option cpufreq '1'
|
||||
option cputemp '1'
|
||||
option time '60'
|
||||
option autoswitch '0'
|
||||
option rotate '0'
|
||||
option scroll '0'
|
||||
option netsource 'br-lan'
|
||||
option path '/dev/i2c-0'
|
||||
option showmenu '1'
|
||||
option enable '1'
|
||||
option drawline '0'
|
||||
option drawrect '0'
|
||||
option fillrect '0'
|
||||
option drawcircle '0'
|
||||
option drawroundrect '0'
|
||||
option fillroundrect '0'
|
||||
option drawtriangle '0'
|
||||
option filltriangle '0'
|
||||
option displaybitmap '0'
|
||||
option displayinvertnormal '0'
|
||||
option drawbitmapeg '0'
|
||||
option date '1'
|
||||
option netspeed '1'
|
||||
option lanip '1'
|
||||
option ipifname 'br-lan'
|
||||
option cpufreq '1'
|
||||
option cputemp '1'
|
||||
option time '60'
|
||||
option from '0'
|
||||
option to '1440'
|
||||
option autoswitch '0'
|
||||
option rotate '0'
|
||||
option scroll '0'
|
||||
option text 'Openmptcprouter'
|
||||
option netsource 'eth0'
|
||||
option path '/dev/i2c-0'
|
||||
|
|
|
@ -1,144 +1,118 @@
|
|||
#!/bin/sh /etc/rc.common
|
||||
START=88
|
||||
|
||||
START=88
|
||||
STOP=11
|
||||
USE_PROCD=1
|
||||
PROG=/usr/bin/oled
|
||||
|
||||
stop() {
|
||||
kill -2 $(pgrep /usr/bin/oled)
|
||||
kill -9 $(pgrep -f /usr/sbin/netspeed)
|
||||
echo "oled exit..."
|
||||
get_section() {
|
||||
eval "export -n ${2}=\"$1\""
|
||||
return 1
|
||||
}
|
||||
|
||||
start() {
|
||||
enabled=$(uci get oled.@oled[0].enable)
|
||||
if [ $enabled -eq 0 ]; then
|
||||
exit 0
|
||||
start_service() {
|
||||
local mainsection
|
||||
config_load oled
|
||||
config_foreach get_section oled mainsection
|
||||
local section=$mainsection
|
||||
|
||||
local enabled ; config_get enabled "$section" enable 0
|
||||
if [[ $enabled -eq 0 ]]; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
autoswitch=$(uci get oled.@oled[0].autoswitch)
|
||||
from=$(uci get oled.@oled[0].from)
|
||||
to=$(uci get oled.@oled[0].to)
|
||||
procd_open_instance
|
||||
procd_set_param command ${PROG}
|
||||
procd_append_param command --needInit
|
||||
|
||||
if [ ${autoswitch} -eq 1 ]; then
|
||||
hour=$(date +"%H")
|
||||
min=$(date +"%M")
|
||||
ihour=`expr $hour + 0`
|
||||
imin=`expr $min + 0`
|
||||
now=$(($ihour*60+$imin))
|
||||
if [[ $now -lt $from || $now -gt $to ]]; then
|
||||
stop
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
local param
|
||||
# default /dev/i2c-0
|
||||
config_get param "$section" path
|
||||
[ "$param" != "" ] && procd_append_param command --i2cDevPath="$param"
|
||||
|
||||
#crontab daemon
|
||||
if ! grep "/etc/init.d/oled \+restart" /etc/crontabs/root >/dev/null 2>&1; then
|
||||
echo "*/5 * * * * /etc/init.d/oled restart >/dev/null 2>&1" >> /etc/crontabs/root
|
||||
fi
|
||||
# from begin_minitues to end_minitues
|
||||
# default 0 - 1440
|
||||
config_get param "$section" from
|
||||
[ "$param" != "" ] && procd_append_param command --from="$param"
|
||||
config_get param "$section" to
|
||||
[ "$param" != "" ] && procd_append_param command --to="$param"
|
||||
|
||||
date=$(uci get oled.@oled[0].date)
|
||||
lanip=$(uci get oled.@oled[0].lanip)
|
||||
cputemp=$(uci get oled.@oled[0].cputemp)
|
||||
cpufreq=$(uci get oled.@oled[0].cpufreq)
|
||||
netspeed=$(uci get oled.@oled[0].netspeed)
|
||||
time=$(uci get oled.@oled[0].time)
|
||||
drawline=$(uci get oled.@oled[0].drawline)
|
||||
drawrect=$(uci get oled.@oled[0].drawrect)
|
||||
fillrect=$(uci get oled.@oled[0].fillrect)
|
||||
drawcircle=$(uci get oled.@oled[0].drawcircle)
|
||||
drawroundrect=$(uci get oled.@oled[0].drawroundrect)
|
||||
fillroundrect=$(uci get oled.@oled[0].fillroundrect)
|
||||
drawtriangle=$(uci get oled.@oled[0].drawtriangle)
|
||||
filltriangle=$(uci get oled.@oled[0].filltriangle)
|
||||
displaybitmap=$(uci get oled.@oled[0].displaybitmap)
|
||||
displayinvertnormal=$(uci get oled.@oled[0].displayinvertnormal)
|
||||
drawbitmapeg=$(uci get oled.@oled[0].drawbitmapeg)
|
||||
rotate=$(uci get oled.@oled[0].rotate)
|
||||
scroll=$(uci get oled.@oled[0].scroll)
|
||||
text=$(uci get oled.@oled[0].text)
|
||||
netsource=$(uci get oled.@oled[0].netsource)
|
||||
path=$(uci get oled.@oled[0].path)
|
||||
config_get param "$section" date
|
||||
[ "$param" == "1" ] && procd_append_param command --displayDate
|
||||
|
||||
if [ ${netspeed} -eq 1 ] && [ -z "$(pgrep -f netspeed)" ]; then
|
||||
nohup /usr/sbin/netspeed ${netsource} >/dev/null 2>&1 &
|
||||
config_get param "$section" lanip
|
||||
[ "$param" == "1" ] && procd_append_param command --displayIp
|
||||
config_get param "$section" ipifname
|
||||
if [ "$param" != "" ];then
|
||||
procd_append_param command --ipIfName="$param"
|
||||
else
|
||||
[ -n "$(pgrep -f /usr/sbin/netspeed)" ] && kill -9 $(pgrep -f /usr/sbin/netspeed) 2>&1 >/dev/null
|
||||
rm -f /tmp/netspeed
|
||||
procd_append_param command --ipIfName="br-lan"
|
||||
fi
|
||||
#logger -t "oled" "${PROG} ${date} ${lanip} ${cputemp} ${cpufreq} ${netspeed} ${time} ${drawline} ${drawrect} ${fillrect} ${drawcircle} ${drawroundrect} ${fillroundrect} ${drawtriangle} ${filltriangle} ${displaybitmap} ${displayinvertnormal} ${drawbitmapeg} ${scroll} ${text} ${netsource} ${path} ${rotate} 1"
|
||||
#nohup ${PROG} ${date} ${lanip} ${cputemp} ${cpufreq} ${netspeed} ${time} ${drawline} ${drawrect} ${fillrect} ${drawcircle} ${drawroundrect} ${fillroundrect} ${drawtriangle} ${filltriangle} ${displaybitmap} ${displayinvertnormal} ${drawbitmapeg} ${scroll} "${text}" "${netsource}" "${path}" ${rotate} 1 > /dev/null 2>&1 &
|
||||
nohup ${PROG} eth0 /dev/i2c-0 > /dev/null 2>&1 &
|
||||
|
||||
config_get param "$section" cputemp
|
||||
[ "$param" == "1" ] && procd_append_param command --displayCpuTemp
|
||||
|
||||
config_get param "$section" cpufreq
|
||||
[ "$param" == "1" ] && procd_append_param command --displayCpuFreq
|
||||
|
||||
config_get param "$section" netspeed
|
||||
[ "$param" == "1" ] && procd_append_param command --displayNetSpeed
|
||||
# default eth0
|
||||
config_get param "$section" netsource
|
||||
[ "$param" != "" ] && procd_append_param command --speedIfName="$param"
|
||||
|
||||
# default 60
|
||||
config_get param "$section" time
|
||||
[ "$param" != "" ] && procd_append_param command --interval="$param"
|
||||
|
||||
config_get param "$section" drawline
|
||||
[ "$param" == "1" ] && procd_append_param command --drawLine
|
||||
|
||||
config_get param "$section" drawrect
|
||||
[ "$param" == "1" ] && procd_append_param command --drawRect
|
||||
|
||||
config_get param "$section" fillrect
|
||||
[ "$param" == "1" ] && procd_append_param command --fillRect
|
||||
|
||||
config_get param "$section" drawcircle
|
||||
[ "$param" == "1" ] && procd_append_param command --drawCircle
|
||||
|
||||
config_get param "$section" drawroundrect
|
||||
[ "$param" == "1" ] && procd_append_param command --drawRoundRect
|
||||
|
||||
config_get param "$section" fillroundrect
|
||||
[ "$param" == "1" ] && procd_append_param command --fillRoundRect
|
||||
|
||||
config_get param "$section" drawtriangle
|
||||
[ "$param" == "1" ] && procd_append_param command --drawTriangle
|
||||
|
||||
config_get param "$section" filltriangle
|
||||
[ "$param" == "1" ] && procd_append_param command --fillTriangle
|
||||
|
||||
config_get param "$section" displaybitmap
|
||||
[ "$param" == "1" ] && procd_append_param command --displayBitmap
|
||||
|
||||
config_get param "$section" drawbitmapeg
|
||||
[ "$param" == "1" ] && procd_append_param command --drawBitmapEg
|
||||
|
||||
config_get param "$section" displayinvertnormal
|
||||
[ "$param" == "1" ] && procd_append_param command --displayInvertNormal
|
||||
|
||||
config_get param "$section" rotate
|
||||
[ "$param" == "1" ] && procd_append_param command --rotate
|
||||
|
||||
config_get param "$section" scroll
|
||||
[ "$param" == "1" ] && procd_append_param command --scroll
|
||||
config_get param "$section" text
|
||||
[ "$param" != "" ] && procd_append_param command --scrollText="$param"
|
||||
|
||||
procd_set_param respawn
|
||||
# oled收到 SIGTERM 信号后,会跑完最后一个显示效果再退出,因此需要一定的等待时间
|
||||
# 否则进程被 SIGKILL 强杀,会导致显示屏不能清空。
|
||||
procd_set_param term_timeout 30 # wait before sending SIGKILL
|
||||
procd_close_instance
|
||||
}
|
||||
|
||||
restart() {
|
||||
enabled=$(uci get oled.@oled[0].enable)
|
||||
pgrep -f ${PROG} >/dev/null
|
||||
if [ $? -eq 0 ]; then
|
||||
if [ $enabled -eq 1 ]; then
|
||||
autoswitch=$(uci get oled.@oled[0].autoswitch)
|
||||
from=$(uci get oled.@oled[0].from)
|
||||
to=$(uci get oled.@oled[0].to)
|
||||
if [ ${autoswitch} -eq 1 ]; then
|
||||
hour=$(date +"%H")
|
||||
min=$(date +"%M")
|
||||
ihour=`expr $hour + 0`
|
||||
imin=`expr $min + 0`
|
||||
now=$(($ihour*60+$imin))
|
||||
if [[ $now -lt $from || $now -gt $to ]]; then
|
||||
stop
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
|
||||
date=$(uci get oled.@oled[0].date)
|
||||
lanip=$(uci get oled.@oled[0].lanip)
|
||||
cputemp=$(uci get oled.@oled[0].cputemp)
|
||||
cpufreq=$(uci get oled.@oled[0].cpufreq)
|
||||
netspeed=$(uci get oled.@oled[0].netspeed)
|
||||
time=$(uci get oled.@oled[0].time)
|
||||
drawline=$(uci get oled.@oled[0].drawline)
|
||||
drawrect=$(uci get oled.@oled[0].drawrect)
|
||||
fillrect=$(uci get oled.@oled[0].fillrect)
|
||||
drawcircle=$(uci get oled.@oled[0].drawcircle)
|
||||
drawroundrect=$(uci get oled.@oled[0].drawroundrect)
|
||||
fillroundrect=$(uci get oled.@oled[0].fillroundrect)
|
||||
drawtriangle=$(uci get oled.@oled[0].drawtriangle)
|
||||
filltriangle=$(uci get oled.@oled[0].filltriangle)
|
||||
displaybitmap=$(uci get oled.@oled[0].displaybitmap)
|
||||
displayinvertnormal=$(uci get oled.@oled[0].displayinvertnormal)
|
||||
drawbitmapeg=$(uci get oled.@oled[0].drawbitmapeg)
|
||||
rotate=$(uci get oled.@oled[0].rotate)
|
||||
scroll=$(uci get oled.@oled[0].scroll)
|
||||
text=$(uci get oled.@oled[0].text)
|
||||
netsource=$(uci get oled.@oled[0].netsource)
|
||||
path=$(uci get oled.@oled[0].path)
|
||||
vpsip=0
|
||||
intfstatus=0
|
||||
|
||||
[ -n "$(pgrep /usr/bin/oled)" ] && kill -9 $(pgrep /usr/bin/oled) 2>&1 >/dev/null
|
||||
[ -n "$(pgrep -f /usr/sbin/netspeed)" ] && kill -9 $(pgrep -f /usr/sbin/netspeed) 2>&1 >/dev/null
|
||||
|
||||
if [ ${netspeed} -eq 1 ]; then
|
||||
nohup /usr/sbin/netspeed ${netsource} >/dev/null 2>&1 &
|
||||
else
|
||||
#kill -9 $(pgrep -f /usr/sbin/netspeed)
|
||||
rm -f /tmp/netspeed
|
||||
fi
|
||||
#nohup ${PROG} ${date} ${lanip} ${cputemp} ${cpufreq} ${netspeed} ${time} ${drawline} ${drawrect} ${fillrect} ${drawcircle} ${drawroundrect} ${fillroundrect} ${drawtriangle} ${filltriangle} ${displaybitmap} ${displayinvertnormal} ${drawbitmapeg} ${scroll} "${text}" "${netsource}" "${path}" ${rotate} 0 > /dev/null 2>&1 &
|
||||
#nohup ${PROG} 1 1 1 1 0 60 0 0 0 0 0 0 0 0 0 0 0 0 OPENWRT eth0 /dev/i2c-0 0 1 1 1 > /dev/null 2>&1 &
|
||||
nohup ${PROG} eth0 /dev/i2c-0 > /dev/null 2>&1 &
|
||||
else
|
||||
stop
|
||||
fi
|
||||
else
|
||||
if [ $enabled -eq 1 ]; then
|
||||
start
|
||||
else
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
boot() {
|
||||
start
|
||||
service_triggers() {
|
||||
procd_add_reload_trigger "oled"
|
||||
}
|
||||
|
|
18
luci-app-ouad/root/etc/uci-defaults/oled
Executable file → Normal file
18
luci-app-ouad/root/etc/uci-defaults/oled
Executable file → Normal file
|
@ -1,16 +1,23 @@
|
|||
#!/bin/sh
|
||||
|
||||
uci_write_config() {
|
||||
uci -q set oled.@oled[0].path="$1"
|
||||
uci -q set oled.@oled[0].rotate="$2"
|
||||
uci -q commit oled
|
||||
[[ `uci -q get oled.@oled[0].showmenu` -eq 1 ]] && return
|
||||
uci -q batch <<-EOF >/dev/null
|
||||
set oled.@oled[0].showmenu="1"
|
||||
set oled.@oled[0].enable="1"
|
||||
set oled.@oled[0].path="$1"
|
||||
set oled.@oled[0].rotate="$2"
|
||||
set oled.@oled[0].netspeed="$3"
|
||||
set oled.@oled[0].netsource="$4"
|
||||
commit oled
|
||||
EOF
|
||||
}
|
||||
|
||||
. /lib/functions/system.sh
|
||||
|
||||
case "$(board_name)" in
|
||||
hinlink,opc-h69k)
|
||||
uci_write_config '/dev/i2c-5' 1
|
||||
"hinlink,opc-h69k"|"hlink,opc-h69k"|"hlink,h69k")
|
||||
uci_write_config '/dev/i2c-5' 1 1 eth0
|
||||
;;
|
||||
esac
|
||||
|
||||
|
@ -21,5 +28,6 @@ uci -q batch <<-EOF >/dev/null
|
|||
commit ucitrack
|
||||
EOF
|
||||
|
||||
sed -e "/\/etc\/init\.d\/oled/d" -i /etc/crontabs/root && /etc/init.d/cron reload
|
||||
rm -rf /tmp/luci-*
|
||||
exit 0
|
||||
|
|
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
|
||||
...
|
||||
|
1030
luci-app-ouad/src/Example_Code/Main.c
Executable file → Normal file
1030
luci-app-ouad/src/Example_Code/Main.c
Executable file → Normal file
File diff suppressed because it is too large
Load diff
1236
luci-app-ouad/src/Example_Code/example_app.c
Executable file → Normal file
1236
luci-app-ouad/src/Example_Code/example_app.c
Executable file → Normal file
File diff suppressed because it is too large
Load diff
22
luci-app-ouad/src/Example_Code/example_app.h
Executable file → Normal file
22
luci-app-ouad/src/Example_Code/example_app.h
Executable file → Normal file
|
@ -1,7 +1,10 @@
|
|||
#define CENTER 0 //single item display
|
||||
#define SPLIT 1 //two items
|
||||
#define CENTER 0 // single item display
|
||||
#define SPLIT 1 // two items
|
||||
#define MERGE 2
|
||||
#define FULL 3
|
||||
#define KB_BYTES (1024)
|
||||
#define MB_BYTES (1024 * 1024)
|
||||
#define GB_BYTES (1024 * 1024 * 1024)
|
||||
|
||||
void testdrawline();
|
||||
void testdrawrect();
|
||||
|
@ -16,20 +19,15 @@ void testscrolltext(char *str);
|
|||
void display_texts();
|
||||
void display_bitmap();
|
||||
void display_invert_normal();
|
||||
void testdrawbitmap(const unsigned char *bitmap, unsigned char w, unsigned char h);
|
||||
void testdrawbitmap(const unsigned char *bitmap, unsigned char w,
|
||||
unsigned char h);
|
||||
void testdrawbitmap_eg();
|
||||
void deeplyembedded_credits();
|
||||
void testprintinfo();
|
||||
void testinfo1();
|
||||
void testinfo2();
|
||||
void testdate(int mode, int y);
|
||||
void testlanip(int mode, int y);
|
||||
void testvpsip(int mode, int y);
|
||||
void testip(int mode, int y, char *ifname);
|
||||
void testcpufreq(int mode, int y);
|
||||
void testcputemp(int mode, int y);
|
||||
void testnetspeed(int mode, int y);
|
||||
void testintfstatus(int mode, int y);
|
||||
void testnetspeed(int mode, int y, unsigned long int rx, unsigned long int tx);
|
||||
void testcpu(int y);
|
||||
void display_bitmap_uploaddownload();
|
||||
|
||||
|
||||
char *get_ip_addr(char *ifname);
|
||||
|
|
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
|
||||
...
|
||||
|
124
luci-app-ouad/src/I2C_Library/I2C.c
Executable file → Normal file
124
luci-app-ouad/src/I2C_Library/I2C.c
Executable file → Normal file
|
@ -25,17 +25,18 @@ SOFTWARE.
|
|||
*
|
||||
* Created on : September 19, 2017
|
||||
* Author : Vinay Divakar
|
||||
* Description : This is an I2C Library for the BeagleBone that consists of the API's to support the standard
|
||||
* Description : This is an I2C Library for the BeagleBone that consists of the
|
||||
API's to support the standard
|
||||
* I2C operations.
|
||||
* Website : www.deeplyembedded.org
|
||||
*/
|
||||
|
||||
/*Libs Includes*/
|
||||
#include<stdio.h>
|
||||
#include<fcntl.h>
|
||||
#include<sys/ioctl.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <linux/i2c-dev.h>
|
||||
#include <stdio.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <unistd.h>
|
||||
// heuristic to guess what version of i2c-dev.h we have:
|
||||
// the one installed with `apt-get install libi2c-dev`
|
||||
// would conflict with linux/i2c.h, while the stock
|
||||
|
@ -52,7 +53,6 @@ typedef char i2c_char_t;
|
|||
/* Header Files */
|
||||
#include "I2C.h"
|
||||
|
||||
|
||||
/* Exposed objects for i2c-x */
|
||||
I2C_DeviceT I2C_DEV_2;
|
||||
|
||||
|
@ -63,30 +63,26 @@ I2C_DeviceT I2C_DEV_2;
|
|||
* Params @i2c_dev_path: Path to the I2C device
|
||||
* @fd: Variable to store the file handler
|
||||
****************************************************************/
|
||||
int Open_device(char *i2c_dev_path, int *fd)
|
||||
{
|
||||
if((*fd = open(i2c_dev_path, O_RDWR))<0)
|
||||
int Open_device(char *i2c_dev_path, int *fd) {
|
||||
if ((*fd = open(i2c_dev_path, O_RDWR)) < 0)
|
||||
return -1;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/****************************************************************
|
||||
* Function Name : Close_device
|
||||
* Description : Closes the I2C device in use
|
||||
* Returns : 0 on success, -1 on failure
|
||||
* Params : @fd: file descriptor
|
||||
****************************************************************/
|
||||
int Close_device(int fd)
|
||||
{
|
||||
if(close(fd) == -1)
|
||||
int Close_device(int fd) {
|
||||
if (close(fd) == -1)
|
||||
return -1;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/****************************************************************
|
||||
* Function Name : Set_slave_addr
|
||||
* Description : Connect to the Slave device
|
||||
|
@ -95,15 +91,13 @@ int Close_device(int fd)
|
|||
* @slave_addr: Address of the slave device to
|
||||
* talk to.
|
||||
****************************************************************/
|
||||
int Set_slave_addr(int fd, unsigned char slave_addr)
|
||||
{
|
||||
if(ioctl(fd, I2C_SLAVE, slave_addr) < 0)
|
||||
int Set_slave_addr(int fd, unsigned char slave_addr) {
|
||||
if (ioctl(fd, I2C_SLAVE, slave_addr) < 0)
|
||||
return -1;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/****************************************************************
|
||||
* Function Name : i2c_write
|
||||
* Description : Write a byte on SDA
|
||||
|
@ -111,17 +105,15 @@ int Set_slave_addr(int fd, unsigned char slave_addr)
|
|||
* Params @fd: File descriptor
|
||||
* @data: data to write on SDA
|
||||
****************************************************************/
|
||||
int i2c_write(int fd, unsigned char data)
|
||||
{
|
||||
int i2c_write(int fd, unsigned char data) {
|
||||
int ret = 0;
|
||||
ret = write(fd, &data, I2C_ONE_BYTE);
|
||||
if((ret == -1) || (ret != 1))
|
||||
if ((ret == -1) || (ret != 1))
|
||||
return -1;
|
||||
else
|
||||
return(ret);
|
||||
return (ret);
|
||||
}
|
||||
|
||||
|
||||
/****************************************************************
|
||||
* Function Name : i2c_read
|
||||
* Description : Read a byte on SDA
|
||||
|
@ -130,18 +122,14 @@ int i2c_write(int fd, unsigned char data)
|
|||
* @read_data: Points to the variable that stores
|
||||
* the read data byte
|
||||
****************************************************************/
|
||||
int i2c_read(int fd, unsigned char *read_data)
|
||||
{
|
||||
int i2c_read(int fd, unsigned char *read_data) {
|
||||
int ret = 0;
|
||||
ret = read(fd, &read_data, I2C_ONE_BYTE);
|
||||
if(ret == -1)
|
||||
perror("I2C: Failed to read |");
|
||||
if(ret == 0)
|
||||
perror("I2C: End of FILE |");
|
||||
return(ret);
|
||||
if (ret == -1) perror("I2C: Failed to read |");
|
||||
if (ret == 0) perror("I2C: End of FILE |");
|
||||
return (ret);
|
||||
}
|
||||
|
||||
|
||||
/****************************************************************
|
||||
* Function Name : i2c_read_register
|
||||
* Description : Read a single register of the slave device
|
||||
|
@ -151,23 +139,19 @@ int i2c_read(int fd, unsigned char *read_data)
|
|||
* @read_data: Points to the variable that stores
|
||||
* the read data byte
|
||||
****************************************************************/
|
||||
int i2c_read_register(int fd, unsigned char read_addr, unsigned char *read_data)
|
||||
{
|
||||
int i2c_read_register(int fd, unsigned char read_addr,
|
||||
unsigned char *read_data) {
|
||||
int ret = 0;
|
||||
if(i2c_write(fd, read_addr) == -1)
|
||||
{
|
||||
if (i2c_write(fd, read_addr) == -1) {
|
||||
perror("I2C: Failed to write |");
|
||||
return -1;
|
||||
}
|
||||
ret = read(fd, &read_data, I2C_ONE_BYTE);
|
||||
if(ret == -1)
|
||||
perror("I2C: Failed to read |");
|
||||
if(ret == 0)
|
||||
perror("I2C: End of FILE |");
|
||||
return(ret);
|
||||
if (ret == -1) perror("I2C: Failed to read |");
|
||||
if (ret == 0) perror("I2C: End of FILE |");
|
||||
return (ret);
|
||||
}
|
||||
|
||||
|
||||
/****************************************************************
|
||||
* Function Name : i2c_read_registers
|
||||
* Description : Read a multiple registers on the slave device
|
||||
|
@ -179,23 +163,18 @@ int i2c_read_register(int fd, unsigned char read_addr, unsigned char *read_data)
|
|||
* @buff_Ptr: Buffer to store the read bytes
|
||||
****************************************************************/
|
||||
int i2c_read_registers(int fd, int num, unsigned char starting_addr,
|
||||
unsigned char *buff_Ptr)
|
||||
{
|
||||
unsigned char *buff_Ptr) {
|
||||
int ret = 0;
|
||||
if(i2c_write(fd, starting_addr) == -1)
|
||||
{
|
||||
if (i2c_write(fd, starting_addr) == -1) {
|
||||
perror("I2C: Failed to write |");
|
||||
return -1;
|
||||
}
|
||||
ret = read(fd, buff_Ptr, num);
|
||||
if(ret == -1)
|
||||
perror("I2C: Failed to read |");
|
||||
if(ret == 0)
|
||||
perror("I2C: End of FILE |");
|
||||
return(ret);
|
||||
if (ret == -1) perror("I2C: Failed to read |");
|
||||
if (ret == 0) perror("I2C: End of FILE |");
|
||||
return (ret);
|
||||
}
|
||||
|
||||
|
||||
/****************************************************************
|
||||
* Function Name : i2c_multiple_writes
|
||||
* Description : Write multiple bytes on SDA
|
||||
|
@ -205,17 +184,15 @@ int i2c_read_registers(int fd, int num, unsigned char starting_addr,
|
|||
* @Ptr_buff: Pointer to the buffer containing the
|
||||
* bytes to be written on the SDA
|
||||
****************************************************************/
|
||||
int i2c_multiple_writes(int fd, int num, unsigned char *Ptr_buff)
|
||||
{
|
||||
int i2c_multiple_writes(int fd, int num, unsigned char *Ptr_buff) {
|
||||
int ret = 0;
|
||||
ret = write(fd, Ptr_buff, num);
|
||||
if((ret == -1) || (ret != num))
|
||||
if ((ret == -1) || (ret != num))
|
||||
return -1;
|
||||
else
|
||||
return(ret);
|
||||
return (ret);
|
||||
}
|
||||
|
||||
|
||||
/****************************************************************
|
||||
* Function Name : i2c_write_register
|
||||
* Description : Write a control byte or byte to a register
|
||||
|
@ -226,20 +203,19 @@ int i2c_multiple_writes(int fd, int num, unsigned char *Ptr_buff)
|
|||
* @val: Command or value to be written in the
|
||||
* addressed register
|
||||
****************************************************************/
|
||||
int i2c_write_register(int fd, unsigned char reg_addr_or_cntrl, unsigned char val)
|
||||
{
|
||||
int i2c_write_register(int fd, unsigned char reg_addr_or_cntrl,
|
||||
unsigned char val) {
|
||||
unsigned char buff[2];
|
||||
int ret = 0;
|
||||
buff[0] = reg_addr_or_cntrl;
|
||||
buff[1] = val;
|
||||
ret = write(fd, buff, I2C_TWO_BYTES);
|
||||
if((ret == -1) || (ret != I2C_TWO_BYTES))
|
||||
if ((ret == -1) || (ret != I2C_TWO_BYTES))
|
||||
return -1;
|
||||
else
|
||||
return(ret);
|
||||
return (ret);
|
||||
}
|
||||
|
||||
|
||||
/****************************************************************
|
||||
* Function Name : config_i2c_struct
|
||||
* Description : Initialize the I2C device structure
|
||||
|
@ -248,14 +224,13 @@ int i2c_write_register(int fd, unsigned char reg_addr_or_cntrl, unsigned char va
|
|||
* @slave_addr: Slave device address
|
||||
* @i2c_dev: Pointer to the device structure
|
||||
****************************************************************/
|
||||
void config_i2c_struct(char *i2c_dev_path, unsigned char slave_addr, I2C_DevicePtr i2c_dev)
|
||||
{
|
||||
void config_i2c_struct(char *i2c_dev_path, unsigned char slave_addr,
|
||||
I2C_DevicePtr i2c_dev) {
|
||||
i2c_dev->i2c_dev_path = i2c_dev_path;
|
||||
i2c_dev->fd_i2c = 0;
|
||||
i2c_dev->i2c_slave_addr = slave_addr;
|
||||
}
|
||||
|
||||
|
||||
/****************************************************************
|
||||
* Function Name : init_i2c_dev
|
||||
* Description : Connect the i2c bus to the slave device
|
||||
|
@ -263,19 +238,26 @@ void config_i2c_struct(char *i2c_dev_path, unsigned char slave_addr, I2C_DeviceP
|
|||
* Params @i2c_path: the path to the device
|
||||
* @slave_addr: Slave device address
|
||||
****************************************************************/
|
||||
int init_i2c_dev(const char* i2c_path, unsigned char slave_address)
|
||||
{
|
||||
config_i2c_struct((char*)i2c_path, slave_address, &I2C_DEV_2);
|
||||
if(Open_device(I2C_DEV_2.i2c_dev_path, &I2C_DEV_2.fd_i2c) == -1)
|
||||
{
|
||||
int init_i2c_dev(const char *i2c_path, unsigned char slave_address) {
|
||||
config_i2c_struct((char *)i2c_path, slave_address, &I2C_DEV_2);
|
||||
if (Open_device(I2C_DEV_2.i2c_dev_path, &I2C_DEV_2.fd_i2c) == -1) {
|
||||
perror("I2C: Failed to open device |");
|
||||
return -1;
|
||||
}
|
||||
if(Set_slave_addr(I2C_DEV_2.fd_i2c, I2C_DEV_2.i2c_slave_addr) == -1)
|
||||
{
|
||||
if (Set_slave_addr(I2C_DEV_2.fd_i2c, I2C_DEV_2.i2c_slave_addr) == -1) {
|
||||
perror("I2C: Failed to connect to slave device |");
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/****************************************************************
|
||||
* Function Name : Close_I2C
|
||||
* Description : Close I2C Connect
|
||||
* Returns : 0 on success, -1 on failure
|
||||
* Params : non
|
||||
****************************************************************/
|
||||
extern int Close_I2C() {
|
||||
return Close_device(I2C_DEV_2.fd_i2c);
|
||||
}
|
||||
|
|
38
luci-app-ouad/src/I2C_Library/I2C.h
Executable file → Normal file
38
luci-app-ouad/src/I2C_Library/I2C.h
Executable file → Normal file
|
@ -26,29 +26,29 @@ SOFTWARE.
|
|||
* Created on : Sep 4, 2017
|
||||
* Author : Vinay Divakar
|
||||
* Website : www.deeplyembedded.org
|
||||
*/
|
||||
*/
|
||||
|
||||
#ifndef I2C_H_
|
||||
#define I2C_H_
|
||||
|
||||
#include<stdint.h>
|
||||
#include <stdint.h>
|
||||
|
||||
/* No. of bytes per transaction */
|
||||
#define I2C_ONE_BYTE 1
|
||||
#define I2C_TWO_BYTES 2
|
||||
#define I2C_THREE_BYTES 3
|
||||
#define I2C_ONE_BYTE 1
|
||||
#define I2C_TWO_BYTES 2
|
||||
#define I2C_THREE_BYTES 3
|
||||
|
||||
/*Definitions specific to i2c-x */
|
||||
#define I2C_DEV0_PATH "/dev/i2c-0"
|
||||
#define I2C_DEV1_PATH "/dev/i2c-1"
|
||||
#define I2C_DEV2_PATH "/dev/i2c-2"
|
||||
#define I2C_DEV0_PATH "/dev/i2c-0"
|
||||
#define I2C_DEV1_PATH "/dev/i2c-1"
|
||||
#define I2C_DEV2_PATH "/dev/i2c-2"
|
||||
|
||||
/*I2C device configuration structure*/
|
||||
typedef struct{
|
||||
char* i2c_dev_path;
|
||||
typedef struct {
|
||||
char *i2c_dev_path;
|
||||
int fd_i2c;
|
||||
unsigned char i2c_slave_addr;
|
||||
}I2C_DeviceT, *I2C_DevicePtr;
|
||||
} I2C_DeviceT, *I2C_DevicePtr;
|
||||
|
||||
/* Exposed Generic I2C Functions */
|
||||
extern int Open_device(char *i2c_dev_path, int *fd);
|
||||
|
@ -56,14 +56,20 @@ extern int Close_device(int fd);
|
|||
extern int Set_slave_addr(int fd, unsigned char slave_addr);
|
||||
extern int i2c_write(int fd, unsigned char data);
|
||||
extern int i2c_read(int fd, unsigned char *read_data);
|
||||
extern int i2c_read_register(int fd, unsigned char read_addr, unsigned char *read_data);
|
||||
extern int i2c_read_register(int fd, unsigned char read_addr,
|
||||
unsigned char *read_data);
|
||||
extern int i2c_read_registers(int fd, int num, unsigned char starting_addr,
|
||||
unsigned char *buff_Ptr);
|
||||
extern void config_i2c_struct(char *i2c_dev_path, unsigned char slave_addr, I2C_DevicePtr i2c_dev);
|
||||
unsigned char *buff_Ptr);
|
||||
extern void config_i2c_struct(char *i2c_dev_path, unsigned char slave_addr,
|
||||
I2C_DevicePtr i2c_dev);
|
||||
extern int i2c_multiple_writes(int fd, int num, unsigned char *Ptr_buff);
|
||||
extern int i2c_write_register(int fd, unsigned char reg_addr_or_cntrl, unsigned char val);
|
||||
extern int i2c_write_register(int fd, unsigned char reg_addr_or_cntrl,
|
||||
unsigned char val);
|
||||
|
||||
/* Exposed I2C-x Specific Functions */
|
||||
extern int init_i2c_dev(const char* i2c_path, unsigned char slave_address);
|
||||
extern int init_i2c_dev(const char *i2c_path, unsigned char slave_address);
|
||||
|
||||
/* Close I2C connect */
|
||||
extern int Close_I2C();
|
||||
|
||||
#endif /* I2C_H_ */
|
||||
|
|
0
luci-app-ouad/src/LICENSE
Executable file → Normal file
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
|
||||
LD = gcc
|
||||
endif
|
||||
ifndef LD
|
||||
LD = ld
|
||||
endif
|
||||
|
||||
SOURCES = SSD1306_OLED_Library/SSD1306_OLED.c Example_Code/Main.c Example_Code/example_app.c I2C_Library/I2C.c
|
||||
SOURCES = SSD1306_OLED_Library/SSD1306_OLED.c Example_Code/main.c Example_Code/example_app.c I2C_Library/I2C.c
|
||||
OBJS := $(SOURCES:.c=.o)
|
||||
CPPFLAGS := -I SSD1306_OLED_Library -I I2C_Library
|
||||
CFLAGS := -g
|
||||
ifndef CFLAGS
|
||||
CFLAGS := -O2
|
||||
endif
|
||||
LDFLAGS := -lpthread -lconfig
|
||||
|
||||
oled: $(OBJS)
|
||||
$(CC) $^ -o $@
|
||||
$(CC) $^ -o $@ $(LDFLAGS)
|
||||
|
||||
ssd1306: $(OBJS)
|
||||
$(CC) $^ -o $@ $(LDFLAGS) --static
|
||||
strip $@
|
||||
|
||||
clean:
|
||||
rm -rf oled $(OBJS)
|
||||
rm -rf oled ssd1306 $(OBJS)
|
||||
|
||||
compile: oled
|
||||
|
||||
|
|
0
luci-app-ouad/src/README.md
Executable file → Normal file
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
|
||||
...
|
||||
|
3163
luci-app-ouad/src/SSD1306_OLED_Library/SSD1306_OLED.c
Executable file → Normal file
3163
luci-app-ouad/src/SSD1306_OLED_Library/SSD1306_OLED.c
Executable file → Normal file
File diff suppressed because it is too large
Load diff
172
luci-app-ouad/src/SSD1306_OLED_Library/SSD1306_OLED.h
Executable file → Normal file
172
luci-app-ouad/src/SSD1306_OLED_Library/SSD1306_OLED.h
Executable file → Normal file
|
@ -35,33 +35,33 @@ SOFTWARE.
|
|||
#include <stdbool.h>
|
||||
|
||||
/* Find Min and Max - MACROS */
|
||||
#define MIN(a,b) (((a)<(b))?(a):(b))
|
||||
#define MAX(a,b) (((a)>(b))?(a):(b))
|
||||
#define MIN(a, b) (((a) < (b)) ? (a) : (b))
|
||||
#define MAX(a, b) (((a) > (b)) ? (a) : (b))
|
||||
|
||||
/* I2C Address of SSD1306 */
|
||||
#define SSD1306_OLED_ADDR 0x3C
|
||||
#define DISPLAY_BUFF_SIZE (SSD1306_LCDWIDTH*SSD1306_LCDHEIGHT/8)
|
||||
#define SSD1306_OLED_ADDR 0x3C
|
||||
#define DISPLAY_BUFF_SIZE (SSD1306_LCDWIDTH * SSD1306_LCDHEIGHT / 8)
|
||||
|
||||
/* COLOR MACROS */
|
||||
#define WHITE 1
|
||||
#define BLACK 0
|
||||
#define INVERSE 2
|
||||
#define WHITE 1
|
||||
#define BLACK 0
|
||||
#define INVERSE 2
|
||||
|
||||
/* Number output format */
|
||||
#define DEC 10
|
||||
#define HEX 16
|
||||
#define OCT 8
|
||||
#define BIN 2
|
||||
#define DEFAULT 0
|
||||
#define DEC 10
|
||||
#define HEX 16
|
||||
#define OCT 8
|
||||
#define BIN 2
|
||||
#define DEFAULT 0
|
||||
|
||||
/*D/C# bit is '0' indicating that following
|
||||
* byte is a command. '1' is for data
|
||||
*/
|
||||
#define SSD1306_CNTRL_CMD 0x00
|
||||
#define SSD1306_CNTRL_DATA 0x40
|
||||
#define SSD1306_CNTRL_CMD 0x00
|
||||
#define SSD1306_CNTRL_DATA 0x40
|
||||
|
||||
|
||||
/*-----------------------Enable the WxL of the Display ---------------------------*/
|
||||
/*-----------------------Enable the WxL of the Display
|
||||
* ---------------------------*/
|
||||
#define SSD1306_128_64
|
||||
//#define SSD1306_128_32
|
||||
//#define SSD1306_96_16
|
||||
|
@ -69,85 +69,87 @@ SOFTWARE.
|
|||
|
||||
/* LCD HxW i.e. 64x128 || WxL i.e. 128x64 */
|
||||
#if defined SSD1306_128_64
|
||||
#define SSD1306_LCDWIDTH 128
|
||||
#define SSD1306_LCDHEIGHT 64
|
||||
#define SSD1306_LCDWIDTH 128
|
||||
#define SSD1306_LCDHEIGHT 64
|
||||
#endif
|
||||
#if defined SSD1306_128_32
|
||||
#define SSD1306_LCDWIDTH 128
|
||||
#define SSD1306_LCDHEIGHT 32
|
||||
#define SSD1306_LCDWIDTH 128
|
||||
#define SSD1306_LCDHEIGHT 32
|
||||
#endif
|
||||
#if defined SSD1306_96_16
|
||||
#define SSD1306_LCDWIDTH 96
|
||||
#define SSD1306_LCDHEIGHT 16
|
||||
#define SSD1306_LCDWIDTH 96
|
||||
#define SSD1306_LCDHEIGHT 16
|
||||
#endif
|
||||
|
||||
/* SSD1306 Commands */
|
||||
#define SSD1306_DISPLAY_OFF 0xAE
|
||||
#define SSD1306_SET_DISP_CLK 0xD5
|
||||
#define SSD1306_SET_MULTIPLEX 0xA8
|
||||
#define SSD1306_SET_DISP_OFFSET 0xD3
|
||||
#define SSD1306_SET_DISP_START_LINE 0x40
|
||||
#define SSD1306_CONFIG_CHARGE_PUMP 0x8D
|
||||
#define SSD1306_SET_MEM_ADDR_MODE 0x20
|
||||
#define SSD1306_SEG_REMAP (0xA0 | 0x01)
|
||||
#define SSD1306_SEG_REMAP1 0xA0
|
||||
#define SSD1306_SET_COMSCANDEC 0xC8
|
||||
#define SSD1306_SET_COMSCANDEC1 0xC0
|
||||
#define SSD1306_SET_COMPINS 0xDA
|
||||
#define SSD1306_SET_CONTRAST 0x81
|
||||
#define SSD1306_SET_PRECHARGE 0xD9
|
||||
#define SSD1306_SET_VCOMDETECT 0xDB
|
||||
#define SSD1306_DISPLAYALLON_RESUME 0xA4
|
||||
#define SSD1306_NORMAL_DISPLAY 0xA6
|
||||
#define SSD1306_DISPLAYON 0xAF
|
||||
#define SSD1306_SET_COL_ADDR 0x21
|
||||
#define SSD1306_PAGEADDR 0x22
|
||||
#define SSD1306_INVERT_DISPLAY 0x01
|
||||
#define SSD1306_NORMALIZE_DISPLAY 0x00
|
||||
#define SSD1306_DISPLAY_OFF 0xAE
|
||||
#define SSD1306_SET_DISP_CLK 0xD5
|
||||
#define SSD1306_SET_MULTIPLEX 0xA8
|
||||
#define SSD1306_SET_DISP_OFFSET 0xD3
|
||||
#define SSD1306_SET_DISP_START_LINE 0x40
|
||||
#define SSD1306_CONFIG_CHARGE_PUMP 0x8D
|
||||
#define SSD1306_SET_MEM_ADDR_MODE 0x20
|
||||
#define SSD1306_SEG_REMAP (0xA0 | 0x01)
|
||||
#define SSD1306_SEG_REMAP1 0xA0
|
||||
#define SSD1306_SET_COMSCANDEC 0xC8
|
||||
#define SSD1306_SET_COMSCANDEC1 0xC0
|
||||
#define SSD1306_SET_COMPINS 0xDA
|
||||
#define SSD1306_SET_CONTRAST 0x81
|
||||
#define SSD1306_SET_PRECHARGE 0xD9
|
||||
#define SSD1306_SET_VCOMDETECT 0xDB
|
||||
#define SSD1306_DISPLAYALLON_RESUME 0xA4
|
||||
#define SSD1306_NORMAL_DISPLAY 0xA6
|
||||
#define SSD1306_DISPLAYON 0xAF
|
||||
#define SSD1306_SET_COL_ADDR 0x21
|
||||
#define SSD1306_PAGEADDR 0x22
|
||||
#define SSD1306_INVERT_DISPLAY 0x01
|
||||
#define SSD1306_NORMALIZE_DISPLAY 0x00
|
||||
|
||||
/* SDD1306 Scroll Commands */
|
||||
#define SSD1306_SET_VERTICAL_SCROLL_AREA 0xA3
|
||||
#define SSD1306_ACTIVATE_SCROLL 0x2F
|
||||
#define SSD1306_DEACTIVATE_SCROLL 0x2E
|
||||
#define SSD1306_RIGHT_HORIZONTAL_SCROLL 0x26
|
||||
#define SSD1306_LEFT_HORIZONTAL_SCROLL 0x27
|
||||
#define SSD1306_VERTICAL_AND_RIGHT_HORIZONTAL_SCROLL 0x29
|
||||
#define SSD1306_VERTICAL_AND_LEFT_HORIZONTAL_SCROLL 0x2A
|
||||
#define SSD1306_INVERTDISPLAY 0xA7
|
||||
#define SSD1306_SET_VERTICAL_SCROLL_AREA 0xA3
|
||||
#define SSD1306_ACTIVATE_SCROLL 0x2F
|
||||
#define SSD1306_DEACTIVATE_SCROLL 0x2E
|
||||
#define SSD1306_RIGHT_HORIZONTAL_SCROLL 0x26
|
||||
#define SSD1306_LEFT_HORIZONTAL_SCROLL 0x27
|
||||
#define SSD1306_VERTICAL_AND_RIGHT_HORIZONTAL_SCROLL 0x29
|
||||
#define SSD1306_VERTICAL_AND_LEFT_HORIZONTAL_SCROLL 0x2A
|
||||
#define SSD1306_INVERTDISPLAY 0xA7
|
||||
|
||||
/* SSD1306 Configuration Commands */
|
||||
#define SSD1306_DISPCLK_DIV 0x80
|
||||
#define SSD1306_DISPCLK_DIV 0x80
|
||||
#if defined SSD1306_128_64
|
||||
#define SSD1306_MULT_64 0x3F
|
||||
#define SSD1306_MULT_64 0x3F
|
||||
#endif
|
||||
#if defined SSD1306_128_32
|
||||
#define SSD1306_MULT_64 0x1F
|
||||
#define SSD1306_MULT_64 0x1F
|
||||
#endif
|
||||
#define SSD1306_MULT_64 0x1F
|
||||
#define SSD1306_DISP_OFFSET_VAL 0x00
|
||||
#define SSD1306_COL_START_ADDR 0x00 //Reset to = 0
|
||||
#define SSD1306_COL_END_ADDR (SSD1306_LCDWIDTH - 1) //Reset to = 127
|
||||
#define SSD1306_PG_START_ADDR 0x00
|
||||
#define SSD1306_PG_END_ADDR 7
|
||||
#define SSD1306_CHARGE_PUMP_EN 0x14
|
||||
#define SSD1306_MULT_64 0x1F
|
||||
#define SSD1306_DISP_OFFSET_VAL 0x00
|
||||
#define SSD1306_COL_START_ADDR 0x00 // Reset to = 0
|
||||
#define SSD1306_COL_END_ADDR (SSD1306_LCDWIDTH - 1) // Reset to = 127
|
||||
#define SSD1306_PG_START_ADDR 0x00
|
||||
#define SSD1306_PG_END_ADDR 7
|
||||
#define SSD1306_CHARGE_PUMP_EN 0x14
|
||||
#if defined SSD1306_128_64
|
||||
#define SSD1306_CONFIG_COM_PINS 0x12
|
||||
#define SSD1306_CONFIG_COM_PINS 0x12
|
||||
#endif
|
||||
#if defined SSD1306_128_32
|
||||
#define SSD1306_CONFIG_COM_PINS 0x02
|
||||
#define SSD1306_CONFIG_COM_PINS 0x02
|
||||
#endif
|
||||
#define SSD1306_CONTRAST_VAL 0xCF //207
|
||||
#define SSD1306_PRECHARGE_VAL 0xF1
|
||||
#define SSD1306_VCOMH_VAL 0x40
|
||||
#define SSD1306_MULT_DAT (SSD1306_LCDHEIGHT - 1)
|
||||
#define SSD1306_HOR_MM 0x00
|
||||
#define SSD1306_CONTRAST_VAL 0xCF // 207
|
||||
#define SSD1306_PRECHARGE_VAL 0xF1
|
||||
#define SSD1306_VCOMH_VAL 0x40
|
||||
#define SSD1306_MULT_DAT (SSD1306_LCDHEIGHT - 1)
|
||||
#define SSD1306_HOR_MM 0x00
|
||||
|
||||
/*SSD1306 Display API's */
|
||||
extern void clearDisplay();
|
||||
extern void display_Init_seq();
|
||||
extern void Display();
|
||||
extern void Init_Col_PG_addrs(unsigned char col_start_addr, unsigned char col_end_addr,
|
||||
unsigned char pg_start_addr, unsigned char pg_end_addr);
|
||||
extern void Init_Col_PG_addrs(unsigned char col_start_addr,
|
||||
unsigned char col_end_addr,
|
||||
unsigned char pg_start_addr,
|
||||
unsigned char pg_end_addr);
|
||||
extern void setRotation(unsigned char x);
|
||||
extern void startscrollright(unsigned char start, unsigned char stop);
|
||||
extern void startscrollleft(unsigned char start, unsigned char stop);
|
||||
|
@ -159,29 +161,40 @@ extern short getCursorX();
|
|||
extern short getCursorY();
|
||||
extern unsigned char getRotation();
|
||||
extern void invertDisplay(unsigned char i);
|
||||
extern void display_rotate();
|
||||
extern void display_normal();
|
||||
|
||||
/*SSD1306 Graphics Handling API's */
|
||||
extern signed char drawPixel(short x, short y, short color);
|
||||
extern void writeLine(short x0, short y0, short x1, short y1, short color);
|
||||
extern void drawCircleHelper( short x0, short y0, short r, unsigned char cornername, short color);
|
||||
extern void drawCircleHelper(short x0, short y0, short r,
|
||||
unsigned char cornername, short color);
|
||||
extern void drawLine(short x0, short y0, short x1, short y1, short color);
|
||||
extern void drawRect(short x, short y, short w, short h, short color);
|
||||
extern void fillRect(short x, short y, short w, short h, short color);
|
||||
extern void drawCircle(short x0, short y0, short r, short color);
|
||||
extern void fillCircleHelper(short x0, short y0, short r, unsigned char cornername, short delta, short color);
|
||||
extern void fillCircleHelper(short x0, short y0, short r,
|
||||
unsigned char cornername, short delta,
|
||||
short color);
|
||||
extern void fillCircle(short x0, short y0, short r, short color);
|
||||
extern void drawTriangle(short x0, short y0, short x1, short y1, short x2, short y2, short color);
|
||||
extern void fillTriangle(short x0, short y0, short x1, short y1, short x2, short y2, short color);
|
||||
extern void drawRoundRect(short x, short y, short w, short h, short r, short color);
|
||||
extern void fillRoundRect(short x, short y, short w, short h, short r, short color);
|
||||
extern void drawBitmap(short x, short y, const unsigned char bitmap[], short w, short h, short color);
|
||||
extern void drawTriangle(short x0, short y0, short x1, short y1, short x2,
|
||||
short y2, short color);
|
||||
extern void fillTriangle(short x0, short y0, short x1, short y1, short x2,
|
||||
short y2, short color);
|
||||
extern void drawRoundRect(short x, short y, short w, short h, short r,
|
||||
short color);
|
||||
extern void fillRoundRect(short x, short y, short w, short h, short r,
|
||||
short color);
|
||||
extern void drawBitmap(short x, short y, const unsigned char bitmap[], short w,
|
||||
short h, short color);
|
||||
extern short oled_write(unsigned char c);
|
||||
|
||||
/*SSD1306 Text and Character Handling API's */
|
||||
extern void setTextSize(unsigned char s);
|
||||
extern void setTextColor(short c);
|
||||
extern void setTextWrap(bool w);
|
||||
extern void drawChar(short x, short y, unsigned char c, short color, short bg, unsigned char size);
|
||||
extern void drawChar(short x, short y, unsigned char c, short color, short bg,
|
||||
unsigned char size);
|
||||
extern short print_str(const unsigned char *strPtr);
|
||||
extern short println();
|
||||
extern short print_strln(const unsigned char *strPtr);
|
||||
|
@ -201,4 +214,3 @@ extern short printNumber_I_ln(int n, int base);
|
|||
extern short printFloat(double number, unsigned char digits);
|
||||
extern short printFloat_ln(double num, int digits);
|
||||
#endif /* SSD1306_OLED_H_ */
|
||||
|
||||
|
|
22
luci-app-ouad/src/SSD1306_OLED_Library/gfxfont.h
Executable file → Normal file
22
luci-app-ouad/src/SSD1306_OLED_Library/gfxfont.h
Executable file → Normal file
|
@ -1,18 +1,18 @@
|
|||
#ifndef _GFXFONT_H_
|
||||
#define _GFXFONT_H_
|
||||
|
||||
typedef struct { // Data stored PER GLYPH
|
||||
unsigned short bitmapOffset; // Pointer into GFXfont->bitmap
|
||||
unsigned char width, height; // Bitmap dimensions in pixels
|
||||
unsigned char xAdvance; // Distance to advance cursor (x axis)
|
||||
char xOffset, yOffset; // Dist from cursor pos to UL corner
|
||||
typedef struct { // Data stored PER GLYPH
|
||||
unsigned short bitmapOffset; // Pointer into GFXfont->bitmap
|
||||
unsigned char width, height; // Bitmap dimensions in pixels
|
||||
unsigned char xAdvance; // Distance to advance cursor (x axis)
|
||||
char xOffset, yOffset; // Dist from cursor pos to UL corner
|
||||
} GFXglyphT, *GFXglyphPtr;
|
||||
|
||||
typedef struct { // Data stored for FONT AS A WHOLE:
|
||||
unsigned char *bitmap; // Glyph bitmaps, concatenated
|
||||
GFXglyphPtr glyph; // Glyph array
|
||||
unsigned char first, last; // ASCII extents
|
||||
unsigned char yAdvance; // Newline distance (y axis)
|
||||
typedef struct { // Data stored for FONT AS A WHOLE:
|
||||
unsigned char *bitmap; // Glyph bitmaps, concatenated
|
||||
GFXglyphPtr glyph; // Glyph array
|
||||
unsigned char first, last; // ASCII extents
|
||||
unsigned char yAdvance; // Newline distance (y axis)
|
||||
} GFXfontT, *GFXfontPtr;
|
||||
|
||||
#endif // _GFXFONT_H_
|
||||
#endif // _GFXFONT_H_
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue