This MR is the first of multiples MRs adding support for the Bluetooth stack API in Wine:
1. The winebth.sys driver, which talks to BlueZ and implements several key IOCTLs for communicating with Bluetooth devices and radios.
2. A bthserv service, which is responsible for keeping track of the authentication agent, and relaying authentication requests and responses to and from the driver.
3. Userspace APIs (bluetoothapis.dll, bthprops.cpl, Windows.Devices.Bluetooth, etc).
winebth.sys is split into two "sub" drivers:
`winebth.sys`: The main entrypoint, loaded by winedevice. It listens for changes to Bluetooth devices and radios and authentication events on BlueZ, passing them on the bthenum. It also handles most IOCTL operations on Bluetooth radio PDOs.
`bthenum`: Responsible for creating nodes for discovered Bluetooth devices and associated services. It also tries to validate any IOCTLs relating to bluetooth devices before passing them to winebth.sys. (Not in this MR, likely in part 2)
The unix code is split between dbus.c, unixlib.c and winebluetooth.c, where winebluetooth is a simple wrapper around unixlib for the sake of organization.
--
v25: dlls/winebth.sys: Register and enable BTHPORT_DEVICE and BLUETOOTH_RADIO interfaces for radio PDOs.
dlls/winebth.sys: Derive a unique hardware ID for radio PDOs from their corresponding BlueZ object path.
dlls/winebth.sys: Create radio PDOs from the list of org.bluez.Adapter1 objects on BlueZ.
dlls/winebth.sys: Add a basic unixlib stub using DBus.
https://gitlab.winehq.org/wine/wine/-/merge_requests/6621
This MR is the first of multiples MRs adding support for the Bluetooth stack API in Wine:
1. The winebth.sys driver, which talks to BlueZ and implements several key IOCTLs for communicating with Bluetooth devices and radios.
2. A bthserv service, which is responsible for keeping track of the authentication agent, and relaying authentication requests and responses to and from the driver.
3. Userspace APIs (bluetoothapis.dll, bthprops.cpl, Windows.Devices.Bluetooth, etc).
winebth.sys is split into two "sub" drivers:
`winebth.sys`: The main entrypoint, loaded by winedevice. It listens for changes to Bluetooth devices and radios and authentication events on BlueZ, passing them on the bthenum. It also handles most IOCTL operations on Bluetooth radio PDOs.
`bthenum`: Responsible for creating nodes for discovered Bluetooth devices and associated services. It also tries to validate any IOCTLs relating to bluetooth devices before passing them to winebth.sys. (Not in this MR, likely in part 2)
The unix code is split between dbus.c, unixlib.c and winebluetooth.c, where winebluetooth is a simple wrapper around unixlib for the sake of organization.
--
v24: dlls/winebth.sys: Register and enable BTHPORT_DEVICE and BLUETOOTH_RADIO interfaces for radio PDOs.
dlls/winebth.sys: Derive a unique hardware ID for radio PDOs from their corresponding BlueZ object path.
dlls/winebth.sys: Create radio PDOs from the list of org.bluez.Adapter1 objects on BlueZ.
dlls/winebth.sys: Add a basic unixlib stub using DBus.
https://gitlab.winehq.org/wine/wine/-/merge_requests/6621
Making all the windows handled by the driver to be either GL/VK client surfaces, or top-level windows. This avoids leaking host windows into the Win32 space, and makes it possible to get rid of some remaining NtUserMapWindowPoints in `map_event_coords` for mouse input.
--
v9: winex11: Get rid of the now unnecessary foreign windows.
winex11: Generate relative ConfigureNotify on parent ConfigureNotify events.
winex11: Use the new host windows to register foreign window events.
winex11: Keep track of the host windows children window rects.
winex11: Keep track of the host windows relative rects.
winex11: Keep track of the host window children of interest.
winex11: Create host windows recursively up to root_window.
winex11: Introduce a new struct host_window for host-only windows.
https://gitlab.winehq.org/wine/wine/-/merge_requests/6649
This MR is the first of multiples MRs adding support for the Bluetooth stack API in Wine:
1. The winebth.sys driver, which talks to BlueZ and implements several key IOCTLs for communicating with Bluetooth devices and radios.
2. A bthserv service, which is responsible for keeping track of the authentication agent, and relaying authentication requests and responses to and from the driver.
3. Userspace APIs (bluetoothapis.dll, bthprops.cpl, Windows.Devices.Bluetooth, etc).
winebth.sys is split into two "sub" drivers:
`winebth.sys`: The main entrypoint, loaded by winedevice. It listens for changes to Bluetooth devices and radios and authentication events on BlueZ, passing them on the bthenum. It also handles most IOCTL operations on Bluetooth radio PDOs.
`bthenum`: Responsible for creating nodes for discovered Bluetooth devices and associated services. It also tries to validate any IOCTLs relating to bluetooth devices before passing them to winebth.sys. (Not in this MR, likely in part 2)
The unix code is split between dbus.c, unixlib.c and winebluetooth.c, where winebluetooth is a simple wrapper around unixlib for the sake of organization.
--
v23: dlls/winebth.sys: Register and enable BTHPORT_DEVICE and BLUETOOTH_RADIO interfaces for radio PDOs.
dlls/winebth.sys: Derive a unique hardware ID for radio PDOs from their corresponding BlueZ object path.
dlls/winebth.sys: Create radio PDOs from the list of org.bluez.Adapter1 objects on BlueZ.
dlls/winebth.sys: Add a basic unixlib stub using DBus.
dlls/winebth.sys: Add base winebth.sys driver.
https://gitlab.winehq.org/wine/wine/-/merge_requests/6621
Commit 9e1008f13735 added mmioSeek call that skips the whole data
portion of the RMID chunk, breaking the handling of RMID (RIFF-based
MIDI) files as it effectively skips the whole content of the RIFF file.
Since mmioDescend expects the file position to be somewhere within
the specified parent chunk, it's guaranteed to fail.
$ WINEDEBUG=+mcimidi wine wintest.exe mcishell
mci.c:178: Type your commands to the MCI, end with Ctrl-Z/^D
open BOSSNOVA.RMI
mci.c:188: command: open BOSSNOVA.RMI
0764:trace:mcimidi:MIDI_mciOpen (1, 00000200, 0051FB98)
0764:trace:mcimidi:MIDI_mciOpen wDevID=1 (lpParams->wDeviceID=1)
0764:trace:mcimidi:MIDI_mciOpen MCI_OPEN_ELEMENT L"bossnova.rmi"!
0764:trace:mcimidi:MIDI_mciOpen hFile=00000001
0764:trace:mcimidi:MIDI_mciOpen ParentChunk ckid=RIFF fccType=RMID cksize=000052DA
mci.c:191: Test failed: mci open BOSSNOVA.RMI error: 296(40 MCIERR_INVALID_FILE)
Its introduction seems unrelated to the rest of that commit and there's
no reason given for placing it there, so let's remove the mmioSeek call
to fix RMID file handling in MCI. Previous mmioDescend call will set
the position to just after the chunk's form type, which is exactly
where it should be when calling mmioDescend the second time to find
the data chunk. Other parts of Wine code that deal with RIFF files
don't seek in analogous situations either.
Fixes: 9e1008f13735 ("Removed fixed size array to store specific data")
--
v2: mciseq: Don't seek to the end of the root chunk in RMID files.
midiseq: Reduce race window when closing sequencer.
https://gitlab.winehq.org/wine/wine/-/merge_requests/6696
--
v2: msvcrt/tests: Add tests of _strnicmp_l().
include: Add _strnicmp_l() declaration.
msvcrt/tests: Test _stricmp() with multiple bytes characters.
msvcrt: Improve DBCS support for _strnicmp_l().
msvcrt/tests: Test _tolower_l() with DBCS.
msvcrt: Improve DBCS support for _tolower_l().
msvcrt/tests: Test tolower() with DBCS.
https://gitlab.winehq.org/wine/wine/-/merge_requests/6703
Commit 9e1008f13735 added mmioSeek call that skips the whole data
portion of the RMID chunk, breaking the handling of RMID (RIFF-based
MIDI) files as it effectively skips the whole content of the RIFF file.
Since mmioDescend expects the file position to be somewhere within
the specified parent chunk, it's guaranteed to fail.
$ WINEDEBUG=+mcimidi wine wintest.exe mcishell
mci.c:178: Type your commands to the MCI, end with Ctrl-Z/^D
open BOSSNOVA.RMI
mci.c:188: command: open BOSSNOVA.RMI
0764:trace:mcimidi:MIDI_mciOpen (1, 00000200, 0051FB98)
0764:trace:mcimidi:MIDI_mciOpen wDevID=1 (lpParams->wDeviceID=1)
0764:trace:mcimidi:MIDI_mciOpen MCI_OPEN_ELEMENT L"bossnova.rmi"!
0764:trace:mcimidi:MIDI_mciOpen hFile=00000001
0764:trace:mcimidi:MIDI_mciOpen ParentChunk ckid=RIFF fccType=RMID cksize=000052DA
mci.c:191: Test failed: mci open BOSSNOVA.RMI error: 296(40 MCIERR_INVALID_FILE)
Its introduction seems unrelated to the rest of that commit and there's
no reason given for placing it there, so let's remove the mmioSeek call
to fix RMID file handling in MCI. Previous mmioDescend call will set
the position to just after the chunk's form type, which is exactly
where it should be when calling mmioDescend the second time to find
the data chunk. Other parts of Wine code that deal with RIFF files
don't seek in analogous situations either.
Fixes: 9e1008f13735 ("Removed fixed size array to store specific data")
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/6696