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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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