* 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
@ -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 |
@ -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)) |
@ -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 | |||
} | |||
@ -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" |
@ -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), "/?"); |
@ -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@ | |||
@ -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; |
@ -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); | |||
@ -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) | |||
@ -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); |
@ -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' |