No empty .Rs/.Re
[netbsd-mini2440.git] / sys / arch / evbarm / adi_brh / brh_7seg.c
blob4ebb886b191156cff46170e9bb2b35e44ab79cec
1 /* $NetBSD: brh_7seg.c,v 1.3 2005/12/11 12:17:06 christos Exp $ */
3 /*
4 * Copyright (c) 2001, 2002 Wasabi Systems, Inc.
5 * All rights reserved.
7 * Written by Jason R. Thorpe for Wasabi Systems, Inc.
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions
11 * are met:
12 * 1. Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 * 2. Redistributions in binary form must reproduce the above copyright
15 * notice, this list of conditions and the following disclaimer in the
16 * documentation and/or other materials provided with the distribution.
17 * 3. All advertising materials mentioning features or use of this software
18 * must display the following acknowledgement:
19 * This product includes software developed for the NetBSD Project by
20 * Wasabi Systems, Inc.
21 * 4. The name of Wasabi Systems, Inc. may not be used to endorse
22 * or promote products derived from this software without specific prior
23 * written permission.
25 * THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``AS IS'' AND
26 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
27 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL WASABI SYSTEMS, INC
29 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
30 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
31 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
32 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
33 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
34 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
35 * POSSIBILITY OF SUCH DAMAGE.
39 * Support for the 7-segment display on the ADI Engineering BRH board.
42 #include <sys/cdefs.h>
43 __KERNEL_RCSID(0, "$NetBSD: brh_7seg.c,v 1.3 2005/12/11 12:17:06 christos Exp $");
45 #include <sys/param.h>
46 #include <sys/systm.h>
48 #include <machine/bus.h>
50 #include <evbarm/adi_brh/brhreg.h>
51 #include <evbarm/adi_brh/brhvar.h>
53 #define WRITE(x, v) *((volatile uint8_t *) (x)) = (v)
55 static int snakestate;
57 static const uint8_t digitmap[] = {
58 /* +#####+
59 * # #
60 * # #
61 * # #
62 * +-----+
63 * # #
64 * # #
65 * # #
66 * +#####+
68 SEG_G,
70 /* +-----+
71 * | #
72 * | #
73 * | #
74 * +-----+
75 * | #
76 * | #
77 * | #
78 * +-----+
80 SEG_A|SEG_D|SEG_E|SEG_F|SEG_G,
82 /* +#####+
83 * | #
84 * | #
85 * | #
86 * +#####+
87 * # |
88 * # |
89 * # |
90 * +#####+
92 SEG_C|SEG_F,
94 /* +#####+
95 * | #
96 * | #
97 * | #
98 * +#####+
99 * | #
100 * | #
101 * | #
102 * +#####+
104 SEG_E|SEG_F,
106 /* +-----+
107 * # #
108 * # #
109 * # #
110 * +#####+
111 * | #
112 * | #
113 * | #
114 * +-----+
116 SEG_A|SEG_D|SEG_E,
118 /* +#####+
119 * # |
120 * # |
121 * # |
122 * +#####+
123 * | #
124 * | #
125 * | #
126 * +#####+
128 SEG_B|SEG_E,
130 /* +#####+
131 * # |
132 * # |
133 * # |
134 * +#####+
135 * # #
136 * # #
137 * # #
138 * +#####+
140 SEG_B,
142 /* +#####+
143 * | #
144 * | #
145 * | #
146 * +-----+
147 * | #
148 * | #
149 * | #
150 * +-----+
152 SEG_D|SEG_E|SEG_F,
154 /* +#####+
155 * # #
156 * # #
157 * # #
158 * +#####+
159 * # #
160 * # #
161 * # #
162 * +#####+
166 /* +#####+
167 * # #
168 * # #
169 * # #
170 * +#####+
171 * | #
172 * | #
173 * | #
174 * +-----+
176 SEG_D|SEG_E,
179 static uint8_t
180 brh_7seg_xlate(char c)
182 uint8_t rv;
184 if (c >= '0' && c <= '9')
185 rv = digitmap[c - '0'];
186 else if (c == '.')
187 rv = (u_int8_t) ~SEG_DP;
188 else
189 rv = 0xff;
191 return (rv);
194 void
195 brh_7seg(char a)
197 uint8_t ch;
199 ch = brh_7seg_xlate(a);
201 snakestate = 0;
203 WRITE(BRH_LED_VBASE, ch);
206 static const uint8_t snakemap[] = {
208 /* +#####+
209 * | |
210 * | |
211 * | |
212 * +-----+
213 * | |
214 * | |
215 * | |
216 * +-----+
218 ~SEG_A,
220 /* +-----+
221 * # |
222 * # |
223 * # |
224 * +-----+
225 * | |
226 * | |
227 * | |
228 * +-----+
230 ~SEG_F,
232 /* +-----+
233 * | |
234 * | |
235 * | |
236 * +#####+
237 * | |
238 * | |
239 * | |
240 * +-----+
242 ~SEG_G,
244 /* +-----+
245 * | |
246 * | |
247 * | |
248 * +-----+
249 * | #
250 * | #
251 * | #
252 * +-----+
254 ~SEG_C,
256 /* +-----+
257 * | |
258 * | |
259 * | |
260 * +-----+
261 * | |
262 * | |
263 * | |
264 * +#####+
266 ~SEG_D,
268 /* +-----+
269 * | |
270 * | |
271 * | |
272 * +-----+
273 * # |
274 * # |
275 * # |
276 * +-----+
278 ~SEG_E,
280 /* +-----+
281 * | |
282 * | |
283 * | |
284 * +#####+
285 * | |
286 * | |
287 * | |
288 * +-----+
290 ~SEG_G,
292 /* +-----+
293 * | #
294 * | #
295 * | #
296 * +-----+
297 * | |
298 * | |
299 * | |
300 * +-----+
302 ~SEG_B,
305 void
306 brh_7seg_snake(void)
308 int cur = snakestate;
310 WRITE(BRH_LED_VBASE, snakemap[cur]);
312 snakestate = (cur + 1) & 7;