Mercurial > ecos
annotate packages/devs/framebuf/synth/current/misc/example.c @ 2566:2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
| author | bartv |
|---|---|
| date | Tue, 07 Oct 2008 21:10:17 +0000 |
| parents | |
| children | 74dbf4c3f2e1 |
| rev | line source |
|---|---|
|
2566
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
1 //========================================================================== |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
2 // |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
3 // example.c |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
4 // |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
5 // Demonstration of the synthetic target framebuffer capabilities |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
6 // |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
7 //========================================================================== |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
8 //###ECOSGPLCOPYRIGHTBEGIN#### |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
9 //------------------------------------------- |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
10 // This file is part of eCos, the Embedded Configurable Operating System. |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
11 // Copyright (C) 2008 Free Software Foundation, Inc. |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
12 // eCos is free software; you can redistribute it and/or modify it under |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
13 // the terms of the GNU General Public License as published by the Free |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
14 // Software Foundation; either version 2 or (at your option) any later version. |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
15 // |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
16 // eCos is distributed in the hope that it will be useful, but WITHOUT ANY |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
17 // WARRANTY; without even the implied warranty of MERCHANTABILITY or |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
18 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
19 // for more details. |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
20 // |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
21 // You should have received a copy of the GNU General Public License along |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
22 // with eCos; if not, write to the Free Software Foundation, Inc., |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
23 // 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
24 // |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
25 // As a special exception, if other files instantiate templates or use macros |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
26 // or inline functions from this file, or you compile this file and link it |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
27 // with other works to produce a work based on this file, this file does not |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
28 // by itself cause the resulting work to be covered by the GNU General Public |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
29 // License. However the source code for this file must still be made available |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
30 // in accordance with section (3) of the GNU General Public License. |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
31 // |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
32 // This exception does not invalidate any other reasons why a work based on |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
33 // this file might be covered by the GNU General Public License. |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
34 // ------------------------------------------- |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
35 //####ECOSGPLCOPYRIGHTEND#### |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
36 //========================================================================== |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
37 //###DESCRIPTIONBEGIN#### |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
38 // |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
39 // Author(s): bartv |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
40 // Date: 2008-10-06 |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
41 // |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
42 //###DESCRIPTIONEND#### |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
43 //======================================================================== |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
44 |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
45 #include <cyg/infra/cyg_type.h> |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
46 #include <cyg/infra/diag.h> |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
47 #include <cyg/hal/hal_arch.h> |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
48 #include <cyg/io/framebuf.h> |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
49 #include <cyg/kernel/kapi.h> |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
50 #include <string.h> |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
51 #include <stdio.h> |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
52 |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
53 #define BLACK colours[0x00] |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
54 #define BLUE colours[0x01] |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
55 #define GREEN colours[0x02] |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
56 #define CYAN colours[0x03] |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
57 #define RED colours[0x04] |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
58 #define MAGENTA colours[0x05] |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
59 #define BROWN colours[0x06] |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
60 #define LIGHTGREY colours[0x07] |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
61 #define DARKGREY colours[0x08] |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
62 #define LIGHTBLUE colours[0x09] |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
63 #define LIGHTGREEN colours[0x0A] |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
64 #define LIGHTCYAN colours[0x0B] |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
65 #define LIGHTRED colours[0x0C] |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
66 #define LIGHTMAGENTA colours[0x0D] |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
67 #define YELLOW colours[0x0E] |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
68 #define WHITE colours[0x0F] |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
69 |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
70 // ---------------------------------------------------------------------------- |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
71 // FB0. 320x240 32bpp true 0888. Just draw a simple image as per the fb.c |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
72 // example and return to main(). |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
73 |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
74 static void |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
75 fb0_thread(cyg_addrword_t arg) |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
76 { |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
77 #define FRAMEBUF cyg_synth_fb0 |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
78 static cyg_ucount32 colours[16]; |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
79 cyg_ucount16 block_width; |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
80 int i; |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
81 |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
82 for (i = 0; i < 16; i++) { |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
83 colours[i] = cyg_fb_make_colour(&FRAMEBUF, |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
84 cyg_fb_palette_vga[i + i + i], cyg_fb_palette_vga[i + i + i + 1],cyg_fb_palette_vga[i + i + i + 2]); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
85 } |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
86 |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
87 cyg_fb_on(&FRAMEBUF); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
88 // A white background |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
89 cyg_fb_fill_block(&FRAMEBUF, 0, 0, FRAMEBUF.fb_width, FRAMEBUF.fb_height, WHITE); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
90 // A black block in the middle, 25 pixels in. |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
91 cyg_fb_fill_block(&FRAMEBUF, 25, 25, FRAMEBUF.fb_width - 50, FRAMEBUF.fb_height - 50, BLACK); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
92 |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
93 // Four diagonal lines in the corners. Red in the top left, blue in the top right, |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
94 // green in the bottom left, and yellow in the bottom right. |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
95 for (i = 0; i < 25; i++) { |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
96 cyg_fb_write_pixel(&FRAMEBUF, i, i, RED); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
97 cyg_fb_write_pixel(&FRAMEBUF, (FRAMEBUF.fb_width - 1) - i, i, BLUE); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
98 cyg_fb_write_pixel(&FRAMEBUF, i, (FRAMEBUF.fb_height - 1) - i, GREEN); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
99 cyg_fb_write_pixel(&FRAMEBUF, (FRAMEBUF.fb_width - 1) - i, (FRAMEBUF.fb_height - 1) - i, YELLOW); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
100 } |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
101 |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
102 // Horizontal and vertical lines. Cyan at the top, magenta on the bottom, |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
103 // brown on the left, lightgrey on the right. |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
104 cyg_fb_write_hline(&FRAMEBUF, 25, 12, FRAMEBUF.fb_width - 50, CYAN); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
105 cyg_fb_write_hline(&FRAMEBUF, 25, FRAMEBUF.fb_height - 12, FRAMEBUF.fb_width - 50, MAGENTA); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
106 cyg_fb_write_vline(&FRAMEBUF, 12, 25, FRAMEBUF.fb_height - 50, BROWN); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
107 cyg_fb_write_vline(&FRAMEBUF, FRAMEBUF.fb_width - 12, 25, FRAMEBUF.fb_height - 50, LIGHTGREY); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
108 |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
109 // And 14 vertical stripes, from blue to yellow, in the centre of the box. |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
110 block_width = (FRAMEBUF.fb_width - 100) / 14; |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
111 for (i = 1; i <= 14; i++) { |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
112 cyg_fb_fill_block(&FRAMEBUF, 50 + ((i - 1) * block_width), 50, block_width, FRAMEBUF.fb_height - 100, colours[i]); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
113 } |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
114 |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
115 cyg_fb_synch(&FRAMEBUF, CYG_FB_UPDATE_NOW); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
116 #undef FRAMEBUF |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
117 } |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
118 |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
119 // ---------------------------------------------------------------------------- |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
120 // FB1, 320x240 15bpp, true 555, two pages. Draw a set of horizontal lines |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
121 // in one page, vertical lines in the other, and flip between them at |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
122 // one second intervals. |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
123 |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
124 static void |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
125 fb1_thread(cyg_addrword_t arg) |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
126 { |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
127 #define FRAMEBUF cyg_synth_fb1 |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
128 static cyg_ucount32 colours[16]; |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
129 struct cyg_fb_ioctl_page_flip page_flip; |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
130 size_t len; |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
131 int result; |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
132 int i; |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
133 |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
134 cyg_fb_on(&FRAMEBUF); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
135 for (i = 0; i < 16; i++) { |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
136 colours[i] = cyg_fb_make_colour(&FRAMEBUF, |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
137 cyg_fb_palette_vga[i + i + i], cyg_fb_palette_vga[i + i + i + 1],cyg_fb_palette_vga[i + i + i + 2]); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
138 } |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
139 |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
140 // Draw the horizontal stripes on page 0. |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
141 page_flip.fbpf_visible_page = 0; |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
142 page_flip.fbpf_drawable_page = 1; |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
143 page_flip.fbpf_when = CYG_FB_UPDATE_NOW; |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
144 len = sizeof(page_flip); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
145 result = cyg_fb_ioctl(&FRAMEBUF, CYG_FB_IOCTL_PAGE_FLIPPING_SET_PAGES, &page_flip, &len); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
146 if (result != 0) { |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
147 fprintf(stderr, "fb1_thread: initial page flip failed.\n"); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
148 } |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
149 // 16 colours, 240 rows -> 15 rows/colour |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
150 for (i = 0; i < 16; i++) { |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
151 cyg_fb_fill_block(&FRAMEBUF, 0, 15 * i, 320, 15, colours[i]); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
152 } |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
153 |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
154 // Show the horizontal stripes and draw the vertical stripes on page 0. |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
155 page_flip.fbpf_visible_page = 1; |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
156 page_flip.fbpf_drawable_page = 0; |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
157 page_flip.fbpf_when = CYG_FB_UPDATE_NOW; |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
158 len = sizeof(page_flip); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
159 result = cyg_fb_ioctl(&FRAMEBUF, CYG_FB_IOCTL_PAGE_FLIPPING_SET_PAGES, &page_flip, &len); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
160 if (result != 0) { |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
161 fprintf(stderr, "fb1_thread: second page flip failed.\n"); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
162 } |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
163 // 16 colours, 320 columns -> 20 columns/colour |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
164 for (i = 0; i < 16; i++) { |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
165 cyg_fb_fill_block(&FRAMEBUF, 20 * i, 0, 20, 240, colours[i]); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
166 } |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
167 |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
168 for ( i = 0; ; i = 1 - i) { |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
169 page_flip.fbpf_visible_page = i; |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
170 page_flip.fbpf_drawable_page = 1 - i; |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
171 page_flip.fbpf_when = CYG_FB_UPDATE_NOW; |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
172 len = sizeof(page_flip); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
173 result = cyg_fb_ioctl(&FRAMEBUF, CYG_FB_IOCTL_PAGE_FLIPPING_SET_PAGES, &page_flip, &len); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
174 if (result != 0) { |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
175 fprintf(stderr, "fb1_thread: ongoing page flip failed.\n"); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
176 } |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
177 cyg_thread_delay(100); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
178 } |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
179 #undef FRAMEBUF |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
180 } |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
181 |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
182 // ---------------------------------------------------------------------------- |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
183 // FB2, 320x240 15bpp, true 565, with a 160x120 viewport. Draw a simple image |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
184 // as per the fbmacro.c example. Then move around within the viewport in a |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
185 // clockwise direction at 110ms intervals. |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
186 |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
187 static void |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
188 fb2_thread(cyg_addrword_t arg) |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
189 { |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
190 #define FRAMEBUF fb2 |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
191 #define WIDTH 320 |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
192 #define HEIGHT 240 |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
193 |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
194 static cyg_ucount32 colours[16]; |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
195 cyg_ucount16 block_width; |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
196 int i, j; |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
197 int x = 0, y = 0; |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
198 CYG_FB_PIXEL0_VAR(FRAMEBUF); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
199 CYG_FB_PIXEL1_VAR(FRAMEBUF); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
200 cyg_fb_ioctl_viewport viewport; |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
201 size_t len; |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
202 |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
203 CYG_FB_ON(FRAMEBUF); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
204 for (i = 0; i < 16; i++) { |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
205 colours[i] = CYG_FB_MAKE_COLOUR(FRAMEBUF, |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
206 cyg_fb_palette_vga[i + i + i], cyg_fb_palette_vga[i + i + i + 1],cyg_fb_palette_vga[i + i + i + 2]); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
207 } |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
208 // A white background |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
209 CYG_FB_FILL_BLOCK(FRAMEBUF, 0, 0, WIDTH, HEIGHT, WHITE); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
210 // A black block in the middle, 25 pixels in. |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
211 CYG_FB_FILL_BLOCK(FRAMEBUF, 32, 32, WIDTH - 64, HEIGHT - 64, BLACK); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
212 |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
213 // Four diagonal lines in the corners. Red in the top left, blue in the top right, |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
214 // green in the bottom left, and yellow in the bottom right. |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
215 for (i = 0; i < 32; i++) { |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
216 CYG_FB_WRITE_PIXEL(FRAMEBUF, i, i, RED); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
217 CYG_FB_WRITE_PIXEL(FRAMEBUF, (WIDTH - 1) - i, i, BLUE); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
218 CYG_FB_WRITE_PIXEL(FRAMEBUF, i, (HEIGHT - 1) - i, GREEN); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
219 CYG_FB_WRITE_PIXEL(FRAMEBUF, (WIDTH - 1) - i, (HEIGHT - 1) - i, YELLOW); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
220 } |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
221 |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
222 // Horizontal and vertical lines. Cyan at the top, magenta on the bottom, |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
223 // brown on the left, lightgrey on the right. |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
224 CYG_FB_WRITE_HLINE(FRAMEBUF, 32, 16, WIDTH - 64, CYAN); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
225 CYG_FB_WRITE_HLINE(FRAMEBUF, 32, HEIGHT - 16, WIDTH - 64, MAGENTA); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
226 CYG_FB_WRITE_VLINE(FRAMEBUF, 16, 32, HEIGHT - 64, BROWN); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
227 CYG_FB_WRITE_VLINE(FRAMEBUF, WIDTH - 16, 32, HEIGHT - 64, LIGHTGREY); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
228 |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
229 // Top left, diagonal lines away from 0,0 with increasing spacing horizontally |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
230 for (i = 0; i < 16; i++) { |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
231 CYG_FB_PIXEL0_SET(FRAMEBUF, i + 16, i); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
232 for (j = 0; j < 16; j++) { |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
233 CYG_FB_PIXEL0_WRITE(FRAMEBUF, colours[i]); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
234 CYG_FB_PIXEL0_ADDX(FRAMEBUF, j); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
235 } |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
236 } |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
237 |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
238 // Top right, diagonal lines away from the corner, with increasing spacing horizontally |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
239 for (i = 0; i < 16; i++) { |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
240 CYG_FB_PIXEL0_SET(FRAMEBUF, WIDTH - (i + 16), i); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
241 for (j = 0; j < 16; j++) { |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
242 CYG_FB_PIXEL0_WRITE(FRAMEBUF, colours[i]); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
243 CYG_FB_PIXEL0_ADDX(FRAMEBUF, -1 * j); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
244 } |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
245 } |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
246 |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
247 // Top left, diagonal lines away from the corner, with increasing spacing vertically |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
248 for (i = 0; i < 16; i++) { |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
249 CYG_FB_PIXEL0_SET(FRAMEBUF, i, i + 16); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
250 for (j = 0; j < 16; j++) { |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
251 CYG_FB_PIXEL0_WRITE(FRAMEBUF, colours[i]); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
252 CYG_FB_PIXEL0_ADDY(FRAMEBUF, j); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
253 } |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
254 } |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
255 // Bottom left, diagonal lines away from the corner, with increasing spacing vertically |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
256 for (i = 0; i < 16; i++) { |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
257 CYG_FB_PIXEL0_SET(FRAMEBUF, i, HEIGHT - (i + 16)); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
258 for (j = 0; j < 16; j++) { |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
259 CYG_FB_PIXEL0_WRITE(FRAMEBUF, colours[i]); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
260 CYG_FB_PIXEL0_ADDY(FRAMEBUF, -1 * j); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
261 } |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
262 } |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
263 |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
264 // Thin vertical bars in the top-middle of the screen, between the hline and the box. |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
265 // Starting in the center and moving out with increasing spacing. |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
266 for (j = 0; j < 8; j++) { |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
267 CYG_FB_PIXEL0_SET(FRAMEBUF, (WIDTH / 2) - 2, 20 + j); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
268 CYG_FB_PIXEL0_GET(FRAMEBUF, x, y); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
269 CYG_FB_PIXEL1_SET(FRAMEBUF, x + 3, y); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
270 for (i = 0; i < 16; i++) { |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
271 CYG_FB_PIXEL0_ADDX(FRAMEBUF, -1 * i); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
272 CYG_FB_PIXEL1_ADDX(FRAMEBUF, i); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
273 CYG_FB_PIXEL0_WRITE(FRAMEBUF, colours[i]); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
274 CYG_FB_PIXEL1_WRITE(FRAMEBUF, colours[i]); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
275 } |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
276 } |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
277 |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
278 block_width = (WIDTH - 100) / 14; |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
279 for (i = 1; i <= 14; i++) { |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
280 CYG_FB_FILL_BLOCK(FRAMEBUF, 50 + ((i - 1) * block_width), 50, block_width, HEIGHT - 100, colours[i]); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
281 } |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
282 |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
283 |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
284 for ( ; ; ) { |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
285 for (x = 0; x <= 160; x += 5) { |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
286 viewport.fbvp_x = x; |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
287 viewport.fbvp_y = 0; |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
288 viewport.fbvp_when = CYG_FB_UPDATE_NOW; |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
289 len = sizeof(viewport); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
290 CYG_FB_IOCTL(FRAMEBUF, CYG_FB_IOCTL_VIEWPORT_SET_POSITION, &viewport, &len); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
291 cyg_thread_delay(11); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
292 } |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
293 for (y = 0; y < 120; y += 5) { |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
294 viewport.fbvp_x = 160; |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
295 viewport.fbvp_y = y; |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
296 viewport.fbvp_when = CYG_FB_UPDATE_NOW; |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
297 len = sizeof(viewport); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
298 CYG_FB_IOCTL(FRAMEBUF, CYG_FB_IOCTL_VIEWPORT_SET_POSITION, &viewport, &len); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
299 cyg_thread_delay(11); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
300 } |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
301 for (x = 160; x >= 0; x -= 5) { |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
302 viewport.fbvp_x = x; |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
303 viewport.fbvp_y = 120; |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
304 viewport.fbvp_when = CYG_FB_UPDATE_NOW; |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
305 len = sizeof(viewport); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
306 CYG_FB_IOCTL(FRAMEBUF, CYG_FB_IOCTL_VIEWPORT_SET_POSITION, &viewport, &len); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
307 cyg_thread_delay(11); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
308 } |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
309 for (y = 120; y >= 0; y -= 5) { |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
310 viewport.fbvp_x = 0; |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
311 viewport.fbvp_y = y; |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
312 viewport.fbvp_when = CYG_FB_UPDATE_NOW; |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
313 len = sizeof(viewport); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
314 CYG_FB_IOCTL(FRAMEBUF, CYG_FB_IOCTL_VIEWPORT_SET_POSITION, &viewport, &len); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
315 cyg_thread_delay(11); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
316 } |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
317 } |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
318 #undef FRAMEBUF |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
319 #undef WIDTH |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
320 #undef HEIGHT |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
321 } |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
322 |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
323 // ---------------------------------------------------------------------------- |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
324 // FB3, 320x240 8bpp, paletted 888. Draw a series of vertical stripes, 5 pixels |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
325 // wide, and rotate through the palette at 210ms intervals. |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
326 |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
327 static void |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
328 fb3_thread(cyg_addrword_t arg) |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
329 { |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
330 #define FRAMEBUF fb3 |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
331 static cyg_uint8 palette[(128 +16) * 3]; |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
332 int i; |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
333 |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
334 CYG_FB_ON(FRAMEBUF); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
335 |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
336 // Read in the first 128 palette entries, and copy the first 16 |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
337 // entries to give a wrap-around. After 128 the palette gets less |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
338 // interesting. |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
339 CYG_FB_READ_PALETTE(FRAMEBUF, 0, 128, palette); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
340 memcpy(&(palette[128 * 3]), palette, 16 * 3); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
341 |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
342 for (i = 0; i < 32; i++) { |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
343 CYG_FB_FILL_BLOCK(FRAMEBUF, 10 * i, 0, 10, 240, i); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
344 } |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
345 |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
346 for ( i = 0; ; i = (i + 1) % 128 ) { |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
347 cyg_thread_delay(21); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
348 CYG_FB_WRITE_PALETTE(FRAMEBUF, 0, 64, &(palette[i * 3]), CYG_FB_UPDATE_NOW); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
349 } |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
350 #undef FRAMEBUF |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
351 } |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
352 |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
353 // ---------------------------------------------------------------------------- |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
354 // main(). Start up separate threads for FB1 and FB2, run the FB0 code since |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
355 // it just does some drawing and finishes, then run the FB3 code. |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
356 static cyg_thread fb1_thread_data; |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
357 static cyg_handle_t fb1_thread_handle; |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
358 static unsigned char fb1_thread_stack[CYGNUM_HAL_STACK_SIZE_TYPICAL]; |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
359 static cyg_thread fb2_thread_data; |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
360 static cyg_handle_t fb2_thread_handle; |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
361 static unsigned char fb2_thread_stack[CYGNUM_HAL_STACK_SIZE_TYPICAL]; |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
362 |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
363 int |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
364 main(int argc, char** argv) |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
365 { |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
366 cyg_thread_create(10, &fb1_thread, 0, "fb1", fb1_thread_stack, CYGNUM_HAL_STACK_SIZE_TYPICAL, &fb1_thread_handle, &fb1_thread_data); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
367 cyg_thread_create(10, &fb2_thread, 0, "fb2", fb2_thread_stack, CYGNUM_HAL_STACK_SIZE_TYPICAL, &fb2_thread_handle, &fb2_thread_data); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
368 cyg_thread_resume(fb1_thread_handle); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
369 cyg_thread_resume(fb2_thread_handle); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
370 fb0_thread(0); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
371 fb3_thread(0); |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
372 return 0; |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
373 } |
|
2063ee669faf
Contribute eCosCentric's synthetic target framebuffer device driver.
bartv
parents:
diff
changeset
|
374 |
