Graphlcd-plugin/touchcol
Description
Author: Community maintained.
This page is about a branch of the GraphLCD plugin with built-in support for skins. The GraphLCD plugin integrates a graphical display into VDR and makes it possible to control VDR even if the television is off.
The branch was started by Andreas 'powarman' Regel but was then abandoned and given to new maintainers by his request.
The functionality of this branch is rather impressive but unfortunately the code is hardly documented.
So this page will be used as a starting point for collecting and formatting its features. Thus this page will be started being a pigsty and improved 'along the way'.
Images
Installation
Hardware requirements
To use this plugin you need a graphical display with supported controller. It's even possible to redirect the output of the plugin to image files or to the framebuffer to drive e.g. TFT monitors.
Supported are the following controllers (or compatibles) and modules:
Hitachi HD61830- Samsung KS0108
- Toshiba T6963
- Epson SED1520
- Epson SED1330
- Noritake GU140X32F-7806
Noritake GU256X64-372
and with the extra library [serdisplib] even a lot more (list of supported displays/modules: [supported displays]).
displays/drivers currently supported (some are broken because of a missing SetPixel()-method)
driver | verified | may work (not verified) | not working (no SetPixel()) |
---|---|---|---|
avrctl | x | ||
dm140gink | x | ||
framebuffer | x | ||
gu256x64-372 | x | ||
g15daemon | x | ||
gu126x64D-K610A4 | x | ||
gu140x32f | x | ||
gu256x64-372 | x | ||
gu256x64-3900 | x | ||
hd61830 | x | ||
image | x | ||
ks0108 | x 1) | ||
network | x | ||
noritake800 | x | ||
sed1330 | x 1) | ||
sed1520 | x 2) | ||
serdisp | x | ||
simlcd | x | ||
t6963c | x 1) |
1) in the meantime serdisplib might be used as substitute.
2) some sed1520-based displays are supported by serdisplib.
Software requirements
- freetype (rendering of TrueType fonts)
- serdisplib (optional, see above, not required at compile time)
Installation of graphlcd
graphlcd (skin-branch) consists of two parts:
- graphlcd-base: library with low level drivers, basic functionality, and skin support
- vdr-plugin-graphlcd: VDR plugin.
First of all a current version (contains included skin support) of graphlcd-base needs to be installed:
- Get current version from the GIT repoository:
git clone git://projects.vdr-developer.org/graphlcd-base.git
- compile and install the library
Then the VDR plugin needs to be retrieved, installed, and compiled:
- Note: $SOURCEDIR/VDR is the source directory of VDR and needs to be adapted accordingly.
- Get current version of the branch from the GIT repository:
cd $SOURCEDIR/VDR/PLUGINS/src/ git clone git://projects.vdr-developer.org/vdr-plugin-graphlcd.git -b 0.2.0 vdr-plugin-graphlcd_0.2.0 ln -s vdr-plugin-graphlcd_0.2.0 graphlcd
- compile plugin, eg:
cd $SOURCEDIR/VDR/ make plugins
Everything else is the same as described in plugin installation.
Configuration
After finishing the installation, some files need to be copied.
- copy the configuration file graphlcd.conf to some destination, on most installations this will be /etc.
can be manually configured by setting parameter --skin (see below):
cp graphlcd.conf /etc/
- copy the directory with logos, fonts, and skins to $VDRCONFIG/plugins (depending on your installation this will be /etc/vdr/plugins, or /video/plugins, or some other destination):
cp -r $SOURCEDIR/VDR/PLUGINS/src/graphlcd/graphlcd $VDRCONFIG/plugins/
Parameter
Parameter (short) | Parameter (long) | Description | Default (if parameter not given) |
---|---|---|---|
-c CFG | --config=CFG | use CFG as driver config file | /etc/graphlcd.conf |
-d DISP | --display=DISP | use display DISP for ouput | first display defined in config file |
-s SKIN | --skin=SKIN | use skin SKIN | default |
-p SKINPATH | path to skin files | $VDRCONFIG/plugins/graphlcd/skins |
Skins
A skin gives a high flexibility of how and which information is brought to a display. Its markup language is the well-known XML.
Structure and elements of a skin
Example skeleton of a skin
<?xml version="1.0"?> <skin version="1.0" name="testskin"> <variable id="LogoWdith" value="40" condition="le({ScreenHeight},64)" /> <variable id="LogoWdith" value="64" /> <display id="normal"> <variable id="TextX" value="4" /> <text x1="#TextX" ...> {PresentTitle} </text> <image ... /> <rectangle ... /> <progress ... /> <block condition="{Recordings}"> <image ... /> <text ...> {Recordings} </text> </block> <variable id="Arrow" value="'images/arrow.pbm'"/> <text ... >{MenuTitle}</text> <list ...> <item height="ITEMHEIGHT" /> <text ... >{MenuCurrent}</text> <text ... >{Menuitem}</text> <image ... path="#Arrow" condition="{IsMenuCurrent}" /> </list> </display> </skin>
A skin definition contains different types and sections of information:
- font
- defines an easy to remember font 'handle'. if a condition is given the font item is only defined if the condition is true.
Note:: fonts can only be defined in the context 'skin'. - variable
- defines a variable which can be a constant or calculated using a complex evaluation.
Note:: variables can be defined everywhere, but the scope will always be skin-wide!
sections:
- skin
- root element.
- display
- a layer containing drawing elements.
- block
- groups elements together. may be displayed or hidden depending on a condition.
- list
- a menu with a defined item height, selected text line, line marker, maybe some lines before, and after the .selected line.
drawing elements:
- image
- text
- pixel
- line
- rectangle
- elipse
- slope
- progress (progress bar)
- item (needed in lists)
functions, conditions, evaluations, and tokens:
- function
- retrieves a value of a certain entity, eg. the height of a font or width of a text string in pixels.
- condition
- evaluates boolean terms (returns either true or false).
- evaluation
- evaluates a simple calculation using basic arithmetic operations.
- token
- contains an information (eg. runtime information from VDR like present title, current channel name, ...) and is either displayed or used in evaluations or conditions.
List of tokens defined in either graphlcd-base or vdr-plugin-graphlcd
- Current channel
- {ChannelNumber}
- Return: an integer value
- The Channel Number
- {ChannelName}
- Return: an string value, may empty
- The Channel Name
- {ChannelShortName}
- Return: an string value, may empty
- The Channel short Name, if present
- {ChannelProvider}
- Return: an string value, may empty
- The Provider Name, if present
- {ChannelPortal}
- Return: an string value, may empty
- The Name of the VDRs channel group the Channel belong to
- {ChannelSource}
- Return: an string value, may empty
- Signal source of the channel, as defined in sources.conf.
- {ChannelID}
- Return: an valid vdr channel id string, maybe ?
- The VDRs channel ID
- {ChannelHasTeletext} | {HasTeletext}
- Return: boolean
- True if Teletext is present
- {ChannelHasMultilang} | {HasMultilang}
- Return: boolean
- True if more than one Audio stream is present
- {ChannelHasDolby} | {HasDolby}
- Return: boolean
- True if Dolby Digital stream is present
- {ChannelIsEncrypted} | {IsEncrypted}
- Return: boolean
- True if the channel is encrypted
- {ChannelIsRadio} | {IsRadio}
- Return: boolean
- True if the channel is an Radio channel
- {ChannelAlias}
- Return: string, may empty?
- The ChannelAlias, this is an virtual channel Name mapped throw the channels.alias mapping file.
Its the preferred way for naming channel logos
- Recording
- {IsRecording[,<card number>]}
- ?
- {Recordings[,<card number>]}
- ?
- Present EPG
- {PresentValid}
- ?
- {PresentStartDateTime[:<strftime format>]}
- ?
- {PresentVpsDateTime[:<strftime format>]}
- ?
- {PresentEndDateTime[:<strftime format>]}
- ?
- {PresentDuration[:<duration format>]}
- ?
- {PresentProgress[:<duration format>]}
- ?
- {PresentRemaining[:<duration format>]}
- ?
- {PresentTitle}
- ?
- {PresentShortText}
- ?
- {PresentDescription}
- ?
- Following EPG
- {FollowingValid}
- ?
- {FollowingStartDateTime[:<strftime format>]}
- ?
- {FollowingVpsDateTime[:<strftime format>]}
- ?
- {FollowingEndDateTime[:<strftime format>]}
- ?
- {FollowingDuration[:<duration format>]}
- ?
- {FollowingTitle}
- ?
- {FollowingShortText}
- ?
- {FollowingDescription}
- ?
- Volume
- {VolumeCurrent}
- ?
- {VolumeTotal}
- ?
- {VolumeIsMute} | {IsMute}
- ?
- Replay
- {ReplayTitle}
- ?
- {ReplayPositionIndex[:<duration format>]}
- ?
- {ReplayDurationIndex[:<duration format>]}
- ?
- {ReplayIsPlaying} | {IsPlaying}
- ?
- {ReplayIsFastForward[:<replay speed>]} | {IsFastForward[:<replay speed>]}
- ?
- {ReplayIsFastRewind[:<replay speed>]} | {IsFastRewind[:<replay speed>]}
- ?
- {ReplayIsSlowForward[:<replay speed>]} | {IsSlowForward[:<replay speed>]}
- ?
- {ReplayIsSlowRewind[:<replay speed>]} | {IsSlowRewind[:<replay speed>]}
- ?
- {ReplayIsPausing} | {IsPausing}
- ?
- {ReplayPosition}
- ?
- {ReplayDuration}
- ?
- {ReplayRemaining[:<duration format>]}
- ?
- {ReplayMode}
- "cd", "dvd", "file", "image", "music", "vdr"
- {ReplayIsShuffle}
- Not implemented yet!
- {ReplayIsLoop}
- Not implemented yet!
- OSD related
- {Message}
- ?
- {MenuTitle}
- ?
- {MenuItem}
- ?
- {MenuCurrent}
- ?
- {IsMenuCurrent}
- ?
- {ButtonRed}
- ?
- {ButtonGreen}
- ?
- {ButtonYellow}
- ?
- {ButtonBlue}
- ?
- Settings
- {SettingShowChannelLogo}
- ?
- {SettingShowReplayLogo}
- ?
- {SettingShowSymbols}
- ?
- {SettingShowTimebar}
- ?
- {ScrollMode}
- ?
- {ScrollSpeed}
- ?
- {ScrollTime}
- ?
- {BrightnessActive}
- ?
- {BrightnessIdle}
- ?
- {BrightnessDelay}
- ?
- {DisplayMode}
- ?
Return "Normal" or "Interactive"
- General info
- {DateTime[:<strftime format>]}
- ?
- {ConfigPath}
- ?
- {SkinPath}
- ?
- {ScreenWidth}
- ?
- {ScreenHeight}
- ?
- {ForegroundColor}
- Return: an valid color string "0xAARRGGBB"
- return the foreground color as reportet by the display driver
- {BackgroundColor}
- Return: an valid color string "0xAARRGGBB"
- return the background color as reportet by the display driver
- {DefaultForegroundColor}
- Return: an valid color string "0xAARRGGBB"
- return the graphlcd default background color (currently set to black)
- {DefaultBackgroundColor}
- Return: an valid color string "0xAARRGGBB"
- return the graphlcd default foreground color (currently set to white)
- Set with SVDRP
svdrpsend plug graphlcd set <key> <value, space allowed> svdrpsend plug graphlcd setexp <exp> <key> <value, space allowed> svdrpsend plug graphlcd unset <key> svdrpsend plug graphlcd get <key>
- {ExtDataIsAvailable:<key>}
- Check if a given variable is set with an SVDRP call
- {ExtDataItem:<key>}
- Retrieve the contend of the given variable
- Other Plugins Services
- {ServiceIsAvailable:<service>}
- Check if a given Service is available
- {ServiceItem:<service>,<key>[,<parameter 1>][,<parameter 2>]}
- Retrieve a service value
- radio-Plugin Service
- {ServiceItem:radio,<key>}
- Update interval 100 ms
key Description default at rds_info = 2: <start hh>:<start mm> <title> | <artist>
at rds_info = 1: <radiotext>
at rds_info = 0: emptytitle Titel artist Artist text Radiotext rds_info info 0 = No RDS present
1 = Radiotext present
2 = Radiotext, Title and Artist presentrds_pty pty Program type
http://tech.ebu.ch/docs/techreview/trev_255-beale.pdf (Page 3)
- lcr-Plugin Service
- {ServiceItem:lcr,<key>}
- Update interval 60 s
key Description default ? destination ? price ? pulse ?
- femon-Plugin Service
- {ServiceItem:femon,<key>[,<printf format>][,<divisor>]}
- Update interval 2 s
key Description default status ? name ? snr ? signal ? percent_snr ? percent_signal ? ber ? unc ? video_bitrate vbr ? audio_bitrate abr ? dolby_bitrate dbr ?
- <printf format> and <divisor> are only available with key video_bitrate/vbr, audio_bitrate/abr and dolby_bitrate/dbr
- Format Strings
- printf Format String
- <printf format> is an valid printf format string
- strftime Format String
- <strftime format> is an valid strftime format string
- duration Format String
specifier Replaced by %H ? %k ? %M ? %m ? %S ? %f ?
Problems
Links
[1] | http://projects.vdr-developer.org/projects/show/graphlcd | new plugin homepage |
[2] | http://projects.vdr-developer.org/wiki/graphlcd/GraphlcdSkin | page for skin branch |