Merge remote branch 'origin/bug_530_add_dm800se_support'
authorghost <andreas.monzner@multimedia-labs.de>
Wed, 6 Oct 2010 09:55:09 +0000 (11:55 +0200)
committerghost <andreas.monzner@multimedia-labs.de>
Wed, 6 Oct 2010 09:55:09 +0000 (11:55 +0200)
1  2 
data/skin_default.xml
lib/dvb/dvb.cpp
lib/dvb/dvb.h
lib/gdi/font.cpp
lib/gdi/lcd.cpp

diff --combined data/skin_default.xml
@@@ -164,9 -164,7 +164,7 @@@ self.instance.move(ePoint((720-wsizex)/
  
                </applet>
        </screen>
-       <screen name="ChoiceBox_summary" position="0,0" size="132,64">
-               <widget source="parent.summary_list" render="Label" position="6,0" size="126,64" font="Regular;11" />
-       </screen>       
        <!-- Common interface -->
        <screen name="MMIDialog" position="center,center" size="450,270">
                <widget name="title" position="10,10" size="430,25" font="Regular;23" />
@@@ -511,10 -509,6 +509,6 @@@ newwidth = wsize[0
  self.instance.move(ePoint(orgpos.x() + (orgwidth - newwidth)/2, orgpos.y()))
                </applet>
        </screen>
-       <screen name="MessageBox_summary" position="0,0" size="132,64">
-               <widget source="parent.Text" render="Label" position="0,0" size="132,52" font="Regular;11" halign="center" valign="center" />
-               <widget source="parent.selectedChoice" render="Label" position="6,50" size="120,14" font="Regular;14" halign="center" valign="center" />
-       </screen>
        <!-- Minute input -->
        <screen name="MinuteInput" position="center,center" size="280,60" title="Seek">
                <widget name="minutes" position="80,15" size="160,25" halign="right" font="Regular;23" />
                <widget source="key_green" render="Label" position="140,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
                <widget source="key_yellow" render="Label" position="280,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" transparent="1" />
                <widget source="key_blue" render="Label" position="420,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#18188b" transparent="1" />
 -              <widget name="list" position="5,50" size="550,280" scrollbarMode="showOnDemand" zPosition="10"/>
 +              <widget source="list" render="Listbox" position="5,50" size="550,280" zPosition="10" scrollbarMode="showOnDemand">
 +                      <convert type="TemplatedMultiContent"> <!--  iface, name, description, interfacepng, defaultpng, activepng, divpng  -->
 +                              {"template": [
 +                                              MultiContentEntryText(pos = (85, 6), size = (440, 28), font=0, flags = RT_HALIGN_LEFT|RT_VALIGN_TOP, text = 1), # index 1 is the interfacename
 +                                              MultiContentEntryText(pos = (85, 43), size = (440, 20), font=1, flags = RT_HALIGN_LEFT|RT_VALIGN_BOTTOM, text = 2), # index 2 is the description
 +                                              MultiContentEntryPixmapAlphaTest(pos = (2, 8), size = (54, 54), png = 3), # index 3 is the interface pixmap
 +                                              MultiContentEntryPixmapAlphaTest(pos = (63, 46), size = (15, 16), png = 4), # index 4 is the default pixmap
 +                                      ],
 +                              "fonts": [gFont("Regular", 28),gFont("Regular", 20)],
 +                              "itemHeight": 70
 +                              }
 +                      </convert>
 +              </widget>
                <ePixmap pixmap="skin_default/div-h.png" position="0,340" zPosition="1" size="560,2" />
                <widget source="introduction" render="Label" position="0,350" size="560,50" zPosition="10" font="Regular;21" halign="center" valign="center" backgroundColor="#25062748" transparent="1" />
        </screen>
                <ePixmap pixmap="skin_default/volume.png" position="0,0" size="214,21" />
                <widget name="Volume" pixmap="skin_default/progress_small.png" position="31,7" zPosition="1" size="168,7" transparent="1" />
        </screen>
+       <!-- JobView -->
+       <screen name="JobView" position="center,center" size="520,350" title="Job View">
+               <widget source="job_name" render="Label" position="20,12" size="480,60" font="Regular;28" />
+               <widget source="job_task" render="Label" position="20,90" size="480,50" font="Regular;23" />
+               <widget source="job_progress" render="Progress" position="20,162" size="480,36" borderWidth="2" backgroundColor="#254f7497" />
+               <widget source="job_progress" render="Label" position="120,166" size="280,32" font="Regular;28" foregroundColor="#000000" zPosition="2" halign="center" transparent="1"  >
+                       <convert type="ProgressToText" />
+               </widget>
+               <widget source="job_status" render="Label" position="20,212" size="480,26" font="Regular;23" />
+               <widget name="config" position="20,254" size="480,20" />
+               <widget source="cancelable" render="Pixmap" pixmap="skin_default/buttons/red.png" position="20,300" size="140,40" alphatest="on" >
+                       <convert type="ConditionalShowHide" />
+               </widget>
+               <widget source="cancelable" render="FixedLabel" text="Cancel" position="20,300" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" >
+                       <convert type="ConditionalShowHide" />
+               </widget>
+               <widget source="finished" render="Pixmap" pixmap="skin_default/buttons/green.png" position="190,300" size="140,40" alphatest="on" >
+                       <convert type="ConditionalShowHide" />
+               </widget>
+               <widget source="finished" render="FixedLabel" text="OK" font="Regular;20" halign="center" valign="center" position="190,300" size="140,40" transparent="1" backgroundColor="#1f771f" >
+                       <convert type="ConditionalShowHide" />
+               </widget>
+               <widget source="backgroundable" render="Pixmap" pixmap="skin_default/buttons/blue.png" position="360,300" size="140,40" alphatest="on" >
+                       <convert type="ConditionalShowHide" />
+               </widget>
+               <widget source="backgroundable" render="FixedLabel" text="Continue in background" font="Regular;20" halign="center" valign="center" position="360,300" size="140,40" transparent="1" backgroundColor="#18188b" >
+                       <convert type="ConditionalShowHide" />
+               </widget>
+       </screen>
+       <!-- VirtualKeyBoard -->
+       <screen name="VirtualKeyBoard" position="center,center" size="560,350" zPosition="99" title="Virtual KeyBoard">
+               <ePixmap pixmap="skin_default/vkey_text.png" position="9,35" zPosition="-4" size="542,52" alphatest="on" />
+               <widget name="header" position="10,10" size="500,20" font="Regular;20" transparent="1" noWrap="1" />
+               <widget name="text" position="12,35" size="536,46" font="Regular;46" transparent="1" noWrap="1" halign="right" />
+               <widget name="list" position="10,100" size="540,225" selectionDisabled="1" transparent="1" />
+       </screen>
+       <!-- FileBrowser -->
+       <screen name="FileBrowser" position="center,center" size="520,430" title="DVD File Browser" >
+               <ePixmap pixmap="skin_default/buttons/red.png" position="0,0" size="140,40" alphatest="on" />
+               <ePixmap pixmap="skin_default/buttons/green.png" position="140,0" size="140,40" alphatest="on" />
+               <widget source="key_red" render="Label" position="0,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
+               <widget source="key_green" render="Label" position="140,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
+               <widget name="filelist" position="5,50" size="510,370" scrollbarMode="showOnDemand" />
+       </screen>
  
        <!-- LCD/OLED Screens -->
  
        <!-- LCD screen (channelselection) -->
-       <screen name="ChannelSelection_summary" position="0,0" size="132,64">
+       <screen name="ChannelSelection_summary" position="0,0" size="132,64" id="1">
                <widget source="parent.ServiceEvent" render="Label" position="6,0" size="120,25" font="Regular;14" halign="center" valign="center" >
                        <convert type="ServiceName">Name</convert>
                </widget>
                <widget source="global.CurrentTime" render="Label" position="100,34" zPosition="1" size="26,30" font="Regular;16" valign="top">
                        <convert type="ClockToText">Format:%S</convert>
                </widget>
+       </screen> 
+       <!-- Color OLED screen (ChannelSelection) -->
+       <screen name="ChannelSelection_summary" position="0,0" size="96,64" id="2">
+               <widget source="parent.ServiceEvent" render="Label" position="0,0" size="96,28" font="Regular;16" halign="center" valign="center" >
+                       <convert type="ServiceName">Name</convert>
+               </widget>
+               <widget source="session.Event_Now" render="Progress" position="0,30" size="96,8" borderWidth="1" backgroundColor="dark">
+                       <convert type="EventTime">Progress</convert>
+               </widget>
+               <widget source="global.CurrentTime" render="Label" position="0,38" size="96,26" font="Regular;32" halign="center" valign="center" foregroundColor="#FFFFFF" backgroundColor="#000000" >
+                       <convert type="ClockToText">Format:%H:%M</convert>
+               </widget>
        </screen>
        <!-- LCD screen (main) -->
-       <screen name="InfoBarSummary" position="0,0" size="132,64">
+       <screen name="InfoBarSummary" position="0,0" size="132,64" id="1">
                <widget source="session.CurrentService" render="Label" position="6,0" size="120,25" font="Regular;14" halign="center" valign="center" >
                        <convert type="ServiceName">Name</convert>
                </widget>
                        <convert type="ConditionalShowHide">Blink</convert>
                </widget>
        </screen>
-       <!-- LCD screen (menus) -->
-       <screen name="MenuSummary" position="0,0" size="132,64">
-               <widget source="parent.title" render="Label" position="6,0" size="120,32" font="Regular;14" halign="center" valign="center"/>
-               <widget source="parent.menu" render="Label" position="6,32" size="120,32" font="Regular;16" halign="center" valign="center">
-                       <convert type="StringListSelection" />
+       <!-- Color OLED screen (main) -->
+       <screen name="InfoBarSummary" position="0,0" size="96,64" id="2">
+               <widget source="session.CurrentService" render="Label" position="0,0" size="96,28" font="Regular;16" halign="center" valign="center" >
+                       <convert type="ServiceName">Name</convert>
+               </widget>
+               <widget source="session.Event_Now" render="Progress" position="0,30" size="96,8" borderWidth="1" backgroundColor="dark">
+                       <convert type="EventTime">Progress</convert>
+               </widget>
+               <widget source="global.CurrentTime" render="Label" position="0,38" size="96,26" font="Regular;32" halign="center" valign="center" foregroundColor="#FFFFFF" backgroundColor="#000000" >
+                       <convert type="ClockToText">Format:%H:%M</convert>
+               </widget>
+               <widget source="session.RecordState" render="FixedLabel" text=" " position="0,38" zPosition="1" size="96,30">
+                       <convert type="ConfigEntryTest">config.usage.blinking_display_clock_during_recording,True,CheckSourceBoolean</convert>
+                       <convert type="ConditionalShowHide">Blink</convert>
                </widget>
        </screen>
        <!-- LCD screen (movieplayer) -->
-       <screen name="InfoBarMoviePlayerSummary" position="0,0" size="132,64">
+       <screen name="InfoBarMoviePlayerSummary" position="0,0" size="132,64" id="1">
                <widget source="session.CurrentService" render="Label" position="6,0" size="120,25" font="Regular;14" halign="center" valign="center" >
                        <convert type="ServiceName">Name</convert>
                </widget>
                        <convert type="ConditionalShowHide">Blink</convert>
                </widget>
        </screen>
+       <!-- Color OLED screen (movieplayer) -->
+       <screen name="InfoBarMoviePlayerSummary" position="0,0" size="96,64" id="2">
+               <widget source="session.CurrentService" render="Label" position="0,0" size="96,28" font="Regular;16" halign="center" valign="center" >
+                       <convert type="ServiceName">Name</convert>
+               </widget>
+               <widget source="session.Event_Now" render="Progress" position="0,30" size="96,8" borderWidth="1" backgroundColor="dark">
+                       <convert type="EventTime">Progress</convert>
+               </widget>
+               <widget source="global.CurrentTime" render="Label" position="0,38" size="96,26" font="Regular;32" halign="center" valign="center" foregroundColor="#FFFFFF" backgroundColor="#000000" >
+                       <convert type="ClockToText">Format:%H:%M</convert>
+               </widget>
+               <widget source="session.RecordState" render="FixedLabel" text=" " position="0,38" zPosition="1" size="96,30">
+                       <convert type="ConfigEntryTest">config.usage.blinking_display_clock_during_recording,True,CheckSourceBoolean</convert>
+                       <convert type="ConditionalShowHide">Blink</convert>
+               </widget>
+       </screen>
+       <!-- LCD screen (ChoiceBox) -->
+       <screen name="ChoiceBox_summary" position="0,0" size="132,64" id="1">
+               <widget source="parent.summary_list" render="Label" position="6,0" size="126,64" font="Regular;11" />
+       </screen>
+       <!-- Color OLED screen (ChoiceBox) -->
+       <screen name="ChoiceBox_summary" position="0,0" size="96,64" id="2">
+               <widget source="parent.summary_list" render="Label" position="0,0" size="96,64" font="Regular;10" />
+       </screen>       
+       <!-- LCD screen (MessageBox) -->
+       <screen name="MessageBox_summary" position="0,0" size="132,64" id="1">
+               <widget source="parent.Text" render="Label" position="0,0" size="132,52" font="Regular;11" halign="center" valign="center" />
+               <widget source="parent.selectedChoice" render="Label" position="6,50" size="120,14" font="Regular;14" halign="center" valign="center" />
+       </screen>
+       <!-- Color OLED screen (MessageBox) -->
+       <screen name="MessageBox_summary" position="0,0" size="96,64" id="2">
+               <widget source="parent.Text" render="Label" position="0,0" size="96,52" font="Regular;10" halign="center" valign="center" />
+               <widget source="parent.selectedChoice" render="Label" position="0,50" size="96,14" font="Regular;12" halign="center" valign="center" />
+       </screen>
+       <!-- LCD screen (menus) -->
+       <screen name="MenuSummary" position="0,0" size="132,64" id="1">
+               <widget source="parent.title" render="Label" position="6,0" size="120,32" font="Regular;14" halign="center" valign="center"/>
+               <widget source="parent.menu" render="Label" position="6,32" size="120,32" font="Regular;16" halign="center" valign="center">
+                       <convert type="StringListSelection" />
+               </widget>
+       </screen> 
+       <!-- Color OLED screen (menus) -->
+       <screen name="MenuSummary" position="0,0" size="96,64" id="2">
+               <widget source="parent.title" render="Label" position="0,0" size="96,32" font="Regular;15" halign="center" valign="center"/>
+               <widget source="parent.menu" render="Label" position="0,32" size="96,32" font="Regular;16" halign="center" valign="top">
+                       <convert type="StringListSelection" />
+               </widget>
+       </screen>       
+       <!-- LCD screen (ServiceScan) -->
+       <screen name="ServiceScanSummary" position="0,0" size="132,64" id="1">
+               <widget name="Title" position="6,4" size="120,42" font="Regular;16" transparent="1" />
+               <widget name="Service" position="6,22" size="120,26" font="Regular;12" transparent="1" />
+               <widget name="scan_progress" position="6,50" zPosition="1" borderWidth="1" size="56,12" backgroundColor="dark" />
+       </screen>
+       <!-- Color OLED screen (ServiceScan) -->
+       <screen name="ServiceScanSummary" position="0,0" size="96,64" id="2">
+               <widget name="Title" position="0,0" size="96,30" font="Regular;14" transparent="1" />
+               <widget name="Service" position="0,30" size="96,20" font="Regular;10" transparent="1" />
+               <widget name="scan_progress" position="0,50" zPosition="1" borderWidth="1" size="96,12" backgroundColor="dark" />
+       </screen>
        <!-- LCD screen (setup) -->
-       <screen name="SetupSummary" position="0,0" size="132,64">
+       <screen name="SetupSummary" position="0,0" size="132,64" id="1">
                <widget source="SetupTitle" render="Label" position="6,0" size="120,16" font="Regular;12" />
                <widget source="SetupEntry" render="Label" position="6,16" size="120,32" font="Regular;12" />
                <widget source="SetupValue" render="Label" position="6,48" size="120,16" font="Regular;12" />
        </screen>
+       <!-- Color OLED screen (setup) -->
+       <screen name="SetupSummary" position="0,0" size="96,64" id="2">
+               <widget source="SetupTitle" render="Label" position="0,0" size="96,16" font="Regular;10" />
+               <widget source="SetupEntry" render="Label" position="0,16" size="96,32" font="Regular;10" />
+               <widget source="SetupValue" render="Label" position="0,48" size="96,16" font="Regular;10" />
+       </screen>
        <!-- LCD screen (misc) -->
-       <screen name="SimpleSummary" position="0,0" size="132,64">
+       <screen name="SimpleSummary" position="0,0" size="132,64" id="1">
                <widget source="parent.Title" render="Label" position="6,0" size="120,64" font="Regular;16" halign="center" valign="center" />
        </screen>
+       <!-- Color OLED screen (misc) -->
+       <screen name="SimpleSummary" position="0,0" size="96,64" id="2">
+               <widget source="parent.Title" render="Label" position="0,0" size="96,64" font="Regular;14" halign="center" valign="center" />
+       </screen>
        <!-- LCD screen (standby) -->
-       <screen name="StandbySummary" position="0,0" size="132,64">
+       <screen name="StandbySummary" position="0,0" size="132,64" id="1">
                <widget source="global.CurrentTime" render="Label" position="6,0" size="120,64" font="Regular;40" halign="center" valign="center">
                        <convert type="ClockToText">Format:%H:%M</convert>
                </widget>
                        <convert type="ConditionalShowHide">Blink</convert>
                </widget>
        </screen>
-       <!-- JobView -->
-       <screen name="JobView" position="center,center" size="520,350" title="Job View">
-               <widget source="job_name" render="Label" position="20,12" size="480,60" font="Regular;28" />
-               <widget source="job_task" render="Label" position="20,90" size="480,50" font="Regular;23" />
-               <widget source="job_progress" render="Progress" position="20,162" size="480,36" borderWidth="2" backgroundColor="#254f7497" />
-               <widget source="job_progress" render="Label" position="120,166" size="280,32" font="Regular;28" foregroundColor="#000000" zPosition="2" halign="center" transparent="1"  >
-                       <convert type="ProgressToText" />
-               </widget>
-               <widget source="job_status" render="Label" position="20,212" size="480,26" font="Regular;23" />
-               <widget name="config" position="20,254" size="480,20" />
-               <widget source="cancelable" render="Pixmap" pixmap="skin_default/buttons/red.png" position="20,300" size="140,40" alphatest="on" >
-                       <convert type="ConditionalShowHide" />
-               </widget>
-               <widget source="cancelable" render="FixedLabel" text="Cancel" position="20,300" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" >
-                       <convert type="ConditionalShowHide" />
-               </widget>
-               <widget source="finished" render="Pixmap" pixmap="skin_default/buttons/green.png" position="190,300" size="140,40" alphatest="on" >
-                       <convert type="ConditionalShowHide" />
-               </widget>
-               <widget source="finished" render="FixedLabel" text="OK" font="Regular;20" halign="center" valign="center" position="190,300" size="140,40" transparent="1" backgroundColor="#1f771f" >
-                       <convert type="ConditionalShowHide" />
-               </widget>
-               <widget source="backgroundable" render="Pixmap" pixmap="skin_default/buttons/blue.png" position="360,300" size="140,40" alphatest="on" >
-                       <convert type="ConditionalShowHide" />
+       <!-- Color OLED screen (standby) -->
+       <screen name="StandbySummary" position="0,0" size="96,64" id="2">
+               <widget source="global.CurrentTime" render="Label" position="0,0" size="96,64" font="Regular;38" halign="center" valign="center">
+                       <convert type="ClockToText">Format:%H:%M</convert>
                </widget>
-               <widget source="backgroundable" render="FixedLabel" text="Continue in background" font="Regular;20" halign="center" valign="center" position="360,300" size="140,40" transparent="1" backgroundColor="#18188b" >
-                       <convert type="ConditionalShowHide" />
+               <widget source="session.RecordState" render="FixedLabel" position="0,0" zPosition="1" size="96,64" text=" ">
+                       <convert type="ConfigEntryTest">config.usage.blinking_display_clock_during_recording,True,CheckSourceBoolean</convert>
+                       <convert type="ConditionalShowHide">Blink</convert>
                </widget>
        </screen>
-       <!-- JobView Summary -->
-       <screen name="JobView_summary" position="0,0" size="132,64">
+       <!-- LCD screen (JobView) -->
+       <screen name="JobView_summary" position="0,0" size="132,64" id="1">
                <widget source="parent.summary_job_name" render="Label" position="6,4" size="120,42" font="Regular;16" />
                <widget source="parent.summary_job_task" render="Label" position="6,22" size="120,26" font="Regular;12" />
                <widget source="parent.summary_job_progress" render="Progress" position="6,50" size="60,12" borderWidth="1" zPosition="1" />
                        <convert type="ProgressToText" />
                </widget>
        </screen>
-       <!-- VirtualKeyBoard -->
-       <screen name="VirtualKeyBoard" position="center,center" size="560,350" zPosition="99" title="Virtual KeyBoard">
-               <ePixmap pixmap="skin_default/vkey_text.png" position="9,35" zPosition="-4" size="542,52" alphatest="on" />
-               <widget name="header" position="10,10" size="500,20" font="Regular;20" transparent="1" noWrap="1" />
-               <widget name="text" position="12,35" size="536,46" font="Regular;46" transparent="1" noWrap="1" halign="right" />
-               <widget name="list" position="10,100" size="540,225" selectionDisabled="1" transparent="1" />
+       <!-- Color OLED screen (JobView) -->
+       <screen name="JobView_summary" position="0,0" size="96,64" id="2">
+               <widget source="parent.summary_job_name" render="Label" position="0,4" size="96,42" font="Regular;14" />
+               <widget source="parent.summary_job_task" render="Label" position="0,22" size="96,26" font="Regular;10" />
+               <widget source="parent.summary_job_progress" render="Progress" position="0,50" size="60,12" borderWidth="1" zPosition="1" />
+               <widget source="parent.summary_job_progress" render="Label" position="60,50" size="36,12" font="Regular;10" zPosition="2" halign="center" transparent="1"  >
+                       <convert type="ProgressToText" />
+               </widget>
        </screen>
-       <!-- FileBrowser -->
-       <screen name="FileBrowser" position="center,center" size="520,430" title="DVD File Browser" >
-               <ePixmap pixmap="skin_default/buttons/red.png" position="0,0" size="140,40" alphatest="on" />
-               <ePixmap pixmap="skin_default/buttons/green.png" position="140,0" size="140,40" alphatest="on" />
-               <widget source="key_red" render="Label" position="0,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
-               <widget source="key_green" render="Label" position="140,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
-               <widget name="filelist" position="5,50" size="510,370" scrollbarMode="showOnDemand" />
+       <!-- LCD screen (Wizard) -->
+       <screen name="WizardSummary" position="0,0" size="132,64" id="1">
+               <widget source="text" render="Label" position="6,0" size="120,16" font="Regular;16" transparent="1" />
+               <widget source="parent.list" render="Label" position="6,18" size="120,46" font="Regular;12">
+                       <convert type="StringListSelection" />
+               </widget>
        </screen>
+       <!-- Color OLED screen (Wizard) -->
+       <screen name="WizardSummary" position="0,0" size="96,64" id="2">
+               <widget source="text" render="Label" position="0,0" size="96,16" font="Regular;14" transparent="1" />
+               <widget source="parent.list" render="Label" position="0,18" size="96,46" font="Regular;12">
+                       <convert type="StringListSelection" />
+               </widget>
+       </screen>
  </skin>
diff --combined lib/dvb/dvb.cpp
@@@ -96,6 -96,8 +96,8 @@@ eDVBResourceManager::eDVBResourceManage
                m_boxtype = DM800;
        else if (!strncmp(tmp, "dm500hd\n", rd))
                m_boxtype = DM500HD;
+       else if (!strncmp(tmp, "dm800se\n", rd))
+               m_boxtype = DM800SE;
        else {
                eDebug("boxtype detection via /proc/stb/info not possible... use fallback via demux count!\n");
                if (m_demux.size() == 3)
@@@ -455,7 -457,7 +457,7 @@@ RESULT eDVBResourceManager::allocateDem
  
        ePtr<eDVBRegisteredDemux> unused;
  
-       if (m_boxtype == DM800 || m_boxtype == DM500HD) // dm800 / 500hd
+       if (m_boxtype == DM800 || m_boxtype == DM500HD || m_boxtype == DM800SE) // dm800 / 500hd
        {
                cap |= capHoldDecodeReference; // this is checked in eDVBChannel::getDemux
                for (; i != m_demux.end(); ++i, ++n)
@@@ -1657,18 -1659,6 +1659,18 @@@ void eDVBChannel::SDTready(int result
        m_SDT = 0;
  }
  
 +int eDVBChannel::reserveDemux()
 +{
 +      ePtr<iDVBDemux> dmx;
 +      if (!getDemux(dmx, 0))
 +      {
 +              uint8_t id;
 +              if (!dmx->getCADemuxID(id))
 +                      return id;
 +      }
 +      return -1;
 +}
 +
  RESULT eDVBChannel::requestTsidOnid(ePyObject callback)
  {
        if (PyCallable_Check(callback))
diff --combined lib/dvb/dvb.h
@@@ -135,7 -135,7 +135,7 @@@ class eDVBResourceManager: public iObje
        DECLARE_REF(eDVBResourceManager);
        int avail, busy;
  
-       enum { DM7025, DM800, DM500HD, DM8000 };
+       enum { DM7025, DM800, DM500HD, DM800SE, DM8000 };
  
        int m_boxtype;
  
@@@ -268,7 -268,6 +268,7 @@@ public
        int getUseCount() { return m_use_count; }
  
        RESULT requestTsidOnid(ePyObject callback);
 +      int reserveDemux();
  private:
        ePtr<eDVBAllocatedFrontend> m_frontend;
        ePtr<eDVBAllocatedDemux> m_demux, m_decoder_demux;
diff --combined lib/gdi/font.cpp
@@@ -6,6 -6,11 +6,11 @@@
  #include <pthread.h>
  #include <sys/types.h>
  #include <unistd.h>
+ #include <byteswap.h>
+ #ifndef BYTE_ORDER
+ #error "no BYTE_ORDER defined!"
+ #endif
  
  // use this for init Freetype...
  #include <ft2build.h>
@@@ -341,8 -346,6 +346,8 @@@ int eTextPara::appendGlyph(Font *curren
                                i->x-=offset.x();
                                i->y-=offset.y();
                                i->bbox.moveBy(-offset.x(), -offset.y());
 +                              --lineChars.back();
 +                              ++charCount;
                        } while (i-- != glyphs.rbegin()); // rearrange them into the next line
                        cursor+=ePoint(linelength, 0);  // put the cursor after that line
                } else
        ng.glyph_index = glyphIndex;
        ng.flags = flags;
        glyphs.push_back(ng);
 +      ++charCount;
  
                /* when we have a SHY, don't xadvance. It will either be the last in the line (when used for breaking), or not displayed. */
        if (!(flags & GS_SOFTHYPHEN))
@@@ -428,13 -430,7 +433,13 @@@ void eTextPara::newLine(int flags
        cursor.setX(left);
        previous=0;
        int linegap=current_face->size->metrics.height-(current_face->size->metrics.ascender+current_face->size->metrics.descender);
 +
 +      lineOffsets.push_back(cursor.y());
 +      lineChars.push_back(charCount);
 +      charCount=0;
 +
        cursor+=ePoint(0, (current_face->size->metrics.ascender+current_face->size->metrics.descender+linegap)>>6);
 +
        if (maximum.height()<cursor.y())
                maximum.setHeight(cursor.y());
        previous=0;
@@@ -604,20 -600,22 +609,20 @@@ int eTextPara::renderString(const char 
        shape(uc_shape, uc_string);
        
                // now do the usual logical->visual reordering
 -#ifdef HAVE_FRIBIDI   
 +      int size=uc_shape.size();
 +#ifdef HAVE_FRIBIDI
        FriBidiCharType dir=FRIBIDI_TYPE_ON;
 -      {
 -              int size=uc_shape.size();
 -              uc_visual.resize(size);
 -              // gaaanz lahm, aber anders geht das leider nicht, sorry.
 -              FriBidiChar array[size], target[size];
 -              std::copy(uc_shape.begin(), uc_shape.end(), array);
 -              fribidi_log2vis(array, size, &dir, target, 0, 0, 0);
 -              uc_visual.assign(target, target+size);
 -      }
 +      uc_visual.resize(size);
 +      // gaaanz lahm, aber anders geht das leider nicht, sorry.
 +      FriBidiChar array[size], target[size];
 +      std::copy(uc_shape.begin(), uc_shape.end(), array);
 +      fribidi_log2vis(array, size, &dir, target, 0, 0, 0);
 +      uc_visual.assign(target, target+size);
  #else
        uc_visual=uc_shape;
  #endif
  
 -      glyphs.reserve(uc_visual.size());
 +      glyphs.reserve(size);
        
        int nextflags = 0;
        
@@@ -711,19 -709,8 +716,19 @@@ nprint:  isprintable=0
        calc_bbox();
  #ifdef HAVE_FRIBIDI
        if (dir & FRIBIDI_MASK_RTL)
 +      {
                realign(dirRight);
 +              doTopBottomReordering=true;
 +      }
  #endif
 +
 +      if (charCount)
 +      {
 +              lineOffsets.push_back(cursor.y());
 +              lineChars.push_back(charCount);
 +              charCount=0;
 +      }
 +
        return 0;
  }
  
@@@ -766,8 -753,9 +771,9 @@@ void eTextPara::blit(gDC &dc, const ePo
        gColor *lookup8, lookup8_invert[16];
        gColor *lookup8_normal=0;
  
+       __u16 lookup16_normal[16], lookup16_invert[16], *lookup16;
        __u32 lookup32_normal[16], lookup32_invert[16], *lookup32;
-       
        if (surface->bpp == 8)
        {
                if (surface->clut.data)
                        opcode=0;
                } else
                        opcode=1;
+       } else if (surface->bpp == 16)
+       {
+               opcode=2;
+               for (int i=0; i<16; ++i)
+               {
+ #define BLEND(y, x, a) (y + (((x-y) * a)>>8))
+                       unsigned char da = background.a, dr = background.r, dg = background.g, db = background.b;
+                       int sa = i * 16;
+                       if (sa < 256)
+                       {
+                               dr = BLEND(background.r, foreground.r, sa) & 0xFF;
+                               dg = BLEND(background.g, foreground.g, sa) & 0xFF;
+                               db = BLEND(background.b, foreground.b, sa) & 0xFF;
+                       }
+ #undef BLEND
+ #if BYTE_ORDER == LITTLE_ENDIAN
+                       lookup16_normal[i] = bswap_16(((db >> 3) << 11) | ((dg >> 2) << 5) | (dr >> 3));
+ #else
+                       lookup16_normal[i] = ((db >> 3) << 11) | ((dg >> 2) << 5) | (dr >> 3);
+ #endif
+                       da ^= 0xFF;
+               }
+               for (int i=0; i<16; ++i)
+                       lookup16_invert[i]=lookup16_normal[i^0xF];
        } else if (surface->bpp == 32)
        {
                opcode=3;
                for (int i=0; i<16; ++i)
                {
  #define BLEND(y, x, a) (y + (((x-y) * a)>>8))
                eWarning("can't render to %dbpp", surface->bpp);
                return;
        }
-       
        gRegion area(eRect(0, 0, surface->x, surface->y));
        gRegion clip = dc.getClip() & area;
  
        int buffer_stride=surface->stride;
 -      
 +
        for (unsigned int c = 0; c < clip.rects.size(); ++c)
        {
 -              for (glyphString::iterator i(glyphs.begin()); i != glyphs.end(); ++i)
 +              std::list<int>::reverse_iterator line_offs_it(lineOffsets.rbegin());
 +              std::list<int>::iterator line_chars_it(lineChars.begin());
 +              int line_offs=0;
 +              int line_chars=0;
 +              for (glyphString::iterator i(glyphs.begin()); i != glyphs.end(); ++i, --line_chars)
                {
 +                      while(!line_chars)
 +                      {
 +                              line_offs = *(line_offs_it++);
 +                              line_chars = *(line_chars_it++);
 +                      }
 +
                        if (i->flags & GS_SOFTHYPHEN)
                                continue;
  
                        if (!(i->flags & GS_INVERT))
                        {
                                lookup8 = lookup8_normal;
+                               lookup16 = lookup16_normal;
                                lookup32 = lookup32_normal;
                        } else
                        {
                                lookup8 = lookup8_invert;
+                               lookup16 = lookup16_invert;
                                lookup32 = lookup32_invert;
                        }
 -              
 +
                        static FTC_SBit glyph_bitmap;
                        if (fontRenderClass::instance->getGlyphBitmap(&i->font->font, i->glyph_index, &glyph_bitmap))
                                continue;
                        int rx=i->x+glyph_bitmap->left + offset.x();
 -                      int ry=i->y-glyph_bitmap->top  + offset.y();
 -              
 +                      int ry=(doTopBottomReordering ? line_offs : i->y) - glyph_bitmap->top + offset.y();
 +
                        __u8 *d=(__u8*)(surface->data)+buffer_stride*ry+rx*surface->bypp;
                        __u8 *s=glyph_bitmap->buffer;
                        register int sx=glyph_bitmap->width;
                                d+=diff*buffer_stride;
                        }
                        if (sx>0)
-                               for (int ay=0; ay<sy; ay++)
-                               {
-                                       if (!opcode)            // 4bit lookup to 8bit
+                       {
+                               switch(opcode) {
+                               case 0: // 4bit lookup to 8bit
+                                       for (int ay=0; ay<sy; ay++)
                                        {
                                                register __u8 *td=d;
                                                register int ax;
-                                               
                                                for (ax=0; ax<sx; ax++)
-                                               {       
+                                               {
                                                        register int b=(*s++)>>4;
                                                        if(b)
                                                                *td++=lookup8[b];
                                                        else
                                                                td++;
                                                }
-                                       } else if (opcode == 1) // 8bit direct
+                                               s+=glyph_bitmap->pitch-sx;
+                                               d+=buffer_stride;
+                                       }
+                                       break;
+                               case 1: // 8bit direct
+                                       for (int ay=0; ay<sy; ay++)
                                        {
                                                register __u8 *td=d;
                                                register int ax;
                                                for (ax=0; ax<sx; ax++)
-                                               {       
+                                               {
                                                        register int b=*s++;
                                                        *td++^=b;
                                                }
-                                       } else
+                                               s+=glyph_bitmap->pitch-sx;
+                                               d+=buffer_stride;
+                                       }
+                                       break;
+                               case 2: // 16bit
+                                       for (int ay=0; ay<sy; ay++)
+                                       {
+                                               register __u16 *td=(__u16*)d;
+                                               register int ax;
+                                               for (ax=0; ax<sx; ax++)
+                                               {
+                                                       register int b=(*s++)>>4;
+                                                       if(b)
+                                                               *td++=lookup16[b];
+                                                       else
+                                                               td++;
+                                               }
+                                               s+=glyph_bitmap->pitch-sx;
+                                               d+=buffer_stride;
+                                       }
+                                       break;
+                               case 3: // 32bit
+                                       for (int ay=0; ay<sy; ay++)
                                        {
                                                register __u32 *td=(__u32*)d;
                                                register int ax;
                                                for (ax=0; ax<sx; ax++)
-                                               {       
+                                               {
                                                        register int b=(*s++)>>4;
                                                        if(b)
                                                                *td++=lookup32[b];
                                                        else
                                                                td++;
                                                }
+                                               s+=glyph_bitmap->pitch-sx;
+                                               d+=buffer_stride;
                                        }
-                                       s+=glyph_bitmap->pitch-sx;
-                                       d+=buffer_stride;
+                               default:
+                                       break;
                                }
+                       }
                }
        }
  }
diff --combined lib/gdi/lcd.cpp
  
  eDBoxLCD *eDBoxLCD::instance;
  
- eLCD::eLCD(eSize size): res(size)
+ eLCD::eLCD()
  {
        lcdfd = -1;
        locked=0;
-       _buffer=new unsigned char[res.height()*res.width()];
-       memset(_buffer, 0, res.height()*res.width());
-       _stride=res.width();
+ }
+ void eLCD::setSize(int xres, int yres, int bpp)
+ {
+       res = eSize(xres, yres);
+       _buffer=new unsigned char[xres * yres * bpp/8];
+       memset(_buffer, 0, res.height()*res.width()*bpp/8);
+       _stride=res.width()*bpp/8;
+       eDebug("lcd buffer %p %d bytes, stride %d", _buffer, xres*yres*bpp/8, _stride);
  }
  
  eLCD::~eLCD()
@@@ -42,16 -48,15 +48,17 @@@ void eLCD::unlock(
        locked=0;
  }
  
- eDBoxLCD::eDBoxLCD(): eLCD(eSize(132, 64))
+ eDBoxLCD::eDBoxLCD()
  {
+       int xres=132, yres=64, bpp=8;
        is_oled = 0;
  #ifndef NO_LCD
        lcdfd = open("/dev/dbox/oled0", O_RDWR);
        if (lcdfd < 0)
        {
 -              FILE *f=fopen("/proc/stb/fp/oled_brightness", "w");
 +              FILE *f=fopen("/proc/stb/lcd/oled_brightness", "w");
 +              if (!f)
 +                      f = fopen("/proc/stb/fp/oled_brightness", "w");
                if (f)
                {
                        is_oled = 2;
                int i=LCD_MODE_BIN;
                ioctl(lcdfd, LCD_IOCTL_ASC_MODE, &i);
                inverted=0;
+               FILE *f = fopen("/proc/stb/lcd/xres", "r");
+               if (f)
+               {
+                       int tmp;
+                       if (fscanf(f, "%x", &tmp) == 1)
+                               xres = tmp;
+                       fclose(f);
+                       f = fopen("/proc/stb/lcd/yres", "r");
+                       if (f)
+                       {
+                               if (fscanf(f, "%x", &tmp) == 1)
+                                       yres = tmp;
+                               fclose(f);
+                               f = fopen("/proc/stb/lcd/bpp", "r");
+                               if (f)
+                               {
+                                       if (fscanf(f, "%x", &tmp) == 1)
+                                               bpp = tmp;
+                                       fclose(f);
+                               }
+                       }
+                       is_oled = 3;
+               }
        }
+       setSize(xres, yres, bpp);
  }
  
  void eDBoxLCD::setInverted(unsigned char inv)
  {
        inverted=inv;
-       update();       
+       update();
  }
  
  int eDBoxLCD::setLCDContrast(int contrast)
  int eDBoxLCD::setLCDBrightness(int brightness)
  {
        eDebug("setLCDBrightness %d", brightness);
 -      FILE *f=fopen("/proc/stb/fp/oled_brightness", "w");
 +      FILE *f=fopen("/proc/stb/lcd/oled_brightness", "w");
 +      if (!f)
 +              f = fopen("/proc/stb/fp/oled_brightness", "w");
        if (f)
        {
                if (fprintf(f, "%d", brightness) == 0)
 -                      eDebug("write /proc/stb/fp/oled_brightness failed!! (%m)");
 +                      eDebug("write /proc/stb/lcd/oled_brightness failed!! (%m)");
                fclose(f);
        }
        else
@@@ -145,42 -172,46 +176,46 @@@ eDBoxLCD *eDBoxLCD::getInstance(
  
  void eDBoxLCD::update()
  {
-       if (!is_oled || is_oled == 2)
+       if (lcdfd >= 0)
        {
-               unsigned char raw[132*8];
-               int x, y, yy;
-               for (y=0; y<8; y++)
+               if (!is_oled || is_oled == 2)
                {
-                       for (x=0; x<132; x++)
+                       unsigned char raw[132*8];
+                       int x, y, yy;
+                       for (y=0; y<8; y++)
                        {
-                               int pix=0;
-                               for (yy=0; yy<8; yy++)
+                               for (x=0; x<132; x++)
                                {
-                                       pix|=(_buffer[(y*8+yy)*132+x]>=108)<<yy;
+                                       int pix=0;
+                                       for (yy=0; yy<8; yy++)
+                                       {
+                                               pix|=(_buffer[(y*8+yy)*132+x]>=108)<<yy;
+                                       }
+                                       raw[y*132+x]=(pix^inverted);
                                }
-                               raw[y*132+x]=(pix^inverted);
                        }
-               }
-               if (lcdfd >= 0)
                        write(lcdfd, raw, 132*8);
-       } else
-       {
-               unsigned char raw[64*64];
-               int x, y;
-               memset(raw, 0, 64*64);
-               for (y=0; y<64; y++)
+               }
+               else if (is_oled == 3)
+                       write(lcdfd, _buffer, _stride * res.height());
+               else
                {
-                       int pix=0;
-                       for (x=0; x<128 / 2; x++)
+                       unsigned char raw[64*64];
+                       int x, y;
+                       memset(raw, 0, 64*64);
+                       for (y=0; y<64; y++)
                        {
-                               pix = (_buffer[y*132 + x * 2 + 2] & 0xF0) |(_buffer[y*132 + x * 2 + 1 + 2] >> 4);
-                               if (inverted)
-                                       pix = 0xFF - pix;
-                               raw[y*64+x] = pix;
+                               int pix=0;
+                               for (x=0; x<128 / 2; x++)
+                               {
+                                       pix = (_buffer[y*132 + x * 2 + 2] & 0xF0) |(_buffer[y*132 + x * 2 + 1 + 2] >> 4);
+                                       if (inverted)
+                                               pix = 0xFF - pix;
+                                       raw[y*64+x] = pix;
+                               }
                        }
-               }
-               if (lcdfd >= 0)
                        write(lcdfd, raw, 64*64);
+               }
        }
  }