You can subscribe to this list here.
2001 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(135) |
Nov
(123) |
Dec
(83) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2002 |
Jan
(244) |
Feb
(72) |
Mar
(221) |
Apr
(91) |
May
(104) |
Jun
(93) |
Jul
(78) |
Aug
(1) |
Sep
(1) |
Oct
(29) |
Nov
(98) |
Dec
(20) |
2003 |
Jan
|
Feb
(21) |
Mar
|
Apr
(1) |
May
|
Jun
|
Jul
|
Aug
(18) |
Sep
(18) |
Oct
(23) |
Nov
(12) |
Dec
(6) |
2004 |
Jan
(2) |
Feb
(32) |
Mar
|
Apr
(12) |
May
(11) |
Jun
(11) |
Jul
|
Aug
(9) |
Sep
|
Oct
(15) |
Nov
|
Dec
|
2005 |
Jan
|
Feb
(2) |
Mar
(11) |
Apr
(6) |
May
(1) |
Jun
(9) |
Jul
(7) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(1) |
2006 |
Jan
|
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2007 |
Jan
|
Feb
(2) |
Mar
|
Apr
(25) |
May
(2) |
Jun
|
Jul
(5) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2008 |
Jan
|
Feb
|
Mar
(1) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2009 |
Jan
|
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2010 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(13) |
Oct
|
Nov
(2) |
Dec
(2) |
2011 |
Jan
|
Feb
|
Mar
(10) |
Apr
(10) |
May
(1) |
Jun
(6) |
Jul
|
Aug
(2) |
Sep
(5) |
Oct
|
Nov
|
Dec
|
From: Vojtech P. <vo...@us...> - 2001-11-07 08:12:54
|
Update of /cvsroot/linuxconsole/ruby/linux/drivers/input In directory usw-pr-cvs1:/tmp/cvs-serv3514 Modified Files: hid-core.c hid-input.c hid.h Log Message: Fix unsigned logical maximums, shifted hats ... Index: hid-core.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/input/hid-core.c,v retrieving revision 1.31 retrieving revision 1.32 diff -u -d -r1.31 -r1.32 --- hid-core.c 2001/09/25 10:12:07 1.31 +++ hid-core.c 2001/11/07 08:12:49 1.32 @@ -310,7 +310,10 @@ return 0; case HID_GLOBAL_ITEM_TAG_LOGICAL_MAXIMUM: - parser->global.logical_maximum = item_sdata(item); + if (parser->global.logical_minimum < 0) + parser->global.logical_maximum = item_sdata(item); + else + parser->global.logical_maximum = item_udata(item); return 0; case HID_GLOBAL_ITEM_TAG_PHYSICAL_MINIMUM: @@ -824,15 +827,18 @@ len--; } - if (!(report = report_enum->report_id_hash[n])) { - dbg("undefined report_id %d received", n); -#ifdef DEBUG - printk(KERN_DEBUG __FILE__ ": report (size %u) = ", len); - for (n = 0; n < len; n++) - printk(" %02x", data[n]); - printk("\n"); +#ifdef DEBUG_DATA + { + int i; + printk(KERN_DEBUG __FILE__ ": report %d (size %u) = ", n, len); + for (i = 0; i < n; i++) + printk(" %02x", data[i]); + printk("\n"); + } #endif + if (!(report = report_enum->report_id_hash[n])) { + dbg("undefined report_id %d received", n); return -1; } Index: hid-input.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/input/hid-input.c,v retrieving revision 1.16 retrieving revision 1.17 diff -u -d -r1.16 -r1.17 --- hid-input.c 2001/09/25 10:12:07 1.16 +++ hid-input.c 2001/11/07 08:12:49 1.17 @@ -58,7 +58,7 @@ static struct { __s32 x; __s32 y; -} hid_hat_to_axis[] = {{0, 0}, { 0,-1}, { 1,-1}, { 1, 0}, { 1, 1}, { 0, 1}, {-1, 1}, {-1, 0}, {-1,-1}}; +} hid_hat_to_axis[] = {{ 0,-1}, { 1,-1}, { 1, 0}, { 1, 1}, { 0, 1}, {-1, 1}, {-1, 0}, {-1,-1}}; static void hidinput_configure_usage(struct hid_device *device, struct hid_field *field, struct hid_usage *usage) { @@ -129,7 +129,8 @@ if (usage->hid == HID_GD_HATSWITCH) { usage->code = ABS_HAT0X; - usage->hat = 1 + (field->logical_maximum == 4); + usage->hat_min = field->logical_minimum; + usage->hat_max = field->logical_maximum; } break; @@ -318,7 +319,7 @@ input->absflat[usage->code] = (b - a) >> 4; } - if (usage->hat) { + if (usage->hat_min != usage->hat_max) { int i; for (i = usage->code; i < usage->code + 2 && i <= max; i++) { input->absmax[i] = 1; @@ -335,8 +336,8 @@ struct input_dev *input = &hid->input; int *quirks = &hid->quirks; - if (usage->hat) { - if (usage->hat == 2) value = value * 2; + if (usage->hat_min != usage->hat_max) { + value = (value - usage->hat_min) * 8 / (usage->hat_max - usage->hat_min + 1); if (value > 8) value = 8; input_event(input, usage->type, usage->code , hid_hat_to_axis[value].x); input_event(input, usage->type, usage->code + 1, hid_hat_to_axis[value].y); Index: hid.h =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/input/hid.h,v retrieving revision 1.22 retrieving revision 1.23 diff -u -d -r1.22 -r1.23 --- hid.h 2001/09/25 09:37:57 1.22 +++ hid.h 2001/11/07 08:12:49 1.23 @@ -233,7 +233,8 @@ unsigned hid; /* hid usage code */ __u16 code; /* input driver code */ __u8 type; /* input driver type */ - __u8 hat; /* hat switch fun */ + __s8 hat_min; /* hat switch fun */ + __s8 hat_max; /* ditto */ }; struct hid_field { |
From: Vojtech P. <vo...@us...> - 2001-11-07 07:35:35
|
Update of /cvsroot/linuxconsole/ruby/linux/drivers/input In directory usw-pr-cvs1:/tmp/cvs-serv17005 Modified Files: adi.c Log Message: Fix pad (wingman gamepad) handling problem. Index: adi.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/input/adi.c,v retrieving revision 1.21 retrieving revision 1.22 diff -u -d -r1.21 -r1.22 --- adi.c 2001/09/25 10:12:07 1.21 +++ adi.c 2001/11/07 07:35:33 1.22 @@ -425,7 +425,7 @@ adi->dev.private = port; adi->dev.evbit[0] = BIT(EV_KEY) | BIT(EV_ABS); - for (i = 0; i < adi->axes10 + adi->axes8 + (adi->hats + (adi->pad > 0)) * 2; i++) + for (i = 0; i < adi->axes10 + adi->axes8 + (adi->hats + (adi->pad != -1)) * 2; i++) set_bit(adi->abs[i], &adi->dev.absbit); for (i = 0; i < adi->buttons; i++) @@ -438,7 +438,7 @@ if (!adi->length) return; - for (i = 0; i < adi->axes10 + adi->axes8 + (adi->hats + (adi->pad > 0)) * 2; i++) { + for (i = 0; i < adi->axes10 + adi->axes8 + (adi->hats + (adi->pad != -1)) * 2; i++) { t = adi->abs[i]; x = adi->dev.abs[t]; |
From: James S. <jsi...@us...> - 2001-11-06 21:56:08
|
Update of /cvsroot/linuxconsole/ruby/linux/drivers/video In directory usw-pr-cvs1:/tmp/cvs-serv8141/drivers/video Modified Files: sa1100fb.c sa1100fb.h Log Message: Serial updates. Better locking. Index: sa1100fb.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/video/sa1100fb.c,v retrieving revision 1.17 retrieving revision 1.18 diff -u -d -r1.17 -r1.18 --- sa1100fb.c 2001/10/29 00:11:00 1.17 +++ sa1100fb.c 2001/11/06 21:56:05 1.18 @@ -1,79 +1,99 @@ /* - * linux/drivers/video/sa1100fb.c -- StrongARM 1100 LCD Controller Frame Buffer Device + * linux/drivers/video/sa1100fb.c * * Copyright (C) 1999 Eric A. Thomas * Based on acornfb.c Copyright (C) Russell King. - * + * * This file is subject to the terms and conditions of the GNU General Public - * License. See the file COPYING in the main directory of this archive - * for more details. [...2236 lines suppressed...] @@ -1931,8 +2369,9 @@ if (!options || !*options) return 0; - - while(this_opt = strsep(&options, ",")) { + + while (this_opt = strsep(&options, ",")) { + if (!strncmp(this_opt, "bpp:", 4)) current_par.max_bpp = simple_strtoul(this_opt + 4, NULL, 0); @@ -1963,3 +2402,6 @@ #endif return 0; } + +MODULE_DESCRIPTION("StrongARM-1100/1110 framebuffer driver"); +MODULE_LICENSE("GPL"); Index: sa1100fb.h =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/video/sa1100fb.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- sa1100fb.h 2001/06/28 23:45:24 1.3 +++ sa1100fb.h 2001/11/06 21:56:05 1.4 @@ -51,23 +51,25 @@ /* Shadows for LCD controller registers */ struct sa1100fb_lcd_reg { - Word lccr0; - Word lccr1; - Word lccr2; - Word lccr3; + unsigned long lccr0; + unsigned long lccr1; + unsigned long lccr2; + unsigned long lccr3; }; #define RGB_8 (0) #define RGB_16 (1) #define NR_RGB 2 -struct sa1100_par { - struct sa1100fb_rgb rgb[NR_RGB]; +struct sa1100fb_info { + struct fb_info fb; + signed int currcon; + + struct sa1100fb_rgb *rgb[NR_RGB]; u_int max_bpp; u_int max_xres; u_int max_yres; - u_int bpp; /* * These are the addresses we mapped @@ -92,18 +94,20 @@ cmap_static:1, unused:30; - u_int reg_lccr0; - u_int reg_lccr1; - u_int reg_lccr2; - u_int reg_lccr3; - - int pcd; + u_int reg_lccr0; + u_int reg_lccr1; + u_int reg_lccr2; + u_int reg_lccr3; volatile u_char state; volatile u_char task_state; struct semaphore ctrlr_sem; wait_queue_head_t ctrlr_wait; struct tq_struct task; + +#ifdef CONFIG_PM + struct pm_dev *pm; +#endif #ifdef CONFIG_CPU_FREQ struct notifier_block clockchg; #endif @@ -111,7 +115,7 @@ #define __type_entry(ptr,type,member) ((type *)((char *)(ptr)-offsetof(type,member))) -#define TO_INF(ptr,member) __type_entry(ptr,struct sa1100_par,member) +#define TO_INF(ptr,member) __type_entry(ptr,struct sa1100fb_info,member) #define SA1100_PALETTE_MODE_VAL(bpp) (((bpp) & 0x018) << 9) |
From: James S. <jsi...@us...> - 2001-11-06 21:56:08
|
Update of /cvsroot/linuxconsole/ruby/linux/include/linux In directory usw-pr-cvs1:/tmp/cvs-serv8141/include/linux Modified Files: serial_core.h Log Message: Serial updates. Better locking. Index: serial_core.h =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/include/linux/serial_core.h,v retrieving revision 1.7 retrieving revision 1.8 diff -u -d -r1.7 -r1.8 --- serial_core.h 2001/11/01 21:39:45 1.7 +++ serial_core.h 2001/11/06 21:56:05 1.8 @@ -318,10 +318,12 @@ uart_handle_cts_change(struct uart_info *info, unsigned int status) { struct uart_port *port = info->port; + unsigned long flags; port->icount.cts++; if (info->flags & ASYNC_CTS_FLOW) { + spin_lock_irqsave(&info->lock, flags); if (info->tty->hw_stopped) { if (status) { info->tty->hw_stopped = 0; @@ -334,6 +336,7 @@ info->ops->stop_tx(port, 0); } } + spin_unlock_irqrestore(&info->lock, flags); } } |
From: James S. <jsi...@us...> - 2001-11-06 21:56:08
|
Update of /cvsroot/linuxconsole/ruby/linux/drivers/serial In directory usw-pr-cvs1:/tmp/cvs-serv8141/drivers/serial Modified Files: serial_core.c Log Message: Serial updates. Better locking. Index: serial_core.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/serial/serial_core.c,v retrieving revision 1.14 retrieving revision 1.15 diff -u -d -r1.14 -r1.15 --- serial_core.c 2001/11/01 21:38:35 1.14 +++ serial_core.c 2001/11/06 21:56:04 1.15 @@ -104,17 +104,23 @@ spin_unlock_irqrestore(&info->lock, flags); } +static void __uart_start(struct tty_struct *tty) +{ + struct uart_info *info = tty->driver_data; + if (info->xmit.head != info->xmit.tail && info->xmit.buf && + !tty->stopped && !tty->hw_stopped) + info->ops->start_tx(info->port, 1, 1); +} + static void uart_start(struct tty_struct *tty) { struct uart_info *info = tty->driver_data; unsigned long flags; - int nonempty; pm_access(info->state->pm); spin_lock_irqsave(&info->lock, flags); - nonempty = (info->xmit.head != info->xmit.tail && info->xmit.buf); - info->ops->start_tx(info->port, nonempty, 1); + __uart_start(tty); spin_unlock_irqrestore(&info->lock, flags); } @@ -373,20 +379,7 @@ static void uart_flush_chars(struct tty_struct *tty) { - struct uart_info *info = tty->driver_data; - unsigned long flags; - - pm_access(info->state->pm); - - if (info->xmit.head == info->xmit.tail - || tty->stopped - || tty->hw_stopped - || !info->xmit.buf) - return; - - spin_lock_irqsave(&info->lock, flags); - info->ops->start_tx(info->port, 1, 0); - spin_unlock_irqrestore(&info->lock, flags); + uart_start(tty); } static int uart_write(struct tty_struct *tty, int from_user, @@ -451,13 +444,8 @@ } spin_unlock_irqrestore(&info->lock, flags); } - - pm_access(info->state->pm); - if (info->xmit.head != info->xmit.tail - && !tty->stopped - && !tty->hw_stopped) - info->ops->start_tx(info->port, 1, 0); + uart_start(tty); return ret; } @@ -774,7 +762,7 @@ ((CIRC_CNT(info->xmit.head, info->xmit.tail, UART_XMIT_SIZE) > 0) && !info->tty->stopped && !info->tty->hw_stopped)) - result &= TIOCSER_TEMT; + result &= ~TIOCSER_TEMT; return put_user(result, value); } @@ -797,7 +785,7 @@ if (get_user(arg, value)) return -EFAULT; - spin_lock_irq(&info->lock, flags); + spin_lock_irq(&info->lock); old = info->mctrl; switch (cmd) { case TIOCMBIS: info->mctrl |= arg; break; @@ -1002,33 +990,29 @@ uart_change_speed(info, old_termios); + spin_lock_irqsave(&info->lock, flags); + /* Handle transition to B0 status */ - if ((old_termios->c_cflag & CBAUD) && - !(cflag & CBAUD)) { - spin_lock_irqsave(&info->lock, flags); + if ((old_termios->c_cflag & CBAUD) && !(cflag & CBAUD)) { info->mctrl &= ~(TIOCM_RTS | TIOCM_DTR); info->ops->set_mctrl(info->port, info->mctrl); - spin_unlock_irqrestore(&info->lock, flags); } /* Handle transition away from B0 status */ - if (!(old_termios->c_cflag & CBAUD) && - (cflag & CBAUD)) { - spin_lock_irqsave(&info->lock, flags); + if (!(old_termios->c_cflag & CBAUD) && (cflag & CBAUD)) { info->mctrl |= TIOCM_DTR; if (!(cflag & CRTSCTS) || !test_bit(TTY_THROTTLED, &tty->flags)) info->mctrl |= TIOCM_RTS; info->ops->set_mctrl(info->port, info->mctrl); - spin_unlock_irqrestore(&info->lock, flags); } /* Handle turning off CRTSCTS */ - if ((old_termios->c_cflag & CRTSCTS) && - !(cflag & CRTSCTS)) { + if ((old_termios->c_cflag & CRTSCTS) && !(cflag & CRTSCTS)) { tty->hw_stopped = 0; - uart_start(tty); + __uart_start(tty); } + spin_unlock_irqrestore(&info->lock, flags); #if 0 /* @@ -1936,7 +1920,6 @@ * The callout device is just like the normal device except for * the major number and the subtype code. */ - callout = normal + 1; *callout = *normal; callout->name = drv->callout_name; callout->major = drv->callout_major; |
From: James S. <jsi...@us...> - 2001-11-04 19:01:00
|
Update of /cvsroot/linuxconsole/ruby/web/htdocs/fbdev/HOWTO In directory usw-pr-cvs1:/tmp/cvs-serv18248/fbdev/HOWTO Modified Files: 2.html 4.html index.html Log Message: More updates to web site. Index: 2.html =================================================================== RCS file: /cvsroot/linuxconsole/ruby/web/htdocs/fbdev/HOWTO/2.html,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- 2.html 2001/11/04 00:47:05 1.2 +++ 2.html 2001/11/04 19:00:58 1.3 @@ -139,7 +139,7 @@ the next line. </p> -<h3>2.2 Video card </h3> +<h3>2.2 Graphics card </h3> <p> Next, we look at the video card point Index: 4.html =================================================================== RCS file: /cvsroot/linuxconsole/ruby/web/htdocs/fbdev/HOWTO/4.html,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- 4.html 2001/11/04 00:47:05 1.2 +++ 4.html 2001/11/04 19:00:58 1.3 @@ -9,396 +9,203 @@ <hr width="100%" size="2"> <p> -Now that we understand the basic -ideas behind video card technology and mode setting, we can now look at how -the framebuffer devices abstract them. Also, we will see that fbdev actually -handles most of the mode setting issues for you to make life much easier. In -the older API, the console code was heavily linked to the framebuffer devices. -The newer API has now moved nearly all console handling code into fbcon -itself. Now, fbcon is a true wrapper around the video card’s abilities. -This allows for massive code reduction and easier driver development. A good -example of a framebuffer driver is the virtual framebuffer (vfb). The vfb -driver is not - a true framebuffer driver. All it does is map a chunk of memory to userspace. - It's used for demonstration purposes and testing. For a more detailed file - that explains each function look at skeletonfb.c. It is not a true driver - but it explains everything you need for a real one. +Now that we understand the basic ideas behind graphics card technology and +mode setting, we can now look at how the framebuffer devices abstract. Also +we will see that fbdev actually handles most of the mode setting issues for +you which make life much easier. In the older API, the console code was +heavily linked to the framebuffer devices. The newer API has now moved all +the console handling code into fbcon itself. Now, fbcon is a true wrapper +around the graphics card’s abilities. This allows for massive code +and easier driver development. It also allows for a framebuffer system to +run independent of the VT console layer. A good example of a working +framebuffer driver is the virtual framebuffer (vfb). The vfb driver is not +a true framebuffer driver. All it does is map a chunk of memory to userspace. +It's used for demonstration purposes and testing. For a more detailed file +that explains each function look at skeletonfb.c. It is not a driver at all +but it explains everything you need for a real one. </p> <h3>4.1 Data Structures</h3> -<p>The framebuffer drivers depend heavily on four data structures. These - structures are declared in fb.h. They are - - <i>struct fb_var_screeninfo</i></br> - <i>struct fb_fix_screeninfo</i></br> - <i>struct fb_monospecs</i></br> - <i>struct fb_info</i></br> +<p> +The framebuffer drivers depend heavily on four data structures. These +structures are declared in fb.h. They are: +</p> +<pre> + <i>struct fb_var_screeninfo</i> + <i> struct fb_fix_screeninfo</i> + <i> struct fb_monospecs</i> + <i> struct fb_info</i> +</pre> +<p> +The first three can be made available to and from userland. First let me +describe what each means and how they are used. +</p> - The first - three can be made available to and from userland. First let me describe what - each means and how they are used.</p> +<p> +<i>Struct fb_var_screeninfo</i> is used to describe the features of a graphics +you normally can set. With <i>struct fb_var_screeninfo</i>, you can define +such things as depth and the resolution you want. +</p> -<p><i>fb_var_screeninfo</i> - is used to describe the features of a video card you normally can set. With - <i>fb_var_screeninfo</i>, you - can define such things as depth and the resolution you want.</p> -<p>The next structure is<i>fb_fix_screeninfo</i>. - This defines the properties of a card that are created when you set a mode and - can't be changed otherwise. A good example is the start of the framebuffer memory. - This can depend on what mode is set. Now while using that mode, you don't want - to have the memory position change on you. In this case, the video hardware - tells you the memory location and you have no say about it.</p> -<p>The third structure is <i>fb_monospecs</i>. - In the old API, the importance of <i>fb_monospecs</i> - was very little. This allowed for forbidden things such as setting a mode of - 800x600 on a fix frequency monitor. With the new API, <i>fb_monospecs</i> - prevents such things, and if used correctly, can prevent a monitor from being - cooked.</p> -<p>The final data structure is <i>fb_info</i>. - This defines the current state of the video card. <i>fb_info</i> - is only visible from the kernel. Inside of <i>fb_info</i>, - there exist a <i>struct fb_ops</i> which - is a collection of needed functions to make fbdev work.</p> +<p> +The next structure is <i>struct fb_fix_screeninfo</i>. This defines the non +changeable properties of a graphics card that are set when you change the +resolution. A good example is the start of the framebuffer memory. It is +possible this address depends on what resolution, endians, or color depth +the graphics card is running at. Now while using that mode, you don't want +to have the memory position change on you. In this case, the graphics hardware +tells you the memory location and you have no say about it. +</p> -<h3>4.2 Driver layout</h3> -<p>Here I describe a clean way to code - your drivers. A good example of the basic layout is vfb.c. In the example driver, - we first present our data structures in the beginning of the file. Note that - there is no<i>fb_monospecs</i> - since this is handled by code in fbmon.c. This can be done since monitors are - independent in behavior from video cards. First, we define our three basic data - structures. For all the data structures I defined them static and declare the - default values. The reason I do this is because it's less memory intensive than - to allocate a piece of memory and filling in the default values. Note that drivers - that support multihead (multiple video cards) of the same card, then the <i>fb_info </i> - should be dynamically allocated for each card present. For <i>fb_var_screeninfo</i> - and <i>fb_fix_screeninfo</i>, - they still are declared static since all the cards can be set to the same mode.</p> -<h3>4.3 Initialization and boot time - parameter handling</h3> -<p>There are two functions that handle - the video card at boot time:</p> -<blockquote> - <pre><i>int xxfb_init(void); -</i><i>int xxfb_setup(char*);</i></pre> -</blockquote> -<p>In the example driver as with most - drivers, these functions are placed at the end of the driver. Both are very - card specific. In order to link your driver directly into the kernel, both of - these functions must add the above definition with extern in front to fbmem.c. - Add these functions to the following in fbmem.c:</p> -<blockquote> - <pre><i>static struct { -</i><i> const char *name; +<p> +The third structure is <i>struct fb_monospecs</i>. In the old API, the +importance of <i>struct fb_monospecs</i> was very little. This allowed for +forbidden things such as setting a mode of 800x600 on a fix frequency monitor. +With the new API, <i>struct fb_monospecs</i> prevents such things. With DDC +it can even be expanded to support Plug-n-Play of monitors. This would lead +to preventing blank screens or worst fried montiors. +</p> + +<p> +The final data structure is <i>struct fb_info</i>. This defines the current +hardware independent state of the framebuffer of a graphics card. It is +possible that a graphics card has mulitple framebuffers. In this case that +device would have two <i>struct fb_info</i>.<i>Struct fb_info</i> is only +visible from the kernel. <i>Struct fb_info</i> is defined as: +</p> -</i><i> int (*init)(void); -</i><i> int (*setup)(char*);</i></pre> - <pre><i>} fb_drivers[] __initdata = { -</i><i>#ifdef CONFIG_FB_YOURCARD -</i><i> { "driver_name", xxxfb_init, xxxfb_setup }, -</i><i>#endif</i></pre> +<blockquote> +<pre> + <i>struct fb_info {</i> + <i> kdev_t node;</i> + <i> int flags;</i> + <i> int open;</i> + <i> struct fb_var_screeninfo var;</i> + <i> struct fb_fix_screeninfo fix;</i> + <i> struct fb_monspecs monspecs;</i> + <i> struct fbcursor cursor;</i> + <i> struct fb_cmap cmap;</i> + <i> struct fb_ops *fbops;</i> + <i> struct pm_dev *pm_fb;</i> + <i> char *screen_base;</i> + <i> wait_queue_head_t wait;</i> + <i> devfs_handle_t devfs_handle;</i> + <i> devfs_handle_t devfs_lhandle;</i> + <i> void *pseudo_palette;</i> + <i>#ifdef CONFIG_MTRR</i> + <i> int mtrr_handle;</i> + <i>#endif + <i> void *par;</i> + <i>}</i> +</pre> </blockquote> -<p>Setup is used to pass card specific - options from the boot prompt of your favorite boot loader. A good example is:</p> -<blockquote> + +there exist a <i>struct fb_ops</i> which is a collection of needed functions +to make fbdev work. +</p> + +<h3>4.2 Driver layout</h3> + +<p> +Here I describe a clean way to code your drivers. A good example of the basic +layout is vfb.c. In the example driver, we first present our data structures +in the beginning of the file. Note that there is no<i>struct fb_monospecs</i> +since this is handled by code in fbmon.c. This can be done since monitors are +independent in behavior from video cards. First, we define our three basic data +structures. For all the data structures I defined them static and declare the +default values. The reason I do this is because it's less memory intensive than +to allocate a piece of memory and filling in the default values. Note that +drivers can support multihead on the same card, then in that case we would +have multiple <i>struct fb_info </i>. If the device is hot pluggable then we +should dynamically allocated <i>struct fb_info </i> for each framebuffer +present on the graphics card present. For <i>struct fb_var_screeninfo</i> and +<i>struct fb_fix_screeninfo</i>, they still are declared static since all the +cards can be set to the same mode. +</p> + +<h3>4.3 Initialization and boot time parameter handling</h3> + +<p> +There are two functions that handle the video card at boot time: +</p> + +<blockquote> +<pre> + <i>int xxfb_init(void);</i> + <i>int xxfb_setup(char*);</i> +</pre> +</blockquote> + +<p> +In the example driver as with most drivers, these functions are placed at the +end of the driver. Both are very card specific. In order to link your driver +directly into the kernel, both of these functions must add the above functions +to fbmem.c similiar to what follows: +</p> + +<blockquote> +<pre> + <i>static struct {</i> + <i> const char *name;</i> + <i> int (*init)(void);</i> + <i> int (*setup)(char*);</i> +</pre> +<pre><i>} fb_drivers[] __initdata = {</i> + <i>#ifdef CONFIG_FB_YOURCARD</i> + <i> { "driver_name", xxxfb_init, xxxfb_setup },</i> + <i>#endif</i> +</pre> +</blockquote> + +<p> +Setup is used to pass card specific options from the boot prompt of your +favorite boot loader. A good example is: +</p> + +<blockquote> <p>boot: video=matrox: vesa: 443</p> </blockquote> + <p>The basic setup function is:</p> -<blockquote> - <pre><i>int __init xxxfb_setup(char *options) -</i><i>{ - </i><i>char *this_opt; + +<blockquote> +<pre> + <i>int __init xxxfb_setup(char *options)</i> + <i>{</i> + <i>char *this_opt;</i> + + <i>if (!options || !*options)</i> + <i>return 0;</i> + +</pre> +<pre> - </i><i>if (!options || !*options) - </i><i>return 0;</i></pre> - <pre><i> for (this_opt = strtok(options, ","); this_opt; + <i>for (this_opt = strtok(options, ","); this_opt; </i><i>this_opt = strtok(NULL, ","))</i></pre> <pre><i> if (!strcmp(this_opt, "my_option")) { - </i><i>/* Do your stuff. Usually set some static flags that the driver later uses */</i></pre> - <pre><i> } else if (!strncmp(this_opt, "Other_option:", 5)) + </i><i>/* Do your stuff. Usually set some static flags that the driver l <pre><i> } else if (!strncmp(this_opt, "Other_option:", 5)) </i><i>strcpy(some_flag_driver_uses, this_opt+5); </i><i>} else .... } </i><i>}</i></pre> -</blockquote> -<p>The <i>xxfb_init</i> function sets - the initial state of the video card. This function has to consider bus and platform - handling since today most cards can exist on many platforms. For bus types we - have to deal with, there are PCI, ISA, and zorro. Also, some platforms offer - firmware that returns information about the video card. In this case, we often - don't need to deal with the bus unless we need more control over the card. Let - us look at Open Firmware that’s available on PowerPCs. If you are going - to use Open Firmware to initialize your card, you need to add the following - to offb.c.</p> -<blockquote> - <pre><i>#ifdef CONFIG_FB_YOUR_CARD -</i><i>extern void xxxfb_of_init(struct device_node *dp); -</i><i>#endif /* CONFIG_FB_YOUR_CARD */</i></pre> - <pre><i>Then in the function offb_init_driver, you add something similar to the following:</i></pre> - <pre><i>#ifdef CONFIG_FB_YOUR_CARD -</i><i>if (!strncmp(dp->name,"Open Firmware number of your card ", size_of_name)) { - </i><i>xxxfb_of_init(dp); - </i><i>return 1; -</i><i>} -</i><i>#endif /* CONFIG_FB_YOUR_CARD */</i></pre> -</blockquote> -<p>If Open Firmware doesn't detect your - card, Open Firmware sets up a generic video mode for you. Now in your driver - you really need two initialization functions. </p> -<p>The next major part of the driver - is declaring the functions of <i>fb_ops</i> - that are declared in <i>fb_info</i> - for the driver. </p> -<p>The first two functions,<i> xxfb_open</i> - and <i>xxfb_release</i>, can - be called from both fbcon and fbdev. In fact, that's the use of the user flag. - If user equals zero then fbcon wants to access this device, else it's an explicit - open of the framebuffer device. This way, you can handle the framebuffer device - for the console in a special way for a particular video card. For most drivers, - this function just does a <i>MOD_INC_USE_COUNT</i> - or <i>MOD_DEC_USE_COUNT</i>.</p> -<p>These are the functions that are - at the heart of mode setting. There do exist a few cards that don't support - mode changing. For these we have this function return an -EINVAL to let the - user know he/she can't set the mode. Actually, set_var does more than just set - modes. It can check them as well. In <i>fb_var_screeninfo</i>, - there exists a flag called activate. This flag can take on the following values: - <i>FB_ACTIVATE_NOW</i>, <i>FB_ACTIVATE_NXTOPEN</i>, - and <i>FB_ACTIVATE_TEST</i>. - </p> -<p><i>FB_ACTIVATE_TEST</i> - tells us if the hardware can handle what the user requested. <i>FB_ACTIVATE_NXTOPEN</i> - sets the values wanted on the next explicit open of fbdev. The final one <i>FB_ACTIVATE_NOW</i> - checks the mode to see if it can be done and then sets the mode. You - MUST check the mode before all things. Note that this function is very card - specific, but I will attempt to give you the most general layout. The basic - layout then for xxxfb_set_var - is:</p> -<blockquote> - <pre><i>static int vfb_set_var(struct fb_var_screeninfo *var, struct fb_info *info) -</i><i>{ - int line_length;</i></pre> - <blockquote> - <pre><i>/* Basic setup test. Here we look at what the user passed in that he/she wants. - For example to test the fb_var_screeninfo field vmode like its done in vfb.c. - Here we see if the user has FB_VMODE_YWARP. Also we should look to see if - the user tried to pass in invalid values like 17 bpp (bits per pixel) */</i></pre> - <pre><i>/* Remember the above discussion on how monitors see a mode. They don't care - about bit depth. So you can divide the checking into two parts. One is to - see if the user changed a mode from say 640x480 at 8 bpp to 640x480 at 32 bpp. - Remember the var in fb_info represents the current video mode. Before we - actually change any resolutions we have to make sure the card has enough - memory for the new mode. Discovering how much memory a video card has varies - from card to card. Also finding out how much memory we have is done in - xxxfb_init since this never changes unless you add more memory to your card, - which requires a reboot of the machine anyway. You might have to do other - tests depending on make of your card. Note the par filed in fb_info. This - is used to store card specific data. This data can affect set_var. Also it - is present to allow other possible drivers that could effect the framebuffer - device such as a special driver for an accel engine or memory mapping the - Z buffer on a card */</i></pre> - <pre><i>/* Summary. First look at any var fields to see if they are valid. Next test - hardware with these fields without setting the hardware. An example of one - is to find what the line_length would be for the new mode. Then test the - following: */</i></pre> - </blockquote> - <pre><i> if ((line_length * var->yres_virtual) > info->fix.smem_len) - return -ENOMEM; </i></pre> - <pre><i> if (info->var.xres != var->xres || info->var.yres != var->yres || - info->var.xres_virtual != var->xres_virtual || - info->var.yres_vitual != var->yres_virtual) { +</blockquote> - /* Resolution changed !!! */ +<p>The <i>xxfb_init</i> function sets + the initial state of the video card. This function has to consider bus and pla handling since today most cards can exist on many platforms. For bus types we + have to deal with, there are PCI, ISA, and zorro. Also, some platforms offer + firmware that returns information about the video card. In this case, we often don't need to deal with the bus unless we need more control over the card. Let us look at Open Firmware that’s available on PowerPCs. +</p> - /* Next you must check to see if the monitor can handle this mode. Don't - want to fry your monitor or mess up the display really badly */</i></pre> - <pre><i> if (fbmon_valid_timings(u_int pixclock, u_int htotal, u_int vtotal, - const struct fb_info *fb_info)) - </i><i> /* Can't handle these timings. */ - </i><i>return -EINVAL;</i></pre> - <blockquote> - <pre><i> /* Timings are okay. Next we see if we really want to change this mode */ - </i><i>if ((activate & FB_ACTIVATE_MASK) == FB_ACTIVATE_NOW) { +<p> +The next major part of the driver +is declaring the functions of <i>fb_ops</i> +that are declared in <i>fb_info</i> +for the driver. +</p> - </i><i>/* Now lets program the clocks on this card. Here the code is - very card specific. Remember to change any fields for fix in - info that might be affected by the changing of the resolution. */ - </i><i>info->fix.line_length = line_length;</i></pre> - </blockquote> - <blockquote> - <pre><i> /* Now that we have dealt with the possible changing resolutions lets - handle a possible change of bit depth. */ - </i><i>if (info->var.bits_per_pixel != var->bits_per_pixel) { - </i><i>if ((err = fb_alloc_cmap(&info->cmap, 0, 0))) - </i><i>return err; - </i><i>} - </i><i>}</i></pre> - </blockquote> - <blockquote> - <pre><i> /* We have shown that the monitor and video card can handle this mode or - have actually set the mode. Next the fb_bitfield structure in - fb_var_screeninfo is filled in. Even if you don't set the mode you get - a feel of the mode before you really set it. These are typical values - but may be different for your card. For truecolor modes all the fields - matter. For pseudocolor modes only the length matters. Thus all the - lengths should be the same (=bpp). */ - </i><i>switch (var->bits_per_pixel) { - </i><i>case 1: - </i><i>case 7: - </i><i> /* Pseudocolor mode example */ - </i><i> var->red.offset = 0; - </i><i> var->red.length = 8; -</i><i> var->green.offset = 0; -</i><i> var->green.length = 8; -</i><i> var->blue.offset = 0; -</i><i> var->blue.length = 8; -</i><i> var->transp.offset = 0; -</i><i> var->transp.length = 0; -</i><i> break; - </i><i>case 16: /* RGB 565 */ - </i><i>var->red.offset = 0; - </i><i> var->red.length = 5; - </i><i> var->green.offset = 5; - </i><i> var->green.length = 6; - </i><i> var->blue.offset = 11; - </i><i> var->blue.length = 5; - </i><i> var->transp.offset = 0; - </i><i> var->transp.length = 0; - </i><i> break; - </i><i>case 24: /* RGB 888 */ - </i><i> var->red.offset = 0; - </i><i> var->red.length = 8; - </i><i> var->green.offset = 8; - </i><i> var->green.length = 8; - </i><i> var->blue.offset = 16; - </i><i> var->blue.length = 8; - </i><i> var->transp.offset = 0; - </i><i> var->transp.length = 0; - </i><i> break; - </i><i>case 32: /* RGBA 8888 */ - </i><i> var->red.offset = 0; - </i><i> var->red.length = 8; - </i><i> var->green.offset = 8; - </i><i> var->green.length = 8; - </i><i> var->blue.offset = 16; - </i><i> var->blue.length = 8; - </i><i> var->transp.offset = 24; - </i><i> var->transp.length = 8; - </i><i> break; - </i><i>} - </i><i>/* Yeah. We are done !!! */ -</i><i>}</i></pre> - </blockquote> -</blockquote> -<p>The function <i>xxxfb_setcolreg</i> - is used to set a single color register for a video card. To use this properly, - you must understand colors, which is described above. This routine sets a color - map entry. The regno passed into the routine represents the color map index - which is equal to the color that’s composed of the amount of red, green, - blue, and even alpha that are also passed into the function. For pseudocolor - modes, this color map index (regno) represents the pixel value. So if you place - a pixel value of regno in video memory, you get the color that’s made of - the red, green, blue that you passed into <i>xxxfb_setcolreg</i>. - Now for truecolor and directcolor mode, it’s a little different. In this - case, we simulate a pseudo color map. The reason for this is the console system - always has a color map, which has 16 entries. In - <i>fb_info</i>, there exist the pseudo_palette, which gives a mapping - from a non-color map mode to a color map based system. The pseudo_palette always - has 17 entries. The first 16 is for the console colors and the last one for - the cursor. So if we wanted to display the 4 entry in the color map of the console, - we would place the value of info->psuedo_palette[4] directly into the video - memory. This is, of course, taken care of by fbcon. You just need to code the - "formula" that does this translation. An example follows for 32-bit - mode:</p> -<blockquote> - <pre><i>red >>= 8; -</i><i>green >>= 8; -</i><i>blue >>= 8;</i></pre> - <pre><i>info->pseudo_palette[regno] = -</i><i> (red << info->var.red.offset) | -</i><i> (green << info->var.green.offset) | -</i><i> (blue << info->var.blue.offset);</i></pre> -</blockquote> -<p>Here, we first scale down the color - components. Each color passed to set_colreg is 16 bits in size. For 32-bit mode, - each color is 8 bits in size. Next, we OR the colors together after we have - offseted them. The offset is used because the pixel layout in 32 bits could - be RBGA, ARGBA, etc. In setcol_reg of vfb.c, is the standard way to deal with - packed pixel format of various image depths. Regno is the index to get this - particular color.</p> -<p>That does it for required functions - besides the set of needed accel functions, which has not been discussed yet. - If the video card doesn't support the function, then we just place a NULL in - <i>fb_ops</i>. The next function - in <i>fb_ops</i> is <i>xxxfb_blank</i>. - This function provides support for hardware blanking. For <i>xxxfb_blank</i>, - the first parameter represents the blanking modes available. They are <i>VESA_NO_BLANKING</i>, - <i>VESA_VSYNC_SUSPEND</i>, <i>VESA_HSYNC_SUSPEND</i>, - and <i>VESA_POWERDOWN</i>. <i>VESA_NO_BLANKING</i> - powers up the display again. <i>VESA_POWERDOWN</i> - turns off the display. This is a great power saving feature on a laptop. </p> -<p>The next optional function is <i>xxxfb_pan_display</i>. - This function enables panning. Panning is often used for scrolling. </p> -<p>The ioctl function gives you the - power to take advantage of special features other cards don't have. If your - card is nothing special then just give this<i> fb_ops</i> - function a NULL pointer. The sky is the limit for defining your ioctl calls.</p> -<p>There exists a default memory map - function for fbdev, but sometimes it just doesn't have the power you truly need. - A good example of this is video cards that work in sparc workstations that need - their own mmap functions because of the way sparcs handle memory is different - from other platforms. This is true even for sparcs with PCI buses. </p> -<p>Now here is the next class of functions - that are optional -- <i>xxxfb_accel_init - </i>and <i>xxfb_accel_done</i>. - <i>xxxfb_accel_init</i> really - depends on the card. It is intended to initialize the engine or set the accel - engine into a state so that you can use the acceleration engine. It also ensures - that the framebuffer is not accessed at the same time as the accel engine. This - can lock a system. Usually, there exists a bit to test to see if an accel engine - is idle or if the card generates an interrupt. For cards that used the old fb_rasterimg, - this function replaces it. Some cards have separate states for 3D and 2D. This - function insures that the card goes into a 2D state. Just in case a previous - application set the accel engine into a 3D state or made the accel engine very - unhappy. The next function that encompasses this set is <i>xxxfb_accel_done</i>. - This function sets the video card in a state such that you can write to the - framebuffer again. You should provide both functions if your driver uses even - one hardware accelerated function. The reason being is to ensure that the framebuffer - is not accessed at the same time as the accel engine.</p> -<p>Finally, the third class of fb_op - functions. Like the first, they are required. If your card does not support - any of these accelerated functions, there exist default functions for packed - pixel framebuffer formats. They are <i>cfba_fillrect</i>, - <i>cfba_copyarea</i>, and <i>cfba_imgblit</i>. - If your driver supports some but not all of the accels available, you can still - use some of these software emulated accels. Each software-emulated accel is - stored in a separate file. Now lets describe each accel function. Before we - discuss these functions we need to note not to draw in areas pass the video - boundaries. If it does, you need to adjust the width and height of the areas - to avoid this problem.</p> -<p>The first function just fills in - a rectangle starting at x1 and y1 of some width and height with a pixel value - of packed pixel format. If the video memory mapping is not a direct mapping - from the pixel value (not <i>FB_TYPE_PACKED_PIXEL</i>), - you will have to do some translating. There are two ways to fill in the rectangle, - <i>FBA_ROP_COPY</i> and <i>FBA_ROP_XOR. - FBA_ROP_XOR</i> exclusive ORs - the pixel value with the current pixel value. This allows things like quickly - erasing a rectangular area. The other function just directly copies the data.</p> -<p>The next function is <i>xxxfb_copyarea</i>. - It just copies one area of the framebuffer at source x and source y of some - width and height to some destination x and y.</p> -<p>The final function is <i>xxxfb_imageblt</i>. - This function copies an image from system memory to video memory. You can get - really fancy here but this is fbdev, which has the purpose of mode setting only. - All the image blit function does is draw bitmaps, image made of a foreground - and background color, and a color image of the same color depth as the framebuffer. - The second part is used to draw the little penguins. The drawing of bitmaps - is used to draw our fonts.</p> -<p>That does it for the functions. Now - you should be set for writing your driver.</p> + <p align="center"><a href="index.html">index</a> - <a href="3.html">back</a></p> +<a href="3.html">back</a></p> </body> </html> Index: index.html =================================================================== RCS file: /cvsroot/linuxconsole/ruby/web/htdocs/fbdev/HOWTO/index.html,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- index.html 2001/11/04 00:47:05 1.2 +++ index.html 2001/11/04 19:00:58 1.3 @@ -1,6 +1,6 @@ <html> <head> -<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1"> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <title>Linux Framebuffer Driver Writing HOWTO</title> </head> <body link=blue vlink=purple bgcolor="#ffffff"> @@ -30,11 +30,11 @@ 1.5 Distribution Policy</p> </blockquote> -<h3>2. <a href="2.html">Framebuffer Video Card Technology</a></h3> +<h3>2. <a href="2.html">Framebuffer Graphics Card Technology</a></h3> <blockquote> <p>2.1 Monitor<br> - 2.2 Video Card</p> + 2.2 Graphics Card</p> </blockquote> <h3>3. <a href="3.html">Setting a Video Mode</a></h3> |
From: James S. <jsi...@us...> - 2001-11-04 19:01:00
|
Update of /cvsroot/linuxconsole/ruby/web/htdocs In directory usw-pr-cvs1:/tmp/cvs-serv18248 Modified Files: index.html Log Message: More updates to web site. Index: index.html =================================================================== RCS file: /cvsroot/linuxconsole/ruby/web/htdocs/index.html,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- index.html 2001/11/04 00:47:05 1.4 +++ index.html 2001/11/04 19:00:57 1.5 @@ -59,13 +59,13 @@ to use framebuffer devices without a VT. <li> The console system input system is based solely on the input api. This allows for things like a universal keymap. No more compiling in new - keymaps for every type of different keybaords out their. Plus with this + keymaps for every type of different keyboards out there. Plus with this design it is possible to use a keyboard without the console system. <li> New serial API. The serial layer is more like the parport layer now. Having to using the TTY layer for something like a serial mouse is plain silly. The idea is to create a basic serial API and register - device interfaces. For a modem youwould want to register a TTY interface - whereas for a serial mouse or joystick we woudl want to register a + device interfaces. For a modem you would want to register a TTY interface + whereas for a serial mouse or joystick we would want to register a interface for the input api. <li> Support for hot plug. We can add or remove graphics cards or even keyboards to create new desktop VTs. |
From: johann d. <jd...@us...> - 2001-11-04 14:44:36
|
Update of /cvsroot/linuxconsole/ruby/linux/Documentation/input In directory usw-pr-cvs1:/tmp/cvs-serv29027 Modified Files: ff.txt Added Files: interactive.fig shape.fig Log Message: Added two figures to describe parameters of effects. --- NEW FILE: interactive.fig --- #FIG 3.2 Landscape Center Inches Letter 100.00 Single -2 1200 2 2 1 0 2 0 7 50 0 -1 6.000 0 0 -1 0 0 6 1200 3600 1800 3600 2400 4800 3000 4800 4200 5700 4800 5700 2 2 0 1 0 7 50 0 -1 4.000 0 0 -1 0 0 5 1200 3150 4800 3150 4800 6300 1200 6300 1200 3150 2 1 0 1 0 7 50 0 -1 4.000 0 0 -1 0 0 2 1200 4800 4800 4800 2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 4 2400 4800 2400 6525 1950 7125 1950 7800 2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 4 3000 4800 3000 6525 3600 7125 3600 7800 2 1 0 1 0 7 50 0 -1 4.000 0 0 -1 0 1 3 0 0 1.00 60.00 120.00 3825 5400 4125 5100 5400 5100 2 1 0 1 0 7 50 0 -1 4.000 0 0 -1 0 1 3 0 0 1.00 60.00 120.00 2100 4200 2400 3900 5400 3900 2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 2 4800 5700 5400 5700 2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 2 1800 3600 5400 3600 2 1 0 1 0 7 50 0 -1 4.000 0 0 -1 0 1 3 0 0 1.00 60.00 120.00 2700 4800 2700 4425 5400 4425 2 1 0 1 0 7 50 0 -1 4.000 0 0 -1 1 1 2 0 0 1.00 60.00 120.00 0 0 1.00 60.00 120.00 1950 7800 3600 7800 4 1 0 50 0 0 12 0.0000 4 135 810 2775 7725 Dead band\001 4 0 0 50 0 0 12 0.0000 4 180 1155 5400 5700 right saturation\001 4 0 0 50 0 0 12 0.0000 4 135 1065 5400 3600 left saturation\001 4 0 0 50 0 0 12 0.0000 4 180 2505 5400 3900 left coeff ( positive in that case )\001 4 0 0 50 0 0 12 0.0000 4 180 2640 5475 5100 right coeff ( negative in that case )\001 4 0 0 50 0 0 12 0.0000 4 105 480 5400 4425 center\001 --- NEW FILE: shape.fig --- #FIG 3.2 Landscape Center Inches Letter 100.00 Single -2 1200 2 2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 6 4200 3600 4200 3075 4950 2325 7425 2325 8250 3150 8250 3600 2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 2 4200 3675 4200 5400 2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 2 8250 3675 8250 5400 2 1 0 1 0 7 50 0 -1 4.000 0 0 -1 0 0 2 3675 3600 8700 3600 2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 2 8775 3600 10200 3600 2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 2 8325 3150 9075 3150 2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 2 7500 2325 10200 2325 2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 2 3600 3600 3000 3600 2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 2 4125 3075 3000 3075 2 1 0 1 0 7 50 0 -1 4.000 0 0 -1 1 1 2 0 0 1.00 60.00 120.00 0 0 1.00 60.00 120.00 4200 5400 8175 5400 2 1 0 1 0 7 50 0 -1 4.000 0 0 -1 1 1 2 0 0 1.00 60.00 120.00 0 0 1.00 60.00 120.00 10125 2325 10125 3600 2 1 0 1 0 7 50 0 -1 4.000 0 0 -1 1 1 2 0 0 1.00 60.00 120.00 0 0 1.00 60.00 120.00 3000 3150 3000 3600 2 1 0 1 0 7 50 0 -1 4.000 0 0 -1 1 1 2 0 0 1.00 60.00 120.00 0 0 1.00 60.00 120.00 9075 3150 9075 3600 2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 2 4950 2325 4950 1200 2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 2 7425 2325 7425 1200 2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 4 4200 3075 4200 2400 3600 1800 3600 1200 2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 4 8250 3150 8250 2475 8775 1950 8775 1200 2 1 0 1 0 7 50 0 -1 4.000 0 0 -1 1 1 2 0 0 1.00 60.00 120.00 0 0 1.00 60.00 120.00 3600 1275 4950 1275 2 1 0 1 0 7 50 0 -1 4.000 0 0 -1 1 1 2 0 0 1.00 60.00 120.00 0 0 1.00 60.00 120.00 7425 1275 8700 1275 4 1 0 50 0 0 12 0.0000 4 135 1140 6075 5325 Effect duration\001 4 0 0 50 0 0 12 0.0000 4 180 1305 10200 3000 Effect magnitude\001 4 0 0 50 0 0 12 0.0000 4 135 780 9150 3450 Fade level\001 4 1 0 50 0 0 12 0.0000 4 180 1035 4275 1200 Attack length\001 4 1 0 50 0 0 12 0.0000 4 180 885 8175 1200 Fade length\001 4 2 0 50 0 0 12 0.0000 4 135 930 2925 3375 Attack level\001 Index: ff.txt =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/Documentation/input/ff.txt,v retrieving revision 1.9 retrieving revision 1.10 diff -u -d -r1.9 -r1.10 --- ff.txt 2001/10/16 21:05:57 1.9 +++ ff.txt 2001/11/04 14:44:32 1.10 @@ -1,6 +1,7 @@ Force feedback for Linux. By Johann Deneux <de...@if...> on 2001/04/22. - +You can redistribute this file, provided you include shape.fig and +interactive.fig. ---------------------------------------------------------------------------- 0. Introduction @@ -118,7 +119,9 @@ some operations (removing an effect, controlling the playback). This if field must be set to -1 by the user in order to tell the driver to allocate a new effect. -See <linux/input.h> for a description of the ff_effect stuct. +See <linux/input.h> for a description of the ff_effect stuct. You should also +find help in a few sketches, contained in files shape.fig and interactive.fig. +You need xfig to visualize these files. 3.3 Removing an effect from the device ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -195,9 +198,11 @@ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Proceed as if you wanted to upload a new effect, except that instead of setting the id field to -1, you set it to the wanted effect id. -If you update very often, some device may stop playing effects. The driver -checks that, and re-start the updated effect if necessary. However, this -prevents effects from being palyed smoothly. +Normally, the effect is not stopped and restarted. However, depending on the +type of device, not all paramaters can be dynamically updated. For example, +the direction of an effect cannot be updated with iforce devices. In this +case, the driver stops the effect, up-load it, and restart it. + 3.8 Information about the status of effects ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
From: James S. <jsi...@us...> - 2001-11-04 00:47:08
|
Update of /cvsroot/linuxconsole/ruby/web/htdocs/fbdev/HOWTO In directory usw-pr-cvs1:/tmp/cvs-serv22898/htdocs/fbdev/HOWTO Modified Files: 1.html 2.html 3.html 4.html index.html Log Message: Cleanup of fbdev docs. Needs still to be updated. Index: 1.html =================================================================== RCS file: /cvsroot/linuxconsole/ruby/web/htdocs/fbdev/HOWTO/1.html,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- 1.html 2001/11/03 00:23:59 1.1 +++ 1.html 2001/11/04 00:47:05 1.2 @@ -5,80 +5,122 @@ </head> <body bgcolor="#FFFFFF"> -<h2><font face="Arial, Helvetica, sans-serif">1. Introduction</font></h2> +<h2>1. Introduction</h2> <hr width="100%" size="2"> -<p><font face="Arial, Helvetica, sans-serif">This is the Linux Framebuffer driver - HOWTO. It is intended as a quick reference covering everything you need to know - to write a framebuffer video driver under Linux. Frequently asked questions - about video mode setting under Linux are answered, and references are given - to some other sources of information on a variety of topics related to computer - graphics. Also, read this document not once, not twice but three times if you - are not familiar with video hardware.</font></p> -<p><font face="Arial, Helvetica, sans-serif">The scope is limited to the aspects - of writing a mode setting video card framebuffer driver pertaining to Linux. - listed See the other documents in the References section for more general information - on how to setup framebuffer cards and setting up the XFB_Dev X server.</font></p> -<h3><font face="Arial, Helvetica, sans-serif">1.1. Acknowledgments</font></h3> -<p><font face="Arial, Helvetica, sans-serif">Much of this information came from - the new framebuffer internal API being developed by me for the upcoming next - series of kernels. Originally, this was based on a patch by Fabrice Bellard. - I learned of this patch and was impressed by it. Later, I took over development - and improved it even more. Much thanks goes to Fabrice for getting the ball - rolling. This API is a natural extension of the original API developed by Martin - Schaller and now maintained by Geert Uytterhoeven (<a href="mailto:ge...@li...">ge...@li...</a>). - Thanks go to you and the many others who developed the Linux framebuffer system, - drivers and utilities. A great amount of thanks goes to Andreas Beck of the - GGI project for helping me write this document and teaching me about mode setting. - Thanks also go out to those who have supported my work. </font></p> -<p><font face="Arial, Helvetica, sans-serif">Thanks to the SGML Tools package, - this HOWTO is available in several formats, all generated from a common source - file.</font></p> -<h3><font face="Arial, Helvetica, sans-serif">1.2. Revision History</font></h3> -<p><font face="Arial, Helvetica, sans-serif">Version 1.0</font></p> -<p><font face="Arial, Helvetica, sans-serif">First version; posted to fbdev mailing - list only.</font></p> -<h3><font face="Arial, Helvetica, sans-serif">1.3. New versions of this document</font></h3> -<p><font face="Arial, Helvetica, sans-serif">New versions of this document will - be periodically posted to the comp.os.linux.answers newsgroup. They will also - be uploaded to various anonymous ftp sites that archive such information including - <a href="ftp://metalabs.unc.edu/pub/Linux/docs/HOWTO/">ftp://metalabs.unc.edu/pub/Linux/docs/HOWTO/</a>>. - Hypertext versions of this and other Linux HOWTOs are available on many World-Wide-Web - sites, including <<a href="http://metalab.unc.edu/LDP/">http://metalab.unc.edu/LDP/</a>>. - Most Linux CD-ROM distributions include the HOWTOs, often under the /usr/doc - directory, and you can also buy printed copies from several vendors. Sometimes - the HOWTOs available from CD-ROM vendors, ftp sites, and printed format are - out of date. If the date on this HOWTO is more than six months in the past, - then a newer copy is probably available on the Internet.</font></p> -<p><font face="Arial, Helvetica, sans-serif">Most translations of this and other - Linux HOWTOs can also be found at <<a + +<p> +This is the Linux Framebuffer driver HOWTO. It is intended as a quick reference +covering everything you need to know to write a framebuffer video driver under +Linux. Frequently asked questions about video mode setting under Linux are +answered, and references are given +to some other sources of information on a variety of topics related to computer +graphics. Also, read this document not once, not twice but three times if you +are not familiar with video hardware. +</p> + +<p> +The scope is limited to the aspects +of writing a mode setting video card framebuffer driver pertaining to Linux. +listed See the other documents in the References section for more general information +on how to setup framebuffer cards and setting up the XFB_Dev X server. +</p> + +<h3>1.1. Acknowledgments</h3> + +<p> +Much of this information came from +the new framebuffer internal API being developed by me for the upcoming next +series of kernels. Originally, this was based on a patch by Fabrice Bellard. +I learned of this patch and was impressed by it. Later, I took over development +and improved it even more. Much thanks goes to Fabrice for getting the ball +rolling. This API is a natural extension of the original API developed by Martin +Schaller and now maintained by Geert Uytterhoeven (<a href="mailto:ge...@li...">ge...@li...</a>). +Thanks go to you and the many others who developed the Linux framebuffer system, +drivers and utilities. A great amount of thanks goes to Andreas Beck of the +GGI project for helping me write this document and teaching me about mode setting. +Thanks also go out to those who have supported my work. +</p> + +<p> +Thanks to the SGML Tools package, +this HOWTO is available in several formats, all generated from a common source +file. +</p> + +<h3>1.2. Revision History</h3> + +<p>Version 1.0</p> +<p>First version; posted to fbdev mailing list only.</p> +<p>Version 1.1</p> +<p>Updated version; placed into CVS.Updated to reflect new purposed designs in + the framebuffer api</p> + +<h3>1.3. New versions of this document</h3> + +<p> +New versions of this document will +be periodically posted to the comp.os.linux.answers newsgroup. They will also +be uploaded to various anonymous ftp sites that archive such information including +<a href="ftp://metalabs.unc.edu/pub/Linux/docs/HOWTO/">ftp://metalabs.unc.edu/pub/Linux/docs/HOWTO/</a>>. +Hypertext versions of this and other Linux HOWTOs are available on many World-Wide-Web +sites, including <<a href="http://metalab.unc.edu/LDP/">http://metalab.unc.edu/LDP/</a>>. +Most Linux CD-ROM distributions include the HOWTOs, often under the /usr/doc +directory, and you can also buy printed copies from several vendors. Sometimes +the HOWTOs available from CD-ROM vendors, ftp sites, and printed format are +out of date. If the date on this HOWTO is more than six months in the past, +then a newer copy is probably available on the Internet. +</p> + +<p> +Most translations of this and other +Linux HOWTOs can also be found at <<a href="http://sunsite.unc.edu/pub/Linux/docs/HOWTO/translations/">http://sunsite.unc.edu/pub/Linux/docs/HOWTO/translations/</a>> - and <<a href="ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/translations/">ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/translations/</a>>.</font></p> -<p><font face="Arial, Helvetica, sans-serif">If you make a translation of this - document into another language, let me know and I'll include a reference to - it here. As of yet there are no translations.</font></p> -<h3><font face="Arial, Helvetica, sans-serif">1.4. Feedback</font></h3> -<p><font face="Arial, Helvetica, sans-serif">I rely on you, the reader, to make - this HOWTO useful. If you have any suggestions, corrections, or comments, please + and <<a href="ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/translations/">ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/translations/</a>>. +</p> + +<p> +If you make a translation of this +document into another language, let me know and I'll include a reference to +it here. As of yet there are no translations. +</p> + +<h3>1.4. Feedback</h3> + +<p> +I rely on you, the reader, to make +this HOWTO useful. If you have any suggestions, corrections, or comments, please send them to me, <<a -href="mailto:jsi...@ac...">jsi...@ac...</a>>, and - I will try to incorporate them in the next revision.</font></p> -<p><font face="Arial, Helvetica, sans-serif">I am also willing to answer general - questions on video cards and fbcon under Linux as best I can. Before doing so, - please read all of the information in this HOWTO and send me detailed information - about the problem. Please do not ask me about using framebuffer cards under - operating systems other than Linux.</font></p> -<p><font face="Arial, Helvetica, sans-serif">If you publish this document on a - CD-ROM or in hardcopy form, a complimentary copy would be appreciated. Mail - me for my postal address. Also, consider making a donation to the Linux Documentation - Project to help support free documentation for Linux. Contact the Linux HOWTO - coordinator, Tim Bynum <<a +href="mailto:jsi...@tr...">jsi...@tr...</a>>, and + I will try to incorporate them in the next revision. +</p> + +<p> +I am also willing to answer general +questions on video cards and fbcon under Linux as best I can. Before doing so, +please read all of the information in this HOWTO and send me detailed information +about the problem. Please do not ask me about using framebuffer cards under +operating systems other than Linux. +</p> + +<p> +If you publish this document on a +CD-ROM or in hardcopy form, a complimentary copy would be appreciated. Mail +me for my postal address. Also, consider making a donation to the Linux Documentation +Project to help support free documentation for Linux. Contact the Linux HOWTO +coordinator, Tim Bynum <<a href="mailto:lin...@su...">lin...@su...</a>>, - for more information.</font></p> -<h3><font face="Arial, Helvetica, sans-serif">1.5. Distribution Policy</font></h3> -<p><font face="Arial, Helvetica, sans-serif">Copyright (c) 1999 by James Simmons. - This document may be distributed under the terms set forth in the LDP license - at <<a href="http://sunsite.unc.edu/LDP/COPYRIGHT.html">http://sunsite.unc.edu/LDP/COPYRIGHT.html</a>>.</font></p> -<p align="center"><font face="Arial, Helvetica, sans-serif"><a href="index.html">index</a> - <a href="2.html">forward</a></font></p> + for more information. +</p> + +<h3>1.5. Distribution Policy</h3> + +<p> +Copyright (c) 2001 by James Simmons. +This document may be distributed under the terms set forth in the LDP license +at <<a href="http://sunsite.unc.edu/LDP/COPYRIGHT.html">http://sunsite.unc.edu/LDP/COPYRIGHT.html</a>>. +</p> + +<p align="center"><a href="index.html">index</a> +<a href="2.html">forward</a></p> </body> </html> Index: 2.html =================================================================== RCS file: /cvsroot/linuxconsole/ruby/web/htdocs/fbdev/HOWTO/2.html,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- 2.html 2001/11/03 00:23:59 1.1 +++ 2.html 2001/11/04 00:47:05 1.2 @@ -5,186 +5,251 @@ </head> <body bgcolor="#FFFFFF"> -<h2><font face="Arial, Helvetica, sans-serif">2. Framebuffer Card Technology</font></h2> +<h2>2. Framebuffer Card Technology</h2> <hr width="100%" size="2"> -<p><font face="Arial, Helvetica, sans-serif">This section gives a very cursory + +<p> + This section gives a very cursory overview of graphics cards that have accessible framebuffer technology, in order to help you understand the concepts used later in the document. If you are considering writing a driver for a video card please contact the manufacturer for documentation - on the card. Also, please consider reading some books on video hardware in order - to learn more. </font></p> -<p><font face="Arial, Helvetica, sans-serif">The way framebuffer devices behave + on the card. Also, please consider reading some books on video hardware in order to learn more. +</p> + +<p> +The way framebuffer devices behave under Linux is something very similar to /dev/mem. /dev/fb is in fact viewed as a memory device, except in this case the memory is video ram and is mmaped to userspace for direct access. This model is, of course, simplified for the purpose of making programming the frame buffer much easier as well as making it device and platform independent. Since we are interested in building a driver, - we need to understand how exactly the video card itself works.</font></p> -<h3><font face="Arial, Helvetica, sans-serif">2.1 Monitor</font></h3> -<p><font face="Arial, Helvetica, sans-serif">First, lets describe one of the biggest - but often overlooked components: the monitor. Today, there exist many types - of monitors. Flat screen to LED and so on. For all the many types, the basic - principle behind the monitor is the same. Basically, a monitor builds an image - sequentially from the data it gets on its input lines. To achieve this, a beam - scans over the screen in a kind of "zig-zag" pattern that covers the - whole visible part of the screen once per frame. It happens so fast the eye - can't see this happening (well, we hope). So which way does this beam go? All - monitors have chosen to always go left to right with a quick jump back to the - far left when we hit the right boundary of the monitor. Same goes for the top - to bottom approach, but at a much slower pace since most of our time is used - to move left to right for every single line. Obviously, the displayed data needs - to be synchronized with the current position of the beam to be able to build - a steady picture. This is what those HSYNC and VSYNC you see in your monitor - manual are for. These two lines that say, "hey move the beam to the left - now" and "move the ray to the top now". Some systems encode this - information. For example, the green channel, which is called sync on green, - but that doesn't change the principle. All a monitor knows about a mode is what - it gets that's contained in the frequencies with which those signals return. - These frequencies are called the horizontal and vertical frequencies (aka refresh - rate), as they determine how often per second a whole image is drawn. A monitor - knows nothing about depth, clocks, and borders. If two modes have the same frequencies, - they will be the same to the monitor. This is why different centering data for - e.g. 640x480x16 and 640x480x32 are not stored in the monitor. The monitor can't - distinguish between those modes. Between two HSYNC we get the RGB signals.</font></p> + we need to understand how exactly the video card itself works. +</p> + +<h3>2.1 Monitor</font></h3> + +<p> +First, lets describe one of the biggest +but often overlooked components: the monitor. Today, there exist many types +of monitors. Flat screen to LED and so on. For all the many types, the basic +principle behind the monitor is the same. Basically, a monitor builds an image +sequentially from the data it gets on its input lines. To achieve this, a beam +scans over the screen in a kind of "zig-zag" pattern that covers the +whole visible part of the screen once per frame. It happens so fast the eye +can't see this happening (well, we hope). So which way does this beam go? All +monitors have chosen to always go left to right with a quick jump back to the +far left when we hit the right boundary of the monitor. Same goes for the top +to bottom approach, but at a much slower pace since most of our time is used +to move left to right for every single line. Obviously, the displayed data needs +to be synchronized with the current position of the beam to be able to build +a steady picture. This is what those HSYNC and VSYNC you see in your monitor +manual are for. These two lines that say, "hey move the beam to the left +now" and "move the ray to the top now". Some systems encode this +information. For example, the green channel, which is called sync on green, +but that doesn't change the principle. All a monitor knows about a mode is what +it gets that's contained in the frequencies with which those signals return. +These frequencies are called the horizontal and vertical frequencies (aka refresh + rate), as they determine how often per second a whole image is drawn. A monitor +knows nothing about depth, clocks, and borders. If two modes have the same frequencies, +they will be the same to the monitor. This is why different centering data for +e.g. 640x480x16 and 640x480x32 are not stored in the monitor. The monitor can't +distinguish between those modes. Between two HSYNC we get the RGB signals.</p> <table width="90%" border="0" cellspacing="0" cellpadding="0" align="center"> <tr> - <td width="15%"><font face="Arial, Helvetica, sans-serif">HSYNC</font></td> + <td width="15%">HSYNC</td> <td width="2%"> </td> - <td width="2%"><font face="Arial, Helvetica, sans-serif">/</font></td> - <td width="2%"><font face="Arial, Helvetica, sans-serif">-</font></td> - <td width="2%"><font face="Arial, Helvetica, sans-serif">\</font></td> + <td width="2%">/</td> + <td width="2%">-</td> + <td width="2%">\</td> <td width="0%"> </td> <td colspan="10"> <hr width="100%" size="2"> </td> <td width="0%"> </td> - <td width="2%"><font face="Arial, Helvetica, sans-serif">/</font></td> - <td width="0%"><font face="Arial, Helvetica, sans-serif">--</font></td> - <td width="5%"><font face="Arial, Helvetica, sans-serif">\</font></td> + <td width="2%">/</td> + <td width="0%">--</td> + <td width="5%">\</td> </tr> <tr> - <td width="15%"><font face="Arial, Helvetica, sans-serif">RGB</font></td> + <td width="15%">RGB</td> <td width="2%"> </td> <td width="2%"> </td> <td width="2%"> </td> - <td width="2%"><font face="Arial, Helvetica, sans-serif">data</font></td> + <td width="2%">data</td> <td width="0%"> </td> - <td width="7%"><font face="Arial, Helvetica, sans-serif">data</font></td> - <td width="7%"><font face="Arial, Helvetica, sans-serif">data</font></td> - <td width="7%"><font face="Arial, Helvetica, sans-serif">data</font></td> - <td width="7%"><font face="Arial, Helvetica, sans-serif">data</font></td> - <td width="7%"><font face="Arial, Helvetica, sans-serif">data</font></td> - <td width="7%"><font face="Arial, Helvetica, sans-serif">data</font></td> - <td width="7%"><font face="Arial, Helvetica, sans-serif">data</font></td> - <td width="7%"><font face="Arial, Helvetica, sans-serif">data</font></td> - <td width="7%"><font face="Arial, Helvetica, sans-serif">data</font></td> - <td width="7%"><font face="Arial, Helvetica, sans-serif">data</font></td> + <td width="7%">data</td> + <td width="7%">data</td> + <td width="7%">data</td> + <td width="7%">data</td> + <td width="7%">data</td> + <td width="7%">data</td> + <td width="7%">data</td> + <td width="7%">data</td> + <td width="7%">data</td> + <td width="7%">data</td> <td width="0%"> </td> - <td width="2%"><font face="Arial, Helvetica, sans-serif">data</font></td> + <td width="2%">data</td> <td width="0%"> </td> <td width="5%"> </td> </tr> <tr> - <td width="15%"><font face="Arial, Helvetica, sans-serif">time</font></td> - <td width="2%"><font face="Arial, Helvetica, sans-serif">1</font></td> - <td width="2%"><font face="Arial, Helvetica, sans-serif">2</font></td> + <td width="15%">time</td> + <td width="2%">1</td> + <td width="2%">2</td> <td width="2%"> </td> - <td width="2%"><font face="Arial, Helvetica, sans-serif">3</font></td> + <td width="2%">3</td> <td width="0%"> </td> <td colspan="10"> <hr width="100%" size="2"> </td> <td width="0%"> </td> - <td width="2%"><font face="Arial, Helvetica, sans-serif">4</font></td> + <td width="2%">4</td> <td width="0%"> </td> - <td width="5%"><font face="Arial, Helvetica, sans-serif">5</font></td> + <td width="5%">5</td> </tr> </table> -<p><font face="Arial, Helvetica, sans-serif">At 1, the HSYNC pulse gets raised. - The beam will now quickly move to the left. During that time, the RGB lines - should be black (ray off), otherwise it would leave a noticeable trace while - moving, which would look ugly. </font></p> -<p><font face="Arial, Helvetica, sans-serif">At 2, the HSYNC pulse ends. This - point isn't of much interest, as you cannot tell, if the ray is already at the - left edge. The only thing important about point 2 is, that the time between - point 1 and 2 must be sufficiently high for the monitor to detect the HSYNC - signal. Usually, the HSYNC pulse can be made very small.</font></p> -<p><font face="Arial, Helvetica, sans-serif">At some point after 1, the ray will - start flying to the right again. When point 3 comes, it will actually start - to display data. Point 3 can thus be adjusted to change the left border location. - If you wait longer before you start sending data, the left border will move - to the right.</font></p> -<p><font face="Arial, Helvetica, sans-serif">When you have sent all data, you - reach point 4. As a HSYNC pulse should then be sent to start a new line, we - set the RGB lines to black again. At point 5 we have completed a cycle and start - the next line.</font></p> -<h3><font face="Arial, Helvetica, sans-serif">2.2 Video card </font></h3> -<p><font face="Arial, Helvetica, sans-serif">Next, we look at the video card point - of view. The video card could send out a steady stream of data to the monitor - except for one thing. The monitor needs time for retracing so the video card - will be put into some "delay" at specific times. To be precise between - point 4 and point 1 on the NEXT line on the previous diagram. For the video - card, the "natural" coordinate system starts at point 3, when it starts - emitting data. This point usually causes some confusion with modeline calculation:</font></p> -<p><font face="Arial, Helvetica, sans-serif">HSYNC __/~~~\______________________________________________/~~~\___</font></p> -<p><font face="Arial, Helvetica, sans-serif">RGB ___________datadatadatadatadatadatadatadatadatad_____________</font></p> -<p><font face="Arial, Helvetica, sans-serif">time 1 2 3 - 4 5 6</font></p> -<p><font face="Arial, Helvetica, sans-serif">grc SS SE 0 - W SS SE</font></p> -<p><font face="Arial, Helvetica, sans-serif">From the graphics card point of view - (grc), a line starts at "0". From that point onward, it will output - the data in its video ram. There is a counter that will limit the number of - pixels that are put on one line. This is what we call the width of the mode. - On a 640x480 standard VESA mode, this is 640 pixels. </font></p> -<p><font face="Arial, Helvetica, sans-serif">We will usually want a small right - border to allow the monitor to prepare for the following SYNC pulse we will - generate. The aforementioned counter will run on (but data output from video - RAM will be suppressed) until we reach the point SS (SyncStart). On a 640x480 - standard VGA mode, this happens at 664 pixels. That is, we left a border of - 24 pixels.</font></p> -<p><font face="Arial, Helvetica, sans-serif">Now we raise the HSYNC to tell the - monitor to go left. This signal remains asserted until we reach the point SE - (SyncEnd). (760 pixels on VGA - i.e. 96 pixels of sync pulse. This is pretty - long, but VGA monitors weren't very quick.)</font></p> -<p><font face="Arial, Helvetica, sans-serif">We will also want some left border, - so we wait until we reach the next "0" point before starting to generate - a signal again. On standard VGA this happens at 800 pixels (40 pixels left border). - At that point, we reset the counter to 0 and start over. This point is usually - called the "total" for this reason.</font></p> -<p><font face="Arial, Helvetica, sans-serif">Now let us look at how we can change - the picture's appearance by changing values in such a modeline.</font></p> -<p><font face="Arial, Helvetica, sans-serif">Moving SE should not cause any difference - at all, except if you make the sync pulse too small for the monitor to recognize.</font></p> -<p><font face="Arial, Helvetica, sans-serif">Moving SS and SE together will move - the location of the sync pulse within the picture. Let us assume we move them - both to the "left", i.e. we decrease their startpoints. What happens - is, that we decrease the distance W-SS (which determines the right border) and - increase 0-SE (the left border). As a result, the picture moves to the right.</font></p> -<p><font face="Arial, Helvetica, sans-serif">Now what happens, if you change W? - You get extra pixels at the right border. As usually borders are pretty large - for standard VGA modes, you can usually display something like 648x486 without - a problem on a standard VGA monitor. You will not be able to see the difference.</font></p> -<p><font face="Arial, Helvetica, sans-serif">Of course, there are limits to this: - If you go too far, you will produce pixels beyond the visible area of the monitor - (which is useless), or interfere with the retrace, what gives ugly stripes from - the retracing CRT ray.</font></p> -<p><font face="Arial, Helvetica, sans-serif">Now let's shed some light on a few - remaining terms:</font></p> -<p><font face="Arial, Helvetica, sans-serif">BlankStart BS and BlankEnd BE. Between - SE and 0, you can put a BE point on many graphics cards. At that point, the - RGB lines are no longer clamped to black (to avoid interfering with the retrace), - but can be programmed to a border color. The same goes for BS, which can be - placed between W and SS. Usually, one doesn't use that feature nowadays, as - we have tunable monitors that allow stretching the mode to the physical limits - of the monitor.</font></p> -<p><font face="Arial, Helvetica, sans-serif">On old monitors, one used large borders - to ensure the data was always visible. There, the border color made some sense - as kind of eye candy.</font></p> -<p><font face="Arial, Helvetica, sans-serif">Pixelclock. That is the rate at which - pixels are output to the RGB lines. It is usually the basic unit for all timing - values in a graphics card.</font></p> -<p align="center"><font face="Arial, Helvetica, sans-serif"> <a href="index.html">index</a> - <a href="1.html">back</a> <a href="3.html">forward </a></font></p> + +<p> +At 1, the HSYNC pulse gets raised. +The beam will now quickly move to the left. During that time, the RGB lines +should be black (ray off), otherwise it would leave a noticeable trace while +moving, which would look ugly. +</p> + +<p> +At 2, the HSYNC pulse ends. This +point isn't of much interest, as you cannot tell, if the ray is already at the +left edge. The only thing important about point 2 is, that the time between +point 1 and 2 must be sufficiently high for the monitor to detect the HSYNC +signal. Usually, the HSYNC pulse can be made very small. +</p> + +<p> +At some point after 1, the ray will +start flying to the right again. When point 3 comes, it will actually start +to display data. Point 3 can thus be adjusted to change the left border location. +If you wait longer before you start sending data, the left border will move +to the right. +</p> + +<p> +When you have sent all data, you +reach point 4. As a HSYNC pulse should then be sent to start a new line, we +set the RGB lines to black again. At point 5 we have completed a cycle and start +the next line. +</p> + +<h3>2.2 Video card </h3> + +<p> +Next, we look at the video card point +of view. The video card could send out a steady stream of data to the monitor +except for one thing. The monitor needs time for retracing so the video card +will be put into some "delay" at specific times. To be precise between +point 4 and point 1 on the NEXT line on the previous diagram. For the video +card, the "natural" coordinate system starts at point 3, when it starts +emitting data. This point usually causes some confusion with modeline calculation: +</p> + +<p>HSYNC __/~~~\______________________________________________/~~~\___</p> +<p>RGB ___________datadatadatadatadatadatadatadatadatad_____________</p> +<p>time 1 2 3 + 4 5 6</p> +<p>grc SS SE 0 + W SS SE</p> + +<p> +From the graphics card point of view +(grc), a line starts at "0". From that point onward, it will output +the data in its video ram. There is a counter that will limit the number of +pixels that are put on one line. This is what we call the width of the mode. +On a 640x480 standard VESA mode, this is 640 pixels. +</p> + +<p> +We will usually want a small right +border to allow the monitor to prepare for the following SYNC pulse we will +generate. The aforementioned counter will run on (but data output from video +RAM will be suppressed) until we reach the point SS (SyncStart). On a 640x480 +standard VGA mode, this happens at 664 pixels. That is, we left a border of +24 pixels. +</p> + +<p> +Now we raise the HSYNC to tell the +monitor to go left. This signal remains asserted until we reach the point SE +(SyncEnd). (760 pixels on VGA - i.e. 96 pixels of sync pulse. This is pretty +long, but VGA monitors weren't very quick.) +</p> + +<p> +We will also want some left border, +so we wait until we reach the next "0" point before starting to generate +a signal again. On standard VGA this happens at 800 pixels (40 pixels left border). +At that point, we reset the counter to 0 and start over. This point is usually +called the "total" for this reason. +</p> + +<p> +Now let us look at how we can change +the picture's appearance by changing values in such a modeline. +</p> + +<p> +Moving SE should not cause any difference +at all, except if you make the sync pulse too small for the monitor to recognize. +</p> + +<p> +Moving SS and SE together will move +the location of the sync pulse within the picture. Let us assume we move them +both to the "left", i.e. we decrease their startpoints. What happens +is, that we decrease the distance W-SS (which determines the right border) and +increase 0-SE (the left border). As a result, the picture moves to the right. +</p> + +<p> +Now what happens, if you change W? +You get extra pixels at the right border. As usually borders are pretty large +for standard VGA modes, you can usually display something like 648x486 without +a problem on a standard VGA monitor. You will not be able to see the difference. +</p> + +<p> +Of course, there are limits to this: +If you go too far, you will produce pixels beyond the visible area of the monitor +(which is useless), or interfere with the retrace, what gives ugly stripes from +the retracing CRT ray. +</p> + +<p> +Now let's shed some light on a few +remaining terms: +</p> + +<p> +BlankStart BS and BlankEnd BE. Between +SE and 0, you can put a BE point on many graphics cards. At that point, the +RGB lines are no longer clamped to black (to avoid interfering with the retrace), +but can be programmed to a border color. The same goes for BS, which can be +placed between W and SS. Usually, one doesn't use that feature nowadays, as +we have tunable monitors that allow stretching the mode to the physical limits +of the monitor. +</p> + +<p> +On old monitors, one used large borders +to ensure the data was always visible. There, the border color made some sense +as kind of eye candy. +</p> + +<p> +Pixelclock. That is the rate at which +pixels are output to the RGB lines. It is usually the basic unit for all timing +values in a graphics card. +</p> + +<p align="center"> <a href="index.html">index</a> +<a href="1.html">back</a> <a href="3.html">forward </a></p> </body> </html> Index: 3.html =================================================================== RCS file: /cvsroot/linuxconsole/ruby/web/htdocs/fbdev/HOWTO/3.html,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- 3.html 2001/11/03 00:23:59 1.1 +++ 3.html 2001/11/04 00:47:05 1.2 @@ -5,336 +5,480 @@ </head> <body bgcolor="#FFFFFF"> -<h2><font face="Arial, Helvetica, sans-serif">3. Actually calculating a mode</font></h2> +<h2>3. Actually calculating a mode</h2> <hr width="100%" size="2"> -<p><font face="Arial, Helvetica, sans-serif">If you look at the fbdev driver you - think yikes. Yes, it's complex, but not as much as you think. A side note about - standard modes -- It's a common misconception that graphics cards cannot do - anything but the VGA/VESA induced "standard" modes like 640x480, 800x600, - 1024x768, 1280x960, ... With most cards, about any resolution can be programmed, - though many accelerators have been optimized for the above mentioned modes, - so that it is usually NOT wise to use other widths, as one might need to turn - OFF accelerator support. So if you write a driver, don't cling to these modes. - If the card can handle it, allow any mode.</font></p> -<p><font face="Arial, Helvetica, sans-serif">Here, the type of monitor has a big - impact on what kind of modes we can have. There are two basic types of monitors: - fixed frequency (they usually can do multiple vertical frequencies, though, - which are much less critical, as they are much lower) and multifrequency. </font></p> -<h3><font face="Arial, Helvetica, sans-serif">3.1 Fixed frequency monitors</font></h3> -<p><font face="Arial, Helvetica, sans-serif">The monitor manual says the horizontal - frequency (hfreq) is 31.5 kHz.</font></p> -<p><font face="Arial, Helvetica, sans-serif">We want to display a given mode, - say 640x480.</font></p> -<p><font face="Arial, Helvetica, sans-serif">We can now already determine the - absolute minimum dotclock we need, as</font></p> + +<p> +If you look at the fbdev driver you +think yikes. Yes, it's complex, but not as much as you think. A side note about +standard modes -- It's a common misconception that graphics cards cannot do +anything but the VGA/VESA induced "standard" modes like 640x480, 800x600, + 1024x768, 1280x960, ... With most cards, about any resolution can be programmed, +though many accelerators have been optimized for the above mentioned modes, +so that it is usually NOT wise to use other widths, as one might need to turn +OFF accelerator support. So if you write a driver, don't cling to these modes. +If the card can handle it, allow any mode. +</p> + +<p> +Here, the type of monitor has a big +impact on what kind of modes we can have. There are two basic types of monitors: +fixed frequency (they usually can do multiple vertical frequencies, though, +which are much less critical, as they are much lower) and multifrequency. +</p> + +<h3>3.1 Fixed frequency monitors</h3> + +<p> +The monitor manual says the horizontal +frequency (hfreq) is 31.5 kHz. +</p> + +<p> +We want to display a given mode, +say 640x480. +</p> + +<p> +We can now already determine the +absolute minimum dotclock we need, as +</p> <blockquote> - <p><font face="Courier New, Courier, mono" size="2">dotclock = horiz_total * - hfreq</font></p> + <p><font size="2">dotclock = horiz_total * hfreq</p> </blockquote> -<p><font face="Arial, Helvetica, sans-serif">and</font></p> +<p>and</p> <blockquote> - <p><font face="Courier New, Courier, mono" size="2">horiz_total = width + right_border - + sync + left_border > width</font></p> + <p><font size="2">horiz_total = width + right_border + + sync + left_border > width</p> </blockquote> -<p><font face="Arial, Helvetica, sans-serif">The minimum dotclock computes to - 20.16 MHz. We will probably need something around 20% "slack" for - borders and sync, so let's say we need about a 24MHz clock. Now we look at the - next higher clock our card can handle, which is 25.175 MHz, as we assume we - have a VGA compatible card.</font></p> -<p><font face="Arial, Helvetica, sans-serif">Now we can compute the horizontal - total:</font></p> + +<p> +The minimum dotclock computes to +20.16 MHz. We will probably need something around 20% "slack" for +borders and sync, so let's say we need about a 24MHz clock. Now we look at the +next higher clock our card can handle, which is 25.175 MHz, as we assume we +have a VGA compatible card. +</p> + +<p> +Now we can compute the horizontal +total: +</p> + <blockquote> - <p><font face="Courier New, Courier, mono" size="2">horiz_total = dotclock / - hfreq = 799.2</font></p> + <p><font size="2">horiz_total = dotclock / + hfreq = 799.2</p> </blockquote> -<p><font face="Arial, Helvetica, sans-serif">We can only program this as multiples - of 8, so we round to 800. Now, we still need to determine the length and placement - of the sync pulse, which will give all remaining parameters.</font></p> -<p><font face="Arial, Helvetica, sans-serif">There is no clean mathematical requirement - for those. Technically, the sync must be long enough to be detected, and placed - in a way that the mode is centered. The centering issue is not very pressing - anymore, as digitally controlled monitors are common, which allow to control - that externally. Generally, you should place the sync pulse early (i.e. keep - right_border small), as this will usually not cause artifacts that would arise - from turning on the output again too early when the sync pulse is placed too - late.</font></p> -<p><font face="Arial, Helvetica, sans-serif">So, if we as a "rule-of-thumb" - use a half of the blanking period for the sync and divide the rest as 1/3 right-border, - 2/3 left border, we get a modeline of:</font></p> +<p> +We can only program this as multiples +of 8, so we round to 800. Now, we still need to determine the length and placement +of the sync pulse, which will give all remaining parameters. +</p> +<p> +There is no clean mathematical requirement +for those. Technically, the sync must be long enough to be detected, and placed +in a way that the mode is centered. The centering issue is not very pressing +anymore, as digitally controlled monitors are common, which allow to control +that externally. Generally, you should place the sync pulse early (i.e. keep +right_border small), as this will usually not cause artifacts that would arise +from turning on the output again too early when the sync pulse is placed too +late. +</p> +<p> +So, if we as a "rule-of-thumb" +use a half of the blanking period for the sync and divide the rest as 1/3 right-border, +2/3 left border, we get a modeline of:</p> <blockquote> - <p><font face="Arial, Helvetica, sans-serif">"640x480" 25.175 640 - 664 744 800 ??? ??? ??? ???</font></p> + <p>"640x480" 25.175 640 + 664 744 800 ??? ??? ??? ???</p> </blockquote> -<p><font face="Arial, Helvetica, sans-serif">While this is not perfectly the same - as a standard VGA timing, it should run as well on VGA monitors. The sync is - a bit shorter, but that shouldn't be a real problem.</font></p> -<p><font face="Arial, Helvetica, sans-serif">Now, for the vertical timing. At - 480 lines, a VGA monitor uses 60Hz.</font></p> +<p> +While this is not perfectly the same +as a standard VGA timing, it should run as well on VGA monitors. The sync is +a bit shorter, but that shouldn't be a real problem. +</p> + +<p> +Now, for the vertical timing. At 480 lines, a VGA monitor uses 60Hz. +</p> <blockquote> - <p><font face="Courier New, Courier, mono" size="2">hfreq = vfreq * vert_total</font></p> + <p><font size="2">hfreq = vfreq * vert_total</p> </blockquote> -<p><font face="Arial, Helvetica, sans-serif">This yields a vert_total=525. The - vertical timings usually use much less overhead than the horizontal ones, as - here we count whole lines. This means much longer delays than just pixels. 10% - overhead will suffice here and we again split the borders 1/3: 2/3, with only - a few lines (say 2) for the sync pulse, as this is already much longer than - a HSYNC and thus easily detectable.</font></p> +<p> +This yields a vert_total=525. The +vertical timings usually use much less overhead than the horizontal ones, as +here we count whole lines. This means much longer delays than just pixels. 10% +overhead will suffice here and we again split the borders 1/3: 2/3, with only +a few lines (say 2) for the sync pulse, as this is already much longer than +a HSYNC and thus easily detectable. +</p> + <blockquote> - <p><font face="Arial, Helvetica, sans-serif">"640x480" 25.175 640 - 664 744 800 480 495 497 525</font></p> + <p>"640x480" 25.175 640 + 664 744 800 480 495 497 525</p> </blockquote> -<p><font face="Arial, Helvetica, sans-serif">Let us compare that to an XF86 modeline - that claims to be standard VGA:</font></p> + +<p> +Let us compare that to an XF86 modeline + that claims to be standard VGA: +</p> + <blockquote> - <p><font face="Arial, Helvetica, sans-serif">Modeline "640x480" - 25.175 640 664 760 800 480 491 493 525</font></p> + <p>Modeline "640x480" + 25.175 640 664 760 800 480 491 493 525</p> </blockquote> -<p><font face="Arial, Helvetica, sans-serif">Not much difference - right? They - should both work well, just a little shifted against each other vertically.</font></p> -<h3><font face="Arial, Helvetica, sans-serif">3.2 Multiscan monitor</font></h3> -<p><font face="Arial, Helvetica, sans-serif">Here we will consider a theoretical - monitor that can do hfreq 31-95kHz and vfreq 50-130Hz. Now, let's look at a - 640x480 mode. Our heuristics say, that we will need about 768x528 (20% and 10% - more) for borders and sync. We want a maximum refresh rate, so let's look what - limits the mode:</font></p> + +<p> +Not much difference - right? They +should both work well, just a little shifted against each other vertically. +</p> + +<h3>3.2 Multiscan monitor</h3> + +<p> +Here we will consider a theoretical +monitor that can do hfreq 31-95kHz and vfreq 50-130Hz. Now, let's look at a +640x480 mode. Our heuristics say, that we will need about 768x528 (20% and 10% +more) for borders and sync. We want a maximum refresh rate, so let's look what +limits the mode: +</p> + <blockquote> <p><font face="Courier New, Courier, mono" size="2">hfreq = vfreq * vtotal = - 130 * 528 = 68.6 kHz</font></p> + 130 * 528 = 68.6 kHz</p> </blockquote> -<p><font face="Arial, Helvetica, sans-serif">Oh - we cannot use the full hfreq - of our monitor... well no problem. What counts is the vfreq, as it determines - how much flicker we see.</font></p> -<p><font face="Arial, Helvetica, sans-serif">O.K. - what pixelclock will we need? - </font></p> +<p> +Oh - we cannot use the full hfreq +of our monitor... well no problem. What counts is the vfreq, as it determines +how much flicker we see. +</p> + +<p>O.K. - what pixelclock will we need? +</p> <blockquote> - <p><font face="Courier New, Courier, mono" size="2">pixclock = hfreq * htotal</font></p> + <p><font size="2">pixclock = hfreq * htotal</p> </blockquote> -<p><font face="Arial, Helvetica, sans-serif">The calculation yields 52.7MHz. - </font></p> -<p><font face="Arial, Helvetica, sans-serif">Now we look what the card can do. - Say we have a fixed set of clocks. We look what clocks we have close by. Assume - the card can do 50 and 60 MHz.</font></p> -<p><font face="Arial, Helvetica, sans-serif">Now we have a choice: We can either - use a lower clock, thus scaling down the refresh rate a bit (by 5% ... so what...): - This is what one usually does.</font></p> -<p><font face="Arial, Helvetica, sans-serif">Or we can use a higher clock, but - this would exceed the monitor specifications. That can be countered by adding - more border, but this is usually not done, as it is a waste of space on the - screen. However, keep it in mind as a trick for displaying 320x200, when you - do not have doubling features. It will display in a tiny window in the middle - of the screen, but it will display.</font></p> -<p><font face="Arial, Helvetica, sans-serif">O.K. - what will our calculation - yield?</font></p> +<p>The calculation yields 52.7MHz. + </p> + +<p> +Now we look what the card can do. +Say we have a fixed set of clocks. We look what clocks we have close by. Assume +the card can do 50 and 60 MHz. +</p> + +<p> +Now we have a choice: We can either +use a lower clock, thus scaling down the refresh rate a bit (by 5% ... so what...): +This is what one usually does. +</p> + +<p> +Or we can use a higher clock, but +this would exceed the monitor specifications. That can be countered by adding +more border, but this is usually not done, as it is a waste of space on the +screen. However, keep it in mind as a trick for displaying 320x200, when you +do not have doubling features. It will display in a tiny window in the middle +of the screen, but it will display. +</p> + +<p> +O.K. - what will our calculation +yield? +</p> + <blockquote> - <p><font face="Arial, Helvetica, sans-serif">"640x480" 50 640 - 664 728 768 480 496 498 528 <i># 65kHz 123Hz</i></font></p> + <p>"640x480" 50 640 + 664 728 768 480 496 498 528 <i># 65kHz 123Hz</i></p> </blockquote> -<p><font face="Arial, Helvetica, sans-serif">I just mentioned doubling features. - This is how VGA does 320x200. It displays each pixel twice in both directions. - Thus it effectively is a 640x400 mode. If this would not be done, you would - need a pixelclock of 12.59MHz and you would still have the problem of needing - a 140Hz refresh, if hsync should stay at 31.5kHz.</font></p> -<p><font face="Arial, Helvetica, sans-serif">A horizontal doubling feature allows - us to use the 25.175MHz clock intended for 640, and a line-doubling feature - keeps the vsync the same as 400 lines. Actually the line-doubler is programmable, - so you can as well use modes as sick as 640x50.</font></p> -<p><font face="Arial, Helvetica, sans-serif">O.K. - another example. Same monitor, - 1280x1024.</font></p> -<p><font face="Arial, Helvetica, sans-serif">Now we need about 1536x1126 total - (same rule of thumb). That yields 130Hz*1126lines = 146 kHz. We would exceed - the hfreq with that, so now the hfreq is the limit and we can only reach a refresh - rate of about (95kHz/1126) 84 Hz anymore.</font></p> -<p><font face="Arial, Helvetica, sans-serif">The required clock is now 146MHz. - That would yield:</font></p> + +<p> +I just mentioned doubling features. +This is how VGA does 320x200. It displays each pixel twice in both directions. +Thus it effectively is a 640x400 mode. If this would not be done, you would +need a pixelclock of 12.59MHz and you would still have the problem of needing +a 140Hz refresh, if hsync should stay at 31.5kHz. +</p> + +<p> +A horizontal doubling feature allows +us to use the 25.175MHz clock intended for 640, and a line-doubling feature +keeps the vsync the same as 400 lines. Actually the line-doubler is programmable, +so you can as well use modes as sick as 640x50. +</p> + +<p> +O.K. - another example. Same monitor, +1280x1024. +</p> + +<p> +Now we need about 1536x1126 total +(same rule of thumb). That yields 130Hz*1126lines = 146 kHz. We would exceed +the hfreq with that, so now the hfreq is the limit and we can only reach a refresh +rate of about (95kHz/1126) 84 Hz anymore. +</p> + +<p> +The required clock is now 146MHz. +That would yield: +</p> <blockquote> - <p><font face="Arial, Helvetica, sans-serif">"1280x1024" 146 1280 - 1320 1448 1536 1024 1058 1060 1126 <i># 95kHz 84Hz</i></font></p> + <p>"1280x1024" 146 1280 + 1320 1448 1536 1024 1058 1060 1126 <i># 95kHz 84Hz</i></p> </blockquote> -<p><font face="Arial, Helvetica, sans-serif">Now the clock might be programmable, - but keep in mind that there may be limits to the clock. <b>DO NOT OVERCLOCK</b> - a graphics card. This will result in the RAMDAC producing blurry images (as - it cannot cope with the high speed), and more importantly, the RAMDAC will OVERHEAT - and might be destroyed.</font></p> -<p><font face="Arial, Helvetica, sans-serif">Another issue is memory bandwidth. - The video memory can only give a certain amount of data per time unit. This - often limits the maximum clock at modes with high color depth (i.e. much data - per pixel). In the case of my card, it limits the clock to 130MHz at 16-bit - depth, which would produce:</font></p> + +<p> +Now the clock might be programmable, +but keep in mind that there may be limits to the clock. <b>DO NOT OVERCLOCK</b> +a graphics card. This will result in the RAMDAC producing blurry images (as +it cannot cope with the high speed), and more importantly, the RAMDAC will +OVERHEAT +and might be destroyed. +</p> + +<p> +Another issue is memory bandwidth. +The video memory can only give a certain amount of data per time unit. This +often limits the maximum clock at modes with high color depth (i.e. much data +per pixel). In the case of my card, it limits the clock to 130MHz at 16-bit +depth, which would produce: +</p> + <blockquote> - <p><font face="Arial, Helvetica, sans-serif">"1280x1024" 130 1280 - 1320 1448 1536 1024 1058 1060 1126 <i># 85kHz 75Hz</i></font></p> + <p>"1280x1024" 130 1280 + 1320 1448 1536 1024 1058 1060 1126 <i># 85kHz 75Hz</i></p> </blockquote> -<p><font face="Arial, Helvetica, sans-serif">This is pretty much what my monitor - shows now, if I ask it.</font></p> -<h3><font face="Arial, Helvetica, sans-serif">3.3 Recipe for multisync monitors</font></h3> -<p><font face="Arial, Helvetica, sans-serif">a) Determine the totals by calculating - htotal = width*1.2 and vtotal = height*1.1.</font></p> -<p><font face="Arial, Helvetica, sans-serif">b) Check what limits the refresh - rate by calculating vfreq2 = hfreqmax/vtotal. If that exceeds vfreqmax, the - limit is on the vfreq side and we use vfre = vfreqmax and hfreq = vfreqmax*vtotal. - If it doesn't, the mode is limited by hfreq and we have to use vfreq = vfreq2. - Note, that if this is smaller than vfreqmin, the mode cannot be displayed. In - the vfreq-limited case, you might exceed hfreqmin, which can be countered by - using line doubling facilities, if available. You can also add extra blank lines - (increase vtotal) as a last-resort alternative.</font></p> -<p><font face="Arial, Helvetica, sans-serif">c) Now that you have hfreq and vfreq, - calculate the pixel clock using pixclock=hfreq*htotal. Use the next lower pixel - clock. If you are below the lowest clock, you might want to try horizontal doubling - features or you will have to pad the mode by increasing htotal.</font></p> -<p><font face="Arial, Helvetica, sans-serif">d) Again, check the monitor limits. - You might be violating lower bounds now... In that case you might need to resort - to choosing a higher clock and padding as well.</font></p> -<p><font face="Arial, Helvetica, sans-serif">e) You now have pixclock, width, - height, htotal and vtotal. Calculate the sync start positions: hss=width+(htotal-width)/2/3; - vss=height+(vtotal-height)/3. Make sure to properly align them as required by - the video card hardware. hss usually has to be a multiple of 8.</font></p> -<p><font face="Arial, Helvetica, sans-serif">f) SyncEnd is calculated similarly: - hse=hss+(htotal-width)/2 and vse=vss+2.</font></p> -<h3><font face="Arial, Helvetica, sans-serif">3.4 Recipe for Monosync</font></h3> -<p><font face="Arial, Helvetica, sans-serif">a) Calculate the number of lines. - As hfreq and vfreq are given, vtotal is fixed: vtotal=hfreq/vfreq. If there - are multiple vfreqs allowed, choose them according to your desired vtotal (i.e. - one that gives the lowest vtotal above what you really need).</font></p> -<p><font face="Arial, Helvetica, sans-serif">b) Calculate the pixelclock. pixclock=hfreq*htotal. - htotal starts at the same estimate (width*1.2) we used above.</font></p> -<p><font face="Arial, Helvetica, sans-serif">c) Adjust the pixelclock to hardware-limits. - Adjust <b>UP</b>. Now recalculate the htotal=pixclock/hfreq.</font></p> -<p><font face="Arial, Helvetica, sans-serif">d) Go to 3.3. </font></p> -<p><font face="Arial, Helvetica, sans-serif">An important final word. Most video + +<p>This is pretty much what my monitor + shows now, if I ask it. +</p> + +<h3>3.3 Recipe for multisync monitors</h3> + +<p> +a) Determine the totals by calculating +htotal = width*1.2 and vtotal = height*1.1. +</p> + +<p> +b) Check what limits the refresh +rate by calculating vfreq2 = hfreqmax/vtotal. If that exceeds vfreqmax, the +limit is on the vfreq side and we use vfre = vfreqmax and hfreq = vfreqmax*vtotal. +If it doesn't, the mode is limited by hfreq and we have to use vfreq = vfreq2. +Note, that if this is smaller than vfreqmin, the mode cannot be displayed. In +the vfreq-limited case, you might exceed hfreqmin, which can be countered by +using line doubling facilities, if available. You can also add extra blank lines +(increase vtotal) as a last-resort alternative. +</p> + +<p> +c) Now that you have hfreq and vfreq, +calculate the pixel clock using pixclock=hfreq*htotal. Use the next lower pixel +clock. If you are below the lowest clock, you might want to try horizontal doubling +features or you will have to pad the mode by increasing htotal. +</p> + +<p> +d) Again, check the monitor limits. +You might be violating lower bounds now... In that case you might need to resort +to choosing a higher clock and padding as well. +</p> + +<p> +e) You now have pixclock, width, +height, htotal and vtotal. Calculate the sync start positions: hss=width+(htotal-width)/2/3; +vss=height+(vtotal-height)/3. Make sure to properly align them as required by + the video card hardware. hss usually has to be a multiple of 8. +</p> +<p> +f) SyncEnd is calculated similarly: +hse=hss+(htotal-width)/2 and vse=vss+2. +</p> + +<h3>3.4 Recipe for Monosync</h3> + +<p> +a) Calculate the number of lines. +As hfreq and vfreq are given, vtotal is fixed: vtotal=hfreq/vfreq. If there +are multiple vfreqs allowed, choose them according to your desired vtotal (i.e. +one that gives the lowest vtotal above what you really need). +</p> + +<p> +b) Calculate the pixelclock. pixclock=hfreq*htotal. + htotal starts at the same estimate (width*1.2) we used above. +</p> + +<p> +c) Adjust the pixelclock to hardware-limits. + Adjust <b>UP</b>. Now recalculate the htotal=pixclock/hfreq. +</p> + +<p> +d) Go to 3.3. +</p> + +<p> +An important final word. Most video card documentations give you the exact equations needed to set a mode. Here, - we give approached values. Use the exact values given in the documents.</font></p> -<h3><font face="Arial, Helvetica, sans-serif">3.5 Colors</font></h3> -<p><font face="Arial, Helvetica, sans-serif">There exist an endless number of - colors, but colors have a special property. If you take two colors and mix them - together you get a different color. There exist many models to represent colors, - but fbdev is based on what is known as the RGB color model. Out of all the colors, - there exist three colors in this model which when mixed in different amounts - can produce any color. These colors are known as primary colors. There does - exist a physical limit to mixing colors. If you take and mix red, green, and - blue in equal amounts you get gray. Now if you make each color component equally - brighter, the final color will become white. Now their reaches a point when - making each component brighter and brighter you will still end up with white. - You can increase the intensity of a color component by any amount from some - initial value up to this physical limit. This is where the image depth comes - in. As you know, on most cards you can have an image depth from one bit to 32 - bits. Image depth is independent of the mapping from the pixel to the color - components. It is also independent of the memory layout to pixel mapping. Note - that some cards have a complex mapping from the pixel values to the color components - (red, blue, green) as well as video memory to pixel mapping. If this is the - case, you will have to consult your documentation on your video card to see - what the mapping exactly is. Here are the mappings defined from top to bottom - in fbdev starting with the value of the color components:</font></p> + we give approached values. Use the exact values given in the documents. +</p> + +<h3>3.5 Colors</h3> + +<p> +There exist an endless number of +colors, but colors have a special property. If you take two colors and mix them +together you get a different color. There exist many models to represent colors, +but fbdev is based on what is known as the RGB color model. Out of all the colors, +there exist three colors in this model which when mixed in different amounts +can produce any color. These colors are known as primary colors. There does +exist a physical limit to mixing colors. If you take and mix red, green, and +blue in equal amounts you get gray. Now if you make each color component equally +brighter, the final color will become white. Now their reaches a point when +making each component brighter and brighter you will still end up with white. +You can increase the intensity of a color component by any amount from some +initial value up to this physical limit. This is where the image depth comes +in. As you know, on most cards you can have an image depth from one bit to 32 +bits. Image depth is independent of the mapping from the pixel to the color +components. It is also independent of the memory layout to pixel mapping. Note +that some cards have a complex mapping from the pixel values to the color components +(red, blue, green) as well as video memory to pixel mapping. If this is the +case, you will have to consult your documentation on your video card to see +what the mapping exactly is. Here are the mappings defined from top to bottom +in fbdev starting with the value of the color components: +</p> + <table width="151" border="0" cellpadding="0" cellspacing="0" align="center"> <tr align="center"> - <td><font face="Courier New, Courier, mono" size="2"> {red, blue, green}</font></td> + <td><font size="2"> {red, blue, green}</td> </tr> <tr align="center"> - <td><font face="Courier New, Courier, mono" size="2"> |</font></td> + <td><font size="2"> |</td> </tr> <tr align="center"> - <td> <font face="Courier New, Courier, mono" size="2"><i>FB_VISUAL_MONO01</i></font></td> + <td> <font size="2"><i>FB_VISUAL_MONO01</i></td> </tr> <tr align="center"> - <td> <font face="Courier New, Courier, mono" size="2"><i>FB_VISUAL_MONO10</i></font></td> + <td> <font size="2"><i>FB_VISUAL_MONO10</i></td> </tr> <tr align="center"> - <td> <font face="Courier New, Courier, mono" size="2"><i>FB_VISUAL_TRUECOLOR - </i></font></td> + <td> <font size="2"><i>FB_VISUAL_TRUECOLOR + </i></td> </tr> <tr align="center"> - <td> <font face="Courier New, Courier, mono" size="2"><i>FB_VISUAL_PSEUDOCOLOR - </i></font></td> + <td> <font size="2"><i>FB_VISUAL_PSEUDOCOLOR + </i></td> </tr> <tr align="center"> - <td> <font face="Courier New, Courier, mono... [truncated message content] |
From: James S. <jsi...@us...> - 2001-11-04 00:47:08
|
Update of /cvsroot/linuxconsole/ruby/web/htdocs In directory usw-pr-cvs1:/tmp/cvs-serv22898/htdocs Modified Files: index.html Log Message: Cleanup of fbdev docs. Needs still to be updated. Index: index.html =================================================================== RCS file: /cvsroot/linuxconsole/ruby/web/htdocs/index.html,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- index.html 2001/11/03 18:02:02 1.3 +++ index.html 2001/11/04 00:47:05 1.4 @@ -105,7 +105,8 @@ <H1>Documentaion:</H1> - Will fill in later.<p> + How to write a framebuffer driver using the <a href="fbdev/HOWTO/index.html">new api</a>.<p> +<p> <H1>People:</H1> |
From: James S. <jsi...@us...> - 2001-11-03 19:42:24
|
Update of /cvsroot/linuxconsole/ruby/web/htdocs/input In directory usw-pr-cvs1:/tmp/cvs-serv28999/input Modified Files: adapters.html hardware.html input.html joystick.html links.html Added Files: l1i.png l2i.png l3i.png l4i.png l5i.png l6i.png l7i.png m1i.png m2i.png r1i.png r2i.png r3i.png r4i.png r5i.png r6i.png r7i.png sponsor.png title.png Log Message: More web site updates. --- NEW FILE: l1i.png --- PNG nò´RÄVi;ÒÆI2Igî»ÇÅÌdÞyï5É@æÍ½ç|Ï÷{ιouqqqìK í äeûvVµã ) Ðh/d-úlnæ#=| ;²¬ ½¾Ù®ÊùĺX ÜïmôKñûbð þ0ݧ»_n:¹à|²R$8Ý,Ò °p6;+JW5¡õ ¤êbzÀ8@ÞÀFMÌG¬ø.çILÒÓòÁÆòjñ5éYËJW.LêIN¬àa§Ý/ÃÏ i°<ÄìsP X°)°,þ5Ñ.dàjw ¥³æ30Ñ}UjSp`£·s³i ö]ÓZÛ}v}E&»S|õvM¼¿âÔ&ÁòPèfò^óï?ÞÐ:õMõr¸õ¨×³_òRXn¾§Ã-dvN îå:ª¨>¨B SP°pØ,P%U_Ðl¥P röV Ówªæºs¾ÝXW,ß¶Öu_p³)»³Ø ûG£ûÖ6`yUIvg¿+±«Ø Xq<LúêuåÝl%@¬íCêöZA×÷ 87y&ª?1Y»ÁíêmtAÃ`(áM|Ï ¬KhØ --- NEW FILE: l2i.png --- PNG --- NEW FILE: l3i.png --- PNG 0C®þÑø¾À7öZÊxªHª´R([K2KB ^)N)^II ê±B³ÅîÙ,ì^~8APs%n¥{×G87°±t$©çn --- NEW FILE: l4i.png --- PNG --- NEW FILE: l5i.png --- PNG 9Ðv1¶ÒE¿gØOÝs[çµ¥}y¨Ó+2~Tí"keÙG~RýSí½]xÂ#Çà#wvîÆ0(:ôÅ1øÅÊòªò¿±RàÀæM¾Å±9w2ÿ>ý®ûÀÄãèÿR^µ×Ü[;·»o --- NEW FILE: l6i.png --- PNG --- NEW FILE: l7i.png --- PNG h£)¶ºÃïÂÃëjui%p=±ÙbÒL_/x ç:|q§P #gOá+}q+ä$¿[/3N°@µÆ«W`pÀ ·7µ·l_Kà7p(W mïò|ÿDÜøt92©nTéÏ4¥ssóB_A¼éhÐàzMä®*XX<RCEB« )¹ó`#±ä7'Z"ǾEG 'ÑîAYÊãÁ)P*@#ÀÁb}õæì --- NEW FILE: m1i.png --- PNG ¡ ¡ ¡Ð.:>»ºP P P ¾K úú DøõèxwÜf --- NEW FILE: m2i.png --- PNG Lð"ýãp,` 0¾Ph Övj¤Â!§cJ --- NEW FILE: r1i.png --- PNG -$V)¾mimlvf®ÍÎìÎÜÙÙÖ/,û;çïù{î%{½]û¡8acå3 eCºaà´Wïß>1õýèPÁôhÕQh0vèÙÓZ,<ÖZj3´ÉÐæj[OFõ(¥îç´ÅÖQ -2Þ@'"åÝ>yÍ0`4ÀÓtOôÖèáëOêO?Õ¶¶u³6ÂÞ÷rºóTCÔw¤ ÖÁð3Ãéø1&¹áÿ 3Ï`ÍeøÅ6 º%êP#ÎÃ#ß>ʱ¥±ê«Ãñ÷BÔw$S'ê_úÖ`tSíDÛÁ,ÉZ48»n=Õ@S5x²y:ÛÚ0#¯Â/s*÷Mô\°þ5WàÄo);ÒEpsS56Ô2_:n:OØßÇPØ,í{)BLw+éR: =¢'ݺPÒ¥*´ª©FSÈùK[ÜöÎLA$YÚü¯kÜB7ë½-mÚjîá U@¡yU*Jt¦±íLxùt ºSò¸ÒX@[¥|.` ¨>ÅÎìNödc$û<Y ÕÞq ôÌÓ/úcì&)fÁfá§1L¾7 0}msÎlÌÖмð® â2¯O.2 Ë73ÎLõ< îÐ&R¼åi ywrÛ6'À»,ÖÐÚj-{»;`îfÁÍ´üXÐÀ x{ÜçF *gUmqG¡þ/ÇU \↓^á¥;c½üI2°9ýx3·"-?^§¯ËYuW¬»ÀCc×áHKt --- NEW FILE: r2i.png --- PNG ½[+¨ãaÉ0O0ñ:Ið(WL9®B¬ EküÍeÛEq·Úè8wÀ)ðHyø@²+vt§Ft,ãM¶y½UÃ;íÙ@úM¼S*ã »%ôÀl-Ú±V±'ôW --- NEW FILE: r3i.png --- PNG 0ÜÐÝD² ;æà æÏ¬ðèNa0j --- NEW FILE: r4i.png --- PNG 8²]ßI¶÷é+VM|ùqUÀg¡èQ;¾ø.QéUàåz®¡Nþ³Ýµa°Õþ¤àùÀÂ3/Ï --- NEW FILE: r5i.png --- PNG --- NEW FILE: r6i.png --- PNG .ª¶>R0õKX õþXaÉðÕ({0$Á DK0çð#ÍþäÂm¼»`CØÜc¥¼¾ÖBÙc--MÝF¦y --- NEW FILE: r7i.png --- PNG Pkìç½ÚOâH \`7p »UÀºùo[ÁpfsÇxf=MÐp»QAUª¬Ø/)I)¹üV»ßf¬ Óø°)ÀãzÅûäÈ¥r$ --- NEW FILE: sponsor.png --- PNG æ49·jaé8X/ñ6åØì+&5Û¢@Ø Êú&·QÞ-äyx«= iõ×OïglËL6 EVâÉZÆúØ~6P9ÕVÖBÜagÇEÌ`øÁ§n8~9ÍÍ-Cíܰݨ\ r0¸®qØe»'°ï/Y6Þn9ÈéÂ=»v%7ïäꦥ-Hñy/vPhÅQ^UÎÕDå&Tî¶[ºÛîZÜ2=¥ÜRøQ£ÖÁ´ «¶âWU° P¬¶ÕuÄ81-Îï?vÞøò£{ý ì[¾ fx8Ä%[C²ú >_"=óà ®ÛÊ JðÏð}Pmz8®D¶½ú Gµ¹RÜP(ÔÝDqG¶3hÁrW rµ ØjÆwc_«¯G"/µ5TÃ±ÓæÌ3!<asÏ9gÓÎL(Psü>Ë&O®nîI,®¹º.èª1hªª¦Ca©v5wBK_ßæ+ÔÐ Í©©SÃÊùÕp0°9lXÐz~ÊRSãw>eǼsÿí ¬WPv¾ ¸® ]=B<qÅ"·¸g´ô °6 "åxørQ_ÕoN>꺴< ØÓ|äªÙj㪫íÙ×ì¸N-{¥&¡âppKÏY¼Èáuðãèï "ª¨O5ytäwºÑ+N4M\#ÝÀ:Òk3ý$þcu§ùï[ýù¸ {§þqÇÝÂñ$* Ëv¯í5ÍýQ7å7½ìgÏËeë9tù<ËÕ&M bêÑpçQ råÈjïKªp±`ÓE®3^@07$ãIHY!þ&^E¼©Èù·¸£OF.)YtïÐ)õ `#´îÞþf/¨ÈUÝôñ3Q%BEÉöñ Ï ¨©WµÀÂ;ú¦¶xÚSÕá£n5`ü©8ß\¸ µ£hê×X¸¦«oêLxìJ ÄÅ µ$"@ë©ÕA*·a¦øU¹]ýZõãê¸W«Uj®JÎáÊP(>àeTâB1e'~i, .¶"Âͺ@Ñ}D§éj+ê¨EX ¦¦ãyÍ)ÿøÈyõ£e{ùÚv*pò.Uq-7Z+EH8NS 1£DÎiȬÓAÏÆÎi(Ñh!µ, -±óÒÖ ú¦±kgÀðÖ'ìu?S2nîÀ©ÄãøfWÌ;8DdM?q&ââ2·Fª=?¦Ó³¥{²Ê©ËK±$¤W_¼·æÒ /;×ug/¶ío/^lìÌFpå{«&C\¶YÌQ 0ü§ÿ|íþØèÛãÃ2&\÷ÂÕ Ñ'ÝG*ràFSÂYdíÆ5εFIKãß ï|1\ñê,10V6CÓöí¥Ñ´sðÎÞhWdÊ`0¨¨¤Ýæ£7,ÄF M÷£füÂ7'8£È^XP¿ZF§&U@ ¦]k §¿Q®8ÃñÐ5}/KðôVM[ÓæESÀtíõzl±¢n h$y p¶ ù¡m±¥6Et&a`dtÄ3×ÄS=CºÜmÝPårËÀÏÊ@d¸V`·åH\WQHT$óÕ¼8z¬å! !jÅD"¹ÝA ÍíA¢(£}"¶¦L¦UéëÂ}"å¡ZQÌUjIÊ&Yâº5³¯×]ÚÕi¦C£+\}îÂEðÝëï¸ë£_esnûñf¼þòGÃaQs²yøám±e*:Ï"ª;E«Ò_MÝSçEió*U°Ü@{Ï´s»B*VÅ[£[¢d ¥ HIJªªª½huSÑ g$\NÄÔÄÒú²ÞÔTRM;e «TGÅÆ;±/M§Î¤UÿÀB!*VBÆð?¨vVÍËR+ÚîÂ3Û6«/ûË.»ls®þ{Õ¿íúÚeWÓÐ&_øO<¼ $716¨î6J"åpÕ2ñLb iO(D.÷&ѧJ竱XjÖa¯ë\NòÄ6$+!*÷Ù~yCmE1|Û©$_Ûugâ$¨á6õ1DE-ïB ÀWÚ*fEMÑUXñIUÐã7Ú'´JlaóH«Y·'^g£nw_A»Ê,±^ È>^8~ ýÕ455}óúW^yäd}iQQQ}}ý+õ'O¾RÿÂõ¨¯/z¯KK°®ôàôJ[ø:GUdTìvt¹£°ÕèDh ® 9t" ±Õ´OİßÑhpþÉP"¤Îåë¨ÛgÀ*)*µÕHÂÁDâå$Ôþع£ ¿C*FuoØH±zËç6LÁFgq=屺§ÞÑ%é#Kت§ú£g)µttÅq12ò]©b¹X yOp÷oû¯øð¦dJp'ä^ü2É,çç{çã÷W«P6øîgÇþýy°ªÀ_nÚ´a¹ÌÊjæ¨f]ßËdDåV×TUª½ý`Z¤ÓNÕP3úÑðªüªî_R]n¥}Çq±2Ñ&d,KN¸ÉÃê~&Vq$ÍwÈÒæGîNC ñî«9JDÑzEÇ.êýï3 ìêqO¬EQ¹nõ'¯Þyüc7Ôe½RÃm_±ÓkÂè~'ìNñ-ÒÃ?úqÑ'Í̤ËÒÙE ÊXz« +ê÷U¬Ü×d2b£ìT %+.xÜ_qäbïG.èÇ'ÃÔÛ[ þý"¯ÑÙ"þo_Äï\²1Y7düÿ0¶~VÏLT_ÿÄò[òÏ?ÃÍð_0uäÝ5±K¾7åK½ÍîWo --- NEW FILE: title.png --- PNG ´PB¡´B@IØ- í ¿«HS µ ç¦$ !Cj%9=Nê¦WW¯«¤tRkùHWH ÊÏÏ,ýÝtOU¸q0d¥â×]¾ÀÌo$ª5 7ѨéùºÀõ§@ÅÚËÚÍuí|¤ÄÉA üËüçÜúÑÏqcÄxkUn¬ Q'´ DÊï.4þ¸R:SÀí=Èx¦At @`z ë|`@¹@(ØÍêJÄw\ 0 ´FMýÉvVZÕGÿÜÔV]<ê1V?c " Ýkù1½¶qV.ºl´¢f´»Â)]R)&,Ñ¢¢/*.2$}F/J 7&Ü}Þh ¦p¥×0Ü<mêôjªÆéQìë¾ øÿ r¡ ?xý¨ÈëZùÞ7T{]@+ú©b'sà§Y6Wï(âFpo)Icß7^ðà]Ez;¼~ÔKóYaf5<yÍô|íaíר×yÙ¹Ùk.Í?3#^kCÿKývâü®gg͹®î0m'C}¼j+s³Jþ{Rå[¿>wKúp ²6ÖD(D2Áá¤>iD9$²õ/_ñu rþÕV¬YÂÚÙ þñÞ;ÏýnÕ¥ßxÆ9g7µuªr7 Ù.4!¨ïþ¡Â³]vÖ̽{÷>ã}`õª{wí9z´¾££søèQ¯<û]o·m9c³L)»,ìú7˦f/}³Ì©@¤peè¿ ;½ÒбñæÂù©n^lD/6ý¼Ê0D<úFSíê±§Úä¾2,A"Ä"«ÎSB ¤*Ðtq Hzn <fFÐÄIaï¬ ÜnwzuFÛèc"×ÿ&ÀÌd% ì$r ¶¾^?*/ÉT±Û»àE7x÷as ÉKob¡åý«0Ý^¥Ï.sLÔ°ÊÁÛêÚ§-ßLp¤knSðänWÖ©*ÖÎq±îÒS"Kú¯f³»ÒiZV¥q¨xèÂEgg¬ÜÒ´ô ?9r$))ië{ïÚRÓÆë÷ûý~vv¶>æ¨ÈÚÿ>°æÒüÒ¶yÖlz2H8 ÆÒjù*·Í{ÈM L þª@þ »<m2¥ =æpû¸¡£i¸È@8©t}Ý\' %SÀ~(õ*µdÌ´BÚÈP 6,, øDðt .pqg¯Úç<U>S| Hkê¦mªÚ*ª¼ B¢áëOk=Ý0=²±ñè!CÒiuuuïýsëâ[ë=sò¤ý»>o¸tûû:ïâKÌf³×ëmïnÀÛ¡"BñèÃ== D2QÜî }¯×FöâiS æß¸KsbäB¹õºcêenĺ9N 4`á9é+×Gk/-¶m\P ¯l§§CÖ0½´é±á¦G²QÌuA·0À'4ý¨ýþG )¹Õ{÷ÿâ§ûÁkÏnqÁ=r´½ãØÔiß2zý¯0¡Ø]ýÑôTø·íSæ~2)iÀ*Ãn×1·3YÒÄ0k2|à@ì@ñ1F+`åÁÇ&(#Ê26¨õvÀK72w ²ÁmÒR Èà d (ÀÇÀõP:ÈAú¢¦ ʪú¯! ÜÊð&ÀJ^Opº ÿÇ>@fXOì @çËv/}öïlY¹ ¨ÁÊVîÉ/ÿ«JsS2ü¨ìÁ'¾lTa³?_ÿéâg½F¹D¹D D,!z ¢ÆA%^H½uïéRxÈáOÚöñ£EKÖ1¥p¤©ö½.VÒ]UOÆéãC0»ãô6ô3T¦`Fè¯çBíÅþ<ìò ,BîøÓ¹anñÑþ Á9Ô9cÆG~ôþûï<yòùÏ!Vö©j`ý2O&9-¥E¶%/{tèsôJtªï$U zâ¬üGw) ç· íF`âÀÄsþ°rº[% `âÿ ä#¾Ù¼$SÅ.ïù´6ò¼«8ÚôpUD§}^=½ðU:N Ó_èØ^ß=õ làÏõªï$U ?®úFZѸz¿e~Ê,?ÄÜÆ!SèDºtÚw FÀ|2* õYõÞ{øýŶ õ-ÔÍþM®¶Ù%vå°úDÍÿÑ.ÄC}®8Ç $÷#éCM z]À½ösTêú3r+\Þ Ë/ppV$æº`Â$§%´[ݺ»×GÅxä-ÙY·|\é8Û K8LÿÛj· fÔ>56/É$®w!NÿÐò.¯r©kJ&%[æ>]8¬¨i\>Úaº©À?µFÓ9`æ¹õ%øDq îó«@ù.鯝ðñG*AyĨ1ÉÉÞ.ïý÷ß_VVÀ¾½¤sA¥0 MÙÎÔAN`0#AÙèö Ùí·½äñ¨!ý6ûtOJ4͵»uDZ¥¦7L ÂNAHì?#!]@K0¥rûfÐëw Ç~|í®=%O§Liá¡¢Ý$MÖs¶úQ^Û÷æìÙ³CAÞ³kçÈaCíXë®{eóËYéN§Àsß[xå²ò¬3K¶üèöûv9ò;îX·iû ;´y¸|'Rq¼;(îe8F àÑ5MÜÎâr/¤hötÝ1)1© @IVp u±êePÃéöÜ m±:g?Ñ8£63º4{cïAÈEý [¤«@jkîKþvÚz!í¨mBÇ©@ÇFjbtäþåq£]XñRcÙÌÌu?tÎ]U¨åDâ?ý¬¶1$ Ñ£mVÙ¯Ô.Ö§04üo Pã]½j5>ÀÕv¦ Ø úù§QggGzzÚÚ}Ï=ò{¼ÞÌLûä³&üfåSÃÇ`6ÛSC!u×Þ] üG«ÕÞ9väþ¸ý"Dõ¹ôä¼@±0}1*!¸Ê*ÑS *(«· rDR§«+ÉQèУ§¾x@ÊèÄí¯7Ìj=;ùïfw»æ¨9ñèW=Å>?Í DnQ;ÆÒ ì;´u¶$@dRz)*ÌÉpû« ÂNëûåa^¦ }'#|êð¤T ºòq rTÛ¹ëÍc)7Ñx£Ã(ØÑÀþ¢ºÖàº8ËÒc^iþZ7Ë EÇéÆh! ,+.Ì=ëûÔgJnývúõ±*P¶$yÉ0êÚã@½ÐjWç¸tÝ,^à$§eÛÛª»Äu.tP:,@é»ÚZn¨BÇ?H$"¾ªõ+þÖXvqfÝÞ LcOèXáü²][W^+É¿ÓsP n÷+7åö¼Ö@2'ã·oõ lP&!>ã:n7òú;K§ØÔuþ£aóg^½A8_î î<0ç¶ÇôÔÖþñ¿©Ý6¡àÑÚlÖ:wMμ¼!ù õ,ææÆú±ê{*OuRQîÀÒÝyPë0ð)¦¢Ñ&!ÀÏìd°ÌGJ#|^´MJ (7±¦l+ÛíÀ&ø «ª-ú ·?ÐcíÔÐK6r-ma=Ä0@ìI >EìÄP{ÃáuÓâC1£-â5¢ _Ä,ixÔ¾{ÿt»Ux¦önOß Ú^ (HLéõzo*»iJó9¶ÉN¤Ûö>ôPÙ£®¶#måiåm-m ÷ø«£&9-¥ÅöÈ[úG_\t^ÆÒ^"»21Iõ$l«îötɺ"|òv&íªhë´& °p䪾s3¢{)8ÜÈÿÑ®åW9Ê.ϰþ{Îm{»Î¾s¿~ÙYÊ.ÌÔØÒ ,¯+̱f Hàt/ 4Ä6ðºÓ$¡IbÁ¤Ûd:¡1HÂmlãI%¤mIJCj¼ûý8çÞºU*ɱ;YÎò×ÒÎ>û½÷·§Åî×-â}á½î»k[CÝÉfN7ï'¨w^P$¾AÜWw¤ÿÑWÛkÞ æÿ³1 ÃöPQÁxìªÛ( u0iÒ¤² Øá´Ë.'ßyø;÷ßf,^òθ·©ÑgÙ6RµÚj'Zñ^x¥iF( ®Õ¶ç$8Æ`F¬ÀSPS%DÙ8± YöçÍEêUÙfà¾WC¦ vÑÛ+ª? =Èb cy§ 6¬£ß25ÊÐ{I@aÒg°ZÖá¾´Ò³ôË>ÚÇ §E¶ j)Æ=?m]Ræ^:Ã`CuÞÇ~ÓCÙä~`ýK,ÅÃð.ÀÃì`=È ÷ ng×{ïÍ9[O'»::fÏ}èÐ!Ã1©lÒëüÓ3}O ÃÝO>ñäÊÏJ¥z»»ÊÇ9Ý~Ýî÷°ã£»o¹ëµÉ_Ýñ;§kV,õÇ^{åµ+®¸"f&ï<ø-¶]©F 4êph úûûÆGT"YP8.ÜÓçtyÆM8ðOO^}õÕ·ÜrKÎC®Yû¥Î;> 6Mr9§äå{öïë?°¯°¨dÞ¼yâóÏ?_è¡áΰËçè %ù4á ãxÛ˰8¤8½9Æ ><5÷dC@'Yv==VG»V9mHªùÖ÷<Ѫ÷2RÇ,ïáF´¬iÎéo`óí>ÉÌ0Sqåæ÷7Ì+/Ò4¹zº ã [6£å oÈFpcÛ¾ý¦éÞîúø~¢jzÁÖÛ+´¼p^ÍÝ+ÂòùóLäÝ*8õ(É¢4e<!J- xó6'0Ì ")ãå¹OÄ!ñá©ØrY.O °òGA8 .HHÓ>²DÛwâuÍNs<H&Ré^1¹RS ;çÍÛÑy|Oó;íÍ'~þÌ_þÜ?þvËs NçCÿúà÷×?²ý¥ß½óúë/ÿú÷étúwÞÙYW¿w÷»¦ª.GɹçêL Ù¢}æb©@ F@ cà#a ºú3aåMÈX[vKÀ¹RÔ(îÑG ïÙ×üð¼òñZy±Öü̼^ënéLܳ¡UZ±6r`Ï ã¢oøÜm7\Xà¹ÿ7eéÑõøO%næ/ ¨oÞ=ãm5ï©$fÇ wbî"©ðÞm-øéݵdòhø÷>Þªt2 »Bè%n»µ²Øóßrq÷õLÅ©ÁJ<öÕ×,>K~~Ð^¢ qQiFC\2Ç3ºqÙ8ó{ê÷D¡KóYâ-ùÌgf¾èï2`â'¥TÀ* ò¡òƦ{d¾}Á¹ÿ¸·ídJ¼7Ðbñûݵ hÃ¥?hÜrmÅ2VüÄI# ¨ Íÿ$S*hu'íÅ âàd«ë¿º{Õ5»·ß5}éTºM³Z:|ë`[2)VÓÊY²²IÚ`è¬6Õìì®ùS¸å׸ç^êÈp_óð×WN)ø5áU?2³ hNp|x1Ô{ïoB>] àË Ë~¬]²öCREìò05\êU×_^RæU+hlºS®µâ!òt"!zdMÙ}O ² ï(TÁpÜó·MÉl*W|7àùOýðR¯ºùÓYkh_÷RÀV@,ÎÖ D½0ÃZn¸¸peQÂe"`<mãn÷å HHaÙ2·OkOrÝÏÚ Üà0ÙÔìp/Ò¸éåæuhÛþÅéåã´ºgfռѽbCPnLs¹ÜK½êë+§5NýÑ~è°(O òè÷æÔPsL¾m_èD2EéË¿y¾·l¯+ÆõM5¯3çÐ îã¯\\¼æ¶^w8²i{GÃH(2 jV`q»jf Ô¼÷¡·Û¢YN`ÃüýKÓ;Ò¹ñW/,6sÔì ×6ëEBIk1 /°igÇãu#@± "ÚGäeG0EX:Æ×ËW]}î´6»LÄO´´ì<ùëß¾z8ØæqaÙe§[¦C/,_XTÜÓݽwÏûN§cÊ´ãDÐñD:O§ÓÞ®®¦¦·.ò<2~Ρ>àx`ÊÍä%ÉÜùp´«$.) < Ó¦ÈApC"qCI]}În®©÷ ö¼¾JñºúÈhë".D¤½_}YÀ#[z ÍÑ<²¢Ä©dæà1ó±q#º_Vþ²èWMN<D8ì'²kEòQÎXGÍbpAX²\óñ ë7êÏ.RgG÷òiÜ"pj®¥Ê07vÒ àÉb8jW`±®²X±®lX\\"gï°ÁTf½DÒxQIc±\jN[;*oÉì>å%<3¶Ì"6XWËÃå¹×$Xe§Xó{mÙ4±¢4lõ´ØJ§»nùxkfvi! (g¤Ê{Ûc=%ãÛÛÚâ-¡ý|ÛÌI¡ï~·Ï^Æã[ßà(º®xÒwßÞéóy ?±à°= (ÛÅ}Zµ ì:8¯øå;ö¼uuùÜO<q"ÞñÒ×øIux¡¦Á 7k«.>_÷Fͳ¿Lzå²Ç¿ëwytUµ¹j¨¹ù®o<ÒúèëϽêâÞVÔÓX±baìú`bÕ³Íä¼ ÿÓ@V³ÓpqWf. U"Èï`!Ù3) /Ì!³¤#·Ù,`À v ±f54 aú»PÁBc¦MMÃ`)qÅvÚk$eÔ Áȼ'#A¼`Èk9RÅcÕ³FXuâI$ÔsrA"ölõÜPDjn Ræ&Ý3qI£ìyÚRÁ_hÌ^2±4i2/ÎÔS7ÇzIb,b«£«!ï)`_Pæ¶!ª4eK)£Áe¸ÌcQH,a馴 ú6Á'ÖMÞÓ²íë§)Ä`ùI£5ç³Ë´ e-ͨnaßPFüc.Où`ÕÌ4±ÝF0wLh)°y/e;´{·[N¯)<&í Cï ".yØ`yÞ54Ïg¤Ï¸}},øÔ«vð =54Wä¡Òç>¢¿ù*n9h"ga% Ëã%8x÷FP Ç(8Áõ¢¡XRfúX«òrÅi7Þ÷YµáÌX !G}òqìGòáwßÿòªÒio¥Óé3ìñ5¤Ys[B±ñ?$.æ,ÐÃÜZîùe°DNí°±16þ:ÆÙì66ÆÆ_¾ Index: adapters.html =================================================================== RCS file: /cvsroot/linuxconsole/ruby/web/htdocs/input/adapters.html,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- adapters.html 2001/11/03 00:14:35 1.1 +++ adapters.html 2001/11/03 19:42:21 1.2 @@ -10,12 +10,12 @@ <body text="#000000" bgcolor="#ffffff"> <table border=0 cellspacing=0 cellpadding=0 width="100%" bgcolor="#FFFFFF"> -<tr><td><img SRC="images/l1i.png" border=0 width=32 height=64 alt=""><br></td><td width="100%" background="images/m1i.png"> -<img src="images/title.png" border=0 alt="Linux Input Drivers" width=512 height=64><br></td><td> -<img SRC="images/r1i.png" border=0 width=32 height=64 alt=""><br></td></tr> -<tr><td><img src="images/l2i.png" border=0 width=32 height=16 alt=""><br></td><td></td><td> -<img SRC="images/r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td background="images/l3i.png"><img src="images/l3i.png" border=0 width=32 height=16 alt=""><br></td><td> +<tr><td><img SRC="l1i.png" border=0 width=32 height=64 alt=""><br></td><td width="100%" background="m1i.png"> +<img src="title.png" border=0 alt="Linux Input Drivers" width=512 height=64><br></td><td> +<img SRC="r1i.png" border=0 width=32 height=64 ALT=""><br></td></tr> +<tr><td><img src="l2i.png" border=0 width=32 height=16 alt=""><br></td><td></td><td> +<img SRC="r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td background="l3i.png"><img src="l3i.png" border=0 width=32 height=16 alt=""><br></td><td> <div align=center><strong> <a href="input.html#introduction">Introduction</a> - @@ -28,15 +28,15 @@ <a href="adapters.html">Adapters</a> - <a href="links.html">Links</a><br> -</strong></div></td><td background="images/r3i.png"><img src="images/r3i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td><img src="images/l4i.png" border=0 width=32 height=16 alt=""><br></td><td> -</td><td><img SRC="images/r4i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td><img src="images/l6i.png" border=0 width=32 height=16 alt=""><br></td><td background="images/m2i.png"> -<img src="images/m2i.png" border=0 width=32 height=16 alt=""><br></td><td> -<img src="images/r6i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td><img src="images/l2i.png" border=0 width=32 height=16 alt=""><br></td><td> -</td><td><img SRC="images/r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td background="images/l3i.png"><img src="images/l3i.png" border=0 width=32 height=16 alt=""><br></td><td> +</strong></div></td><td background="r3i.png"><img src="r3i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td><img src="l4i.png" border=0 width=32 height=16 alt=""><br></td><td> +</td><td><img SRC="r4i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td><img src="l6i.png" border=0 width=32 height=16 alt=""><br></td><td background="m2i.png"> +<img src="m2i.png" border=0 width=32 height=16 alt=""><br></td><td> +<img src="r6i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td><img src="l2i.png" border=0 width=32 height=16 alt=""><br></td><td> +</td><td><img SRC="r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td background="l3i.png"><img src="l3i.png" border=0 width=32 height=16 alt=""><br></td><td> <!-----------------------------------------------------------------------------------------------------------> <h2>Sun keyboard to PC serial port adapter</h2> @@ -74,15 +74,15 @@ </address> <div align=center> -<a href="http://www.suse.cz/"><img src="images/sponsor.png" alt="Sponsored by SuSE" border=0 width=298 height=61></a> +<a href="http://www.suse.cz/"><img src="sponsor.png" alt="Sponsored by SuSE" border=0 width=298 height=61></a> </div> -</td><td background="images/r3i.png"><img src="images/r3i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td><img src="images/l5i.png" border=0 width=32 height=16 alt=""><br></td><td> -</td><td><img SRC="images/r5i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td><img src="images/l7i.png" border=0 width=32 height=16 alt=""><br></td><td background="images/m2i.png"> -<img src="images/m2i.png" border=0 width=32 height=16 alt=""><br> -</td><td><img SRC="images/r7i.png" border=0 width=32 height=16 alt=""><br></td></tr> +</td><td background="r3i.png"><img src="r3i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td><img src="l5i.png" border=0 width=32 height=16 alt=""><br></td><td> +</td><td><img SRC="r5i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td><img src="l7i.png" border=0 width=32 height=16 alt=""><br></td><td background="m2i.png"> +<img src="m2i.png" border=0 width=32 height=16 alt=""><br> +</td><td><img SRC="r7i.png" border=0 width=32 height=16 alt=""><br></td></tr> </table> </body> Index: hardware.html =================================================================== RCS file: /cvsroot/linuxconsole/ruby/web/htdocs/input/hardware.html,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- hardware.html 2001/11/03 00:14:35 1.1 +++ hardware.html 2001/11/03 19:42:21 1.2 @@ -10,12 +10,12 @@ <body text="#000000" bgcolor="#ffffff"> <table border=0 cellspacing=0 cellpadding=0 width="100%" bgcolor="#FFFFFF"> -<tr><td><img SRC="images/l1i.png" border=0 width=32 height=64 alt=""><br></td><td width="100%" background="images/m1i.png"> -<img src="images/title.png" border=0 alt="Linux Input Drivers" width=512 height=64><br></td><td> -<img SRC="images/r1i.png" border=0 width=32 height=64 alt=""><br></td></tr> -<tr><td><img src="images/l2i.png" border=0 width=32 height=16 alt=""><br></td><td></td><td> -<img SRC="images/r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td background="images/l3i.png"><img src="images/l3i.png" border=0 width=32 height=16 alt=""><br></td><td> +<tr><td><img SRC="l1i.png" border=0 width=32 height=64 alt=""><br></td><td width="100%" background="m1i.png"> +<img src="title.png" border=0 alt="Linux Input Drivers" width=512 height=64><br></td><td> +<img SRC="r1i.png" border=0 width=32 height=64 alt=""><br></td></tr> +<tr><td><img src="l2i.png" border=0 width=32 height=16 alt=""><br></td><td></td><td> +<img SRC="r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td background="l3i.png"><img src="l3i.png" border=0 width=32 height=16 alt=""><br></td><td> <div align=center><strong> <a href="input.html#introduction">Introduction</a> - @@ -28,15 +28,15 @@ <a href="adapters.html">Adapters</a> - <a href="links.html">Links</a><br> -</strong></div></td><td background="images/r3i.png"><img src="images/r3i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td><img src="images/l4i.png" border=0 width=32 height=16 alt=""><br></td><td> -</td><td><img SRC="images/r4i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td><img src="images/l6i.png" border=0 width=32 height=16 alt=""><br></td><td background="images/m2i.png"> -<img src="images/m2i.png" border=0 width=32 height=16 alt=""><br></td><td> -<img src="images/r6i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td><img src="images/l2i.png" border=0 width=32 height=16 alt=""><br></td><td> -</td><td><img SRC="images/r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td background="images/l3i.png"><img src="images/l3i.png" border=0 width=32 height=16 alt=""><br></td><td> +</strong></div></td><td background="r3i.png"><img src="r3i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td><img src="l4i.png" border=0 width=32 height=16 alt=""><br></td><td> +</td><td><img SRC="r4i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td><img src="l6i.png" border=0 width=32 height=16 alt=""><br></td><td background="m2i.png"> +<img src="m2i.png" border=0 width=32 height=16 alt=""><br></td><td> +<img src="r6i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td><img src="l2i.png" border=0 width=32 height=16 alt=""><br></td><td> +</td><td><img SRC="r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td background="l3i.png"><img src="l3i.png" border=0 width=32 height=16 alt=""><br></td><td> <!-----------------------------------------------------------------------------------------------------------> <h2><a name="hardware">Supported hardware</a></h2> @@ -315,12 +315,12 @@ <a href="http://www.suse.cz/"><img src="sponsor.png" alt="Sponsored by SuSE" border=0 width=298 height=61></a> </div> -</td><td background="images/r3i.png"><img src="images/r3i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td><img src="images/l5i.png" border=0 width=32 height=16 alt=""><br></td><td> -</td><td><img SRC="images/r5i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td><img src="images/l7i.png" border=0 width=32 height=16 alt=""><br></td><td background="images/m2i.png"> -<img src="images/m2i.png" border=0 width=32 height=16 alt=""><br> -</td><td><img SRC="images/r7i.png" border=0 width=32 height=16 alt=""><br></td></tr> +</td><td background="r3i.png"><img src="r3i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td><img src="l5i.png" border=0 width=32 height=16 alt=""><br></td><td> +</td><td><img SRC="r5i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td><img src="l7i.png" border=0 width=32 height=16 alt=""><br></td><td background="m2i.png"> +<img src="m2i.png" border=0 width=32 height=16 alt=""><br> +</td><td><img SRC="r7i.png" border=0 width=32 height=16 alt=""><br></td></tr> </table> </body> Index: input.html =================================================================== RCS file: /cvsroot/linuxconsole/ruby/web/htdocs/input/input.html,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- input.html 2001/11/03 00:14:35 1.1 +++ input.html 2001/11/03 19:42:21 1.2 @@ -10,12 +10,12 @@ <body text="#000000" bgcolor="#ffffff"> <table border=0 cellspacing=0 cellpadding=0 width="100%" bgcolor="#FFFFFF"> -<tr><td><img SRC="images/l1i.png" border=0 width=32 height=64 alt=""><br></td><td width="100%" background="images/m1i.png"> -<img src="images/title.png" border=0 alt="Linux Input Drivers" width=512 height=64><br></td><td> -<img SRC="images/r1i.png" border=0 width=32 height=64 alt=""><br></td></tr> -<tr><td><img src="images/l2i.png" border=0 width=32 height=16 alt=""><br></td><td></td><td> -<img SRC="images/r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td background="images/l3i.png"><img src="images/l3i.png" border=0 width=32 height=16 alt=""><br></td><td> +<tr><td><img SRC="l1i.png" border=0 width=32 height=64 alt=""><br></td><td width="100%" background="m1i.png"> +<img src="title.png" border=0 alt="Linux Input Drivers" width=512 height=64><br></td><td> +<img SRC="r1i.png" border=0 width=32 height=64 alt=""><br></td></tr> +<tr><td><img src="l2i.png" border=0 width=32 height=16 alt=""><br></td><td></td><td> +<img SRC="r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td background="l3i.png"><img src="l3i.png" border=0 width=32 height=16 alt=""><br></td><td> <div align=center><strong> <a href="input.html#introduction">Introduction</a> - @@ -29,14 +29,14 @@ <a href="links.html">Links</a><br> </strong></div></td><td background="r3i.png"><img src="r3i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td><img src="images/l4i.png" border=0 width=32 height=16 alt=""><br></td><td> -</td><td><img SRC="images/r4i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td><img src="images/l6i.png" border=0 width=32 height=16 alt=""><br></td><td background="images/m2i.png"> -<img src="images/m2i.png" border=0 width=32 height=16 alt=""><br></td><td> -<img src="images/r6i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td><img src="images/l2i.png" border=0 width=32 height=16 alt=""><br></td><td> -</td><td><img SRC="images/r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td background="images/l3i.png"><img src="images/l3i.png" border=0 width=32 height=16 alt=""><br></td><td> +<tr><td><img src="l4i.png" border=0 width=32 height=16 alt=""><br></td><td> +</td><td><img SRC="r4i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td><img src="l6i.png" border=0 width=32 height=16 alt=""><br></td><td background="m2i.png"> +<img src="m2i.png" border=0 width=32 height=16 alt=""><br></td><td> +<img src="r6i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td><img src="l2i.png" border=0 width=32 height=16 alt=""><br></td><td> +</td><td><img SRC="r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td background="l3i.png"><img src="l3i.png" border=0 width=32 height=16 alt=""><br></td><td> <!-----------------------------------------------------------------------------------------------------------> <p> @@ -137,15 +137,15 @@ </address> <div align=center> -<a href="http://www.suse.cz/"><img src="images/sponsor.png" alt="Sponsored by SuSE" border=0 width=298 height=61></a> +<a href="http://www.suse.cz/"><img src="sponsor.png" alt="Sponsored by SuSE" border=0 width=298 height=61></a> </div> -</td><td background="images/r3i.png"><img src="images/r3i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td><img src="images/l5i.png" border=0 width=32 height=16 alt=""><br></td><td> -</td><td><img SRC="images/r5i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td><img src="images/l7i.png" border=0 width=32 height=16 alt=""><br></td><td background="images/m2i.png"> -<img src="images/m2i.png" border=0 width=32 height=16 alt=""><br> -</td><td><img SRC="images/r7i.png" border=0 width=32 height=16 alt=""><br></td></tr> +</td><td background="r3i.png"><img src="r3i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td><img src="l5i.png" border=0 width=32 height=16 alt=""><br></td><td> +</td><td><img SRC="r5i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td><img src="l7i.png" border=0 width=32 height=16 alt=""><br></td><td background="m2i.png"> +<img src="m2i.png" border=0 width=32 height=16 alt=""><br> +</td><td><img SRC="r7i.png" border=0 width=32 height=16 alt=""><br></td></tr> </table> </body> Index: joystick.html =================================================================== RCS file: /cvsroot/linuxconsole/ruby/web/htdocs/input/joystick.html,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- joystick.html 2001/11/03 00:14:35 1.1 +++ joystick.html 2001/11/03 19:42:21 1.2 @@ -10,12 +10,12 @@ <body text="#000000" bgcolor="#ffffff"> <table border=0 cellspacing=0 cellpadding=0 width="100%" bgcolor="#FFFFFF"> -<tr><td><img SRC="images/l1i.png" border=0 width=32 height=64 alt=""><br></td><td width="100%" background="images/m1i.png"> -<img src="images/title.png" border=0 alt="Linux Input Drivers" width=512 height=64><br></td><td> -<img SRC="images/r1i.png" border=0 width=32 height=64 alt=""><br></td></tr> -<tr><td><img src="images/l2i.png" border=0 width=32 height=16 alt=""><br></td><td></td><td> -<img SRC="images/r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td background="images/l3i.png"><img src="images/l3i.png" border=0 width=32 height=16 alt=""><br></td><td> +<tr><td><img SRC="l1i.png" border=0 width=32 height=64 alt=""><br></td><td width="100%" background="m1i.png"> +<img src="title.png" border=0 alt="Linux Input Drivers" width=512 height=64><br></td><td> +<img SRC="r1i.png" border=0 width=32 height=64 alt=""><br></td></tr> +<tr><td><img src="l2i.png" border=0 width=32 height=16 alt=""><br></td><td></td><td> +<img SRC="r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td background="l3i.png"><img src="l3i.png" border=0 width=32 height=16 alt=""><br></td><td> <div align=center><strong> <a href="input.html#introduction">Introduction</a> - @@ -28,15 +28,15 @@ <a href="adapters.html">Adapters</a> - <a href="links.html">Links</a><br> -</strong></div></td><td background="images/r3i.png"><img src="images/r3i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td><img src="images/l4i.png" border=0 width=32 height=16 alt=""><br></td><td> -</td><td><img SRC="images/r4i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td><img src="images/l6i.png" border=0 width=32 height=16 alt=""><br></td><td background="images/m2i.png"> -<img src="images/m2i.png" border=0 width=32 height=16 alt=""><br></td><td> -<img src="images/r6i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td><img src="images/l2i.png" border=0 width=32 height=16 alt=""><br></td><td> -</td><td><img SRC="images/r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td background="images/l3i.png"><img src="images/l3i.png" border=0 width=32 height=16 alt=""><br></td><td> +</strong></div></td><td background="r3i.png"><img src="r3i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td><img src="l4i.png" border=0 width=32 height=16 alt=""><br></td><td> +</td><td><img SRC="r4i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td><img src="l6i.png" border=0 width=32 height=16 alt=""><br></td><td background="m2i.png"> +<img src="m2i.png" border=0 width=32 height=16 alt=""><br></td><td> +<img src="r6i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td><img src="l2i.png" border=0 width=32 height=16 alt=""><br></td><td> +</td><td><img SRC="r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td background="l3i.png"><img src="l3i.png" border=0 width=32 height=16 alt=""><br></td><td> <!-----------------------------------------------------------------------------------------------------------> <h2>Joystick driver v2.0.0</h2> @@ -62,15 +62,15 @@ </address> <div align=center> -<a href="http://www.suse.cz/"><img src="images/sponsor.png" alt="Sponsored by SuSE" border=0 width=298 height=61></a> +<a href="http://www.suse.cz/"><img src="sponsor.png" alt="Sponsored by SuSE" border=0 width=298 height=61></a> </div> -</td><td background="images/r3i.png"><img src="images/r3i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td><img src="images/l5i.png" border=0 width=32 height=16 alt=""><br></td><td> -</td><td><img SRC="images/r5i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td><img src="images/l7i.png" border=0 width=32 height=16 alt=""><br></td><td background="images/m2i.png"> -<img src="images/m2i.png" border=0 width=32 height=16 alt=""><br> -</td><td><img SRC="images/r7i.png" border=0 width=32 height=16 alt=""><br></td></tr> +</td><td background="r3i.png"><img src="r3i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td><img src="l5i.png" border=0 width=32 height=16 alt=""><br></td><td> +</td><td><img SRC="r5i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td><img src="l7i.png" border=0 width=32 height=16 alt=""><br></td><td background="m2i.png"> +<img src="m2i.png" border=0 width=32 height=16 alt=""><br> +</td><td><img SRC="r7i.png" border=0 width=32 height=16 alt=""><br></td></tr> </table> </body> Index: links.html =================================================================== RCS file: /cvsroot/linuxconsole/ruby/web/htdocs/input/links.html,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- links.html 2001/11/03 00:14:35 1.1 +++ links.html 2001/11/03 19:42:21 1.2 @@ -10,12 +10,12 @@ <body text="#000000" bgcolor="#ffffff"> <table border=0 cellspacing=0 cellpadding=0 width="100%" bgcolor="#FFFFFF"> -<tr><td><img SRC="images/l1i.png" border=0 width=32 height=64 alt=""><br></td><td width="100%" background="images/m1i.png"> -<img src="images/title.png" border=0 alt="Linux Input Drivers" width=512 height=64><br></td><td> -<img SRC="images/r1i.png" border=0 width=32 height=64 alt=""><br></td></tr> -<tr><td><img src="images/l2i.png" border=0 width=32 height=16 alt=""><br></td><td></td><td> -<img SRC="images/r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td background="images/l3i.png"><img src="images/l3i.png" border=0 width=32 height=16 alt=""><br></td><td> +<tr><td><img SRC="l1i.png" border=0 width=32 height=64 alt=""><br></td><td width="100%" background="m1i.png"> +<img src="title.png" border=0 alt="Linux Input Drivers" width=512 height=64><br></td><td> +<img SRC="r1i.png" border=0 width=32 height=64 alt=""><br></td></tr> +<tr><td><img src="l2i.png" border=0 width=32 height=16 alt=""><br></td><td></td><td> +<img SRC="r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td background="l3i.png"><img src="l3i.png" border=0 width=32 height=16 alt=""><br></td><td> <div align=center><strong> <a href="input.html#introduction">Introduction</a> - @@ -28,15 +28,15 @@ <a href="adapters.html">Adapters</a> - <a href="links.html">Links</a><br> -</strong></div></td><td background="images/r3i.png"><img src="images/r3i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td><img src="images/l4i.png" border=0 width=32 height=16 alt=""><br></td><td> -</td><td><img SRC="images/r4i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td><img src="images/l6i.png" border=0 width=32 height=16 alt=""><br></td><td background="images/m2i.png"> -<img src="images/m2i.png" border=0 width=32 height=16 alt=""><br></td><td> -<img src="images/r6i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td><img src="images/l2i.png" border=0 width=32 height=16 alt=""><br></td><td> -</td><td><img SRC="images/r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td background="images/l3i.png"><img src="images/l3i.png" border=0 width=32 height=16 alt=""><br></td><td> +</strong></div></td><td background="r3i.png"><img src="r3i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td><img src="l4i.png" border=0 width=32 height=16 alt=""><br></td><td> +</td><td><img SRC="r4i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td><img src="l6i.png" border=0 width=32 height=16 alt=""><br></td><td background="m2i.png"> +<img src="m2i.png" border=0 width=32 height=16 alt=""><br></td><td> +<img src="r6i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td><img src="l2i.png" border=0 width=32 height=16 alt=""><br></td><td> +</td><td><img SRC="r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td background="l3i.png"><img src="l3i.png" border=0 width=32 height=16 alt=""><br></td><td> <!-----------------------------------------------------------------------------------------------------------> <h2>Related projects</h2> |
From: James S. <jsi...@us...> - 2001-11-03 19:42:24
|
Update of /cvsroot/linuxconsole/ruby/web/htdocs In directory usw-pr-cvs1:/tmp/cvs-serv28999 Modified Files: quick.html Log Message: More web site updates. Index: quick.html =================================================================== RCS file: /cvsroot/linuxconsole/ruby/web/htdocs/quick.html,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- quick.html 2001/11/03 00:15:53 1.3 +++ quick.html 2001/11/03 19:42:21 1.4 @@ -1,21 +1,21 @@ <!DOCTYPE "-//IETF//DTD HTML 3.2//EN" PUBLIC> <html> <head> -<meta name="description" content="Linux Input drivers"> -<meta name="keywords" content="joystick gamepad keyboard mouse wheel force feedback touchpad tablet input device linux driver gnu"> +<meta name="description" content="Linux Console Project"> +<meta name="keywords" content="console terminal TTY serial joystick gamepad keyboard mouse wheel force feedback touchpad tablet input device linux driver gnu"> <title>Linux Input Drivers</title> -<LINK REV=MADE HREF="mailto:vo...@su..."> +<LINK REV=MADE HREF="mailto:jsi...@tr..."> </head> <body text="#000000" bgcolor="#ffffff"> <table border=0 cellspacing=0 cellpadding=0 width="100%" bgcolor="#FFFFFF"> -<tr><td><img SRC="images/l1i.png" border=0 width=32 height=64 alt=""><br></td><td width="100%" background="images/m1i.png"> -<img src="images/title.png" border=0 alt="Linux Input Drivers" width=512 height=64><br></td><td> -<img SRC="images/r1i.png" border=0 width=32 height=64 alt=""><br></td></tr> -<tr><td><img src="images/l2i.png" border=0 width=32 height=16 alt=""><br></td><td></td><td> -<img SRC="images/r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td background="images/l3i.png"><img src="images/l3i.png" border=0 width=32 height=16 alt=""><br></td><td> +<tr><td><img SRC="input/l1i.png" border=0 width=32 height=64 alt=""><br></td><td width="100%" background="input/m1i.png"> +<img src="input/title.png" border=0 alt="Linux Input Drivers" width=512 height=64><br></td><td> +<img SRC="input/r1i.png" border=0 width=32 height=64 alt=""><br></td></tr> +<tr><td><img src="input/l2i.png" border=0 width=32 height=16 alt=""><br></td><td></td><td> +<img SRC="input/r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td background="input/l3i.png"><img src="input/l3i.png" border=0 width=32 height=16 alt=""><br></td><td> <div align=center><strong> <a href="index.html#introduction">Introduction</a> - @@ -28,15 +28,15 @@ <a href="adapters.html">Adapters</a> - <a href="input_links.html">Links</a><br> -</strong></div></td><td background="images/r3i.png"><img src="images/r3i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td><img src="images/l4i.png" border=0 width=32 height=16 alt=""><br></td><td> -</td><td><img SRC="images/r4i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td><img src="images/l6i.png" border=0 width=32 height=16 alt=""><br></td><td background="images/m2i.png"> -<img src="images/m2i.png" border=0 width=32 height=16 alt=""><br></td><td> -<img src="images/r6i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td><img src="images/l2i.png" border=0 width=32 height=16 alt=""><br></td><td> -</td><td><img SRC="images/r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td background="images/l3i.png"><img src="images/l3i.png" border=0 width=32 height=16 alt=""><br></td><td> +</strong></div></td><td background="input/r3i.png"><img src="input/r3i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td><img src="input/l4i.png" border=0 width=32 height=16 alt=""><br></td><td> +</td><td><img SRC="input/r4i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td><img src="input/l6i.png" border=0 width=32 height=16 alt=""><br></td><td background="input/m2i.png"> +<img src="input/m2i.png" border=0 width=32 height=16 alt=""><br></td><td> +<img src="input/r6i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td><img src="input/l2i.png" border=0 width=32 height=16 alt=""><br></td><td> +</td><td><img SRC="input/r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td background="input/l3i.png"><img src="input/l3i.png" border=0 width=32 height=16 alt=""><br></td><td> <!-----------------------------------------------------------------------------------------------------------> <h2>Quick Start</h2> @@ -82,9 +82,9 @@ <p> <code> -wget ftp://ftp.kernel.org/pub/linux/kernel/v2.4/linux-2.4.0-test1.tar.bz2<br> +wget ftp://ftp.kernel.org/pub/linux/kernel/v2.4/linux-2.4.13.tar.bz2<br> mv linux linux-old<br> -tar xIvf linux-2.4.0-test1.tar.bz2<br> +tar xIvf linux-2.4.13.tar.bz2<br> </code> <p> @@ -111,9 +111,84 @@ </code> <p> -This part is a little tricky. You have to select quite a bunch of options to -have your system operate correctly. For a most usual setup with a PS/2 mouse -and a AT keyboard you need to select: +You will see because the subsystems that compose the different types of +TTYs can exist independently that even the main menu has changed. You will +noticed in the top level menu we now have: +<p> + +<code> +Parallel port support ---><br> +Serial drivers ---><br> +Block devices ---><br> +</code> +<p> + +and we have: +<p> + +<code> +USB support ---><br> +Input device support ---><br> +Character devices ---><br> +</code> +<p> + +This order is important since the devices in the next menu depend on the +devices before them. + +Also we have renamed the Console driver menu to: +<p> + +<code> +Video ---><br> +</code> +<p> + +The Serial Driver menu selects the new experimental serial drivers based on +Russel King's code from the ARM tree. We have taken this code to make it less +and less TTY dependent. This menu comes before the input and char menus since +alot of things are effected by this. If you select the new serial drivers you +can't select the old drivers. This prevents clashs. If you decided to try out +the new serial drivers you will see: +<p> + +<code> + Serial port support<br> +</code> +<p> + +If you enable it for the ix86 platform you will see: +<p> + +<code> + Serial port support<br> + 8250/16550 and compatible serial support (EXPERIMENTAL) (NEW)<br> +</code> +<p> + +Now if you enable 8250/16550 support you will see support for a serial console +on the 8250/16550. You will also see support for extended options for more +advance 16550 types devices. Enabling extended options you will end up seeing: +<p> + +<code> + Serial port support<br> + 8250/16550 and compatible serial support (EXPERIMENTAL) (NEW)<br> + Console on 8250/16550 and compatible serial port (EXPERIMENTAL)<br> + Extended 8250/16550 serial driver options<br> + Support more than 4 serial ports<br> + Support for sharing serial interrupt<br> + Autodetect IRQ on standard ports (unsafe)<br> + Support special multiport boards<br> + Support Bell Technologies HUB6 card<br> +</code> +<p> + +Now you have finished the serial configuration if you decided to give it a +try we go onto configuring your Input Drivers. This part is a little tricky. +You have to select quite a bunch of options to have your system operate +correctly. For a most usual setup with a PS/2 mouse and a AT keyboard you +need to select: <p> <code> @@ -123,9 +198,20 @@ AT and PS/2 keyboards<br> PS/2 mouse<br> Mouse interface<br> + Event interface<br> </code> <p> +The reason for this is because the i8042 chipset that controls PS/2 devices +is used on many platforms. A result of this is often the way to program the +chip varies. So the input api was designed to be modular for this. This +allows us to use the same PS/2 keybaord driver on different platforms. It +is the underlying driver for the chipset that could vary. For example I can +use the same PS/2 keyboard for my intel box as well as for the iPAQ I have. +I have a special adaptor that allows me to plug in my PS/2 keyboard into a +iPAQ. +<p> + For a setup with an USB mouse and keyboard you'd use: <p> @@ -139,9 +225,19 @@ Input device support<br> USB Human Interface Device<br> Mouse interface<br> + Event interface<br> </code> <p> +The USB selection above will be in the USB menu. +<p> +Please note the Event +interface can be used with any type of input device. +This is how we can access keyboards with a tty as well as talk to touchscreens, +joysticks, mice, and other various devices in a standard way. The mouse +interface is for backwards compatibality. Please use the Event interface for +userland apps. + For serial mice you need: <p> @@ -150,13 +246,16 @@ Serial port input line discipline<br> Serial mouse<br> Mouse interface<br> + Event interface<br> </code> <p> And in your init scripts a call to the inputattach utility (can be found in the utils subdir in the ruby tree). See the help for this utility about what the command line will be for your mouse - there are quite a couple different -types of them. +types of them. Over time the inputattach utility has grow to be used with a +varity of different types of serial devices besides mice. We hope with the +serial layer being written that in the future you will not need this. <p> <code> @@ -178,7 +277,80 @@ For other joystick types and gameport types you can select other joystick and gameport drivers if you have them. The same for mice, keyboards and other drivers. + +Please note the Event interface can be used with any type of input device. +This is how we can access keyboards with a tty as well as talk to touchscreens, +joysticks, mice, and other various devices in a standard way. The mouse +interface is for backwards compatibality. Please use the Event interface for +userland apps. +<p> + +Now that you have all your input devices configured now to the graphics +devices and the VT layer. Remember you don't need the Console system to +access your keyboard, but you do need Input support for the VT Console +system. The same is also true for the framebuffer drivers. Go from the +top menu into: +<p> + +<code> +Character devices ---><br> +</code> <p> + +Now you will see something like: +<p> + +<code> + Virtual terminal<br> + Support for console on virtual terminal<br> +</code> +<p> + +You need to enable these if you want standard VT support. Now for say +a embedded device which lacks a keyboard you don't need to select this. +You can just use the input layer to access your device instead and the +framebuffer to access the display if it has one. + +If you don't see: +<p> + +<code> + Standard/generic (8250/16550 and compatible UARTs) serial support<br> +</code> +<p> + +This just means you will use the new serial drivers instead. Select the other +devices you need in the character menu and then we can go onto the Video menu. + +When you enter the video menu you will see either: +<p> + +<code> + Support for frame buffer devices (EXPERIMENTAL)<br> + Frame-buffer support ---><br> +</code> +<p> + +You would see the above if you didn't select VT support. This would be +what you would want for a embedded device lacking a keyboard. Or if we +selected VT support we see: +<p> + +<code> + Support for frame buffer devices (EXPERIMENTAL)<br> + Frame-buffer support ---><br> + --- Console drivers<br> + VGA text console<br> + Video mode selection support<br> + MDA text console (EXPERIMENTAL)<br> + NVIDIA hardware text console<br> + Support for frame buffer console<br> + Select compiled-in fonts<br> +</code> +<p> + +Even with VT support we still can select framebuffer support without +framebuffer console support. When you're done with configuring the kernel, you compile and install it (make sure your /etc/lilo.conf has an entry for this new kernel): |
From: James S. <jsi...@us...> - 2001-11-03 18:02:04
|
Update of /cvsroot/linuxconsole/ruby/web/htdocs In directory usw-pr-cvs1:/tmp/cvs-serv32110 Modified Files: index.html Log Message: Much needed updates to the web site. You can see it at http://linuxconsole.sf.net/new Index: index.html =================================================================== RCS file: /cvsroot/linuxconsole/ruby/web/htdocs/index.html,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- index.html 2001/11/03 00:15:53 1.2 +++ index.html 2001/11/03 18:02:02 1.3 @@ -1,7 +1,7 @@ <!doctype HTML public "-//W3O//DTD W3 HTML 3.2//EN"> <HTML> <HEAD> -<link rev=made href=mailto:es...@sn...> +<link rev=made href=mailto:jsi...@tr...> <meta name="description" content="Home page of the Linux Console Project"> <meta name="keywords" content="linux, input, framebuffer, vga, mda, console, ANSI, ECMA-48"> <TITLE>The Linux Console Project</TITLE> @@ -19,80 +19,134 @@ <H1>Charter and Objectives:</H1> -Our charter is to clean up and properly maintain the Linux console -sub system. There has been scattered work on the console going on for -some time. This project will try to pull it all together into a -coherent architecture from which we can generate clean patches +Our charter is to clean up and properly maintain the Linux console/TTY +sub system. There has been scattered work on the console and TTY layer +going on for some time. This project will try to pull it all together +into a coherent architecture from which we can generate clean patches for Linus and the core kernel team.<p> -Right now the console subsystem has a couple of problems: +Right now the console subsystem and the subsystems that are depended on +it have a couple of problems as well as some design issues which need +to be address for todays needs: <ol> <li> <li>Terminal emulation is much too intertwined with the lower - levels of the console implementation (e.g. fbdev). Eventually - terminal emulations should be loadable modules.<p> + levels of the console implementation. Eventually terminal + emulations should be loadable modules and/or easily replacable.<p> + +<li>The various subsystems are intertwined with the console system. + Things like the serial, framebuffer, and input layer should be + able to exist independent of the console/TTY layer. Especially + on embedded devices this is important.<p> +<li>The console system is to vga centeric in design. We designed it + to be more platform independent.<p> + <li>The built-in ANSI X3.64/ECMA-48 terminal emulation is incomplete and in some respects incorrect.<p> </ol> -There's demand for many features that have not yet been implemented. -These include: +<H1> New Features:</H1> <ul> -<li> Multi-head operation -- console instances running on multiple - (possibly dissimilar) video cards. +<li> Multi-desktop operation -- console instances running on multiple + (possibly dissimilar) video cards and seperate keyboards. +<li> With the new console locking mechanism the underlying drivers can + be DMA/irq based for maximum speed. +<li> Much simpler framebuffer api. Plus with the new design it is possible + to use framebuffer devices without a VT. +<li> The console system input system is based solely on the input api. This + allows for things like a universal keymap. No more compiling in new + keymaps for every type of different keybaords out their. Plus with this + design it is possible to use a keyboard without the console system. +<li> New serial API. The serial layer is more like the parport layer now. + Having to using the TTY layer for something like a serial mouse is + plain silly. The idea is to create a basic serial API and register + device interfaces. For a modem youwould want to register a TTY interface + whereas for a serial mouse or joystick we woudl want to register a + interface for the input api. +<li> Support for hot plug. We can add or remove graphics cards or even + keyboards to create new desktop VTs. <li> A scrollback buffer implemented in the console itself. -<li> Support for different fonts, keymaps, and textmodes per VC. -<li> Better Unicode support. +<li> Support for different fonts, and textmodes per VC. +<li> Better Unicode support. You will be able to display Kanji on the + command line. Bidirectional support. +<li> Not really apart of the console system, force feedback is a important + element to the input layer that this project is also working. </ul> -<H1>Deliverables:</H1> +<H1>Project Status and News:</H1> -This project aims to deliver these things:<p> -<ol> -<li> -Ruby: A line of patches for 2.4.x that implements the heavy stuff; fbdev -refactoring, multihead, scrollback, etc. These can't go in until 2.5.x.<p> -</ol> +Development is moving fast. Since we cover alot of areas of the linux kernel +we have seperate links to pages that have developements to each different +sub system<p> -<H1>Project Status:</H1> +<a href="input/input.html">Input API</a> -Development is moving fast.<p> +<H1>Getting Involved</H1> + +So you like to try out this new system or even better yet contribute. If you +like to give it a try <a href="quick.html">click here</a> for instructions. +Once it try it out we know you will have questions or just want to tell you +your experiences we have a public developement mailing list. Also our list +is archived. If you like to join follow this <a +href="http://lists.sourceforge.net/lists/listinfo/linuxconsole-dev">link</a>. + +Now if you like to get your hands dirty an get invloved I recommend going our +<a href="http://lists.sourceforge.net/lists/listinfo/linuxconsole-commit">CVS +commit mailing list</a>. Here you will see all the changes going on. A must +for developers and a great way to learn how the new TTY/console layer works. +Plus each page for subscribing has a link to the maling list archives.<p> + +Last but not least is our <a href="http://sourceforge.net/project/?group_id=3063">SourceForge page</a>.<p> + +<H1>Documentaion:</H1> + + Will fill in later.<p> + <H1>People:</H1> <dl> <dt> <a href="mailto:jsi...@tr...">James Simmons</a> <dd> Project admin on SourceForge. The release master. - Doing fbdev refactoring, multihead support.<p> + Developing the new fbdev API, multihead support, and the + core console code.<p> <dt><a href="mailto:dom...@un...">Dominik Kubla</a> -<dd> Doing ANSI/ECMA-48 terminal emulation coding.<p> +<dd> Wrote the ANSI/ECMA-48 terminal emulation code and designed + the terminal emulation modular design.<p> +<dt><a href="vo...@su...">Vojtech Pavlik</a> +<dd> Co-Maintainer of this project. Developing the input API and + writing most of the core input drivers.<p> + +<dt><a href="mailto:dom...@un...">Dominik Kubla</a> +<dd> Wrote the ANSI/ECMA-48 terminal emulation code and designed + the terminal emulation modular design.<p> + <dt><a href="mailto:es...@th...">Eric S. Raymond</a> -<dd>Project webmaster, co-admin, and documentation person. Interested - in terminfo and ANSI conformance. (Eric maintains the master - terminfo file.)<p> +<dd> Worked with Dominik to develope better temrinal emulation. Interested + in terminfo and ANSI conformance. (Eric maintains the master + terminfo file.)<p> -<dt><a href="vo...@su...">Vojtech Pavlik</a> -<dd>Interested in input device refactoring. +<dd>And many others who have put time in and helped develope various parts + of the code. Thank you.<p> </dl> <H1>Related Resources:</H1> <ul> -<li>Our <a -href="http://sourceforge.net/project/?group_id=3063">SourceForge page</a>.<p> +<li>The <a href="http://www.linux-fbdev.org">Framebuffer</a> Homepage.<p> <li>Dominik Kubla's <a href="http://www-klinik.uni-mainz.de/staff/kubla/Linux/">emulation patches</a>; -these will probably be the basis of our first two deliverables.<p> +these are the basis of our terminal emulation code.<p> <li>Vojtech Pavlik's <a -href="input/input.html">input drivers</a>, a +href="http://www.suse.cz/developement/input">input drivers</a>, a previous effort in this direction which we have integrated.<p> <li> |
From: James S. <jsi...@us...> - 2001-11-03 15:46:49
|
Update of /cvsroot/linuxconsole/ruby/docs In directory usw-pr-cvs1:/tmp/cvs-serv6023 Added Files: FB-Driver-HOWTO Log Message: Added in text version of the framebuffer driver HOWTO. Need to update it. --- NEW FILE: FB-Driver-HOWTO --- Linux Framebuffer Driver writing HOWTO James Simmons, jsi...@ed... v1.00, 9 October 1999 This document describes how to support a framebuffer video card for Linux. It lists the supported video hardware, describes how to program the kernel drivers, and answers frequently asked questions. The goal is to bring current framebuffer driver writers as well as new ones up to speed on the new developments accuring in the graphics system for linux. ______________________________________________________________________ Table of Contents 1. Introduction 1.1 Acknowledgments 1.2 Revision History 1.3 New versions of this document [...1011 lines suppressed...] |
From: James S. <jsi...@us...> - 2001-11-03 00:24:37
|
Update of /cvsroot/linuxconsole/ruby/web/htdocs/fbdev In directory usw-pr-cvs1:/tmp/cvs-serv21418 Added Files: mlist.html Log Message: Add links to other mailing list. --- NEW FILE: mlist.html --- <HTML> <HEAD> <TITLE></TITLE> </HEAD> <BODY aLink=#ff0000 bgColor=#ffffff link=#0000ff text=#000000 vLink=#551a8b> <h3><font face="Arial, Helvetica, sans-serif">1. What is the Linux Frame Buffer mailing list?</font></h3> <p>The Linux Frame Buffer mailing list is used for devlopers to communicate with each other about various subjects ranging from development of the API that the drivers use to issues with driver development itself. Bug reports and any other questions relating to frame buffer drivers are welcome here. </p> <h3><font face="Arial, Helvetica, sans-serif">2. How do I subscribe to the mailing list?</font></h3> <p>Follow the link below.</p> <p><A href="http://lists.sourceforge.net/lists/listinfo/linux-fbdev-devel/">Linux framebuffer developement mailing list</A></p> <p><A href="http://lists.sourceforge.net/lists/listinfo/linux-fbdev-announce/">Linux Framebuffer Announcement List</A></p> <p><A href="http://lists.sourceforge.net/lists/listinfo/linux-fbdev-users/">Linux Framebuffer Users List</A></p> </font></PRE> <h3><font face="Arial, Helvetica, sans-serif">3. What other options are there?</font></h3> <p>If you don't think you need to subscribe to the mailing list, but are still interested, there is a searchable archive at the same above links! Also if you are interested in posting from the old mailing list just point your browser to <a href="http://www.mail-archive.com/lin...@vu...">www.mail-archive.com/lin...@vu...</a><font face="Courier New, Courier, mono">.</font></p> <p><font face="Courier New, Courier, mono"><br> </font></p> </BODY> </HTML> |
From: James S. <jsi...@us...> - 2001-11-03 00:24:02
|
Update of /cvsroot/linuxconsole/ruby/web/htdocs/fbdev/HOWTO In directory usw-pr-cvs1:/tmp/cvs-serv21324 Added Files: 1.html 2.html 3.html 4.html index.html Log Message: Adding HOWTO to show how to create a framebuffer device with the new api. The stuff right now is based on my original ideas. So it needs to be updated. --- NEW FILE: 1.html --- <html> <head> <title>Linux Framebuffer Driver Writing HOWTO</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body bgcolor="#FFFFFF"> <h2><font face="Arial, Helvetica, sans-serif">1. Introduction</font></h2> <hr width="100%" size="2"> <p><font face="Arial, Helvetica, sans-serif">This is the Linux Framebuffer driver HOWTO. It is intended as a quick reference covering everything you need to know to write a framebuffer video driver under Linux. Frequently asked questions about video mode setting under Linux are answered, and references are given to some other sources of information on a variety of topics related to computer graphics. Also, read this document not once, not twice but three times if you are not familiar with video hardware.</font></p> <p><font face="Arial, Helvetica, sans-serif">The scope is limited to the aspects of writing a mode setting video card framebuffer driver pertaining to Linux. listed See the other documents in the References section for more general information on how to setup framebuffer cards and setting up the XFB_Dev X server.</font></p> <h3><font face="Arial, Helvetica, sans-serif">1.1. Acknowledgments</font></h3> <p><font face="Arial, Helvetica, sans-serif">Much of this information came from the new framebuffer internal API being developed by me for the upcoming next series of kernels. Originally, this was based on a patch by Fabrice Bellard. I learned of this patch and was impressed by it. Later, I took over development and improved it even more. Much thanks goes to Fabrice for getting the ball rolling. This API is a natural extension of the original API developed by Martin Schaller and now maintained by Geert Uytterhoeven (<a href="mailto:ge...@li...">ge...@li...</a>). Thanks go to you and the many others who developed the Linux framebuffer system, drivers and utilities. A great amount of thanks goes to Andreas Beck of the GGI project for helping me write this document and teaching me about mode setting. Thanks also go out to those who have supported my work. </font></p> <p><font face="Arial, Helvetica, sans-serif">Thanks to the SGML Tools package, this HOWTO is available in several formats, all generated from a common source file.</font></p> <h3><font face="Arial, Helvetica, sans-serif">1.2. Revision History</font></h3> <p><font face="Arial, Helvetica, sans-serif">Version 1.0</font></p> <p><font face="Arial, Helvetica, sans-serif">First version; posted to fbdev mailing list only.</font></p> <h3><font face="Arial, Helvetica, sans-serif">1.3. New versions of this document</font></h3> <p><font face="Arial, Helvetica, sans-serif">New versions of this document will be periodically posted to the comp.os.linux.answers newsgroup. They will also be uploaded to various anonymous ftp sites that archive such information including <a href="ftp://metalabs.unc.edu/pub/Linux/docs/HOWTO/">ftp://metalabs.unc.edu/pub/Linux/docs/HOWTO/</a>>. Hypertext versions of this and other Linux HOWTOs are available on many World-Wide-Web sites, including <<a href="http://metalab.unc.edu/LDP/">http://metalab.unc.edu/LDP/</a>>. Most Linux CD-ROM distributions include the HOWTOs, often under the /usr/doc directory, and you can also buy printed copies from several vendors. Sometimes the HOWTOs available from CD-ROM vendors, ftp sites, and printed format are out of date. If the date on this HOWTO is more than six months in the past, then a newer copy is probably available on the Internet.</font></p> <p><font face="Arial, Helvetica, sans-serif">Most translations of this and other Linux HOWTOs can also be found at <<a href="http://sunsite.unc.edu/pub/Linux/docs/HOWTO/translations/">http://sunsite.unc.edu/pub/Linux/docs/HOWTO/translations/</a>> and <<a href="ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/translations/">ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/translations/</a>>.</font></p> <p><font face="Arial, Helvetica, sans-serif">If you make a translation of this document into another language, let me know and I'll include a reference to it here. As of yet there are no translations.</font></p> <h3><font face="Arial, Helvetica, sans-serif">1.4. Feedback</font></h3> <p><font face="Arial, Helvetica, sans-serif">I rely on you, the reader, to make this HOWTO useful. If you have any suggestions, corrections, or comments, please send them to me, <<a href="mailto:jsi...@ac...">jsi...@ac...</a>>, and I will try to incorporate them in the next revision.</font></p> <p><font face="Arial, Helvetica, sans-serif">I am also willing to answer general questions on video cards and fbcon under Linux as best I can. Before doing so, please read all of the information in this HOWTO and send me detailed information about the problem. Please do not ask me about using framebuffer cards under operating systems other than Linux.</font></p> <p><font face="Arial, Helvetica, sans-serif">If you publish this document on a CD-ROM or in hardcopy form, a complimentary copy would be appreciated. Mail me for my postal address. Also, consider making a donation to the Linux Documentation Project to help support free documentation for Linux. Contact the Linux HOWTO coordinator, Tim Bynum <<a href="mailto:lin...@su...">lin...@su...</a>>, for more information.</font></p> <h3><font face="Arial, Helvetica, sans-serif">1.5. Distribution Policy</font></h3> <p><font face="Arial, Helvetica, sans-serif">Copyright (c) 1999 by James Simmons. This document may be distributed under the terms set forth in the LDP license at <<a href="http://sunsite.unc.edu/LDP/COPYRIGHT.html">http://sunsite.unc.edu/LDP/COPYRIGHT.html</a>>.</font></p> <p align="center"><font face="Arial, Helvetica, sans-serif"><a href="index.html">index</a> <a href="2.html">forward</a></font></p> </body> </html> --- NEW FILE: 2.html --- <html> <head> <title>Linux Framebuffer Driver Writing HOWTO</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body bgcolor="#FFFFFF"> <h2><font face="Arial, Helvetica, sans-serif">2. Framebuffer Card Technology</font></h2> <hr width="100%" size="2"> <p><font face="Arial, Helvetica, sans-serif">This section gives a very cursory overview of graphics cards that have accessible framebuffer technology, in order to help you understand the concepts used later in the document. If you are considering writing a driver for a video card please contact the manufacturer for documentation on the card. Also, please consider reading some books on video hardware in order to learn more. </font></p> <p><font face="Arial, Helvetica, sans-serif">The way framebuffer devices behave under Linux is something very similar to /dev/mem. /dev/fb is in fact viewed as a memory device, except in this case the memory is video ram and is mmaped to userspace for direct access. This model is, of course, simplified for the purpose of making programming the frame buffer much easier as well as making it device and platform independent. Since we are interested in building a driver, we need to understand how exactly the video card itself works.</font></p> <h3><font face="Arial, Helvetica, sans-serif">2.1 Monitor</font></h3> <p><font face="Arial, Helvetica, sans-serif">First, lets describe one of the biggest but often overlooked components: the monitor. Today, there exist many types of monitors. Flat screen to LED and so on. For all the many types, the basic principle behind the monitor is the same. Basically, a monitor builds an image sequentially from the data it gets on its input lines. To achieve this, a beam scans over the screen in a kind of "zig-zag" pattern that covers the whole visible part of the screen once per frame. It happens so fast the eye can't see this happening (well, we hope). So which way does this beam go? All monitors have chosen to always go left to right with a quick jump back to the far left when we hit the right boundary of the monitor. Same goes for the top to bottom approach, but at a much slower pace since most of our time is used to move left to right for every single line. Obviously, the displayed data needs to be synchronized with the current position of the beam to be able to build a steady picture. This is what those HSYNC and VSYNC you see in your monitor manual are for. These two lines that say, "hey move the beam to the left now" and "move the ray to the top now". Some systems encode this information. For example, the green channel, which is called sync on green, but that doesn't change the principle. All a monitor knows about a mode is what it gets that's contained in the frequencies with which those signals return. These frequencies are called the horizontal and vertical frequencies (aka refresh rate), as they determine how often per second a whole image is drawn. A monitor knows nothing about depth, clocks, and borders. If two modes have the same frequencies, they will be the same to the monitor. This is why different centering data for e.g. 640x480x16 and 640x480x32 are not stored in the monitor. The monitor can't distinguish between those modes. Between two HSYNC we get the RGB signals.</font></p> <table width="90%" border="0" cellspacing="0" cellpadding="0" align="center"> <tr> <td width="15%"><font face="Arial, Helvetica, sans-serif">HSYNC</font></td> <td width="2%"> </td> <td width="2%"><font face="Arial, Helvetica, sans-serif">/</font></td> <td width="2%"><font face="Arial, Helvetica, sans-serif">-</font></td> <td width="2%"><font face="Arial, Helvetica, sans-serif">\</font></td> <td width="0%"> </td> <td colspan="10"> <hr width="100%" size="2"> </td> <td width="0%"> </td> <td width="2%"><font face="Arial, Helvetica, sans-serif">/</font></td> <td width="0%"><font face="Arial, Helvetica, sans-serif">--</font></td> <td width="5%"><font face="Arial, Helvetica, sans-serif">\</font></td> </tr> <tr> <td width="15%"><font face="Arial, Helvetica, sans-serif">RGB</font></td> <td width="2%"> </td> <td width="2%"> </td> <td width="2%"> </td> <td width="2%"><font face="Arial, Helvetica, sans-serif">data</font></td> <td width="0%"> </td> <td width="7%"><font face="Arial, Helvetica, sans-serif">data</font></td> <td width="7%"><font face="Arial, Helvetica, sans-serif">data</font></td> <td width="7%"><font face="Arial, Helvetica, sans-serif">data</font></td> <td width="7%"><font face="Arial, Helvetica, sans-serif">data</font></td> <td width="7%"><font face="Arial, Helvetica, sans-serif">data</font></td> <td width="7%"><font face="Arial, Helvetica, sans-serif">data</font></td> <td width="7%"><font face="Arial, Helvetica, sans-serif">data</font></td> <td width="7%"><font face="Arial, Helvetica, sans-serif">data</font></td> <td width="7%"><font face="Arial, Helvetica, sans-serif">data</font></td> <td width="7%"><font face="Arial, Helvetica, sans-serif">data</font></td> <td width="0%"> </td> <td width="2%"><font face="Arial, Helvetica, sans-serif">data</font></td> <td width="0%"> </td> <td width="5%"> </td> </tr> <tr> <td width="15%"><font face="Arial, Helvetica, sans-serif">time</font></td> <td width="2%"><font face="Arial, Helvetica, sans-serif">1</font></td> <td width="2%"><font face="Arial, Helvetica, sans-serif">2</font></td> <td width="2%"> </td> <td width="2%"><font face="Arial, Helvetica, sans-serif">3</font></td> <td width="0%"> </td> <td colspan="10"> <hr width="100%" size="2"> </td> <td width="0%"> </td> <td width="2%"><font face="Arial, Helvetica, sans-serif">4</font></td> <td width="0%"> </td> <td width="5%"><font face="Arial, Helvetica, sans-serif">5</font></td> </tr> </table> <p><font face="Arial, Helvetica, sans-serif">At 1, the HSYNC pulse gets raised. The beam will now quickly move to the left. During that time, the RGB lines should be black (ray off), otherwise it would leave a noticeable trace while moving, which would look ugly. </font></p> <p><font face="Arial, Helvetica, sans-serif">At 2, the HSYNC pulse ends. This point isn't of much interest, as you cannot tell, if the ray is already at the left edge. The only thing important about point 2 is, that the time between point 1 and 2 must be sufficiently high for the monitor to detect the HSYNC signal. Usually, the HSYNC pulse can be made very small.</font></p> <p><font face="Arial, Helvetica, sans-serif">At some point after 1, the ray will start flying to the right again. When point 3 comes, it will actually start to display data. Point 3 can thus be adjusted to change the left border location. If you wait longer before you start sending data, the left border will move to the right.</font></p> <p><font face="Arial, Helvetica, sans-serif">When you have sent all data, you reach point 4. As a HSYNC pulse should then be sent to start a new line, we set the RGB lines to black again. At point 5 we have completed a cycle and start the next line.</font></p> <h3><font face="Arial, Helvetica, sans-serif">2.2 Video card </font></h3> <p><font face="Arial, Helvetica, sans-serif">Next, we look at the video card point of view. The video card could send out a steady stream of data to the monitor except for one thing. The monitor needs time for retracing so the video card will be put into some "delay" at specific times. To be precise between point 4 and point 1 on the NEXT line on the previous diagram. For the video card, the "natural" coordinate system starts at point 3, when it starts emitting data. This point usually causes some confusion with modeline calculation:</font></p> <p><font face="Arial, Helvetica, sans-serif">HSYNC __/~~~\______________________________________________/~~~\___</font></p> <p><font face="Arial, Helvetica, sans-serif">RGB ___________datadatadatadatadatadatadatadatadatad_____________</font></p> <p><font face="Arial, Helvetica, sans-serif">time 1 2 3 4 5 6</font></p> <p><font face="Arial, Helvetica, sans-serif">grc SS SE 0 W SS SE</font></p> <p><font face="Arial, Helvetica, sans-serif">From the graphics card point of view (grc), a line starts at "0". From that point onward, it will output the data in its video ram. There is a counter that will limit the number of pixels that are put on one line. This is what we call the width of the mode. On a 640x480 standard VESA mode, this is 640 pixels. </font></p> <p><font face="Arial, Helvetica, sans-serif">We will usually want a small right border to allow the monitor to prepare for the following SYNC pulse we will generate. The aforementioned counter will run on (but data output from video RAM will be suppressed) until we reach the point SS (SyncStart). On a 640x480 standard VGA mode, this happens at 664 pixels. That is, we left a border of 24 pixels.</font></p> <p><font face="Arial, Helvetica, sans-serif">Now we raise the HSYNC to tell the monitor to go left. This signal remains asserted until we reach the point SE (SyncEnd). (760 pixels on VGA - i.e. 96 pixels of sync pulse. This is pretty long, but VGA monitors weren't very quick.)</font></p> <p><font face="Arial, Helvetica, sans-serif">We will also want some left border, so we wait until we reach the next "0" point before starting to generate a signal again. On standard VGA this happens at 800 pixels (40 pixels left border). At that point, we reset the counter to 0 and start over. This point is usually called the "total" for this reason.</font></p> <p><font face="Arial, Helvetica, sans-serif">Now let us look at how we can change the picture's appearance by changing values in such a modeline.</font></p> <p><font face="Arial, Helvetica, sans-serif">Moving SE should not cause any difference at all, except if you make the sync pulse too small for the monitor to recognize.</font></p> <p><font face="Arial, Helvetica, sans-serif">Moving SS and SE together will move the location of the sync pulse within the picture. Let us assume we move them both to the "left", i.e. we decrease their startpoints. What happens is, that we decrease the distance W-SS (which determines the right border) and increase 0-SE (the left border). As a result, the picture moves to the right.</font></p> <p><font face="Arial, Helvetica, sans-serif">Now what happens, if you change W? You get extra pixels at the right border. As usually borders are pretty large for standard VGA modes, you can usually display something like 648x486 without a problem on a standard VGA monitor. You will not be able to see the difference.</font></p> <p><font face="Arial, Helvetica, sans-serif">Of course, there are limits to this: If you go too far, you will produce pixels beyond the visible area of the monitor (which is useless), or interfere with the retrace, what gives ugly stripes from the retracing CRT ray.</font></p> <p><font face="Arial, Helvetica, sans-serif">Now let's shed some light on a few remaining terms:</font></p> <p><font face="Arial, Helvetica, sans-serif">BlankStart BS and BlankEnd BE. Between SE and 0, you can put a BE point on many graphics cards. At that point, the RGB lines are no longer clamped to black (to avoid interfering with the retrace), but can be programmed to a border color. The same goes for BS, which can be placed between W and SS. Usually, one doesn't use that feature nowadays, as we have tunable monitors that allow stretching the mode to the physical limits of the monitor.</font></p> <p><font face="Arial, Helvetica, sans-serif">On old monitors, one used large borders to ensure the data was always visible. There, the border color made some sense as kind of eye candy.</font></p> <p><font face="Arial, Helvetica, sans-serif">Pixelclock. That is the rate at which pixels are output to the RGB lines. It is usually the basic unit for all timing values in a graphics card.</font></p> <p align="center"><font face="Arial, Helvetica, sans-serif"> <a href="index.html">index</a> <a href="1.html">back</a> <a href="3.html">forward </a></font></p> </body> </html> --- NEW FILE: 3.html --- <html> <head> <title>Linux Framebuffer Driver Writing HOWTO</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body bgcolor="#FFFFFF"> <h2><font face="Arial, Helvetica, sans-serif">3. Actually calculating a mode</font></h2> <hr width="100%" size="2"> <p><font face="Arial, Helvetica, sans-serif">If you look at the fbdev driver you think yikes. Yes, it's complex, but not as much as you think. A side note about standard modes -- It's a common misconception that graphics cards cannot do anything but the VGA/VESA induced "standard" modes like 640x480, 800x600, 1024x768, 1280x960, ... With most cards, about any resolution can be programmed, though many accelerators have been optimized for the above mentioned modes, so that it is usually NOT wise to use other widths, as one might need to turn OFF accelerator support. So if you write a driver, don't cling to these modes. If the card can handle it, allow any mode.</font></p> <p><font face="Arial, Helvetica, sans-serif">Here, the type of monitor has a big impact on what kind of modes we can have. There are two basic types of monitors: fixed frequency (they usually can do multiple vertical frequencies, though, which are much less critical, as they are much lower) and multifrequency. </font></p> <h3><font face="Arial, Helvetica, sans-serif">3.1 Fixed frequency monitors</font></h3> <p><font face="Arial, Helvetica, sans-serif">The monitor manual says the horizontal frequency (hfreq) is 31.5 kHz.</font></p> <p><font face="Arial, Helvetica, sans-serif">We want to display a given mode, say 640x480.</font></p> <p><font face="Arial, Helvetica, sans-serif">We can now already determine the absolute minimum dotclock we need, as</font></p> <blockquote> <p><font face="Courier New, Courier, mono" size="2">dotclock = horiz_total * hfreq</font></p> </blockquote> <p><font face="Arial, Helvetica, sans-serif">and</font></p> <blockquote> <p><font face="Courier New, Courier, mono" size="2">horiz_total = width + right_border + sync + left_border > width</font></p> </blockquote> <p><font face="Arial, Helvetica, sans-serif">The minimum dotclock computes to 20.16 MHz. We will probably need something around 20% "slack" for borders and sync, so let's say we need about a 24MHz clock. Now we look at the next higher clock our card can handle, which is 25.175 MHz, as we assume we have a VGA compatible card.</font></p> <p><font face="Arial, Helvetica, sans-serif">Now we can compute the horizontal total:</font></p> <blockquote> <p><font face="Courier New, Courier, mono" size="2">horiz_total = dotclock / hfreq = 799.2</font></p> </blockquote> <p><font face="Arial, Helvetica, sans-serif">We can only program this as multiples of 8, so we round to 800. Now, we still need to determine the length and placement of the sync pulse, which will give all remaining parameters.</font></p> <p><font face="Arial, Helvetica, sans-serif">There is no clean mathematical requirement for those. Technically, the sync must be long enough to be detected, and placed in a way that the mode is centered. The centering issue is not very pressing anymore, as digitally controlled monitors are common, which allow to control that externally. Generally, you should place the sync pulse early (i.e. keep right_border small), as this will usually not cause artifacts that would arise from turning on the output again too early when the sync pulse is placed too late.</font></p> <p><font face="Arial, Helvetica, sans-serif">So, if we as a "rule-of-thumb" use a half of the blanking period for the sync and divide the rest as 1/3 right-border, 2/3 left border, we get a modeline of:</font></p> <blockquote> <p><font face="Arial, Helvetica, sans-serif">"640x480" 25.175 640 664 744 800 ??? ??? ??? ???</font></p> </blockquote> <p><font face="Arial, Helvetica, sans-serif">While this is not perfectly the same as a standard VGA timing, it should run as well on VGA monitors. The sync is a bit shorter, but that shouldn't be a real problem.</font></p> <p><font face="Arial, Helvetica, sans-serif">Now, for the vertical timing. At 480 lines, a VGA monitor uses 60Hz.</font></p> <blockquote> <p><font face="Courier New, Courier, mono" size="2">hfreq = vfreq * vert_total</font></p> </blockquote> <p><font face="Arial, Helvetica, sans-serif">This yields a vert_total=525. The vertical timings usually use much less overhead than the horizontal ones, as here we count whole lines. This means much longer delays than just pixels. 10% overhead will suffice here and we again split the borders 1/3: 2/3, with only a few lines (say 2) for the sync pulse, as this is already much longer than a HSYNC and thus easily detectable.</font></p> <blockquote> <p><font face="Arial, Helvetica, sans-serif">"640x480" 25.175 640 664 744 800 480 495 497 525</font></p> </blockquote> <p><font face="Arial, Helvetica, sans-serif">Let us compare that to an XF86 modeline that claims to be standard VGA:</font></p> <blockquote> <p><font face="Arial, Helvetica, sans-serif">Modeline "640x480" 25.175 640 664 760 800 480 491 493 525</font></p> </blockquote> <p><font face="Arial, Helvetica, sans-serif">Not much difference - right? They should both work well, just a little shifted against each other vertically.</font></p> <h3><font face="Arial, Helvetica, sans-serif">3.2 Multiscan monitor</font></h3> <p><font face="Arial, Helvetica, sans-serif">Here we will consider a theoretical monitor that can do hfreq 31-95kHz and vfreq 50-130Hz. Now, let's look at a 640x480 mode. Our heuristics say, that we will need about 768x528 (20% and 10% more) for borders and sync. We want a maximum refresh rate, so let's look what limits the mode:</font></p> <blockquote> <p><font face="Courier New, Courier, mono" size="2">hfreq = vfreq * vtotal = 130 * 528 = 68.6 kHz</font></p> </blockquote> <p><font face="Arial, Helvetica, sans-serif">Oh - we cannot use the full hfreq of our monitor... well no problem. What counts is the vfreq, as it determines how much flicker we see.</font></p> <p><font face="Arial, Helvetica, sans-serif">O.K. - what pixelclock will we need? </font></p> <blockquote> <p><font face="Courier New, Courier, mono" size="2">pixclock = hfreq * htotal</font></p> </blockquote> <p><font face="Arial, Helvetica, sans-serif">The calculation yields 52.7MHz. </font></p> <p><font face="Arial, Helvetica, sans-serif">Now we look what the card can do. Say we have a fixed set of clocks. We look what clocks we have close by. Assume the card can do 50 and 60 MHz.</font></p> <p><font face="Arial, Helvetica, sans-serif">Now we have a choice: We can either use a lower clock, thus scaling down the refresh rate a bit (by 5% ... so what...): This is what one usually does.</font></p> <p><font face="Arial, Helvetica, sans-serif">Or we can use a higher clock, but this would exceed the monitor specifications. That can be countered by adding more border, but this is usually not done, as it is a waste of space on the screen. However, keep it in mind as a trick for displaying 320x200, when you do not have doubling features. It will display in a tiny window in the middle of the screen, but it will display.</font></p> <p><font face="Arial, Helvetica, sans-serif">O.K. - what will our calculation yield?</font></p> <blockquote> <p><font face="Arial, Helvetica, sans-serif">"640x480" 50 640 664 728 768 480 496 498 528 <i># 65kHz 123Hz</i></font></p> </blockquote> <p><font face="Arial, Helvetica, sans-serif">I just mentioned doubling features. This is how VGA does 320x200. It displays each pixel twice in both directions. Thus it effectively is a 640x400 mode. If this would not be done, you would need a pixelclock of 12.59MHz and you would still have the problem of needing a 140Hz refresh, if hsync should stay at 31.5kHz.</font></p> <p><font face="Arial, Helvetica, sans-serif">A horizontal doubling feature allows us to use the 25.175MHz clock intended for 640, and a line-doubling feature keeps the vsync the same as 400 lines. Actually the line-doubler is programmable, so you can as well use modes as sick as 640x50.</font></p> <p><font face="Arial, Helvetica, sans-serif">O.K. - another example. Same monitor, 1280x1024.</font></p> <p><font face="Arial, Helvetica, sans-serif">Now we need about 1536x1126 total (same rule of thumb). That yields 130Hz*1126lines = 146 kHz. We would exceed the hfreq with that, so now the hfreq is the limit and we can only reach a refresh rate of about (95kHz/1126) 84 Hz anymore.</font></p> <p><font face="Arial, Helvetica, sans-serif">The required clock is now 146MHz. That would yield:</font></p> <blockquote> <p><font face="Arial, Helvetica, sans-serif">"1280x1024" 146 1280 1320 1448 1536 1024 1058 1060 1126 <i># 95kHz 84Hz</i></font></p> </blockquote> <p><font face="Arial, Helvetica, sans-serif">Now the clock might be programmable, but keep in mind that there may be limits to the clock. <b>DO NOT OVERCLOCK</b> a graphics card. This will result in the RAMDAC producing blurry images (as it cannot cope with the high speed), and more importantly, the RAMDAC will OVERHEAT and might be destroyed.</font></p> <p><font face="Arial, Helvetica, sans-serif">Another issue is memory bandwidth. The video memory can only give a certain amount of data per time unit. This often limits the maximum clock at modes with high color depth (i.e. much data per pixel). In the case of my card, it limits the clock to 130MHz at 16-bit depth, which would produce:</font></p> <blockquote> <p><font face="Arial, Helvetica, sans-serif">"1280x1024" 130 1280 1320 1448 1536 1024 1058 1060 1126 <i># 85kHz 75Hz</i></font></p> </blockquote> <p><font face="Arial, Helvetica, sans-serif">This is pretty much what my monitor shows now, if I ask it.</font></p> <h3><font face="Arial, Helvetica, sans-serif">3.3 Recipe for multisync monitors</font></h3> <p><font face="Arial, Helvetica, sans-serif">a) Determine the totals by calculating htotal = width*1.2 and vtotal = height*1.1.</font></p> <p><font face="Arial, Helvetica, sans-serif">b) Check what limits the refresh rate by calculating vfreq2 = hfreqmax/vtotal. If that exceeds vfreqmax, the limit is on the vfreq side and we use vfre = vfreqmax and hfreq = vfreqmax*vtotal. If it doesn't, the mode is limited by hfreq and we have to use vfreq = vfreq2. Note, that if this is smaller than vfreqmin, the mode cannot be displayed. In the vfreq-limited case, you might exceed hfreqmin, which can be countered by using line doubling facilities, if available. You can also add extra blank lines (increase vtotal) as a last-resort alternative.</font></p> <p><font face="Arial, Helvetica, sans-serif">c) Now that you have hfreq and vfreq, calculate the pixel clock using pixclock=hfreq*htotal. Use the next lower pixel clock. If you are below the lowest clock, you might want to try horizontal doubling features or you will have to pad the mode by increasing htotal.</font></p> <p><font face="Arial, Helvetica, sans-serif">d) Again, check the monitor limits. You might be violating lower bounds now... In that case you might need to resort to choosing a higher clock and padding as well.</font></p> <p><font face="Arial, Helvetica, sans-serif">e) You now have pixclock, width, height, htotal and vtotal. Calculate the sync start positions: hss=width+(htotal-width)/2/3; vss=height+(vtotal-height)/3. Make sure to properly align them as required by the video card hardware. hss usually has to be a multiple of 8.</font></p> <p><font face="Arial, Helvetica, sans-serif">f) SyncEnd is calculated similarly: hse=hss+(htotal-width)/2 and vse=vss+2.</font></p> <h3><font face="Arial, Helvetica, sans-serif">3.4 Recipe for Monosync</font></h3> <p><font face="Arial, Helvetica, sans-serif">a) Calculate the number of lines. As hfreq and vfreq are given, vtotal is fixed: vtotal=hfreq/vfreq. If there are multiple vfreqs allowed, choose them according to your desired vtotal (i.e. one that gives the lowest vtotal above what you really need).</font></p> <p><font face="Arial, Helvetica, sans-serif">b) Calculate the pixelclock. pixclock=hfreq*htotal. htotal starts at the same estimate (width*1.2) we used above.</font></p> <p><font face="Arial, Helvetica, sans-serif">c) Adjust the pixelclock to hardware-limits. Adjust <b>UP</b>. Now recalculate the htotal=pixclock/hfreq.</font></p> <p><font face="Arial, Helvetica, sans-serif">d) Go to 3.3. </font></p> <p><font face="Arial, Helvetica, sans-serif">An important final word. Most video card documentations give you the exact equations needed to set a mode. Here, we give approached values. Use the exact values given in the documents.</font></p> <h3><font face="Arial, Helvetica, sans-serif">3.5 Colors</font></h3> <p><font face="Arial, Helvetica, sans-serif">There exist an endless number of colors, but colors have a special property. If you take two colors and mix them together you get a different color. There exist many models to represent colors, but fbdev is based on what is known as the RGB color model. Out of all the colors, there exist three colors in this model which when mixed in different amounts can produce any color. These colors are known as primary colors. There does exist a physical limit to mixing colors. If you take and mix red, green, and blue in equal amounts you get gray. Now if you make each color component equally brighter, the final color will become white. Now their reaches a point when making each component brighter and brighter you will still end up with white. You can increase the intensity of a color component by any amount from some initial value up to this physical limit. This is where the image depth comes in. As you know, on most cards you can have an image depth from one bit to 32 bits. Image depth is independent of the mapping from the pixel to the color components. It is also independent of the memory layout to pixel mapping. Note that some cards have a complex mapping from the pixel values to the color components (red, blue, green) as well as video memory to pixel mapping. If this is the case, you will have to consult your documentation on your video card to see what the mapping exactly is. Here are the mappings defined from top to bottom in fbdev starting with the value of the color components:</font></p> <table width="151" border="0" cellpadding="0" cellspacing="0" align="center"> <tr align="center"> <td><font face="Courier New, Courier, mono" size="2"> {red, blue, green}</font></td> </tr> <tr align="center"> <td><font face="Courier New, Courier, mono" size="2"> |</font></td> </tr> <tr align="center"> <td> <font face="Courier New, Courier, mono" size="2"><i>FB_VISUAL_MONO01</i></font></td> </tr> <tr align="center"> <td> <font face="Courier New, Courier, mono" size="2"><i>FB_VISUAL_MONO10</i></font></td> </tr> <tr align="center"> <td> <font face="Courier New, Courier, mono" size="2"><i>FB_VISUAL_TRUECOLOR </i></font></td> </tr> <tr align="center"> <td> <font face="Courier New, Courier, mono" size="2"><i>FB_VISUAL_PSEUDOCOLOR </i></font></td> </tr> <tr align="center"> <td> <font face="Courier New, Courier, mono" size="2"><i>FB_VISUAL_DIRECTCOLOR </i></font></td> </tr> <tr align="center"> <td> <font face="Courier New, Courier, mono" size="2"><i>FB_VISUAL_STATIC_PSEUDOCOLOR</i></font></td> </tr> <tr align="center"> <td><font face="Courier New, Courier, mono" size="2"> |</font></td> </tr> <tr align="center"> <td><font face="Courier New, Courier, mono" size="2"> pixel value</font></td> </tr> <tr align="center"> <td height="21"> <font face="Courier New, Courier, mono" size="2"><i>FB_TYPE_PACKED_PIXELS</i></font></td> </tr> <tr align="center"> <td> <font face="Courier New, Courier, mono" size="2"><i>FB_TYPE_PLANES</i></font></td> </tr> <tr align="center"> <td> <font face="Courier New, Courier, mono" size="2"><i>FB_TYPE_INTERLEAVED_PLANES</i></font></td> </tr> <tr align="center"> <td> <font face="Courier New, Courier, mono" size="2"><i>FB_TYPE_TEXT</i></font></td> </tr> <tr align="center"> <td> <font face="Courier New, Courier, mono" size="2"><i>FB_TYPE_VGA_PLANES</i></font></td> </tr> <tr align="center"> <td><font face="Courier New, Courier, mono" size="2"> |</font></td> </tr> <tr align="center"> <td><font face="Courier New, Courier, mono" size="2"> value in video memory</font></td> </tr> </table> <p><font face="Arial, Helvetica, sans-serif">The way fbdev tells what this video memory to pixel mapping is, is with the type field in </font><i><font face="Courier New, Courier, mono" size="2">fb_fix_screeninfo</font></i><font face="Arial, Helvetica, sans-serif">. Here, I'm going to describe the </font><i><font face="Courier New, Courier, mono" size="2">FB_TYPE_PACKED_PIXELS</font></i><font face="Arial, Helvetica, sans-serif"> layout since it is the most common. Here, there exists a direct mapping from video memory to a pixel value. If you place a 5 in video memory then the pixel value at that position will be 5. This is important when you have memory mapped the video memory to userland. Next, we consider the mapping from a pixel value to the colors. This is represented in the fbdev API by the visual field in </font><i><font face="Courier New, Courier, mono" size="2">fb_fix_screeninfo</font></i><font face="Arial, Helvetica, sans-serif">. As you can see from the above diagram, this mapping is independent from the mapping from video memory to pixel value. This means that </font><i><font face="Courier New, Courier, mono" size="2">FB_TYPE_PLANES</font></i><font face="Arial, Helvetica, sans-serif"><i> </i>could have<i> </i></font><i><font face="Courier New, Courier, mono" size="2">FB_VISUAL_MONO01</font></i> <font face="Arial, Helvetica, sans-serif">just like </font><i><font face="Courier New, Courier, mono" size="2">FB_TYPE_PACKED_PIXELS</font></i><font face="Arial, Helvetica, sans-serif"> can.</font></p> <p><font face="Arial, Helvetica, sans-serif">To understand visuals, we have to go back to the first types of video hardware. In the beginning there was just monochrome monitors. Here we could only display 2 colors: the foreground and background color. Traditionally, these colors are black and white, but if you are old enough, you would remember the old green monitors. In the fbdev API, we define two types of monochrome modes. The difference between the two is that the foreground and background colors are swapped.</font></p> <p><font face="Arial, Helvetica, sans-serif">Then computers began to support color. The only problem was they could only display a small number of colors at one time. What if you wanted to have an application display a certain set of colors. Well, the way that was developed to get around this was the idea of a color map. A color map translated a pixel value to the colors needed. If your application needs a specific set of colors it would switch the color maps and you would get the needed colors. Of course, this also switches the other colors in the applications. That was the trade off. This became what is known as pseudocolor mode. In the fbdev API, there exist two types of pseudocolor mappings -- A static one and a dynamic one. </font></p> <p><i><font face="Courier New, Courier, mono" size="2">FB_VISUAL_STATIC_PSEUDOCOLOR</font></i><font face="Arial, Helvetica, sans-serif"> defines a video card that has a non-programmable color map. What colors you get are what you are stuck with. The other type of color map can be changed.</font></p> <p><font face="Arial, Helvetica, sans-serif">In time, video cards started to support more colors but this required having a larger color map. Also, video memory prices started to drop and video cards began to sell with more of it. To properly support 256 color intensity levels for each color component, you would need a color map of 16 million colors. New mappings where developed in which specific fields of a pixel where directly proportional to the intensity of a color component. Two types of mappings were developed -- One being truecolor and the other directcolor. </font></p> <p><font face="Arial, Helvetica, sans-serif">In truecolor, you cannot change the mappings from the pixel value to color intensities. Setting a value of 64 to the red component of the pixel will result in a red intensity of 64. How bright of a red this is depends on the image depth. For directcolor, you can control this. You could make a pixel value in the red field of 64 equal 128 for the intensity. Also some cards support an alpha value, which is used in higher graphics, which for fbdev is of little importance. It should always be set to the highest value it can have. For most cards, alpha shows up for 15-bit modes where each color component can have up to 32 intensity levels (2^5) and one bit represents the alpha component. It also shows up for 32-bit modes where each component red, blue, green, and alpha are given 256 intensity levels (2^8). 24-bit mode is like 32-bit mode except it lacks the alpha component. An important note is that some cards only support 24-bit mode on certain architectures.</font></p> <p align="center"><a href="index.html"><font face="Arial, Helvetica, sans-serif">index</font></a> <a href="2.html"><font face="Arial, Helvetica, sans-serif">back</font></a> <a href="4.html"><font face="Arial, Helvetica, sans-serif">forward</font></a></p> </body> </html> --- NEW FILE: 4.html --- <html> <head> <title>Linux Framebuffer Driver Writing HOWTO</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body bgcolor="#FFFFFF"> <h2><font face="Arial, Helvetica, sans-serif">4. Framebuffer internal API</font></h2> <hr width="100%" size="2"> <p><font face="Arial, Helvetica, sans-serif">Now that we understand the basic ideas behind video card technology and mode setting, we can now look at how the framebuffer devices abstract them. Also, we will see that fbdev actually handles most of the mode setting issues for you to make life much easier. In the older API, the console code was heavily linked to the framebuffer devices. The newer API has now moved nearly all console handling code into fbcon itself. Now, fbcon is a true wrapper around the video card’s abilities. This allows for massive code reduction and easier driver development. A good example of a framebuffer driver is the virtual framebuffer (vfb). The vfb driver is not a true framebuffer driver. All it does is map a chunk of memory to userspace. It's used for demonstration purposes and testing.</font></p> <h3><font face="Arial, Helvetica, sans-serif">4.1 Data Structures</font></h3> <p><font face="Arial, Helvetica, sans-serif">The framebuffer drivers depend heavily on four data structures. These structures are declared in fb.h. They are <i><font face="Courier New, Courier, mono">fb_var_screeninfo</font></i>, <i><font face="Courier New, Courier, mono">fb_fix_screeninfo</font></i>, <i><font face="Courier New, Courier, mono">fb_monospecs</font></i>, and <i><font face="Courier New, Courier, mono">fb_info</font></i>. The first three can be made available to and from userland. First let me describe what each means and how they are used.</font></p> <p><font face="Arial, Helvetica, sans-serif"><i><font face="Courier New, Courier, mono">fb_var_screeninfo</font></i> is used to describe the features of a video card you normally can set. With <i><font face="Courier New, Courier, mono">fb_var_screeninfo</font></i>, you can define such things as depth and the resolution you want.</font></p> <p><font face="Arial, Helvetica, sans-serif">The next structure is<i> <font face="Courier New, Courier, mono">fb_fix_screeninfo</font></i>. This defines the properties of a card that are created when you set a mode and can't be changed otherwise. A good example is the start of the framebuffer memory. This can depend on what mode is set. Now while using that mode, you don't want to have the memory position change on you. In this case, the video hardware tells you the memory location and you have no say about it.</font></p> <p><font face="Arial, Helvetica, sans-serif">The third structure is <i><font face="Courier New, Courier, mono">fb_monospecs</font></i>. In the old API, the importance of <i><font face="Courier New, Courier, mono">fb_monospecs</font></i> was very little. This allowed for forbidden things such as setting a mode of 800x600 on a fix frequency monitor. With the new API, <i><font face="Courier New, Courier, mono">fb_monospecs</font></i> prevents such things, and if used correctly, can prevent a monitor from being cooked.</font></p> <p><font face="Arial, Helvetica, sans-serif">The final data structure is <i><font face="Courier New, Courier, mono">fb_info</font></i>. This defines the current state of the video card. <i><font face="Courier New, Courier, mono">fb_info</font></i> is only visible from the kernel. Inside of <i><font face="Courier New, Courier, mono">fb_info</font></i>, there exist a <i><font face="Courier New, Courier, mono">fb_ops</font></i> which is a collection of needed functions to make fbdev and fbcon work.</font></p> <h3><font face="Arial, Helvetica, sans-serif">4.2 Driver layout</font></h3> <p><font face="Arial, Helvetica, sans-serif">Here I describe a clean way to code your drivers. A good example of the basic layout is vfb.c. In the example driver, we first present our data structures in the beginning of the file. Note that there is no<i> <font face="Courier New, Courier, mono">fb_monospecs</font></i> since this is handled by code in fbmon.c. This can be done since monitors are independent in behavior from video cards. First, we define our three basic data structures. For all the data structures I defined them static and declare the default values. The reason I do this is because it's less memory intensive than to allocate a piece of memory and filling in the default values. Note that drivers that support multihead (multiple video cards) of the same card, then the <font face="Courier New, Courier, mono">fb_info</font> should be dynamically allocated for each card present. For <i><font face="Courier New, Courier, mono">fb_var_screeninfo</font></i> and <i><font face="Courier New, Courier, mono">fb_fix_screeninfo</font></i>, they still are declared static since all the cards can be set to the same mode.</font></p> <h3><font face="Arial, Helvetica, sans-serif">4.3 Initialization and boot time parameter handling</font></h3> <p><font face="Arial, Helvetica, sans-serif">There are two functions that handle the video card at boot time:</font></p> <blockquote> <pre><font face="Courier New, Courier, mono"><i>int xxfb_init(void); </i></font><font face="Courier New, Courier, mono"><i>int xxfb_setup(char*);</i></font></pre> </blockquote> <p><font face="Arial, Helvetica, sans-serif">In the example driver as with most drivers, these functions are placed at the end of the driver. Both are very card specific. In order to link your driver directly into the kernel, both of these functions must add the above definition with extern in front to fbmem.c. Add these functions to the following in fbmem.c:</font></p> <blockquote> <pre><font face="Courier New, Courier, mono"><i>static struct { </i></font><font face="Courier New, Courier, mono"><i> const char *name; </i></font><font face="Courier New, Courier, mono"><i> int (*init)(void); </i></font><font face="Courier New, Courier, mono"><i> int (*setup)(char*);</i></font></pre> <pre><font face="Courier New, Courier, mono"><i>} fb_drivers[] __initdata = { </i></font><font face="Courier New, Courier, mono"><i>#ifdef CONFIG_FB_YOURCARD </i></font><font face="Courier New, Courier, mono"><i> { "driver_name", xxxfb_init, xxxfb_setup }, </i></font><font face="Courier New, Courier, mono"><i>#endif</i></font></pre> </blockquote> <p><font face="Arial, Helvetica, sans-serif">Setup is used to pass card specific options from the boot prompt of your favorite boot loader. A good example is:</font></p> <blockquote> <p><font face="Arial, Helvetica, sans-serif">boot: video=matrox: vesa: 443</font></p> </blockquote> <p><font face="Arial, Helvetica, sans-serif">The basic setup function is:</font></p> <blockquote> <pre><font face="Courier New, Courier, mono"><i>int __init xxxfb_setup(char *options) </i></font><font face="Courier New, Courier, mono"><i>{ </i></font><font face="Courier New, Courier, mono"><i>char *this_opt; </i></font><font face="Courier New, Courier, mono"><i>if (!options || !*options) </i></font><font face="Courier New, Courier, mono"><i>return 0;</i></font></pre> <pre><font face="Courier New, Courier, mono"><i> for (this_opt = strtok(options, ","); this_opt; </i></font><font face="Courier New, Courier, mono"><i>this_opt = strtok(NULL, ","))</i></font></pre> <pre><font face="Courier New, Courier, mono"><i> if (!strcmp(this_opt, "my_option")) { </i></font><font face="Courier New, Courier, mono"><i>/* Do your stuff. Usually set some static flags that the driver later uses */</i></font></pre> <pre><font face="Courier New, Courier, mono"><i> } else if (!strncmp(this_opt, "Other_option:", 5)) </i></font><font face="Courier New, Courier, mono"><i>strcpy(some_flag_driver_uses, this_opt+5); </i></font><font face="Courier New, Courier, mono"><i>} else .... } </i></font><font face="Courier New, Courier, mono"><i>}</i></font></pre> </blockquote> <p><font face="Arial, Helvetica, sans-serif">The <i>xxfb_init</i> function sets the initial state of the video card. This function has to consider bus and platform handling since today most cards can exist on many platforms. For bus types we have to deal with, there are PCI, ISA, and zorro. Also, some platforms offer firmware that returns information about the video card. In this case, we often don't need to deal with the bus unless we need more control over the card. Let us look at Open Firmware that’s available on PowerPCs. If you are going to use Open Firmware to initialize your card, you need to add the following to offb.c.</font></p> <blockquote> <pre><font face="Courier New, Courier, mono"><i>#ifdef CONFIG_FB_YOUR_CARD </i></font><font face="Courier New, Courier, mono"><i>extern void xxxfb_of_init(struct device_node *dp); </i></font><font face="Courier New, Courier, mono"><i>#endif /* CONFIG_FB_YOUR_CARD */</i></font></pre> <pre><font face="Courier New, Courier, mono"><i>Then in the function offb_init_driver, you add something similar to the following:</i></font></pre> <pre><font face="Courier New, Courier, mono"><i>#ifdef CONFIG_FB_YOUR_CARD </i></font><font face="Courier New, Courier, mono"><i>if (!strncmp(dp->name,"Open Firmware number of your card ", size_of_name)) { </i></font><font face="Courier New, Courier, mono"><i>xxxfb_of_init(dp); </i></font><font face="Courier New, Courier, mono"><i>return 1; </i></font><font face="Courier New, Courier, mono"><i>} </i></font><font face="Courier New, Courier, mono"><i>#endif /* CONFIG_FB_YOUR_CARD */</i></font></pre> </blockquote> <p><font face="Arial, Helvetica, sans-serif">If Open Firmware doesn't detect your card, Open Firmware sets up a generic video mode for you. Now in your driver you really need two initialization functions. </font></p> <p><font face="Arial, Helvetica, sans-serif">The next major part of the driver is declaring the functions of <i><font face="Courier New, Courier, mono">fb_ops</font></i> that are declared in <i><font face="Courier New, Courier, mono">fb_info</font></i><font face="Courier New, Courier, mono"> </font>for the driver. </font></p> <p><font face="Arial, Helvetica, sans-serif">The first two functions,<i> <font face="Courier New, Courier, mono">xxfb_open</font></i> and <i><font face="Courier New, Courier, mono">xxfb_release</font></i>, can be called from both fbcon and fbdev. In fact, that's the use of the user flag. If user equals zero then fbcon wants to access this device, else it's an explicit open of the framebuffer device. This way, you can handle the framebuffer device for the console in a special way for a particular video card. For most drivers, this function just does a <i><font face="Courier New, Courier, mono">MOD_INC_USE_COUNT</font></i> or <i><font face="Courier New, Courier, mono">MOD_DEC_USE_COUNT</font></i>.</font></p> <p><font face="Arial, Helvetica, sans-serif">These are the functions that are at the heart of mode setting. There do exist a few cards that don't support mode changing. For these we have this function return an -EINVAL to let the user know he/she can't set the mode. Actually, set_var does more than just set modes. It can check them as well. In <i><font face="Courier New, Courier, mono">fb_var_screeninfo</font></i>, there exists a flag called activate. This flag can take on the following values: <i><font face="Courier New, Courier, mono">FB_ACTIVATE_NOW</font></i>, <i><font face="Courier New, Courier, mono">FB_ACTIVATE_NXTOPEN</font></i>, and <i><font face="Courier New, Courier, mono">FB_ACTIVATE_TEST</font></i>. </font></p> <p><font face="Arial, Helvetica, sans-serif"><i><font face="Courier New, Courier, mono">FB_ACTIVATE_TEST</font></i> tells us if the hardware can handle what the user requested. <i><font face="Courier New, Courier, mono">FB_ACTIVATE_NXTOPEN</font></i> sets the values wanted on the next explicit open of fbdev. The final one <i><font face="Courier New, Courier, mono">FB_ACTIVATE_NOW</font></i><font face="Courier New, Courier, mono"> </font>checks the mode to see if it can be done and then sets the mode. You MUST check the mode before all things. Note that this function is very card specific, but I will attempt to give you the most general layout. The basic layout then for <font face="Courier New, Courier, mono">xxxfb_set_var</font> is:</font></p> <blockquote> <pre><font face="Courier New, Courier, mono"><i>static int vfb_set_var(struct fb_var_screeninfo *var, struct fb_info *info) </i></font><font face="Courier New, Courier, mono"><i>{ int line_length;</i></font></pre> <blockquote> <pre><font face="Courier New, Courier, mono"><i>/* Basic setup test. Here we look at what the user passed in that he/she wants. For example to test the fb_var_screeninfo field vmode like its done in vfb.c. Here we see if the user has FB_VMODE_YWARP. Also we should look to see if the user tried to pass in invalid values like 17 bpp (bits per pixel) */</i></font></pre> <pre><font face="Courier New, Courier, mono"><i>/* Remember the above discussion on how monitors see a mode. They don't care about bit depth. So you can divide the checking into two parts. One is to see if the user changed a mode from say 640x480 at 8 bpp to 640x480 at 32 bpp. Remember the var in fb_info represents the current video mode. Before we actually change any resolutions we have to make sure the card has enough memory for the new mode. Discovering how much memory a video card has varies from card to card. Also finding out how much memory we have is done in xxxfb_init since this never changes unless you add more memory to your card, which requires a reboot of the machine anyway. You might have to do other tests depending on make of your card. Note the par filed in fb_info. This is used to store card specific data. This data can affect set_var. Also it is present to allow other possible drivers that could effect the framebuffer device such as a special driver for an accel engine or memory mapping the Z buffer on a card */</i></font></pre> <pre><font face="Courier New, Courier, mono"><i>/* Summary. First look at any var fields to see if they are valid. Next test hardware with these fields without setting the hardware. An example of one is to find what the line_length would be for the new mode. Then test the following: */</i></font></pre> </blockquote> <pre><font face="Courier New, Courier, mono"><i> if ((line_length * var->yres_virtual) > info->fix.smem_len) return -ENOMEM; </i></font></pre> <pre><font face="Courier New, Courier, mono"><i> if (info->var.xres != var->xres || info->var.yres != var->yres || info->var.xres_virtual != var->xres_virtual || info->var.yres_vitual != var->yres_virtual) { /* Resolution changed !!! */ /* Next you must check to see if the monitor can handle this mode. Don't want to fry your monitor or mess up the display really badly */</i></font></pre> <pre><font face="Courier New, Courier, mono"><i> if (fbmon_valid_timings(u_int pixclock, u_int htotal, u_int vtotal, const struct fb_info *fb_info)) </i></font><font face="Courier New, Courier, mono"><i> /* Can't handle these timings. */ </i></font><font face="Courier New, Courier, mono"><i>return -EINVAL;</i></font></pre> <blockquote> <pre><font face="Courier New, Courier, mono"><i> /* Timings are okay. Next we see if we really want to change this mode */ </i></font><font face="Courier New, Courier, mono"><i>if ((activate & FB_ACTIVATE_MASK) == FB_ACTIVATE_NOW) { </i></font><font face="Courier New, Courier, mono"><i>/* Now lets program the clocks on this card. Here the code is very card specific. Remember to change any fields for fix in info that might be affected by the changing of the resolution. */ </i></font><font face="Courier New, Courier, mono"><i>info->fix.line_length = line_length;</i></font></pre> </blockquote> <blockquote> <pre><font face="Courier New, Courier, mono"><i> /* Now that we have dealt with the possible changing resolutions lets handle a possible change of bit depth. */ </i></font><font face="Courier New, Courier, mono"><i>if (info->var.bits_per_pixel != var->bits_per_pixel) { </i></font><font face="Courier New, Courier, mono"><i>if ((err = fb_alloc_cmap(&info->cmap, 0, 0))) </i></font><font face="Courier New, Courier, mono"><i>return err; </i></font><font face="Courier New, Courier, mono"><i>} </i></font><font face="Courier New, Courier, mono"><i>}</i></font></pre> </blockquote> <blockquote> <pre><font face="Courier New, Courier, mono"><i> /* We have shown that the monitor and video card can handle this mode or have actually set the mode. Next the fb_bitfield structure in fb_var_screeninfo is filled in. Even if you don't set the mode you get a feel of the mode before you really set it. These are typical values but may be different for your card. For truecolor modes all the fields matter. For pseudocolor modes only the length matters. Thus all the lengths should be the same (=bpp). */ </i></font><font face="Courier New, Courier, mono"><i>switch (var->bits_per_pixel) { </i></font><font face="Courier New, Courier, mono"><i>case 1: </i></font><font face="Courier New, Courier, mono"><i>case 8: </i></font><font face="Courier New, Courier, mono"><i> /* Pseudocolor mode example */ </i></font><font face="Courier New, Courier, mono"><i> var->red.offset = 0; </i></font><font face="Courier New, Courier, mono"><i> var->red.length = 8; </i></font><font face="Courier New, Courier, mono"><i> var->green.offset = 0; </i></font><font face="Courier New, Courier, mono"><i> var->green.length = 8; </i></font><font face="Courier New, Courier, mono"><i> var->blue.offset = 0; </i></font><font face="Courier New, Courier, mono"><i> var->blue.length = 8; </i></font><font face="Courier New, Courier, mono"><i> var->transp.offset = 0; </i></font><font face="Courier New, Courier, mono"><i> var->transp.length = 0; </i></font><font face="Courier New, Courier, mono"><i> break; </i></font><font face="Courier New, Courier, mono"><i>case 16: /* RGB 565 */ </i></font><font face="Courier New, Courier, mono"><i>var->red.offset = 0; </i></font><font face="Courier New, Courier, mono"><i> var->red.length = 5; </i></font><font face="Courier New, Courier, mono"><i> var->green.offset = 5; </i></font><font face="Courier New, Courier, mono"><i> var->green.length = 6; </i></font><font face="Courier New, Couri... [truncated message content] |
From: James S. <jsi...@us...> - 2001-11-03 00:23:03
|
Update of /cvsroot/linuxconsole/ruby/web/htdocs/fbdev/HOWTO In directory usw-pr-cvs1:/tmp/cvs-serv21185/HOWTO Log Message: Directory /cvsroot/linuxconsole/ruby/web/htdocs/fbdev/HOWTO added to the repository |
From: James S. <jsi...@us...> - 2001-11-03 00:21:41
|
Update of /cvsroot/linuxconsole/ruby/web/htdocs/images In directory usw-pr-cvs1:/tmp/cvs-serv20970 Added Files: drivers.jpg logo.png news.jpg related.jpg sites.jpg Log Message: More pretty pictures. --- NEW FILE: drivers.jpg --- ÿØÿà ÿÀ ý±kò1,3)#+bköÕTz>®9lïÓé=ÚÂ@ÇäSÏ}R9·Nô¾ìO§¤õgIý°6ûì=>:y*Ú@C(ãqàv éßòCR¦sÛ3bRá©8RTþS(|·Ûút,µV±p[CÓ$3d*G*°£Hû´y¶a1»#\þ(H9&4ÍÓõGÏüÊ_«X=84oÕI£hÌÌ¡º >fùFÍXè6¾zSÝÙ¯DI·ø¬V±d¨$~±ow©¾©^k¬? » ôö£OþDíVí¶õ¢±0©]'A$?Ub(ÐøUØûÚéù°Ì@t§éÂT1 'ÎʳñJæX!Æò4èØ0ÈGëÕh%Iãë1 2¦ÖW«YIÌkÂ3¼×½«¨ IÁRtåÒ°Ííé½9ôVº=R¿OT Fû{4 Ï3ùqPÖ<Õ§ kbgªmÏnÅV hLX9^Ü6Ñ£HÇdrv TlÞõ#ª>-£!ÓÂêÚn¨D{hºÂ´QzKcªÍ`Ú ,Hà $ùï¨77JgL°ãª-§é²S0£6ó*î÷±:"^Þä59¢Y¬Ej»2¯\ªå%Oþúµ¹ p8i+¼ò,I¶BÌò@kÉË,ècù}^>ÕÒÆªþneXõïeåôèQ6ù+ T];§.vèË/c½üw3ÛÔgâÜÚ<}roÍh5$ áidî0µzíÙ%±?öã2µSã Èþ°J9ücT@*ì$^«ËlÌTxµ}åBfeÝÒ¢}>Ãrº"«&DêO+¶_ÃÅ¥bre²x«£Ç¸=[Z«$3AV Ó§u9$ø9#ÁwmPnC£Aü=_L,M&))R9õóÁmdìÏ<·38.ÌîØäJUzÛvwéÈ3=þN£ü¼«!QðÐ2þذòï1æÔ)cÄÅÏ륳øß<ÎMÃãôøÙhñ}*ê`'¨¢R\+\=[6´\¢µGQÌÆ#Ô¶Ôi9òÄ¢5§ÿÑ_·Á½ßR{0 ÷ùD ÷¯dztL8ù~{NJ/aòØü%^PÃß;H>òuÝjtÙdHZõÑæªIöE^+ÄÖbÇ7Qÿ òu ȴѯâuE{z,1`=â ³½¹C 6>ãqn8¿.n©éáþ--(÷ÆÑÛÜôÂÝçâÜ`°2æªíöáâ×fÒK¢89ܰ¤Þì^3ÃR.:Ì3ûâò¦ö´é¨Ý ÆgW¯Pÿ --- NEW FILE: logo.png --- PNG RÔ&`iÂD >£"jŨ 1>*~äC èGªdÝ÷æc\·×Ù÷Ü~Ì`³ªnu÷½çì}ö>{ïuνÝ3¹8c+ä«5øÿC øa@ðÃà!ÁC0> `"|@@@@@À0D øa@ðÃà!ÁC0> `"|@@@@@À0D øa@ðÃà!ÁC0> `"|@@@@@À0DCµ»q Eç¬Ü×^{ ?øÁy¥R)õêóy5tuuá±ÇÃÌ31aÂÜ}÷Ý)|_-Ê7n,Xà\7o£Ïßzî®»îrú/Z´È?6|ñ «ÇGè¶=&j¥çoÚWuèûqãÆaõêÕ2e 6mÚ ä;::ðâ/¢µµqcÓ¦M5kV"süøñxá ÐÒÒb±×q¨Ý¼ÕÊ1s>*=ìîP ä5ãä< ã#ãXI<YùI2_ôKeê[mo¡Ï«ò"?m´øÑ~ä使wß}7Õ^Kî¾ f±XDOOO´Å>ÊÂ믿îÌ%íÑ$àæ¶?ûC øÏáKÖ(2wrx%|®^Tj+$Ï1ØÂJ²ýÖ·¾ »îº¿úÕ¯Û¬ ¨%h&x¥ï\°/IÒ<ûk!hnnÆ1Ç"ø|hnnNÍ }Ë¥¿tfÁ9«VdôîÅM7ÝäÌ»%C."¬ëÁÇ8ñÖ[o¡½½=E$xÎÇq²×âí[8é»CQ¡§§Ç)ÞÅb B¡ªo-zzz°sçÎä³ vôèÑøùÏ &}~ùË_âGIƼ|ùrg¡4{öì*P/uúÈseç+ã$Iîüö¸oÁê)û(I}ÊÛÙgy&u®8â|öÙg=ô1Û^mOkEOO£s¨q¥yïé'Ý@ðÀé#b;¯äóþ[>× MP|©TÂ7¿ùMvØa¸è¢ðñÇ'mV¯^¹sçâk®q¾|ÇþZx|ãQ¨¼¦ J»}Æ~$»(úaÐWW_}5}öÙ[·bÖ¬Y¸ÿþû1zôh ~øáX°`óWãXè¸e±©Dð/F©TrnËrü,@¹ÈéÝÚeå¶µµ¡££#eKLßL4 k×® È&ø8òxá or·´´àÎ;ïD±XDss3-[Ë.»,±cûöí;w.,X¦¦¦Ä϶ÐèùRÉ]$q*oÎí¢¨ZÁ÷.êìx]SÔcc±ÉÂJZà>HýØ'&ßq (*ÿ¼Éú0ÓϨÕ_´E X¼ÖNêÉårX´h¦N\Ó¿X ÷Þ{/?þxç< Þ>æñ½ï}ÍÍÍRkÇ\àìèä·nÝ"÷ ¢¥¥Åk/Ð_\æÎë\ûäOpóÍ7cÛ¶mNqTbVr²¾ó¯]¿Iê¼sÃç CR¼&M:¨¦±íííXºt):::¼ãÕX*(±ëîWH hmmÅ ^èô=ûì³/Xê]{T³Ú¤1sÌ1Ç8ÿ`°à¿ ÜGBæÏ|?räÈä{6ħ~ë®»ëׯOäYÙgyæä3Ä?W>B·ä®cÊX ¨a/<yrªøZ¡;î`y»·Ë&Mô¢cÇMô ;'V¯ ø^ãRûø|¯°úò|(90~óùòsgöS=YºÕ^æ/&1ëµU}õõàÄ©;^§ Bùêµ¼Æ.tñ¤íiµdù#KN½òàM¶=Ç.úÿ¸w¹\ùo13Ù>«°@SåÙdb±³ò¨ccAÔ¶èZ TÕE;tüL -.¶¯^· íô½0îR´Y¶ ª¯9Þþßòàò¢zHîön<}ÐÐÐ /ÏùHA}ù×nÏñàøõ3cr«ÁÎ]hìQ¶.èOo;ïªíé.t>¸V¿Y?èYcí5O¬ÿíuúV¯«ÕA¨M6^íÜ©,㺵úéSÚ«±h悔Ì+³¹ªòuüjk¥ÜòÍuÀA xlµÅàg=wºÃñ7Êãg[µHjAÓݸMNMdãb1ÜÛ¿ZYÌÙã«TT§´AmS² »;'t¼:þJÇ ¶ð.]©¿xTðSõÜÆÆFJ%466:í,1X_Q·nµ±ÁxSûS ®½®¤¡1¸ó¯cÏåÜ¿ìè#ZÊð*Û·`´zÔ7Jl:ï:fûªs®¾gÌq^/íÜY¨Mê;F¶×E/ÇìX5Î4Nò]6ʰsgmá¸l_ §EÞÎ%{Ý Î=§òYàòìôÙ£îà-Ǩ_Î} ¸E¯ÔÅ:}cüse®ÆAoÉcWÙìÇø²ãÖ8®¤ÓwÍQ>ïþ'ưݽÚ9¡,+ÓúGçï÷OÐú|©PüÌqréSÀ]8¨ºøÔWíCù¾¡ï÷g 6ÞèO+_sPm§ß¢¯:Y~ ØõØë Þ*M2M5·&¼4P&^³D¢@̧ßñ(dºm-Á[ÔdU}Lp¬$Z¯¾¶`ù IÛ|¾üÇÔ~]0ù}.Wþòm:&úÇ.bt,a)Ië¡òÙòµõÝ¡ÙqØôÛ«ìgtj¿oÞ4æh¯-Ø>ÑëO»}©Û7&Beú^çEç]¡ý ÷6õ0>u<:V¥¶hñUýÀúP*:ãvlÖ×6UWué«êÜÅJÖ#Õ£ðÍkÀ®Å^Mðn¾ç+FS1¯ÛÏ6\ö¼öñW.׿JfíHÒ¶x+â¸üüÝîàU.`,QÙb_áQÝY~´Ä«¶i{öQÿØb£þ±ÔÚE]ê§,·ºò^É~S¹´)¢d×ný^iøïRøüG=l_*ÇCÚ¨ÏùôiLÐ6=¯:éO%Kûê¡cÕ¹¢,~[_ãÅÎÍú'Ë9cTؤ|?µ¡rl|Ú¹ãxxØ<µywYs§(©¹gÒG*ï_Ôßúkëw-Âú+`×b¯&xMj-v5ͤ÷%3ûiÑbRd¬¢ E/«&^Ó¡?©³ºlÁ¦s8-r¾â£°EÄWàh§êãô¸xÝÕÁ±W"y-:@ùî-F³sµkQÄqìÄ?Ï'?S¢ÝEcÈúPc²u!ÇyËZ@X{5NiZçxÀ ~¶ímrëÁë,öPØÂàë¯u;ÏBíà¡~Q¨N=gßûôZ]¨¬}£çUDÍkZ }ríøì£d$Ëv^ªùOçJ_+͵] Ý{.W&ËB¡ü3FKªOããÕݼ²AyÞ s;'*Gåþ2ÏGQ²Ñê®û@ýñ¯9%sÀö¶Aå«]Q^øûüCÙ6Nt×nÕV?eì^ìõ¯Ð f°Å*¢äw̾âé+¾³Éç¨[Ç£í|ÅÉ&Ûé8mqÔþLJÅÀÔa¡cò`Õå³Íg'Q©°ªUÛ>Ë%$˶¤ã°>²6+·PHÿ+Q¶WÂðÍõÖËW3»s¯T°UOÖ\UÒã»;ä/¾PRPiwÿ³ãöØyñůs^?ìÜiÎ(±ûì«û|ï³YÇ©PÿZÚv¾÷êú\aó1È×J¶ùæÑÞ á{[óöÁ0x¼½ËÕÕ¯MDÊÜ$³ '+èµèVjëKꬶ:ÎjØWHtq`Ï~ ¸ì{¶µ2|2}×k)B>ß«Î8î' KY²uüúJÐ'J»{·ñ£~´óiõZÒåXU¯ÎYÖ<騬=Y~SY´§T*ÿa ê¤|¶X;|;>ö£µ ¯Ö»ìu]¡z|þdëS ÃjøèW¢\_;ëCÛÇÏ:gôëµH³ñ©}v?öê¿E¯°«É`Wº¥Rÿ|l±*h=oÛgɨ¶½ µÇ j hý`ßÛCXÛÕú ¬c¯U+D4|vª]» ²ÈçUHí"z}P; =§°~²òuüVÚ]-^¾¨äOJöfÙITiÛTWµK_íáÆÚa=¯ý²ì ص/°EÀälgUp|×}¨v=YIï+__íc¸ÏV¯Øe Â'/«Mîzô~rªEvêz|¨ç¬>¾¯£Á×zæIå[;yÝ¢.»£dWlë3 S+ÃöQ»øYýÉsúJT»,ßfÅÊRdµ×¶ì²^÷ÁgOÖÂ3ûà lÛäö%{|IQ ´|ý² [¥Ë¥ojÿJEÀ¬VmYð£Ïk-öÕªzeÖ?q{åeù×|ó5×>T£,û>]¾Ïգ累/5¯ N¾¯æO',{mûZ}øc6«"Ë.+£¬MµÚ°ûÞ¬àKZÌðW%F¥é®Vä|ç³à³ I_Xùå}_«->dÍ£Oæ@â¨CY>ñÍï3P}²æi(í©7.j±#õ̱oîìµJ¨æ[_ >ûjÅ`ìª4¾|¨u^vÁg Z¡¬ÕmYD0Ô¨EvcÎB½¶{>Ùkñÿ@\%*~ú}X=@uù<ï5P]ö}¥s@ý²µôzmTTóíÄ@bȶélëÞ@ðU0䮡NZä fü髨eCzõU³s0òªÉ®µ,,zlÜú|úkѳ+~0}}¨Ç·» CiS-s°ç¾N »þ`(ìþ?m*ìVG½ó3X}@ý:w'Â>ÅÅÖ¡´ëbS@à!ªÿÕÿ;0> `"|@@@@@À0D øaÿlÅvAë- --- NEW FILE: news.jpg --- ÿØÿà ÿÀ r¼Ç)*ùÔf#b鸴ªW*`züŲËDºKa(6ÓÓjHóÓ}U¦'7ªFÐÉ»ÌÛá^Ô«©÷#'·æw' Ñâ½BJ 2Þlº!ÃÙZÑ ìÌÅV@*Ó\ÐtmZaB2y£½tYlJ3P&$E ¶{ÑYÜÜÆÌÏhô^àõÅ !Gy1;· Óy×ÞÐF#R= Úè --- NEW FILE: related.jpg --- ÿØÿà ÿÀ |B£UÏÚ»aºü&*ÕPeÓý0D¯ªº¬kX¶ÝI1ÐѲaÇ]i:ïÉ¢ðÔÝß0UÊGTø· 4$C#ÁzÉ^ÐØsÑB§bÒÞÒ%di*CårRu[Ù D@IUWe_~£«_T5 "#LµDå· ¢´EJ¨«{ÒÓ ÄÁc¶ ¼å}Ô9èÄwå¸Â¨ÔfÕÂ_;cà& ëê)¬È]]£.X?ÙèÔ¥Ey+6´ ÍÚQËÆ±z¸Sݲ»®í_¢m:®8qIql]ôÛ-W§ßoî.XIXêèÞ$Ì5ö:J7E),ãxäÍ£6U8Å8xþ4ôG-ÖòQ£#hHà²ãÊ<¶Å[æD(¨¥åé¦ú¤ÂlÝÜ4ré'OÐsQ2,ûÙKwTK1½Øº\ZÎC1ª/áYÍ}Ðeqy2pSe6Äzo×uÖÞ²ª]@IcO¶[Ô`)ÕGb@ ¡§õ(Ý ^ îUTÌ·÷PI:*rm¢EÛèÖ©w\ãå´¾]±µ^h³_>#ØÍñU®dØNÙIKse ì(h%²ý)«%½Pê¤y"yni9' ítÔGÇÿÐ9ïEIKÕâctìÌ+ÓkÙ¸³&íª¢\WÈ_~®·víêÀ%"Gd~1ʸmê*A¡³fPÒ³vvPr»ÿ ;Çæ;aº<F\(ÿ é¯/¿Lµïæ=ª/!Z^~~âÞ×U¬C-êòb&Åc´n:ªdd×PMþ- êfcº4ÚôŲD]öF2lUB åÊF1Óå2°îáHÊ&ä¹LªÙYÑo¿Á8 ûtMº¥VOLÊ+ÏwLlFgͼI/îeOmkhÊé¨-ãØKzK7ÕîX!°ël£jß²:oìÖ£-bÄ1GTååöÆü)ZbC®~¶Yj1!w)Ö#ðûßbÒ:Ñ6©¿U+ x§h*x¿T8V¢°"¥#©%ý±(÷:²È·î&(ýsf'-8á½)Æ|ÀÐ-p 'DäB)í%ÛCwé?k°jtÎaèå×ûc4¦ÈW+É®²ð¿N®±"L8"ø¤Û{8¢.Ý5lá² }ªºJTJâGL1BæåZj¬O1 ôÆð´ßþÒ.ßòù´¥¶ï¸_~Ûx[dx1¼-p³«îIM|ÚÁkmÞ!oï¥6ð¶Èf¤¯¤Ò_öÜ_¹WR4)Ò^©1w^»õÔpb¥í>;)ÎSæ²ÑûxñTЮ(Ñc¼À{á;«O2¢ÑamqÃû@K{aÚ^Ô¼¾=ð¶È>h½!DÇÛú·ã§¼ºRÒ" Ö¸Ð`mÅ6-%óc´¾ oÃ᳿T¦þm,-ûäCÍ{ûmá;#¯Û¸b)YEU÷,¾m{é§Ö"<õ÷Òê7 ¶C},ZÈì ׺ÓïhÄÓîUÔE¤Evî¥WmðG8ÚjÿÙ --- NEW FILE: sites.jpg --- ÿØÿà ÿÀ ÖSî#a0:%²¢ª« ¦Þ>:×HFPoÈÑÓ¬R,ePÃâU|z5Ù2ZÓDôÛÕvÙ Ù|}úkg7Ëk}5Õ¤fÊ&Kú×½¬Ãq_d5ÕnÈrSL7 "5 $⸩Óhü9¶ºî.ܯ ×ÛFc3¢âÃßëcî©éZ\Nî${ Hì?, §ã¡³®6n&ýP Ut_¨²Já~FúrѺÉvÉË~õxùj00H«Ð{,ªmÁð$}ÁßàBÒ¢üÓSAÇå·ôþ´&Ðh×ý}KYÛ|qv2YUd.Iñy+'Ñq[1õªì¨©÷&¬´úÜÁ2ñSÛTZݨ£)Rù]{¼§)ÛÖÉ)cÐÇ©rCͶêâźõÕ¦]QÛd-ÄWWÑtúÁ#²ù~ïG¦Û#ág¿½aÝ'»×cZÚ¼Z5+VöÖq+b<DÛ.Êäªá""TIºíªÉõÒ "#ËÑWÚM¦ 3&3ÖÁy^T6V*ñ¢HC"DM×aðM0Úé.#f>8uñµ%ÓÌa.o(sû*¯ù÷[f« e1×f<(í¾¸n ólGßç© \«ÞFQæ$aøÐÎÛ§rr£± PÙæÝ*[aQ@W"HÊjØÊ¨<Úî x*rm¢EÛᨦ®fÄFÄ}ÖhíºTºã8àÍøª×+°ídÄ)¹±Ù5ʶâ'Ü(h%·Í5±éåΣQ[§19 iÍÌ'+SD&Xp·îÑt²´,n¥¸[ BÒÛu1S-ÇÆìþ|Õª£î·nð:\f¯#fL7eÎgwøÒº*L¨±[Qq®£¼yökÒ«RÕ»ËvÊF}®ðcðÔvèãÓå@àó&ܽÆEÿ}ÄG[Øûù¦<æßÞ³CYÙ?wùQ~æ?²à=̧²¿Ç³«{:M5¬ôÛf[f§ Ü EhCñäפxéù3ª¬9ËÍåö½Þ5QÊy HÈÇ5Ó®:S«:òþÞªÉ]sÜâN]=µ5[^*ªÜXl§YÚ)â¿qr/»V[\MütÓT_ô$Û²ÞʯuG¢ºèçnB¢Üߪi¯õg5ö¹:J»C}=_Rl_NÚWpDIIÈ÷6æV²=5a²É$u6+Ù3:âzr<xÒÇ{ïAOHýôih¶òl/jê¾p*iqâEOõÚqÒu÷DxtÇøüTNXß(` »Ç75ÿ Ûa¹~c! ±º(Abxsw½UËé3 ׸ßr§åÓòL©ç óíÚGê ¨Õâ¢À ¢ùhñ©ÂRÒµ-·ÅaZ7¹*üöÒóiN4ærx ©awén©ïUßA]¾1ÑLɽLÝ4Øqè" ²{4ÐÓ-©®Þ²Ä+¬EÑ]ÓÙ²í¡K¢GãLi÷I"8RÀíÝ`{¿ËKµ:wÙMKÿ Æ0ªmF©¦74ÇLRuÿÙ |
From: James S. <jsi...@us...> - 2001-11-03 00:15:56
|
Update of /cvsroot/linuxconsole/ruby/web/htdocs In directory usw-pr-cvs1:/tmp/cvs-serv19941 Modified Files: index.html quick.html Removed Files: adapters.html hardware.html input.html joystick.html links.html Log Message: More cleanups. Index: index.html =================================================================== RCS file: /cvsroot/linuxconsole/ruby/web/htdocs/index.html,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- index.html 2001/11/02 23:33:28 1.1 +++ index.html 2001/11/03 00:15:53 1.2 @@ -92,7 +92,7 @@ these will probably be the basis of our first two deliverables.<p> <li>Vojtech Pavlik's <a -href="input.html">input drivers</a>, a +href="input/input.html">input drivers</a>, a previous effort in this direction which we have integrated.<p> <li> Index: quick.html =================================================================== RCS file: /cvsroot/linuxconsole/ruby/web/htdocs/quick.html,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- quick.html 2001/11/02 23:51:50 1.2 +++ quick.html 2001/11/03 00:15:53 1.3 @@ -26,7 +26,7 @@ <a href="index.html#documentation">Documentation</a> - <a href="hardware.html">Supported Hardware</a> - <a href="adapters.html">Adapters</a> - -<a href="links.html">Links</a><br> +<a href="input_links.html">Links</a><br> </strong></div></td><td background="images/r3i.png"><img src="images/r3i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td><img src="images/l4i.png" border=0 width=32 height=16 alt=""><br></td><td> --- adapters.html DELETED --- --- hardware.html DELETED --- --- input.html DELETED --- --- joystick.html DELETED --- --- links.html DELETED --- |
From: James S. <jsi...@us...> - 2001-11-03 00:14:39
|
Update of /cvsroot/linuxconsole/ruby/web/htdocs/input In directory usw-pr-cvs1:/tmp/cvs-serv19658 Added Files: adapters.html hardware.html input.html joystick.html links.html Log Message: Moved them here so not to conflict with the fbdev stuff. --- NEW FILE: adapters.html --- <!DOCTYPE "-//IETF//DTD HTML 3.2//EN" PUBLIC> <html> <head> <meta name="description" content="Linux Input drivers"> <meta name="keywords" content="joystick gamepad keyboard mouse wheel force feedback touchpad tablet input device linux driver gnu"> <title>Linux Input Drivers</title> <LINK REV=MADE HREF="mailto:vo...@su..."> </head> <body text="#000000" bgcolor="#ffffff"> <table border=0 cellspacing=0 cellpadding=0 width="100%" bgcolor="#FFFFFF"> <tr><td><img SRC="images/l1i.png" border=0 width=32 height=64 alt=""><br></td><td width="100%" background="images/m1i.png"> <img src="images/title.png" border=0 alt="Linux Input Drivers" width=512 height=64><br></td><td> <img SRC="images/r1i.png" border=0 width=32 height=64 alt=""><br></td></tr> <tr><td><img src="images/l2i.png" border=0 width=32 height=16 alt=""><br></td><td></td><td> <img SRC="images/r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td background="images/l3i.png"><img src="images/l3i.png" border=0 width=32 height=16 alt=""><br></td><td> <div align=center><strong> <a href="input.html#introduction">Introduction</a> - <a href="input.html#news">News</a> - <a href="../quick.html#download">Download</a> - <a href="joystick.html">Joysticks</a> - <a href="../quick.html">Quick Start</a> - <a href="input.html#documentation">Documentation</a> - <a href="input_hardware.html">Supported Hardware</a> - <a href="adapters.html">Adapters</a> - <a href="links.html">Links</a><br> </strong></div></td><td background="images/r3i.png"><img src="images/r3i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td><img src="images/l4i.png" border=0 width=32 height=16 alt=""><br></td><td> </td><td><img SRC="images/r4i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td><img src="images/l6i.png" border=0 width=32 height=16 alt=""><br></td><td background="images/m2i.png"> <img src="images/m2i.png" border=0 width=32 height=16 alt=""><br></td><td> <img src="images/r6i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td><img src="images/l2i.png" border=0 width=32 height=16 alt=""><br></td><td> </td><td><img SRC="images/r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td background="images/l3i.png"><img src="images/l3i.png" border=0 width=32 height=16 alt=""><br></td><td> <!-----------------------------------------------------------------------------------------------------------> <h2>Sun keyboard to PC serial port adapter</h2> <p> Many people have dreamed having their Sun Type 4 or Type 5 keyboard attached to their Linux box up to now. And with this adapter, it is finally possible. Because the standard Sun keyboards use TTL RS232 at 1200 bps to talk to the Suns, it's very easy to make them talk to any non-Sun computer by converting this to true RS232. All what you need is a MAX232 chip that'll take care about the correct voltage levels, and also some chip to invert the signals (CD4049 in the pic, I've used a 7400 quad-nand myself), since the MAX232 inverts them as well, and we don't need this. This all easily fits into a 25-pin serial connector. The schematic below was drawn by Leonardo M. Teixiera <leo...@in...>. <p> <div align=center> <img src="sunkbd.png" alt="Sun to RS232 interface schematic" width=578 height=366> </div> <p> <h2>Parport to AUX port adapter</h2> <p> In some cases one kbd port and one aux port is not enough and you may want to add another keyboard or mouse. You can use this adapter, together with the parkbd.c module for that. Schematics will follow sometime later. <p> <!-----------------------------------------------------------------------------------------------------------> <address> <p>Send any questions, comments, bug reports to: <a href="mailto:vo...@su...">Vojtech Pavlik <vo...@su...></a></p> </address> <div align=center> <a href="http://www.suse.cz/"><img src="images/sponsor.png" alt="Sponsored by SuSE" border=0 width=298 height=61></a> </div> </td><td background="images/r3i.png"><img src="images/r3i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td><img src="images/l5i.png" border=0 width=32 height=16 alt=""><br></td><td> </td><td><img SRC="images/r5i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td><img src="images/l7i.png" border=0 width=32 height=16 alt=""><br></td><td background="images/m2i.png"> <img src="images/m2i.png" border=0 width=32 height=16 alt=""><br> </td><td><img SRC="images/r7i.png" border=0 width=32 height=16 alt=""><br></td></tr> </table> </body> </html> --- NEW FILE: hardware.html --- <!DOCTYPE "-//IETF//DTD HTML 3.2//EN" PUBLIC> <html> <head> <meta name="description" content="Linux Input drivers"> <meta name="keywords" content="joystick gamepad keyboard mouse wheel force feedback touchpad tablet input device linux driver gnu"> <title>Linux Input Drivers</title> <LINK REV=MADE HREF="mailto:vo...@su..."> </head> <body text="#000000" bgcolor="#ffffff"> <table border=0 cellspacing=0 cellpadding=0 width="100%" bgcolor="#FFFFFF"> <tr><td><img SRC="images/l1i.png" border=0 width=32 height=64 alt=""><br></td><td width="100%" background="images/m1i.png"> <img src="images/title.png" border=0 alt="Linux Input Drivers" width=512 height=64><br></td><td> <img SRC="images/r1i.png" border=0 width=32 height=64 alt=""><br></td></tr> <tr><td><img src="images/l2i.png" border=0 width=32 height=16 alt=""><br></td><td></td><td> <img SRC="images/r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td background="images/l3i.png"><img src="images/l3i.png" border=0 width=32 height=16 alt=""><br></td><td> <div align=center><strong> <a href="input.html#introduction">Introduction</a> - <a href="input.html#news">News</a> - <a href="../quick.html#download">Download</a> - <a href="joystick.html">Joysticks</a> - <a href="../quick.html">Quick Start</a> - <a href="input.html#documentation">Documentation</a> - <a href="hardware.html">Supported Hardware</a> - <a href="adapters.html">Adapters</a> - <a href="links.html">Links</a><br> </strong></div></td><td background="images/r3i.png"><img src="images/r3i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td><img src="images/l4i.png" border=0 width=32 height=16 alt=""><br></td><td> </td><td><img SRC="images/r4i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td><img src="images/l6i.png" border=0 width=32 height=16 alt=""><br></td><td background="images/m2i.png"> <img src="images/m2i.png" border=0 width=32 height=16 alt=""><br></td><td> <img src="images/r6i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td><img src="images/l2i.png" border=0 width=32 height=16 alt=""><br></td><td> </td><td><img SRC="images/r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td background="images/l3i.png"><img src="images/l3i.png" border=0 width=32 height=16 alt=""><br></td><td> <!-----------------------------------------------------------------------------------------------------------> <h2><a name="hardware">Supported hardware</a></h2> <p> Currently supported devices are: <p> <ul> <li>PS/2 port controllers <ul> <li>i8042 AT kbd+aux controller <li>ct82c710 aux controller <li>Q40 kbd controller <li>Acorn RiscPC kbd controller <li>parport to aux adapter </ul> <li>Serial ports <ul> <li>serial port line discipline </ul> <li>Game ports <ul> <li>NS558 compatible gameports <ul> <li>Legacy ISA gameports <li>ISA PnP gameports <li>PCI gameports (SB Live!) </ul> <li>PCI ADC gameports <ul> <li>Aureal Vortex <li>Aureal Vortex2 <li>Trident 4DWave/DX <li>Trident 4DWave/NX </ul> <li>PDPI Lightning 4 advanced gameport card </ul> <li>PS/2 devices <ul> <li>AT keyboards (Set 2 and Set 3) <ul> <li>Set 2 (AT) keyboards native mode <li>Set 3 (PS/2) keyboards native mode <li>Set 2 Extended (IBM RapidAccess, Chicony ...) keyboards </ul> <li>XT keyboards <li>PS/2 mice <ul> <li>Standard PS/2 mice <li>Microsoft IntelliMouse/IntelliEye and other ImPS/2 mice <li>Mictosoft IntelliMouse Explorer and other ImExPS/2 5-button mice <li>Genius NetMouse/NetScroll and other GenPS/2 mice <li>Logitech Pilot, MouseMan, and other PS/2++ mice <li>Logitech TouchPad 3 (PS/2T++) </ul> </ul> <li>Serial devices <ul> <li>Serial mice (MSC, Sun, MS, MMan, IntelliMouse and MMWheel) <ul> <li>MouseSystems mice <li>Microsoft 2-button mice <li>Microsoft mice w/ middle-button detection <li>Logitech/Genius 3-button MS mode mice (MouseMan) <li>Microsoft IntelliMouse mice <li>Logitech MouseManWheel mice </ul> <li>Sun keyboards <ul> <li>Type 4 Sun keyboards <li>Type 5 Sun keyboards </ul> <li>Logitech WingMan Warrior joystick <li>LogiCad3d Magellan 6dof controllers <li>LabTec SpaceOrb/Avenger 6dof controller <li>LabTec SpaceBall 4000 FLX 6dof controller <li>Gunze AHL-51S touchscreen <li>Gravis Stinger <li>I-Force based joysticks and wheels (without force feedback) <ul> <li>Logitech WingMan Force <li>Logitech WingMan Force Wheel <li>Guillemot Race Leader Wheel <li>and others </ul> </ul> <li>Gameport devices <ul> <li>Analog joysticks and gamepads <ul> <li>Standard analog joysticks <li>CH FlightStick Pro compatible joysticks <li>ThrustMaster FCS compatible joysticks <li>Genius 6 and 8 button compatible gamepads <li>Saitek Cyborg 3D Digital <li>Saitek Cyborg 3D Digital Pad <li>Saitek R4 Racing Wheel </ul> <li>Assasin 3D and MadCatz Panther devices <ul> <li>FP-Gaming Assasin 3D trackball + ADC gameport <li>MadCatz Panther trackball + ADC gameport <li>MadCatz Panther XL joystick </ul> <li>Logitech ADI digital joysticks and gamepads <ul> <li>Logitech CyberMan 2 <li>Logitech ThunderPad Digital <li>Logitech WingMan Extreme Digital <li>Logitech WingMan Extreme Digital 3D <li>Logitech WingMan Formula <li>Logitech WingMan Gamepad <li>Logitech WingMan Gamepad Extreme <li>Logitech WingMan Gamepad USB <li>Logitech WingMan Interceptor </ul> <li>Creative Labs Blaster Cobra gamepad <li>Genius Digital joysticks <ul> <li>Genius Flight2000 F-23 joystick <li>Genius Flight2000 F-31 joystick <li>Genius G-09D gamepad (without force feedback) </ul> <li>Gravis GrIP joysticks and gamepads <ul> <li>Gravis GamePad Pro <li>Gravis BlackHawk Digital joystick <li>Gravis Xterminator Digital gamepad <li>Gravis Xterminator DualControl joystick </ul> <li>InterAct digital joysticks and gamepads <ul> <li>InterAct HammerHead/FX gamepad (without force feedback) <li>InterAct ProPad8 gamepad </ul> <li>ThrustMaster DirectConnect joysticks and gamepads <ul> <li>ThrustMaster Millenium 3D Inceptor <li>ThrustMaster Rage 3D <li>ThrustMaster FragMaster <li>ThrustMaster Fusion Digital Game Pad <li>ThrustMaster Attack Throttle </ul> <li>Microsoft SideWinder digital joysticks and gamepads <ul> <li>Microsoft SideWinder 3D Pro <li>Microsoft SideWinder Force Feedback Pro (without force feedback) <li>Microsoft SideWinder Force Feedback Wheel (without force feedback) <li>Microsoft SideWinder FreeStyle Pro <li>Microsoft SideWinder GamePad <li>Microsoft SideWinder Precision Pro <li>Microsoft SideWinder Precision Pro USB </ul> </ul> <li>Parallel port devices <ul> <li>Gaming console joysticks and gamepads <ul> <li>Multisystem joysticks (Atari, Amiga, Commodore, Amstrad) <li>Nintendo 64 gamepads <li>Nintendo Entertainment System (and clone - SVI, Pegasus ...) gamepads <li>Sega Genesis (MegaDrive) gamepads <li>Sega Genesis extended 5 and 6 button gamepads <li>Sega Master System gamepads <li>Sega Saturn gamepads <li>Sony PSX Analog gamepads <li>Sony PSX DualShock gamepads <li>Sony PSX gamepads <li>Sony PSX JogCon gamepads <li>Sony PSX MadCatz wheel <li>Sony PSX Namco stick <li>Sony PSX NegCon gamepads <li>Super Nintendo Entertainment System gamepads <li>0.8.0.2 Multisystem joystick interface <li>SNESKey/DirectPadPro parallel port joystick interfaces <li>TurboGraFX parallel port joystick interface </ul> </ul> <li>Bus devices <ul> <li>Inport busmice <ul> <li>Microsoft InPort busmouse <li>ATI XL busmouse </ul> <li>Logitech busmice <li>IBM PC110 touchpad <li>Amiga input devices <ul> <li>Amiga keyboard <li>Amiga mouse <li>Amiga digital joystick </ul> <li>Acorn RiscPC mouse </ul> <li>USB devices <ul> <li>Human Interface Device standard (HID) devices <ul> <li>HID Mice (w/ wheel) <li>HID Keyboards <li>HID Joysticks and gamepads <li>HID Digitizers and tablets </ul> <li>HID Boot Protocol devices <ul> <li>HIDBP Keyboards <li>HIDBP Mice </ul> <li>I-Force based joysticks and wheels (without force feedback) <ul> <li>Logitech WingMan Force <li>Logitech WingMan Force Wheel <li>and others </ul> <li>Wacom digitizers <ul> <li>Wacom Graphire <li>Wacom Intuos 4x5 <li>Wacom Intuos 6x8 <li>Wacom Intuos 9x12 <li>Wacom Intuos 12x12 <li>Wacom Intuos 12x18 </ul> </ul> </ul> <p> Devices that have a good chance to be supported soon: <p> <ul> <li>A4-Tech double-wheel MagicChip mice <li>HammerHead/FX and PSX RumblePack with ForceFeedback! <li>LabTec SpaceBall 2003 FLX <li>LabTec SpaceBall 3003 FLX <li>LogiCad3D CyberPuck <li>LogiCad3D Magellan Plus <li>Logitech CyberMan </ul> <p> Devices for which there is a hope to be supported sometime: <p> <ul> <li>Art+Com Joystick-Connect <li>BG Systems BeeBox <li>BG Systems CerealBox & FlyPanel <li>BG Systems FlyBox <li>Colorado Spectrum Notebook Gameport <li>Colorado Spectrum Workstation Gameport <li>Gravis GrIP MultiPort <li>I-Force force feedback <li>Immersion Impulse Engine 2000 <li>Immersion Interface Box <li>Logitech 3D Mouse <li>Microsoft SideWinder Force Feedback Pro & Wheel with ForceFeedback <li>Pegasus FreeD <li>Technology Playgroup Unwinder <li>ThrustMaster serial joysticks </ul> <p> If you have any input devices you'd like to be supported by these drivers, tell me! <p> <!-----------------------------------------------------------------------------------------------------------> <address> <p>Send any questions, comments, bug reports to: <a href="mailto:vo...@su...">Vojtech Pavlik <vo...@su...></a></p> </address> <div align=center> <a href="http://www.suse.cz/"><img src="sponsor.png" alt="Sponsored by SuSE" border=0 width=298 height=61></a> </div> </td><td background="images/r3i.png"><img src="images/r3i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td><img src="images/l5i.png" border=0 width=32 height=16 alt=""><br></td><td> </td><td><img SRC="images/r5i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td><img src="images/l7i.png" border=0 width=32 height=16 alt=""><br></td><td background="images/m2i.png"> <img src="images/m2i.png" border=0 width=32 height=16 alt=""><br> </td><td><img SRC="images/r7i.png" border=0 width=32 height=16 alt=""><br></td></tr> </table> </body> </html> --- NEW FILE: input.html --- <!DOCTYPE "-//IETF//DTD HTML 3.2//EN" PUBLIC> <html> <head> <meta name="description" content="Linux Input drivers"> <meta name="keywords" content="joystick gamepad keyboard mouse wheel force feedback touchpad tablet input device linux driver gnu"> <title>Linux Input Drivers</title> <LINK REV=MADE HREF="mailto:vo...@su..."> </head> <body text="#000000" bgcolor="#ffffff"> <table border=0 cellspacing=0 cellpadding=0 width="100%" bgcolor="#FFFFFF"> <tr><td><img SRC="images/l1i.png" border=0 width=32 height=64 alt=""><br></td><td width="100%" background="images/m1i.png"> <img src="images/title.png" border=0 alt="Linux Input Drivers" width=512 height=64><br></td><td> <img SRC="images/r1i.png" border=0 width=32 height=64 alt=""><br></td></tr> <tr><td><img src="images/l2i.png" border=0 width=32 height=16 alt=""><br></td><td></td><td> <img SRC="images/r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td background="images/l3i.png"><img src="images/l3i.png" border=0 width=32 height=16 alt=""><br></td><td> <div align=center><strong> <a href="input.html#introduction">Introduction</a> - <a href="input.html#news">News</a> - <a href="../quick.html#download">Download</a> - <a href="joystick.html">Joysticks</a> - <a href="../quick.html">Quick Start</a> - <a href="input.html#documentation">Documentation</a> - <a href="hardware.html">Supported Hardware</a> - <a href="adapters.html">Adapters</a> - <a href="links.html">Links</a><br> </strong></div></td><td background="r3i.png"><img src="r3i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td><img src="images/l4i.png" border=0 width=32 height=16 alt=""><br></td><td> </td><td><img SRC="images/r4i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td><img src="images/l6i.png" border=0 width=32 height=16 alt=""><br></td><td background="images/m2i.png"> <img src="images/m2i.png" border=0 width=32 height=16 alt=""><br></td><td> <img src="images/r6i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td><img src="images/l2i.png" border=0 width=32 height=16 alt=""><br></td><td> </td><td><img SRC="images/r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td background="images/l3i.png"><img src="images/l3i.png" border=0 width=32 height=16 alt=""><br></td><td> <!-----------------------------------------------------------------------------------------------------------> <p> <h2><a name="introduction">Introduction</a></h2> <p> The Linux Input Driver project is a project that replace the current handling of keyboards, mice and joysticks in Linux. It's finally modular, and attempts to merge as much of architecture independent code as possible. For mice, keyboards, joysticks and other input devices it tries to create a simple, easy to program for and uniform API, with straightforward binding to XInput. <p> The project is progressing quite rapidly, already supporting all previously supported PC/x86 devices, and more. Support for other architectures is lagging a little, but that's going to be fixed soon. <p> Many of the drivers were improved significantly during the proces of rewriting them for the Input Driver project - for example serial MouseSystems mice have two times the refresh rate with the Input Drivers (48 updates/sec), which makes them finally comfortable to use, AT keyboards and PS/2 mice can be plugged in and out at runtime, without problems, analog joysticks have much better resolution (9-12 bits). No more problems with autorepeat on Toshiba laptops, because autorepeat is done by software. It will soon offer tighter integration with <a href="http://www.alsa-project.org">ALSA</a> sound drivers for better gameport support. And more and more. <p> Parts of the Input Driver project are already integrated in the kernel - the core, userland interface modules and USB input device drivers are a part of the <a href="http://www.linux-usb.org/">kernel USB support</a>. A patch was created to replace the in-kernel Joystick Driver project with new Input Drivers. It adds significant benefits and fixes many bugs. Because the joystick driver is self contained and because the existing USB input device support will be use, there is a hope this change will happen in the 2.4 kernel cycle. See <a href="joystick.html">http://www.suse.cz/development/input/joystick.html</a>. <p> Replacing current keyboard and mouse drivers is a much larger surgery to the kernel, although needed badly. Because of that, integration of the rest of the Input Driver project will have to wait till the release of a developmental 2.5 kernel. It will go together with the rest of the <a href="http://linuxconsole.sourceforge.net/">Linux Console Project</a>. <p> <h2><a name="news">News</a></h2> <p> 2000/08/19 - Fixed support for PSX pads<br> 2000/08/19 - Added IM Explorer support, changed mousedev to emulate IM Ex instead of GenPS/2 for 5 buttons<br> 2000/08/18 - Added support for IBM RapidAccess and Chicony multimedia keyboards<br> 2000/08/17 - Fixed ns558 to correctly allocate its i/o region.<br> 2000/08/17 - Added a link to Franz Sirl's <a href="http://home.munich.netsurf.de/Franz.Sirl/inputppc.html">Input/PPC</a> page<br> 2000/08/17 - Merged in kernel USB fixes, fixed GenPS/2 emulation<br> 2000/07/14 - Fixed direction gamepad in sidewinder<br> 2000/06/25 - Fixed gamecon and db9<br> 2000/06/24 - Fixed support for SpaceBall 4000 FLX<br> 2000/06/23 - Fixed oops in joydev, evdev and mousedev<br> 2000/06/22 - Joystick input drivers are in the 2.4.0-test2 kernel!<br> 2000/06/21 - Created a joystick-only input patch, see <a href="joystick.html">http://www.suse.cz/development/input/joystick.html</a><br> 2000/06/21 - Added support for ESS Solo1 and S3 SonicVibes PCI gameports<br> 2000/06/08 - Updated installation guidelines - see Quick Start<br> 2000/06/08 - Added support for two ThrustMaster DirectConnect joysticks on one gameport, fully functional<br> 2000/06/07 - Saitek Cyborg 3D support fully functional in the analog driver<br> 2000/06/06 - Added support for Gravis Xterminator DualControl, better support for Xterminator Digital<br> <p> <h2><a name="version">Current version</a></h2> <p> The Input Drivers are still under heavy development. Because of that, it is not convenient to make versioned tarball or even rpm/deb releases, because for them to be useful the releases would have to be too frequent. <p> We are using CVS for keeping and distriubiting the drivers right now. As soon as the driver reach some state where they wouldn't happen to be obsoleted by new versions every few days, I'll make a bigger release - 1.0.0 - of the drivers. For now, the drivers are in the same CVS tree as the <a href="http://linuxconsole.sourceforge.net/">Linux Console Project</a>. This is because they depend on each other a lot and thus it is useful to develop them together. Also, you might want to take a look at the <a href="http://sourceforge.net/project/?group_id=3063">SourceForge page</a> of the Console/Input project. <p> <h2><a name="documentation">Documentation</a></h2> <p> You can find some documentation in the <code>linux/Documentation/input</code> directory in the CVS tree - it's not much, but it should get you started. A lot of it will come later, when I'm finished with writing the drivers. Anyway, using and configuring the drivers is very straightforward, so I don't think you'll have any trouble with that. Should you have any, just mail me, the e-mail address is at the end of this page. <p> <!-----------------------------------------------------------------------------------------------------------> <address> <p>Send any questions, comments, bug reports to: <a href="mailto:vo...@su...">Vojtech Pavlik <vo...@su...></a></p> </address> <div align=center> <a href="http://www.suse.cz/"><img src="images/sponsor.png" alt="Sponsored by SuSE" border=0 width=298 height=61></a> </div> </td><td background="images/r3i.png"><img src="images/r3i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td><img src="images/l5i.png" border=0 width=32 height=16 alt=""><br></td><td> </td><td><img SRC="images/r5i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td><img src="images/l7i.png" border=0 width=32 height=16 alt=""><br></td><td background="images/m2i.png"> <img src="images/m2i.png" border=0 width=32 height=16 alt=""><br> </td><td><img SRC="images/r7i.png" border=0 width=32 height=16 alt=""><br></td></tr> </table> </body> </html> --- NEW FILE: joystick.html --- <!DOCTYPE "-//IETF//DTD HTML 3.2//EN" PUBLIC> <html> <head> <meta name="description" content="Linux Input drivers"> <meta name="keywords" content="joystick gamepad keyboard mouse wheel force feedback touchpad tablet input device linux driver gnu"> <title>Linux Input Drivers</title> <LINK REV=MADE HREF="mailto:vo...@su..."> </head> <body text="#000000" bgcolor="#ffffff"> <table border=0 cellspacing=0 cellpadding=0 width="100%" bgcolor="#FFFFFF"> <tr><td><img SRC="images/l1i.png" border=0 width=32 height=64 alt=""><br></td><td width="100%" background="images/m1i.png"> <img src="images/title.png" border=0 alt="Linux Input Drivers" width=512 height=64><br></td><td> <img SRC="images/r1i.png" border=0 width=32 height=64 alt=""><br></td></tr> <tr><td><img src="images/l2i.png" border=0 width=32 height=16 alt=""><br></td><td></td><td> <img SRC="images/r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td background="images/l3i.png"><img src="images/l3i.png" border=0 width=32 height=16 alt=""><br></td><td> <div align=center><strong> <a href="input.html#introduction">Introduction</a> - <a href="input.html#news">News</a> - <a href="../quick.html#download">Download</a> - <a href="joystick.html">Joysticks</a> - <a href="../quick.html">Quick Start</a> - <a href="input.html#documentation">Documentation</a> - <a href="hardware.html">Supported Hardware</a> - <a href="adapters.html">Adapters</a> - <a href="links.html">Links</a><br> </strong></div></td><td background="images/r3i.png"><img src="images/r3i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td><img src="images/l4i.png" border=0 width=32 height=16 alt=""><br></td><td> </td><td><img SRC="images/r4i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td><img src="images/l6i.png" border=0 width=32 height=16 alt=""><br></td><td background="images/m2i.png"> <img src="images/m2i.png" border=0 width=32 height=16 alt=""><br></td><td> <img src="images/r6i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td><img src="images/l2i.png" border=0 width=32 height=16 alt=""><br></td><td> </td><td><img SRC="images/r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td background="images/l3i.png"><img src="images/l3i.png" border=0 width=32 height=16 alt=""><br></td><td> <!-----------------------------------------------------------------------------------------------------------> <h2>Joystick driver v2.0.0</h2> This is the next generation Linux joystick driver. It's based on the input drivers, but doesn't contain all of the input driver changes, just those needed so support all the joysticks. <p> It supports all joysticks the original joystick driver did (see <a href="hardware.html">Supported Hardware</a>) and a couple more, all bugs I knew of in the 1.2.15 driver are fixed and namely the detection of gameports was enhanced significantly. <p> The v2.0 driver is currently for 2.4 kernels only, but if enough people will need it, I can back port it to v2.2 kernels. There is no patch for the 2.4 kernels anymore, the driver is included in the official Linus's kernels now. <!-----------------------------------------------------------------------------------------------------------> <address> <p>Send any questions, comments, bug reports to: <a href="mailto:vo...@su...">Vojtech Pavlik <vo...@su...></a></p> </address> <div align=center> <a href="http://www.suse.cz/"><img src="images/sponsor.png" alt="Sponsored by SuSE" border=0 width=298 height=61></a> </div> </td><td background="images/r3i.png"><img src="images/r3i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td><img src="images/l5i.png" border=0 width=32 height=16 alt=""><br></td><td> </td><td><img SRC="images/r5i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td><img src="images/l7i.png" border=0 width=32 height=16 alt=""><br></td><td background="images/m2i.png"> <img src="images/m2i.png" border=0 width=32 height=16 alt=""><br> </td><td><img SRC="images/r7i.png" border=0 width=32 height=16 alt=""><br></td></tr> </table> </body> </html> --- NEW FILE: links.html --- <!DOCTYPE "-//IETF//DTD HTML 3.2//EN" PUBLIC> <html> <head> <meta name="description" content="Linux Input drivers"> <meta name="keywords" content="joystick gamepad keyboard mouse wheel force feedback touchpad tablet input device linux driver gnu"> <title>Linux Input Drivers</title> <LINK REV=MADE HREF="mailto:vo...@su..."> </head> <body text="#000000" bgcolor="#ffffff"> <table border=0 cellspacing=0 cellpadding=0 width="100%" bgcolor="#FFFFFF"> <tr><td><img SRC="images/l1i.png" border=0 width=32 height=64 alt=""><br></td><td width="100%" background="images/m1i.png"> <img src="images/title.png" border=0 alt="Linux Input Drivers" width=512 height=64><br></td><td> <img SRC="images/r1i.png" border=0 width=32 height=64 alt=""><br></td></tr> <tr><td><img src="images/l2i.png" border=0 width=32 height=16 alt=""><br></td><td></td><td> <img SRC="images/r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td background="images/l3i.png"><img src="images/l3i.png" border=0 width=32 height=16 alt=""><br></td><td> <div align=center><strong> <a href="input.html#introduction">Introduction</a> - <a href="input.html#news">News</a> - <a href="../quick.html#download">Download</a> - <a href="joystick.html">Joysticks</a> - <a href="../quick.html">Quick Start</a> - <a href="input.html#documentation">Documentation</a> - <a href="hardware.html">Supported Hardware</a> - <a href="adapters.html">Adapters</a> - <a href="links.html">Links</a><br> </strong></div></td><td background="images/r3i.png"><img src="images/r3i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td><img src="images/l4i.png" border=0 width=32 height=16 alt=""><br></td><td> </td><td><img SRC="images/r4i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td><img src="images/l6i.png" border=0 width=32 height=16 alt=""><br></td><td background="images/m2i.png"> <img src="images/m2i.png" border=0 width=32 height=16 alt=""><br></td><td> <img src="images/r6i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td><img src="images/l2i.png" border=0 width=32 height=16 alt=""><br></td><td> </td><td><img SRC="images/r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td background="images/l3i.png"><img src="images/l3i.png" border=0 width=32 height=16 alt=""><br></td><td> <!-----------------------------------------------------------------------------------------------------------> <h2>Related projects</h2> <ul> <li><a href="http://linuxconsole.sourceforge.net/">Linux Console Project</a> <li><a href="http://home.munich.netsurf.de/Franz.Sirl/inputppc.html">Franz Sirl's Input/PPC page</a> <li><a href="http://www.suse.cz/development/joystick/">Linux joystick driver project</a> <li><a href="http://www.alsa-project.org/">Linux Advanced Sound Architecture project</a> <li><a href="http://www.linux-usb.org">Linux USB project</a> </ul> <p> <h3>Linux mouse software</h3> <p> Following is a list of programs that support mice under Linux: <p> <ul> <li><a href="http://www.xfree86.org">XFree86</a> and all X programs <li><a href="http://www.svgalib.org">SVGAlib</a> <li>GPM </ul> <h3>Linux joystick software</h3> <p> Following is a list of programs that support joysticks under Linux: <p> <ul> <li><a href="http://www-unix.oit.umass.edu/~tetron/joy2key.html">joy2key</a> <li><a href="http://www.ditch.org/kbstick/">kbstick</a> <li><a href="http://www.h.shuttle.de/mitch/joyd.en.html">joyd</a> <li><a href="http://www.muppetlabs.com/linux/descent/">LDescent (with patches)</a> <li><a href="http://www.warpcore.org/~sekmu/d1x/source.html">D1 X Project</a> <li><a href="http://www.snes9x.com">SNES9x</a> <li><a href="http://www.cs.cmu.edu/~dsladic/vice/vice.html">VICE</a> <li><a href="http://xmame.retrogames.com">X-Mame</a> <li><a href="http://www.philosys.de/~kunze/xzx/">XZX</a> <li><a href="http://www.humboldt1.com/~ognir/dgen-sdl.html">DGen/SDL</a> <li><a href="http://tmmm.simplenet.com/tuxnes/index.html">TuxNES</a> <li><a href="http://www.aegistech.com/bfris-b.html">BFRIS</a> <li><a href="http://www.alphalink.com.au/~michg/ace/itetris">Intelligent Tetris</a> <li><a href="http://fox.mit.edu/xsw/">XShipWars</a> <li><a href="http://perso.club-internet.fr/hewat/carworld/carworld.htm">CarWorld</a> <li><a href="http://rcswww.urz.tu-dresden.de/~thenlich/poti/">Poti</a> <li><a href="http://www.kevinsworld.com/#LinuxStuff">JavaJoystick</a> <li><a href="http://www.asta.uni-essen.de/~raoul/resources/mjstest.c">Multiple Joystick test</a> <li><a href="http://www.trylinux.com/projects/joystick/gxtest.c">Curses Joystick test</a> <li><a href="http://fox.mit.edu/xsw/libjsw.htm">UNIX Joystick Driver wrapper library</a> <li><a href="http://www.geocities.com/SiliconValley/Vista/2964/linux.html">kcmjoy</a> <li><a href="http://www.geocities.com/CapeCanaveral/Lab/7731/jsr.html">JSR daemon</a> <li><a href="http://home.tu-clausthal.de/student/iMaze/">iMaze</a> <li><a href="http://www.xfree86.org/">XFree86</a> <li><a href="ftp://sunsite.unc.edu/pub/Linux/games/x11/video/rocks_n_diamonds-0.9b.tgz">Rocks'n'Diamonds</a> <li><a href="http://limax.paru.cas.cz/~hubicka/koules/English/koules.html">Koules</a> <li><a href="http://www.freiburg.linux.de/~uae/">UAE</a> <li><a href="http://sabre.cobite.com">Sabre</a> <li><a href="http://www.classicgaming.com/stella/">Stella</a> <li>ZapEm <li>SAsteroids <li>Xtet42 <li>Last Defender </ul> <p> <h3>Hardware documentation</h3> <p> Information on hardware programming joysticks can be found at: <p> <ul> <li>The driver source code ;-) <li>My own <a href="http://WWWSITE/joystick/specs.txt">specs.txt</a> notes <li><a href="http://www.hut.fi/Misc/Electronics/docs/joystick/">Joystick docs</a> at <a href="mailto:tom...@ik...">Tomi Engdahl</a>'s <a href="http://www.hut.fi/Misc/Electronics/index.html">electronics info page</a> <li><a href="http://www.funny.demon.co.uk/extreme/gravis.html">Linux AGGPP Driver</a> by <a href="mailto:tr...@fu...?subject=Extreme: GrIP driver">Thomas Rolfes</a> </ul> <p> <h3>Manufacturers</h3> <p> Here is a list of joystick (or other related device) manufacturers. Some seem not to have web pages. Updates to this table are welcome. <p> <ul> <li><a href="http://www.a4tech.com.tw/joy.html">A4Tech</a> <li><a href="http://www.actlab.com/gamegear/controllers/racing/index.htm">ACT Labs</a> <li>Agiler <li>Alfa Data <li><a href="http://www.alphadactyl.com/">AlphaDactyl</a> <li><a href="http://www.alpsusa.com/cgibin/var/alpsusa/index.html">Alps</a> <li>ArcadePro <li><a href="http://www.ariston.com/joystick.htm">Ariston</a> <li><a href="http://www.cosmosel.it/arowana/pag05.htm">Arowana</a> <li><a href="http://www.artcom.de">Art+Com</a> <li><a href="http://www.asciient.com/">ASCII Entertainment</a> <li><a href="http://www.bgsystems.com/">BG Systems</a> <li><a href="http://www.boeder.es/Productos/0cat03.htm">Boeder</a> <li><a href="http://www.chproducts.com/pcgear.html">CH Products</a> <li>Colorado Spectrum <li><a href="http://www.cppl.com.au/cobra.html">Creative Labs</a> <li><a href="http://ourworld.compuserve.com/homepages/extreme/">ECCI</a> <li><a href="http://www.fpgaming.com/index.html">FP Gaming</a> <li><a href="http://www.genreality.com/">General Reality</a> <li><a href="http://www.genius.kye.de/english/joy/joystick.htm">Genius</a> <li><a href="http://globaldevices.com/">Global Devices</a> <li><a href="http://www.gravis.com/products/">Gravis</a> <li><a href="http://www.happcontrols.com/amusement/joysticks/joysticks.htm">Happ Controls</a> <li><a href="http://www.force-feedback.com/">I-Force</a> <li><a href="http://www.imgpresents.com/jambox.htm">IMG</a> <li><a href="http://www.immerse.com">Immersion Corporation</a> <li><a href="http://www.interactiveio.com/iio1.htm">Interactive I/O</a> <li><a href="http://www.interact-acc.com/interactpc/gaming/index.html">InterAct</a> <li><a href="http://www.jcdesigns.com/gamecard/index.html">JC Designs</a> <li><a href="http://www.just4fun.de/produkt_e.htm">Just</a> <li><a href="http://www.leda.co.uk/UK/frames-uk.htm">LMP</a> <li><a href="http://www.computeraffair.com.au/l3main.html">Logic 3</a> <li><a href="http://www.logicad3d.com">LogiCad3D</a> <li><a href="http://www.logitech.ch">Logitech</a> <li><a href="http://www.madcatz.com/pc_lower.html">MadCatz</a> <li><a href="http://www.mcci.com/mcci/usbjoy.htm">MCCI</a> <li><a href="http://www.eu.microsoft.com/products/hardware/sidewinder/quick.htm">Microsoft</a> <li><a href="http://www.mousesystems.com/store/pcjoy_menu.htm">Mouse Systems</a> <li><a href="http://www.pdpi.net/">PDPI</a> <li><a href="http://www.pegatech.com/prod.html">Pegasus Technologies</a> <li><a href="http://www.polhemus.com/">Polhemus</a> <li><a href="http://www.primax-elec.com/game-O.htm">Primax</a> <li><a href="http://www.quickshot.com/gamecont.html">QuickShot</a> <li><a href="http://www.rockfire.com.tw/">Rockfire</a> <li><a href="http://www.saitek.com/products.html">Saitek</a> <li><a href="http://www.platinumsound.com/">SC&T</a> <li><a href="http://www.spacetec.com/PRODUCTS/prodover.htm">SpaceTec IMC</a> <li><a href="http://www.suncominc.com/products.html">Suncom</a> <li><a href="http://this.is/tpg/products/unwinder/">Technology PlayGroup</a> <li>TecnoPlus <li><a href="http://www.thrustmaster.com/products/products.htm">ThrustMaster</a> <li>Terra <li><a href="http://www.new-kewl.com/new-and-kewl/spots/spot-vivitar.html">Vivitar</a> <li>ZYE Technology </ul> <!-----------------------------------------------------------------------------------------------------------> <address> <p>Send any questions, comments, bug reports to: <a href="mailto:vo...@su...">Vojtech Pavlik <vo...@su...></a></p> </address> <div align=center> <a href="http://www.suse.cz/"><img src="sponsor.png" alt="Sponsored by SuSE" border=0 width=298 height=61></a> </div> </td><td background="r3i.png"><img src="r3i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td><img src="l5i.png" border=0 width=32 height=16 alt=""><br></td><td> </td><td><img SRC="r5i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td><img src="l7i.png" border=0 width=32 height=16 alt=""><br></td><td background="m2i.png"> <img src="m2i.png" border=0 width=32 height=16 alt=""><br> </td><td><img SRC="r7i.png" border=0 width=32 height=16 alt=""><br></td></tr> </table> </body> </html> |
From: James S. <jsi...@us...> - 2001-11-03 00:01:30
|
Update of /cvsroot/linuxconsole/ruby/web/htdocs/fbdev In directory usw-pr-cvs1:/tmp/cvs-serv17635/fbdev Log Message: Directory /cvsroot/linuxconsole/ruby/web/htdocs/fbdev added to the repository |
From: James S. <jsi...@us...> - 2001-11-03 00:01:02
|
Update of /cvsroot/linuxconsole/ruby/web/htdocs/input In directory usw-pr-cvs1:/tmp/cvs-serv17519/input Log Message: Directory /cvsroot/linuxconsole/ruby/web/htdocs/input added to the repository |
From: James S. <jsi...@us...> - 2001-11-02 23:51:53
|
Update of /cvsroot/linuxconsole/ruby/web/htdocs In directory usw-pr-cvs1:/tmp/cvs-serv15958 Modified Files: adapters.html hardware.html input.html joystick.html links.html quick.html Log Message: Fixed the pretty pictures links. Index: adapters.html =================================================================== RCS file: /cvsroot/linuxconsole/ruby/web/htdocs/adapters.html,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- adapters.html 2001/11/02 23:33:28 1.1 +++ adapters.html 2001/11/02 23:51:50 1.2 @@ -10,15 +10,14 @@ <body text="#000000" bgcolor="#ffffff"> <table border=0 cellspacing=0 cellpadding=0 width="100%" bgcolor="#FFFFFF"> -<tr><td><img SRC="l1i.png" border=0 width=32 height=64 alt=""><br></td><td width="100%" background="m1i.png"> -<img src="title.png" border=0 alt="Linux Input Drivers" width=512 height=64><br></td><td> -<img SRC="r1i.png" border=0 width=32 height=64 alt=""><br></td></tr> -<tr><td><img src="l2i.png" border=0 width=32 height=16 alt=""><br></td><td></td><td> -<img SRC="r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td background="l3i.png"><img src="l3i.png" border=0 width=32 height=16 alt=""><br></td><td> +<tr><td><img SRC="images/l1i.png" border=0 width=32 height=64 alt=""><br></td><td width="100%" background="images/m1i.png"> +<img src="images/title.png" border=0 alt="Linux Input Drivers" width=512 height=64><br></td><td> +<img SRC="images/r1i.png" border=0 width=32 height=64 alt=""><br></td></tr> +<tr><td><img src="images/l2i.png" border=0 width=32 height=16 alt=""><br></td><td></td><td> +<img SRC="images/r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td background="images/l3i.png"><img src="images/l3i.png" border=0 width=32 height=16 alt=""><br></td><td> <div align=center><strong> -<a href="http://www.suse.cz/development/">SuSE Labs</a> - <a href="index.html#introduction">Introduction</a> - <a href="index.html#news">News</a> - <a href="quick.html#download">Download</a> - @@ -29,15 +28,15 @@ <a href="adapters.html">Adapters</a> - <a href="links.html">Links</a><br> -</strong></div></td><td background="r3i.png"><img src="r3i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td><img src="l4i.png" border=0 width=32 height=16 alt=""><br></td><td> -</td><td><img SRC="r4i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td><img src="l6i.png" border=0 width=32 height=16 alt=""><br></td><td background="m2i.png"> -<img src="m2i.png" border=0 width=32 height=16 alt=""><br></td><td> -<img src="r6i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td><img src="l2i.png" border=0 width=32 height=16 alt=""><br></td><td> -</td><td><img SRC="r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td background="l3i.png"><img src="l3i.png" border=0 width=32 height=16 alt=""><br></td><td> +</strong></div></td><td background="images/r3i.png"><img src="images/r3i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td><img src="images/l4i.png" border=0 width=32 height=16 alt=""><br></td><td> +</td><td><img SRC="images/r4i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td><img src="images/l6i.png" border=0 width=32 height=16 alt=""><br></td><td background="images/m2i.png"> +<img src="images/m2i.png" border=0 width=32 height=16 alt=""><br></td><td> +<img src="images/r6i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td><img src="images/l2i.png" border=0 width=32 height=16 alt=""><br></td><td> +</td><td><img SRC="images/r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td background="images/l3i.png"><img src="images/l3i.png" border=0 width=32 height=16 alt=""><br></td><td> <!-----------------------------------------------------------------------------------------------------------> <h2>Sun keyboard to PC serial port adapter</h2> @@ -75,15 +74,15 @@ </address> <div align=center> -<a href="http://www.suse.cz/"><img src="sponsor.png" alt="Sponsored by SuSE" border=0 width=298 height=61></a> +<a href="http://www.suse.cz/"><img src="images/sponsor.png" alt="Sponsored by SuSE" border=0 width=298 height=61></a> </div> -</td><td background="r3i.png"><img src="r3i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td><img src="l5i.png" border=0 width=32 height=16 alt=""><br></td><td> -</td><td><img SRC="r5i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td><img src="l7i.png" border=0 width=32 height=16 alt=""><br></td><td background="m2i.png"> -<img src="m2i.png" border=0 width=32 height=16 alt=""><br> -</td><td><img SRC="r7i.png" border=0 width=32 height=16 alt=""><br></td></tr> +</td><td background="images/r3i.png"><img src="images/r3i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td><img src="images/l5i.png" border=0 width=32 height=16 alt=""><br></td><td> +</td><td><img SRC="images/r5i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td><img src="images/l7i.png" border=0 width=32 height=16 alt=""><br></td><td background="images/m2i.png"> +<img src="images/m2i.png" border=0 width=32 height=16 alt=""><br> +</td><td><img SRC="images/r7i.png" border=0 width=32 height=16 alt=""><br></td></tr> </table> </body> Index: hardware.html =================================================================== RCS file: /cvsroot/linuxconsole/ruby/web/htdocs/hardware.html,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- hardware.html 2001/11/02 23:33:28 1.1 +++ hardware.html 2001/11/02 23:51:50 1.2 @@ -10,15 +10,14 @@ <body text="#000000" bgcolor="#ffffff"> <table border=0 cellspacing=0 cellpadding=0 width="100%" bgcolor="#FFFFFF"> -<tr><td><img SRC="l1i.png" border=0 width=32 height=64 alt=""><br></td><td width="100%" background="m1i.png"> -<img src="title.png" border=0 alt="Linux Input Drivers" width=512 height=64><br></td><td> -<img SRC="r1i.png" border=0 width=32 height=64 alt=""><br></td></tr> -<tr><td><img src="l2i.png" border=0 width=32 height=16 alt=""><br></td><td></td><td> -<img SRC="r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td background="l3i.png"><img src="l3i.png" border=0 width=32 height=16 alt=""><br></td><td> +<tr><td><img SRC="images/l1i.png" border=0 width=32 height=64 alt=""><br></td><td width="100%" background="images/m1i.png"> +<img src="images/title.png" border=0 alt="Linux Input Drivers" width=512 height=64><br></td><td> +<img SRC="images/r1i.png" border=0 width=32 height=64 alt=""><br></td></tr> +<tr><td><img src="images/l2i.png" border=0 width=32 height=16 alt=""><br></td><td></td><td> +<img SRC="images/r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td background="images/l3i.png"><img src="images/l3i.png" border=0 width=32 height=16 alt=""><br></td><td> <div align=center><strong> -<a href="http://www.suse.cz/development/">SuSE Labs</a> - <a href="index.html#introduction">Introduction</a> - <a href="index.html#news">News</a> - <a href="quick.html#download">Download</a> - @@ -29,15 +28,15 @@ <a href="adapters.html">Adapters</a> - <a href="links.html">Links</a><br> -</strong></div></td><td background="r3i.png"><img src="r3i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td><img src="l4i.png" border=0 width=32 height=16 alt=""><br></td><td> -</td><td><img SRC="r4i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td><img src="l6i.png" border=0 width=32 height=16 alt=""><br></td><td background="m2i.png"> -<img src="m2i.png" border=0 width=32 height=16 alt=""><br></td><td> -<img src="r6i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td><img src="l2i.png" border=0 width=32 height=16 alt=""><br></td><td> -</td><td><img SRC="r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td background="l3i.png"><img src="l3i.png" border=0 width=32 height=16 alt=""><br></td><td> +</strong></div></td><td background="images/r3i.png"><img src="images/r3i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td><img src="images/l4i.png" border=0 width=32 height=16 alt=""><br></td><td> +</td><td><img SRC="images/r4i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td><img src="images/l6i.png" border=0 width=32 height=16 alt=""><br></td><td background="images/m2i.png"> +<img src="images/m2i.png" border=0 width=32 height=16 alt=""><br></td><td> +<img src="images/r6i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td><img src="images/l2i.png" border=0 width=32 height=16 alt=""><br></td><td> +</td><td><img SRC="images/r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td background="images/l3i.png"><img src="images/l3i.png" border=0 width=32 height=16 alt=""><br></td><td> <!-----------------------------------------------------------------------------------------------------------> <h2><a name="hardware">Supported hardware</a></h2> @@ -316,12 +315,12 @@ <a href="http://www.suse.cz/"><img src="sponsor.png" alt="Sponsored by SuSE" border=0 width=298 height=61></a> </div> -</td><td background="r3i.png"><img src="r3i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td><img src="l5i.png" border=0 width=32 height=16 alt=""><br></td><td> -</td><td><img SRC="r5i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td><img src="l7i.png" border=0 width=32 height=16 alt=""><br></td><td background="m2i.png"> -<img src="m2i.png" border=0 width=32 height=16 alt=""><br> -</td><td><img SRC="r7i.png" border=0 width=32 height=16 alt=""><br></td></tr> +</td><td background="images/r3i.png"><img src="images/r3i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td><img src="images/l5i.png" border=0 width=32 height=16 alt=""><br></td><td> +</td><td><img SRC="images/r5i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td><img src="images/l7i.png" border=0 width=32 height=16 alt=""><br></td><td background="images/m2i.png"> +<img src="images/m2i.png" border=0 width=32 height=16 alt=""><br> +</td><td><img SRC="images/r7i.png" border=0 width=32 height=16 alt=""><br></td></tr> </table> </body> Index: input.html =================================================================== RCS file: /cvsroot/linuxconsole/ruby/web/htdocs/input.html,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- input.html 2001/11/02 23:33:28 1.1 +++ input.html 2001/11/02 23:51:50 1.2 @@ -10,15 +10,14 @@ <body text="#000000" bgcolor="#ffffff"> <table border=0 cellspacing=0 cellpadding=0 width="100%" bgcolor="#FFFFFF"> -<tr><td><img SRC="l1i.png" border=0 width=32 height=64 alt=""><br></td><td width="100%" background="m1i.png"> -<img src="title.png" border=0 alt="Linux Input Drivers" width=512 height=64><br></td><td> -<img SRC="r1i.png" border=0 width=32 height=64 alt=""><br></td></tr> -<tr><td><img src="l2i.png" border=0 width=32 height=16 alt=""><br></td><td></td><td> -<img SRC="r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td background="l3i.png"><img src="l3i.png" border=0 width=32 height=16 alt=""><br></td><td> +<tr><td><img SRC="images/l1i.png" border=0 width=32 height=64 alt=""><br></td><td width="100%" background="images/m1i.png"> +<img src="images/title.png" border=0 alt="Linux Input Drivers" width=512 height=64><br></td><td> +<img SRC="images/r1i.png" border=0 width=32 height=64 alt=""><br></td></tr> +<tr><td><img src="images/l2i.png" border=0 width=32 height=16 alt=""><br></td><td></td><td> +<img SRC="images/r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td background="images/l3i.png"><img src="images/l3i.png" border=0 width=32 height=16 alt=""><br></td><td> <div align=center><strong> -<a href="http://www.suse.cz/development/">SuSE Labs</a> - <a href="index.html#introduction">Introduction</a> - <a href="index.html#news">News</a> - <a href="quick.html#download">Download</a> - @@ -30,14 +29,14 @@ <a href="links.html">Links</a><br> </strong></div></td><td background="r3i.png"><img src="r3i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td><img src="l4i.png" border=0 width=32 height=16 alt=""><br></td><td> -</td><td><img SRC="r4i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td><img src="l6i.png" border=0 width=32 height=16 alt=""><br></td><td background="m2i.png"> -<img src="m2i.png" border=0 width=32 height=16 alt=""><br></td><td> -<img src="r6i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td><img src="l2i.png" border=0 width=32 height=16 alt=""><br></td><td> -</td><td><img SRC="r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td background="l3i.png"><img src="l3i.png" border=0 width=32 height=16 alt=""><br></td><td> +<tr><td><img src="images/l4i.png" border=0 width=32 height=16 alt=""><br></td><td> +</td><td><img SRC="images/r4i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td><img src="images/l6i.png" border=0 width=32 height=16 alt=""><br></td><td background="images/m2i.png"> +<img src="images/m2i.png" border=0 width=32 height=16 alt=""><br></td><td> +<img src="images/r6i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td><img src="images/l2i.png" border=0 width=32 height=16 alt=""><br></td><td> +</td><td><img SRC="images/r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td background="images/l3i.png"><img src="images/l3i.png" border=0 width=32 height=16 alt=""><br></td><td> <!-----------------------------------------------------------------------------------------------------------> <p> @@ -138,15 +137,15 @@ </address> <div align=center> -<a href="http://www.suse.cz/"><img src="sponsor.png" alt="Sponsored by SuSE" border=0 width=298 height=61></a> +<a href="http://www.suse.cz/"><img src="images/sponsor.png" alt="Sponsored by SuSE" border=0 width=298 height=61></a> </div> -</td><td background="r3i.png"><img src="r3i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td><img src="l5i.png" border=0 width=32 height=16 alt=""><br></td><td> -</td><td><img SRC="r5i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td><img src="l7i.png" border=0 width=32 height=16 alt=""><br></td><td background="m2i.png"> -<img src="m2i.png" border=0 width=32 height=16 alt=""><br> -</td><td><img SRC="r7i.png" border=0 width=32 height=16 alt=""><br></td></tr> +</td><td background="images/r3i.png"><img src="images/r3i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td><img src="images/l5i.png" border=0 width=32 height=16 alt=""><br></td><td> +</td><td><img SRC="images/r5i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td><img src="images/l7i.png" border=0 width=32 height=16 alt=""><br></td><td background="images/m2i.png"> +<img src="images/m2i.png" border=0 width=32 height=16 alt=""><br> +</td><td><img SRC="images/r7i.png" border=0 width=32 height=16 alt=""><br></td></tr> </table> </body> Index: joystick.html =================================================================== RCS file: /cvsroot/linuxconsole/ruby/web/htdocs/joystick.html,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- joystick.html 2001/11/02 23:33:28 1.1 +++ joystick.html 2001/11/02 23:51:50 1.2 @@ -10,15 +10,14 @@ <body text="#000000" bgcolor="#ffffff"> <table border=0 cellspacing=0 cellpadding=0 width="100%" bgcolor="#FFFFFF"> -<tr><td><img SRC="l1i.png" border=0 width=32 height=64 alt=""><br></td><td width="100%" background="m1i.png"> -<img src="title.png" border=0 alt="Linux Input Drivers" width=512 height=64><br></td><td> -<img SRC="r1i.png" border=0 width=32 height=64 alt=""><br></td></tr> -<tr><td><img src="l2i.png" border=0 width=32 height=16 alt=""><br></td><td></td><td> -<img SRC="r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td background="l3i.png"><img src="l3i.png" border=0 width=32 height=16 alt=""><br></td><td> +<tr><td><img SRC="images/l1i.png" border=0 width=32 height=64 alt=""><br></td><td width="100%" background="images/m1i.png"> +<img src="images/title.png" border=0 alt="Linux Input Drivers" width=512 height=64><br></td><td> +<img SRC="images/r1i.png" border=0 width=32 height=64 alt=""><br></td></tr> +<tr><td><img src="images/l2i.png" border=0 width=32 height=16 alt=""><br></td><td></td><td> +<img SRC="images/r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td background="images/l3i.png"><img src="images/l3i.png" border=0 width=32 height=16 alt=""><br></td><td> <div align=center><strong> -<a href="http://www.suse.cz/development/">SuSE Labs</a> - <a href="index.html#introduction">Introduction</a> - <a href="index.html#news">News</a> - <a href="quick.html#download">Download</a> - @@ -29,15 +28,15 @@ <a href="adapters.html">Adapters</a> - <a href="links.html">Links</a><br> -</strong></div></td><td background="r3i.png"><img src="r3i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td><img src="l4i.png" border=0 width=32 height=16 alt=""><br></td><td> -</td><td><img SRC="r4i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td><img src="l6i.png" border=0 width=32 height=16 alt=""><br></td><td background="m2i.png"> -<img src="m2i.png" border=0 width=32 height=16 alt=""><br></td><td> -<img src="r6i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td><img src="l2i.png" border=0 width=32 height=16 alt=""><br></td><td> -</td><td><img SRC="r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td background="l3i.png"><img src="l3i.png" border=0 width=32 height=16 alt=""><br></td><td> +</strong></div></td><td background="images/r3i.png"><img src="images/r3i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td><img src="images/l4i.png" border=0 width=32 height=16 alt=""><br></td><td> +</td><td><img SRC="images/r4i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td><img src="images/l6i.png" border=0 width=32 height=16 alt=""><br></td><td background="images/m2i.png"> +<img src="images/m2i.png" border=0 width=32 height=16 alt=""><br></td><td> +<img src="images/r6i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td><img src="images/l2i.png" border=0 width=32 height=16 alt=""><br></td><td> +</td><td><img SRC="images/r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td background="images/l3i.png"><img src="images/l3i.png" border=0 width=32 height=16 alt=""><br></td><td> <!-----------------------------------------------------------------------------------------------------------> <h2>Joystick driver v2.0.0</h2> @@ -63,15 +62,15 @@ </address> <div align=center> -<a href="http://www.suse.cz/"><img src="sponsor.png" alt="Sponsored by SuSE" border=0 width=298 height=61></a> +<a href="http://www.suse.cz/"><img src="images/sponsor.png" alt="Sponsored by SuSE" border=0 width=298 height=61></a> </div> -</td><td background="r3i.png"><img src="r3i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td><img src="l5i.png" border=0 width=32 height=16 alt=""><br></td><td> -</td><td><img SRC="r5i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td><img src="l7i.png" border=0 width=32 height=16 alt=""><br></td><td background="m2i.png"> -<img src="m2i.png" border=0 width=32 height=16 alt=""><br> -</td><td><img SRC="r7i.png" border=0 width=32 height=16 alt=""><br></td></tr> +</td><td background="images/r3i.png"><img src="images/r3i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td><img src="images/l5i.png" border=0 width=32 height=16 alt=""><br></td><td> +</td><td><img SRC="images/r5i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td><img src="images/l7i.png" border=0 width=32 height=16 alt=""><br></td><td background="images/m2i.png"> +<img src="images/m2i.png" border=0 width=32 height=16 alt=""><br> +</td><td><img SRC="images/r7i.png" border=0 width=32 height=16 alt=""><br></td></tr> </table> </body> Index: links.html =================================================================== RCS file: /cvsroot/linuxconsole/ruby/web/htdocs/links.html,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- links.html 2001/11/02 23:33:28 1.1 +++ links.html 2001/11/02 23:51:50 1.2 @@ -10,15 +10,14 @@ <body text="#000000" bgcolor="#ffffff"> <table border=0 cellspacing=0 cellpadding=0 width="100%" bgcolor="#FFFFFF"> -<tr><td><img SRC="l1i.png" border=0 width=32 height=64 alt=""><br></td><td width="100%" background="m1i.png"> -<img src="title.png" border=0 alt="Linux Input Drivers" width=512 height=64><br></td><td> -<img SRC="r1i.png" border=0 width=32 height=64 alt=""><br></td></tr> -<tr><td><img src="l2i.png" border=0 width=32 height=16 alt=""><br></td><td></td><td> -<img SRC="r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td background="l3i.png"><img src="l3i.png" border=0 width=32 height=16 alt=""><br></td><td> +<tr><td><img SRC="images/l1i.png" border=0 width=32 height=64 alt=""><br></td><td width="100%" background="images/m1i.png"> +<img src="images/title.png" border=0 alt="Linux Input Drivers" width=512 height=64><br></td><td> +<img SRC="images/r1i.png" border=0 width=32 height=64 alt=""><br></td></tr> +<tr><td><img src="images/l2i.png" border=0 width=32 height=16 alt=""><br></td><td></td><td> +<img SRC="images/r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td background="images/l3i.png"><img src="images/l3i.png" border=0 width=32 height=16 alt=""><br></td><td> <div align=center><strong> -<a href="http://www.suse.cz/development/">SuSE Labs</a> - <a href="index.html#introduction">Introduction</a> - <a href="index.html#news">News</a> - <a href="quick.html#download">Download</a> - @@ -29,15 +28,15 @@ <a href="adapters.html">Adapters</a> - <a href="links.html">Links</a><br> -</strong></div></td><td background="r3i.png"><img src="r3i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td><img src="l4i.png" border=0 width=32 height=16 alt=""><br></td><td> -</td><td><img SRC="r4i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td><img src="l6i.png" border=0 width=32 height=16 alt=""><br></td><td background="m2i.png"> -<img src="m2i.png" border=0 width=32 height=16 alt=""><br></td><td> -<img src="r6i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td><img src="l2i.png" border=0 width=32 height=16 alt=""><br></td><td> -</td><td><img SRC="r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td background="l3i.png"><img src="l3i.png" border=0 width=32 height=16 alt=""><br></td><td> +</strong></div></td><td background="images/r3i.png"><img src="images/r3i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td><img src="images/l4i.png" border=0 width=32 height=16 alt=""><br></td><td> +</td><td><img SRC="images/r4i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td><img src="images/l6i.png" border=0 width=32 height=16 alt=""><br></td><td background="images/m2i.png"> +<img src="images/m2i.png" border=0 width=32 height=16 alt=""><br></td><td> +<img src="images/r6i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td><img src="images/l2i.png" border=0 width=32 height=16 alt=""><br></td><td> +</td><td><img SRC="images/r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td background="images/l3i.png"><img src="images/l3i.png" border=0 width=32 height=16 alt=""><br></td><td> <!-----------------------------------------------------------------------------------------------------------> <h2>Related projects</h2> Index: quick.html =================================================================== RCS file: /cvsroot/linuxconsole/ruby/web/htdocs/quick.html,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- quick.html 2001/11/02 23:33:28 1.1 +++ quick.html 2001/11/02 23:51:50 1.2 @@ -10,15 +10,14 @@ <body text="#000000" bgcolor="#ffffff"> <table border=0 cellspacing=0 cellpadding=0 width="100%" bgcolor="#FFFFFF"> -<tr><td><img SRC="l1i.png" border=0 width=32 height=64 alt=""><br></td><td width="100%" background="m1i.png"> -<img src="title.png" border=0 alt="Linux Input Drivers" width=512 height=64><br></td><td> -<img SRC="r1i.png" border=0 width=32 height=64 alt=""><br></td></tr> -<tr><td><img src="l2i.png" border=0 width=32 height=16 alt=""><br></td><td></td><td> -<img SRC="r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td background="l3i.png"><img src="l3i.png" border=0 width=32 height=16 alt=""><br></td><td> +<tr><td><img SRC="images/l1i.png" border=0 width=32 height=64 alt=""><br></td><td width="100%" background="images/m1i.png"> +<img src="images/title.png" border=0 alt="Linux Input Drivers" width=512 height=64><br></td><td> +<img SRC="images/r1i.png" border=0 width=32 height=64 alt=""><br></td></tr> +<tr><td><img src="images/l2i.png" border=0 width=32 height=16 alt=""><br></td><td></td><td> +<img SRC="images/r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td background="images/l3i.png"><img src="images/l3i.png" border=0 width=32 height=16 alt=""><br></td><td> <div align=center><strong> -<a href="http://www.suse.cz/development/">SuSE Labs</a> - <a href="index.html#introduction">Introduction</a> - <a href="index.html#news">News</a> - <a href="quick.html#download">Download</a> - @@ -29,15 +28,15 @@ <a href="adapters.html">Adapters</a> - <a href="links.html">Links</a><br> -</strong></div></td><td background="r3i.png"><img src="r3i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td><img src="l4i.png" border=0 width=32 height=16 alt=""><br></td><td> -</td><td><img SRC="r4i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td><img src="l6i.png" border=0 width=32 height=16 alt=""><br></td><td background="m2i.png"> -<img src="m2i.png" border=0 width=32 height=16 alt=""><br></td><td> -<img src="r6i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td><img src="l2i.png" border=0 width=32 height=16 alt=""><br></td><td> -</td><td><img SRC="r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> -<tr><td background="l3i.png"><img src="l3i.png" border=0 width=32 height=16 alt=""><br></td><td> +</strong></div></td><td background="images/r3i.png"><img src="images/r3i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td><img src="images/l4i.png" border=0 width=32 height=16 alt=""><br></td><td> +</td><td><img SRC="images/r4i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td><img src="images/l6i.png" border=0 width=32 height=16 alt=""><br></td><td background="images/m2i.png"> +<img src="images/m2i.png" border=0 width=32 height=16 alt=""><br></td><td> +<img src="images/r6i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td><img src="images/l2i.png" border=0 width=32 height=16 alt=""><br></td><td> +</td><td><img SRC="images/r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> +<tr><td background="images/l3i.png"><img src="images/l3i.png" border=0 width=32 height=16 alt=""><br></td><td> <!-----------------------------------------------------------------------------------------------------------> <h2>Quick Start</h2> |
From: James S. <jsi...@us...> - 2001-11-02 23:35:43
|
Update of /cvsroot/linuxconsole/ruby/web In directory usw-pr-cvs1:/tmp/cvs-serv12861 Removed Files: index.html Log Message: Moved files around. --- index.html DELETED --- |
From: James S. <jsi...@us...> - 2001-11-02 23:34:41
|
Update of /cvsroot/linuxconsole/ruby/web/htdocs/images In directory usw-pr-cvs1:/tmp/cvs-serv12508 Added Files: l1i.png l2i.png l3i.png l4i.png l5i.png l6i.png l7i.png m1i.png m2i.png r1i.png r2i.png r3i.png r4i.png r5i.png r6i.png r7i.png sponsor.png title.png Log Message: Putting pretty pictures into CVS. --- NEW FILE: l1i.png --- PNG nò´RÄVi;ÒÆI2Igî»ÇÅÌdÞyï5É@æÍ½ç|Ï÷{ιouqqqìK í äeûvVµã ) Ðh/d-úlnæ#=| ;²¬ ½¾Ù®ÊùĺX ÜïmôKñûbð þ0ݧ»_n:¹à|²R$8Ý,Ò °p6;+JW5¡õ ¤êbzÀ8@ÞÀFMÌG¬ø.çILÒÓòÁÆòjñ5éYËJW.LêIN¬àa§Ý/ÃÏ i°<ÄìsP X°)°,þ5Ñ.dàjw ¥³æ30Ñ}UjSp`£·s³i ö]ÓZÛ}v}E&»S|õvM¼¿âÔ&ÁòPèfò^óï?ÞÐ:õMõr¸õ¨×³_òRXn¾§Ã-dvN îå:ª¨>¨B SP°pØ,P%U_Ðl¥P röV Ówªæºs¾ÝXW,ß¶Öu_p³)»³Ø ûG£ûÖ6`yUIvg¿+±«Ø Xq<LúêuåÝl%@¬íCêöZA×÷ 87y&ª?1Y»ÁíêmtAÃ`(áM|Ï ¬KhØ --- NEW FILE: l2i.png --- PNG --- NEW FILE: l3i.png --- PNG 0C®þÑø¾À7öZÊxªHª´R([K2KB ^)N)^II ê±B³ÅîÙ,ì^~8APs%n¥{×G87°±t$©çn --- NEW FILE: l4i.png --- PNG --- NEW FILE: l5i.png --- PNG 9Ðv1¶ÒE¿gØOÝs[çµ¥}y¨Ó+2~Tí"keÙG~RýSí½]xÂ#Çà#wvîÆ0(:ôÅ1øÅÊòªò¿±RàÀæM¾Å±9w2ÿ>ý®ûÀÄãèÿR^µ×Ü[;·»o --- NEW FILE: l6i.png --- PNG --- NEW FILE: l7i.png --- PNG h£)¶ºÃïÂÃëjui%p=±ÙbÒL_/x ç:|q§P #gOá+}q+ä$¿[/3N°@µÆ«W`pÀ ·7µ·l_Kà7p(W mïò|ÿDÜøt92©nTéÏ4¥ssóB_A¼éhÐàzMä®*XX<RCEB« )¹ó`#±ä7'Z"ǾEG 'ÑîAYÊãÁ)P*@#ÀÁb}õæì --- NEW FILE: m1i.png --- PNG ¡ ¡ ¡Ð.:>»ºP P P ¾K úú DøõèxwÜf --- NEW FILE: m2i.png --- PNG Lð"ýãp,` 0¾Ph Övj¤Â!§cJ --- NEW FILE: r1i.png --- PNG -$V)¾mimlvf®ÍÎìÎÜÙÙÖ/,û;çïù{î%{½]û¡8acå3 eCºaà´Wïß>1õýèPÁôhÕQh0vèÙÓZ,<ÖZj3´ÉÐæj[OFõ(¥îç´ÅÖQ -2Þ@'"åÝ>yÍ0`4ÀÓtOôÖèáëOêO?Õ¶¶u³6ÂÞ÷rºóTCÔw¤ ÖÁð3Ãéø1&¹áÿ 3Ï`ÍeøÅ6 º%êP#ÎÃ#ß>ʱ¥±ê«Ãñ÷BÔw$S'ê_úÖ`tSíDÛÁ,ÉZ48»n=Õ@S5x²y:ÛÚ0#¯Â/s*÷Mô\°þ5WàÄo);ÒEpsS56Ô2_:n:OØßÇPØ,í{)BLw+éR: =¢'ݺPÒ¥*´ª©FSÈùK[ÜöÎLA$YÚü¯kÜB7ë½-mÚjîá U@¡yU*Jt¦±íLxùt ºSò¸ÒX@[¥|.` ¨>ÅÎìNödc$û<Y ÕÞq ôÌÓ/úcì&)fÁfá§1L¾7 0}msÎlÌÖмð® â2¯O.2 Ë73ÎLõ< îÐ&R¼åi ywrÛ6'À»,ÖÐÚj-{»;`îfÁÍ´üXÐÀ x{ÜçF *gUmqG¡þ/ÇU \↓^á¥;c½üI2°9ýx3·"-?^§¯ËYuW¬»ÀCc×áHKt --- NEW FILE: r2i.png --- PNG ½[+¨ãaÉ0O0ñ:Ið(WL9®B¬ EküÍeÛEq·Úè8wÀ)ðHyø@²+vt§Ft,ãM¶y½UÃ;íÙ@úM¼S*ã »%ôÀl-Ú±V±'ôW --- NEW FILE: r3i.png --- PNG 0ÜÐÝD² ;æà æÏ¬ðèNa0j --- NEW FILE: r4i.png --- PNG 8²]ßI¶÷é+VM|ùqUÀg¡èQ;¾ø.QéUàåz®¡Nþ³Ýµa°Õþ¤àùÀÂ3/Ï --- NEW FILE: r5i.png --- PNG --- NEW FILE: r6i.png --- PNG .ª¶>R0õKX õþXaÉðÕ({0$Á DK0çð#ÍþäÂm¼»`CØÜc¥¼¾ÖBÙc--MÝF¦y --- NEW FILE: r7i.png --- PNG Pkìç½ÚOâH \`7p »UÀºùo[ÁpfsÇxf=MÐp»QAUª¬Ø/)I)¹üV»ßf¬ Óø°)ÀãzÅûäÈ¥r$ --- NEW FILE: sponsor.png --- PNG æ49·jaé8X/ñ6åØì+&5Û¢@Ø Êú&·QÞ-äyx«= iõ×OïglËL6 EVâÉZÆúØ~6P9ÕVÖBÜagÇEÌ`øÁ§n8~9ÍÍ-Cíܰݨ\ r0¸®qØe»'°ï/Y6Þn9ÈéÂ=»v%7ïäꦥ-Hñy/vPhÅQ^UÎÕDå&Tî¶[ºÛîZÜ2=¥ÜRøQ£ÖÁ´ «¶âWU° P¬¶ÕuÄ81-Îï?vÞøò£{ý ì[¾ fx8Ä%[C²ú >_"=óà ®ÛÊ JðÏð}Pmz8®D¶½ú Gµ¹RÜP(ÔÝDqG¶3hÁrW rµ ØjÆwc_«¯G"/µ5TÃ±ÓæÌ3!<asÏ9gÓÎL(Psü>Ë&O®nîI,®¹º.èª1hªª¦Ca©v5wBK_ßæ+ÔÐ Í©©SÃÊùÕp0°9lXÐz~ÊRSãw>eǼsÿí ¬WPv¾ ¸® ]=B<qÅ"·¸g´ô °6 "åxørQ_ÕoN>꺴< ØÓ|äªÙj㪫íÙ×ì¸N-{¥&¡âppKÏY¼Èáuðãèï "ª¨O5ytäwºÑ+N4M\#ÝÀ:Òk3ý$þcu§ùï[ýù¸ {§þqÇÝÂñ$* Ëv¯í5ÍýQ7å7½ìgÏËeë9tù<ËÕ&M bêÑpçQ råÈjïKªp±`ÓE®3^@07$ãIHY!þ&^E¼©Èù·¸£OF.)YtïÐ)õ `#´îÞþf/¨ÈUÝôñ3Q%BEÉöñ Ï ¨©WµÀÂ;ú¦¶xÚSÕá£n5`ü©8ß\¸ µ£hê×X¸¦«oêLxìJ ÄÅ µ$"@ë©ÕA*·a¦øU¹]ýZõãê¸W«Uj®JÎáÊP(>àeTâB1e'~i, .¶"Âͺ@Ñ}D§éj+ê¨EX ¦¦ãyÍ)ÿøÈyõ£e{ùÚv*pò.Uq-7Z+EH8NS 1£DÎiȬÓAÏÆÎi(Ñh!µ, -±óÒÖ ú¦±kgÀðÖ'ìu?S2nîÀ©ÄãøfWÌ;8DdM?q&ââ2·Fª=?¦Ó³¥{²Ê©ËK±$¤W_¼·æÒ /;×ug/¶ío/^lìÌFpå{«&C\¶YÌQ 0ü§ÿ|íþØèÛãÃ2&\÷ÂÕ Ñ'ÝG*ràFSÂYdíÆ5εFIKãß ï|1\ñê,10V6CÓöí¥Ñ´sðÎÞhWdÊ`0¨¨¤Ýæ£7,ÄF M÷£füÂ7'8£È^XP¿ZF§&U@ ¦]k §¿Q®8ÃñÐ5}/KðôVM[ÓæESÀtíõzl±¢n h$y p¶ ù¡m±¥6Et&a`dtÄ3×ÄS=CºÜmÝPårËÀÏÊ@d¸V`·åH\WQHT$óÕ¼8z¬å! !jÅD"¹ÝA ÍíA¢(£}"¶¦L¦UéëÂ}"å¡ZQÌUjIÊ&Yâº5³¯×]ÚÕi¦C£+\}îÂEðÝëï¸ë£_esnûñf¼þòGÃaQs²yøám±e*:Ï"ª;E«Ò_MÝSçEió*U°Ü@{Ï´s»B*VÅ[£[¢d ¥ HIJªªª½huSÑ g$\NÄÔÄÒú²ÞÔTRM;e «TGÅÆ;±/M§Î¤UÿÀB!*VBÆð?¨vVÍËR+ÚîÂ3Û6«/ûË.»ls®þ{Õ¿íúÚeWÓÐ&_øO<¼ $716¨î6J"åpÕ2ñLb iO(D.÷&ѧJ竱XjÖa¯ë\NòÄ6$+!*÷Ù~yCmE1|Û©$_Ûugâ$¨á6õ1DE-ïB ÀWÚ*fEMÑUXñIUÐã7Ú'´JlaóH«Y·'^g£nw_A»Ê,±^ È>^8~ ýÕ455}óúW^yäd}iQQQ}}ý+õ'O¾RÿÂõ¨¯/z¯KK°®ôàôJ[ø:GUdTìvt¹£°ÕèDh ® 9t" ±Õ´OİßÑhpþÉP"¤Îåë¨ÛgÀ*)*µÕHÂÁDâå$Ôþع£ ¿C*FuoØH±zËç6LÁFgq=屺§ÞÑ%é#Kت§ú£g)µttÅq12ò]©b¹X yOp÷oû¯øð¦dJp'ä^ü2É,çç{çã÷W«P6øîgÇþýy°ªÀ_nÚ´a¹ÌÊjæ¨f]ßËdDåV×TUª½ý`Z¤ÓNÕP3úÑðªüªî_R]n¥}Çq±2Ñ&d,KN¸ÉÃê~&Vq$ÍwÈÒæGîNC ñî«9JDÑzEÇ.êýï3 ìêqO¬EQ¹nõ'¯Þyüc7Ôe½RÃm_±ÓkÂè~'ìNñ-ÒÃ?úqÑ'Í̤ËÒÙE ÊXz« +ê÷U¬Ü×d2b£ìT %+.xÜ_qäbïG.èÇ'ÃÔÛ[ þý"¯ÑÙ"þo_Äï\²1Y7düÿ0¶~VÏLT_ÿÄò[òÏ?ÃÍð_0uäÝ5±K¾7åK½ÍîWo --- NEW FILE: title.png --- PNG ´PB¡´B@IØ- í ¿«HS µ ç¦$ !Cj%9=Nê¦WW¯«¤tRkùHWH ÊÏÏ,ýÝtOU¸q0d¥â×]¾ÀÌo$ª5 7ѨéùºÀõ§@ÅÚËÚÍuí|¤ÄÉA üËüçÜúÑÏqcÄxkUn¬ Q'´ DÊï.4þ¸R:SÀí=Èx¦At @`z ë|`@¹@(ØÍêJÄw\ 0 ´FMýÉvVZÕGÿÜÔV]<ê1V?c " Ýkù1½¶qV.ºl´¢f´»Â)]R)&,Ñ¢¢/*.2$}F/J 7&Ü}Þh ¦p¥×0Ü<mêôjªÆéQìë¾ øÿ r¡ ?xý¨ÈëZùÞ7T{]@+ú©b'sà§Y6Wï(âFpo)Icß7^ðà]Ez;¼~ÔKóYaf5<yÍô|íaíר×yÙ¹Ùk.Í?3#^kCÿKývâü®gg͹®î0m'C}¼j+s³Jþ{Rå[¿>wKúp ²6ÖD(D2Áá¤>iD9$²õ/_ñu rþÕV¬YÂÚÙ þñÞ;ÏýnÕ¥ßxÆ9g7µuªr7 Ù.4!¨ïþ¡Â³]vÖ̽{÷>ã}`õª{wí9z´¾££søèQ¯<û]o·m9c³L)»,ìú7˦f/}³Ì©@¤peè¿ ;½ÒбñæÂù©n^lD/6ý¼Ê0D<úFSíê±§Úä¾2,A"Ä"«ÎSB ¤*Ðtq Hzn <fFÐÄIaï¬ ÜnwzuFÛèc"×ÿ&ÀÌd% ì$r ¶¾^?*/ÉT±Û»àE7x÷as ÉKob¡åý«0Ý^¥Ï.sLÔ°ÊÁÛêÚ§-ßLp¤knSðänWÖ©*ÖÎq±îÒS"Kú¯f³»ÒiZV¥q¨xèÂEgg¬ÜÒ´ô ?9r$))ië{ïÚRÓÆë÷ûý~vv¶>æ¨ÈÚÿ>°æÒüÒ¶yÖlz2H8 ÆÒjù*·Í{ÈM L þª@þ »<m2¥ =æpû¸¡£i¸È@8©t}Ý\' %SÀ~(õ*µdÌ´BÚÈP 6,, øDðt .pqg¯Úç<U>S| Hkê¦mªÚ*ª¼ B¢áëOk=Ý0=²±ñè!CÒiuuuïýsëâ[ë=sò¤ý»>o¸tûû:ïâKÌf³×ëmïnÀÛ¡"BñèÃ== D2QÜî }¯×FöâiS æß¸KsbäB¹õºcêenĺ9N 4`á9é+×Gk/-¶m\P ¯l§§CÖ0½´é±á¦G²QÌuA·0À'4ý¨ýþG )¹Õ{÷ÿâ§ûÁkÏnqÁ=r´½ãØÔiß2zý¯0¡Ø]ýÑôTø·íSæ~2)iÀ*Ãn×1·3YÒÄ0k2|à@ì@ñ1F+`åÁÇ&(#Ê26¨õvÀK72w ²ÁmÒR Èà d (ÀÇÀõP:ÈAú¢¦ ʪú¯! ÜÊð&ÀJ^Opº ÿÇ>@fXOì @çËv/}öïlY¹ ¨ÁÊVîÉ/ÿ«JsS2ü¨ìÁ'¾lTa³?_ÿéâg½F¹D¹D D,!z ¢ÆA%^H½uïéRxÈáOÚöñ£EKÖ1¥p¤©ö½.VÒ]UOÆéãC0»ãô6ô3T¦`Fè¯çBíÅþ<ìò ,BîøÓ¹anñÑþ Á9Ô9cÆG~ôþûï<yòùÏ!Vö©j`ý2O&9-¥E¶%/{tèsôJtªï$U zâ¬üGw) ç· íF`âÀÄsþ°rº[% `âÿ ä#¾Ù¼$SÅ.ïù´6ò¼«8ÚôpUD§}^=½ðU:N Ó_èØ^ß=õ làÏõªï$U ?®úFZѸz¿e~Ê,?ÄÜÆ!SèDºtÚw FÀ|2* õYõÞ{øýŶ õ-ÔÍþM®¶Ù%vå°úDÍÿÑ.ÄC}®8Ç $÷#éCM z]À½ösTêú3r+\Þ Ë/ppV$æº`Â$§%´[ݺ»×GÅxä-ÙY·|\é8Û K8LÿÛj· fÔ>56/É$®w!NÿÐò.¯r©kJ&%[æ>]8¬¨i\>Úaº©À?µFÓ9`æ¹õ%øDq îó«@ù.鯝ðñG*AyĨ1ÉÉÞ.ïý÷ß_VVÀ¾½¤sA¥0 MÙÎÔAN`0#AÙèö Ùí·½äñ¨!ý6ûtOJ4͵»uDZ¥¦7L ÂNAHì?#!]@K0¥rûfÐëw Ç~|í®=%O§Liá¡¢Ý$MÖs¶úQ^Û÷æìÙ³CAÞ³kçÈaCíXë®{eóËYéN§Àsß[xå²ò¬3K¶üèöûv9ò;îX·iû ;´y¸|'Rq¼;(îe8F àÑ5MÜÎâr/¤hötÝ1)1© @IVp u±êePÃéöÜ m±:g?Ñ8£63º4{cïAÈEý [¤«@jkîKþvÚz!í¨mBÇ©@ÇFjbtäþåq£]XñRcÙÌÌu?tÎ]U¨åDâ?ý¬¶1$ Ñ£mVÙ¯Ô.Ö§04üo Pã]½j5>ÀÕv¦ Ø úù§QggGzzÚÚ}Ï=ò{¼ÞÌLûä³&üfåSÃÇ`6ÛSC!u×Þ] üG«ÕÞ9väþ¸ý"Dõ¹ôä¼@±0}1*!¸Ê*ÑS *(«· rDR§«+ÉQèУ§¾x@ÊèÄí¯7Ìj=;ùïfw»æ¨9ñèW=Å>?Í DnQ;ÆÒ ì;´u¶$@dRz)*ÌÉpû« ÂNëûåa^¦ }'#|êð¤T ºòq rTÛ¹ëÍc)7Ñx£Ã(ØÑÀþ¢ºÖàº8ËÒc^iþZ7Ë EÇéÆh! ,+.Ì=ëûÔgJnývúõ±*P¶$yÉ0êÚã@½ÐjWç¸tÝ,^à$§eÛÛª»Äu.tP:,@é»ÚZn¨BÇ?H$"¾ªõ+þÖXvqfÝÞ LcOèXáü²][W^+É¿ÓsP n÷+7åö¼Ö@2'ã·oõ lP&!>ã:n7òú;K§ØÔuþ£aóg^½A8_î î<0ç¶ÇôÔÖþñ¿©Ý6¡àÑÚlÖ:wMμ¼!ù õ,ææÆú±ê{*OuRQîÀÒÝyPë0ð)¦¢Ñ&!ÀÏìd°ÌGJ#|^´MJ (7±¦l+ÛíÀ&ø «ª-ú ·?ÐcíÔÐK6r-ma=Ä0@ìI >EìÄP{ÃáuÓâC1£-â5¢ _Ä,ixÔ¾{ÿt»Ux¦önOß Ú^ (HLéõzo*»iJó9¶ÉN¤Ûö>ôPÙ£®¶#måiåm-m ÷ø«£&9-¥ÅöÈ[úG_\t^ÆÒ^"»21Iõ$l«îötɺ"|òv&íªhë´& °p䪾s3¢{)8ÜÈÿÑ®åW9Ê.ϰþ{Îm{»Î¾s¿~ÙYÊ.ÌÔØÒ ,¯+̱f Hàt/ 4Ä6ðºÓ$¡IbÁ¤Ûd:¡1HÂmlãI%¤mIJCj¼ûý8çÞºU*ɱ;YÎò×ÒÎ>û½÷·§Åî×-â}á½î»k[CÝÉfN7ï'¨w^P$¾AÜWw¤ÿÑWÛkÞ æÿ³1 ÃöPQÁxìªÛ( u0iÒ¤² Øá´Ë.'ßyø;÷ßf,^òθ·©ÑgÙ6RµÚj'Zñ^x¥iF( ®Õ¶ç$8Æ`F¬ÀSPS%DÙ8± YöçÍEêUÙfà¾WC¦ vÑÛ+ª? =Èb cy§ 6¬£ß25ÊÐ{I@aÒg°ZÖá¾´Ò³ôË>ÚÇ §E¶ j)Æ=?m]Ræ^:Ã`CuÞÇ~ÓCÙä~`ýK,ÅÃð.ÀÃì`=È ÷ ng×{ïÍ9[O'»::fÏ}èÐ!Ã1©lÒëüÓ3}O ÃÝO>ñäÊÏJ¥z»»ÊÇ9Ý~Ýî÷°ã£»o¹ëµÉ_Ýñ;§kV,õÇ^{åµ+®¸"f&ï<ø-¶]©F 4êph úûûÆGT"YP8.ÜÓçtyÆM8ðOO^}õÕ·ÜrKÎC®Yû¥Î;> 6Mr9§äå{öïë?°¯°¨dÞ¼yâóÏ?_è¡áΰËçè %ù4á ãxÛ˰8¤8½9Æ ><5÷dC@'Yv==VG»V9mHªùÖ÷<Ѫ÷2RÇ,ïáF´¬iÎéo`óí>ÉÌ0Sqåæ÷7Ì+/Ò4¹zº ã [6£å oÈFpcÛ¾ý¦éÞîúø~¢jzÁÖÛ+´¼p^ÍÝ+ÂòùóLäÝ*8õ(É¢4e<!J- xó6'0Ì ")ãå¹OÄ!ñá©ØrY.O °òGA8 .HHÓ>²DÛwâuÍNs<H&Ré^1¹RS ;çÍÛÑy|Oó;íÍ'~þÌ_þÜ?þvËs NçCÿúà÷×?²ý¥ß½óúë/ÿú÷étúwÞÙYW¿w÷»¦ª.GɹçêL Ù¢}æb©@ F@ cà#a ºú3aåMÈX[vKÀ¹RÔ(îÑG ïÙ×üð¼òñZy±Öü̼^ënéLܳ¡UZ±6r`Ï ã¢oøÜm7\Xà¹ÿ7eéÑõøO%næ/ ¨oÞ=ãm5ï©$fÇ wbî"©ðÞm-øéݵdòhø÷>Þªt2 »Bè%n»µ²Øóßrq÷õLÅ©ÁJ<öÕ×,>K~~Ð^¢ qQiFC\2Ç3ºqÙ8ó{ê÷D¡KóYâ-ùÌgf¾èï2`â'¥TÀ* ò¡òƦ{d¾}Á¹ÿ¸·ídJ¼7Ðbñûݵ hÃ¥?hÜrmÅ2VüÄI# ¨ Íÿ$S*hu'íÅ âàd«ë¿º{Õ5»·ß5}éTºM³Z:|ë`[2)VÓÊY²²IÚ`è¬6Õìì®ùS¸å׸ç^êÈp_óð×WN)ø5áU?2³ hNp|x1Ô{ïoB>] àË Ë~¬]²öCREìò05\êU×_^RæU+hlºS®µâ!òt"!zdMÙ}O ² ï(TÁpÜó·MÉl*W|7àùOýðR¯ºùÓYkh_÷RÀV@,ÎÖ D½0ÃZn¸¸peQÂe"`<mãn÷å HHaÙ2·OkOrÝÏÚ Üà0ÙÔìp/Ò¸éåæuhÛþÅéåã´ºgfռѽbCPnLs¹ÜK½êë+§5NýÑ~è°(O òè÷æÔPsL¾m_èD2EéË¿y¾·l¯+ÆõM5¯3çÐ îã¯\\¼æ¶^w8²i{GÃH(2 jV`q»jf Ô¼÷¡·Û¢YN`ÃüýKÓ;Ò¹ñW/,6sÔì ×6ëEBIk1 /°igÇãu#@± "ÚGäeG0EX:Æ×ËW]}î´6»LÄO´´ì<ùëß¾z8ØæqaÙe§[¦C/,_XTÜÓݽwÏûN§cÊ´ãDÐñD:O§ÓÞ®®¦¦·.ò<2~Ρ>àx`ÊÍä%ÉÜùp´«$.) < Ó¦ÈApC"qCI]}În®©÷ ö¼¾JñºúÈhë".D¤½_}YÀ#[z ÍÑ<²¢Ä©dæà1ó±q#º_Vþ²èWMN<D8ì'²kEòQÎXGÍbpAX²\óñ ë7êÏ.RgG÷òiÜ"pj®¥Ê07vÒ àÉb8jW`±®²X±®lX\\"gï°ÁTf½DÒxQIc±\jN[;*oÉì>å%<3¶Ì"6XWËÃå¹×$Xe§Xó{mÙ4±¢4lõ´ØJ§»nùxkfvi! (g¤Ê{Ûc=%ãÛÛÚâ-¡ý|ÛÌI¡ï~·Ï^Æã[ßà(º®xÒwßÞéóy ?±à°= (ÛÅ}Zµ ì:8¯øå;ö¼uuùÜO<q"ÞñÒ×øIux¡¦Á 7k«.>_÷Fͳ¿Lzå²Ç¿ëwytUµ¹j¨¹ù®o<ÒúèëϽêâÞVÔÓX±baìú`bÕ³Íä¼ ÿÓ@V³ÓpqWf. U"Èï`!Ù3) /Ì!³¤#·Ù,`À v ±f54 aú»PÁBc¦MMÃ`)qÅvÚk$eÔ Áȼ'#A¼`Èk9RÅcÕ³FXuâI$ÔsrA"ölõÜPDjn Ræ&Ý3qI£ìyÚRÁ_hÌ^2±4i2/ÎÔS7ÇzIb,b«£«!ï)`_Pæ¶!ª4eK)£Áe¸ÌcQH,a馴 ú6Á'ÖMÞÓ²íë§)Ä`ùI£5ç³Ë´ e-ͨnaßPFüc.Où`ÕÌ4±ÝF0wLh)°y/e;´{·[N¯)<&í Cï ".yØ`yÞ54Ïg¤Ï¸}},øÔ«vð =54Wä¡Òç>¢¿ù*n9h"ga% Ëã%8x÷FP Ç(8Áõ¢¡XRfúX«òrÅi7Þ÷YµáÌX !G}òqìGòáwßÿòªÒio¥Óé3ìñ5¤Ys[B±ñ?$.æ,ÐÃÜZîùe°DNí°±16þ:ÆÙì66ÆÆ_¾ |