Commit Graph
5469 Commits
Author SHA1 Message Date
Adam Honse bfaef77719 API5 PLUGIN CHANGE: Add function for plugins to save profiles, add RGBController static functions to plugin API 2026-08-03 22:58:02 -05:00
Adam Honse 02d0e16a72 Clean up SteelSeriesApexBaseController 2026-08-03 21:33:23 -05:00
Alessandro Di Ronza 6ebf3573af Add illumination brightness control to the Apex keyboards 2026-08-03 21:24:43 -05:00
Barry H 5aef451e81 Add edifier halo pixelbar 2026-08-03 20:59:57 -05:00
Adam Honse 1880961afa Royuan keyboard controller cleanup 2026-08-03 20:41:15 -05:00
Maylton Fernandes fb5a723193 Consolidate ROYUAN keyboard protocol support 2026-08-03 20:32:40 -05:00
Maylton Fernandes 88002a4abf Add Akko Multi-modes Keyboard-B RGB support 2026-08-03 20:32:40 -05:00
Maylton Fernandes 289dbc675a Add Akko Multi-modes Keyboard-B RGB support 2026-08-03 20:32:40 -05:00
Daniel Clark bcfaa7e8a7 fix Z490 Vision D layout 2026-08-03 16:50:05 -05:00
Adam Honse bf62ead713 Migrate controller manual configurations (zone sizes) from legacy sizes.ors 2026-08-03 16:46:19 -05:00
Adam Honse 8a7cda7495 Rework profile migration, match new function style for reading the legacy file into a controller list, handle migration after local client connection so that profiles can upload to server 2026-08-02 23:47:57 -05:00
Adiker 84cf974d70 ProfileManager: migrate legacy binary profiles to JSON 2026-08-02 18:03:34 -05:00
Lord258 afc54314b5 Add support for Nanoleaf Lines (NL59) 2026-08-02 17:20:22 -05:00
Valentin Lobstein bd8db75106 Add ITE 829x (PID 0x8910) per-key RGB keyboard support + diagonal direction core support 2026-08-02 15:45:01 -05:00
Valentin Lobstein 9da692b12f SDK6 PROTOCOL CHANGE: Add diagonal direction support to OpenRGB core 2026-08-02 14:13:19 -05:00
Andrew Ingram 4ee39b0dc8 Add SteelSeries Rival 5 support 2026-08-02 00:23:32 -05:00
Norman Rasmussen 286514b509 Skip plugin entries that are incompatible during duplicate plugin detection 2026-08-01 19:01:51 -05:00
Diogo Trindade c7140baa33 Fix device IDs in worker thread acknowledgements 2026-08-01 18:56:59 +01:00
Ken Sanislo 2a9889b194 NetworkClient: break the listener/GUI deadlock structurally 2026-08-01 11:16:20 -05:00
Norman Rasmussen 2afbd64c8e Release internal locks in RGBController_Virtual before calling functions that will call back into public APIs 2026-07-31 14:23:36 -05:00
Adam Honse 8be6aba43a SDK6 PROTOCOL CHANGE - Change from 32-bit to 16-bit device/bus/port count size on the device info network packets for consistency with other array packets 2026-07-31 11:45:51 -05:00
Maylton Fernandes 565f1dad74 Add ASRock RX 9070 XT Steel Legend RGB support 2026-07-31 10:19:59 -05:00
aestheticjmack 67a81f219d Add SteelSeries Aerox 3 Wireless Gen 2 support 2026-07-31 07:58:14 -05:00
Adam Honse ccd103a29f Enable systemd hardening in openrgb.service 2026-07-30 23:04:03 -05:00
Adam Honse c5d088b69d SDK6 PROTOCOL CHANGE - Flip order of active mode and mode count in zone description for consistency 2026-07-30 22:43:56 -05:00
Adam Honse 6362054368 Don't attempt auto connect when started in server mode 2026-07-30 22:29:42 -05:00
Adam Honse 2dab17f5dc Error out if setting RGBController description parsing fails in NetworkClient 2026-07-30 19:14:49 -05:00
Justo Enriquez c545305825 Fix Gigabyte Radeon RX 9070 XT not detected by Blackwell GPU controller 2026-07-30 18:59:19 -05:00
Adam Honse 578c81784b Fixups around hiding/unhiding controllers, create a new function that only handles showing and hiding for SignalUpdate callbacks, fix pointer dereference in NetworkServer, fix same-thread method invoke 2026-07-30 18:49:06 -05:00
Adam Honse 1cd9b63c3e Fix errors in updating device list when hidden devices exist 2026-07-30 16:49:59 -05:00
Ken Sanislo 7b1817a0b8 ResourceManager/GUI: leave client mode cleanly on primary disconnect
Two problems surfaced once disconnect stopped crashing.

Disconnecting the automatic local connection left auto_connection_client
pointing at the freed client and auto_connection_active still true.
RescanDevices and GetDetectionPercent/String trust those, so a rescan
afterward called into freed memory and aborted (std::system_error from
send_in_progress.lock() on a destroyed mutex). Clear the pointer and the
flag in the teardown when the removed client is the auto connection.

onDetectionEnded never lowered the detection view; only the progress
handler did, at 100 percent. A real detection reaches 100, but a client
teardown borrows DETECTION_STARTED/COMPLETE to make plugins release the
controllers and sends no progress, so the "detecting devices" overlay
stuck on after a disconnect until Cancel. Lower it unconditionally when
the sequence ends.
2026-07-29 23:36:02 -07:00
Ken Sanislo fb0e4f3ad9 Tear down lost and closed client connections safely
When a connection dropped, the listener thread deleted all of that
server's controllers immediately, before anything else was notified, so
the GUI, ResourceManager, and plugins kept dereferencing freed
controllers. Clicking Disconnect had the same problem and also ran the
teardown inline on the GUI thread, where UpdateDeviceList's
DEVICE_LIST_UPDATED is a BlockingQueuedConnection back to that thread,
so the device pages were not torn down before the controllers were
freed and a later queued onDetectionEnded dereferenced them.

Neither path frees controllers inline now. NetworkClient moves them to
an orphaned list and a dedicated teardown thread frees them: plugins
are warned first, then the same DETECTION_STARTED, UpdateDeviceList,
DETECTION_COMPLETE sequence a rescan runs tears down the device pages
that still reference the controllers, and only then are they freed, so
a controller always outlives its page. Both the connection-loss path
and the disconnect button queue to that thread, so the blocking handler
runs on the GUI thread while the controllers are still alive, and
StopClient's join stays off the GUI and listener threads.
2026-07-29 23:36:02 -07:00
Adrian Liunardo 09a5b414b6 Add support for iGame GeForce RTX 4070 Ultra W OC-V 2026-07-30 00:28:59 -05:00
Shalev e5dc869c9b Add ASUS TUF GeForce RTX 5060 Ti Gaming OC support 2026-07-29 17:05:21 -05:00
Ken Sanislo 2687ff57aa NetworkClient: initialize client_active and profilemanager_thread
StopClient guards profilemanager_thread and nulls it after the delete,
but nothing ever set it, so destroying a client that never started
read an uninitialized pointer. client_active was unset until
StartClient and is read on the same path.
2026-07-29 11:25:06 -05:00
Ken Sanislo 52138b4cbd NetworkServer: initialize profilemanager_thread
StopServer guards the pointer and nulls it after the delete, but
nothing ever set it, so destroying a server that never started read an
uninitialized pointer.
2026-07-29 11:25:06 -05:00
Ken Sanislo b3a2cccfed NetworkServer: per-client send thread for SignalUpdate notifications
RGBController_UpdateCallback sent the SignalUpdate packet synchronously
via SendRequest_RGBController_SignalUpdate, which runs inside
RGBController::SignalUpdate. A blocking send there (slow client) keeps
SignalCalls > 0, so WaitSignalCalls -- the callback drain that
Unregister/ClearCallbacks/Shutdown run while tearing callbacks down on a
rescan -- waits forever. That is the client/server rescan deadlock.

Each client now owns an outbound queue and a dedicated send thread. The
signal path builds the packet (brief AccessMutex, as before) and queues
it; the client's own thread does the blocking send. A slow client backs
up only its own queue and blocks only its own thread, so the signal path
and the callback drain are never blocked.

UPDATELEDS packets coalesce per controller (a newer frame replaces the
pending one), so a stalled client's queue stays bounded to one packet
per controller instead of growing without bound; non-coalescable events
fall back to a hard cap with drop-oldest. The client destructor stops
the thread with shutdown(SD_BOTH), which unblocks an in-flight send, so
the join at teardown cannot hang. A queue entry owns its packet header
and data buffer; the send thread frees the buffer after the send, so
there is no copy and the packet outlives the controller safely.

Follow-up: the send still takes the shared send_in_progress, so a slow
client can still stall sends to others; routing response sends through
the same per-client path would make that a per-client lock.

net_port: add SD_BOTH (SHUT_RDWR) for the POSIX socket shims.
2026-07-29 11:25:06 -05:00
someone-ua 15a8abf2c9 Detect AppImage path in AutoStart::GetExePath() 2026-07-29 07:20:01 -05:00
Daniel Clark d16b474aa8 Fix X870E Aorus Xtreme AI Top Layout and fix fixed linear zone layout mapping. 2026-07-29 07:15:31 -05:00
Marek Pokropiński 760758230a Initial support for Acer Nitro 16s 2026-07-28 08:38:25 -05:00
Adam Honse 358fc7b007 Implement a response queue to prevent a NetworkClient deadlock when multiple packets are waited on 2026-07-27 23:33:40 -05:00
Alessandro Di Ronza 069eeccb60 CLI: return a device list again, and print the version 2026-07-27 17:27:54 -05:00
Alessandro Di Ronza da77b63bea Fix SteelSeries Apex 9 lighting by using the correct direct report size 2026-07-27 17:23:28 -05:00
Adam Honse 791d8820d6 Get active effect and active settings during Valve Steam Machine initialization 2026-07-26 23:18:15 -05:00
Ken Sanislo 05fbe381dd MSIMonitorController: idle the control pipe between feature reports 2026-07-26 22:07:33 -05:00
isJuhn 3b2466ba10 Fix use after free in NetworkClient and NetworkServer 2026-07-26 22:03:43 -05:00
Ken Sanislo acc7fa6754 Invoke resource manager callbacks outside the callback mutex 2026-07-26 17:47:18 -05:00
Adam Honse 394a5c8eb0 Replace thread-local SignalUpdateDepth with SignalCalls per controller. Fixes an issue where callbacks that performed an unregister or clear operation on a separate thread would still deadlock, as is the case in Visual Map Plugin. Cleaned up comments 2026-07-26 01:29:34 -05:00
Adam Honse ac6d89b611 Bundle Qt6OpenGL and Qt6Core5Compat libraries and adjust LD_LIBRARY_PATH in AppImage to fix plugins using the system qt6 libraries 2026-07-25 21:37:03 -05:00
Ilya Miller 46cdd6fbe1 OpenRGBDevicePage: keep the color selection when applying a color 2026-07-25 13:28:38 -05:00