Merge branch 'bug_514_new_proc_oled_brightness_path'
[enigma2.git] / lib / gdi / lcd.cpp
index 5fe1c3ad0926770050a1cb850542b2863ed01f55..0908d890994bc896091bf7844898ff1ce1c27ed0 100644 (file)
@@ -44,12 +44,20 @@ void eLCD::unlock()
 
 eDBoxLCD::eDBoxLCD(): eLCD(eSize(132, 64))
 {
+       is_oled = 0;
 #ifndef NO_LCD
        lcdfd = open("/dev/dbox/oled0", O_RDWR);
        if (lcdfd < 0)
        {
+               FILE *f=fopen("/proc/stb/lcd/oled_brightness", "w");
+               if (!f)
+                       f = fopen("/proc/stb/fp/oled_brightness", "w");
+               if (f)
+               {
+                       is_oled = 2;
+                       fclose(f);
+               }
                lcdfd = open("/dev/dbox/lcd0", O_RDWR);
-               is_oled = 0;
        } else
        {
                eDebug("found OLED display!");
@@ -96,11 +104,13 @@ 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
@@ -135,7 +145,7 @@ eDBoxLCD *eDBoxLCD::getInstance()
 
 void eDBoxLCD::update()
 {
-       if (!is_oled)
+       if (!is_oled || is_oled == 2)
        {
                unsigned char raw[132*8];
                int x, y, yy;
@@ -160,8 +170,14 @@ void eDBoxLCD::update()
                memset(raw, 0, 64*64);
                for (y=0; y<64; y++)
                {
+                       int pix=0;
                        for (x=0; x<128 / 2; x++)
-                               raw[y*64+x] = (_buffer[y*132 + x * 2 + 2] & 0xF0) |(_buffer[y*132 + x * 2 + 1 + 2] >> 4);
+                       {
+                               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);