source: titan/titan/oled.h @ 44528

Last change on this file since 44528 was 44461, checked in by gost, 4 years ago

test vu ultimo4k

  • Property svn:executable set to *
File size: 5.6 KB
Line 
1#ifndef OLED_H_
2#define OLED_H_
3
4void write2oled(unsigned char *buf, int xres, int yres)
5{
6        unsigned char* lfb1 = NULL;
7        unsigned char* lfb2 = NULL;
8        unsigned char byte;
9        int i = 0;
10        int i1 = 0;
11        int bi = 0;
12        int ret = 0;
13       
14        int lcdfd1 = open(getconfig("vfddev", NULL), O_RDWR);
15       
16        if(checkbox("DM900") == 1 || checkbox("DM920") == 1)
17                lfb1 = malloc(xres * yres * 2);
18        else if(checkbox("VUDUO4K") == 1 || checkbox("VUUNO4K") == 1  || checkbox("VUULTIMO4K") == 1)
19                lfb1 = malloc(480 * 320 * 4);
20        else
21                lfb1 = malloc(xres * yres);
22        if(lfb1 == NULL)
23                return;
24
25        if(checkbox("DM900") != 1 && checkbox("DM920") != 1 && checkbox("VUDUO4K") != 1 && checkbox("VUUNO4K") != 1)
26        {
27               
28                for(i = 0; i <= xres*yres; i++)
29                {
30                        //             R                           B                          G
31                        lfb1[i] = ((76 * buf[bi+2]) / 255) + ((150 * buf[bi+1]) / 255) + ((28 * buf[bi]) / 255);
32                        bi = bi + 4;
33                }
34       
35               
36                if(checkchipset("BCM7424") == 1)
37                {
38                        ret = write(lcdfd1, lfb1, xres * yres);
39                        if(ret != xres * yres)
40                                err("write to oled - %s - was not ok", getconfig("vfddev", NULL));
41                }
42                //Die Displays der dm7020hd, dm7025+(?), dm7080 und dm8000 haben 128*64*4bpp, DM800se hat 96*64*16bpp (RGB565), dm800 und dm7025(?) haben 132*64*1bpp (ältere ggf. 120*64 oder 128*64)
43                else if(checkbox("DM7020HD") == 1 || checkbox("DM7020HDV2") == 1)
44                {
45                        bi = 0;
46                        lfb2 = malloc(xres * yres / 2);
47                        if(lfb2 == NULL)
48                                return;
49                        for(i = 0; i <= xres*yres; i = i + 2)
50                        {
51                                byte = lfb1[i] * 15 / 255;
52                                lfb2[bi] = (byte << 4) & 0xf0;
53                                byte = lfb1[i+1] * 15 / 255;
54                                lfb2[bi] |= byte & 0x0f;
55                                bi = bi + 1;
56                        }
57                        ret = write(lcdfd1, lfb2, xres * yres / 2);
58                        if(ret != xres * yres / 2)
59                                err("write to oled - %s - was not ok", getconfig("vfddev", NULL));
60                        free(lfb2);
61                }
62        }
63        else if(checkbox("VUDUO4K") == 1 || checkbox("VUUNO4K") == 1  || checkbox("VUULTIMO4K") == 1)
64        {
65                ret = write(lcdfd1, buf, xres * yres * 4);
66                if(ret != xres * yres * 4)
67                        err("write to oled2 VUnnnO4K - %s - was not ok", getconfig("vfddev", NULL));
68        }
69        else
70        {
71                //gggbbbbbrrrrrggg
72                printf("----> write2oled\n");
73                for(i = 0; i < xres*yres*2; i = i + 2)
74                {
75                        lfb1[i] = ((buf[bi+1] << 3) & 0xE0) | ((buf[bi] >> 3) & 0x1F);
76                        lfb1[i+1] = (buf[bi+2] & 0xF8) | ((buf[bi+1] >> 5) & 0x07);
77                        bi = bi + 4;
78                }
79                ret = write(lcdfd1, lfb1, xres * yres * 2);
80                if(ret != xres * yres * 2)
81                        err("write to oled2 - %s - was not ok", getconfig("vfddev", NULL));
82                free(lfb2);
83        }
84        close(lcdfd1);
85       
86        free(lfb1);
87        return;
88}
89
90int oledtext(char *value)
91{
92        struct skin* OLED_all = NULL;
93       
94        if(getconfigint("oled_off", NULL) == 1)
95                return 0;
96
97        m_lock(&status.drawingmutex, 0);
98       
99        if(checkchipset("BCM7424") == 1)
100        {
101                if(status.updatevfd == PAUSE)
102                        OLED_all = getscreen("OLED_nemesis_menu");
103                else if(status.standby > 0)
104                        OLED_all = getscreen("OLED_nemesis_standby");
105                else
106                {
107                        if(getskinconfig("OLED_nemesis", NULL) == NULL)
108                                OLED_all = getscreen("OLED_nemesis");
109                        else
110                                OLED_all = getscreen(getskinconfig("OLED_nemesis", NULL));
111                }
112        }
113        else if(checkbox("DM7020HD") == 1 || checkbox("DM7020HDV2") == 1)
114        {
115                if(status.updatevfd == PAUSE)
116                        OLED_all = getscreen("OLED_dream1_menu");
117                else if(status.standby > 0)
118                        OLED_all = getscreen("OLED_dream1_standby");
119                else
120                {
121                        if(getskinconfig("OLED_dream1", NULL) == NULL)
122                                OLED_all = getscreen("OLED_dream1");
123                        else
124                                OLED_all = getscreen(getskinconfig("OLED_dream1", NULL));
125                }
126        }
127        else if(checkbox("DM900") == 1 || checkbox("DM920") == 1)
128        {
129                if(status.updatevfd == PAUSE)
130                        OLED_all = getscreen("OLED_dream2_menu");
131                else if(status.standby > 0)
132                        OLED_all = getscreen("OLED_dream2_standby");
133                else
134                {
135                        if(getskinconfig("OLED_dream2", NULL) == NULL)
136                                OLED_all = getscreen("OLED_dream2");
137                        else
138                                OLED_all = getscreen(getskinconfig("OLED_dream2", NULL));
139                }
140        }
141        else if(checkbox("VUDUO4K") == 1 || checkbox("VUUNO4K") == 1  || checkbox("VUULTIMO4K") == 1)           
142        {
143                if(status.updatevfd == PAUSE)
144                        OLED_all = getscreen("OLED_vu1_menu");
145                else if(status.standby > 0)
146                        OLED_all = getscreen("OLED_vu1_standby");
147                else
148                {
149                        if(getskinconfig("OLED_vu1", NULL) == NULL)
150                                OLED_all = getscreen("OLED_vu1");
151                        else
152                                OLED_all = getscreen(getskinconfig("OLED_vu1", NULL));
153                }
154        }
155               
156       
157        struct skin* textbox = getscreennode(OLED_all, "textbox");
158       
159        if(status.standby == 2 && status.epgscanlistthread != NULL)
160                changetext(textbox, "EPG-Scan");
161        else
162                changetext(textbox, value);
163
164        drawscreen(OLED_all, 0, 2);
165        m_unlock(&status.drawingmutex, 0);
166       
167        return 0;
168}
169
170struct fb* oledaddfb(int width, int height)
171{
172        struct fb *newnode = NULL;
173        char *name = ostrcat("oledskinfb", NULL, 0, 0);
174        newnode = (struct fb*)malloc(sizeof(struct fb));
175               
176        unsigned char *newskinfb = calloc(1, 4 * width * height);
177        if(newskinfb == NULL)
178                return NULL;
179        memset(newnode, 0, sizeof(struct fb));
180        newnode->name = name;
181        newnode->dev = 999;
182        newnode->width = width;
183        newnode->height = height;
184        newnode->colbytes = 4;
185        newnode->pitch = newnode->width * newnode->colbytes;
186        newnode->fb = newskinfb;
187        newnode->fblong = (unsigned long*)newnode->fb;
188        newnode->fd = -1;
189        newnode->fixfbsize = 4 * width * height;
190        newnode->data_phys = 0;
191       
192        return newnode;
193}
194
195void initOLEDdream1()
196{
197#ifndef LCD_IOCTL_ASC_MODE
198#define LCDSET                  0x1000
199#define LCD_IOCTL_ASC_MODE              (21|LCDSET)
200#define LCD_MODE_ASC                    0
201#define LCD_MODE_BIN                    1
202#endif
203
204        if(checkbox("VUDUO4K") != 1 && checkbox("VUUNO4K") != 1  && checkbox("VUULTIMO4K") != 1)
205                return; //wird nicht benötigt
206
207        int i=LCD_MODE_BIN;
208        //int lcdfd = open("/dev/dbox/oled0", O_RDWR);
209        int lcdfd1 = open(getconfig("vfddev", NULL), O_RDWR);
210        if(lcdfd1 > -1)
211        {
212                ioctl(lcdfd1, LCD_IOCTL_ASC_MODE, &i);
213                close(lcdfd1);
214        }
215}       
216
217#endif 
218       
Note: See TracBrowser for help on using the repository browser.