Difference between revisions of "KML the missing manuel"

From KiSS DP 558 STAGE2 WiKi
Jump to: navigation, search
(BACKGROUND)
 
(33 intermediate revisions by the same user not shown)
Line 11: Line 11:
 
  Investigate ONMETADATA and SYSTEM
 
  Investigate ONMETADATA and SYSTEM
 
----
 
----
There has been a fair deal of material written on KISS Products, but very little for the people actually writing KML for the players. The purpose of this document is to document what is known. All information in this document has been tried on a DP-558, or has been found on the Internet.
+
There has been a fair deal of material written on KISS Products, but very little for the people actually writing KML for the players. <br />
 +
The purpose of this document is to document what is known. All information in this document has been tried on a DP-558, or has been found on the Internet.
 
<br />
 
<br />
  
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is available from www.fsf.org entitled "GNU Free Documentation License".
+
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or <br />
 +
any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the <br />
 +
license is available from www.fsf.org entitled "GNU Free Documentation License".
  
= 1. Quick Introduction =
+
[[Media:KML - The Missing Manual.pdf|KML - The Missing Manual]]
 
 
'''KML''' stands for ''Kiss Markup Language''. A code in development at ''KiSS technology'' that allows internet to be used on the KiSS. It's like your browser is loading HTML pages, KiSS players can load KML pages on the internet. Features for KML are only limited by the developers imagination and can be used for a wider range of adjustments for KiSS players with Ethernet connection. These KISS players can connect to websites and read pages authored in KML. KML is an XML format. You make one file per screen you want to display.
 
 
 
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
 
<KMLPAGE version='2.0'>
 
(...add page content...)
 
</KMLPAGE>
 
 
 
This very simple example renders a blue screen fading to black, with a plain white text in the top left hand corner stating 'Hello World!'.
 
 
 
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
 
<KMLPAGE version="2.0">
 
<BACKGROUND vgradient="0,0,0-0,0,128" />
 
<FILLRECT coords="0,0,719,479" pen="0" />
 
<TEXT coords="60,60" font="0" pen="255">Hello world!</TEXT>
 
</KMLPAGE>
 
= 2. Longer introduction =
 
== 2.1. Client Versions ==
 
 
 
DP-558 has KML client version 2.1. Others have version 2.0.
 
== 2.2. How to get started ==
 
 
 
If you own a DP-558 you can set up a webserver on port 8888 on the host that runs PC-Link. Then click on the Menu button on the remote, scroll down to Online KML-services, and select PC-Link KML Start page. The player will then fetch the /index.kml file from the webserver. You can type in one of the examples in the document to get started.
 
 
 
One might make the assumption, that it is possible to create an index.kml on a CD-ROM and then insert the CD-ROM into the player to get a standalone application, but this doesn't work.<br />
 
 
 
== 2.3. How the player accesss the website ==
 
 
 
The player makes a HTTP 1.0 GET request to the website and automatically adds some information about your player. /index.kml?PlayerID=ugeodosahwis&PlayerBrand=KiSS&PlayerModel=DP-558&PlayerLanguage=4&PlayerFirmware=105&ScreenWidth=720&ScreenHeight=576&ScreenForm=4x3
 
 
 
If possible set the mime-type to text/xml of the page. That way Internet Explorer and Mozilla will display the KML as XML when you look at the page. The player doesn't care.
 
<br />
 
 
 
= 3. KML Commands in alphabetical order =
 
 
 
 
 
=== BACKGROUND ===
 
'''''<big>Name</big>'''<br />''
 
 
 
BACKGROUND -- Set the screen background
 
 
 
<BACKGROUND {href=" url" | gradiant=" 1,2,3-4,5,6" | vgradiant=" 1,2,3-4,5,6" |  hgradiant=" 1,2,3-4,5,6" | wgradiant=" 1,2,3-4,5,6"/> }
 
<br />
 
'''''<big>Description</big>'''''
 
 
 
<BACKGROUND> sets the background. The url can point to JPG or GIF. If the image is smaller than the size of the screen, then it is centered. Setting the background doesn't clear the content.
 
 
 
=== FILLRECT ===
 
Name
 
FILLRECT -- Draw filled rectangle
 
Synopsis
 
 
 
<FILLRECT coords=" x,y,w,h" pen="colour" />
 
Description
 
 
 
Draws a filled rectangle in the pen colour. The coordinates are x, y, width and height. Bottom right corner on NTSC televisions is 720,480. On European PAL it is 720,576. Useful to blank the screen.<br />
 
 
 
=== FIP ===
 
Name
 
FIP -- Set text on front panel
 
Synopsis
 
 
 
<FIP speed='a' intensity='b'>
 
Description
 
 
 
Parameters: speed (a) - For scrolling messages (texts longer than available display space) number of 'ticks' between updating scroll position. Each tick is about 1/10 second. Thus, a scroll speed of 2 means at every other 'tick' the scroll message advances one position. If parameter is omitted, assumed to be 5 (~ 0.5 sec between scroll position advance) intensity (b) - The VFD display om the DP-5xx platform has 8 intensities, with 0 being dark and 7 being bright. If parameter omitted, assumed to be 7 (brightest).
 
Example
 
 
 
<FIP speed='2' intensity='6'>Add SCROLLING MESSAGE HERE</FIP>
 
 
 
=== GOTO ===
 
Name
 
GOTO -- Jump to target
 
Synopsis
 
 
 
<GOTO href="http://go to where" />
 
Description
 
 
 
Does the following: 1. Cancels all events associated with current KML document 2. Unloads (discards) current KML document 3. Loads new KML document. Node Parameters: href Location of KML document to be loaded [opened]. <GOTO href='$$PREVIOUSDOCUMENT$$' /> is possible.
 
Example
 
 
 
<GOTO href="http://www.host.com/kml/page2.xml" />
 
 
 
=== IMAGE ===
 
Name
 
IMAGE -- Display a GIF image
 
Synopsis
 
 
 
<IMAGE id=" logo" coords=" 74,84" [src=" http://which graphic.gif" /> ]
 
Description
 
 
 
Displays a GIF image at the coordinates. The src attribute is available from version 2.1. If 'id' is used, the image must have been loaded in an earlier LOADIMAGE command with matching 'id' attribute.<br />
 
 
 
=== KEY ===
 
Name
 
KEY -- Set action for key
 
Synopsis
 
 
 
<KEY id="key_id">
 
Description
 
 
 
KEY sets the action for a button on the remote. The id must be a numeric value from the list of key ids.
 
Example
 
 
 
<KEY id="93">
 
  <ONCLICK><![CDATA[ <GOTO href='http://...' />]]></ONCLICK>
 
</KEY>
 
 
 
 
 
=== LINE ===
 
Name
 
LINE -- Draw line
 
Synopsis
 
 
 
<LINE coords="100,100,400,100" pen="255" />
 
Description
 
 
 
Draws a one-pixel wide line.<br />
 
 
 
=== LOADIMAGE ===
 
Name
 
LOADIMAGE -- Fetch image from webserver
 
Synopsis
 
 
 
<LOADIMAGE id=" logo" href=" http://which graphic.gif" />
 
Description
 
 
 
Loads a GIF image from the URL given into a buffer in the player. The image can then be used by the <IMAGE/> element.
 
 
 
Be aware that on older players the ability to overwrite, update or delete loaded images from the KML image buffer is missing. This means, as soon as the ~20 image buffers are spent, you can load no new images.
 
 
 
You preload and display GIFs with separate commands, example:
 
 
 
<LOADIMAGE id='ebbec123' href='http://host/path/image.gif' />
 
<IMAGE coords='100,100' id='ebbec123' />
 
 
 
From version 2.1, you can load the image directly from the IMAGE command.
 
 
 
<IMAGE coords='100,100' id='bufferID' src='http://host/path/image.gif' />
 
 
 
Relative URLs are not available in version 2.1, but will come in version 2.5.<br />
 
 
 
=== MENUITEM ===
 
Name
 
MENUITEM -- Define menu item
 
Synopsis
 
 
 
<MENUITEM id="itemid">
 
Description
 
 
 
The player has builtin support for menus. If you define a number of menu items in the KML page, the player will automatically make the first one active, i.e. execute the commands associated with the ONHILITE eventhandler.
 
 
 
The down and right buttons are by default set to jump to the next menu item. Up and left are set to jump to the previous menu item.
 
Example
 
 
 
<MENUITEM id="04">
 
  <ONRIGHT><![CDATA[
 
    <MENUSELECT item='14' />
 
  ]]></ONRIGHT>
 
  <ONCLICK><![CDATA[
 
    <GOTO href='http://webpage/playerinfo.kml' />
 
  ]]></ONCLICK>
 
  <ONHILITE><![CDATA[
 
    <TEXT coords='220,176' font='0' pen='47'>Player information</TEXT>
 
  ]]></ONHILITE>
 
  <ONUNHILITE><![CDATA[
 
    <TEXT coords='220,176' font='0' pen='255'>Player information</TEXT>
 
  ]]></ONUNHILITE>
 
</MENUITEM>
 
       
 
 
 
=== MENUSELECT ===
 
Name
 
MENUSELECT -- Jump to menu item
 
Synopsis
 
 
 
<MENUSELECT item="one"/>
 
Description
 
 
 
This command makes the menu item referenced in the item attribute the active one.
 
Example
 
 
 
<KEY id="79">
 
  <ONCLICK><![CDATA[<MENUSELECT item='menu5' />]]></ONCLICK>
 
</KEY>
 
 
 
=== ONCLICK ===
 
Name
 
ONCLICK -- Eventhandler for click or Enter
 
Synopsis
 
 
 
<ONCLICK>
 
Description
 
 
 
ONCLICK is used inside MENUITEM and KEY elements. It encapsulates the actions to execute when the user clicks on the Enter button. If ONCLICK is used inside KEY, then it is the button number from KEY command that triggers the action.
 
Example
 
 
 
<ONCLICK><![CDATA[
 
    <GOTO href='http://webpage/playerinfo.kml' />
 
]]></ONCLICK>
 
   
 
 
 
=== ONDOWN ===
 
Name
 
ONDOWN -- Eventhandler for down button
 
Synopsis
 
 
 
<ONDOWN>
 
Example
 
 
 
<ONDOWN><![CDATA[
 
      (...commands to be executed...)
 
]]></ONDOWN>
 
 
 
===
 
ONHILITE ===
 
Name
 
ONHILITE -- Eventhandler for activation of menu item
 
Synopsis
 
 
 
<ONHILITE>
 
Description
 
 
 
Onhilite is used inside MENUITEM elements. It encapsulates the actions to execute when the user high-lights the menuitem. These are usually something that display the item as active.
 
Example
 
 
 
<ONHILITE><![CDATA[
 
      <TEXT coords='110,340' font='0' pen='255'>Menu text</TEXT>
 
]]></ONHILITE>
 
   
 
 
 
=== ONINTERVAL ===
 
Name
 
ONINTERVAL -- Eventhandler
 
Synopsis
 
 
 
<ONINTERVAL interval="number">
 
Description
 
 
 
Number is a number 1..10. The block inside is executed everytime the interval is over.<br />
 
 
 
=== ONLEFT ===
 
Name
 
ONLEFT -- Eventhandler for left button
 
Synopsis
 
 
 
<ONLEFT>
 
Description
 
 
 
<ONLEFT><![CDATA[ (...commands to be executed...) ]]></ONLEFT>
 
Example
 
 
 
<ONLEFT><![CDATA[
 
    <MENUSELECT item='item5' />
 
]]></ONLEFT>
 
   
 
 
 
=== ONMEDIASTOPPED ===
 
Name
 
ONMEDIASTOPPED -- Eventhandler to trigger when media stops
 
Synopsis
 
 
 
<ONMEDIASTOPPED>
 
Description
 
 
 
<ONMEDIASTOPPED><![CDATA[
 
      (...commands to be executed...)
 
]]></ONMEDIASTOPPED>
 
   
 
 
 
Example
 
 
 
<ONMEDIASTOPPED><![CDATA[
 
      <FIP speed='1' intensity='7'>STOPPED</FIP>
 
]]></ONMEDIASTOPPED>
 
   
 
===
 
ONMETADATA ===
 
Name
 
ONMETADATA -- Eventhandler media streams
 
Synopsis
 
 
 
<ONMETADATA>
 
Description
 
 
 
This is an eventhandler for metadata coming from shoutcast audio streams. Interjected into the stream are blocks containing information about the song, station etc. You can set up the ONMETADATA handler to catch this data and display it. The protocol isn't officially documented. The Kiss player can extract title, bitrate, genre and URL and will set the variables $$MP3_TITLE$$, $$MP3_BITRATE$$, $$MP3_GENRE$$ and $$MP3_URL$$.
 
 
 
For more information see the ShoutCast metadata protocol document on the Internet.
 
Example
 
 
 
<ONMETADATA><![CDATA[
 
<FILLRECT coords='0,395,719,85' pen='0' />
 
<TEXT coords="76,406" font="0" pen="118"> $$MP3_TITLE$$ </TEXT>
 
]]></ONMETADATA>
 
   
 
 
 
=== ONRIGHT ===
 
Name
 
ONRIGHT -- Eventhandler for right button
 
Synopsis
 
 
 
<ONRIGHT>
 
Example
 
 
 
<ONRIGHT><![CDATA[
 
      (...commands to be executed...)
 
]]></ONRIGHT>
 
   
 
 
 
=== ONTIMER ===
 
Name
 
ONTIMER -- Set a timer
 
Synopsis
 
 
 
<ONTIMER timeout="num">
 
Description
 
 
 
Set some actions to happen in the future. The timeout is in milliseconds.
 
Example
 
 
 
<ONTIMER timeout='1000'><![CDATA[
 
  <MENUSELECT item='14' />
 
]]></ONTIMER>
 
   
 
 
 
=== ONUNHILITE ===
 
Name
 
ONUNHILITE -- Eventhandler for deactivation of menu item
 
Synopsis
 
 
 
<ONUNHILITE>
 
Description
 
 
 
Onunhilite is used inside MENUITEM elements. It encapsulates the actions to execute when the user leaves the menuitem. These ara usually something that visually show that the item is now inactive.
 
Example
 
 
 
<ONUNHILITE><![CDATA[
 
      <TEXT coords='110,340' font='0' pen='255'>Menu text</TEXT>
 
]]></ONUNHILITE>
 
   
 
=== ONUNLOAD ===
 
Name
 
ONUNLOAD -- Eventhandler
 
Synopsis
 
 
 
<ONUNLOAD>
 
Description
 
 
 
...
 
Example
 
 
 
<ONUNLOAD><![CDATA[
 
      (...commands to be executed...)
 
]]></ONUNLOAD>
 
 
 
=== ONUP ===
 
Name
 
ONUP -- Eventhandler for up button
 
Synopsis
 
 
 
<ONUP>
 
Description
 
 
 
This command describes what should happen when the user clicks on the up button. The default action for menu items is to go to the preceeding menu item.
 
Example
 
 
 
<ONUP><![CDATA[
 
      (...commands to be executed...)
 
]]></ONUP>
 
   
 
 
 
=== PLAYMEDIA ===
 
Name
 
PLAYMEDIA -- Play multimedia file from address
 
Synopsis
 
 
 
<PLAYMEDIA href="http://tothefile.pls" />
 
Description
 
 
 
Media must be a Shoutcast playlist (.pls) file. Each file inside the PLS file must point to a Shoutcast stream. Pointing to an MP3 file appears not to work.
 
Example
 
 
 
<ONCLICK><![CDATA[
 
<PLAYMEDIA href='http://www.shoutcast.com/sbin/shoutcast-playlist.pls?rn=5224&amp;file=filename' />
 
]]></ONCLICK>
 
 
 
=== RECT ===
 
Name
 
RECT -- Draw rectangle
 
Synopsis
 
 
 
<RECT coords="100,100,400,100" pen="255" />
 
Description
 
 
 
Draws rectangle (1 pixel line width) on graphics layer. Parameters:
 
 
 
    coords Placement and size of rectangle.
 
 
 
    pen Color or palette index.
 
 
 
Parameter data for "coords" :
 
 
 
    x Pixel X coordinate of top-left corner
 
 
 
    y Pixel Y coordinates of top-left corner
 
 
 
    w Pixel Width of rectangle
 
 
 
    h Pixel Height of rectangle
 
 
 
Example
 
 
 
<RECT coords="100,100,400,100" pen="255" />
 
 
 
Draws a 400 x 100 white rectangle.<br />
 
 
 
=== STOPMEDIA ===
 
Name
 
STOPMEDIA -- Stop play of multimedia file
 
Synopsis
 
 
 
<STOPMEDIA/>
 
Description
 
 
 
...<br />
 
 
 
=== SYSTEM ===
 
Name
 
SYSTEM -- System function
 
Synopsis
 
 
 
<SYSTEM function="browsedisc|browsehdd|browsepclink" param1="audio|video|pictures" [param2="_" | param3="_" | param4="_" | param5="_" | param6="_"]
 
function="runsetup|runethernetsetup|exit" />
 
Description
 
 
 
Only works from local KML-pages, containing "file://" in the URL. If the URL starts with "http://" SYSTEM is ignored.<br />
 
===
 
TEXT ===
 
Name
 
TEXT -- Display text at coordinate
 
Synopsis
 
 
 
<TEXT coords='101,180' font='size' pen='colour'>
 
Description
 
 
 
The font attribute can be from 0 to 3. Zero is the small font, and three is the largest font. The "4" font has some strange glyphs. Text does not wrap if it is longer than screen width.
 
Example
 
 
 
<TEXT coords='101,250' font='0' pen='31'>
 
Text here will show Small!
 
</TEXT>
 
 
 
=== UNLOADIMAGE ===
 
Name
 
UNLOADIMAGE -- Remove image from buffer
 
Synopsis
 
 
 
<UNLOADIMAGE id="imageid"/>
 
Description
 
 
 
There are 24 buffers available for images on the player. This command frees one buffer. The buffers are presumably cleared when the player is directed to another page.
 
4. Colour Codes
 
 
 
DP-5xx OSD graphics are 8-bit. All images and graphics on the 8-bit OSD layer share a common 256-colour palette. Each colour entry in the palette has an associated alpha (opacity) value as well. Newer KiSS products based on the EM86xx chip will have full 32-bit colour (24-bit RGB + 8-bit alpha), but this is not an option on the DP-5xx. The GIF decoder discards the palette bundled with the image, and makes no attempt to re-map the image to the common system palette either.
 
 
 
KiSS currently has no plans for changing the colour table, the behavior of the GIF decoder, or providing KML options for letting individual KML sites alter the colour table, the main reason being that the colour table is shared with menus and everything else that happens on the OSD layer. Instead you should adapt your 8-bit artwork for the OSD to fit the existing palette.
 
 
 
5. Button Codes
 
5.1. Key IDs :
 
 
 
ID Button
 
73 Button 0
 
74 Button 1
 
75 Button 2
 
76 Button 3
 
77 Button 4
 
79 Button 5
 
80 Button 6
 
81 Button 7
 
82 Button 8
 
83 Button 9
 
84 Button TITLE MENU
 
93 Button RETURN
 
94 Button <<
 
95 Button >>
 
96 Button STEP
 
97 Button AUDIO
 
98 Button SUBPIC
 
99 Button ZOOM
 
100 Button ANGLE
 
101 Button REPEAT
 
102 Button MARK
 
103 Button CLEAR
 
104 Button SRCH
 
768 Button SETUP
 
16387 Button PLAY/PAUSE
 
16388 Button NEXT
 
16389 Button PREVIOUS
 
 
 
5.2. Button Codes
 
 
 
Button Code Name Button
 
SHOW_ONE_KEYDOWN 1
 
SHOW_TWO_KEYDOWN 2
 
SHOW_THREE_KEYDOWN 3
 
SHOW_FOUR_KEYDOWN 4
 
SHOW_FIVE_KEYDOWN 5
 
SHOW_SIX_KEYDOWN 6
 
SHOW_SEVEN_KEYDOWN 7
 
SHOW_EIGHT_KEYDOWN 8
 
SHOW_NINE_KEYDOWN 9
 
SHOW_ZERO_KEYDOWN 0
 
SHOW_TITLE_KEYDOWN Title Menu
 
SHOW_MENU_KEYDOWN Root Menu
 
SHOW_RETURN_KEYDOWN Return
 
SHOW_UP_KEYDOWN Up
 
SHOW_DOWN_KEYDOWN Down
 
SHOW_LEFT_KEYDOWN Left
 
SHOW_RIGHT_KEYDOWN Right
 
SHOW_ENTER_KEYDOWN Enter
 
SHOW_REV_KEYDOWN Fast Reverse
 
SHOW_PLAY_KEYDOWN Play/Pause
 
SHOW_FWD_KEYDOWN Fast Forward
 
SHOW_PREV_KEYDOWN Previous
 
SHOW_NEXT_KEYDOWN Next
 
SHOW_STEP_KEYDOWN Single Step
 
SHOW_AUDIO_KEYDOWN Audio
 
SHOW_SUBTITLE_KEYDOWN Subtitle
 
SHOW_ANGLE_KEYDOWN Angle
 
SHOW_ZOOM_KEYDOWN Zoom
 
SHOW_REPEAT_KEYDOWN Repeat
 
SHOW_BOOKMARK_KEYDOWN Bookmark
 
SHOW_SETUP_KEYDOWN Setup
 
SHOW_CLEAR_KEYDOWN Clear
 
SHOW_SEARCH_KEYDOWN Search
 
 
 
6. Examples
 
 
 
Example 1. One-item menu
 
 
 
This example shows a menu item that highlights when selected.
 
 
 
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
 
<KMLPAGE version='2.0'>
 
<FILLRECT coords="0,0,719,479" pen="0" />
 
<MENUITEM id="1">
 
  <ONCLICK><![CDATA[ <GOTO href='http://www.movimu.com/kml/kml-index.php' /> ]]></ONCLICK>
 
  <ONHILITE><![CDATA[ <TEXT coords='220,108' font='0' pen='47'>Craig's portal</TEXT>
 
          ]]></ONHILITE>
 
  <ONUNHILITE><![CDATA[ <TEXT coords='220,108' font='0' pen='255'>Craig's portal</TEXT>
 
          ]]></ONUNHILITE>
 
</MENUITEM>
 
</KMLPAGE>
 
 
 
Example 2. Shoutcast PLS file
 
 
 
Shoutcast PLS file for PLAYMEDIA action.
 
 
 
[playlist]
 
numberofentries=4
 
File1=http://64.236.34.67:80/stream/1038
 
Title1=(#1 - 792/13658) HitzRadio.com - #1 For All The Hits!
 
Length1=-1
 
File2=http://64.236.34.196:80/stream/1038
 
Title2=(#2 - 1268/21073) HitzRadio.com - #1 For All The Hits!
 
Length2=-1
 
File3=http://64.236.34.97:80/stream/1038
 
Title3=(#3 - 1531/22082) HitzRadio.com - #1 For All The Hits!
 
Length3=-1
 
File4=http://205.188.234.38:8070
 
Title4=(#4 - 10/10) HitzRadio.com - #1 For All The Hits!
 
Length4=-1
 
Version=2
 
 
 
Explanation of entries:
 
 
 
[playlist]: Signifies that this is a playlist. This is case sensitive.
 
 
 
File#=: Location of the file in any of the formats described above. This is also case sensitive. Also the # sign after "File" signifies what file number it is. The first file in the playlist is "File1", the second is "File2" and so on.
 
 
 
Title#=: Title to display. This is usually the title read from the file name or ID3 tags. Like the other fields, this is case sensitive. This also can be the name of a stream. Like "File#" the pound sign (#) is replaced by the entry number that is in the playlist.
 
 
 
Length#=": Length in seconds, this is also case sensitive. On the last entry there is a negative one, this is usually seen on streams, it tells the program to ignore the time entry. Like "File#" the pound sign (#) is replaced by the entry number that is in the playlist.
 
 
 
NumberOfEntries=#: The total number of entries in the playlist. This should match the last number on the "File#", "Title#", and "Length#" fields. Also case sensitive.
 
 
 
Version=2: This required entry near the bottom tells the player what format the PLS is in. Older versions of the PLS format did not include this. Like everything else, it is case sensitive.
 

Latest revision as of 13:39, 4 March 2012

KML - The Missing Manual Søren Roug

Copyright © 2004 Søren Roug
Revision History
Revision 1:     	7 Oct 2004	
First draft
Revision 2	       24 Oct 2004	
Investigate           PLAYMEDIA and use of KML on CD-ROM
Revision 3	       27 Oct 2004	
Investigate ONMETADATA and SYSTEM

There has been a fair deal of material written on KISS Products, but very little for the people actually writing KML for the players.
The purpose of this document is to document what is known. All information in this document has been tried on a DP-558, or has been found on the Internet.

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or
any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the
license is available from www.fsf.org entitled "GNU Free Documentation License".

KML - The Missing Manual