questions about a device driver
Dan Christensen
jdchrist at watcgl.waterloo.edu
Wed May 31 15:34:19 AEST 1989
Everything below was tried on an IRIS 4D/120GTX unless otherwise stated.
I am working on connecting an input device to the Iris through a serial
port. Conceptually, the device has several valuators and several
buttons. I want to transparently let an application use this device
just as it uses a device such as the mouse, or the dial and button
box. There are several possible methods of doing this, each with
problems.
1) Create new valuators and buttons for this device. This would be
an optimal solution but would probably require that the graphics
library be recompiled, so I doubt that it is possible.
2) Put events onto event queues directly. This would require knowledge
of which process currently has the input focus and what its input
channel number is. This could probably be done with the routines
gl_inchanget and gl_anyqenter, but unfortunately these routines are
undocumented. Can anyone explain what these routines do, what
parameters they take, etc? The problem with this approach is that
polling the device wouldn't work, but I would be willing to sacrifice
this.
3) Put events onto the NeWS event queue. This is easy to do from
PostScript but most likely the graphics library only filters out
certain events from this queue to put onto GL clients' event queues.
To change this would probably require that the graphics library be
recompiled, so I doubt that it is possible.
4) Override existing valuators and buttons with setvaluator and
gl_changedevice respectively. This does work but has a couple of
problems. First of all, the message
ERROR #23 in kernal: severity=2, sevaluator: <some number>
appears in the console window once every couple of seconds, especially
when the MOUSEX and MOUSEY valuators are being overridden and the
tracker crosses a window boundary. This only started to happen since
we switched from an IRIS 4D/70G to our IRIS 4D/120GTX. The second
problem is that we are limited in the number of devices we can use
concurrently since this uses up valuators and buttons from a limited
supply. Also, gl_changedevice is an undocumented routine, although
it is used in /usr/people/4Dgifts/examples/devices/tabletd.c.
5) I found this section difficult to explain because I don't really
understand how valuators work internally. Maybe someone who does
understand how they work will understand what I am saying.
Override existing valuators and buttons using only gl_changedevice.
Using gl_changedevice for both the valuators and the buttons
eliminates the error message produced by setvaluator. There are a
couple of problems with this method also. The correlation between
the value sent to gl_changedevice for a valuator and the value that
the valuator gets set to is difficult to understand. Unless there
is a routine like gl_readdevice, it is difficult to reuse an
existing valuator. For example, if a valuator can take on values
between 0 and 100 and the gl_changedevice values that make it do
this are between 1000 and 1100 (call this its 'device range') then
when I try to set the valuator to 50 with gl_changedevice it gets
set to 0 and its device range changes to 50 to 150. I need to find
out the difference between the gl_changedevice values and the
setvaluator values and I don't know how to do this. If more that
one process is trying to control a valuator then using
gl_changedevice seems out of the question. If the device ranges
they use are not identical, then the valuator will not be set
correctly.
How should I do this? If 1) could be done that would be great, but I
doubt it is possible. 2) looks feasable if I can find out how those
gl_* routines work. 3) doesn't look possible. 4) looks possible if
that error message could be removed. I reported this to the SGI
Hotline and the person I spoke to couldn't explain why this was
happening. 5) looks tough. 4) and 5) aren't as good as the other
because they reuse existing valuators. In the future will it be
easier to create new valuators?
Thanks in advance for any help. I've been working on this for months.
----
Dan Christensen, Computer Graphics Lab, jdchrist at watcgl.uwaterloo.ca
University of Waterloo, Waterloo, Ont. jdchrist at watcgl.waterloo.edu
More information about the Comp.sys.sgi
mailing list