Browse Source

lcd4linux: import from oldpackages

* Update to latest version
* Refresh patches
* Update copyright years
* Fix musl build issues (patches already applied upstream)

Signed-off-by: Jonathan McCrohan <jmccrohan@gmail.com>
lilik-openwrt-22.03
Jonathan McCrohan 10 years ago
parent
commit
4f086bc2a3
12 changed files with 4308 additions and 0 deletions
  1. +489
    -0
      utils/lcd4linux/Config.in
  2. +309
    -0
      utils/lcd4linux/Makefile
  3. +15
    -0
      utils/lcd4linux/files/lcd4linux.init
  4. +11
    -0
      utils/lcd4linux/patches/100-drv_RouterBoard.patch
  5. +11
    -0
      utils/lcd4linux/patches/110-uclibc-logarithm-fix.patch
  6. +11
    -0
      utils/lcd4linux/patches/120-remove-as-needed-linker-option.patch
  7. +22
    -0
      utils/lcd4linux/patches/140-no_repnop_T6963.patch
  8. +2624
    -0
      utils/lcd4linux/patches/150-addlibmpdclient.patch
  9. +24
    -0
      utils/lcd4linux/patches/160-uinput_defs.patch
  10. +195
    -0
      utils/lcd4linux/patches/170-add-generic-spidev-driver.patch
  11. +45
    -0
      utils/lcd4linux/patches/171-allow-to-specify-drv_generic_graphic_real_clear.patch
  12. +552
    -0
      utils/lcd4linux/patches/172-add-TEW673GRU-driver.patch

+ 489
- 0
utils/lcd4linux/Config.in View File

@ -0,0 +1,489 @@
if PACKAGE_lcd4linux-custom
config LCD4LINUX_CUSTOM_NEEDS_libdbus
bool
#config LCD4LINUX_CUSTOM_NEEDS_libftdi
# bool
config LCD4LINUX_CUSTOM_NEEDS_libgd
bool
config LCD4LINUX_CUSTOM_NEEDS_libiconv
bool
config LCD4LINUX_CUSTOM_NEEDS_libjpeg
bool
config LCD4LINUX_CUSTOM_NEEDS_libmpdclient
bool
config LCD4LINUX_CUSTOM_NEEDS_libmysqlclient
bool
config LCD4LINUX_CUSTOM_NEEDS_libncurses
bool
config LCD4LINUX_CUSTOM_NEEDS_libnmeap
bool
config LCD4LINUX_CUSTOM_NEEDS_libsqlite3
bool
config LCD4LINUX_CUSTOM_NEEDS_libusb
bool
#config LCD4LINUX_CUSTOM_NEEDS_libX11
# bool
config LCD4LINUX_CUSTOM_NEEDS_ppp
bool
config LCD4LINUX_CUSTOM_NEEDS_python
bool
comment "Drivers ---"
config LCD4LINUX_CUSTOM_DRIVER_ASTUSB
bool
prompt "ASTUSB"
config LCD4LINUX_CUSTOM_DRIVER_BeckmannEgle
bool
prompt "BeckmannEgle"
config LCD4LINUX_CUSTOM_DRIVER_BWCT
bool
prompt "BWCT"
select LCD4LINUX_CUSTOM_NEEDS_libusb
config LCD4LINUX_CUSTOM_DRIVER_CrystalFontz
bool
prompt "CrystalFontz"
config LCD4LINUX_CUSTOM_DRIVER_Curses
bool
prompt "Curses"
select LCD4LINUX_CUSTOM_NEEDS_libncurses
config LCD4LINUX_CUSTOM_DRIVER_Cwlinux
bool
prompt "Cwlinux"
config LCD4LINUX_CUSTOM_DRIVER_D4D
bool
prompt "D4D"
select LCD4LINUX_CUSTOM_NEEDS_libgd
config LCD4LINUX_CUSTOM_DRIVER_dpf
bool
prompt "dpf"
select LCD4LINUX_CUSTOM_NEEDS_libdpf
config LCD4LINUX_CUSTOM_DRIVER_EA232graphic
bool
prompt "EA232graphic"
select LCD4LINUX_CUSTOM_NEEDS_libgd
config LCD4LINUX_CUSTOM_DRIVER_EFN
bool
prompt "EFN"
config LCD4LINUX_CUSTOM_DRIVER_FutabaVFD
bool
prompt "FutabaVFD"
config LCD4LINUX_CUSTOM_DRIVER_FW8888
bool
prompt "FW8888"
config LCD4LINUX_CUSTOM_DRIVER_G15
bool
prompt "G15"
select LCD4LINUX_CUSTOM_NEEDS_libgd
select LCD4LINUX_CUSTOM_NEEDS_libusb
config LCD4LINUX_CUSTOM_DRIVER_GLCD2USB
bool
prompt "GLCD2USB"
select LCD4LINUX_CUSTOM_NEEDS_libgd
select LCD4LINUX_CUSTOM_NEEDS_libusb
config LCD4LINUX_CUSTOM_DRIVER_HD44780
bool
prompt "HD44780"
depends on BROKEN
config LCD4LINUX_CUSTOM_DRIVER_HD44780-I2C
bool
prompt "HD44780-I2C"
depends on BROKEN
config LCD4LINUX_CUSTOM_DRIVER_IRLCD
bool
prompt "IRLCD"
select LCD4LINUX_CUSTOM_NEEDS_libusb
config LCD4LINUX_CUSTOM_DRIVER_LCD2USB
bool
prompt "LCD2USB"
select LCD4LINUX_CUSTOM_NEEDS_libgd
select LCD4LINUX_CUSTOM_NEEDS_libusb
config LCD4LINUX_CUSTOM_DRIVER_LCDLinux
bool
prompt "LCDLinux"
depends on BROKEN
config LCD4LINUX_CUSTOM_DRIVER_LCDTerm
bool
prompt "LCDTerm"
config LCD4LINUX_CUSTOM_DRIVER_LEDMatrix
bool
prompt "LEDMatrix"
select LCD4LINUX_CUSTOM_NEEDS_libgd
config LCD4LINUX_CUSTOM_DRIVER_LPH7508
bool
prompt "LPH7508"
select LCD4LINUX_CUSTOM_NEEDS_libgd
config LCD4LINUX_CUSTOM_DRIVER_LUIse
bool
prompt "LUIse"
select LCD4LINUX_CUSTOM_NEEDS_libgd
#select LCD4LINUX_CUSTOM_NEEDS_libluise
depends on BROKEN
config LCD4LINUX_CUSTOM_DRIVER_LW_ABP
bool
prompt "LW_ABP"
config LCD4LINUX_CUSTOM_DRIVER_M50530
bool
prompt "M50530"
config LCD4LINUX_CUSTOM_DRIVER_MatrixOrbital
bool
prompt "MatrixOrbital"
config LCD4LINUX_CUSTOM_DRIVER_MatrixOrbitalGX
bool
prompt "MatrixOrbitalGX"
select LCD4LINUX_CUSTOM_NEEDS_libgd
select LCD4LINUX_CUSTOM_NEEDS_libusb
config LCD4LINUX_CUSTOM_DRIVER_mdm166a
bool
prompt "mdm166a"
select LCD4LINUX_CUSTOM_NEEDS_libgd
config LCD4LINUX_CUSTOM_DRIVER_MilfordInstruments
bool
prompt "MilfordInstruments"
config LCD4LINUX_CUSTOM_DRIVER_Newhaven
bool
prompt "Newhaven"
config LCD4LINUX_CUSTOM_DRIVER_Noritake
bool
prompt "Noritake"
select LCD4LINUX_CUSTOM_NEEDS_libgd
config LCD4LINUX_CUSTOM_DRIVER_NULL
bool
prompt "NULL"
default y
config LCD4LINUX_CUSTOM_DRIVER_Pertelian
bool
prompt "Pertelian"
config LCD4LINUX_CUSTOM_DRIVER_PHAnderson
bool
prompt "PHAnderson"
config LCD4LINUX_CUSTOM_DRIVER_PICGraphic
bool
prompt "PICGraphic"
select LCD4LINUX_CUSTOM_NEEDS_libgd
config LCD4LINUX_CUSTOM_DRIVER_picoLCD
bool
prompt "picoLCD"
select LCD4LINUX_CUSTOM_NEEDS_libusb
config LCD4LINUX_CUSTOM_DRIVER_picoLCDGraphic
bool
prompt "picoLCDGraphic"
select LCD4LINUX_CUSTOM_NEEDS_libgd
select LCD4LINUX_CUSTOM_NEEDS_libusb
config LCD4LINUX_CUSTOM_DRIVER_PNG
bool
prompt "PNG"
select LCD4LINUX_CUSTOM_NEEDS_libgd
config LCD4LINUX_CUSTOM_DRIVER_PPM
bool
prompt "PPM"
select LCD4LINUX_CUSTOM_NEEDS_libgd
config LCD4LINUX_CUSTOM_DRIVER_RouterBoard
bool
prompt "RouterBoard"
depends on TARGET_rb532
config LCD4LINUX_CUSTOM_DRIVER_SamsungSPF
bool
prompt "SamsungSPF"
select LCD4LINUX_CUSTOM_NEEDS_libgd
select LCD4LINUX_CUSTOM_NEEDS_libjpeg
config LCD4LINUX_CUSTOM_DRIVER_serdisplib
bool
prompt "serdisplib"
select LCD4LINUX_CUSTOM_NEEDS_libgd
select LCD4LINUX_CUSTOM_NEEDS_serdisplib
config LCD4LINUX_CUSTOM_DRIVER_ShuttleVFD
bool
prompt "ShuttleVFD"
select LCD4LINUX_CUSTOM_NEEDS_libusb
config LCD4LINUX_CUSTOM_DRIVER_SimpleLCD
bool
prompt "SimpleLCD"
config LCD4LINUX_CUSTOM_DRIVER_st2205
bool
prompt "st2205"
select LCD4LINUX_CUSTOM_NEEDS_libgd
select LCD4LINUX_CUSTOM_NEEDS_st2205tool
config LCD4LINUX_CUSTOM_DRIVER_T6963
bool
prompt "T6963"
select LCD4LINUX_CUSTOM_NEEDS_libgd
config LCD4LINUX_CUSTOM_DRIVER_TeakLCM
bool
prompt "TeakLCM"
config LCD4LINUX_CUSTOM_DRIVER_TEW673GRU
bool
select LCD4LINUX_CUSTOM_NEEDS_libgd
depends on TARGET_ar71xx
default TARGET_ar71xx
config LCD4LINUX_CUSTOM_DRIVER_Trefon
bool
prompt "Trefon"
select LCD4LINUX_CUSTOM_NEEDS_libusb
#config LCD4LINUX_CUSTOM_DRIVER_ULA200
# bool
# prompt "ULA200"
# select LCD4LINUX_CUSTOM_NEEDS_libftdi
# select LCD4LINUX_CUSTOM_NEEDS_libusb
config LCD4LINUX_CUSTOM_DRIVER_USBHUB
bool
prompt "USBHUB"
select LCD4LINUX_CUSTOM_NEEDS_libusb
config LCD4LINUX_CUSTOM_DRIVER_USBLCD
bool
prompt "USBLCD"
select LCD4LINUX_CUSTOM_NEEDS_libusb
config LCD4LINUX_CUSTOM_DRIVER_VNC
bool
prompt "VNC"
select LCD4LINUX_CUSTOM_NEEDS_libgd
select LCD4LINUX_CUSTOM_NEEDS_libvncserver
config LCD4LINUX_CUSTOM_DRIVER_WincorNixdorf
bool
prompt "WincorNixdorf"
#config LCD4LINUX_CUSTOM_DRIVER_X11
# bool
# prompt "X11"
# select LCD4LINUX_CUSTOM_NEEDS_libgd
# select LCD4LINUX_CUSTOM_NEEDS_libX11
comment "Plugins ---"
config LCD4LINUX_CUSTOM_PLUGIN_apm
bool
prompt "apm"
config LCD4LINUX_CUSTOM_PLUGIN_asterisk
bool
prompt "asterisk"
config LCD4LINUX_CUSTOM_PLUGIN_button_exec
bool
prompt "button_exec"
config LCD4LINUX_CUSTOM_PLUGIN_cpuinfo
bool
prompt "cpuinfo"
default y
config LCD4LINUX_CUSTOM_PLUGIN_dbus
bool
prompt "dbus"
select LCD4LINUX_CUSTOM_NEEDS_libdbus
config LCD4LINUX_CUSTOM_PLUGIN_diskstats
bool
prompt "diskstats"
config LCD4LINUX_CUSTOM_PLUGIN_dvb
bool
prompt "dvb"
config LCD4LINUX_CUSTOM_PLUGIN_event
bool
prompt "event"
config LCD4LINUX_CUSTOM_PLUGIN_exec
bool
prompt "exec"
config LCD4LINUX_CUSTOM_PLUGIN_fifo
bool
prompt "fifo"
config LCD4LINUX_CUSTOM_PLUGIN_file
bool
prompt "file"
config LCD4LINUX_CUSTOM_PLUGIN_gps
bool
prompt "gps"
select LCD4LINUX_CUSTOM_NEEDS_libnmeap
config LCD4LINUX_CUSTOM_PLUGIN_hddtemp
bool
prompt "hddtemp"
config LCD4LINUX_CUSTOM_PLUGIN_huawei
bool
prompt "huawei"
config LCD4LINUX_CUSTOM_PLUGIN_i2c_sensors
bool
prompt "i2c_sensors"
config LCD4LINUX_CUSTOM_PLUGIN_iconv
bool
prompt "iconv"
select LCD4LINUX_CUSTOM_NEEDS_libiconv
config LCD4LINUX_CUSTOM_PLUGIN_imon
bool
prompt "imon"
config LCD4LINUX_CUSTOM_PLUGIN_isdn
bool
prompt "isdn"
config LCD4LINUX_CUSTOM_PLUGIN_kvv
bool
prompt "kvv"
config LCD4LINUX_CUSTOM_PLUGIN_loadavg
bool
prompt "loadavg"
default y
config LCD4LINUX_CUSTOM_PLUGIN_meminfo
bool
prompt "meminfo"
default y
config LCD4LINUX_CUSTOM_PLUGIN_mpd
bool
prompt "mpd"
select LCD4LINUX_CUSTOM_NEEDS_libmpdclient
config LCD4LINUX_CUSTOM_PLUGIN_mpris_dbus
bool
prompt "mpris_dbus"
select LCD4LINUX_CUSTOM_NEEDS_libdbus
config LCD4LINUX_CUSTOM_PLUGIN_mysql
bool
prompt "mysql"
select LCD4LINUX_CUSTOM_NEEDS_libmysqlclient
config LCD4LINUX_CUSTOM_PLUGIN_netdev
bool
prompt "netdev"
config LCD4LINUX_CUSTOM_PLUGIN_netinfo
bool
prompt "netinfo"
config LCD4LINUX_CUSTOM_PLUGIN_pop3
bool
prompt "pop3"
config LCD4LINUX_CUSTOM_PLUGIN_ppp
bool
prompt "ppp"
select LCD4LINUX_CUSTOM_NEEDS_ppp
config LCD4LINUX_CUSTOM_PLUGIN_proc_stat
bool
prompt "proc_stat"
default y
#config LCD4LINUX_CUSTOM_PLUGIN_python
# bool
# prompt "python"
# select LCD4LINUX_CUSTOM_NEEDS_python
config LCD4LINUX_CUSTOM_PLUGIN_qnaplog
bool
prompt "qnaplog"
select LCD4LINUX_CUSTOM_NEEDS_libsqlite3
config LCD4LINUX_CUSTOM_PLUGIN_seti
bool
prompt "seti"
config LCD4LINUX_CUSTOM_PLUGIN_statfs
bool
prompt "statfs"
config LCD4LINUX_CUSTOM_PLUGIN_uname
bool
prompt "uname"
config LCD4LINUX_CUSTOM_PLUGIN_uptime
bool
prompt "uptime"
default y
config LCD4LINUX_CUSTOM_PLUGIN_w1retap
bool
prompt "w1retap"
config LCD4LINUX_CUSTOM_PLUGIN_wireless
bool
prompt "wireless"
depends on BROKEN
config LCD4LINUX_CUSTOM_PLUGIN_xmms
bool
prompt "xmms"
endif

+ 309
- 0
utils/lcd4linux/Makefile View File

@ -0,0 +1,309 @@
#
# Copyright (C) 2007-2015 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
include $(TOPDIR)/rules.mk
PKG_NAME:=lcd4linux
PKG_REV:=1203
PKG_VERSION:=r$(PKG_REV)
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=https://ssl.bulix.org/svn/lcd4linux/trunk/
PKG_SOURCE_SUBDIR:=lcd4linux-$(PKG_VERSION)
PKG_SOURCE_VERSION:=$(PKG_REV)
PKG_SOURCE_PROTO:=svn
LCD4LINUX_DRIVERS:= \
ASTUSB \
BeckmannEgle \
BWCT \
CrystalFontz \
Curses \
Cwlinux \
D4D \
$(if $(CONFIG_BROKEN),DPF) \
EA232graphic \
EFN \
FutabaVFD \
FW8888 \
G15 \
GLCD2USB \
IRLCD \
$(if $(CONFIG_BROKEN),HD44780) \
$(if $(CONFIG_BROKEN),HD44780-I2C) \
LCD2USB \
$(if $(CONFIG_BROKEN),LCDLinux) \
LCDTerm \
LEDMatrix \
LPH7508 \
$(if $(CONFIG_BROKEN),LUIse) \
LW_ABP \
M50530 \
MatrixOrbital \
MatrixOrbitalGX \
MilfordInstruments \
Newhaven \
Noritake \
NULL \
Pertelian \
PHAnderson \
PICGraphic \
picoLCD \
picoLCDGraphic \
PNG \
PPM \
$(if $(CONFIG_TARGET_rb532),RouterBoard) \
$(if $(CONFIG_BROKEN),SamsungSPF) \
ShuttleVFD \
SimpleLCD \
st2205 \
T6963 \
TeakLCM \
$(if $(CONFIG_TARGET_ar71xx),TEW673GRU) \
Trefon \
USBHUB \
USBLCD \
VNC \
WincorNixdorf \
# ULA200 \
# X11 \
LCD4LINUX_PLUGINS:= \
apm \
asterisk \
button_exec \
cpuinfo \
dbus \
diskstats \
dvb \
event \
exec \
fifo \
file \
gps \
hddtemp \
huawei \
i2c_sensors \
iconv \
imon \
isdn \
kvv \
loadavg \
netdev \
netinfo \
meminfo \
mpd \
mpris_dbus \
mysql \
netdev \
pop3 \
ppp \
proc_stat \
qnaplog \
seti \
statfs \
uname \
uptime \
w1retap \
$(if $(CONFIG_BROKEN),wireless) \
xmms \
# python \
PKG_FIXUP:=autoreconf
PKG_INSTALL:=1
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(BUILD_VARIANT)/$(PKG_NAME)-$(PKG_VERSION)
PKG_BUILD_DEPENDS:= \
libdbus \
libgd \
libmpdclient \
libmysqlclient \
libncurses \
libnmeap \
libsqlite3 \
ppp \
# libftdi \
# libX11 \
# python \
PKG_CONFIG_DEPENDS:= \
$(patsubst %,CONFIG_LCD4LINUX_CUSTOM_DRIVER_%,$(LCD4LINUX_DRIVERS)) \
$(patsubst %,CONFIG_LCD4LINUX_CUSTOM_PLUGIN_%,$(LCD4LINUX_PLUGINS)) \
include $(INCLUDE_DIR)/package.mk
include $(INCLUDE_DIR)/nls.mk
define Package/lcd4linux/Default
SECTION:=utils
CATEGORY:=Utilities
PKG_MAINTAINER:=Jonathan McCrohan <jmccrohan@gmail.com>
TITLE:=LCD display utility
URL:=http://lcd4linux.bulix.org/
endef
define Package/lcd4linux/Default/description
LCD4Linux is a small program that grabs information from the kernel and
some subsystems and displays it on an external liquid crystal display.
endef
define Package/lcd4linux-custom
$(call Package/lcd4linux/Default)
DEPENDS:= \
+LCD4LINUX_CUSTOM_NEEDS_libdbus:libdbus \
+LCD4LINUX_CUSTOM_NEEDS_libgd:libgd \
$(if $(ICONV_FULL),+LCD4LINUX_CUSTOM_NEEDS_libiconv:libiconv-full) \
+LCD4LINUX_CUSTOM_NEEDS_libjpeg:libjpeg \
+LCD4LINUX_CUSTOM_NEEDS_libmpdclient:libmpdclient \
+LCD4LINUX_CUSTOM_NEEDS_libmysqlclient:libmysqlclient \
+LCD4LINUX_CUSTOM_NEEDS_libncurses:libncurses \
+LCD4LINUX_CUSTOM_NEEDS_libsqlite3:libsqlite3 \
+LCD4LINUX_CUSTOM_NEEDS_libusb:libusb-compat \
# +LCD4LINUX_CUSTOM_NEEDS_libftdi:libftdi \
# +LCD4LINUX_CUSTOM_NEEDS_libX11:libX11 \
# +LCD4LINUX_CUSTOM_NEEDS_python:python
MENU:=1
PROVIDES:=lcd4linux
VARIANT=custom
endef
define Package/lcd4linux-custom/config
source "$(SOURCE)/Config.in"
endef
define Package/lcd4linux-custom/description
$(call Package/lcd4linux/Default/description)
.
This package contains a customized version of LCD4Linux.
endef
define Package/lcd4linux-full
$(call Package/lcd4linux/Default)
DEPENDS:= @DEVEL \
+libdbus \
+libgd \
$(if $(ICONV_FULL),+libiconv-full) \
+libmpdclient \
+libmysqlclient \
+libncurses \
+libsqlite3 \
+libusb-compat \
# +libftdi \
# +libX11 \
# +python
PROVIDES:=lcd4linux
VARIANT=full
endef
define Package/lcd4linux-full/description
$(call Package/lcd4linux/Default/description)
.
This package contains a version of LCD4Linux built with all supported
drivers and plugins.
endef
CONFIGURE_ARGS+= \
--disable-rpath \
EXTRA_LDFLAGS+= -Wl,-rpath-link,$(STAGING_DIR)/usr/lib
ifeq ($(BUILD_VARIANT),custom)
LCD4LINUX_CUSTOM_DRIVERS:= $(strip $(foreach c, $(LCD4LINUX_DRIVERS), \
$(if $(CONFIG_LCD4LINUX_CUSTOM_DRIVER_$(c)),$(c),) \
))
ifeq ($(LCD4LINUX_CUSTOM_DRIVERS),)
LCD4LINUX_CUSTOM_DRIVERS:=Sample
endif
LCD4LINUX_CUSTOM_PLUGINS:= $(strip $(foreach c, $(LCD4LINUX_PLUGINS), \
$(if $(CONFIG_LCD4LINUX_CUSTOM_PLUGIN_$(c)),$(c)) \
))
ifeq ($(LCD4LINUX_CUSTOM_PLUGINS),)
LCD4LINUX_CUSTOM_PLUGINS:=sample
endif
CONFIGURE_ARGS+= \
--with-drivers="$(LCD4LINUX_CUSTOM_DRIVERS)" \
--with-plugins="$(LCD4LINUX_CUSTOM_PLUGINS)" \
ifneq ($(CONFIG_LCD4LINUX_CUSTOM_NEEDS_libiconv),)
CONFIGURE_ARGS+= --with-libiconv-prefix="$(ICONV_PREFIX)"
else
CONFIGURE_ARGS+= --without-libiconv-prefix
endif
ifneq ($(CONFIG_LCD4LINUX_CUSTOM_NEEDS_libmysqlclient),)
EXTRA_LDFLAGS+= -L$(STAGING_DIR)/usr/lib/mysql
endif
# ifneq ($(CONFIG_LCD4LINUX_CUSTOM_NEEDS_python),)
# CONFIGURE_ARGS+= --with-python
# else
CONFIGURE_ARGS+= --without-python
# endif
# ifneq ($(CONFIG_LCD4LINUX_CUSTOM_NEEDS_libX11),)
# CONFIGURE_ARGS+= --with-x
# else
CONFIGURE_ARGS+= --without-x
# endif
endif
ifeq ($(BUILD_VARIANT),full)
LCD4LINUX_FULL_DRIVERS:= $(strip $(foreach c, $(LCD4LINUX_DRIVERS), \
$(c) \
))
LCD4LINUX_FULL_PLUGINS:= $(strip $(foreach c, $(LCD4LINUX_PLUGINS), \
$(c) \
))
CONFIGURE_ARGS+= \
--with-drivers="$(LCD4LINUX_FULL_DRIVERS)" \
--with-plugins="$(LCD4LINUX_FULL_PLUGINS)" \
--with-libiconv-prefix="$(ICONV_PREFIX)" \
--without-python \
--without-x \
EXTRA_LDFLAGS+= -L$(STAGING_DIR)/usr/lib/mysql
endif
define Package/lcd4linux/conffiles
/etc/lcd4linux.conf
endef
define Package/lcd4linux/install
$(INSTALL_DIR) $(1)/usr/bin
$(CP) $(PKG_INSTALL_DIR)/usr/bin/lcd4linux $(1)/usr/bin/
$(INSTALL_DIR) $(1)/etc
$(INSTALL_CONF) $(PKG_BUILD_DIR)/lcd4linux.conf.sample $(1)/etc/lcd4linux.conf
$(INSTALL_DIR) $(1)/etc/init.d
$(INSTALL_BIN) ./files/lcd4linux.init $(1)/etc/init.d/lcd4linux
$(SED) "s|^\(Display 'GLCD2USB'\)|#\1|g" \
-e "s|^\(Layout 'TestLayer'\)|#\1|g" \
-e "s|^#\(Display 'Image'\)|\1|g" \
-e "s|^#\(Layout 'Default'\)|\1|g" \
$(1)/etc/lcd4linux.conf
endef
Package/lcd4linux-custom/conffiles = $(Package/lcd4linux/conffiles)
Package/lcd4linux-custom/install = $(Package/lcd4linux/install)
Package/lcd4linux-full/conffiles = $(Package/lcd4linux/conffiles)
Package/lcd4linux-full/install = $(Package/lcd4linux/install)
$(eval $(call BuildPackage,lcd4linux-custom))
$(eval $(call BuildPackage,lcd4linux-full))

+ 15
- 0
utils/lcd4linux/files/lcd4linux.init View File

@ -0,0 +1,15 @@
#!/bin/sh /etc/rc.common
# Copyright (C) 2007-2015 OpenWrt.org
START=98
SERVICE_USE_PID=1
start() {
service_start /usr/bin/lcd4linux -o /tmp/lcd4linux.png -q
}
stop() {
service_stop /usr/bin/lcd4linux
}

+ 11
- 0
utils/lcd4linux/patches/100-drv_RouterBoard.patch View File

@ -0,0 +1,11 @@
--- a/drv_RouterBoard.c
+++ b/drv_RouterBoard.c
@@ -106,7 +106,7 @@
#include <string.h>
#include <errno.h>
#include <unistd.h>
-#include <sys/io.h>
+#include <asm/io.h>
#include "debug.h"
#include "cfg.h"

+ 11
- 0
utils/lcd4linux/patches/110-uclibc-logarithm-fix.patch View File

@ -0,0 +1,11 @@
--- a/plugin_netinfo.c
+++ b/plugin_netinfo.c
@@ -264,7 +264,7 @@ static void my_netmask_short(RESULT * re
sin = get_netmask(arg1);
if (NULL != sin) {
logval = (long double) (get_netmask(arg1)->sin_addr.s_addr);
- netlen = (int) rint(log2l(logval) / log2l(2.0));
+ netlen = (int) rint(log2f(logval) / log2f(2.0));
qprintf(value, sizeof(value), "/%d", netlen);
} else {
qprintf(value, sizeof(value), "/?");

+ 11
- 0
utils/lcd4linux/patches/120-remove-as-needed-linker-option.patch View File

@ -0,0 +1,11 @@
--- a/Makefile.am
+++ b/Makefile.am
@@ -18,7 +18,7 @@ ACLOCAL_AMFLAGS=-I m4
# use this for lots of warnings
#AM_CFLAGS = -D_GNU_SOURCE -std=c99 -m64 -Wall -W -pedantic -Wno-variadic-macros -fno-strict-aliasing
-lcd4linux_LDFLAGS ="-Wl,--as-needed"
+lcd4linux_LDFLAGS =
lcd4linux_LDADD = @DRIVERS@ @PLUGINS@ @DRVLIBS@ @PLUGINLIBS@
lcd4linux_DEPENDENCIES = @DRIVERS@ @PLUGINS@

+ 22
- 0
utils/lcd4linux/patches/140-no_repnop_T6963.patch View File

@ -0,0 +1,22 @@
--- a/drv_T6963.c
+++ b/drv_T6963.c
@@ -114,7 +114,9 @@ static void drv_T6_status1(void)
/* wait for STA0=1 and STA1=1 */
n = 0;
do {
+#if 0
rep_nop();
+#endif
if (++n > 1000) {
debug("hang in status1");
bug = 1;
@@ -150,7 +152,9 @@ static void drv_T6_status2(void)
/* wait for STA3=1 */
n = 0;
do {
+#if 0
rep_nop();
+#endif
if (++n > 1000) {
debug("hang in status2");
bug = 1;

+ 2624
- 0
utils/lcd4linux/patches/150-addlibmpdclient.patch
File diff suppressed because it is too large
View File


+ 24
- 0
utils/lcd4linux/patches/160-uinput_defs.patch View File

@ -0,0 +1,24 @@
--- a/drv_G15.c
+++ b/drv_G15.c
@@ -42,6 +42,7 @@
#include <usb.h>
#include <fcntl.h>
+#include <linux/version.h>
#include <linux/input.h>
#include <linux/uinput.h>
@@ -269,8 +270,13 @@ void drv_G15_initKeyHandling(char *devic
}
memset(&device, 0, sizeof(device));
strncpy(device.name, "G15 Keys", UINPUT_MAX_NAME_SIZE);
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
device.id.bustype = BUS_USB;
device.id.version = 4;
+#else
+ device.idbus = BUS_USB;
+ device.idversion = 4;
+#endif
ioctl(uinput_fd, UI_SET_EVBIT, EV_KEY);

+ 195
- 0
utils/lcd4linux/patches/170-add-generic-spidev-driver.patch View File

@ -0,0 +1,195 @@
--- a/Makefile.am
+++ b/Makefile.am
@@ -71,6 +71,8 @@ drv_generic_i2c.c \
drv_generic_i2c.h \
drv_generic_keypad.c \
drv_generic_keypad.h \
+drv_generic_spidev.c \
+drv_generic_spidev.h \
drv_ASTUSB.c \
drv_BeckmannEgle.c \
drv_BWCT.c \
--- /dev/null
+++ b/drv_generic_spidev.c
@@ -0,0 +1,89 @@
+/* $Id$
+ * $URL$
+ *
+ * generic driver helper for displays connected via SPI bus
+ *
+ * Copyright (C) 2012 Gabor Juhos <juhosg@openwrt.org>
+ *
+ * This file is part of LCD4Linux.
+ *
+ * LCD4Linux is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * LCD4Linux is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ */
+
+#include "config.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <sys/types.h>
+#include <sys/ioctl.h>
+
+#include "debug.h"
+#include "qprintf.h"
+#include "cfg.h"
+#include "drv_generic_spidev.h"
+
+static char *generic_spidev_section = "";
+static char *generic_spidev_driver = "";
+static int generic_spidev_fd;
+
+int drv_generic_spidev_open(const char *section, const char *driver)
+{
+ char *spidev;
+
+ udelay_init();
+
+ generic_spidev_section = (char *) section;
+ generic_spidev_driver = (char *) driver;
+
+ spidev = cfg_get(generic_spidev_section, "Port", NULL);
+
+ info("%s: initializing SPI device %s", generic_spidev_driver, spidev);
+ generic_spidev_fd = open(spidev, O_WRONLY);
+ if (generic_spidev_fd < 0) {
+ error("%s: unable to open SPI device %s!\n", generic_spidev_driver, spidev);
+ goto exit_error;
+ }
+
+ return 0;
+
+ exit_error:
+ free(spidev);
+ return -1;
+}
+
+int drv_generic_spidev_close(void)
+{
+ close(generic_spidev_fd);
+ return 0;
+}
+
+int drv_generic_spidev_transfer(const int count, struct spi_ioc_transfer *tr)
+{
+ int ret;
+
+ ret = ioctl(generic_spidev_fd, SPI_IOC_MESSAGE(count), tr);
+ if (ret < count) {
+ error("%s: can't send SPI message! (%s)\n",
+ generic_spidev_driver, strerror(errno));
+ return -1;
+ }
+
+ return 0;
+}
--- /dev/null
+++ b/drv_generic_spidev.h
@@ -0,0 +1,54 @@
+/* $Id$
+ * $URL$
+ *
+ * generic driver helper for displays connected via SPI bus
+ *
+ * Copyright (C) 2012 Gabor Juhos <juhosg@openwrt.org>
+ * Copyright (C) 2012 The LCD4Linux Team <lcd4linux-devel@users.sourceforge.net>
+ *
+ * This file is part of LCD4Linux.
+ *
+ * LCD4Linux is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * LCD4Linux is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ */
+
+/*
+ *
+ * exported fuctions:
+ *
+ * int drv_generic_spidev_open (const char *section, const char *driver)
+ * reads 'Port' entry from config and opens
+ * the SPI device
+ * returns 0 if ok, -1 on failure
+ *
+ * int drv_generic_spidev_close (void)
+ * closes SPI device
+ * returns 0 if ok, -1 on failure
+ *
+ * void drv_generic_spidev_transfer (int count, struct spi_ioc_transfer *tr)
+ * transfer data to/from the SPI device
+ *
+ */
+
+#ifndef _DRV_GENERIC_SPIDEV_H_
+#define _DRV_GENERIC_SPIDEV_H_
+
+#include <linux/spi/spidev.h>
+
+int drv_generic_spidev_open(const char *section, const char *driver);
+int drv_generic_spidev_close(void);
+int drv_generic_spidev_transfer(const int count, struct spi_ioc_transfer *tr);
+
+#endif /* _DRV_GENERIC_SPIDEV_H_ */
--- a/drivers.m4
+++ b/drivers.m4
@@ -301,6 +301,7 @@ PARPORT="no"
SERIAL="no"
I2C="no"
KEYPAD="no"
+SPIDEV="no"
# generic libraries
LIBUSB="no"
@@ -936,6 +937,12 @@ if test "$LIBJPEG" = "yes"; then
DRVLIBS="$DRVLIBS -ljpeg"
fi
+# generic spidev driver
+if test "$SPIDEV" = "yes"; then
+ DRIVERS="$DRIVERS drv_generic_spidev.o"
+ AC_DEFINE(WITH_SPIDEV, 1, [SPIDEV driver])
+fi
+
# libusb
if test "$LIBUSB" = "yes"; then
DRVLIBS="$DRVLIBS -lusb"
--- a/configure.ac
+++ b/configure.ac
@@ -115,6 +115,9 @@ AC_ARG_WITH(outb,
AC_CHECK_HEADERS([asm/io.h] [linux/parport.h linux/ppdev.h], [has_parport="true"], [has_parport="false"])
+# check for spidev
+AC_CHECK_HEADERS([linux/spi/spidev.h], [has_spidev="true"], [has_spidev="false"])
+
# drivers
sinclude(drivers.m4)

+ 45
- 0
utils/lcd4linux/patches/171-allow-to-specify-drv_generic_graphic_real_clear.patch View File

@ -0,0 +1,45 @@
--- a/drv_generic_graphic.c
+++ b/drv_generic_graphic.c
@@ -24,7 +24,7 @@
*
*/
-/*
+/*
*
* exported functions:
*
@@ -98,6 +98,9 @@ static int INVERTED = 0;
/* must be implemented by the real driver */
void (*drv_generic_graphic_real_blit) () = NULL;
+/* can be implemented by the real driver */
+void (*drv_generic_graphic_real_clear) () = NULL;
+
/****************************************/
/*** generic Framebuffer stuff ***/
@@ -691,7 +694,10 @@ int drv_generic_graphic_clear(void)
for (i = 0; i < LCOLS * LROWS; i++)
drv_generic_graphic_FB[l][i] = NO_COL;
- drv_generic_graphic_blit(0, 0, LROWS, LCOLS);
+ if (drv_generic_graphic_real_clear)
+ drv_generic_graphic_real_clear(NO_COL);
+ else
+ drv_generic_graphic_blit(0, 0, LROWS, LCOLS);
return 0;
}
--- a/drv_generic_graphic.h
+++ b/drv_generic_graphic.h
@@ -40,6 +40,9 @@ extern RGBA NO_COL; /* no color (comple
/* these functions must be implemented by the real driver */
extern void (*drv_generic_graphic_real_blit) (const int row, const int col, const int height, const int width);
+/* these functions can be implemented by the real driver */
+void (*drv_generic_graphic_real_clear) (const RGBA rgba);
+
/* helper function to get pixel color or gray value */
extern RGBA drv_generic_graphic_rgb(const int row, const int col);
extern unsigned char drv_generic_graphic_gray(const int row, const int col);

+ 552
- 0
utils/lcd4linux/patches/172-add-TEW673GRU-driver.patch View File

@ -0,0 +1,552 @@
--- a/drivers.m4
+++ b/drivers.m4
@@ -39,7 +39,7 @@ AC_ARG_WITH(
[ Newhaven, Noritake, NULL, Pertelian, PHAnderson,]
[ PICGraphic, picoLCD, picoLCDGraphic, PNG, PPM, RouterBoard,]
[ Sample, SamsungSPF, serdisplib, ShuttleVFD, SimpleLCD, st2205, T6963,]
- [ TeakLCM, Trefon, ULA200, USBHUB, USBLCD, VNC, WincorNixdorf, X11],
+ [ TeakLCM, TEW673GRU, Trefon, ULA200, USBHUB, USBLCD, VNC, WincorNixdorf, X11],
drivers=$withval,
drivers=all
)
@@ -107,6 +107,7 @@ for driver in $drivers; do
SHUTTLEVFD="yes"
SIMPLELCD="yes"
T6963="yes"
+ TEW673GRU="yes"
TeakLCM="yes"
Trefon="yes"
ULA200="yes"
@@ -260,6 +261,9 @@ for driver in $drivers; do
TeakLCM)
TeakLCM=$val
;;
+ TEW673GRU)
+ TEW673GRU=$val
+ ;;
Trefon)
Trefon=$val
;;
@@ -797,6 +801,18 @@ if test "$TeakLCM" = "yes"; then
AC_DEFINE(WITH_TEAK_LCM,1,[TeakLCM driver])
fi
+if test "$TEW673GRU" = "yes"; then
+ if test "$has_spidev" = "true"; then
+ GRAPHIC="yes"
+ TEXT="yes"
+ SPIDEV="yes"
+ DRIVERS="$DRIVERS drv_TEW673GRU.o"
+ AC_DEFINE(WITH_TEW673GRU,1,[TEW673GRU driver])
+ else
+ AC_MSG_WARN(linux/spi/spidev.h not found: TEW673GRU driver disabled)
+ fi
+fi
+
if test "$Trefon" = "yes"; then
if test "$has_usb" = "true"; then
TEXT="yes"
--- a/drv.c
+++ b/drv.c
@@ -92,6 +92,7 @@ extern DRIVER drv_serdisplib;
extern DRIVER drv_ShuttleVFD;
extern DRIVER drv_SimpleLCD;
extern DRIVER drv_T6963;
+extern DRIVER drv_TEW673GRU;
extern DRIVER drv_TeakLCM;
extern DRIVER drv_Trefon;
extern DRIVER drv_ula200;
@@ -248,6 +249,9 @@ DRIVER *Driver[] = {
#ifdef WITH_TEAK_LCM
&drv_TeakLCM,
#endif
+#ifdef WITH_TEW673GRU
+ &drv_TEW673GRU,
+#endif
#ifdef WITH_TREFON
&drv_Trefon,
#endif
--- a/Makefile.am
+++ b/Makefile.am
@@ -119,6 +119,7 @@ drv_ShuttleVFD.c \
drv_SimpleLCD.c \
drv_T6963.c \
drv_TeakLCM.c \
+drv_TEW673GRU.c \
drv_Trefon.c \
drv_ula200.c \
drv_USBHUB.c \
--- /dev/null
+++ b/drv_TEW673GRU.c
@@ -0,0 +1,457 @@
+/* $Id$
+ * $URL$
+ *
+ * TRENDnet TEW673GRU LCD4linux driver
+ *
+ * Copyright (C) 2012 Gabor Juhos <juhosg@openwrt.org>
+ *
+ * based on the Sample driver which is:
+ * Copyright (C) 2005 Michael Reinelt <michael@reinelt.co.at>
+ * Copyright (C) 2005, 2006, 2007 The LCD4Linux Team <lcd4linux-devel@users.sourceforge.net>
+ *
+ * This file is part of LCD4Linux.
+ *
+ * LCD4Linux is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * LCD4Linux is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ */
+
+/*
+ * exported fuctions:
+ *
+ * struct DRIVER drv_TEW673GRU
+ */
+
+#include "config.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <string.h>
+#include <errno.h>
+
+#include "debug.h"
+#include "cfg.h"
+#include "qprintf.h"
+#include "udelay.h"
+#include "plugin.h"
+#include "widget.h"
+#include "widget_text.h"
+#include "widget_icon.h"
+#include "widget_bar.h"
+#include "drv.h"
+
+#include "drv_generic_text.h"
+#include "drv_generic_graphic.h"
+#include "drv_generic_spidev.h"
+
+#ifdef WITH_DMALLOC
+#include <dmalloc.h>
+#endif
+
+#define TEW673GRU_NUM_COLS 220
+#define TEW673GRU_NUM_ROWS 176
+#define TEW673GRU_BPP 2 /* bytes per pixel */
+
+#define TEW673GRU_CMD_SIZE 9
+#define TEW673GRU_NUM_ROW_BYTES (TEW673GRU_NUM_COLS * TEW673GRU_BPP)
+
+enum {
+ CMD_SHOW_STRING = 49,
+ CMD_SHOW_IMAGE_DIR = 52,
+ CMD_SCREEN_COLOR = 54,
+};
+
+static char Name[] = "TEW673GRU";
+
+static char *drv_TEW673GRU_FB;
+static long FB_SIZE;
+static int MODE;
+
+static unsigned int RGBAto16(RGBA rgb)
+{
+ return (((rgb.R >> 3) << 11) | ((rgb.G >> 2) << 5) | (rgb.B >> 3));
+}
+
+static unsigned char color_msb(unsigned int color)
+{
+ return color >> 8;
+}
+
+static unsigned char color_lsb(unsigned int color)
+{
+ return color & 0xff;
+}
+
+static void drv_TEW673GRU_hw_clear(const unsigned int color)
+{
+ unsigned char cmd[TEW673GRU_CMD_SIZE];
+ struct spi_ioc_transfer tr[1];
+
+ memset(tr, '\0', sizeof(tr));
+ memset(cmd, '\0', sizeof(cmd));
+
+ cmd[0] = CMD_SCREEN_COLOR;
+ cmd[7] = color_msb(color);
+ cmd[8] = color_lsb(color);
+
+ tr[0].tx_buf = (unsigned long) cmd;
+ tr[0].len = sizeof(cmd);
+
+ drv_generic_spidev_transfer(1, tr);
+}
+
+static void drv_TEW673GRU_hw_send_row(const int row, const int col, const char *data, const int width)
+{
+ unsigned char cmd[TEW673GRU_CMD_SIZE];
+ struct spi_ioc_transfer tr[2];
+ int datasize;
+
+ memset(tr, '\0', sizeof(tr));
+ memset(cmd, '\0', sizeof(cmd));
+
+ datasize = width * TEW673GRU_BPP;
+
+ cmd[0] = CMD_SHOW_IMAGE_DIR;
+ cmd[1] = col;
+ cmd[2] = col + width;
+ cmd[3] = row;
+ cmd[4] = row;
+ cmd[5] = datasize >> 8;
+ cmd[6] = datasize & 0xff;
+
+ tr[0].tx_buf = (unsigned long) cmd;
+ tr[0].len = sizeof(cmd);
+ tr[1].tx_buf = (unsigned long) data;
+ tr[1].len = datasize;
+
+ drv_generic_spidev_transfer(2, tr);
+}
+
+static void drv_TEW673GRU_hw_write_string(const int row, const int col, const char *data, const int datasize)
+{
+ unsigned char cmd[TEW673GRU_CMD_SIZE];
+ struct spi_ioc_transfer tr[2];
+ unsigned char len;
+
+ memset(tr, '\0', sizeof(tr));
+ memset(cmd, '\0', sizeof(cmd));
+
+ len = datasize & 0xff;
+ cmd[0] = CMD_SHOW_STRING;
+ cmd[1] = col;
+ cmd[2] = col + (XRES * len);
+ cmd[3] = row;
+ cmd[4] = row + YRES;
+ cmd[7] = 0;
+ cmd[8] = len;
+
+ tr[0].tx_buf = (unsigned long) cmd;
+ tr[0].len = sizeof(cmd);
+ tr[1].tx_buf = (unsigned long) data;
+ tr[1].len = datasize;
+
+ drv_generic_spidev_transfer(2, tr);
+}
+
+static void drv_TEW673GRU_FB_set_pixel(const int col, const unsigned int color)
+{
+ int pos;
+
+ pos = col * TEW673GRU_BPP;
+ drv_TEW673GRU_FB[pos] = color_msb(color);
+ drv_TEW673GRU_FB[pos + 1] = color_lsb(color);
+}
+
+static void drv_TEW673GRU_blit(const int row, const int col, const int height, const int width)
+{
+ int r, c;
+
+ debug("%s: update area r:%d c:%d w:%d h:%d", Name, row, col, height, width);
+
+ for (r = row; r < row + height; r++) {
+ for (c = col; c < col + width; c++) {
+ unsigned int color;
+ RGBA rgb;
+
+ rgb = drv_generic_graphic_rgb(r, c);
+ color = RGBAto16(rgb);
+ drv_TEW673GRU_FB_set_pixel(c, color);
+ }
+
+ if (width) {
+ char *data;
+
+ data = &drv_TEW673GRU_FB[col * TEW673GRU_BPP];
+ drv_TEW673GRU_hw_send_row(r, col, data, width);
+ udelay(100 + width * 50);
+ }
+ }
+}
+
+static void drv_TEW673GRU_clear(RGBA rgba)
+{
+ unsigned int color;
+
+ color = RGBAto16(rgba);
+ drv_TEW673GRU_hw_clear(color);
+}
+
+static void drv_TEW673GRU_write(const int row, const int col, const char *data, const int len)
+{
+ int i;
+
+ for (i = 0; i < len; i++) {
+ drv_TEW673GRU_hw_write_string(row * YRES, (col + i) * XRES, " ", 1);
+ udelay(10000);
+ drv_TEW673GRU_hw_write_string(row * YRES, 2 + (col + i) * XRES, " ", 1);
+ udelay(10000);
+ drv_TEW673GRU_hw_write_string(row * YRES, (col + i) * XRES, &data[i], 1);
+ udelay(10000);
+ }
+}
+
+static int drv_TEW673GRU_open(const char *section)
+{
+ int err;
+
+ err = drv_generic_spidev_open(section, Name);
+ if (err < 0)
+ return err;
+
+ return 0;
+}
+
+static int drv_TEW673GRU_close(void)
+{
+ drv_generic_spidev_close();
+ return 0;
+}
+
+static void drv_TEW673GRU_clear_screen(void)
+{
+ if (MODE) {
+ drv_generic_graphic_clear();
+ } else {
+ memset(drv_TEW673GRU_FB, ' ', FB_SIZE);
+ drv_TEW673GRU_hw_clear(0x0000);
+ }
+}
+
+static int drv_TEW673GRU_init_font(const char *section)
+{
+ char *font;
+ int ret = -1;
+
+ font = cfg_get(section, "Font", "6x8");
+ if (font == NULL) {
+ error("%s: no '%s.Font' entry from %s", Name, section, cfg_source());
+ goto out;
+ }
+
+ if (*font == '\0') {
+ error("%s: invalid '%s.Font' entry in %s", Name, section, cfg_source());
+ goto out_free;
+ }
+
+ XRES = -1;
+ YRES = -1;
+ if (sscanf(font, "%dx%d", &XRES, &YRES) != 2 ||
+ XRES < 1 ||
+ YRES < 1) {
+ error("%s: bad Font '%s' from %s", Name, font, cfg_source());
+ goto out_free;
+ }
+
+ if (XRES != 6 && YRES != 8) {
+ error("%s: bad Font '%s' from %s (only 6x8 at the moment)",
+ Name, font, cfg_source());
+ goto out_free;
+ }
+
+ error("%s: font '%s' selected", Name, font);
+
+ ret = 0;
+
+out_free:
+ free(font);
+out:
+ return ret;
+}
+
+static int drv_TEW673GRU_start(const char *section)
+{
+ int ret;
+
+ DCOLS = TEW673GRU_NUM_COLS;
+ DROWS = TEW673GRU_NUM_ROWS;
+
+ if (MODE) {
+ ret = drv_TEW673GRU_init_font(section);
+ if (ret)
+ goto err;
+
+ FB_SIZE = DCOLS * TEW673GRU_BPP;
+ } else {
+ XRES = 10;
+ YRES = 16;
+ DCOLS = DCOLS / XRES;
+ DROWS = DROWS / YRES;
+
+ FB_SIZE = DCOLS * DROWS;
+ }
+
+ if (FB_SIZE) {
+ drv_TEW673GRU_FB = malloc(FB_SIZE);
+ if (drv_TEW673GRU_FB == NULL) {
+ error("%s: framebuffer could not be allocated", Name);
+ goto err;
+ }
+ }
+
+ ret = drv_TEW673GRU_open(section);
+ if (ret < 0)
+ goto err_free;
+
+ if (MODE == 0)
+ drv_TEW673GRU_clear_screen();
+
+ return 0;
+
+ err_free:
+ if (drv_TEW673GRU_FB)
+ free(drv_TEW673GRU_FB);
+ err:
+ return -1;
+}
+
+static int drv_TEW673GRU_greet(const char *msg1, const char *msg2)
+{
+ if (MODE)
+ return drv_generic_graphic_greet(msg1, msg2);
+
+ return drv_generic_text_greet(msg1, msg2);
+}
+
+
+/****************************************/
+/*** widget callbacks ***/
+/****************************************/
+
+
+/* using drv_generic_text_draw(W) */
+/* using drv_generic_text_icon_draw(W) */
+/* using drv_generic_text_bar_draw(W) */
+/* using drv_generic_gpio_draw(W) */
+
+
+/****************************************/
+/*** exported functions ***/
+/****************************************/
+
+int drv_TEW673GRU_list(void)
+{
+ printf("TEW673GRU driver");
+ return 0;
+}
+
+int drv_TEW673GRU_init(const char *section, const int quiet)
+{
+ WIDGET_CLASS wc;
+ int ret;
+
+ cfg_number(section, "Mode", 0, 0, 1, &MODE);
+
+ if (MODE) {
+ drv_generic_graphic_real_blit = drv_TEW673GRU_blit;
+ drv_generic_graphic_real_clear = drv_TEW673GRU_clear;
+ } else {
+ drv_generic_text_real_write = drv_TEW673GRU_write;
+ }
+
+ ret = drv_TEW673GRU_start(section);
+ if (ret)
+ return ret;
+
+ if (MODE) {
+ ret = drv_generic_graphic_init(section, Name);
+ if (ret)
+ return ret;
+ } else {
+ ret = drv_generic_text_init(section, Name);
+ if (ret)
+ return ret;
+
+ ret = drv_generic_text_icon_init();
+ if (ret != 0)
+ return ret;
+
+ ret = drv_generic_text_bar_init(1);
+ if (ret != 0)
+ return ret;
+
+ drv_generic_text_bar_add_segment(0, 0, 255, ' ');
+ drv_generic_text_bar_add_segment(255, 255, 255, '#');
+
+ wc = Widget_Text;
+ wc.draw = drv_generic_text_draw;
+ widget_register(&wc);
+
+ wc = Widget_Icon;
+ wc.draw = drv_generic_text_icon_draw;
+ widget_register(&wc);
+
+ wc = Widget_Bar;
+ wc.draw = drv_generic_text_bar_draw;
+ widget_register(&wc);
+ }
+
+ if (!quiet) {
+ char buffer[40];
+ qprintf(buffer, sizeof(buffer), "%s %dx%d", Name, DCOLS, DROWS);
+ drv_TEW673GRU_greet(buffer, "www.openwrt.org");
+ sleep(3);
+ drv_TEW673GRU_clear_screen();
+ }
+
+ return 0;
+}
+
+int drv_TEW673GRU_quit(const int quiet)
+{
+
+ info("%s: shutting down.", Name);
+
+ drv_TEW673GRU_clear_screen();
+
+ if (!quiet)
+ drv_TEW673GRU_greet("goodbye!", NULL);
+
+ if (MODE)
+ drv_generic_graphic_quit();
+ else
+ drv_generic_text_quit();
+
+ debug("closing connection");
+ drv_TEW673GRU_close();
+
+ return (0);
+}
+
+DRIVER drv_TEW673GRU = {
+ .name = Name,
+ .list = drv_TEW673GRU_list,
+ .init = drv_TEW673GRU_init,
+ .quit = drv_TEW673GRU_quit,
+};
--- a/lcd4linux.conf.sample
+++ b/lcd4linux.conf.sample
@@ -581,6 +581,11 @@ Display FutabaVFD {
}
}
+Display TEW673GRU {
+ Driver 'TEW673GRU'
+ Font '6x8'
+ Port '/dev/spidev1.0'
+}
#Plugin KVV {
# StationID '12_701'

Loading…
Cancel
Save