has no routing information but wasn't configured by the BIOS either. The
function will now only panic if a device that was previously configured would
not be so anymore after enabling the IO-APIC. Fixes#7971.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42795 a95241bf-73f2-0310-859d-f6bbb57e9c96
the limited set of hardware I could test it with.
By installing the wpa_supplicant one can now join WEP/WPA/WPA2 networks by
either selecting them in the network prefs/network status applet or using
"ifconfig <interface> join <network name> [password]". The wpa_supplicant opens
a dialog asking for more details if it can't connect with the given information.
Note that there is no way to automatically store that extra info right now, so
it has to be provided on each join. The configuration can however be stored
manually into the /boot/common/settings/network/wireless_networks config file.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42775 a95241bf-73f2-0310-859d-f6bbb57e9c96
fail when encountering missing information (like the password). This gives the
supplicant an opportunity to ask for the required information as needed.
* Remove (currently broken) WEP support from the net_server. It will be
delegated to the supplicant as well, as that one already handles all the
key/password conversion.
In the absence of a supplicant the net_server can therefore only join open
networks now. It will also only attempt that if it is sure that the network in
question is actually an open network (by means of scan results or explicit
configuration) and will otherwise delegate the join request.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42774 a95241bf-73f2-0310-859d-f6bbb57e9c96
monitor messages. Due to how our compatibility layer works the latter is always
just "wlan" (and even if it worked as expected it'd be mapped to the BSD short
names i.e. "iwn" or "iwnX"). The device name is of the format "net/<driver>/X",
which is what we use as interface names througout the API (minus the "/dev/").
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42771 a95241bf-73f2-0310-859d-f6bbb57e9c96
random amounts of memory when getting an invalid header.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42770 a95241bf-73f2-0310-859d-f6bbb57e9c96
sdl_e_type in network byte order, causing such a socket not to receive
anything.
When working around that by not using htons() on bind, sending would then fail
on such a socket because the byte order is actually required to be swapped
there.
* Extend the comment for the B_NET_FRAME_TYPE macro to document that the input
types are supposed to be in host byte order to avoid future confusion.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42357 a95241bf-73f2-0310-859d-f6bbb57e9c96
512 bytes with a heap page of 2048 bytes resulting in excessive waste for
allocations between 512 and 1023 bytes. Also tune the requested alignment so
that sizeof(port_message) (currently 28 bytes) can occupy one allocation unit
without waste.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42340 a95241bf-73f2-0310-859d-f6bbb57e9c96
resize operation that has to be undone and may fail when doing so.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42332 a95241bf-73f2-0310-859d-f6bbb57e9c96
we have to enlarge/shrink the array that holds them and assign a protection
value for the additional pages as necessary. Otherwise we'll access invalid
memory when looking up page protections for enlarged areas and get random
protection values.
Experienced with QEMU that sets page protections via mprotect on heap memory.
When the heap was later enlarged, write access to the additional memory would
result in permission denied errors and crashes.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42330 a95241bf-73f2-0310-859d-f6bbb57e9c96
rules. Otherwise the IMAP add-on is always built without SSL support.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42326 a95241bf-73f2-0310-859d-f6bbb57e9c96
debugger. As sInDebugger is already > 0 when the first CPU enters KDL, code
from other CPUs might see debug_debugger_running() == true already before they
enter the debugger.
* Instead, move the sDebuggerOnCPU setting out of the debugger loop and hold the
value until after calling exit_kernel_debugger() so that the exit hooks still
see debug_debugger_running() == true.
* Also avoid calling exit_kernel_debugger() when we've been called recursively
(previousCPU != -1). Previously the exit hooks would've been called and the
debugger state reset erroneously. To balance the missing decrement of
sInDebugger in that case we decrement sInDebugger in enter_kernel_debugger()
also when detecting the recursion case.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42320 a95241bf-73f2-0310-859d-f6bbb57e9c96
running. The former has a broader scope and lasts until the debugger exit is
actually done whereas the latter is already reset when the inner loop is exited.
This fixes the issue Ingo saw where the USB physical memory manager wasn't able
to free resources used for the debug transfer. It has reserved debug memory that
it uses depending on debug_debugger_running() and was therefore confused when
it returned false when called from the kernel debugger module exit hook.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42319 a95241bf-73f2-0310-859d-f6bbb57e9c96
It seems to work fine in VirtualBox and makes the network card work that is
emulated by default. From the log it looks like Hugo actually ported/implemented
the driver under VMWare and it worked, so that it isn't in the image looks like
an oversight.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42295 a95241bf-73f2-0310-859d-f6bbb57e9c96
enabled as well. As this heap implementation is still used for the port heap
(as it handles B_NO_LOCK areas) those are still useful.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42278 a95241bf-73f2-0310-859d-f6bbb57e9c96
last byte of an unmapped-but-still-there page non-readable (i.e. from B_NO_LOCK
areas), causing such reads to fail in KDL.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42276 a95241bf-73f2-0310-859d-f6bbb57e9c96
previously just always write over the beginning of the buffer for each vector.
Since the writev version isn't exposed to userland by means of a syscall and
kernel internally nobody used it, nobody noticed so far.
* Merge the two loops for user and kernel copy to remove the code duplication.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42273 a95241bf-73f2-0310-859d-f6bbb57e9c96
the acquired quota in sTotalSpaceInUse wasn't released in all cases leading to
it eventually reaching the limit (after a _very_ long time though, so this is
more theoretical than anything else). The sAllocatingArea flag wasn't reset in
the case that an area was already added in the meantime, resulting in no
further growing being possible. Then there were race conditions between
waiting for space to become available and the situations which made that space
available (freeing port_messages and adding new areas).
* Fix these race conditions by using a mutex (sPortQuotaLock) to protect the
various quota and allocation related variables. Instead removed the atomic_*
operations that were previously used.
* Had to move some static functions around.
Should make port heap growing more robust, even though in normal use you'll
likely never encounter it...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42272 a95241bf-73f2-0310-859d-f6bbb57e9c96
causing the message to be sent with a timeout of "true" (getting converted to 1)
instead of the intended 0 meaning no/infinite timeout. This caused the message
sending to be aborted due to the timeout if it was blocking on a full port for
example. Since the return value is never checked noone noticed.
It's possible that this was the cause of some lost input messages (mouse,
keyboard) when the system was under heavy enough load for either the port heap
to be exhausted (unlikely) or the input_server <-> app_server port to run full
(quite possible).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42271 a95241bf-73f2-0310-859d-f6bbb57e9c96
APIC enumeration. As the local APIC is the basis for inter-CPU communication, we
can't do SMP when it's absent.
Fixes#7692, but indeed it makes no real sense for QEMU to provide the APIC info
in the MP and ACPI tables (and actually emulate the hardware) when it disables
the APIC support flag at the same time.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42215 a95241bf-73f2-0310-859d-f6bbb57e9c96
allows the use of stty to configure the serial device and later using other
commands with these settings still in place.
* Store incoming termios settings when they are set, restore the previous
settings on open and apply the control modes to the device side as well.
* Only send the control to the system side tty cookie again. Doing it for both
cookies was only done to configure the termios, which isn't necessary anymore.
* Remove fallbacks to c_{i|o}speed fields and always use c_cflag & CBAUD for the
single speed setting we have.
* Remove some leftover control line state logic that doesn't apply anymore.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42161 a95241bf-73f2-0310-859d-f6bbb57e9c96
how one could actually apply different speeds, make cf{set|get}{i|o}speed() use
the c_cflag field with the CBAUD mask instead.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42160 a95241bf-73f2-0310-859d-f6bbb57e9c96
ensure that we don't block on the tty buffer, we chop up the data into blocks
that are written into the tty and then the buffer is flushed to the device
each time. This resolves the issue that a quick open/write/close would not
actually send the data to the device as it would cancel the transfer before
the output thread had a chance to run.
* Use the tty_close_cookie() call. Doing the close before waiting for the input
thread ensures that it is woken up if it blocked on writing into the tty.
* Correct the type of the USB callback status and only try to clear a halt if
the device was actually stalled.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42156 a95241bf-73f2-0310-859d-f6bbb57e9c96
available as a module function as well.
* Remove some unneeded resetting from tty_destroy_cookie.
* Move the public module functions to the public API section of the file and
order them by their declaration order in the module info.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42154 a95241bf-73f2-0310-859d-f6bbb57e9c96
to op which would've caused a wrong line state to be set.
* Add some more allocation checks.
* Some cleanup.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42151 a95241bf-73f2-0310-859d-f6bbb57e9c96
into it again (adding generic CBI support). It is so much of a copy even that it
still claimed to have the original 3 support descriptors while in fact it only
has one. Since the memory beyond that one support descriptor was probably just
zeros, making them complete wildcards usb_support_descriptor wise, this lead to
every single USB device being handed to the usb_floppy device added hook.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42145 a95241bf-73f2-0310-859d-f6bbb57e9c96
it reads from the specified port and writes what gets input on stdin. It
currently hardcodes the basic setup of the serial port.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42131 a95241bf-73f2-0310-859d-f6bbb57e9c96
only halfway finished. The way it is supposed to work is that there are two
tty cookies, representing the system and the device side. Reads and writes
coming from the system and going to the device are using the system cookie
while reads and writes coming from the device use the device cookie.
* Move writing to the device into an output thread, similar to how reading from
the device works. This isn't necessarily a good idea and might be moved back
into the write hook again to ensure that writes can be made blocking. Right
now if you just write and then close, the writes will most likely be canceled
before every going out to the device.
* Removed the read and write lock mutex. They aren't necessary as the tty layer
will serialize the reads and writes anyway.
* Made simply copying the data to the write buffer the default implementation of
the OnWrite callback and removed the OnWrite in ACMDevice. The ProlificDevice
didn't provide an OnWrite hook before, so it would've never written anything.
* Break out the baud index to speed mapping into an inline function. Since the
defines might change in termios.h just adding an array is a bit fragile (it
already missed one entry and would've been broken for certain speeds).
This should make usb_serial usable for some (most?) cases. I've tested this with
an Arduino board that uses an FTDI interface. As mentioned above, since writes
currently just write into the tty layer and don't wait for the data to be
flushed, and since close doesn't wait for the output buffers to be drained
either, a simple write and close (as in "echo a > /dev/ports/usb0") will in most
cases cancel the output before it is written to the device. I'm looking into
a few ways to fix that next.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42089 a95241bf-73f2-0310-859d-f6bbb57e9c96
header is used that only has 6 bits of length info this would've previously
potentially overflowed depending on the input size.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42088 a95241bf-73f2-0310-859d-f6bbb57e9c96
is inside the cflags) since stty for example sets them.
* Turn off debug output by default and fix a warning due to that.
* Some minor cleanup.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42087 a95241bf-73f2-0310-859d-f6bbb57e9c96
always calling the device and requesting it. If no HID descriptor is found in
the configuration we fall back to retrieving it manually and if that fails we
fall back to a dummy report descriptor length. In the most usual case this will
save one unnecessary USB control request.
Incidentally this also fixes the absolute pointing device under VirtualBox. VBox
stalled the retrieval of the HID descriptor. That alone wasn't so problematic as
in this case we just fell back to the dummy report descriptor length which
would've been large enough. But VBox also times out the next request after the
stall, which in this case was the retrieval of the report descriptor, hence no
HIDDevice could be created.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42019 a95241bf-73f2-0310-859d-f6bbb57e9c96
* As they don't claim to be HID, they don't provide a report descriptor either,
so we build one. The built descriptor is similar to the one found in FreeBSD
for the same class of devices. Might fix/help #7649, for lack of hardware I
can't test this.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42003 a95241bf-73f2-0310-859d-f6bbb57e9c96
usb_hid_device_added hook so that we can actually detect non-HID devices at all.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42002 a95241bf-73f2-0310-859d-f6bbb57e9c96
allow for creating descriptors that don't use report IDs at all.
* Adjust sixaxis_build_descriptor and set the global report ID once at the
beginning instead.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42001 a95241bf-73f2-0310-859d-f6bbb57e9c96
* Add these to the usb_support_descriptor when adding from the quirky devices.
* Extend the SIXAXIS comment a bit.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42000 a95241bf-73f2-0310-859d-f6bbb57e9c96
descriptor. This allows us to support devices that aren't strictly HID or only
provide vendor specific interfaces by constructing report descriptors for their
data format.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41992 a95241bf-73f2-0310-859d-f6bbb57e9c96
absolute coordinates (qemu/kvm -usbdevice tablet) and various digitizers. If a
tablet-like usage is determined the MouseProtocolHandler publishes to
input/tablet instead of input/mouse and reports its info in a tablet_movement
structure instead of a mouse_movement structure, allowing for absolute
coordinates. Note that right now only the absolute coordinates are used, the
other tablet specific inputs (eraser, pressure, tilt and contact) aren't yet
filled in. I will add these as a second step.
I've only tested this with kvm where this makes the "seamless" mouse integration
work and therefore fixes#5989. Note that QEMU for BeOS/Haiku doesn't support
that mode (patch pending on my side) and will lock the pointer into the upper
left corner if -usbdevice tablet is used (whereas it previously just did
nothing).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41951 a95241bf-73f2-0310-859d-f6bbb57e9c96
pointing devices that publish entries into /dev/input/tablet.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41950 a95241bf-73f2-0310-859d-f6bbb57e9c96
to build a new descriptor using a HIDWriter. This way a completely new
descriptor can be built on the fly or a fixed already patched blob can be
written to the writer if desired.
* Implemented writing a new report descriptor for Sony SIXAXIS controllers. The
descriptor also includes the pressure sensitive button states (exposed as 12
axes) and the accelerometers/gyroscope (exposed as another 4 axes). While the
motion sensing data is now available (and fun to look at), the usefulness is
fairly limited, as the values are not scaled/transformed in any way. It might
be possible to generically do such transformations using unit descriptions,
but those are not implemented yet.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41925 a95241bf-73f2-0310-859d-f6bbb57e9c96
duplicate usages and simply adds more axes in that case. It also removes the
gaps that were previously put in place if there were higher numbered axes.
However, since the ordering of the axes now depends on the ordering inside the
HID collection, it is possible that some controllers won't have the X, Y and Z
axis mapped as the first three axes, which might confuse applications. I've not
encountered a report structure that would lead to such a situation yet, but then
again the amount of reports I was able to get hold of is fairly limited. If it
becomes a problem the mapping needs to be adjusted accordingly.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41923 a95241bf-73f2-0310-859d-f6bbb57e9c96
report descriptors. These descriptors aren't optimized for efficiency (the
writer doesn't attempt to avoid writing unneeded global items for example) but
they will only serve as input for the HIDParser that parses them correctly
regardless.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41921 a95241bf-73f2-0310-859d-f6bbb57e9c96
* Only cancel the update thread if the last open instance is closed. This fixes
that other applications using the same joystick would stop getting updated
values as soon as one application was closed.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41905 a95241bf-73f2-0310-859d-f6bbb57e9c96
function that is triggered before the protocol handlers are added.
* Use the quirky device mechanism to support the Sony SIXAXIS controller (the
PS3 one). It requires a specific get_report to become operational. Note that
you still have to push the PS button to enable it after plugging in. Note also
that only the two analog sticks are reported as axis, the analog values of the
buttons as well as the motion sensors aren't described by the HID descriptor
and therefore aren't accessible. The digital button states (on/off only) work
however. A fixed descriptor could possibly be crafted to support the missing
features later on though.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41902 a95241bf-73f2-0310-859d-f6bbb57e9c96
handlers. A full sized keyboard is assumed when LEDs are found and those are
preferred then. This makes USB keyboards work (at least those that worked
by voluntarily entering KDL before, i.e. those that are hooked up to UHCI root
ports) also when entering KDL by means of a panic. The first (few) keys are
swallowed though, but that's certainly better than it not working at all.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41898 a95241bf-73f2-0310-859d-f6bbb57e9c96
that mode when they support it. Right now there is only usb_hid though. With
this commit controllers with an arbitrary number of axes, hats and buttons are
now supported by BJoystick and by the BJoystick <-> driver protocol as well as
by usb_hid (usb_hid doesn't yet have support for hats though).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41893 a95241bf-73f2-0310-859d-f6bbb57e9c96
both, variable and extended joystick mode, using the same mechanism of mimicing
the extended_joystick structure with the variable one if required. The mode
used depends on the support flag coming in from BJoystick (currently off), so
with this commit the behaviour doesn't change. I'm going to flip that switch
next though.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41891 a95241bf-73f2-0310-859d-f6bbb57e9c96
methods the members are populated, the flat data size is calcualted, the data
buffer is allocated and the convenience pointers are set up automatically. With
initialize() an arbitrary configuration can be created, with
initialize_to_extended_joystick() a configuration is created that exactly
matches the data structure of the extended_joystick struct.
Having them here makes it easy to use the structure from a driver as well
without the need to set up everything manually.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41888 a95241bf-73f2-0310-859d-f6bbb57e9c96
into joystick_driver.h as it is convenient to have also on the driver side.
* Added comments explaining the data structure and use case of the structure.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41886 a95241bf-73f2-0310-859d-f6bbb57e9c96
inside BJoystick.
* Add joystick_module_info flag to communicate support for variably sized reads.
* The variably sized data structure is set up to describe either the actual
amount of data, when variably sized reads are supported by the driver, or it
is set up so that it exactly matches the data layout of the extended_joystick
structure. This allows us to support both as input data, while only needing to
care about a single format inside BJoystick. Convenience pointers allow the
data to be retrieved without additional overhead or extra logic.
* Add some sanity checks and ensure some boundaries when dealing reading data
from the variably sized structure (as there might not be any buttons, hats,
axis at all now).
* Ensure that the extended_joystick structure doesn't change in size due to
padding by making it _PACKED (it wasn't padded though).
This is still supposed to work exactly as before. However, it opens up the
possibility to actually support arbitrary controllers with arbitrary axis, hat
and button counts. It therefore allows to actually deliver what the BJoystick
API was designed to handle all along.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41885 a95241bf-73f2-0310-859d-f6bbb57e9c96
be retrieved. I think the fixed layout will actually make it impossible to see
anything beyond the 9th button however... The coding style of this app is,
different, to say the least and I didn't really bother fixing it up right now,
so the changes just mimic what's there.
* Some automatic whitespace cleanup.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41883 a95241bf-73f2-0310-859d-f6bbb57e9c96
Get*Values() functions but retrieves an arbitrary amount of button states using
a boolean array. This overcomes the 32 button limitation on the API side. Right
now the function does simply set the first 32 states from the button bitmap, as
the BJoystick to driver interface hasn't been adapted yet.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41882 a95241bf-73f2-0310-859d-f6bbb57e9c96
already anyway (as compared to the original BeOS ones) this won't introduce any
missing symbols.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41879 a95241bf-73f2-0310-859d-f6bbb57e9c96
declarations to group them more logically. No functional changes.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41878 a95241bf-73f2-0310-859d-f6bbb57e9c96
documented in the BeBook. Sadly the success return is specified as "a positive
integer", so I didn't change it to B_OK.
* We actually want non-blocking mode, so don't reset the O_NONBLOCK flag. It was
ignored before anyway though, so this doesn't change anything.
* The legacy buttons 1 and 2 are in the pressed state when false, so initialize
them to true instead.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41876 a95241bf-73f2-0310-859d-f6bbb57e9c96
(which is uint32), but the legacy BJoystick axis values are just the same int16
as the ones in extended mode, so nothing has to be done besides assigning them.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41875 a95241bf-73f2-0310-859d-f6bbb57e9c96
to be updated with newly plugged in devices without the need to recreate a
BJoystick object.
* Do an initial (re-)scan on object creation instead of always scanning in
CountDevices() and by extension GetDeviceName().
* This makes CountDevices() and GetDeviceName() stable with regards to the
device list, so that an enumerating application doesn't suddenly get more/less
devices than it might expect.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41870 a95241bf-73f2-0310-859d-f6bbb57e9c96
* Include sorting, header style, macro naming, variable naming, spacing, ...
* Some simplifications, early returns and the like.
* The device name list items were allocated with new but deleted with free. The
whole private BJoystick list being modified by a friend class is dubious
though and should be reworked. Ideally node monitoring would be implemented
so that the list can be re-populated on demand instead of scanning through
every time.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41868 a95241bf-73f2-0310-859d-f6bbb57e9c96
with the BJoystick requirements:
* Make the Read() non-blocking. This is required as BJoystick is a polling
interface. A single current state is used that is updated by a separate thread
on report arrival. The thread is spawned as soon as the ProtocolHandler is
opened for the first time (and quit at the first wait return after the
ProtocolHandler is closed). With this we can simply return the current state
on read.
* Remove the ring buffer as it was not needed in the first place. This also
happens to solve the problem of sharing a JoystickProtocolHandler. Before,
concurrent reads would queue up the same result multiple times in the ring
buffer and then return stale data on the next update.
Solves most of #7629.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41865 a95241bf-73f2-0310-859d-f6bbb57e9c96
ever wait for reports on demand, there's no need for buffering at all.
This removes some unnecessary copying and ring buffer overhead, the ring buffer
will now in fact not be created at all.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41864 a95241bf-73f2-0310-859d-f6bbb57e9c96
the BJoystick API and joystick drivers.
* Also fix a few warnings in the code that were caused by using NULL instead of
0 for BWindow/BView flags.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41852 a95241bf-73f2-0310-859d-f6bbb57e9c96
This includes input scaling, so the resulting input ranges should always match
the ones of the BJoystick data (hence no calibration should be required).
* It supports joysticks, gamepads and multi-axis controllers. I've only tested
it with a Microsoft SideWinder Gamepad Pro so far, which now works as expected
with stickit.
* Fixes#7429.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41851 a95241bf-73f2-0310-859d-f6bbb57e9c96
info and values. Inspired by and in parts based on the patch by caz_haiku in
ticket #7429 (though rewritten completely due to the other changes). Thanks
for the pointers!
* Clean up the mixup of internal joystick info and the one from
joystick_driver.h so that BJoystick and the drivers talk about the same
structures.
* Extensive coding style cleanup, simplifications, NULL checks, early returns,
std::nothrow allocations, include sorting, argument naming, ... that kind of
stuff.
* Added some TODO notes for remaining stuff.
* Automatic (and manual) whitespace cleanup.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41849 a95241bf-73f2-0310-859d-f6bbb57e9c96
of returning B_ERROR to the ProtocolHandler base class. Not used yet, but will
be used for the BJoystick <-> JoystickProtocolHandler.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41835 a95241bf-73f2-0310-859d-f6bbb57e9c96
handle the different device classes. Handlers are now added based on the
application collections that the HID descriptor describes instead of by
enumerating the different report items inside the reports. This means that a
device is now logically treated as a mouse when it comes with an application
collection that designates it as a mouse, instead of when there is a report
that contains an X and a Y axis. This resolves the conflicts that gamepads
and joysticks were added as mice due to them containing such elements. This
therefore fixes#4499 and opens up the way to properly handle other device
types like joysticks (#7429), gamepads, tablets (#7354, #5989 and #7481) and
so on. I'll work on gamepads/joysticks next and see where we stand for tablets
later.
* Added a few enumeration functions to HIDCollection to support the above.
* Fix the root collection handling. A device doesn't describe a single root
collection and then adds everything as a child. Instead it just has multiple
collections on level 0. We account for that now by always creating an empty
logical collection as the root collection where all the collections of the
descriptor get added.
* Rename the {Mouse|Keyboard}Device.{cpp|h} to
{Mouse|Keyboard}ProtocolHandler.{cpp|h} as that more clearly describes their
purpose. These classes are protocol handlers, i.e. they handle the ioctl based
mouse and keyboard protocol between the driver and the input_server add-ons.
* Change a lot of stuff to use references instead of pointers where it makes
sense (not necessarily complete yet).
I've tested this successfully on a keyboard with extended keys, a combo device
with a keyboard with extended keys and a mouse, a mouse and a gamepad (that now
doesn't do anything anymore) and found no regressions. However, since there are
a lot of very varied ways how to describe such functions with HID, it's not too
unlikely that some more curiously described devices will now stop working. These
have to be handled case by case and their usages have to be added to the added
to the appropriate handlers (or new handlers have to be written). Please test
and create bug reports (preferrably including the report descriptor that is
written out to /tmp).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41794 a95241bf-73f2-0310-859d-f6bbb57e9c96
* Fix a warning about pci_address::segment potentially being used uninitialized.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41760 a95241bf-73f2-0310-859d-f6bbb57e9c96
check if all of them are assigned with a routing entry. If not, as happens for
PCI add-on cards that ACPI isn't aware of for example, infer the routing by
calculating it from the PCI default routing and going up through the parents
until a matching routing entry is found. Fixes#7520.
* This will also panic (for now) in case there remain unroutable devices and
eventually will prevent the IO-APIC to be used in these cases.
* Enabled some debug output.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41758 a95241bf-73f2-0310-859d-f6bbb57e9c96
actually be a bridge. We always want to check if the device at hand is a PCI
bridge, because in that case we need to recurse further down. We recurse now
even if there is no routing table found for the current bridge, since that
doesn't mean that another bridge, further below, can't have a routing table
again. Possibly fixes#7520.
* Fix the matching function to just check for function 0 to be present instead
of classifying it. Previously if there happened to be a cardbus bridge on
function 0 of a multi function device, the rest of the functions of the device
would've been ignored because we returned early due to the unsupported bridge.
* Only hand down the current bus number when recursing as that makes it clearer
what's going on instead of handing in a partially filled out pci_address
structure and then filling in other parts inside the function.
* Commented out getting the segment number as we don't support it at all.
* Extended debug output.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41726 a95241bf-73f2-0310-859d-f6bbb57e9c96
options we need. This still requires gsed to be installed from ports.
Fixes#7563.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41719 a95241bf-73f2-0310-859d-f6bbb57e9c96
it with our new setting. Otherwise we might end up with an illegal value as the
interrupt threshold which might inhibit interrupt generation alltogether
depending on the controller implementation. This was the case for the ATI/AMD
SBx00 chipsets. Therefore fixes#5551.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41690 a95241bf-73f2-0310-859d-f6bbb57e9c96
interrupt handler every millisecond so it can check for interrupts to handle.
While this is certainly not ideal, it allows EHCI to run (surprisingly well
even) on chipsets that experience interrupt routing issues.
It can be enabled with the safemode setting "ehci_polling on" that can either
be entered using the new advanced debug option entry in the bootloader and/or
in the kernel settings file.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41688 a95241bf-73f2-0310-859d-f6bbb57e9c96