Stefan Rinke
Stefan Rinke
  
powered by FreeFind
 
  

Motivation

Der im Jahr 2001 gebaute Home Cinema PC nach der C'T Vision und Sound Plattform war mittlerweile doch arg in die Jahre gekommen. Etwas Neues mußte her. Schon länger hatte ich den XC-Cube von AOpen im Auge, weil das Design - wie ich finde - einfach unschlagbar ist.

Weil nun aber das Teil mit der Software die mitgeliefert wird nicht so recht will, machte ich mich gleich daran, das Ganze nochmal zu über arbeiten. Die Folgenden Abschnitte und Seiten liefern einen Überblick über alles mehr oder weniger wissenswerte.

Komponenten

CPU
Celeron 2.4 GHz
Graphik
Um in der Genuss eines TV-Outs zu kommen, setze ich eine ATI Radeon 9200 ein. Damit steht ein guten TV-Out zur Verfügung (ich betreibe den Cube nur am TV). Das Bild kommt auch schon beim Booten und nicht erst wenn ein spezieller Treiber geladen ist. Es müßte daher eigentlich auch mit der InstantOn Software funktionieren, das habe ich aber noch nicht getestet.

Dokumentation

Besonderes Interesse weckt natürlich das Front-Panel, welches mit dem PDF von AOpen (zu finden hier oder hier) auch einigermassen dokumentiert ist. Ich hab mit Girder inbesondere den Musik-Betrieb mit WinAmp komplett neu gebaut und dabei einiges aus dem Display rausgeholt.

MP3s mit Girder & WinAmp auf dem Cube

Da Musik oder genauer MP3 oder CD eigentlich das einzige ist, was prinzipiell auch ohne Display (TV oder Monitor) geht, hab ich mich daran gemacht das Ganze mit Girder zu bauen. Was heraus gekommen ist kann sich - denke ich - sehen lassen.

Funktionen

  • Coole Display Effekte: Status wird mit Symbolen angezeigt.
  • Temporäre Anzeige des Titels nach dem Wechsel.
  • Track und Zeit Anzeige wärend des Abspielens.
  • Scrollende Anzeige bei überlangen Titeln
  • Menü mit Playlisten-Katalog.
  • Kurzwahl mit Zifferntasten im Menü.
  • Blättern im Menü
  • Support der Remote-Control und natürlich auch der Tasten am Frontpanel.
  • Neu: Favoriten-Verwaltung, die meist gewählten Playlists schnell auswählbar.
  • Neu: Alle Tracks sind direkt mit den Ziffern-Tasten anwählbar

Display

Abb 1: während des Abspielens
Abb 2: Menüauswahl
Abb 3: Ziffernkurzwahl

Beschreibung

Die Bedienung mit der Fernbedienung ist intuitiv. Nach dem Start wird der Musik-Betrieb mit einem Drücken der CD/MP3 Taste oder dem Einlegen einer Musik-CD gestartet. Ein erneutes Drücken der Taste geht wieder in den PC-Modus zurück.
Alle Tasten zum Abspielen / Stoppen usw. funktionieren wie erwartet. Das Menü wird durch die Menütaste der Fernbedienung aufgerufen. Das Display zeigt nun eine Liste von Playlists mit einem dreistelligen Code zu Beginn an.
Diese Liste wird einfach aus einem Textfile geladen, was folgenden Aufbau hat:

    001|Face Value|C:\playlist\InTheAitTonight.m3u
    002|Genesis|C:\playlist\Genesis.m3u
    

Das Textfile muss im Girder-Verzeichnis abgelegt sein.

Jetzt kann man mit den Pfeiltasten nach oben und unten blättern und mit Return / Auswahl bestätigen und schon wird die Playliste abgespielt. Alternativ kann man den dreistelligen Code einfach über die Zifferntasten eingeben und mit Auswahl bestätigen. Nochmal auf Menü Drücken geht wieder in den Abspielmodus zurück.

Neu: Die Favoriten-Funktion wird mit der MEM Taste der Fernbedienung aufgerufen. Danach kann ebenfalls mit den Pfeiltasten geblättert werden und mit Return wird die Playlist gewählt. Die Favoriten werden bei jeder Auswahl einer Playliste aktualisiert, so dass immer die meistgewählten zuerst erscheinen.

Ebenfalls neu: Repeat und Shuffle (Scan-Taste) werden am Display auch angezeigt mir den passenden Symbolen, weiterhin kann jeder Track in der Playlist direkt mit den Ziffertasten angesprungen werden.

Damit kann man die wichtigsten Funktionen bereits nutzen, ohne einen Monitor oder das TV einschalten zu müssen.

Girder Stuff

Ein paar Funktionen in Girder mit LUA und dem Generic Serial Plugin machen das Ansteuern des Displays zum Kinderspiel. Weiterhin benutze ich das DVDSpy Plugin, um an die Status-Informationen zu kommen und die AlarmTimer muss ebenfalls aktiv sein. Ah ja ich verwende Girder 3.2.9 (die letzte freie Version). Ein paar Funktionen zum Display und auch das komplette GML-File findet ihr weiter unten.

Zunächst ein paar allgemeine LUA Funktionen ..

function displayRaw( data )
    SERIAL_SendData( "XCCubeEA65", data )
    local t = GetTickCount()
    repeat
    until GetTickCount() > t + 20
end
function displayAsc( data )
    if( strlen( data ) > 9 ) then
        data = strsub( data, 1,9 )
    end
    displayRaw( "/a0/00/80/8" .. strchar( 48 + strlen( data ) ) .. data )
end
function setSymbol( sym )
    displayRaw( "/a0/04/04/81" .. strchar( sym ) )
end
function resetSymbol( sym )
    displayRaw( "/a0/04/04/81" .. strchar( sym + 128 ) )
end
function clearAllSymbols( )
    displayRaw("/a0/04/04/80" )
    resetSymbol( 27 )
end
symOne = 18
symRepeat = 19
symSleep = 21
symTimer = 20
symTuned = 22
symProg = 23
symChap = 24
symTrack = 25
symTitle = 26
symDigital = 27
symAll = 98
symColon1 = 100 -- doppelpunkt ganz rechts
symColon2 = 102 -- doppelpunkt mitte
symExtraPoint1 = 103 -- extra Punkt in der Mitte pos 4
symExtraPoint1 = 105 -- extra Punkt in der Mitte pos 2
--
-- 122 - 115 sind die Dezimalpunkte von links nach rechts

function setNative( section, data, sec2, dat2 )
    displayRaw( "/a0/04/00/82" .. strchar( section + 128 ) .. strchar( data ) )
    if( sec2 ~= nil ) then
        displayRaw( "/a0/04/00/82" .. strchar( sec2 + 128 ) .. strchar( dat2 ) )
    end
end
function resetNative( section, data, sec2, dat2 )
    displayRaw( "/a0/04/05/82" .. strchar( section + 128 ) .. strchar( data ) )
    if( sec2 ~= nil ) then
        displayRaw( "/a0/04/05/82" .. strchar( sec2 + 128 ) .. strchar( dat2 ) )
    end
end
--
-- mit setNative / resetNative lassen sich alle Segmente einzeln ansteuern
-- Codes für die Zeichen ausserhalb der ASCII Matrix
-- setNative( 11, 1 ) -> dolby digtal
-- setNative( 11, 2 ) -> dts
-- 11,3 -> pro logic
-- 11,4 -> II ( pro logic II)
-- 11,5 -> red microphone
-- 11,6 -> red DVD sign
-- 11,7 -> red V
-- 11,8 -> red CD (together with 11,7 -> VCD)
-- 11,9 -> red MP3
-- 11,10 -> Play mark
-- 11,11 -> Pause mark
-- 11,12 -> Intro symbol
-- 11,13 -> red lock
--
function collectDigits( digit )
if( digitCount == nil ) then
   digitCount = 1
   digits = digit
else
   if( digitCount < 3 ) then
     digits = digits .. digit
     digitCount = digitCount + 1
   end
end
end
function displayStop ()
   resetNative( 11,10,11,11 )
end
function displayPause()
   resetNative( 11,10 )
   setNative( 11, 11 )
end
function displayPlay()
   resetNative( 11, 11 )
   setNative( 11, 10 )
end
function displayClearNative()
   displayRaw( "/a0/04/05/80" )
end
function setNativeSym( sym )
   if( sym == symMp3 ) then
      setNative( 11, 9 )
   end
end
function resetNativeSym( sym )
   if( sym == symMp3 ) then
      resetNative( 11, 9 )
   end
end

So wird das Display angesteuert:

local scroll = 0
if( Mode == 0 ) then -- normal mode show time
    Input = WimampTrack .. "   " .. gsub(WinampElapsed, ":", "" ) .. " "
    setSymbol( symTrack )
    setSymbol( 102 )
    resetSymbol( symTitle )
end
if( Mode == 1 ) then -- temp mode temporary display
    Input = Temp
    scroll = 1
    resetSymbol( symTrack )
    resetSymbol( 102 )
    setSymbol( symTitle )
end
if( Mode == 2 ) then -- menu mode
    if( digitCount ~= nil and digitCount > 0 ) then
       Input = "SEL " .. digits .. strrep(" ", 5 - digitCount )
    else
       Input = menuItem[menuIndex] .. " " .. title[ menuItem[menuIndex] ]
       scroll = 1
    end
end
if( Input ~= InputOld ) then -- input has changed
   ScrollPos = 0
   InputOld = Input
end
if( strlen( Input ) > 9 and scroll == 1 ) then
   ScrollPos = ScrollPos + 1
else
   ScrollPos = 0
end
if ( ScrollPos == strlen( Input ) ) then
    ScrollPos = 1
end
Display = strsub( Input, ScrollPos, ScrollPos + 9 )
if ( strlen( Display ) < 9 ) then
    Display = Display .. " " .. strsub(Input, 1, 9 - strlen( Display ))
end
displayAsc( Display )

Damit all diese Funktionen arbeiten muss das Generic Serial Plugin installiert sein. Ich hab folgende ini-Datei von BeatBox verwendet. Das Escaping mit "/" muss aktiviert sein und die Übersetzung von HEX->BIN deaktiviert. Bitte achtet darauf, dass beim Importierten der COM2 Port eingestellt wird.


[Device]
UserName=XCCubeEA65
Description=Aopen XC Cube AV (EA65) by Beatb0x - Jul, 9th 2004
[Properties]
BaudRate=6
Handshaking=0
ParityBits=0
WordSize=4
StopBits=0
EnableScript=0
EnableScriptVal=
DisableScript=0
DisableScriptVal=
[InputMessage]
Timeout=10
TimeoutValid=0
Timeout2=1
Timeout2Valid=0
ShowEvents=0
TermVal=129
TermSize=1
TerminatorProcessing=0
PrefixProcessing=0
Length=5
Translate=1
Type=1
BufferLength=201
UseName=0
NoCharEvents=0
CharEventScript=0
CharEventScriptString=
ModemEventScript=0
ModemEventScriptString=
RawChar=1
SilentErrors=0
[OutputMessage]
Timeout=10
TimeoutValid=0
Timeout2=1
Timeout2Valid=0
ShowEvents=0
TermVal=13
TermSize=1
TerminatorProcessing=0
PrefixProcessing=1
Length=1
Translate=0
Type=1
BufferLength=201
UseName=0
NoCharEvents=0
CharEventScript=0
CharEventScriptString=
ModemEventScript=0
ModemEventScriptString=
RawChar=0
SilentErrors=0

Weiterhin benutze ich noch das SendMessage-PlugIn sowie den AlarmTimer beide müssen aktiviert sein.

Girder GML-Datei

Hier findet ihr die komplette GML-Datei komplett fertig mit allen Codes für RC und Panel-Tasten.