62
47
static GdkColormap *point_colormap;
63
static int lcd_width, lcd_height, lcd_depth;
65
guint32 *fbSkyeyeADDR;
66
static struct GdkRgbCmap *colormap;
48
static int lcd_width, lcd_virtual_width, lcd_height, lcd_depth;
49
guchar *rgbbuf = NULL;
50
guint32 *fbSkyeyeADDR = NULL;
51
static GdkRgbCmap *colormap = NULL;
53
guint timeout_handle = 0;
55
// anthonylee 2007-01-29
56
// TODO: change all the codes to support multi-device.
57
static struct lcd_device *cur_lcd_dev = NULL;
69
59
//by ywc 2004-07-24
70
60
extern mem_bank_t *bank_ptr (ARMword addr);
63
// anthonylee 2007-01-29
64
static u32 lcd_lookup_color_for_gtk_rgbbuf(u32 color)
66
u32 c = cur_lcd_dev->lcd_lookup_color(cur_lcd_dev, color);
68
/* the gtk's 32 bits rgb buffer : X-B-G-R */
69
return((c >> 16) | (c & 0xff00) | ((c & 0xff) << 16));
74
expose_event (GtkWidget * widget, GdkEventExpose * event)
74
gint expose_event (GtkWidget * widget, GdkEventExpose * event)
76
int i, x, y, pix, pixnum, bit;
76
int i, j, x, y, pix, bit;
78
78
int wordnum; //for lcd_depth==16 , 1 word contain 2 pixel
79
79
guint32 fbdata; // |R1,G1,B1,R0,G0,B0|
83
83
guchar fbdata8_1; // |R1,B0|
84
84
guchar fbdata8_2; // |B1,G1|
86
wordnum = lcd_width * lcd_height * lcd_depth / 32;
88
tribytenum = lcd_width * lcd_height * lcd_depth / 24;
90
pixnum = lcd_width * lcd_height;
86
wordnum = lcd_virtual_width * lcd_height * lcd_depth / 32;
87
tribytenum = lcd_virtual_width * lcd_height * lcd_depth / 24;
89
// anthonylee 2007-01-29 : for lcd_lookup_color
90
if(cur_lcd_dev->lcd_lookup_color != NULL)
92
int count = lcd_width * lcd_height;
93
u32 *tmp = (u32*)rgbbuf;
95
const u8 *buf = (const u8*)fbSkyeyeADDR;
99
if(tmp == NULL || buf == NULL) return TRUE;
101
// TODO: to be region-updating
102
while(count-- > 0) switch(lcd_depth)
105
*tmp++ = lcd_lookup_color_for_gtk_rgbbuf((u32)((*buf >> (8 - (flag + 1))) & 0x1));
106
if(++flag > 7) {buf++; flag = 0;}
107
if(++i == lcd_width) {buf += cur_lcd_dev->lcd_line_offset / 8; i = 0;}
111
*tmp++ = lcd_lookup_color_for_gtk_rgbbuf((u32)((*buf >> (8 - ((flag + 1) << 1))) & 0x3));
112
if(++flag > 3) {buf++; flag = 0;}
113
if(++i == lcd_width) {buf += cur_lcd_dev->lcd_line_offset / 4; i = 0;}
117
*tmp++ = lcd_lookup_color_for_gtk_rgbbuf((u32)(((*buf) >> (flag == 0 ? 4 : 0)) & 0xf));
118
if(++flag > 1) {buf++; flag = 0;}
119
if(++i == lcd_width) {buf += cur_lcd_dev->lcd_line_offset / 2; i = 0;}
123
*tmp++ = lcd_lookup_color_for_gtk_rgbbuf((u32)(*buf));
125
if(++i == lcd_width) {buf += cur_lcd_dev->lcd_line_offset; i = 0;}
129
*tmp++ = lcd_lookup_color_for_gtk_rgbbuf((u32)(*((u16*)buf)));
131
if(++i == lcd_width) {buf += cur_lcd_dev->lcd_line_offset * 2; i = 0;}
135
*tmp++ = lcd_lookup_color_for_gtk_rgbbuf(*((u32*)buf));
137
if(++i == lcd_width) {buf += cur_lcd_dev->lcd_line_offset * 4; i = 0;}
144
gdk_draw_rgb_32_image (widget->window,
145
widget->style->fg_gc[GTK_STATE_NORMAL],
146
0, 0, lcd_width, lcd_height,
147
GDK_RGB_DITHER_NORMAL, rgbbuf,
150
else switch (lcd_depth) {
95
// should add code for scan the fb data to buf
154
// anthonylee 2007-01-28
155
for (j = 0; j < lcd_height; j++)
157
guchar *buf = (guchar*)fbSkyeyeADDR + j * lcd_virtual_width * lcd_depth / 8;
159
for (i = 0; i < lcd_width;)
163
guchar *tmp = (guchar*)rgbbuf + j * lcd_virtual_width + i;
165
for(k = 0; k < 8 / lcd_depth; k++, i++, tmp++)
166
*tmp = (c >> (8 - ((k + 1) << (lcd_depth - 1)))) & ((1 << lcd_depth) - 1);
96
169
gdk_draw_indexed_image (widget->window,
98
fg_gc[GTK_STATE_NORMAL], 0, 0,
170
widget->style->fg_gc[GTK_STATE_NORMAL], 0, 0,
99
171
lcd_width, lcd_height,
100
172
GDK_RGB_DITHER_NORMAL, rgbbuf,
101
lcd_width, colormap);
173
lcd_virtual_width, colormap);
104
176
gdk_draw_indexed_image (widget->window,
106
fg_gc[GTK_STATE_NORMAL], 0, 0,
177
widget->style->fg_gc[GTK_STATE_NORMAL], 0, 0,
107
178
lcd_width, lcd_height,
108
179
GDK_RGB_DITHER_NORMAL, rgbbuf,
109
lcd_width, colormap);
180
lcd_virtual_width, colormap);
110
181
//gdk_draw_gray_image (widget->window,
111
182
// widget->style->fg_gc[GTK_STATE_NORMAL],
112
183
// 0 , 0,lcd_width ,lcd_height,
156
227
widget->style->fg_gc[GTK_STATE_NORMAL],
157
228
0, 0, lcd_width, lcd_height,
158
229
GDK_RGB_DITHER_MAX, rgbbuf,
230
lcd_virtual_width * 3);
162
233
gdk_draw_rgb_image (widget->window,
163
234
widget->style->fg_gc[GTK_STATE_NORMAL],
164
235
0, 0, lcd_width, lcd_height,
165
236
GDK_RGB_DITHER_NORMAL, rgbbuf,
237
lcd_virtual_width * 3);
169
240
gdk_draw_rgb_32_image (widget->window,
170
241
widget->style->fg_gc[GTK_STATE_NORMAL],
171
242
0, 0, lcd_width, lcd_height,
172
243
GDK_RGB_DITHER_NORMAL, rgbbuf,
244
lcd_virtual_width * 4);
328
409
rgbbuf = (guchar *) fbSkyeyeADDR;
412
//anthonylee 2007-01-29
333
printf ("\nSKYEYE: lcd_addr_begin 0x%x,lcd_addr_end 0x%x, width %d, height %d, depth %d\n", (lcd_dev->lcd_addr_begin), (lcd_dev->lcd_addr_end), width, height, depth);
417
printf ("\nSKYEYE: lcd_addr_begin 0x%x,lcd_addr_end 0x%x, width %d, height %d, depth %d\n", (lcd_dev->lcd_addr_begin), (lcd_dev->lcd_addr_end), lcd_dev->width, lcd_dev->height, lcd_dev->depth);
335
419
window = gtk_window_new (GTK_WINDOW_TOPLEVEL); //create top level window
338
422
//sprintf(mode,"%s%dx%dx%d",title,lcd_width,lcd_height,lcd_depth);
339
423
sprintf (mode, "%dx%dx%d %s", lcd_width, lcd_height, lcd_depth,
341
gtk_window_set_title (window, mode); //added by ywc
343
gtk_widget_set_usize (window, width, height);
345
gtk_widget_set_events (window, GDK_EXPOSURE_MASK);
425
gtk_window_set_title (GTK_WINDOW (window), mode); //added by ywc
427
gtk_widget_set_usize (GTK_WIDGET (window), lcd_width, lcd_height);
429
gtk_widget_set_events (GTK_WIDGET (window), GDK_EXPOSURE_MASK);
347
431
TouchScreen = gtk_event_box_new ();
348
432
gtk_container_add (GTK_CONTAINER (window), TouchScreen);
349
gtk_widget_set_events (GTK_OBJECT (TouchScreen), GDK_ENTER_NOTIFY_MASK
433
gtk_widget_set_events (GTK_WIDGET (TouchScreen), GDK_ENTER_NOTIFY_MASK
350
434
| GDK_LEAVE_NOTIFY_MASK
351
435
| GDK_BUTTON_PRESS_MASK
352
436
| GDK_BUTTON_RELEASE_MASK |
388
472
((i & 0x00000003) << 6);
476
// anthonylee 2007-01-29 : for lcd_lookup_color
477
if(lcd_dev->lcd_lookup_color == NULL) switch (lcd_depth) {
393
colormap = gdk_rgb_cmap_new (colors1b, (1 << depth));
479
colormap = gdk_rgb_cmap_new (colors1b, (1 << lcd_depth));
398
colormap = gdk_rgb_cmap_new (colors4b, (1 << depth));
484
colormap = gdk_rgb_cmap_new (colors4b, (1 << lcd_depth));
401
colormap = gdk_rgb_cmap_new (colors8b, (1 << depth));
487
colormap = gdk_rgb_cmap_new (colors8b, (1 << lcd_depth));
411
// gtk_timeout_add(500,redraw,window);
412
gtk_timeout_add (200, redraw, window);
413
// gtk_timeout_add(1000,redraw,window);
497
// timeout_handle = gtk_timeout_add(500,redraw,window);
498
timeout_handle = gtk_timeout_add (200, redraw, window);
499
// timeout_handle = gtk_timeout_add(1000,redraw,window);
424
510
//ywc 2004-09-09 for free dynamic memory
425
if (depth == 1 || depth == 2 || depth == 4 || depth == 12
511
//anthonylee 2007-01-29
512
if(rgbbuf != NULL && rgbbuf != (guchar*)fbSkyeyeADDR) free(rgbbuf);
515
//anthonylee 2007-01-28
516
if(timeout_handle != 0)
518
gtk_timeout_remove(timeout_handle);
430
523
gtk_widget_destroy (window);
435
529
gdk_rgb_cmap_free (colormap);
533
//anthonylee 2007-01-28
534
lcd_dev->lcd_addr_end = lcd_dev->lcd_addr_begin = 0;
441
gtk_lcd_read (struct lcd_device *lcd_dev)
539
gtk_lcd_read (struct lcd_device *lcd_dev, void *buf, size_t count)
447
gtk_lcd_write (struct lcd_device *lcd_dev)
545
gtk_lcd_write (struct lcd_device *lcd_dev, void *buf, size_t count)