Compare commits

...
454 Commits
Author SHA1 Message Date
Adam Honse 10295a19fc More progress on getting CMake build on Linux 2025-06-03 17:52:14 -05:00
Adam Honse 84f60fccc6 Add support for building with CMake 2025-05-29 20:30:02 -05:00
mi4code 0a3a1e627c Add support for Patriot Viper V550 2025-05-23 23:43:52 -05:00
Kurt Borja a4476055ec Controllers: AlienwareController: Fix number of zones probing 2025-05-20 08:02:16 -05:00
Barry H a3afb8dcd8 Change TT Riing Quad controller leds_max from 54 to 60 2025-05-19 22:22:47 -05:00
Jonathan Guzmán ca900540b4 fix Arch Linux release url. 2025-05-18 00:30:01 -05:00
Fabian Arndt 45631aa850 Added support for "Gigabyte AORUS RX 6750 XT ELITE 12G" 2025-05-17 17:30:37 +02:00
sonicpanther101 d6a4f315fb Added new device Gigabyte GeForce RTX 4070 Eagle OC 2025-05-16 08:27:09 -05:00
Peter Berendi af5f66bc9e piix4: fix SMBHSTSTS test before and after transaction 2025-05-16 02:10:34 -05:00
Fabius Mettner 6e685be02d Add support for NZXT B650E Mainboard in NZXT Hue 2 Controller and allow Resizing NZXT Hue 2 controlled devices 2025-05-16 01:42:11 -05:00
Adam Honse 95b029d49d Initial support for Govee devices 2025-05-16 01:02:44 -05:00
Dmitry K 20f6565f44 Monitor and Laptop device types 2025-05-15 17:34:39 -05:00
Grant Bakker d296f770b6 Add MSI Radeon RX 7900 XT Gaming Trio Classic 2025-05-15 12:42:23 -05:00
Barry H bbe79420b1 Added TUF RTX5070 & RTX5090, ROG Strix RTX2060, RTX2060S & RTX5070Ti 2025-05-15 11:28:45 -05:00
Adam Honse 6aa5d71ba7 Remove dead code 2025-05-15 11:14:11 -05:00
DRC_Michael b83cc7fecd add: Sapphire Radeon RX 9070 XT Pure 2025-05-12 15:41:08 -05:00
Daniel Clark 77728fd425 Implement support for ITE IT5711 RGB Controller 048D:5711. 2025-05-12 15:01:42 -05:00
LucasMZ 478cf4e9da translation: update pt_BR
- fix many strings
- update missing translations
2025-05-09 21:56:38 -03:00
Paulo 425a92521f Add Gigabyte NVIDIA 5090 Gaming OC 2025-05-09 11:47:32 -05:00
Carlos Jordão 92d8240384 HyperX Origin Core variant 2025-05-09 11:36:37 -05:00
pallaswept 138d991cf2 Signal Handling and Fix for Closing 2025-05-09 08:10:55 -05:00
Adam Honse ac13b614d6 Add new controller for Alienware monitors with old protocol, clean up
AW3423DWF controller to match new behavior
2025-05-08 20:52:17 -05:00
Fefedu973 fd4403ec68 Add support for the Alienware AW3423DWF and AW3225QF monitors 2025-05-08 19:36:19 -05:00
Adam Honse ce62d9998e Add IGNORE_TIMER_RESOLUTION back for Windows 11 but keep NtSetTimerResolution in a loop 2025-05-08 19:32:00 -05:00
Adam Honse aa66814c43 Revert "InitializeTimerResolution fix slowdown on Windows 10, drop obsolete workaround for Windows NT"
This reverts commit 4e5fd41be7.
2025-05-08 19:31:53 -05:00
Paulo 14d0388a65 Update Gigabyte Blackwell controller for multizone gpus 2025-05-08 12:10:03 -05:00
Andrei Khartchenko c1d0553866 add ASUS TUF RX 9070 XT GAMING OC 2025-05-03 04:53:23 -07:00
Adam Honse 6a80f24962 Build AppImage with qt6 2025-05-02 02:38:39 -05:00
Bond_009 ef5bab4ff7 Add support for ASUS ROG Strix GTX1070 OC BIOS 2025-05-01 14:40:46 -05:00
Paulo ce5d390a38 Add Gigabyte NVIDIA 5070 Ti Aero OC 2025-04-29 20:44:26 +00:00
mrubcich a2315a45ff Adding support for Redragon M810 Taipan. 2025-04-29 04:14:06 +00:00
Adam Honse a722a59288 Add Mastodon link 2025-04-26 03:43:46 -05:00
Joseph E 90508f7f1b Initial Razer Hanbo Chroma support 2025-04-23 08:07:34 -05:00
Naïm Favier dd034cbfa6 Fix suspend/resume on Linux 2025-04-22 07:45:49 -05:00
Ilya Navitsky 12d4ab4213 Add Belarusian translation 2025-04-22 00:22:24 -05:00
Paulo bb3d322048 Remove NVIDIA Gigabyte 5070 Ti Eagle OC from old protocol 2025-04-21 15:35:58 -05:00
Stephen Horvath 2c4b159901 Fix SPDDetector only scanning bus 0 on Linux 2025-04-21 14:42:22 -05:00
Paulo 9e6a2eb94c Add new controller for RGB Fusion 2 Blackwell GPUs 2025-04-21 14:16:34 -05:00
Peter Berendi 4e5fd41be7 InitializeTimerResolution fix slowdown on Windows 11, drop obsolete workaround for Windows NT 2025-04-21 10:58:47 -05:00
Adam Honse c02da4066c Add build-windows.bat file for managing the Windows builds and update CI to use it 2025-04-21 08:06:09 -05:00
Adam Honse 10797f049c Add Qt version to software information tab 2025-04-19 01:58:48 -05:00
breakNull 489d05a13f Implement MSI GeForce RTX 5090 32G SUPRIM LIQUID SOC RGB 2025-04-18 18:22:34 -05:00
totesNotRosalyn a24a497759 Fix warnings in Qt6 builds 2025-04-18 18:20:15 -05:00
alminljajic 45af044cd8 add: saphire RX 9070 PCIe ID's 2025-04-13 13:42:14 -05:00
Y M 49aafb263f Ukrainian translation added 2025-04-11 18:15:04 -05:00
r muk 6401cf1da2 Added support for the Gigabyte Aorus Master 5090 Ice GPU 2025-04-10 11:41:44 -05:00
RedBlackAka 1f6be26489 Update device types in RGBControllerAPI documentation [authored by Nathan] 2025-04-09 08:07:35 -05:00
xtreme5183 c623194948 Add Gigabyte RTX 5090 D MASTER 2025-04-06 13:48:13 +08:00
4rcheria a2330fea6a Add Wooting 80HE support 2025-04-05 13:31:26 +02:00
Oleksii Taranenko acca2baa57 Fixed Kingston Fury Beast DDR5 do not detect #4725 2025-04-04 08:26:33 +00:00
Shubham Vasaikar e856422674 Add support for ASUS ROG Astral GeForce RTX 5080 #4708 2025-04-03 17:39:21 -05:00
Zhi Yan 8088f81eff Add some DRGBController device IDs 2025-04-01 20:36:41 -05:00
RedBlackAka c5d5209154 Add Asus TUF RTX 5080 OC #4703 2025-03-31 23:03:25 -05:00
Alastair McFarlane ff392ba61d Add Gigabyte RTX 5070 Ti Eagle OC 2025-03-28 08:22:49 -05:00
Erik Olofsson 3ecd1eaaf1 Add Asus ROG Astral LC RTX 5090 OC 2025-03-27 23:24:29 +01:00
totesNotRosalyn fbf1e957a2 Initial commit for ZOTAC_GAMING_GeForce_RTX_2080_AMP 2025-03-26 16:11:02 -05:00
RedBlackAka a7de887036 Add Sapphire RX 6950 XT Nitro+ Pure and reorder #4697 2025-03-26 00:15:31 -05:00
RedBlackAka 9314bd23a2 Add Asus TUF RTX 4080S OC SPID #4688 2025-03-25 10:56:29 -05:00
toxyy 685b6c36ac Adds MSI GeForce RTX 5070 Ti 16G GAMING TRIO OC PLUS Implements #4705 2025-03-24 17:05:54 -05:00
Shauren d8b60fbc7c Add MSI GeForce RTX 5080 16G GAMING TRIO OC 2025-03-24 11:44:31 +01:00
Chris M 74446a3c67 Fixed profile loading on Asus ROG Strix Scope II
* Reverted regression introduced with b4d15b954
* Resolves #4632
2025-03-15 11:04:10 +11:00
RedBlackAka e0f40c52fe Add Asus ROG RTX 4090 White SPID #4676 2025-03-13 08:07:32 -05:00
Michal Malý 28e97cf2d9 Include missing <chrono> header 2025-03-10 22:53:42 +01:00
Michal Malý ef344506b7 Use qintptr instead of long when building against Qt6 2025-03-10 22:52:25 +01:00
berendi ce3ef333b7 call ResourceManager::Cleanup() on exit 2025-03-10 11:31:09 -05:00
Michal Malý 33ea73aac2 Add support for Sapphire Radeon RX 9070 XT Nitro+ 2025-03-10 08:32:08 -05:00
RedBlackAka a6094c26b1 Adds Asus TUF RTX 5070 Ti OC #4637 2025-03-09 23:49:46 -05:00
RedBlackAka 8175a273d0 Adds Nvidia RTX 5080 FE 2025-03-09 15:08:45 -05:00
RedBlackAka 7a3e8f7e52 Add Asus ROG Astral RTX 5090 OC #4666 2025-03-09 15:07:03 -05:00
IoXaM 9786ba8f24 Aorus 5090 Master Support 2025-03-09 03:59:26 +01:00
Adam Honse ed014ec73e Implement matrix for HYTE THICC Q60 LCD zone 2025-03-08 18:06:55 -06:00
RedBlackAka 9fb4314964 Add Asus ROG Astral RTX 5080 OC #4644 2025-03-08 15:14:15 -06:00
Alexander V 2157644ab1 Add simple fix for support hator skyfall/rockfall keyboards to winbond controller 2025-03-07 00:33:24 -06:00
Adam Honse 598066bfe4 Enable fractional scaling for Windows, fixes #2571 2025-03-06 23:10:31 -06:00
Chris M b6c08ef38e Added Asus ROG STRIX RTX3090 24GB Gaming GPU
* Added `0x87C5` to pci_ids.h
* Registered detector in ENESMBusControllerDetect.cpp
* Link to [webpage](https://rog.asus.com/graphics-cards/graphics-cards/rog-strix/rog-strix-rtx3090-24g-gaming-model/)
2025-03-07 08:33:48 +11:00
Atome “Atom” Art f4b242328d Add Sony Playstation DualSense Edge PID 2025-03-06 13:31:51 -06:00
Adam Honse 84af91da9e Fix plugin removal issues 2025-03-06 11:36:10 -06:00
Daniil ひっかもりい (Hikkamorii) 3ce3447b65 Add support for Sapphire RX 7700XT Nitro+ 2025-03-05 09:50:46 -06:00
Aiden Vigue e91b5434fa Add MSI 5090 Gaming Trio OC to MSI GPU controller 2025-03-03 16:37:48 +00:00
RedBlackAka 3e32a5b36c Add Gigabyte Aorus RTX 4070 Elite 2025-03-01 18:24:54 +00:00
SytheZN 3226cda0ea Add Palit RTX 5090 Gamerock 2025-03-01 17:27:07 +00:00
Adam Honse 280646e231 Add ROG Ally X to ROG Ally controller 2025-02-28 21:44:52 -06:00
RedBlackAka 52b23717e3 Fixes for German translation 2025-02-26 00:43:59 +00:00
rom4ster c450d0a6ba Fix zone configuration in Mountain keyboard controller 2025-02-26 00:06:41 +00:00
Chris 3405fbb0eb Adjusted G502 detector from IPU to PU
* Adjusted Wired detector to accomodate old and new firmware.
* Resolves #4627
2025-02-25 17:25:43 +11:00
RedBlackAka 55b737c51c Add Norwegian translation 2025-02-25 06:11:48 +00:00
RedBlackAka 860a978676 Use NVIDIA_SUB_DEV instead of NVIDIA_DEV for sub vendor string 2025-02-25 06:10:46 +00:00
RedBlackAka d677f1e5e4 Remove unused help button from Windows titlebar 2025-02-25 06:09:15 +00:00
Adam Honse 6b84edb4fd Change suffix back to git after 1.0rc1 release candidate 2025-02-25 00:02:29 -06:00
Adam Honse 1fbacdea37 OpenRGB Release Candidate 1.0rc1 2025-02-22 11:06:06 -06:00
Adam Honse d3859ff200 Add prepare-artifacts script to download, extract, and rename CI jobs and other files to be published after a release 2025-02-22 03:21:36 -06:00
RedBlackAka 6091a16074 Add Palit RTX 2060 2025-02-21 16:06:03 +00:00
titoudoc b3dd0590cd Add support for Nvidia 5090 FE 2025-02-21 16:03:35 +00:00
RedBlackAka f6e17542f3 Installer: remove .orp association 2025-02-20 11:24:32 +00:00
RedBlackAka bf4f5480be Installer: remove Start Menu shortcut on uninstall 2025-02-18 19:42:02 +00:00
RedBlackAka 22f2c28a27 Add Gainward RTX 3060 8GB Pegasus 2025-02-18 18:41:05 +00:00
RedBlackAka c57d58d49b Miscellaneous cleanups 2025-02-17 15:46:33 +00:00
kmiit 75899a01a0 Add Colorful iGame GeForce RTX 4070 TI SUPER Ultra W 16GB 2025-02-17 17:22:55 +08:00
Adam Honse 015b28c7d1 Clean up build-msi.sh script and make XML generation more readable 2025-02-16 20:50:24 -06:00
Adam Honse b7c8d63505 Print out Wix XML when building MSI package for debugging 2025-02-16 19:40:51 -06:00
Adam Honse 1809c752ae Update mbedtls dependency to 3.2.1 2025-02-16 09:30:29 +00:00
RedBlackAka ce2dc2a042 Correct Spanish translation to fix build 2025-02-16 02:10:52 +00:00
Samuel Torres 8292575663 Edit OpenRGB_es_ES.ts 2025-02-16 01:49:47 +00:00
Adam Honse 0d6ae64b24 Update hueplusplus dependency to 1.2.0 2025-02-14 23:16:53 -06:00
RedBlackAka bb6f8e2ddd Consistent capitalization on Settings page 2025-02-13 13:54:27 +00:00
Topher Sheridan d1cdea47c7 Implement RGB support for Galax RTX 2080 Super 2025-02-12 20:26:16 +00:00
RedBlackAka 093ac9f37d Add Palit RTX 2070S Jetstream #4586 2025-02-12 20:25:46 +00:00
RedBlackAka f8b8da47a3 Add Palit 4080 SUPER GamingPro #4531 2025-02-11 21:39:37 +00:00
Adam Honse 14d3c68145 Fix warnings 2025-02-10 10:21:36 -06:00
Arimil 02af851705 Add ROG Strix RX EVA-02 Edition 2025-02-10 05:14:39 +00:00
Ivan ba0b44f12e Added another version of Gigabyte RTX 2070 Gaming OC 2025-02-10 05:09:43 +00:00
Valtekken 4b0110b33b Italian translation update 2025-02-09 19:30:18 +00:00
RedBlackAka 4b26a579f2 Add NVIDIA TITAN RTX 2025-02-09 07:11:55 +00:00
RedBlackAka 311712bf92 Add Palit RTX 3070 Gamerock #4593 2025-02-08 21:06:12 +00:00
RedBlackAka 9a5bff7a35 Capitalize Apply Changes and Get Hardware IDs on Supported page 2025-02-07 23:49:26 +00:00
Chris 7b72d11c97 Correcting G903 HERO wired Interface
*  Resolves #4212
2025-02-07 23:15:59 +11:00
Adam Honse 85625a37b2 SDK cleanup, update SDK documentation 2025-02-06 20:00:27 -06:00
Adam Honse e88f9a1f75 Fix resource manager interface 2025-02-06 20:00:27 -06:00
morg b3dfd3b4b0 Move ResourceManagerInterface to its own file. Refactor Plugin interface 2025-02-06 20:00:27 -06:00
Adam Honse 5e08608c56 Add controller flags to information tab 2025-02-06 20:00:27 -06:00
Adam Honse 8fbde8073d Do not save virtual or remote devices to sizes.ors 2025-02-06 20:00:27 -06:00
Adam Honse bb79fbfc07 Add controller flags field with flags for controller location and update behavior 2025-02-06 20:00:27 -06:00
Adam Honse 1967ec9526 Save sizes file when server processes segment changes 2025-02-06 20:00:27 -06:00
Adam Honse 012cb5e62d Fix segment creation and modification over the network protocol 2025-02-06 20:00:27 -06:00
Adam Honse e634a77860 Add LED alternate names field to SDK protocol 2025-02-06 20:00:27 -06:00
Adam Honse 1d9779d80e Add alternate LED name field to KLM overlay type for regional key layouts 2025-02-06 20:00:27 -06:00
Adam Honse 65615e2bcf Use string get functions in the Qt UI 2025-02-06 20:00:27 -06:00
Adam Honse 27cac898b0 Initial development for alternate LED names suppport in RGBController API
Alternate LED names allow an LED to have a secondary "alternate" name.  The led_alt_names vector should either be empty if alternate names are not used or be equal in size to the leds vector.  Empty strings in the led_alt_names vector indicate that a particular LED does not have an alternate name.
2025-02-06 20:00:27 -06:00
Adam Honse f627dfc2cd Increment plugin API version 2025-02-06 20:00:27 -06:00
Adam Honse 11d6b19cde Add protocol handling for resizable effects-only modes, increment protocol revision to 5 2025-02-06 20:00:27 -06:00
Adam Honse 032b6c6300 Resizable Effects-Only Zones 2025-02-06 20:00:27 -06:00
RedBlackAka e1a821f3c9 Minor cleanup of pci_ids.h 2025-02-06 21:04:00 +00:00
Shady Nawara aca9d27808 macOS smbus Piix4, SuperIO, and Nct6775 2025-02-06 17:20:30 +00:00
RedBlackAka 3eb14e411d Installer: remove unnecessary .0 from Wix version 2025-02-06 17:15:03 +00:00
morg 9dff3873ca Update FR translation file 2025-02-06 09:35:12 +01:00
RedBlackAka ec4973bd74 Update Japanese translation 2025-02-05 02:46:59 +00:00
RedBlackAka 6b54f62ad7 Add German translations for RM messages 2025-02-04 21:32:00 +00:00
RedBlackAka f65f486c5d Make capitalization of MR 2708 consistent 2025-02-04 20:45:43 +00:00
Kaladasas 8509f377df Add Asus ROG Poseidon Geforce GTX 1080 TI 2025-02-04 20:06:00 +00:00
Dmitry Kychanov 36889aafc1 Added Russian translations for RM messages 2025-02-04 17:12:30 +00:00
RedBlackAka 1f1ae20812 Add MSI RX 6650 XT Gaming X #4590 2025-02-04 14:03:45 +00:00
Chris 6934bbf802 Added translations for LOG messages
* Added C Macro to allow QT lupdate parsing
* Added QTtrranslation wrapper around dialog message
* Updated all translation files
2025-02-04 06:04:28 +00:00
Shady Nawara e39fafc64f Adds support for NZXT Kraken Elite 2024 2025-02-04 04:58:44 +00:00
RedBlackAka 58c609674d Update Japanese translation 2025-02-02 22:42:21 +00:00
RedBlackAka 2471511668 Remove a bunch of vanished entries from Chinese translations 2025-02-02 22:41:44 +00:00
RedBlackAka 9e0eb9f1a4 Installer: Remove InstallPath 2025-02-01 16:52:38 +00:00
RedBlackAka 18ac1aae7e Remove translation authors from titlebar 2025-01-31 00:07:51 +00:00
RedBlackAka a199464b4b Fix Japanese and Greek not being included 2025-01-30 20:02:17 +00:00
slichtzzz 7c46002ce0 Update Russian translation 2025-01-30 17:29:03 +00:00
RedBlackAka 5160ecd9ff Add Asus ROG RX 5700 OC #4578 2025-01-30 14:00:16 +00:00
RedBlackAka 08d00ffedc Installer: add InstallLocation to registry and allow downgrade 2025-01-29 02:42:51 +00:00
Dmitry K efb0dd607b Updated Russian translations 2025-01-28 17:06:53 +00:00
Adam Honse 0d16514899 Fix some copy paste string errors and capitalization in UI form titles caught during translation 2025-01-28 07:29:45 -06:00
RedBlackAka 041c7600b7 Add Asus ROG Radeon RX 480 non-OC #4287 2025-01-27 23:25:54 +00:00
Sebastian 47c6305f77 Added Initial Support for F360 RGB Fans with the NZXT RGB Controller 2025-01-27 20:56:35 +00:00
RedBlackAka f0025e817b Add Asus ROG RTX 4070 SUPER #4573 2025-01-26 08:03:01 +00:00
Chris 45d716d652 Adjusted Vendor name string
* Reverted Manufacturer string to Vendor name
* Added VendorID to log strings
* Other changes for Bash style and formatting
2025-01-25 09:53:31 +11:00
Chris M 220f1e6d1f Initial commit for Razer Huntsman V3 Pro
* Adding PID 0x02A6 for the Huntsman V3 Pro
* Added metadata to RazerDevices.cpp
* Registered detectors
* Added capabilities to RazerController.cpp
* Resolves #4477
2025-01-24 07:48:36 +11:00
enesuzun2002 1eb8ac2e19 Add Colorful iGame GeForce RTX 4070 SUPER Ultra W OC-V 2025-01-23 08:04:24 -06:00
RedBlackAka 13e496ff2f Add Gigabyte RTX 4070 Ti Eagle OC Rev 2 2025-01-23 13:22:28 +00:00
Андрей Белов 0b685dbc86 fix link 2025-01-23 01:12:58 -06:00
Mark Hermeling 7d37ec60b9 Add space for '\0'
ReceiveThreadFunction receives max 1024 bytes and then adds '\0' to it, so the buffer needs to be 1025 chars.
2025-01-23 01:12:30 -06:00
Adam Honse 27a37f65ea Fix AppImage patch 2025-01-23 00:30:30 -06:00
Adam Honse 3d62c5d452 Add StartupWMClass to .desktop, fix #4568 and icon on GNOME dock/taskbar 2025-01-22 23:52:42 -06:00
Adam Honse 8f67c22a4a Cleanup labels on Information page 2025-01-22 23:41:42 -06:00
RedBlackAka fc310dc440 Add Palit RTX 4070 Ti SUPER Gamingpro #4545 2025-01-22 19:35:23 +00:00
ericleco 43ab975ec1 Issue 4376 Adding support for SteelSeries Apex Pro Gen 3 keyboard 2025-01-22 19:01:05 +00:00
RedBlackAka 03190ff0fd Add Aorus RTX 2070 #1064 2025-01-22 13:56:21 +00:00
Dmitry K 894d792e23 Config option to limit the number of log files 2025-01-22 13:55:36 +00:00
Chris fc65a01a60 Added deterministic UUID's to allow MSI upgrade
* Adjusted UUID to ensure they are deterministic per App / Channel
2025-01-21 22:04:03 +00:00
Adam Honse 54802fdd4b Fix device type strings 2025-01-21 14:18:04 -06:00
Adam Honse 23dbabacc6 Set GIT_DEPTH to 0 to ensure tags are available 2025-01-20 18:08:44 -06:00
as3210 bc1e8c25ce A user complained his Cherry KB US-variant was not detected #4141 2025-01-20 20:29:50 +00:00
Milan Cermak 90b21fd977 Disabling of unneccessary DIMM DETECTOR is backwards. 2025-01-20 19:34:05 +01:00
Adam Honse a18ef1ad3a Prevent changing port settings on already opened serial port on Linux using advisory locks, default serial ports to flow control off 2025-01-19 18:35:01 -06:00
Adam Honse 116a031c6d Fix warning in PhilipsHueSettingsHandler.cpp 2025-01-19 01:45:10 -06:00
RedBlackAka 6ac3fae951 Capitalize theme names 2025-01-19 01:10:07 -06:00
RedBlackAka 29e384af98 Add MSI RTX 4070 Gaming X Slim White #4562 2025-01-19 04:13:42 +00:00
Peter Berendi 219b8909ed notice to install PowerShell 2025-01-18 02:43:47 +00:00
Adam Honse a04fe26014 Implement Hue Settings Handler to prevent json type conflicts that resulted in a multiply defined linker warning 2025-01-17 20:34:23 -06:00
berendi 236e67e46b improve retry algorithm in KingstonFuryDRAMControllerDetect.cpp 2025-01-17 18:59:19 +00:00
Adam Honse 8305572613 Fix overflow memset in JGINYUEInternalV2Controller.cpp 2025-01-17 11:24:22 -06:00
RedBlackAka 9ced0a9225 Clean up MSI GPU names 2025-01-17 14:51:26 +00:00
Adam Honse 51031cc1fe Try to fix git-get-branch.sh call on Windows 2025-01-17 08:12:32 -06:00
Chris M e2ddc03dfe Add rules to deploy MSI build
* Turn the deploy MSI build off for forks
2025-01-17 07:00:04 +00:00
Adam Honse 253bf9c077 Fix warnings about omitted parameter names in scsiapi_macos.c 2025-01-17 00:58:33 -06:00
Adam Honse d9d3bc2b6c Fix warning in JGINYUEInternalUSBV2Controller.h 2025-01-17 00:53:10 -06:00
Adam Honse 633662037a Fix warning in OpenRGBDialog.h 2025-01-17 00:48:27 -06:00
Adam Honse ce65818060 Fix warnings and improve robustness of scsiapi_linux.c 2025-01-17 00:27:21 -06:00
Adam Honse 815924b9ac Fix warning in LogitechProtocolCommon.cpp 2025-01-17 00:16:34 -06:00
Adam Honse b64b856dfd Fix warning in EVisionV2KeyboardController.cpp 2025-01-17 00:15:18 -06:00
Adam Honse 1b9ce719f8 Fix warning in OpenRGBDialog.cpp 2025-01-17 00:12:59 -06:00
Adam Honse f8cc8a38c7 Attempt to clean up Fedora build warnings 2025-01-16 23:58:17 -06:00
Adam Honse 8126fbc4a3 Fix warnings in net_port.cpp 2025-01-16 23:44:58 -06:00
Adam Honse 66487422ab Fix warning in RGBController.cpp 2025-01-16 23:44:58 -06:00
Adam Honse 39d7ce6a50 Fix warning in ResourceManager.cpp 2025-01-16 23:44:58 -06:00
Adam Honse 5db2c3af8c Fix warning in LogitechProtocolCommon.cpp 2025-01-16 23:44:58 -06:00
Anthony Moon e0a78f753d added H100i Elite PID and detector 2025-01-16 12:37:36 -08:00
Adam Honse f3c3a9cd44 Fix AUR version 2025-01-16 11:59:38 -06:00
Adam Honse ae248d6d32 Update versioning scheme 2025-01-16 17:51:20 +00:00
RedBlackAka 7f04d34179 Improve Windows installer header and allow upgrading 2025-01-15 03:40:52 +00:00
Adam Honse 77fd471915 Only load segments from profile if segment count differs from base controller, prevents segment duplication on devices with autogenerated segments 2025-01-14 12:34:32 -06:00
RedBlackAka 67a0f031a7 Add Asus Tuf 7800 XT OC SPID 2025-01-14 16:56:39 +00:00
Adam Honse 50f4bb5e5a Indicate that system plugins cannot be removed by changing remove button text 2025-01-14 01:40:29 -06:00
Adam Honse 17ad77f07a Don't unload/remove plugins immediately, instead require a restart to prevent unclean unload/crash 2025-01-14 00:41:32 -06:00
Adam Honse 6f55f0e0c0 Rename Windows 64 MSI CI job 2025-01-14 00:05:05 -06:00
Adam Honse 567ad09506 Check executable directory for system plugins (in plugins folder) on Windows 2025-01-13 23:53:26 -06:00
RedBlackAka b8bfd1dddc Clean up and finish Windows installer 2025-01-14 05:01:50 +00:00
Chris cc26827c57 Adding Windows 64bit MSI package to build
* Added Windows 64bit deploy stage to CI/CD
* Created deb builder to support WINE and Wix toolset
* Created build-msi.sh to create XML manifest
2025-01-14 05:01:50 +00:00
Chris 698ababc6d Added message for users submitting to Github 2025-01-13 02:24:10 +00:00
ffernn 12dd340912 Add support for EVGA 3060 Ti FTW3 Ultra Gaming LHR 2025-01-13 02:14:45 +00:00
Hepi34 44c839c116 Implement RGB support for KFA2 RTX 2070 OC 2025-01-12 01:54:15 +00:00
Adam Honse d424b1f2b4 More protocol documentation updates 2025-01-10 21:53:21 -06:00
Adam Honse ff2188ba45 Update SDK Documentation, fix plugin protocol version type in NetworkServer 2025-01-10 11:59:53 -06:00
llyyr 1c42cdc928 Added ROG RX6600XT O8G Gaming 2025-01-10 14:05:09 +00:00
morg 3e1a0ff5a3 Prevent crashing when removing the last plugin in the list 2025-01-10 10:56:25 +01:00
morg 59e303c882 Add missing tags in logs 2025-01-10 08:53:31 +01:00
thombo f8e04f5f0f Support for MSI board 7D33 added, configuration of 7D89 corrected 2025-01-09 21:42:02 +01:00
Adam Honse 1cc41bb4cd Clean up README.md 2025-01-09 11:48:26 -06:00
Chris 990f89b94f Turn off translation for SDK and API version
* Revert 6ff4919d with better fix
* Resolves #4538
2025-01-09 18:23:59 +11:00
Adam Honse 648c0fce92 Get rid of old early prototype OpenRGBDialog, rename OpenRGBDialog2 to OpenRGBDialog 2025-01-08 23:31:34 -06:00
Barry H 014ae33f0b Chinese Traditional translation updated for v1.0 2025-01-09 03:43:21 +00:00
Adam Honse d8d7c37cf1 Fix SDK/Plugin version not displaying correctly 2025-01-08 21:03:09 -06:00
Adam Honse 471f9d3e2e Add server option to disable the size check called legacy workaround, which can be enabled to allow some old SDK apps that didn't properly implement the size to still be used 2025-01-08 20:44:20 -06:00
Chris M 3117dd0885 Added Bloody W90 Pro Mouse
* Added new PID and usage to A4Tech_Detector
* Added PID to layout switch in RGBController_BloodyMouse
* Resolves #4466
2025-01-09 02:27:33 +00:00
RedBlackAka 034a8858c5 Further improvements and fixes for German translation 2025-01-08 22:22:33 +00:00
morg 309d25e047 Remove useless ResourceManager include 2025-01-08 11:10:38 -06:00
morg accdcf1bea Move some last second code to the about to quit signal. 2025-01-08 16:54:21 +00:00
Barry H 3336817c9a Chinese Simplified translation updated for v1.0 2025-01-08 16:51:24 +00:00
RedBlackAka e570ae2b3f Update German translation for 1.0 2025-01-08 14:21:06 +00:00
Dmitry Kychanov b30992bf28 Russian translation updated for v1.0 2025-01-08 02:10:58 +00:00
Chris M 6ff4919d75 Moved Software Info API values to ensure translation
* Resolves #4538
2025-01-08 02:10:11 +00:00
Dmitry Kychanov 210f7c4993 Last minute fixes for ASUS G18 layout & Direct mode brightness 2025-01-08 03:26:51 +04:00
Dmitry K d1f90e134f [Review needed] Fix Rescan Crash on MacOS 2025-01-07 19:44:21 +00:00
RedBlackAka 20ae2d3662 Clean up Gigabyte GPU detectors 2025-01-06 22:07:38 +00:00
morg d2a9fb7c3c Refresh plugin list after a plugins scan. Fixes #4505 2025-01-06 15:16:57 +01:00
RedBlackAka c91e1dcdd9 Add fullscreen mode toggleable with F11 2025-01-05 22:48:31 +00:00
Alexey Sokolov b2ea4212fd Use a common way to check for Qt6 instead of introducing UB 2025-01-05 22:46:12 +00:00
RedBlackAka 49036313d0 Add Zotac 3080 AMP Holo non-LHR and minor cleanup 2025-01-05 22:44:58 +00:00
Barry H 8142fade24 Added ROG RX6650XT O8G Gaming from #3977 & TUF RX7600XT O16G Gaming 2025-01-05 22:43:21 +00:00
Adam Honse 02db89f7fc Add settings option to enable/disable logging to file, default to enabled 2025-01-05 16:32:32 -06:00
Chris M 7b454ce5f4 Preliminary support for Logitech FP8071
* Updated detection for differences in FP8071
2025-01-03 16:12:49 +11:00
Milan Cermak 366adce39e Patriot Controllers to use DIMM_DETECTOR 2025-01-02 19:18:37 -06:00
RedBlackAka 3546788c44 Add RTX 2060, 2060S & 2070 FE support 2025-01-02 17:20:27 +00:00
RedBlackAka 427e9d0209 Add Asus ROG RTX 2060 6G #4509 2025-01-02 14:26:55 +00:00
Chris M 8d8199a6b3 Initial commit for Razer Huntsman V3 Pro TKL White
* Adding PID 0x02A7 for the Huntsman V3 Pro TKL White
* Added metadata to RazerDevices.cpp
* Registered detectors
* Added capabilities to RazerController.cpp
* Resolves #4418
2025-01-01 10:41:03 +11:00
nicolasyang c3e352d252 Initial commit for Gigabyte Radeon RX 7800 XT GAMING OC 16G 2024-12-29 19:04:20 +00:00
Andrew Velasquez 510528ed7b Add ASUS_ROG_STRIX_RTX_4060_O8G_GAMING to pci_ids.h Tested and works. 2024-12-29 19:03:02 +00:00
Will db19bcd712 Set Skyloong GK104 Pro maximum brightness to OEM maximum 2024-12-27 07:42:28 +00:00
RedBlackAka 914cf1b3ff Clean up names of several devices 2024-12-27 07:41:33 +00:00
RedBlackAka 7085106b45 Attempt to fix dark theme on macOS 2024-12-23 07:36:17 +00:00
Milan Čermák a2867e151d HyperX controller to use DIMM_DETECTOR 2024-12-23 07:26:58 +00:00
Adam Honse 560ff5ab33 Clean up SPDAccessor, split out classes into their own files, add comments, update coding style 2024-12-21 22:21:41 +00:00
Frans Meulenbroeks 38732a8fb4 Add Controller for CoolerMaster MM712 Mouse 2024-12-20 17:41:39 +00:00
Chris M 2652e92461 Initial commit for Razer Firefly V2 Pro
+ Adding PID `0x0C08` for the Firefly V2 Pro
+ Added metadata to RazerDevices.cpp
+ Registered detectors
+ Added capabilities to RazerController.cpp
+ Resolves #4239
2024-12-20 15:00:45 +11:00
thomisus f1965b4650 Added Razer Basilisk V3 35K and V3 Pro 35K 2024-12-19 21:52:01 +00:00
Peter Berendi 2a9b7c8115 fix Kingston Fury DDR5 detection (#4479) 2024-12-19 14:32:40 +00:00
RedBlackAka 1bfd0fbd1f Add additional PCIE ID for ROG 2060S #4469 2024-12-13 21:53:43 +00:00
RedBlackAka ac9f5bed50 Initial commit for Nvidia RTX 2080 Ti FE 2024-12-13 21:52:55 +00:00
Yunus Arkan c2215cbe11 Adding support for EVision keyboard named "Gamepower ogre rgb" 2024-12-12 06:12:34 +00:00
TheMasterofBlubb 241b977904 Added alternative Pid for EVGA Z20 2024-12-12 06:11:45 +00:00
Milan Čermák ae94ce1252 Fix null pointer dereference in SPD 2024-12-10 14:37:42 +00:00
Adam Kaczinski 48f0084a9f adding fix for crash when using effects with kasa devices 2024-12-04 17:46:42 -08:00
Milan Čermák b1d5e83adc Implement common DRAM SPD module with EE1004 and SPD5118 driver support to support detecting DRAM modules using SPD information. 2024-12-04 20:41:52 +00:00
Adam Honse 3d171c222b Fix HYTE THICC Q60 2024-12-02 19:15:16 -06:00
Fabian R fe240190b3 Major fixes and improvements for CoolerMaster ARGB Gen2 A1 V2 2024-11-30 10:08:37 +00:00
Chris M 82b56e3de7 Fix broken README links
* Resolves #4415
2024-11-29 08:05:10 +11:00
morg 9d229e2a0c Prevent non AMD devices to be registered from i2c_smbus_amdadl 2024-11-28 08:11:49 +01:00
Dmitry Kychanov 89e74e6268 Added 4070 Ti per Discord request from Sayanov 2024-11-27 20:33:56 +04:00
Cooper Hall 47f391a3a6 Initial Commit for Lenovo Legion 7 gen 9 2024-11-27 03:30:00 +00:00
Adam Honse 80ac9b3f0d Initial commit for HYTE Nexus controller 2024-11-26 21:12:33 +00:00
Zach Deibert bd3cc94212 Add support for loading profiles on suspend/resume 2024-11-26 20:07:28 +00:00
Adam Honse 7d96b27f28 Fix warning in OpenRGBDialog2.cpp 2024-11-26 02:34:34 -06:00
Adam Honse a8cbf4f52f Fix warnings in OpenRGBDevicePage.cpp 2024-11-26 02:33:30 -06:00
Adam Honse f1948dc3a6 Fix warnings in OpenRGBPluginsPage.cpp 2024-11-26 02:31:39 -06:00
Adam Honse 75bebb0a4b Fix warnings in scsiapi_windows.c 2024-11-26 02:30:23 -06:00
Adam Honse 9afc7285b5 Fix warnings in ResourceManager.cpp 2024-11-26 02:28:29 -06:00
Adam Honse 1586812112 Fix warnings in RGBController.cpp 2024-11-26 02:28:19 -06:00
Adam Honse cbfb8afa0c Fix warning in PluginManager.cpp 2024-11-26 02:06:40 -06:00
Adam Honse 9dafb5cb7f Fix warnings in KeyboardLayoutManager.cpp 2024-11-26 02:06:05 -06:00
Adam Honse 4df90b1b96 Fix warnings in ResourceManager.cpp 2024-11-26 02:00:36 -06:00
Adam Honse f1da4a3b2f Fix warning in RGBController.cpp 2024-11-26 01:57:01 -06:00
Adam Honse 39c968ff2a Fix some warnings in NetworkServer.cpp 2024-11-26 01:55:35 -06:00
Adam Honse b0c3856ab4 Fix warnings in ProfileManager.cpp 2024-11-26 00:38:56 -06:00
Adam Honse 9d3956c168 Fix warnings in NetworkClient.cpp 2024-11-26 00:37:30 -06:00
Adam Honse d0397bc23a Fix warning in cli.cpp 2024-11-26 00:34:56 -06:00
Adam Honse 7eb83f1a60 Fix warnings in Thermaltake Riing controllers 2024-11-26 00:34:16 -06:00
Adam Honse b4ee1f0fb8 Fix warnings in QMK OpenRGB controller 2024-11-26 00:32:10 -06:00
Adam Honse ac802b1aa8 Fix warnings in ASUS Aura Core laptop controller 2024-11-25 23:43:13 -06:00
Adam Honse 51e38ade01 Fix warnings in Mintaka keyboard controller 2024-11-25 23:37:17 -06:00
Adam Honse b213d3f37c Fix warnings in RGBController_Luxafor.cpp 2024-11-25 19:49:28 -06:00
Adam Honse b0ba64f178 Fix warnings in JGINYUE V2 controller 2024-11-25 19:48:01 -06:00
Adam Honse 69512cbf70 Fix warning in RGBController_HYTEKeyboard.cpp 2024-11-25 19:44:39 -06:00
Adam Honse b7a3de0f10 Fix warnings in RGBController_Luxafor.cpp 2024-11-25 18:43:09 -06:00
Adam Honse 540f785e90 Fix warnings and code cleanup in RGBController_JGINYUEInternalUSBV2.cpp 2024-11-25 18:42:08 -06:00
Adam Honse 01d9655781 Fix warnings in RGBController_HYTEKeyboard.cpp 2024-11-25 18:36:52 -06:00
Fotis Papadopoulos 224d75e0e8 PNY RTX 3080Ti Revel Epic-X 2024-11-17 20:39:13 +00:00
Chris b68dacec62 Setting Linux & Windows amd64 builds to compile on MR 2024-11-16 17:46:51 +11:00
morg f45e61d651 Add support for Sapphire 6950XT TOXIC 2024-11-14 23:40:01 +01:00
Adam Honse c734e6f929 Fix merge request pipeline again 2024-11-13 20:02:48 -06:00
Chris 0539e3faeb Switching Linux & Windows amd64 builds back to auto
* Created .default_rules reference
* Renamed "Linux amd64 AppImage" build to "Linux amd64 AppImage Base"
then extended "Linux amd64 AppImage" to automate local runners
* Renamed "Windows 64" to "Windows 64 Base" and extended "Windows 64"
to automate local runners
2024-11-14 11:50:35 +11:00
morg 43021f9a15 Add support for Turtle Beach - Vulcan TKL. Closes #4419 2024-11-13 16:25:57 +00:00
Sam B e81e294479 Add Riing Trio Controller support 2024-11-12 20:33:33 +00:00
Adam Honse 378f0af781 Try to fix merge request CI not having amd64 AppImage or Windows 64 builds 2024-11-11 21:18:43 -06:00
Milan Cermak 8eba52ec30 Controller registered but no device found 2024-11-11 01:45:37 +00:00
Vasily Galkin 777725c083 Reenable forks and their MRs ability to run pipelines on gitlab.com runners 2024-11-10 22:33:24 +00:00
Adam Honse 5b7cdf786b Allow switching format for hex color code entry box between RGB (HTML) and BGR (RGBColor) 2024-11-10 16:23:57 -06:00
Mark Li 330f6d6014 Add support for Cooler Master ARGB Gen2 A1 Mini 2024-11-10 06:42:57 +00:00
Marius Alexandersen 7a69aef99b Add Arrow Lake SMBus Support 2024-11-10 00:40:45 +01:00
Adam Honse 9e5bbc7598 Initial HYTE Keyboard controller 2024-11-08 14:55:37 +00:00
Lobo Tommy 986b21e02b Adding Turtle Beach Vulcan II support 2024-11-07 14:45:14 +00:00
JoshTripleH 2a8fdc486b Fix get location to avoid detection issues after relaunch 2024-11-05 01:04:22 +00:00
Thomas Ricci fa6a516543 Add new G733 hardware ID 2024-11-03 07:57:21 +00:00
rom4ster d627c91a4a Added Reactive Mode For Aerox 9 in General Aerox Controller And Deleted Old Controller 2024-11-02 23:00:49 +00:00
morg 1368f83d77 Adds a setting for automatically showing LED view 2024-11-02 17:34:28 +00:00
morg ab7e281c1c Adds a few checks before trying to init a serial device. Closes #2247 2024-11-02 17:32:17 +00:00
Chris M fc3e95e16a Fix regression in Linux DMIinfo
* Reversed Linux Name and Vendor paths to align with declarations
2024-10-31 19:32:56 +11:00
Chris M a61703da50 Initial commit for the G533ZW Aura Laptop
* Added new device layout to AsusAuraCoreLaptopDevices.cpp
* Resolves #4353
2024-10-31 05:15:12 +00:00
Chris M da13a0b3fe Add missing include for Mountain Keyboard Controller
* Missing <cstring> include required by memset
2024-10-31 11:46:29 +11:00
morg 8b9f128881 Nanoleaf: Check for connection error before accessing status/body. Closes #4390 2024-10-30 23:14:40 +00:00
rom4ster 43bd3774e8 Add Knob color support to mountain keyboard 2024-10-30 23:13:26 +00:00
Tiago Gomes b138405740 Add support for Omen 45L front fans, off mode and Wave and Radial effects 2024-10-30 16:09:49 +00:00
Adam Honse c45e743d87 Fix bad log call in dmiinfo trying to directly print std::string instead of c_str 2024-10-29 20:01:49 -05:00
Joe Petrakovich 5cfa0668b9 Add support for NZXT RGB & Fan Controller (New NZXT H9 Elite Model) 2024-10-30 00:47:44 +00:00
JAO1988 69f03e0e24 Update ThermaltakeRiingControllerDetect.cpp for additional controllers. 2024-10-30 00:46:56 +00:00
thombo 4d4dc7aaee Config of MSI board 7D98 corrected 2024-10-30 00:40:47 +00:00
Chris M 2e199593e9 Adding product name to DMI data class 2024-10-30 07:58:11 +11:00
gregorein 8565a3ddee feat: added new Asus PID (x670e motherboards) 2024-10-28 01:48:47 +00:00
Björn Bidar 24fc6bd749 Optionally support system libe131
Can be enabled by calling qmake with CONFIG+=system_libe131.
Includes comments for general structure to handle in-tree
vs. out-of-tree dependencies.

Handles only systems who use pkgconfig.
2024-10-26 21:17:23 +00:00
morg 90a0e5fac7 Add support for AORUS GeForce RTX™ 4070 Ti MASTER 12G. Closes #4323 2024-10-26 21:16:08 +00:00
Filip Krakowski a3ca22e6a1 spd5118 kernel driver conflicts with Kingston Fury DRAM 2024-10-26 19:13:34 +00:00
mike fc3116e596 DasKeyboard: Update detection of US keyboard, and minor change to keyboard layout. 2024-10-26 19:11:21 +00:00
Chris 19a69f4139 Corrected HIDAPI include for the Mintaka KB Controller
* Compile error on Windows introduced in d7e467a3
2024-10-22 16:58:37 +11:00
Julien "_FrnchFrgg_" Rivaud bdfd2a3290 Add support for Turtle Beach (ex ROCCAT) Vulkan II 2024-10-20 19:57:22 +00:00
Federico Scodelaro d7e467a37f Add VSG Mintaka keyboard 2024-10-20 19:56:31 +00:00
SU wuyi 7dcdef28c8 Initial commit for adding support to JGINYUE Motherboard Controller V2 2024-10-20 19:54:04 +00:00
Dmitry Kychanov 300abac9a8 Removed unused includes 2024-10-15 00:24:32 +00:00
Alexey Sokolov b3b9ebb3b7 Fix OPENRGB_SYSTEM_PLUGIN_DIRECTORY 2024-10-15 00:22:20 +00:00
Milan Čermák d5ef41bb80 Improve Kingston Fury detection 2024-10-09 02:34:08 +00:00
Arthas Lich f802547e7b Add Colorful iGame GeForce RTX 4070 SUPER Ultra W OC 12GB 2024-10-08 15:52:36 +00:00
Dmitry Kychanov a7cdbb3844 Fix --profile 2024-10-06 00:46:51 +04:00
Dmitry Kychanov b171906162 Fixed server 2024-10-05 02:47:02 +04:00
Adam Honse 98eab49e99 Change HyperX Microphone Controller zone type to single 2024-10-01 20:06:07 -05:00
BestPig e53e903b5e Add Gigabyte RTX 4070 SUPER Aero OC 16GB 2024-09-29 20:52:37 +02:00
Adam Honse 8a36717842 Remove LogManager dependency from NetworkClient.cpp
NetworkClient/Server code should have minimal internal dependencies as it is intended to be includable in external applications, pulling in only the absolutely necessary files so that it may be used in third party SDK applications.  LogManager is not a necessary dependency.
2024-09-27 11:25:55 -05:00
Dmitry Kychanov d612b8b8de Network shutdown optimization 2024-09-27 16:15:14 +00:00
Dmitry K 2c952a54d2 Loading optimization (no GUI changes) 2024-09-26 22:20:48 +00:00
Dmitry K 7e96e0efa5 Added Asus TUF Gaming M3 Gen II 2024-09-22 23:54:18 +00:00
Mark c4384f2a47 Add Palit RTX 4060 Dual support 2024-09-22 23:52:08 +00:00
Ojas Sinha 98b2c20d54 Add Gigabyte RTX 4070 SUPER Eagle OC ICE 12GB 2024-09-22 23:50:54 +00:00
Chris M ac8158ba9c Added MSI RTX4070Ti Super 16G Gaming X Slim White GPU
* Added `0xE13E` to pci_ids.h
* Registered detector in MSIGPUv2ControllerDetect.cpp
* Link to [webpage](https://www.msi.com/Graphics-Card/GeForce-RTX-4070-Ti-SUPER-16G-GAMING-X-SLIM-WHITE/Specification)
* Resolves #4329
2024-09-18 07:07:16 +10:00
Chris M d45d2bf7fc Corrected KLM layout for Blackwidow V4 1532:0287
* Resolves #4313
2024-09-15 19:07:50 +00:00
Vasily Galkin 175ebb61de Add alternative IDs to better detect already-supported Aorus GPUs 2024-09-15 19:06:03 +00:00
Mut Ze 8c642ac923 Add support for iGame 4070 Ti SUPER Advaned OC (AD102 version) 2024-09-14 19:09:39 +00:00
thombo 8248509377 Support for MSI boards 7D93 and 7E24 added 2024-09-14 19:05:34 +00:00
Oleh Polisan 77dbb4becf docs: add PiLED to apps, supporting ORGB SDK 2024-09-14 00:34:54 +00:00
Ensar Sarajčić 8c874181c0 Reuse Aerox3Wireless for other Aerox wireless mice 2024-09-13 16:44:25 +00:00
Ensar Sarajčić c84932df46 Add Aerox 3 wireless 2024-09-11 16:42:11 +00:00
LikMaiDong69 1342adefe4 Resolves Issue #4270: Added MSI 4080 SUPER Gaming X Trio 2024-09-11 16:39:50 +00:00
Dmitry K cc21027db2 Asus G17 Direct mode fix (with extra tight matrix map) 2024-09-08 00:14:24 +00:00
Adam Honse bf630245d0 Initial commit for Dream Cheeky Webmail Notifier 2024-09-06 23:42:47 -05:00
Adam Honse 062ecf69f0 Add luxafor-python to projectrs researched 2024-09-06 11:27:42 -05:00
Dimitri Marques bb5d93ddf6 ✨ - Add support for Dell G15 5530 RGB keyboard (RTX 4050) 2024-09-06 10:19:45 -03:00
Dmitry Kychanov e565120d29 Added ASUS ROG Strix G18 (G814JV) + Light Bar behavior fixes 2024-09-06 10:51:15 +04:00
Chris M e0cffcfb3a Migrated Asus Aura Core Laptop controller to the KLM
* Added AsusAuraCoreLaptopDevices to record device metadata.
* Adjusted AsusAuraCoreLaptopDevices to allow KLM layouts per zone
* Modified RGBController_AsusAuraCoreLaptop to use KLM layouts.
* Adjust AsusAuraCoreLaptopController to align with new data model
* Other code changes to accomodate
2024-09-06 04:36:06 +00:00
Adam Honse f115d2cbd9 Add Luxafor pattern modes 2024-09-05 22:59:20 -05:00
Adam Honse ae826f2fd0 Initial commit of Luxafor Flag controller, only supports direct mode for now 2024-09-05 22:18:24 -05:00
Chris M a675825224 Initial commit for Corsair K70 PRO V2 keyboard
* Added metadata to CorsairPeripheralV2Devices
* Added detector in CorsairPeripheralV2ControllerDetect.cpp
* Resolves #3912
2024-09-04 17:56:10 +10:00
Chris M 6d00a7fb23 Added media keys to K70 RGB Pro
* Added limit for packet size in CorsairPeripheralV2Controller
* Resolves #3862
2024-09-04 17:43:14 +10:00
Chris 4a74103e70 Revert hidraw version check
* `packagesExist(hidapi-hidraw>=0.10.1)` is not a valid qmake version test
2024-09-03 18:19:34 +10:00
Chris M 4fcf0d01a2 Fixed small typo in EKController import 2024-09-03 13:14:10 +10:00
Chris 67def7465c Initial commit for Corsair K70 Core keyboard
* Added metadata to CorsairPeripheralV2Devices
* Added detector in CorsairPeripheralV2ControllerDetect.cpp
* Resolves #4103
2024-09-02 21:29:44 +10:00
Maksims K 8fa92a0789 Fix bug in AsusAuraMainboardController.cpp where effect channel wasn't being incremented. Fixes #4114. 2024-09-01 16:30:56 +00:00
shafiahaz2478 406350f5f5 added ant esports GM600 mouse 2024-08-30 19:26:19 +00:00
Adam Honse 11bdaaa2fc Fix AOC GK500 mapping broken by changing KLM base layout from ANSI to Default (English ANSI + English ISO combined map). Rename the 'ansi' field to reflect that this is no longer an ANSI map. 2024-08-29 00:09:03 -05:00
Chris M c23bbbd32a Added Bloody W70 Max Mouse
* Added new PID and usage to A4Tech_Detector
* Added PID to layout switch in RGBController_BloodyMouse
* Resolves #4296
2024-08-29 09:51:29 +10:00
morg a6df80f87e Crash fix for linux nvapi 2024-08-28 13:57:18 +00:00
Tam D f2c99f22a8 fix #4292 sk620 support 2024-08-28 03:44:28 +00:00
Adam Honse 511c266178 Add u16string to string conversion function for CMKeyboardV2Controller.cpp 2024-08-25 20:49:31 -05:00
Chris c6fe58e635 Revert 8bf07f49 "Fix wstring to string conversion warning in CMKeyboardV2Controller.cpp"
* Linux throws a SIGABRT
2024-08-26 01:26:43 +00:00
Adam Honse 641c917605 Add Gigabyte RTX 4070Ti Eagle OC 12GB 2024-08-25 17:20:03 -05:00
verglor ea7f86b32a Fix indentation of device list in NVIDIAIlluminationControllerDetect_Windows_Linux.cpp 2024-08-23 18:40:01 +00:00
verglor 4b2781404a [New Device] Gainward GeForce RTX 4070 Ghost (OC) #3614 2024-08-23 18:40:01 +00:00
Tam Do d86f59cf17 add sk620 2024-08-23 11:15:19 -05:00
Adam Honse 3a1dd871ff Fix serial string containing invalid characters in Razer Kraken controller 2024-08-22 23:18:03 -05:00
liberodark c4ecf3ebcd Add Skillkorp K5 2024-08-20 13:08:12 +02:00
Adam Honse 428355761e Fix unrecognized escape sequence warning in i2c_smbus_piix4.cpp 2024-08-17 01:24:37 -05:00
Adam Honse a18211cc57 Fix unrecognized escape sequence and possible loss of data warnings in i2c_smbus_i801.cpp 2024-08-17 01:23:50 -05:00
Adam Honse 9caa009eb3 Fix unreferenced parameter warning in nvapi.cpp 2024-08-17 01:13:28 -05:00
Adam Honse 38818f7d88 Fix unreferenced local variable warning in OpenRGBNanoleafSettingsEntry.cpp 2024-08-17 01:02:54 -05:00
Adam Honse 20e4d18cb4 Fix unreferenced parameter warning in i2c_smbus_piix4.cpp 2024-08-17 00:54:20 -05:00
Adam Honse 62b6e7175f Fix unreferenced variable and parameter warnings in i2c_smbus_nct6775.cpp 2024-08-17 00:53:01 -05:00
Adam Honse cffac6c255 Fix unreferenced variable and parameter warnings in i2c_smbus_i801.cpp 2024-08-17 00:51:03 -05:00
Adam Honse 66a1496f18 Fix unreferenced parameter warning in i2c_smbus_amdadl.cpp 2024-08-17 00:46:33 -05:00
Adam Honse 7f90c69eb0 Fix warnings in scsiapi_windows.c 2024-08-17 00:29:25 -05:00
Adam Honse 1b26908104 Fix unreferenced local variable warning in i2c_smbus_nvapi.cpp 2024-08-17 00:25:30 -05:00
Adam Honse c1149da754 Fix possible loss of data warnings in NetworkServer.cpp 2024-08-17 00:24:18 -05:00
Adam Honse bb1ae9cf2e Fix possible loss of data warning in i2c_smbus.cpp 2024-08-17 00:22:53 -05:00
Adam Honse 8cbdb0a236 Fix warnings in ResourceManager.cpp 2024-08-17 00:15:17 -05:00
Adam Honse 6c729ff60f Fix possible loss of data warnings in RGBController.cpp 2024-08-16 23:54:14 -05:00
Adam Honse 9281f8ed5c Fix possible loss of data warnings in ProfileManager.cpp 2024-08-16 23:48:37 -05:00
Chris M d6cac9cb27 Added Asus ROG STRIX RTX4070Ti 12GB Gaming GPU
* Added `0x88A6` to pci_ids.h
* Registered detector in ENESMBusControllerDetect.cpp
* Link to [webpage](https://rog.asus.com/graphics-cards/graphics-cards/rog-strix/rog-strix-rtx4070ti-12g-gaming-model/)
* Resolves #4280
2024-08-17 10:29:13 +10:00
Adam Honse 0743bc49b3 Fix possible loss of data warning in RGBController_ThermaltakeRiingQuad.cpp 2024-08-16 11:31:51 -05:00
Adam Honse 1e3b6cae47 Fix possible loss of data warning in RGBController_ThermaltakeRiing.cpp 2024-08-16 11:30:37 -05:00
Adam Honse 5f1b3ba939 Fix type issue in SteelSeriesSenseiController.cpp 2024-08-16 11:09:57 -05:00
Adam Honse 8bf07f490e Fix wstring to string conversion warning in CMKeyboardV2Controller.cpp 2024-08-16 11:09:17 -05:00
qq b45b24b922 New Evision based keyboard 2024-08-15 20:57:43 +00:00
Adam Honse d554a18e8a Fix issues 2024-08-15 11:46:21 -05:00
Adam Honse 14f65a5728 Fix type conflicts and truncation warnings in SteelSeriesSiberiaController.cpp 2024-08-15 11:37:17 -05:00
Adam Honse 67b5803e63 Fix type conflicts and truncation warnings in SteelSeriesSenseiController.cpp 2024-08-15 11:35:39 -05:00
Adam Honse 2054cb566d Fix type conflicts and truncation warnings in SteelSeriesRivalController.cpp 2024-08-15 11:33:33 -05:00
Chris d3f30f3dc8 Added TU104 variant of Gigabyte RTX2060 8GB Gaming OC GPU
* Registered detector in GigabyteRGBFusionGPUControllerDetect.cpp
2024-08-15 18:34:22 +10:00
Adam Honse 6e66c6ff5e Fix possible loss of data warning in SteelSeriesApexTZoneController.cpp 2024-08-13 19:50:49 -05:00
Adam Honse 52a7412918 Fix possible loss of data warning in RoccatKoneAimoController.cpp 2024-08-13 19:49:53 -05:00
Adam Honse b88107664a Fix possible loss of data warnings in RGBController_RoccatKoneAimo.cpp 2024-08-13 19:49:01 -05:00
Adam Honse 83150696bf Fix possible loss of data warning in RGBController_RedSquareKeyroxTKLClassic.cpp 2024-08-13 19:45:34 -05:00
Adam Honse 15f7ba8b12 Fix possible loss of data warning in RGBController_Razer.cpp 2024-08-13 19:44:38 -05:00
Adam Honse fed58b3dc1 Fix possible loss of data warning in RGBController_MSIMysticLight64.cpp 2024-08-13 19:43:22 -05:00
Adam Honse 448e019702 Fix possible loss of data warning in RGBController_LogitechLightspeed.cpp 2024-08-13 19:42:10 -05:00
Adam Honse c7b6d18832 Fix possible loss of data warnings in RGBController_MSIGPU.cpp 2024-08-13 19:39:00 -05:00
Adam Honse 243ce886e1 Remove OpenRGB kernel patch 2024-08-13 19:34:54 -05:00
Chris M 31b752feed Avoid double free in SinowealthController destructor
* Non USE_HID_USAGE code path needs to avoid closing device twice
2024-08-14 00:07:55 +00:00
Thomas Boos dd91984b70 MSI boards added and some configs corrected 2024-08-14 00:06:58 +00:00
Chris M bd9b41e544 Removed redundant hid_close(dev) from inherited class
* Resolves #4274
2024-08-13 13:23:46 +00:00
crashniels 26e0cc545e Add support for the Wooting UwU RGB 2024-08-11 17:24:20 +02:00
LER0ever 27128373e2 Add Linux support for NVIDIA Founders Edition GPU Illumination Control 2024-08-09 06:07:19 +00:00
Adam Honse d778d470b1 Allow multiple operating systems to be specified in filename, i.e. _Windows_Linux.cpp 2024-08-09 00:16:52 -05:00
Adam Honse c35fd68c99 Fix possible loss of data warnings in SRGBmods controllers 2024-08-08 21:13:21 -05:00
Adam Honse 37a702416f Fix possible loss of data warnings in RoccatVulcanKeyboardController.cpp 2024-08-08 21:10:07 -05:00
Adam Honse 5a12e77b19 Fix possible loss of data warnings in RazerController.cpp 2024-08-08 21:06:31 -05:00
Adam Honse 2f3017fdfc Fix another possible loss of data warning in QMK controllers 2024-08-08 21:05:14 -05:00
Adam Honse e8bf3c35dc Fix type issues in QMK controllers 2024-08-08 20:54:20 -05:00
Adam Honse fb2b0aa8e1 Fix possible loss of data warning in RGBController_LogitechLightspeed.cpp 2024-08-08 20:32:35 -05:00
James Buren ffeaa033bc Fix output truncation warning in RazerController.cpp 2024-08-08 20:43:54 +00:00
James Buren e10b05654b Fix implicit fallthrough warning for RGBController_KingstonFuryDRAM.cpp 2024-08-08 11:29:17 -05:00
Adam Honse c6e315ff2a Fix wstring to string conversion warning in WootingTwoKeyboardController.cpp 2024-08-07 22:04:51 -05:00
Adam Honse 68709e91f9 Fix wstring to string conversion warning in WootingOneKeyboardController.cpp 2024-08-07 22:04:41 -05:00
Adam Honse 47af83e194 Fix wstring to string conversion warning in ThermaltakeRiingQuadController.cpp 2024-08-07 22:04:31 -05:00
Adam Honse 91e8fade99 Fix wstring to string conversion warning in RoccatKoneAimoController.cpp 2024-08-07 22:04:22 -05:00
Adam Honse c38e011924 Fix wstring to string conversion warning in LogitechLightspeedController.cpp 2024-08-07 22:04:11 -05:00
Adam Honse e84a9b5327 Fix wstring to string conversion warning in MSIMysticLight64Controller.cpp 2024-08-07 22:04:04 -05:00
Adam Honse 5ebd95b72a Fix wstring to string conversion warning in MSIMysticLight185Controller.cpp 2024-08-07 22:03:56 -05:00
Adam Honse e7d10a8582 Fix wstring to string conversion warning in MSIMysticLight162Controller.cpp 2024-08-07 22:03:49 -05:00
Adam Honse 8a272c07b7 Fix wstring to string conversion warning in MSIMysticLight112Controller.cpp 2024-08-07 22:03:38 -05:00
Adam Honse 445c8eade1 Fix signed/unsigned mismatch warning in RGBController_LogitechG915.cpp 2024-08-07 22:03:31 -05:00
Adam Honse da0f93e8b5 Fix truncation warning in LogitechG915Controller.cpp 2024-08-07 22:03:24 -05:00
Adam Honse 29c77edd37 Fix signed/unsigned mismatch warning in RGBController_LogitechG815.cpp 2024-08-07 22:03:17 -05:00
Adam Honse dae9cd2c3a Fix type in pair warning in RGBController_LenovoUSB.cpp 2024-08-07 22:03:10 -05:00
Adam Honse d8de91255f Remove unneeded argument for i386 build 2024-08-06 23:22:57 -05:00
Adam Honse ee9e1fbd2a Add -Wno-psabi to CXXFLAGS to silence armhf-specific ABI change warnings 2024-08-06 21:51:37 -05:00
Adam Honse d03701c58d Initial support for system-installed plugins in Linux 2024-08-06 18:22:17 -05:00
Adam Honse 806ababa05 Add Arch include and library paths for mbedtls2 library 2024-08-06 18:00:26 -05:00
liberodark 800c439431 Add MSI 7D98 2024-08-06 21:15:31 +02:00
Pieter Steyn cfd62f2b0f Add PID for Apex PRO TKL 2023. 2024-08-06 16:08:28 +00:00
2143 changed files with 48045 additions and 426540 deletions
+21
View File
@@ -0,0 +1,21 @@
name: Issue Opened
on:
issues:
types: [opened,reopened]
jobs:
issue_greeting:
runs-on: ubuntu-latest
permissions:
issues: write
steps:
- name: Greeting
run: gh issue comment "$NUMBER" --body "$BODY"
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GH_REPO: ${{ github.repository }}
NUMBER: ${{ github.event.issue.number }}
BODY: >
This Github repo is a mirror of the main repository on Gitlab.
For any new issue please refer to https://gitlab.com/CalcProgrammer1/OpenRGB/-/issues
+21
View File
@@ -0,0 +1,21 @@
name: PR Opened
on:
pull_request:
types: [opened,reopened]
jobs:
pr_greeting:
runs-on: ubuntu-latest
permissions:
pull-requests: write
steps:
- name: Greeting
run: gh pr comment "$NUMBER" --body "$BODY"
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GH_REPO: ${{ github.repository }}
NUMBER: ${{ github.event.pull_request.number }}
BODY: >
This Github repo is a mirror of the main repository on Gitlab.
Please fork https://gitlab.com/CalcProgrammer1/OpenRGB/ and raise the appropriate merge request on Gitlab.
+260 -186
View File
@@ -7,6 +7,22 @@
#-----------------------------------------------------------------------#
# OpenRGB GitLab CI Configuration #
#-----------------------------------------------------------------------#
.fork_local_runner_rules:
rules:
- if: $CI_PROJECT_PATH == "CalcProgrammer1/OpenRGB" || $CI_PIPELINE_SOURCE == "push"
when: on_success
.fork_gitlab_runner_rules:
rules:
- if: $CI_PROJECT_PATH != "CalcProgrammer1/OpenRGB" && $CI_PIPELINE_SOURCE == "push"
when: manual
allow_failure: true
.upstream_rules:
rules:
- if: '$CI_PROJECT_PATH == "CalcProgrammer1/OpenRGB"'
when: on_success
- !reference [.fork_gitlab_runner_rules, rules]
.shared_windows_runners:
tags:
@@ -17,21 +33,18 @@
stages:
- build
- test
- deploy
variables:
GIT_DEPTH: 0
before_script:
- echo "started by ${GITLAB_USER_NAME}"
#reusable templates
.ccache_init: &ccache_init
before_script:
- export QT_SELECT=qt5
- export APPIMAGE_EXTRACT_AND_RUN=1
#-----------------------------------------------------------------------#
# Supported Devices Build Target #
#-----------------------------------------------------------------------#
"Supported Devices":
<<: *ccache_init
image: registry.gitlab.com/openrgbdevelopers/openrgb-linux-ci-deb-builder:bookworm-amd64
tags:
- linux
@@ -49,17 +62,12 @@ before_script:
expire_in: 30 days
rules:
- if: '$CI_PROJECT_PATH == "CalcProgrammer1/OpenRGB"'
when: on_success
- if: $CI_PIPELINE_SOURCE == "push"
when: manual
allow_failure: true
- !reference [.upstream_rules, rules]
#-----------------------------------------------------------------------#
# Linux (AppImage) i386 Build Target #
#-----------------------------------------------------------------------#
"Linux i386 AppImage":
<<: *ccache_init
image: registry.gitlab.com/openrgbdevelopers/openrgb-linux-ci-deb-builder:bookworm-i386
tags:
- linux
@@ -78,21 +86,37 @@ before_script:
expire_in: 30 days
rules:
- if: '$CI_PROJECT_PATH == "CalcProgrammer1/OpenRGB"'
when: on_success
- if: $CI_PIPELINE_SOURCE == "push"
when: manual
allow_failure: true
- !reference [.upstream_rules, rules]
#-----------------------------------------------------------------------#
# Linux (AppImage) Qt6 i386 Build Target #
#-----------------------------------------------------------------------#
"Linux i386 AppImage Qt6":
image: registry.gitlab.com/openrgbdevelopers/openrgb-linux-ci-deb-builder:bookworm-i386
tags:
- linux
- i386
stage: build
script:
- export $(dpkg-architecture)
- ./scripts/build-appimage.sh qt6
artifacts:
name: "${CI_PROJECT_NAME}_Linux_i386_Qt6_${CI_COMMIT_SHORT_SHA}"
paths:
- OpenRGB-i386.AppImage
- 60-openrgb.rules
- README.md
expire_in: 30 days
rules:
- !reference [.upstream_rules, rules]
#-----------------------------------------------------------------------#
# Linux (AppImage) amd64 Build Target #
#-----------------------------------------------------------------------#
"Linux amd64 AppImage":
<<: *ccache_init
"Linux amd64 AppImage Base":
image: registry.gitlab.com/openrgbdevelopers/openrgb-linux-ci-deb-builder:bookworm-amd64
tags:
- linux
- amd64
stage: build
script:
- export $(dpkg-architecture)
@@ -106,11 +130,53 @@ before_script:
- README.md
expire_in: 30 days
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event" || $CI_PIPELINE_SOURCE == "push"
when: never
"Linux amd64 AppImage":
extends: "Linux amd64 AppImage Base"
rules:
- !reference [.fork_local_runner_rules, rules]
tags:
- linux
- amd64
"Linux amd64 AppImage (gitlab.com runner)":
extends: "Linux amd64 AppImage Base"
rules:
- !reference [.fork_gitlab_runner_rules, rules]
tags:
- "saas-linux-small-amd64"
#-----------------------------------------------------------------------#
# Linux (AppImage) Qt6 amd64 Build Target #
#-----------------------------------------------------------------------#
"Linux amd64 AppImage Qt6":
image: registry.gitlab.com/openrgbdevelopers/openrgb-linux-ci-deb-builder:bookworm-amd64
tags:
- linux
- amd64
stage: build
script:
- export $(dpkg-architecture)
- ./scripts/build-appimage.sh qt6
artifacts:
name: "${CI_PROJECT_NAME}_Linux_amd64_Qt6_${CI_COMMIT_SHORT_SHA}"
paths:
- OpenRGB-amd64.AppImage
- 60-openrgb.rules
- README.md
expire_in: 30 days
rules:
- !reference [.upstream_rules, rules]
#-----------------------------------------------------------------------#
# Linux (AppImage) armhf Build Target #
#-----------------------------------------------------------------------#
"Linux armhf AppImage":
<<: *ccache_init
image: registry.gitlab.com/openrgbdevelopers/openrgb-linux-ci-deb-builder:bookworm-armhf
tags:
- linux
@@ -129,17 +195,36 @@ before_script:
expire_in: 30 days
rules:
- if: '$CI_PROJECT_PATH == "CalcProgrammer1/OpenRGB"'
when: on_success
- if: $CI_PIPELINE_SOURCE == "push"
when: manual
allow_failure: true
- !reference [.upstream_rules, rules]
#-----------------------------------------------------------------------#
# Linux (AppImage) Qt6 armhf Build Target #
#-----------------------------------------------------------------------#
"Linux armhf AppImage Qt6":
image: registry.gitlab.com/openrgbdevelopers/openrgb-linux-ci-deb-builder:bookworm-armhf
tags:
- linux
- armhf
stage: build
script:
- export $(dpkg-architecture)
- ./scripts/build-appimage.sh qt6
artifacts:
name: "${CI_PROJECT_NAME}_Linux_armhf_Qt6_${CI_COMMIT_SHORT_SHA}"
paths:
- OpenRGB-armhf.AppImage
- 60-openrgb.rules
- README.md
expire_in: 30 days
rules:
- !reference [.upstream_rules, rules]
#-----------------------------------------------------------------------#
# Linux (AppImage) arm64 Build Target #
#-----------------------------------------------------------------------#
"Linux arm64 AppImage":
<<: *ccache_init
image: registry.gitlab.com/openrgbdevelopers/openrgb-linux-ci-deb-builder:bookworm-arm64
tags:
- linux
@@ -158,17 +243,36 @@ before_script:
expire_in: 30 days
rules:
- if: '$CI_PROJECT_PATH == "CalcProgrammer1/OpenRGB"'
when: on_success
- if: $CI_PIPELINE_SOURCE == "push"
when: manual
allow_failure: true
- !reference [.upstream_rules, rules]
#-----------------------------------------------------------------------#
# Linux (AppImage) Qt6 arm64 Build Target #
#-----------------------------------------------------------------------#
"Linux arm64 AppImage Qt6":
image: registry.gitlab.com/openrgbdevelopers/openrgb-linux-ci-deb-builder:bookworm-arm64
tags:
- linux
- arm64
stage: build
script:
- export $(dpkg-architecture)
- ./scripts/build-appimage.sh qt6
artifacts:
name: "${CI_PROJECT_NAME}_Linux_arm64_Qt6_${CI_COMMIT_SHORT_SHA}"
paths:
- OpenRGB-arm64.AppImage
- 60-openrgb.rules
- README.md
expire_in: 30 days
rules:
- !reference [.upstream_rules, rules]
#-----------------------------------------------------------------------#
# Linux (.deb) Debian Bookworm i386 Build Target #
#-----------------------------------------------------------------------#
"Linux i386 .deb (Debian Bookworm)":
<<: *ccache_init
image: registry.gitlab.com/openrgbdevelopers/openrgb-linux-ci-deb-builder:bookworm-i386
tags:
- linux
@@ -177,7 +281,7 @@ before_script:
script:
- ./scripts/build-package-files.sh debian/changelog
- dpkg-architecture -l
- dpkg-buildpackage --target-arch i386 -us -B
- dpkg-buildpackage -us -B
- rm -v ../openrgb-dbgsym*.deb
- mv -v ../openrgb*.deb ./
@@ -190,17 +294,12 @@ before_script:
expire_in: 30 days
rules:
- if: '$CI_PROJECT_PATH == "CalcProgrammer1/OpenRGB"'
when: on_success
- if: $CI_PIPELINE_SOURCE == "push"
when: manual
allow_failure: true
- !reference [.upstream_rules, rules]
#-----------------------------------------------------------------------#
# Linux (.deb) Debian Bookworm amd64 Build Target #
#-----------------------------------------------------------------------#
"Linux amd64 .deb (Debian Bookworm)":
<<: *ccache_init
image: registry.gitlab.com/openrgbdevelopers/openrgb-linux-ci-deb-builder:bookworm-amd64
tags:
- linux
@@ -222,17 +321,12 @@ before_script:
expire_in: 30 days
rules:
- if: '$CI_PROJECT_PATH == "CalcProgrammer1/OpenRGB"'
when: on_success
- if: $CI_PIPELINE_SOURCE == "push"
when: manual
allow_failure: true
- !reference [.upstream_rules, rules]
#-----------------------------------------------------------------------#
# Linux (.deb) Debian Bookworm armhf Build Target #
#-----------------------------------------------------------------------#
"Linux armhf .deb (Debian Bookworm)":
<<: *ccache_init
image: registry.gitlab.com/openrgbdevelopers/openrgb-linux-ci-deb-builder:bookworm-armhf
tags:
- linux
@@ -254,17 +348,12 @@ before_script:
expire_in: 30 days
rules:
- if: '$CI_PROJECT_PATH == "CalcProgrammer1/OpenRGB"'
when: on_success
- if: $CI_PIPELINE_SOURCE == "push"
when: manual
allow_failure: true
- !reference [.upstream_rules, rules]
#-----------------------------------------------------------------------#
# Linux (.deb) Debian Bookworm arm64 Build Target #
#-----------------------------------------------------------------------#
"Linux arm64 .deb (Debian Bookworm)":
<<: *ccache_init
image: registry.gitlab.com/openrgbdevelopers/openrgb-linux-ci-deb-builder:bookworm-arm64
tags:
- linux
@@ -286,11 +375,7 @@ before_script:
expire_in: 30 days
rules:
- if: '$CI_PROJECT_PATH == "CalcProgrammer1/OpenRGB"'
when: on_success
- if: $CI_PIPELINE_SOURCE == "push"
when: manual
allow_failure: true
- !reference [.upstream_rules, rules]
#-----------------------------------------------------------------------#
# Linux (.rpm, F40) 64-bit Build Target #
@@ -299,15 +384,12 @@ before_script:
image: fedora:40
stage: build
script:
- dnf install rpmdevtools dnf-plugins-core libcurl-devel qt5-qtbase-devel -y
- dnf install rpmdevtools dnf-plugins-core libcurl-devel qt5-qtbase-devel git -y
- rpmdev-setuptree
- ./scripts/build-package-files.sh fedora/OpenRGB.spec
- ls /root/
- cp fedora/OpenRGB.spec /root/rpmbuild/SPECS
- cp ../OpenRGB /root/rpmbuild/SOURCES/ -r
- cd /root/rpmbuild/SOURCES
- tar -cf OpenRGB.tar.gz OpenRGB/
- cd ..
- cp -rp . /root/rpmbuild/SOURCES/OpenRGB
- cd /root/rpmbuild
- dnf builddep SPECS/OpenRGB.spec -y
- rpmbuild -ba SPECS/OpenRGB.spec
- cd RPMS/x86_64/
@@ -321,11 +403,7 @@ before_script:
expire_in: 30 days
rules:
- if: '$CI_PROJECT_PATH == "CalcProgrammer1/OpenRGB"'
when: on_success
- if: $CI_PIPELINE_SOURCE == "push"
when: manual
allow_failure: true
- !reference [.upstream_rules, rules]
#-----------------------------------------------------------------------#
# Debian i386 Bookworm test #
@@ -414,61 +492,7 @@ before_script:
- .shared_windows_runners
stage: build
script:
- $esc = "$([char]27)"
- $count = 0
- function _unix_tmsec_ { [int64](([datetime]::UtcNow)-(get-date "1/1/1970")).TotalSeconds }
- function _fold_start_ { param( [string]$TEXT_TAG ) $t=_unix_tmsec_; $global:count += 1; Write-Host -NoNewLine "`r`n`r`nsection_start:${t}:sect_${count}`r${esc}[0K${esc}[33m${TEXT_TAG}${esc}[39m`r`n"; }
- function _fold_final_ { $t=_unix_tmsec_; Write-Host -NoNewLine "`r`n`r`nsection_end:${t}:sect_${count}`r${esc}[0K`r`n" ; }
- _fold_start_ 'configuring the msvc environment variables'
- Push-Location "C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Auxiliary/Build"
- '& cmd.exe /C "vcvarsall.bat x86 & set" | Foreach-Object { if ($_ -match "(.*?)=(.*)") { Set-Item -force -path "Env:\$($matches[1])" -value "$($matches[2])" } }'
- Pop-Location
- _fold_final_
- _fold_start_ 'downloading precompiled versions of qtbase, qttools (for windeployqt) and jom (for a more parallel nmake)'
- mkdir _qt
- mkdir _qt_download
- Push-Location _qt_download
- curl.exe -LJ -o qt-base.7z 'https://gitlab.com/OpenRGBDevelopers/openrgb-linux-ci-deb-builder/-/package_files/55610076/download'
- curl.exe -LJ -o qt-tools.7z 'https://gitlab.com/OpenRGBDevelopers/openrgb-linux-ci-deb-builder/-/package_files/55610097/download'
- curl.exe -LJ -o qt-jom.zip 'https://gitlab.com/OpenRGBDevelopers/openrgb-linux-ci-deb-builder/-/package_files/55610138/download'
- _fold_final_
- _fold_start_ 'extracting the downloaded qt binaries'
- 7z x qt-base.7z '-o../_qt' -y
- 7z x qt-tools.7z '-o../_qt' -y
- 7z x qt-jom.zip '-o../_qt' -y
- _fold_final_
- _fold_start_ 'turn the qt install from enterprise to foss; remove the licensing checks'
- ${qconfig-pri-folder} = '..\_qt\5.15.0\msvc2019\mkspecs\qconfig.pri'
- (Get-Content ${qconfig-pri-folder}).replace('QT_EDITION = Enterprise', 'QT_EDITION = OpenSource') | Set-Content ${qconfig-pri-folder}
- (Get-Content ${qconfig-pri-folder}).replace('QT_LICHECK = licheck.exe', '') | Set-Content ${qconfig-pri-folder}
- Pop-Location
- _fold_final_
- _fold_start_ 'run qmake and generate the msvc nmake makefile'
- mkdir _build; cd _build
- ..\_qt\5.15.0\msvc2019\bin\qmake ..\OpenRGB.pro
- _fold_final_
- _fold_start_ 'start the actual build with jom instead of nmake; for speed'
- ..\_qt\jom
- _fold_final_
- _fold_start_ 'run windeployqt to automatically copy the needed dll files'
- ..\_qt\5.15.0\msvc2019\bin\windeployqt --no-angle --no-translations --no-opengl-sw --no-system-d3d-compiler --no-compiler-runtime --no-webkit2 .\release\
- _fold_final_
- _fold_start_ 'Moving results for upload'
- mv release ../'OpenRGB Windows 32-bit'
- _fold_final_
# cache:
# key: same-key
# paths:
# - C:\vcpkg\installed\
- scripts\build-windows.bat 5.15.0 2019 32
artifacts:
name: "${CI_PROJECT_NAME}_Windows_32_${CI_COMMIT_SHORT_SHA}"
paths:
@@ -478,75 +502,37 @@ before_script:
expire_in: 30 days
rules:
- if: '$CI_PROJECT_PATH == "CalcProgrammer1/OpenRGB"'
when: on_success
- if: $CI_PIPELINE_SOURCE == "push"
when: manual
allow_failure: true
- !reference [.upstream_rules, rules]
#-----------------------------------------------------------------------#
# Windows (64-bit) Build Target #
# Windows (32-bit) Qt6 Build Target #
#-----------------------------------------------------------------------#
"Windows 64":
"Windows 32 Qt6":
extends:
- .shared_windows_runners
stage: build
script:
- $esc = "$([char]27)"
- $count = 0
- function _unix_tmsec_ { [int64](([datetime]::UtcNow)-(get-date "1/1/1970")).TotalSeconds }
- function _fold_start_ { param( [string]$TEXT_TAG ) $t=_unix_tmsec_; $global:count += 1; Write-Host -NoNewLine "`r`n`r`nsection_start:${t}:sect_${count}`r${esc}[0K${esc}[33m${TEXT_TAG}${esc}[39m`r`n"; }
- function _fold_final_ { $t=_unix_tmsec_; Write-Host -NoNewLine "`r`n`r`nsection_end:${t}:sect_${count}`r${esc}[0K`r`n" ; }
- scripts\build-windows.bat 6.8.3 2022 32
artifacts:
name: "${CI_PROJECT_NAME}_Windows_32_Qt6_${CI_COMMIT_SHORT_SHA}"
paths:
- 'OpenRGB Windows 32-bit'
exclude:
- 'OpenRGB Windows 32-bit\*.qm'
expire_in: 30 days
rules:
- !reference [.upstream_rules, rules]
- _fold_start_ 'configuring the msvc environment variables'
- Push-Location "C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Auxiliary/Build"
- '& cmd.exe /C "vcvarsall.bat x64 & set" | Foreach-Object { if ($_ -match "(.*?)=(.*)") { Set-Item -force -path "Env:\$($matches[1])" -value "$($matches[2])" } }'
- Pop-Location
- _fold_final_
- _fold_start_ 'downloading precompiled versions of qtbase, qttools (for windeployqt) and jom (for a more parallel nmake)'
- mkdir _qt
- mkdir _qt_download
- Push-Location _qt_download
- curl.exe -LJ -o qt-base.7z 'https://gitlab.com/OpenRGBDevelopers/openrgb-linux-ci-deb-builder/-/package_files/55610116/download'
- curl.exe -LJ -o qt-tools.7z 'https://gitlab.com/OpenRGBDevelopers/openrgb-linux-ci-deb-builder/-/package_files/55610131/download'
- curl.exe -LJ -o qt-jom.zip 'https://gitlab.com/OpenRGBDevelopers/openrgb-linux-ci-deb-builder/-/package_files/55610138/download'
- _fold_final_
- _fold_start_ 'extracting the downloaded qt binaries'
- 7z x qt-base.7z '-o../_qt' -y
- 7z x qt-tools.7z '-o../_qt' -y
- 7z x qt-jom.zip '-o../_qt' -y
- _fold_final_
- _fold_start_ 'turn the qt install from enterprise to foss; remove the licensing checks'
- ${qconfig-pri-folder} = '..\_qt\5.15.0\msvc2019_64\mkspecs\qconfig.pri'
- (Get-Content ${qconfig-pri-folder}).replace('QT_EDITION = Enterprise', 'QT_EDITION = OpenSource') | Set-Content ${qconfig-pri-folder}
- (Get-Content ${qconfig-pri-folder}).replace('QT_LICHECK = licheck.exe', '') | Set-Content ${qconfig-pri-folder}
- Pop-Location
- _fold_final_
- _fold_start_ 'run qmake and generate the msvc nmake makefile'
- mkdir _build; cd _build
- ..\_qt\5.15.0\msvc2019_64\bin\qmake ..\OpenRGB.pro
- _fold_final_
- _fold_start_ 'start the actual build with jom instead of nmake; for speed'
- ..\_qt\jom
- _fold_final_
- _fold_start_ 'run windeployqt to automatically copy the needed dll files'
- ..\_qt\5.15.0\msvc2019_64\bin\windeployqt --no-angle --no-translations --no-opengl-sw --no-system-d3d-compiler --no-compiler-runtime --no-webkit2 .\release\
- _fold_final_
- _fold_start_ 'Moving results for upload'
- mv release ../'OpenRGB Windows 64-bit'
- _fold_final_
# cache:
# key: same-key
# paths:
# - C:\vcpkg\installed\
#-----------------------------------------------------------------------#
# Windows (64-bit) Build Target #
#-----------------------------------------------------------------------#
"Windows 64 Base":
extends:
- .shared_windows_runners
stage: build
script:
- scripts\build-windows.bat 5.15.0 2019 64
artifacts:
name: "${CI_PROJECT_NAME}_Windows_64_${CI_COMMIT_SHORT_SHA}"
paths:
@@ -555,6 +541,67 @@ before_script:
- 'OpenRGB Windows 64-bit\*.qm'
expire_in: 30 days
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event" || $CI_PIPELINE_SOURCE == "push"
when: never
"Windows 64":
extends: "Windows 64 Base"
rules:
- !reference [.fork_local_runner_rules, rules]
"Windows 64 (gitlab.com runner)":
extends: "Windows 64 Base"
before_script:
- git clone https://gitlab.com/OpenRGBDevelopers/OpenRGB-Qt-Packages
- cd OpenRGB-Qt-Packages
- .\install-chocolatey.bat
- cd ..
rules:
- !reference [.fork_gitlab_runner_rules, rules]
tags:
- "saas-windows-medium-amd64"
#-----------------------------------------------------------------------#
# Windows (64-bit) Qt6 Build Target #
#-----------------------------------------------------------------------#
"Windows 64 Qt6 Base":
extends:
- .shared_windows_runners
stage: build
script:
- scripts\build-windows.bat 6.8.3 2022 64
artifacts:
name: "${CI_PROJECT_NAME}_Windows_64_Qt6_${CI_COMMIT_SHORT_SHA}"
paths:
- 'OpenRGB Windows 64-bit'
exclude:
- 'OpenRGB Windows 64-bit\*.qm'
expire_in: 30 days
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event" || $CI_PIPELINE_SOURCE == "push"
when: never
"Windows 64 Qt6":
extends: "Windows 64 Qt6 Base"
rules:
- !reference [.fork_local_runner_rules, rules]
"Windows 64 Qt6 (gitlab.com runner)":
extends: "Windows 64 Qt6 Base"
before_script:
- git clone https://gitlab.com/OpenRGBDevelopers/OpenRGB-Qt-Packages
- cd OpenRGB-Qt-Packages
- .\install-chocolatey.bat
- cd ..
rules:
- !reference [.fork_gitlab_runner_rules, rules]
tags:
- "saas-windows-medium-amd64"
#-----------------------------------------------------------------------#
# MacOS Build Target #
#-----------------------------------------------------------------------#
@@ -607,3 +654,30 @@ before_script:
- if: $CI_PIPELINE_SOURCE == "push"
when: manual
allow_failure: true
#-----------------------------------------------------------------------#
# Windows (64-bit) MSI Target #
#-----------------------------------------------------------------------#
"Windows 64 MSI":
image: registry.gitlab.com/openrgbdevelopers/openrgb-linux-ci-deb-builder:bookworm-i386
stage: deploy
tags:
- linux
- i386
script:
- ls -la
- ls -la "OpenRGB Windows 64-bit/"
- ./scripts/build-msi.sh
dependencies:
- "Windows 64"
needs:
- "Windows 64"
artifacts:
name: "${CI_PROJECT_NAME}_Windows_64_msi_${CI_COMMIT_SHORT_SHA}"
paths:
- OpenRGB_Windows_64.msi
expire_in: 30 days
rules:
- !reference [.upstream_rules, rules]
+2 -2
View File
@@ -23,9 +23,9 @@ Please add a link to the manufacturer's product page beneath this line
~"DeviceType::IDK" <!-- I Don't know -->
~"DeviceType::USB" <!-- The device connects to an internal header or external usb port -->
~"DeviceType::GPU::AMD" <!-- The device is an AMD GPU -->
~"DeviceType::GPU::NVidia" <!-- The device is a NVidia GPU -->
~"DeviceType::GPU::Nvidia" <!-- The device is a Nvidia GPU -->
~"DeviceType::SMBus" <!-- The device is connected to the SMBus eg. RAM -->
~"DeviceType::WMI" <!-- The device is controlled thru Windows Management Instrumentation -->
~"DeviceType::WMI" <!-- The device is controlled through Windows Management Instrumentation -->
<!-- Please delete any lines that are not relevant -->
+4 -4
View File
@@ -53,7 +53,7 @@ bool AutoStart::DisableAutoStart()
}
else
{
LOG_ERROR("Could not establish correct autostart file path.");
LOG_ERROR("[AutoStart] Could not establish correct autostart file path.");
}
return(success);
@@ -75,7 +75,7 @@ bool AutoStart::EnableAutoStart(AutoStartInfo autostart_info)
\*---------------------------------------------*/
if(!autostart_file_stream)
{
LOG_ERROR("Could not open %s for writing.", autostart_file.c_str());
LOG_ERROR("[AutoStart] Could not open %s for writing.", autostart_file.c_str());
success = false;
}
/*---------------------------------------------*\
@@ -89,13 +89,13 @@ bool AutoStart::EnableAutoStart(AutoStartInfo autostart_info)
if (!success)
{
LOG_ERROR("An error occurred writing the auto start file.");
LOG_ERROR("[AutoStart] An error occurred writing the auto start file.");
}
}
}
else
{
LOG_ERROR("Could not establish correct autostart file path.");
LOG_ERROR("[AutoStart] Could not establish correct autostart file path.");
}
return(success);
+4 -4
View File
@@ -53,7 +53,7 @@ bool AutoStart::DisableAutoStart()
}
else
{
LOG_ERROR("Could not establish correct autostart file path.");
LOG_ERROR("[AutoStart] Could not establish correct autostart file path.");
}
return(success);
@@ -76,7 +76,7 @@ bool AutoStart::EnableAutoStart(AutoStartInfo autostart_info)
\*---------------------------------------------*/
if(!autostart_file_stream)
{
LOG_ERROR("Could not open %s for writing.", autostart_file.c_str());
LOG_ERROR("[AutoStart] Could not open %s for writing.", autostart_file.c_str());
success = false;
}
/*---------------------------------------------*\
@@ -90,13 +90,13 @@ bool AutoStart::EnableAutoStart(AutoStartInfo autostart_info)
if (!success)
{
LOG_ERROR("An error occurred writing the auto start file.");
LOG_ERROR("[AutoStart] An error occurred writing the auto start file.");
}
}
}
else
{
LOG_ERROR("Could not establish correct autostart file path.");
LOG_ERROR("[AutoStart] Could not establish correct autostart file path.");
}
return(success);
+4 -4
View File
@@ -53,7 +53,7 @@ bool AutoStart::DisableAutoStart()
}
else
{
LOG_ERROR("Could not establish correct autostart file path.");
LOG_ERROR("[AutoStart] Could not establish correct autostart file path.");
}
return(success);
@@ -76,7 +76,7 @@ bool AutoStart::EnableAutoStart(AutoStartInfo autostart_info)
\*---------------------------------------------*/
if(!autostart_file_stream)
{
LOG_ERROR("Could not open %s for writing.", autostart_file.c_str());
LOG_ERROR("[AutoStart] Could not open %s for writing.", autostart_file.c_str());
success = false;
}
/*---------------------------------------------*\
@@ -90,13 +90,13 @@ bool AutoStart::EnableAutoStart(AutoStartInfo autostart_info)
if (!success)
{
LOG_ERROR("An error occurred writing the auto start file.");
LOG_ERROR("[AutoStart] An error occurred writing the auto start file.");
}
}
}
else
{
LOG_ERROR("Could not establish correct autostart file path.");
LOG_ERROR("[AutoStart] Could not establish correct autostart file path.");
}
return(success);
+3 -3
View File
@@ -46,13 +46,13 @@ bool AutoStart::DisableAutoStart()
if(!success)
{
LOG_ERROR("An error occurred removing the auto start file.");
LOG_ERROR("[AutoStart] An error occurred removing the auto start file.");
}
}
}
else
{
LOG_ERROR("Could not establish correct autostart file path.");
LOG_ERROR("[AutoStart] Could not establish correct autostart file path.");
}
return(success);
@@ -124,7 +124,7 @@ bool AutoStart::EnableAutoStart(AutoStartInfo autostart_info)
}
else
{
LOG_ERROR("Could not establish correct autostart file path.");
LOG_ERROR("[AutoStart] Could not establish correct autostart file path.");
}
return success;
+243
View File
@@ -0,0 +1,243 @@
#-----------------------------------------------------------#
# CMakeLists.txt #
# #
# CMake configuration for building OpenRGB #
# #
# Adam Honse (CalcProgrammer1) 24 May 2025 #
# #
# This file is part of the OpenRGB project #
# SPDX-License-Identifier: GPL-2.0-only #
#-----------------------------------------------------------#
cmake_minimum_required(VERSION 3.16)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/modules")
#-----------------------------------------------------------#
# Project Definition #
#-----------------------------------------------------------#
project(OpenRGB LANGUAGES CXX)
#-----------------------------------------------------------#
# Executable #
#-----------------------------------------------------------#
add_executable(OpenRGB)
#-----------------------------------------------------------#
# CMake Configuration #
#-----------------------------------------------------------#
set(CMAKE_CXX_STANDARD 17 )
set(CMAKE_CXX_STANDARD_REQUIRED ON )
set(CMAKE_AUTOMOC ON )
set(CMAKE_AUTORCC ON )
set(CMAKE_AUTOUIC ON )
set(CMAKE_INCLUDE_CURRENT_DIR ON )
#-----------------------------------------------------------#
# Qt Configuration #
#-----------------------------------------------------------#
find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
qt_standard_project_setup()
#-----------------------------------------------------------#
# Version #
#-----------------------------------------------------------#
set(MAJOR "0" )
set(MINOR "9" )
set(SUFFIX "git" )
#-----------------------------------------------------------#
# Git Information #
#-----------------------------------------------------------#
set(LASTTAG "release_${MAJOR}.${MINOR}" )
execute_process(COMMAND git rev-parse --short=7 HEAD
OUTPUT_VARIABLE SHORTHASH
OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(COMMAND git rev-list --count ${LASTTAG}..HEAD
OUTPUT_VARIABLE COMMITS
OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(COMMAND sh ${CMAKE_SOURCE_DIR}/scripts/git-get-branch.sh
OUTPUT_VARIABLE GITBRANCH
OUTPUT_STRIP_TRAILING_WHITESPACE)
#-----------------------------------------------------------#
# Version Strings #
#-----------------------------------------------------------#
set(VERSION_NUM "${MAJOR}.${MINOR}.${COMMITS}" )
set(VERSION_STR "${MAJOR}.${MINOR}" )
set(VERSION_DEB ${VERSION_NUM} )
set(VERSION_WIX ${VERSION_NUM} )
set(VERSION_AUR ${VERSION_NUM} )
set(VERSION_RPM ${VERSION_NUM} )
#-----------------------------------------------------------#
# If suffix is "git", use package-specific git versioning #
# Otherwise, append suffix if it is not empty #
#-----------------------------------------------------------#
if("${SUFFIX}" STREQUAL "git")
set(VERSION_STR "${VERSION_STR}+ (${SUFFIX}${COMMITS})" )
set(VERSION_DEB "${VERSION_DEB}~git${SHORTHASH}" )
set(VERSION_AUR "${VERSION_AUR}.g${SHORTHASH}" )
set(VERSION_RPM "${VERSION_RPM}^git${SHORTHASH}" )
elseif(NOT "${SUFFIX}" STREQUAL "")
set(VERSION_STR "${VERSION_STR}+ (${SUFFIX})" )
set(VERSION_DEB "${VERSION_DEB}~${SUFFIX}" )
set(VERSION_AUR "${VERSION_AUR}.${SUFFIX}" )
set(VERSION_RPM "${VERSION_RPM}^${SUFFIX}" )
endif()
#-----------------------------------------------------------#
# Print build configuration information #
#-----------------------------------------------------------#
message(STATUS "OpenRGB ${VERSION_STR} CMake Build" )
message(STATUS "-------------------------------------------")
message(STATUS " Last release tag: ${LASTTAG}" )
message(STATUS " Shorthash: ${SHORTHASH}" )
message(STATUS " Commits since release: ${COMMITS}" )
message(STATUS " Git branch: ${GITBRANCH}" )
message(STATUS " Version: Main: ${VERSION_STR}" )
message(STATUS " Windows: ${VERSION_WIX}" )
message(STATUS " Debian: ${VERSION_DEB}" )
message(STATUS " Arch (AUR): ${VERSION_AUR}" )
message(STATUS " Fedora: ${VERSION_RPM}" )
#-----------------------------------------------------------#
# Build list of controller headers, include directories, #
# and source files #
#-----------------------------------------------------------#
file(GLOB_RECURSE children LIST_DIRECTORIES true
"${CMAKE_SOURCE_DIR}/Controllers/*" )
foreach(child ${children})
if(IS_DIRECTORY ${curdir}/${child})
list(APPEND CONTROLLER_INC ${child})
endif()
endforeach()
file(GLOB_RECURSE CONTROLLER_H
"${CMAKE_SOURCE_DIR}/Controllers/*.h" )
file(GLOB_RECURSE CONTROLLER_CPP
"${CMAKE_SOURCE_DIR}/Controllers/*.cpp" )
#-----------------------------------------------------------#
# Remove OS-specific files from the overall controller #
# headers and sources lists. The suffixes _Windows, _Linux,#
# _FreeBSD, and _MacOS are usable to denote that a file #
# only applies to one or more OSes. The suffixes may be #
# combined such as <file>_Windows_Linux.cpp. #
#-----------------------------------------------------------#
file(GLOB_RECURSE CONTROLLER_H_WINDOWS
"${CMAKE_SOURCE_DIR}/Controllers/*_Windows*.h" )
file(GLOB_RECURSE CONTROLLER_CPP_WINDOWS
"${CMAKE_SOURCE_DIR}/Controllers/*_Windows*.cpp" )
file(GLOB_RECURSE CONTROLLER_H_LINUX
"${CMAKE_SOURCE_DIR}/Controllers/*_Linux*.h" )
file(GLOB_RECURSE CONTROLLER_CPP_LINUX
"${CMAKE_SOURCE_DIR}/Controllers/*_Linux*.cpp" )
file(GLOB_RECURSE CONTROLLER_H_MACOS
"${CMAKE_SOURCE_DIR}/Controllers/*_MacOS*.h" )
file(GLOB_RECURSE CONTROLLER_CPP_MACOS
"${CMAKE_SOURCE_DIR}/Controllers/*_MacOS*.cpp" )
file(GLOB_RECURSE CONTROLLER_H_FREEBSD
"${CMAKE_SOURCE_DIR}/Controllers/*_FreeBSD*.h" )
file(GLOB_RECURSE CONTROLLER_CPP_FREEBSD
"${CMAKE_SOURCE_DIR}/Controllers/*_FreeBSD*.cpp" )
list(REMOVE_ITEM CONTROLLER_H ${CONTROLLER_H_WINDOWS} )
list(REMOVE_ITEM CONTROLLER_CPP ${CONTROLLER_CPP_WINDOWS} )
list(REMOVE_ITEM CONTROLLER_H ${CONTROLLER_H_LINUX} )
list(REMOVE_ITEM CONTROLLER_CPP ${CONTROLLER_CPP_LINUX} )
list(REMOVE_ITEM CONTROLLER_H ${CONTROLLER_H_MACOS} )
list(REMOVE_ITEM CONTROLLER_CPP ${CONTROLLER_CPP_MACOS} )
list(REMOVE_ITEM CONTROLLER_H ${CONTROLLER_H_FREEBSD} )
list(REMOVE_ITEM CONTROLLER_CPP ${CONTROLLER_CPP_FREEBSD} )
target_sources(OpenRGB PRIVATE ${CONTROLLER_CPP} )
target_include_directories(OpenRGB PRIVATE ${CONTROLLER_INC})
target_include_directories(OpenRGB PRIVATE ${CMAKE_SOURCE_DIR}/AutoStart)
target_include_directories(OpenRGB PRIVATE ${CMAKE_SOURCE_DIR}/dmiinfo)
target_sources(OpenRGB PRIVATE ${CMAKE_SOURCE_DIR}/dmiinfo/dmiinfo.cpp)
target_include_directories(OpenRGB PRIVATE ${CMAKE_SOURCE_DIR}/hidapi_wrapper)
target_include_directories(OpenRGB PRIVATE ${CMAKE_SOURCE_DIR}/i2c_smbus)
target_include_directories(OpenRGB PRIVATE ${CMAKE_SOURCE_DIR}/i2c_tools)
target_sources(OpenRGB PRIVATE ${CMAKE_SOURCE_DIR}/i2c_tools/i2c_tools.cpp)
target_include_directories(OpenRGB PRIVATE ${CMAKE_SOURCE_DIR}/interop)
target_include_directories(OpenRGB PRIVATE ${CMAKE_SOURCE_DIR}/KeyboardLayoutManager)
target_include_directories(OpenRGB PRIVATE ${CMAKE_SOURCE_DIR}/net_port)
target_include_directories(OpenRGB PRIVATE ${CMAKE_SOURCE_DIR}/pci_ids)
target_include_directories(OpenRGB PRIVATE ${CMAKE_SOURCE_DIR}/qt)
target_include_directories(OpenRGB PRIVATE ${CMAKE_SOURCE_DIR}/RGBController)
target_include_directories(OpenRGB PRIVATE ${CMAKE_SOURCE_DIR}/scsiapi)
target_include_directories(OpenRGB PRIVATE ${CMAKE_SOURCE_DIR}/serial_port)
target_include_directories(OpenRGB PRIVATE ${CMAKE_SOURCE_DIR}/SPDAccessor)
target_include_directories(OpenRGB PRIVATE ${CMAKE_SOURCE_DIR}/super_io)
target_include_directories(OpenRGB PRIVATE ${CMAKE_SOURCE_DIR}/SuspendResume)
target_include_directories(OpenRGB PRIVATE ${CMAKE_SOURCE_DIR}/wmi)
#-----------------------------------------------------------#
# CRCpp #
#-----------------------------------------------------------#
set(CRCPP_DIR ${CMAKE_SOURCE_DIR}/dependencies/CRCpp)
add_library(CRCpp INTERFACE)
target_include_directories(CRCpp INTERFACE ${CRCPP_DIR}/)
target_link_libraries(OpenRGB CRCpp)
#-----------------------------------------------------------#
# hidapi #
#-----------------------------------------------------------#
find_package(hidapi REQUIRED)
target_link_libraries(OpenRGB hidapi::hidapi)
#-----------------------------------------------------------#
# httplib #
#-----------------------------------------------------------#
set(HTTPLIB_DIR ${CMAKE_SOURCE_DIR}/dependencies/httplib)
add_library(httplib INTERFACE)
target_include_directories(httplib INTERFACE ${HTTPLIB_DIR}/)
target_link_libraries(OpenRGB httplib)
#-----------------------------------------------------------#
# libe131 #
#-----------------------------------------------------------#
set(LIBE131_DIR ${CMAKE_SOURCE_DIR}/dependencies/libe131)
add_library(libe131 STATIC)
target_include_directories(libe131 PUBLIC ${LIBE131_DIR}/src)
target_sources(libe131 PRIVATE ${LIBE131_DIR}/src/e131.c)
target_link_libraries(OpenRGB libe131)
#-----------------------------------------------------------#
# libusb #
#-----------------------------------------------------------#
find_package(PkgConfig REQUIRED)
pkg_check_modules(libusb-1.0 REQUIRED IMPORTED_TARGET GLOBAL libusb-1.0)
target_link_libraries(OpenRGB PkgConfig::libusb-1.0)
#-----------------------------------------------------------#
# hueplusplus #
#-----------------------------------------------------------#
add_subdirectory(${CMAKE_SOURCE_DIR}/dependencies/hueplusplus-1.2.0)
target_link_libraries(OpenRGB hueplusplusstatic)
#-----------------------------------------------------------#
# nlohmann_json #
#-----------------------------------------------------------#
find_package(nlohmann_json REQUIRED)
target_link_libraries(OpenRGB nlohmann_json)
@@ -15,7 +15,6 @@
\*-----------------------------------------------------*/
#include <hidapi.h>
#include "Detector.h"
#include "RGBController.h"
/*-----------------------------------------------------*\
| A4 Tech specific includes |
@@ -56,7 +55,9 @@ void DetectBloodyB820R(hid_device_info* info, const std::string& name)
}
}
REGISTER_HID_DETECTOR_IPU("Bloody W60 Pro", DetectA4TechMouseControllers, A4_TECH_VID, BLOODY_W60_PRO_PID, 2, 0xFF33, 0x0529);
REGISTER_HID_DETECTOR_IPU("Bloody W90 Max", DetectA4TechMouseControllers, A4_TECH_VID, BLOODY_W90_MAX_PID, 2, 0xFF33, 0x053D);
REGISTER_HID_DETECTOR_IPU("Bloody MP 50RS", DetectA4TechMouseControllers, A4_TECH_VID, BLOODY_MP_50RS_PID, 2, 0xFFF2, 0x6009);
REGISTER_HID_DETECTOR_IPU("A4Tech Bloody B820R", DetectBloodyB820R, A4_TECH_VID, BLOODY_B820R_PID, 2, 0xFF52, 0x0210);
REGISTER_HID_DETECTOR_IPU("Bloody W60 Pro", DetectA4TechMouseControllers, A4_TECH_VID, BLOODY_W60_PRO_PID, 2, 0xFF33, 0x0529);
REGISTER_HID_DETECTOR_IPU("Bloody W70 Max", DetectA4TechMouseControllers, A4_TECH_VID, BLOODY_W70_MAX_PID, 2, 0xFF33, 0x0518);
REGISTER_HID_DETECTOR_IPU("Bloody W90 Max", DetectA4TechMouseControllers, A4_TECH_VID, BLOODY_W90_MAX_PID, 2, 0xFF33, 0x053D);
REGISTER_HID_DETECTOR_IPU("Bloody W90 Pro", DetectA4TechMouseControllers, A4_TECH_VID, BLOODY_W90_PRO_PID, 2, 0xFF33, 0x054D);
REGISTER_HID_DETECTOR_IPU("Bloody MP 50RS", DetectA4TechMouseControllers, A4_TECH_VID, BLOODY_MP_50RS_PID, 2, 0xFFF2, 0x6009);
REGISTER_HID_DETECTOR_IPU("Bloody B820R", DetectBloodyB820R, A4_TECH_VID, BLOODY_B820R_PID, 2, 0xFF52, 0x0210);
@@ -19,7 +19,9 @@
| Mouse product IDs |
\*-----------------------------------------------------*/
#define BLOODY_W60_PRO_PID 0x37EA
#define BLOODY_W70_MAX_PID 0x79EF
#define BLOODY_W90_MAX_PID 0x3666
#define BLOODY_W90_PRO_PID 0x39B6
/*-----------------------------------------------------*\
| Mousemat product IDs |
@@ -109,7 +109,9 @@ void RGBController_BloodyMouse::SetupZones()
case BLOODY_W60_PRO_PID:
layout = w60_pro;
break;
case BLOODY_W70_MAX_PID:
case BLOODY_W90_MAX_PID:
case BLOODY_W90_PRO_PID:
layout = w90_max;
break;
case BLOODY_MP_50RS_PID:
@@ -12,7 +12,6 @@
#include <hidapi.h>
#include "Detector.h"
#include "AMDWraithPrismController.h"
#include "RGBController.h"
#include "RGBController_AMDWraithPrism.h"
/*---------------------------------------------------------*\
@@ -11,7 +11,6 @@
#include "Detector.h"
#include "AOCKeyboardController.h"
#include "RGBController.h"
#include "RGBController_AOCKeyboard.h"
/*-----------------------------------------------------*\
@@ -35,10 +35,10 @@ layout_values aoc_keyboard_offset_values =
75, 76, 91, 62, 48, 64, 50, 65, 66, 67, 97, 68, 84, 70, 59, 74, 89, 58, 73, 88, 103,
/* TAB Q W E R T Y U I O P [ ] \ DEL END PGDN NP7 NP8 NP9 NP+ */
60, 61, 47, 78, 33, 49, 35, 80, 51, 52, 53, 69, 99, 25, 44, 29, 14, 43, 28, 13, 102,
/* CPLK A S D F G H J K L ; " ENTR NP4 NP5 NP6 */
45, 46, 32, 93, 18, 34, 20, 95, 36, 37, 38, 54, 10, 57, 72, 87,
/* LSFT Z X C V B N M , . / RSFT ARWU NP1 NP2 NP3 NPEN */
30, 31, 17, 2, 3, 19, 5, 6, 21, 22, 23, 39, 11, 42, 27, 12, 101,
/* CPLK A S D F G H J K L ; " # ENTR NP4 NP5 NP6 */
45, 46, 32, 93, 18, 34, 20, 95, 36, 37, 38, 54, 0, 10, 57, 72, 87,
/* LSFT \ Z X C V B N M , . / RSFT ARWU NP1 NP2 NP3 NPEN */
30, 0, 31, 17, 2, 3, 19, 5, 6, 21, 22, 23, 39, 11, 42, 27, 12, 101,
/* LCTL LWIN LALT SPC RALT RFNC RMNU RCTL ARWL ARWD ARWR NP0 NP. */
15, 0, 1, 4, 7, 8, 24, 9, 26, 41, 56, 71, 86
},
@@ -11,7 +11,6 @@
#include "Detector.h"
#include "AOCMouseController.h"
#include "RGBController.h"
#include "RGBController_AOCMouse.h"
/*-----------------------------------------------------*\
@@ -11,7 +11,6 @@
#include "Detector.h"
#include "AOCMousematController.h"
#include "RGBController.h"
#include "RGBController_AOCMousemat.h"
/*-----------------------------------------------------*\
@@ -11,7 +11,6 @@
\*---------------------------------------------------------*/
#include <cstring>
#include <stdio.h>
#include "RGBController.h"
#include "ResourceManager.h"
#include "SettingsManager.h"
@@ -10,16 +10,10 @@
| SPDX-License-Identifier: GPL-2.0-only |
\*---------------------------------------------------------*/
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include <hidapi.h>
#include "Detector.h"
#include "ASRockPolychromeUSBController.h"
#include "RGBController.h"
#include "RGBController_ASRockPolychromeUSB.h"
#include "i2c_smbus.h"
#include "pci_ids.h"
/*---------------------------------------------------------*\
| ASRock vendor ID |
@@ -10,15 +10,12 @@
| SPDX-License-Identifier: GPL-2.0-only |
\*---------------------------------------------------------*/
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include "Detector.h"
#include "ASRockASRRGBSMBusController.h"
#include "ASRockPolychromeV1SMBusController.h"
#include "ASRockPolychromeV2SMBusController.h"
#include "LogManager.h"
#include "RGBController.h"
#include "RGBController_ASRockASRRGBSMBus.h"
#include "RGBController_ASRockPolychromeV1SMBus.h"
#include "RGBController_ASRockPolychromeV2SMBus.h"
@@ -31,7 +31,8 @@ static const std::map<alienware_platform_id, uint8_t> zone_quirks_table =
{
{ 0x0C01, 4 }, // Dell G5 SE 5505
{ 0x0A01, 16 }, // Dell G7 15 7500
{ 0x0E03, 4 } // Dell G15 5511
{ 0x0E03, 4 }, // Dell G15 5511
{ 0x0E0A, 4 } // Dell G15 5530
};
@@ -47,7 +48,8 @@ static const std::map<alienware_platform_id, std::vector<const char*>> zone_name
"Light Bar 4", "Light Bar 5", "Light Bar 6",
"Light Bar 7", "Light Bar 8", "Light Bar 9",
"Light Bar 10", "Light Bar 11", "Light Bar 12" } },
{ 0x0E03, { "Left", "Middle", "Right", "Numpad" } }
{ 0x0E03, { "Left", "Middle", "Right", "Numpad" } },
{ 0x0E0A, { "Left", "Middle", "Right", "Numpad" } }
};
static void SendHIDReport(hid_device *dev, const unsigned char* usb_buf, size_t usb_buf_size)
@@ -97,6 +99,11 @@ AlienwareController::AlienwareController(hid_device* dev_handle, const hid_devic
report = Report(ALIENWARE_COMMAND_REPORT_CONFIG);
alienware_platform_id platform_id = report.data[4] << 8 | report.data[5];
/*-----------------------------------------------------*\
| Check if the device reports the wrong number of zones |
\*-----------------------------------------------------*/
unsigned number_of_zones = zone_quirks_table.count(platform_id) ? zone_quirks_table.at(platform_id) : report.data[6];
/*-----------------------------------------------------*\
| Get firmware version |
\*-----------------------------------------------------*/
@@ -107,11 +114,6 @@ AlienwareController::AlienwareController(hid_device* dev_handle, const hid_devic
fw_string << static_cast<unsigned>(report.data[4]) << '.' << static_cast<unsigned>(report.data[5]) << '.' << static_cast<unsigned>(report.data[6]);
version = fw_string.str();
/*-----------------------------------------------------*\
| Check if the device reports the wrong number of zones |
\*-----------------------------------------------------*/
unsigned number_of_zones = zone_quirks_table.count(platform_id) ? zone_quirks_table.at(platform_id) : report.data[6];
/*-----------------------------------------------------*\
| Initialize Alienware zones |
\*-----------------------------------------------------*/
@@ -9,7 +9,6 @@
#include "Detector.h"
#include "AlienwareController.h"
#include "RGBController.h"
#include "RGBController_Alienware.h"
/*---------------------------------------------------------*\
@@ -20,7 +19,8 @@
/*---------------------------------------------------------*\
| Alienware product ID |
\*---------------------------------------------------------*/
#define ALIENWARE_G_SERIES_PID 0x0550
#define ALIENWARE_G_SERIES_PID1 0x0550
#define ALIENWARE_G_SERIES_PID2 0x0551
void DetectAlienwareControllers(hid_device_info* info, const std::string& name)
{
@@ -35,4 +35,5 @@ void DetectAlienwareControllers(hid_device_info* info, const std::string& name)
}
}
REGISTER_HID_DETECTOR("Dell G Series LED Controller", DetectAlienwareControllers, ALIENWARE_VID, ALIENWARE_G_SERIES_PID);
REGISTER_HID_DETECTOR("Dell G Series LED Controller", DetectAlienwareControllers, ALIENWARE_VID, ALIENWARE_G_SERIES_PID1);
REGISTER_HID_DETECTOR("Dell G Series LED Controller", DetectAlienwareControllers, ALIENWARE_VID, ALIENWARE_G_SERIES_PID2);
@@ -11,7 +11,6 @@
#include "Detector.h"
#include "AlienwareAW510KController.h"
#include "AlienwareAW410KController.h"
#include "RGBController.h"
#include "RGBController_AlienwareAW510K.h"
#include "RGBController_AlienwareAW410K.h"
@@ -0,0 +1,183 @@
/*---------------------------------------------------------*\
| AlienwareAW3423DWFController.cpp |
| |
| Driver for the Alienware AW3423DWF monitor |
| |
| Ferréol DUBOIS COLI (Fefe_du_973) 23 Jan 2025 |
| |
| This file is part of the OpenRGB project |
| SPDX-License-Identifier: GPL-2.0-only |
\*---------------------------------------------------------*/
#include <bitset>
#include <chrono>
#include <cstring>
#include <thread>
#include "AlienwareAW3423DWFController.h"
#include "StringUtils.h"
AlienwareAW3423DWFController::AlienwareAW3423DWFController(hid_device *dev_handle, const char *path) : dev(dev_handle), location(path){}
void AlienwareAW3423DWFController::SendControlPacket(const unsigned char *data, size_t length)
{
unsigned char buffer[256] = {0x00};
memcpy(buffer + 1, data, length);
hid_write(dev, buffer, length + 1);
}
std::vector<unsigned char> AlienwareAW3423DWFController::GetReportResponse()
{
uint8_t buffer[193];
memset(buffer, 0, 193);
hid_get_input_report(dev, buffer, 193);
return std::vector<unsigned char>(buffer + 1, buffer + 18);
}
void AlienwareAW3423DWFController::PerformLogin()
{
unsigned char init_packet[64] =
{
0x40, 0xE1, 0x01
};
SendControlPacket(init_packet, 4);
std::vector<unsigned char> response = GetReportResponse();
std::vector<unsigned char> key = GenerateKey(response);
unsigned char login_packet[192] = {0x00};
login_packet[0] = 0x40;
login_packet[1] = 0xE1;
login_packet[2] = 0x02;
memcpy(login_packet + 64, key.data(), key.size());
SendControlPacket(login_packet, 192);
}
void AlienwareAW3423DWFController::SendColor(unsigned char led_id, unsigned char r, unsigned char g, unsigned char b)
{
unsigned char led_id_2 = (led_id == 0x01) ? 0xf6 : (led_id == 0x02) ? 0xf5
: (led_id == 0x08) ? 0xff
: 0xfc;
PerformLogin();
unsigned char color_packet[192] = {0x00};
color_packet[0] = 0x40;
color_packet[1] = 0xC6;
color_packet[6] = 0x0A;
color_packet[8] = 0x6E;
color_packet[10] = 0x82;
color_packet[64] = 0x51;
color_packet[65] = 0x87;
color_packet[66] = 0xD0;
color_packet[67] = 0x04;
color_packet[68] = led_id;
color_packet[69] = r;
color_packet[70] = g;
color_packet[71] = b;
color_packet[72] = 0x64;
color_packet[73] = led_id_2;
SendControlPacket(color_packet, 192);
std::this_thread::sleep_for(std::chrono::milliseconds(200));
}
std::vector<unsigned char> AlienwareAW3423DWFController::GenerateKey(
const std::vector<unsigned char> &response)
{
std::vector<unsigned char> syn_key(8, 0);
const std::vector<unsigned char> oem_key = {
0xf5, 0x3f, 0xc1, 0x39, 0x44, 0x3a, 0x31, 0x79, 0x0d, 0xb1, 0x82, 0x76
};
size_t sk_idx = 0, ok_idx = 0;
while(ok_idx < oem_key.size() && sk_idx < 8)
{
unsigned char ok_sub_len = (oem_key[ok_idx] & 1) + ((oem_key[ok_idx] & 0x10) >> 4);
for(unsigned int i = 0; i < ok_sub_len && sk_idx < 8; i++)
{
syn_key[sk_idx] = oem_key[ok_idx + 1] ^ oem_key[ok_idx];
ok_idx++;
sk_idx++;
}
ok_idx++;
}
std::vector<unsigned char> out_buffer;
uint16_t v15 = static_cast<uint16_t>(response[15]) |
(static_cast<uint16_t>(response[0]) << 8);
bool parity_odd = (std::bitset<16>(v15).count() % 2 != 0);
if(parity_odd)
{
size_t end = std::min<size_t>(8, response.size());
out_buffer = std::vector<unsigned char>(response.begin(), response.begin() + end);
if(response.size() > 14)
{
unsigned char idx = response[14] & 0x07;
if((idx + 8) < response.size())
{
out_buffer[idx] ^= response[idx + 8];
}
}
}
else
{
size_t start = std::min<size_t>(8, response.size());
size_t end = std::min<size_t>(start + 8, response.size());
out_buffer = std::vector<unsigned char>(response.begin() + start, response.begin() + end);
if(response.size() > 6)
{
unsigned char idx = response[6] & 0x07;
if(idx < response.size())
{
out_buffer[idx] ^= response[idx];
}
}
}
for(size_t i = 0; i < 8 && i < out_buffer.size(); i++)
{
syn_key[i] ^= out_buffer[i];
}
return syn_key;
}
AlienwareAW3423DWFController::~AlienwareAW3423DWFController()
{
if(dev)
{
hid_close(dev);
dev = nullptr;
}
}
std::string AlienwareAW3423DWFController::GetLocation()
{
return "HID: " + location;
}
std::string AlienwareAW3423DWFController::GetSerialString()
{
wchar_t serial[256];
if(hid_get_serial_number_string(dev, serial, 256) >= 0)
{
std::wstring ws(serial);
return StringUtils::wstring_to_string(ws);
}
return "";
}
@@ -0,0 +1,40 @@
/*---------------------------------------------------------*\
| AlienwareAW3423DWFController.h |
| |
| Driver for the Alienware AW3423DWF monitor |
| |
| Ferréol DUBOIS COLI (Fefe_du_973) 23 Jan 2025 |
| |
| This file is part of the OpenRGB project |
| SPDX-License-Identifier: GPL-2.0-only |
\*---------------------------------------------------------*/
#pragma once
#include <hidapi.h>
#include <vector>
#include <string>
class AlienwareAW3423DWFController
{
public:
AlienwareAW3423DWFController(hid_device* dev_handle, const char* path);
~AlienwareAW3423DWFController();
std::string GetLocation();
std::string GetSerialString();
void SendColor(unsigned char led_id, unsigned char r, unsigned char g, unsigned char b);
private:
hid_device* dev;
std::string location;
unsigned char endpoint_out = 0x02;
unsigned char endpoint_in = 0x81;
static const std::vector<std::vector<unsigned char>> OEM_KEYS;
void PerformLogin();
std::vector<unsigned char> GenerateKey(const std::vector<unsigned char>& response);
void SendControlPacket(const unsigned char* data, size_t length);
std::vector<unsigned char> GetReportResponse();
};
@@ -0,0 +1,136 @@
/*---------------------------------------------------------*\
| AlienwareMonitorController.cpp |
| |
| Detector for Alienware monitors |
| |
| Adam Honse (CalcProgrammer1) 08 May 2025 |
| |
| This file is part of the OpenRGB project |
| SPDX-License-Identifier: GPL-2.0-only |
\*---------------------------------------------------------*/
#include <chrono>
#include <cstring>
#include <thread>
#include "AlienwareMonitorController.h"
AlienwareMonitorController::AlienwareMonitorController(hid_device *dev_handle, const char *path)
{
dev = dev_handle;
location = path;
Initialize();
}
AlienwareMonitorController::~AlienwareMonitorController()
{
hid_close(dev);
}
std::string AlienwareMonitorController::GetLocation()
{
return("HID: " + location);
}
std::string AlienwareMonitorController::GetSerialString()
{
return("");
}
void fillInChecksum(unsigned char *packet)
{
unsigned char checksum = 110;
for(unsigned int index = 5; index <= 13; index++)
{
checksum ^= packet[index];
}
packet[14] = checksum;
}
void AlienwareMonitorController::SendColor(unsigned char led_id, unsigned char r, unsigned char g, unsigned char b)
{
unsigned char packet[65];
memset(packet, 0xFF, sizeof(packet));
packet[1] = 0x92;
packet[2] = 0x37;
packet[3] = 0x0a;
packet[4] = 0x00;
packet[5] = 0x51;
packet[6] = 0x87;
packet[7] = 0xd0;
packet[8] = 0x04;
packet[9] = led_id;
packet[10] = r;
packet[11] = g;
packet[12] = b;
packet[13] = 0x64;
fillInChecksum(packet);
hid_write(dev, packet, sizeof(packet));
/*-----------------------------------------------------*\
| Delay 50 milliseconds |
\*-----------------------------------------------------*/
std::this_thread::sleep_for(std::chrono::milliseconds(50));
}
void AlienwareMonitorController::Initialize()
{
unsigned char packet[65];
memset(packet, 0xFF, sizeof(packet));
packet[1] = 0x95;
packet[2] = 0x00;
packet[3] = 0x00;
packet[4] = 0x00;
hid_write(dev, packet, sizeof(packet));
/*-----------------------------------------------------*\
| Delay 50 milliseconds |
\*-----------------------------------------------------*/
std::this_thread::sleep_for(std::chrono::milliseconds(50));
memset(packet, 0xFF, sizeof(packet));
packet[1] = 0x92;
packet[2] = 0x37;
packet[3] = 0x08;
packet[4] = 0x00;
packet[5] = 0x51;
packet[6] = 0x85;
packet[7] = 0x01;
packet[8] = 0xFE;
packet[9] = 0x03;
packet[10] = 0x00;
packet[11] = 0x06;
packet[12] = 0x40;
hid_write(dev, packet, sizeof(packet));
/*-----------------------------------------------------*\
| Delay 50 milliseconds |
\*-----------------------------------------------------*/
std::this_thread::sleep_for(std::chrono::milliseconds(50));
memset(packet, 0x00, sizeof(packet));
packet[1] = 0x93;
packet[2] = 0x37;
packet[3] = 0x12;
hid_write(dev, packet, sizeof(packet));
/*-----------------------------------------------------*\
| Delay 50 milliseconds |
\*-----------------------------------------------------*/
std::this_thread::sleep_for(std::chrono::milliseconds(50));
}
@@ -0,0 +1,33 @@
/*---------------------------------------------------------*\
| AlienwareMonitorController.h |
| |
| Detector for Alienware monitors |
| |
| Adam Honse (CalcProgrammer1) 08 May 2025 |
| |
| This file is part of the OpenRGB project |
| SPDX-License-Identifier: GPL-2.0-only |
\*---------------------------------------------------------*/
#pragma once
#include <hidapi.h>
#include <vector>
#include <string>
class AlienwareMonitorController
{
public:
AlienwareMonitorController(hid_device* dev_handle, const char* path);
~AlienwareMonitorController();
std::string GetLocation();
std::string GetSerialString();
void SendColor(unsigned char led_id, unsigned char r, unsigned char g, unsigned char b);
private:
hid_device* dev;
std::string location;
void Initialize();
};
@@ -0,0 +1,66 @@
/*---------------------------------------------------------*\
| AlienwareMonitorControllerDetect.cpp |
| |
| Detector for Alienware monitors |
| |
| Adam Honse (CalcProgrammer1) 08 May 2025 |
| |
| This file is part of the OpenRGB project |
| SPDX-License-Identifier: GPL-2.0-only |
\*---------------------------------------------------------*/
#include "Detector.h"
#include "AlienwareAW3423DWFController.h"
#include "AlienwareMonitorController.h"
#include "RGBController_AlienwareAW3423DWF.h"
#include "RGBController_AlienwareMonitor.h"
#include <hidapi.h>
/*---------------------------------------------------------*\
| Alienware Vendor ID |
\*---------------------------------------------------------*/
#define ALIENWARE_VID 0x187C
/*---------------------------------------------------------*\
| Alienware Vendor ID |
\*---------------------------------------------------------*/
#define ALIENWARE_AW3423DWF_PID 0x100E
#define ALIENWARE_AW3225QF_PID 0x1013
#define ALIENWARE_USAGE_PAGE 0xFFDA
#define ALIENWARE_USAGE 0x00DA
/******************************************************************************************\
* *
* AlienwareAW3423DWFControllerDetect *
* *
* Tests the USB address to see if an Alienware AW3423DWF exists there. *
* *
\******************************************************************************************/
void DetectAlienwareAW3423DWFControllers(hid_device_info* info, const std::string&)
{
hid_device* dev = hid_open_path(info->path);
if(dev)
{
AlienwareAW3423DWFController* controller = new AlienwareAW3423DWFController(dev, info->path);
RGBController_AlienwareAW3423DWF* rgb_controller = new RGBController_AlienwareAW3423DWF(controller);
ResourceManager::get()->RegisterRGBController(rgb_controller);
}
}
void DetectAlienwareMonitorControllers(hid_device_info* info, const std::string& name)
{
hid_device* dev = hid_open_path(info->path);
if(dev)
{
AlienwareMonitorController* controller = new AlienwareMonitorController(dev, info->path);
RGBController_AlienwareMonitor* rgb_controller = new RGBController_AlienwareMonitor(controller);
rgb_controller->name = name;
ResourceManager::get()->RegisterRGBController(rgb_controller);
}
}
REGISTER_HID_DETECTOR("Alienware AW3423DWF", DetectAlienwareAW3423DWFControllers, ALIENWARE_VID, ALIENWARE_AW3423DWF_PID);
REGISTER_HID_DETECTOR("Alienware AW3225QF", DetectAlienwareMonitorControllers, ALIENWARE_VID, ALIENWARE_AW3225QF_PID);
@@ -0,0 +1,141 @@
/*---------------------------------------------------------*\
| RGBController_AlienwareAW3423DWF.cpp |
| |
| RGBController for the Alienware AW3423DWF monitor |
| |
| Ferréol DUBOIS COLI (Fefe_du_973) 23 Jan 2025 |
| |
| This file is part of the OpenRGB project |
| SPDX-License-Identifier: GPL-2.0-only |
\*---------------------------------------------------------*/
#include "RGBController_AlienwareAW3423DWF.h"
/**------------------------------------------------------------------*\
@name AW3423DWF
@category Accessory
@type USB
@save :x:
@direct :white_check_mark:
@effects :x:
@detectors DetectAlienwareAW3423DWFControllers
@comment
\*-------------------------------------------------------------------*/
RGBController_AlienwareAW3423DWF::RGBController_AlienwareAW3423DWF(AlienwareAW3423DWFController* controller_ptr)
{
controller = controller_ptr;
name = "Alienware AW3423DWF";
vendor = "Alienware";
type = DEVICE_TYPE_MONITOR;
description = "Alienware AW3423DWF Monitor Device";
location = controller->GetLocation();
serial = controller->GetSerialString();
mode Direct;
Direct.name = "Direct";
Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR;
Direct.color_mode = MODE_COLORS_PER_LED;
modes.push_back(Direct);
active_mode = 0;
SetupZones();
}
RGBController_AlienwareAW3423DWF::~RGBController_AlienwareAW3423DWF()
{
delete controller;
}
void RGBController_AlienwareAW3423DWF::SetupZones()
{
zone Logo;
Logo.name = "Logo";
Logo.type = ZONE_TYPE_SINGLE;
Logo.leds_min = 1;
Logo.leds_max = 1;
Logo.leds_count = 1;
Logo.matrix_map = NULL;
zones.push_back(Logo);
led Logo_LED;
Logo_LED.name = "Logo";
Logo_LED.value = 0x01;
leds.push_back(Logo_LED);
zone Number;
Number.name = "Number";
Number.type = ZONE_TYPE_SINGLE;
Number.leds_min = 1;
Number.leds_max = 1;
Number.leds_count = 1;
Number.matrix_map = NULL;
zones.push_back(Number);
led Number_LED;
Number_LED.name = "Number";
Number_LED.value = 0x02;
leds.push_back(Number_LED);
zone PowerButton;
PowerButton.name = "Power Button";
PowerButton.type = ZONE_TYPE_SINGLE;
PowerButton.leds_min = 1;
PowerButton.leds_max = 1;
PowerButton.leds_count = 1;
PowerButton.matrix_map = NULL;
zones.push_back(PowerButton);
led PowerButton_LED;
PowerButton_LED.name = "Power Button";
PowerButton_LED.value = 0x08;
leds.push_back(PowerButton_LED);
SetupColors();
}
void RGBController_AlienwareAW3423DWF::ResizeZone(int /*zone*/, int /*new_size*/)
{
}
void RGBController_AlienwareAW3423DWF::DeviceUpdateLEDs()
{
/*-----------------------------------------------------*\
| If all three colors are the same value, speed up the |
| direct mode by using the ALL target (0x0B) instead of |
| setting each LED individually. |
\*-----------------------------------------------------*/
if((colors[0] == colors[1]) && (colors[1] == colors[2]))
{
unsigned char red = RGBGetRValue(colors[0]);
unsigned char grn = RGBGetGValue(colors[0]);
unsigned char blu = RGBGetBValue(colors[0]);
controller->SendColor(0x0B, red, grn, blu);
}
else
{
for(unsigned int led_idx = 0; led_idx < leds.size(); led_idx++)
{
UpdateSingleLED(led_idx);
}
}
}
void RGBController_AlienwareAW3423DWF::UpdateZoneLEDs(int /*zone*/)
{
DeviceUpdateLEDs();
}
void RGBController_AlienwareAW3423DWF::UpdateSingleLED(int led)
{
unsigned char red = RGBGetRValue(colors[led]);
unsigned char grn = RGBGetGValue(colors[led]);
unsigned char blu = RGBGetBValue(colors[led]);
controller->SendColor(leds[led].value, red, grn, blu);
}
void RGBController_AlienwareAW3423DWF::DeviceUpdateMode()
{
}
@@ -0,0 +1,34 @@
/*---------------------------------------------------------*\
| RGBController_AlienwareAW3423DWF.h |
| |
| RGBController for the Alienware AW3423DWF monitor |
| |
| Ferréol DUBOIS COLI (Fefe_du_973) 23 Jan 2025 |
| |
| This file is part of the OpenRGB project |
| SPDX-License-Identifier: GPL-2.0-only |
\*---------------------------------------------------------*/
#pragma once
#include "AlienwareAW3423DWFController.h"
#include "RGBController.h"
class RGBController_AlienwareAW3423DWF : public RGBController
{
public:
explicit RGBController_AlienwareAW3423DWF(AlienwareAW3423DWFController* controller_ptr);
~RGBController_AlienwareAW3423DWF();
void SetupZones();
void ResizeZone(int zone, int new_size);
void DeviceUpdateLEDs();
void UpdateZoneLEDs(int zone);
void UpdateSingleLED(int led);
void DeviceUpdateMode();
private:
AlienwareAW3423DWFController* controller;
};
@@ -0,0 +1,143 @@
/*---------------------------------------------------------*\
| RGBController_AlienwareMonitor.cpp |
| |
| RGBController for Alienware monitors |
| |
| Adam Honse (CalcProgrammer1) 08 May 2025 |
| |
| This file is part of the OpenRGB project |
| SPDX-License-Identifier: GPL-2.0-only |
\*---------------------------------------------------------*/
#include "RGBController_AlienwareMonitor.h"
/**------------------------------------------------------------------*\
@name Alienware Monitor
@category Accessory
@type USB
@save :x:
@direct :white_check_mark:
@effects :x:
@detectors DetectAlienwareMonitorControllers
@comment
\*-------------------------------------------------------------------*/
RGBController_AlienwareMonitor::RGBController_AlienwareMonitor(AlienwareMonitorController* controller_ptr)
{
controller = controller_ptr;
name = "Alienware Monitor";
description = "Alienware Monitor";
vendor = "Alienware";
type = DEVICE_TYPE_MONITOR;
location = controller->GetLocation();
serial = controller->GetSerialString();
mode Direct;
Direct.name = "Direct";
Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR;
Direct.color_mode = MODE_COLORS_PER_LED;
modes.push_back(Direct);
active_mode = 0;
SetupZones();
}
RGBController_AlienwareMonitor::~RGBController_AlienwareMonitor()
{
delete controller;
}
void RGBController_AlienwareMonitor::SetupZones()
{
zone Logo;
Logo.name = "Logo";
Logo.type = ZONE_TYPE_SINGLE;
Logo.leds_min = 1;
Logo.leds_max = 1;
Logo.leds_count = 1;
Logo.matrix_map = NULL;
zones.push_back(Logo);
led Logo_LED;
Logo_LED.name = "Logo";
Logo_LED.value = 0x01;
leds.push_back(Logo_LED);
zone Number;
Number.name = "Number";
Number.type = ZONE_TYPE_SINGLE;
Number.leds_min = 1;
Number.leds_max = 1;
Number.leds_count = 1;
Number.matrix_map = NULL;
zones.push_back(Number);
led Number_LED;
Number_LED.name = "Number";
Number_LED.value = 0x02;
leds.push_back(Number_LED);
zone PowerButton;
PowerButton.name = "Power Button";
PowerButton.type = ZONE_TYPE_SINGLE;
PowerButton.leds_min = 1;
PowerButton.leds_max = 1;
PowerButton.leds_count = 1;
PowerButton.matrix_map = NULL;
zones.push_back(PowerButton);
led PowerButton_LED;
PowerButton_LED.name = "Power Button";
PowerButton_LED.value = 0x08;
leds.push_back(PowerButton_LED);
SetupColors();
}
void RGBController_AlienwareMonitor::ResizeZone(int /*zone*/, int /*new_size*/)
{
}
void RGBController_AlienwareMonitor::DeviceUpdateLEDs()
{
/*-----------------------------------------------------*\
| If all three colors are the same value, speed up the |
| direct mode by using the ALL target (0x0B) instead of |
| setting each LED individually. |
\*-----------------------------------------------------*/
if((colors[0] == colors[1]) && (colors[1] == colors[2]))
{
unsigned char red = RGBGetRValue(colors[0]);
unsigned char grn = RGBGetGValue(colors[0]);
unsigned char blu = RGBGetBValue(colors[0]);
controller->SendColor(0x0B, red, grn, blu);
}
else
{
for(unsigned int led_idx = 0; led_idx < leds.size(); led_idx++)
{
UpdateSingleLED(led_idx);
}
}
}
void RGBController_AlienwareMonitor::UpdateZoneLEDs(int /*zone*/)
{
DeviceUpdateLEDs();
}
void RGBController_AlienwareMonitor::UpdateSingleLED(int led)
{
unsigned char red = RGBGetRValue(colors[led]);
unsigned char grn = RGBGetGValue(colors[led]);
unsigned char blu = RGBGetBValue(colors[led]);
controller->SendColor(leds[led].value, red, grn, blu);
}
void RGBController_AlienwareMonitor::DeviceUpdateMode()
{
}
@@ -0,0 +1,34 @@
/*---------------------------------------------------------*\
| RGBController_AlienwareMonitor.h |
| |
| RGBController for Alienware monitors |
| |
| Adam Honse (CalcProgrammer1) 08 May 2025 |
| |
| This file is part of the OpenRGB project |
| SPDX-License-Identifier: GPL-2.0-only |
\*---------------------------------------------------------*/
#pragma once
#include "RGBController.h"
#include "AlienwareMonitorController.h"
class RGBController_AlienwareMonitor : public RGBController
{
public:
RGBController_AlienwareMonitor(AlienwareMonitorController* controller_ptr);
~RGBController_AlienwareMonitor();
void SetupZones();
void ResizeZone(int zone, int new_size);
void DeviceUpdateLEDs();
void UpdateZoneLEDs(int zone);
void UpdateSingleLED(int led);
void DeviceUpdateMode();
private:
AlienwareMonitorController* controller;
};
@@ -11,7 +11,6 @@
#include "Detector.h"
#include "AnnePro2Controller.h"
#include "RGBController.h"
#include "RGBController_AnnePro2.h"
#include <hidapi.h>
@@ -9,12 +9,9 @@
| SPDX-License-Identifier: GPL-2.0-only |
\*---------------------------------------------------------*/
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include "Detector.h"
#include "ArcticController.h"
#include "RGBController.h"
#include "RGBController_Arctic.h"
#include "find_usb_serial_port.h"
@@ -19,8 +19,6 @@
#define AURA_CORE_VID 0x0B05
#define AURA_STRIX_SCAR_15_PID 0x19B6
/******************************************************************************************\
* *
* DetectAuraCoreControllers *
@@ -10,45 +10,10 @@
\*---------------------------------------------------------*/
#include "AsusAuraCoreLaptopController.h"
#include "dmiinfo.h"
#include "SettingsManager.h"
#include "StringUtils.h"
static uint8_t packet_map[ASUSAURACORELAPTOP_KEYCOUNT +
ASUSAURACORELAPTOP_LIGHTBARCOUNT +
ASUSAURACORELAPTOP_LIDCOUNT ] =
{
/*00 ESC F1 F2 F3 F4 F5 F6 F7 F8 F9 */
21, 23, 24, 25, 26, 28, 29, 30, 31, 33,
/*10 F10 F11 F12 DEL ` 1 2 3 4 5 */
34, 35, 36, 37, 42, 43, 44, 45, 46, 47,
/*20 6 7 8 9 0 - = BSP BSP BSP */
48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
/*30 PLY TAB Q W E R T Y U I */
58, 63, 64, 65, 66, 67, 68, 69, 70, 71,
/*40 O P [ ] \ STP CAP A S D */
72, 73, 74, 75, 76, 79, 84, 85, 86, 87,
/*50 F G H J K L ; ' ENT PRV */
88, 89, 90, 91, 92, 93, 94, 95, 98, 100,
/*60 LSH Z X C V B N M , . */
105, 107, 108, 109, 110, 111, 112, 113, 114, 115,
/*70 / RSH UP NXT LCTL LFN LWIN LALT SPC RALT */
116, 119, 139, 121, 126, 127, 128, 129, 131, 135,
/*80 RCTL LFT DWN RGT PRT KSTN VDN VUP MICM HPFN */
137, 159, 160, 161, 142, 175, 2, 3, 4, 5,
/*90 ARMC LB1 LB2 LB3 LB4 LB5 LB6 LOGO LIDL LIDR */
6, 174, 173, 172, 171, 170, 169, 167, 176, 177,
};
static std::string power_zones[ASUSAURACORELAPTOP_POWER_ZONES] =
{
"Logo",
@@ -67,21 +32,42 @@ static std::string power_states[ASUSAURACORELAPTOP_POWER_STATES] =
AsusAuraCoreLaptopController::AsusAuraCoreLaptopController(hid_device* dev_handle, const char* path)
{
dev = dev_handle;
location = path;
dev = dev_handle;
location = path;
/*---------------------------------------------------------*\
| Get device name from HID manufacturer and product strings |
| The motherboard name will uniquely ID the laptop to |
| determine the metadata of the device. |
\*---------------------------------------------------------*/
wchar_t name_string[HID_MAX_STR];
DMIInfo dmi_info;
std::string dmi_name = dmi_info.getMainboard();
bool not_found = true;
hid_get_manufacturer_string(dev, name_string, HID_MAX_STR);
device_name = StringUtils::wstring_to_string(name_string);
for(uint16_t i = 0; i < AURA_CORE_LAPTOP_DEVICE_COUNT; i++)
{
if(aura_core_laptop_device_list[i]->dmi_name == dmi_name)
{
/*---------------------------------------------------------*\
| Set device ID |
\*---------------------------------------------------------*/
not_found = false;
device_index = i;
break;
}
}
hid_get_product_string(dev, name_string, HID_MAX_STR);
device_name.append(" ").append(StringUtils::wstring_to_string(name_string));
if(not_found)
{
LOG_ERROR("[%s] device capabilities not found. Please creata a new device request.",
dmi_name.c_str());
return;
}
/*---------------------------------------------------------*\
| Only set power config for known devices |
\*---------------------------------------------------------*/
SetPowerConfigFromJSON();
SendInitDirectMode();
}
AsusAuraCoreLaptopController::~AsusAuraCoreLaptopController()
@@ -89,9 +75,66 @@ AsusAuraCoreLaptopController::~AsusAuraCoreLaptopController()
hid_close(dev);
}
std::string AsusAuraCoreLaptopController::GetDeviceName()
const aura_core_laptop_device* AsusAuraCoreLaptopController::GetDeviceData()
{
return device_name;
return aura_core_laptop_device_list[device_index];
}
std::string AsusAuraCoreLaptopController::GetDeviceDescription()
{
/*---------------------------------------------------------*\
| Get device name from HID manufacturer and product strings |
\*---------------------------------------------------------*/
wchar_t name_string[HID_MAX_STR];
hid_get_manufacturer_string(dev, name_string, HID_MAX_STR);
std::string name = StringUtils::wstring_to_string(name_string);
hid_get_product_string(dev, name_string, HID_MAX_STR);
name.append(" ").append(StringUtils::wstring_to_string(name_string));
return name;
}
unsigned int AsusAuraCoreLaptopController::GetKeyboardLayout()
{
const uint8_t index = 6;
uint8_t result = 0;
uint8_t rd_buf[ASUSAURACORELAPTOP_WRITE_PACKET_SIZE] = { ASUSAURACORELAPTOP_REPORT_ID };
uint8_t buffer[ASUSAURACORELAPTOP_WRITE_PACKET_SIZE] = { ASUSAURACORELAPTOP_REPORT_ID,
ASUSAURACORELAPTOP_CMD_LAYOUT,
0x20,
0x31,
0x00,
0x10 };
/*---------------------------------------------------------*\
| Clear the read buffer to ensure we read the right packet |
\*---------------------------------------------------------*/
do
{
result = hid_read_timeout(dev, rd_buf, ASUSAURACORELAPTOP_WRITE_PACKET_SIZE, 10);
}
while(result > 0);
memset(&rd_buf[1], 0, ASUSAURACORELAPTOP_WRITE_PACKET_SIZE - 1);
memset(&buffer[index], 0, ASUSAURACORELAPTOP_WRITE_PACKET_SIZE - index);
hid_send_feature_report(dev, buffer, ASUSAURACORELAPTOP_WRITE_PACKET_SIZE);
result = hid_get_feature_report(dev, rd_buf, ASUSAURACORELAPTOP_WRITE_PACKET_SIZE);
LOG_DEBUG("[%s] GetKeyboardLayout %02X %02X %02X %02X %02X %02X %02X {%02X} %02X %02X %02X %02X",
aura_core_laptop_device_list[device_index]->dmi_name.c_str(),
rd_buf[5], rd_buf[6], rd_buf[7], rd_buf[8], rd_buf[9], rd_buf[10],
rd_buf[11], rd_buf[12], rd_buf[13], rd_buf[14], rd_buf[15], rd_buf[16]);
if(result > 0)
{
return rd_buf[12];
}
LOG_DEBUG("[%s] GetKeyboardLayout: An error occurred! Setting layout to ANSI",
aura_core_laptop_device_list[device_index]->dmi_name.c_str());
return ASUSAURACORELAPTOP_LAYOUT_ANSI;
}
std::string AsusAuraCoreLaptopController::GetSerial()
@@ -101,6 +144,8 @@ std::string AsusAuraCoreLaptopController::GetSerial()
if(ret != 0)
{
LOG_DEBUG("[%s] Get HID Serial string failed",
aura_core_laptop_device_list[device_index]->dmi_name.c_str());
return("");
}
@@ -132,49 +177,74 @@ void AsusAuraCoreLaptopController::SetMode(uint8_t mode, uint8_t speed, uint8_t
current_random = random;
current_direction = direction;
if(current_mode == ASUSAURACORELAPTOP_MODE_DIRECT)
{
SendBrightness();
SendInitDirectMode();
return;
}
SendUpdate();
SendBrightness();
}
}
void AsusAuraCoreLaptopController::SetLedsDirect(std::vector<RGBColor> colors)
void AsusAuraCoreLaptopController::SendInitDirectMode()
{
uint8_t buffer[ASUSAURACORELAPTOP_WRITE_PACKET_SIZE] = { ASUSAURACORELAPTOP_REPORT_ID, ASUSAURACORELAPTOP_CMD_DIRECT };
memset(&buffer[2], 0, ASUSAURACORELAPTOP_WRITE_PACKET_SIZE - 2);
LOG_DEBUG("[%s] Resetting device for direct control", aura_core_laptop_device_list[device_index]->dmi_name.c_str());
hid_send_feature_report(dev, buffer, ASUSAURACORELAPTOP_WRITE_PACKET_SIZE);
}
void AsusAuraCoreLaptopController::SetLedsDirect(std::vector<RGBColor *> colors)
{
/*---------------------------------------------------------*\
| The keyboard zone is a set of 168 keys (indexed from 0) |
| sent in 11 packets of 16 triplets. The Lid and Lightbar |
| zones are sent in one final packet afterwards. |
\*---------------------------------------------------------*/
const uint8_t key_set = 167;
const uint8_t led_count = 178;
const uint16_t map_size = 3 * led_count;
const uint8_t leds_per_packet = 16;
const uint8_t key_set = 167;
const uint8_t led_count = (uint8_t)colors.size();
const uint16_t map_size = 3 * led_count;
const uint8_t leds_per_packet = 16;
uint8_t buffer[ASUSAURACORELAPTOP_WRITE_PACKET_SIZE] = { ASUSAURACORELAPTOP_REPORT_ID, ASUSAURACORELAPTOP_CMD_DIRECT,
0x00, 0x01, 0x01, 0x01, 0x00, leds_per_packet, 0x00 };
uint8_t key_buf[map_size];
uint8_t* key_buf = new uint8_t[map_size];
memset(key_buf, 0, map_size);
for(size_t led_index = 0; led_index < colors.size(); led_index++)
for(uint8_t led_index = 0; led_index < led_count; led_index++)
{
uint16_t offset = 3 * packet_map[led_index];
std::size_t buf_idx = (led_index * 3);
key_buf[offset] = RGBGetRValue(colors[led_index]);
key_buf[offset + 1] = RGBGetGValue(colors[led_index]);
key_buf[offset + 2] = RGBGetBValue(colors[led_index]);
key_buf[buf_idx] = RGBGetRValue(*colors[led_index]);
key_buf[buf_idx + 1] = RGBGetGValue(*colors[led_index]);
key_buf[buf_idx + 2] = RGBGetBValue(*colors[led_index]);
}
for(size_t i = 0; i < key_set; i+=leds_per_packet)
for(uint8_t i = 0; i < key_set; i += leds_per_packet)
{
uint8_t leds_remaining = key_set - (uint8_t)i;
uint8_t leds_remaining = key_set - i;
if(leds_remaining < leds_per_packet)
{
buffer[07] = leds_remaining;
memset(&buffer[ASUSAURACORELAPTOP_DATA_BYTE],
0,
ASUSAURACORELAPTOP_WRITE_PACKET_SIZE - ASUSAURACORELAPTOP_DATA_BYTE);
}
buffer[06] = (uint8_t)i;
buffer[06] = i;
memcpy(&buffer[ASUSAURACORELAPTOP_DATA_BYTE], &key_buf[3 * i], (3 * buffer[07]));
LOG_DEBUG("[%s] Sending buffer @ index %d thru index %d",
aura_core_laptop_device_list[device_index]->dmi_name.c_str(),
i,
i + buffer[07]);
hid_send_feature_report(dev, buffer, ASUSAURACORELAPTOP_WRITE_PACKET_SIZE);
}
@@ -182,15 +252,31 @@ void AsusAuraCoreLaptopController::SetLedsDirect(std::vector<RGBColor> colors)
buffer[5] = 0x00;
buffer[6] = 0x00;
buffer[7] = 0x00;
memcpy(&buffer[ASUSAURACORELAPTOP_DATA_BYTE], &key_buf[3 * key_set], (3 * (led_count - key_set)));
memset(&buffer[ASUSAURACORELAPTOP_DATA_BYTE],
0,
ASUSAURACORELAPTOP_WRITE_PACKET_SIZE - ASUSAURACORELAPTOP_DATA_BYTE);
if(led_count > key_set)
{
memcpy(&buffer[ASUSAURACORELAPTOP_DATA_BYTE],
&key_buf[3 * key_set],
(3 * (led_count - key_set)));
}
LOG_DEBUG("[%s] Sending buffer @ index %d thru index %d",
aura_core_laptop_device_list[device_index]->dmi_name.c_str(),
key_set,
led_count);
hid_send_feature_report(dev, buffer, ASUSAURACORELAPTOP_WRITE_PACKET_SIZE);
delete[] key_buf;
}
void AsusAuraCoreLaptopController::SendBrightness()
{
const uint8_t index = 2;
uint8_t buffer[ASUSAURACORELAPTOP_WRITE_PACKET_SIZE] = { ASUSAURACORELAPTOP_REPORT_ID, ASUSAURACORELAPTOP_CMD_BRIGHTNESS };
const uint8_t index = 5;
uint8_t buffer[ASUSAURACORELAPTOP_WRITE_PACKET_SIZE] = { ASUSAURACORELAPTOP_REPORT_ID, ASUSAURACORELAPTOP_CMD_BRIGHTNESS, 0xC5, 0xC4};
memset(&buffer[index], 0, ASUSAURACORELAPTOP_WRITE_PACKET_SIZE - index);
buffer[4] = current_brightness;
@@ -283,6 +369,8 @@ void AsusAuraCoreLaptopController::SetPowerConfigFromJSON()
device_settings[section_power] = pcfg;
settings_manager->SetSettings(detector_name, device_settings);
settings_manager->SaveSettings();
LOG_DEBUG("[%s] default power config saved to openrgb.json",
aura_core_laptop_device_list[device_index]->dmi_name.c_str());
}
else
{
@@ -293,7 +381,9 @@ void AsusAuraCoreLaptopController::SetPowerConfigFromJSON()
if(device_settings[section_power].contains(key_name))
{
power_config[i].state = device_settings[section_power][key_name];
LOG_DEBUG("[%s] Reading power config for %s: %s", device_name.c_str(), key_name.c_str(), ((power_config[i].state) ? "On" : "Off"));
LOG_DEBUG("[%s] Reading power config for %s: %s",
aura_core_laptop_device_list[device_index]->dmi_name.c_str(),
key_name.c_str(), ((power_config[i].state) ? "On" : "Off"));
}
}
}
@@ -303,7 +393,7 @@ void AsusAuraCoreLaptopController::SetPowerConfigFromJSON()
| With thanks to AsusCtl for helping to decipher the packet captures |
| https://gitlab.com/asus-linux/asusctl/-/blob/main/rog-aura/src/usb.rs#L150 |
\*-----------------------------------------------------------------------------*/
bool flag_array[] =
bool flag_array[32] =
{
power_config[0].state, power_config[4].state,
power_config[1].state, power_config[5].state,
@@ -320,7 +410,9 @@ void AsusAuraCoreLaptopController::SetPowerConfigFromJSON()
};
uint32_t flags = PackPowerFlags(flag_array);
LOG_DEBUG("[%s] Sending power config Logo+KB: %02X Lightbar: %02X Lid Edges: %02X Raw: %08X", device_name.c_str(), (flags & 0xFF), ((flags >> 8) & 0xFF), ((flags >> 16) & 0xFF), flags);
LOG_DEBUG("[%s] Sending power config Logo+KB: %02X Lightbar: %02X Lid Edges: %02X Raw: %08X",
aura_core_laptop_device_list[device_index]->dmi_name.c_str(),
(flags & 0xFF), ((flags >> 8) & 0xFF), ((flags >> 16) & 0xFF), flags);
SendPowerConfig(flags);
}
@@ -18,6 +18,7 @@
#include "RGBController.h"
#include "ResourceManager.h"
#include "RGBControllerKeyNames.h"
#include "AsusAuraCoreLaptopDevices.h"
#define NA 0xFFFFFFFF
#define HID_MAX_STR 255
@@ -33,7 +34,7 @@
#define ASUSAURACORELAPTOP_POWER_ZONES 4
#define ASUSAURACORELAPTOP_POWER_STATES 4
#define ASUSAURACORELAPTOP_BRIGHTNESS_MIN 0
#define ASUSAURACORELAPTOP_BRIGHTNESS_MAX 255
#define ASUSAURACORELAPTOP_BRIGHTNESS_MAX 3 // No device has proven to have 256 keyboard brightness levels, only 0..3
enum
{
@@ -83,6 +84,7 @@ enum
ASUSAURACORELAPTOP_CMD_UPDATE = 0xB3,
ASUSAURACORELAPTOP_CMD_APPLY = 0xB4,
ASUSAURACORELAPTOP_CMD_SET = 0xB5,
ASUSAURACORELAPTOP_CMD_LAYOUT = 0x05,
};
enum
@@ -92,6 +94,12 @@ enum
ASUSAURACORELAPTOP_SPEED_FASTEST = 0xF5, // Fastest speed
};
enum aura_core_laptop_layout
{
ASUSAURACORELAPTOP_LAYOUT_ANSI = 0x01, /* US ANSI Layout */
ASUSAURACORELAPTOP_LAYOUT_ISO = 0x02, /* EURO ISO Layout */
};
struct p_state
{
std::string zone;
@@ -104,33 +112,36 @@ public:
AsusAuraCoreLaptopController(hid_device* dev_handle, const char* path);
~AsusAuraCoreLaptopController();
std::string GetDeviceName();
std::string GetSerial();
std::string GetLocation();
const aura_core_laptop_device* GetDeviceData();
std::string GetDeviceDescription();
std::string GetSerial();
unsigned int GetKeyboardLayout();
std::string GetLocation();
void SetMode(uint8_t mode, uint8_t speed, uint8_t brightness, RGBColor color1, RGBColor color2, uint8_t random, uint8_t direction);
void SetLedsDirect(std::vector<RGBColor> colors);
void SetMode(uint8_t mode, uint8_t speed, uint8_t brightness, RGBColor color1, RGBColor color2, uint8_t random, uint8_t direction);
void SetLedsDirect(std::vector<RGBColor *>colors);
void SendInitDirectMode();
private:
std::string device_name;
std::string location;
hid_device* dev;
hid_device* dev;
uint16_t device_index;
std::string location;
uint8_t current_mode;
uint8_t current_speed;
uint8_t current_direction;
uint8_t current_mode;
uint8_t current_speed;
uint8_t current_direction;
RGBColor current_c1;
RGBColor current_c2;
uint8_t current_brightness;
uint8_t current_random;
RGBColor current_c1;
RGBColor current_c2;
uint8_t current_brightness;
uint8_t current_random;
void SendApply();
void SendBrightness();
void SendSet();
void SendUpdate();
void SendApply();
void SendBrightness();
void SendSet();
void SendUpdate();
void SetPowerConfigFromJSON();
void SendPowerConfig(uint32_t flags);
uint32_t PackPowerFlags(bool flags[]);
std::vector<p_state> PowerConfigArray();
void SetPowerConfigFromJSON();
void SendPowerConfig(uint32_t flags);
uint32_t PackPowerFlags(bool flags[]);
std::vector<p_state> PowerConfigArray();
};
@@ -0,0 +1,559 @@
#include "AsusAuraCoreLaptopDevices.h"
/*-------------------------------------------------------------------------*\
| Aura Core Key Values |
| NULL values are keys that are handed to the KLM but are removed as |
| a part of customisation. They are included to maintain expected key |
| count is aligned to the value count. |
\*-------------------------------------------------------------------------*/
std::vector<unsigned int> aura_core_laptop_15_values =
{
/* ESC F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 DEL */
21, 23, 24, 25, 26, 28, 29, 30, 31, 33, 34, 35, 36,
/* BKTK 1 2 3 4 5 6 7 8 9 0 - = BSPC PLAY */
42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
/* TAB Q W E R T Y U I O P [ ] \ STOP */
63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
/* CPLK A S D F G H J K L ; " # ENTR PREV */
84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 98,
/* LSFT ISO\ Z X C V B N M , . / RSFT ARWU NEXT */
105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 119,
/* LCTL LWIN LALT SPC RALT RFNC RMNU RCTL ARWL ARWD ARWR */
126, 128, 129, 131, 135, 136, 136, 137,
};
std::vector<unsigned int> aura_core_laptop_17_values =
{
/* ESC F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 NULL NULL PAUS */
21, 23, 24, 25, 26, 28, 29, 30, 31, 33, 34, 35, 36, 0, 0, 39,
/* BKTK 1 2 3 4 5 6 7 8 9 0 - = BSPC NULL NULL NULL NMLK NMDV NMTM NMMI */
42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 56, 0, 0, 0, 59, 60, 61, 62,
/* TAB Q W E R T Y U I O P [ ] \ NULL NULL NULL NM7 NM8 NM9 NMPL */
63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 0, 0, 0, 80, 81, 82, 83,
/* CPLK A S D F G H J K L ; " # ENTR NM4 NM5 NM6 */
84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 98, 101, 102, 103,
/* LSFT ISO\ Z X C V B N M , . / RSFT ARWU NM1 NM2 NM3 NMER */
105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 119, 139, 122, 123, 124, 125,
/* LCTL LWIN LALT SPC RALT RFNC RMNU RCTL ARWL ARWD ARWR NM0 NMPD */
126, 128, 129, 131, 135, 136, 136, 137, 159, 160, 161, 144, 145,
};
std::vector<unsigned int> aura_core_laptop_18_values =
{
/* ESC F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 NULL NULL PAUS */
21, 23, 24, 25, 26, 28, 29, 30, 31, 33, 34, 35, 36, 0, 0, 39,
/* BKTK 1 2 3 4 5 6 7 8 9 0 - = BSPC NULL NULL NULL NMLK NMDV NMTM NMMI */
42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 56, 0, 0, 0, 59, 60, 61, 62,
/* TAB Q W E R T Y U I O P [ ] \ NULL NULL NULL NM7 NM8 NM9 NMPL */
63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 0, 0, 0, 80, 81, 82, 83,
/* CPLK A S D F G H J K L ; " # ENTR NM4 NM5 NM6 */
84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 98, 101, 102, 103,
/* LSFT ISO\ Z X C V B N M , . / RSFT ARWU NM1 NM2 NM3 NMER */
105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 119, 121, 122, 123, 124, 125,
/* LCTL LWIN LALT SPC RALT RFNC RMNU RCTL ARWL ARWD ARWR NM0 NMPD */
126, 128, 129, 131, 135, 136, 136, 137, 141, 142, 143, 144, 145,
};
/*-------------------------------------------------------------------------*\
| KEYMAPS |
\*-------------------------------------------------------------------------*/
keyboard_keymap_overlay_values g533zm_layout
{
KEYBOARD_SIZE_SEVENTY_FIVE,
{
aura_core_laptop_15_values,
{
/* Add more regional layout fixes here */
}
},
{
/*-------------------------------------------------------------------------------------------------------------------------------------*\
| Edit Keys |
| Zone, Row, Column, Value, Key, Alternate Name, OpCode, |
\*-------------------------------------------------------------------------------------------------------------------------------------*/
{ 0, 0, 15, 37, KEY_EN_DELETE, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Delete
{ 0, 1, 15, 58, KEY_EN_MEDIA_PLAY_PAUSE, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Play / Pause
{ 0, 2, 15, 79, KEY_EN_MEDIA_STOP, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Stop
{ 0, 3, 15, 100, KEY_EN_MEDIA_PREVIOUS, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Previous
{ 0, 4, 13, 139, KEY_EN_UP_ARROW, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Up Arrow
{ 0, 4, 15, 121, KEY_EN_MEDIA_NEXT, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Next
{ 0, 5, 12, 159, KEY_EN_LEFT_ARROW, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Left Arrow
{ 0, 5, 13, 160, KEY_EN_DOWN_ARROW, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Down Arrow
{ 0, 5, 14, 161, KEY_EN_RIGHT_ARROW, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Right Arrow
}
};
keyboard_keymap_overlay_values g533zw_layout
{
KEYBOARD_SIZE_SEVENTY_FIVE,
{
aura_core_laptop_15_values,
{
/* Add more regional layout fixes here */
}
},
{
/*-------------------------------------------------------------------------------------------------------------------------------------*\
| Edit Keys |
| Zone, Row, Column, Value, Key, Alternate Name, OpCode, |
\*-------------------------------------------------------------------------------------------------------------------------------------*/
{ 0, 0, 15, 37, KEY_EN_DELETE, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Delete
{ 0, 1, 15, 58, KEY_EN_MEDIA_PLAY_PAUSE, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Play / Pause
{ 0, 2, 15, 79, KEY_EN_MEDIA_STOP, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Stop
{ 0, 3, 15, 100, KEY_EN_MEDIA_PREVIOUS, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Previous
{ 0, 4, 15, 121, KEY_EN_MEDIA_NEXT, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Media Next
{ 0, 5, 1, 127, KEY_EN_LEFT_FUNCTION, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Left Function key
{ 0, 5, 4, 0, KEY_EN_UNUSED, KEY_EN_UNUSED, KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT, }, // Remove Unused key
{ 0, 5, 11, 0, KEY_EN_UNUSED, KEY_EN_UNUSED, KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT, }, // Remove Right Func key
{ 0, 5, 11, 0, KEY_EN_UNUSED, KEY_EN_UNUSED, KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT, }, // Remove Right Context key
{ 0, 5, 13, 139, KEY_EN_UP_ARROW, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Up Arrow
{ 0, 5, 15, 142, KEY_EN_PRINT_SCREEN, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Print Screen
{ 0, 5, 16, 175, "Keystone", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Keystone (Red only)
{ 0, 6, 12, 159, KEY_EN_LEFT_ARROW, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Left Arrow on new row
{ 0, 6, 13, 160, KEY_EN_DOWN_ARROW, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Down Arrow
{ 0, 6, 14, 161, KEY_EN_RIGHT_ARROW, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Right Arrow
{ 0, 0, 2, 2, KEY_EN_MEDIA_VOLUME_DOWN, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_ROW, }, // Insert Row before function keys
{ 0, 0, 3, 3, KEY_EN_MEDIA_VOLUME_UP, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Vol Up
{ 0, 0, 4, 4, "Mic On / Off", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Mic On / Off
{ 0, 0, 5, 5, "Hyperfan", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Hyperfan
{ 0, 0, 6, 6, "Armoury Crate", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Armoury Crate
}
};
keyboard_keymap_overlay_values g533zw_lid_layout
{
KEYBOARD_SIZE_EMPTY,
{
{ /* Values not set in empty keyboard */ },
{
/* Add more regional layout fixes here */
}
},
{
/*-------------------------------------------------------------------------------------------------------------------------------------*\
| Edit Keys |
| Zone, Row, Column, Value, Key, Alternate Name, OpCode, |
\*-------------------------------------------------------------------------------------------------------------------------------------*/
{ 0, 0, 0, 167, "Logo", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Lightbar L1
{ 0, 0, 1, 176, "Vertical Cut Left", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Lightbar L2
{ 0, 0, 2, 177, "Vertical Cut Right", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Lightbar L3
}
};
keyboard_keymap_overlay_values g533zw_lightbar_layout
{
KEYBOARD_SIZE_EMPTY,
{
{ /* Values not set in empty keyboard */ },
{
/* Add more regional layout fixes here */
}
},
{
/*-------------------------------------------------------------------------------------------------------------------------------------*\
| Edit Keys |
| Zone, Row, Column, Value, Key, Alternate Name, OpCode, |
\*-------------------------------------------------------------------------------------------------------------------------------------*/
{ 0, 0, 0, 174, "Lightbar L1", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Lightbar L1
{ 0, 0, 1, 173, "Lightbar L2", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Lightbar L2
{ 0, 0, 2, 172, "Lightbar L3", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Lightbar L3
{ 0, 0, 3, 171, "Lightbar R3", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Lightbar R3
{ 0, 0, 4, 170, "Lightbar R2", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Lightbar R2
{ 0, 0, 5, 169, "Lightbar R1", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Lightbar R1
}
};
keyboard_keymap_overlay_values g713rw_keyboard_layout
{
KEYBOARD_SIZE_FULL,
{
aura_core_laptop_17_values,
{
/* Add more regional layout fixes here */
}
},
{
/*-------------------------------------------------------------------------------------------------------------------------------------*\
| Edit Keys |
| Zone, Row, Column, Value, Key, Alternate Name, OpCode, |
\*-------------------------------------------------------------------------------------------------------------------------------------*/
{ 0, 0, 2, 2, KEY_EN_MEDIA_VOLUME_DOWN, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_ROW, }, // Insert Row and add Volume Down
{ 0, 0, 3, 3, KEY_EN_MEDIA_VOLUME_UP, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Volume Up
{ 0, 0, 4, 4, KEY_EN_MEDIA_MUTE, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Mute
{ 0, 0, 5, 5, "Key: Fan", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert "Fan" key
{ 0, 0, 6, 6, "Key: ROG", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert "ROG" key
{ 0, 6, 1, 127, KEY_EN_LEFT_FUNCTION, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Left Fuction
{ 0, 6, 8, 0, KEY_EN_UNUSED, KEY_EN_UNUSED, KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT, }, // Remove part of Spacebar
{ 0, 6, 8, 0, KEY_EN_UNUSED, KEY_EN_UNUSED, KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT, }, // Remove part of Spacebar
{ 0, 6, 10, 136, KEY_EN_RIGHT_FUNCTION, KEY_EN_UNUSED, KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT, }, // Remove Right Fuction
{ 0, 6, 10, 136, KEY_EN_RIGHT_WINDOWS, KEY_EN_UNUSED, KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT, }, // Remove Right Win Key
{ 0, 1, 14, 0, KEY_EN_UNUSED, KEY_EN_UNUSED, KEYBOARD_OPCODE_SWAP_ONLY, },
{ 0, 1, 15, 0, KEY_EN_UNUSED, KEY_EN_UNUSED, KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT, }, // trim extra column before numpad
{ 0, 1, 15, 38, KEY_EN_DELETE, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert a Delete key
{ 0, 1, 17, 40, KEY_EN_PRINT_SCREEN, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert a Print Screen key
{ 0, 1, 18, 41, KEY_EN_HOME, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert a Home key
{ 0, 2, 14, 0, KEY_EN_UNUSED, KEY_EN_UNUSED, KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT, },
{ 0, 2, 14, 0, KEY_EN_UNUSED, KEY_EN_UNUSED, KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT, },
{ 0, 3, 13, 76, KEY_EN_ANSI_BACK_SLASH, KEY_EN_UNUSED, KEYBOARD_OPCODE_SWAP_ONLY, }, // Force ANSI | even on ISO layouts
{ 0, 3, 14, 0, KEY_EN_UNUSED, KEY_EN_UNUSED, KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT, },
{ 0, 3, 14, 0, KEY_EN_UNUSED, KEY_EN_UNUSED, KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT, },
{ 0, 4, 14, 0, KEY_EN_UNUSED, KEY_EN_UNUSED, KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT, },
{ 0, 4, 14, 0, KEY_EN_UNUSED, KEY_EN_UNUSED, KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT, },
{ 0, 5, 12, 0, KEY_EN_UNUSED, KEY_EN_UNUSED, KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT, }, // gap before arrow up key
{ 0, 5, 13, 0, KEY_EN_UNUSED, KEY_EN_UNUSED, KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT, }, // trim extra column before numpad
{ 0, 6, 11, 0, KEY_EN_UNUSED, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // 1 empty key before arrow keys
{ 0, 6, 15, 0, KEY_EN_UNUSED, KEY_EN_UNUSED, KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT, }, // trim extra column before numpad
{ 0, 6, 16, 0, KEY_EN_UNUSED, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // 1 empty key between numpad 0 and .
// Close numpad gap completely
{ 0, 1, 14, 0, KEY_EN_UNUSED, KEY_EN_UNUSED, KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT, },
{ 0, 2, 14, 0, KEY_EN_UNUSED, KEY_EN_UNUSED, KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT, },
{ 0, 3, 14, 0, KEY_EN_UNUSED, KEY_EN_UNUSED, KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT, },
{ 0, 4, 14, 0, KEY_EN_UNUSED, KEY_EN_UNUSED, KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT, },
{ 0, 5, 14, 0, KEY_EN_UNUSED, KEY_EN_UNUSED, KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT, },
{ 0, 6, 14, 0, KEY_EN_UNUSED, KEY_EN_UNUSED, KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT, },
// Move Arrow keys
{ 0, 5, 13, 0, KEY_EN_UNUSED, KEY_EN_UNUSED, KEYBOARD_OPCODE_SWAP_ONLY, }, // Remove Arrow Up
{ 0, 6, 13, 0, KEY_EN_UNUSED, KEY_EN_UNUSED, KEYBOARD_OPCODE_SWAP_ONLY, }, // Remove Arrow Down
{ 0, 6, 12, 139, KEY_EN_UP_ARROW, KEY_EN_UNUSED, KEYBOARD_OPCODE_SWAP_ONLY, }, // Shift Arrow Up
{ 0, 7, 11, 159, KEY_EN_LEFT_ARROW, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 7, 12, 160, KEY_EN_DOWN_ARROW, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 7, 13, 161, KEY_EN_RIGHT_ARROW, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
}
};
keyboard_keymap_overlay_values g713rw_lightbar_layout
{
KEYBOARD_SIZE_EMPTY,
{
{ /* Values not set in empty keyboard */ },
{
/* Add more regional layout fixes here */
}
},
{
/*-------------------------------------------------------------------------------------------------------------------------------------*\
| Edit Keys |
| Zone, Row, Column, Value, Key, Alternate Name, OpCode, |
\*-------------------------------------------------------------------------------------------------------------------------------------*/
{ 0, 0, 0, 174, "Lightbar L1", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Lightbar L1
{ 0, 0, 1, 173, "Lightbar L2", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Lightbar L2
{ 0, 0, 2, 172, "Lightbar L3", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Lightbar L3
{ 0, 0, 3, 171, "Lightbar R3", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Lightbar R3
{ 0, 0, 4, 170, "Lightbar R2", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Lightbar R2
{ 0, 0, 5, 169, "Lightbar R1", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Lightbar R1
}
};
keyboard_keymap_overlay_values g713rw_test_layout
{
KEYBOARD_SIZE_EMPTY,
{
{ /* Values not set in empty keyboard */ },
{
/* Add more regional layout fixes here */
}
},
{
/*-------------------------------------------------------------------------------------------------------------------------------------*\
| Edit Keys |
| Zone, Row, Column, Value, Key, Alternate Name, OpCode, |
\*-------------------------------------------------------------------------------------------------------------------------------------*/
{ 0, 0, 0, 7, "Test01", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 1, 8, "Test02", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 2, 9, "Test03", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 3, 10, "Test04", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 4, 11, "Test05", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 5, 12, "Test06", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 6, 13, "Test07", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 7, 14, "Test08", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 8, 15, "Test09", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 9, 16, "Test10", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 10, 17, "Test11", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 11, 18, "Test12", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 12, 19, "Test13", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 13, 20, "Test14", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 14, 22, "Test15", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 15, 27, "Test16", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 16, 55, "Test17", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 17, 57, "Test18", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 18, 58, "Test19", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 19, 77, "Test20", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 20, 78, "Test21", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 21, 79, "Test22", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 22, 96, "Test23", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 23, 97, "Test24", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 24, 99, "Test25", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 25, 100, "Test26", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 26, 104, "Test27", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 27, 117, "Test28", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 28, 118, "Test29", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 29, 120, "Test30", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 30, 121, "Test31", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 31, 130, "Test32", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 32, 132, "Test33", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 33, 133, "Test34", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 34, 134, "Test35", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 35, 138, "Test36", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 36, 140, "Test37", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 37, 141, "Test38", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 38, 142, "Test39", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 39, 143, "Test40", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 40, 146, "Test41", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 41, 147, "Test42", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 42, 148, "Test43", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 43, 149, "Test44", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 44, 150, "Test45", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 45, 151, "Test46", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 46, 152, "Test47", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 47, 153, "Test48", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 48, 154, "Test49", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 49, 155, "Test50", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 50, 156, "Test51", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 51, 157, "Test52", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 52, 158, "Test53", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 53, 162, "Test54", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 54, 163, "Test55", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 55, 164, "Test56", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 56, 165, "Test57", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 57, 166, "Test58", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 58, 167, "Test59", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
}
};
keyboard_keymap_overlay_values g733zm_layout
{
KEYBOARD_SIZE_FULL,
{
aura_core_laptop_17_values,
{
/* Add more regional layout fixes here */
}
},
{
/*-------------------------------------------------------------------------------------------------------------------------------------*\
| Edit Keys |
| Zone, Row, Column, Value, Key, Alternate Name, OpCode, |
\*-------------------------------------------------------------------------------------------------------------------------------------*/
}
};
keyboard_keymap_overlay_values g814jv_keyboard_layout
{
KEYBOARD_SIZE_FULL,
{
aura_core_laptop_18_values,
{
/* Add more regional layout fixes here */
}
},
{
/*------------------------------------------------------------------------------------------------------------------------------------*\
| Edit Keys |
| Zone, Row, Column, Value, Key, Alternate Name, OpCode, |
\*-------------------------------------------------------------------------------------------------------------------------------------*/
{ 0, 0, 2, 2, KEY_EN_MEDIA_VOLUME_DOWN, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_ROW, }, // Insert Row and add Volume Down
{ 0, 0, 3, 3, KEY_EN_MEDIA_VOLUME_UP, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Volume Up
{ 0, 0, 4, 4, KEY_EN_MEDIA_MUTE, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Mute
{ 0, 0, 5, 5, "Key: Fan", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert "Fan" key
{ 0, 0, 6, 6, "Key: ROG", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert "ROG" key
{ 0, 6, 8, 0, KEY_EN_UNUSED, KEY_EN_UNUSED, KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT, }, // Remove part of Spacebar
{ 0, 6, 8, 0, KEY_EN_UNUSED, KEY_EN_UNUSED, KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT, }, // Remove part of Spacebar
{ 0, 6, 1, 127, KEY_EN_LEFT_FUNCTION, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Left Fuction
{ 0, 6, 10, 136, KEY_EN_PRINT_SCREEN, KEY_EN_UNUSED, KEYBOARD_OPCODE_SWAP_ONLY, }, // Replace Right Fuction with PrtSc
{ 0, 6, 11, 0, KEY_EN_RIGHT_WINDOWS, KEY_EN_UNUSED, KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT, }, // Remove Right Win Key
{ 0, 1, 14, 0, KEY_EN_UNUSED, KEY_EN_UNUSED, KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT, },
{ 0, 1, 14, 38, KEY_EN_DELETE, KEY_EN_UNUSED, KEYBOARD_OPCODE_SWAP_ONLY, }, // Insert a Delete key
{ 0, 1, 16, 40, KEY_EN_PRINT_SCREEN, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert a Print Screen key
{ 0, 1, 17, 41, KEY_EN_HOME, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert a Home key
{ 0, 2, 14, 0, KEY_EN_UNUSED, KEY_EN_UNUSED, KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT, },
{ 0, 2, 14, 0, KEY_EN_UNUSED, KEY_EN_UNUSED, KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT, },
{ 0, 2, 14, 0, KEY_EN_UNUSED, KEY_EN_UNUSED, KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT, },
{ 0, 3, 13, 76, KEY_EN_ANSI_BACK_SLASH, KEY_EN_UNUSED, KEYBOARD_OPCODE_SWAP_ONLY, }, // Force ANSI | even on ISO layouts
{ 0, 3, 14, 0, KEY_EN_UNUSED, KEY_EN_UNUSED, KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT, },
{ 0, 3, 14, 0, KEY_EN_UNUSED, KEY_EN_UNUSED, KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT, }, // Numpad gap
{ 0, 3, 14, 0, KEY_EN_UNUSED, KEY_EN_UNUSED, KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT, },
{ 0, 4, 14, 0, KEY_EN_UNUSED, KEY_EN_UNUSED, KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT, },
{ 0, 4, 14, 0, KEY_EN_UNUSED, KEY_EN_UNUSED, KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT, },
{ 0, 4, 14, 0, KEY_EN_UNUSED, KEY_EN_UNUSED, KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT, },
{ 0, 5, 12, 0, KEY_EN_UNUSED, KEY_EN_UNUSED, KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT, },
{ 0, 5, 13, 0, KEY_EN_UNUSED, KEY_EN_UNUSED, KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT, },
{ 0, 5, 14, 0, KEY_EN_UNUSED, KEY_EN_UNUSED, KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT, },
{ 0, 6, 15, 0, KEY_EN_UNUSED, KEY_EN_UNUSED, KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT, },
}
};
keyboard_keymap_overlay_values g814jv_lightbar_layout
{
KEYBOARD_SIZE_EMPTY,
{
{ /* Values not set in empty keyboard */ },
{
/* Add more regional layout fixes here */
}
},
{
/*-------------------------------------------------------------------------------------------------------------------------------------*\
| Edit Keys |
| Zone, Row, Column, Value, Key, Alternate Name, OpCode, |
\*-------------------------------------------------------------------------------------------------------------------------------------*/
{ 0, 0, 0, 173, "Lightbar L1", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Lightbar L1
{ 0, 0, 1, 172, "Lightbar L2", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Lightbar L2
{ 0, 0, 2, 170, "Lightbar R2", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Lightbar R2
{ 0, 0, 3, 169, "Lightbar R1", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Lightbar R2
}
};
/*-------------------------------------------------------------------------*\
| AURA CORE LAPTOP DEVICES |
\*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------*\
| ASUS ROG Strix SCAR 15 G533ZM |
| |
| Zone "Keyboard" |
| Matrix |
| 7 Rows, 16 Columns |
\*-------------------------------------------------------------*/
static const aura_core_laptop_zone g533zm_zone =
{
ZONE_EN_KEYBOARD,
&g533zm_layout
};
static const aura_core_laptop_device g533zm_device =
{
"G533ZM",
{
&g533zm_zone,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr
}
};
/*-------------------------------------------------------------*\
| ASUS ROG Strix SCAR 15 G533ZW |
| |
| Zone "Keyboard" |
| Matrix |
| 7 Rows, 16 Columns |
\*-------------------------------------------------------------*/
static const aura_core_laptop_zone g533zw_lid_zone =
{
"Lid",
&g533zw_lid_layout
};
static const aura_core_laptop_zone g533zw_kb_zone =
{
ZONE_EN_KEYBOARD,
&g533zw_layout
};
static const aura_core_laptop_zone g533zw_lightbar_zone =
{
"Lightbar",
&g533zw_lightbar_layout
};
static const aura_core_laptop_device g533zw_device =
{
"G533ZW",
{
&g533zw_kb_zone,
&g533zw_lid_zone,
&g533zw_lightbar_zone,
nullptr,
nullptr,
nullptr
}
};
/*-------------------------------------------------------------*\
| ASUS ROG Strix SCAR G713RW |
| |
| Zone "Keyboard" |
| Matrix |
| 7 Rows, 20 Columns |
\*-------------------------------------------------------------*/
static const aura_core_laptop_zone g713rw_keyboard_zone =
{
ZONE_EN_KEYBOARD,
&g713rw_keyboard_layout
};
static const aura_core_laptop_zone g713rw_lightbar_zone =
{
"Lightbar",
&g713rw_lightbar_layout
};
static const aura_core_laptop_device g713rw_device =
{
"G713RW",
{
&g713rw_keyboard_zone,
&g713rw_lightbar_zone,
nullptr,
nullptr,
nullptr,
nullptr
}
};
/*-------------------------------------------------------------*\
| ASUS ROG Strix G18 (G814JV) |
| |
| Zone "Keyboard" |
| Matrix |
| 7 Rows, 16 Columns |
\*-------------------------------------------------------------*/
static const aura_core_laptop_zone g814rw_keyboard_zone =
{
ZONE_EN_KEYBOARD,
&g814jv_keyboard_layout
};
static const aura_core_laptop_zone g814jv_lightbar_zone =
{
"Lightbar",
&g814jv_lightbar_layout
};
static const aura_core_laptop_device g814jv_device =
{
"G814JV",
{
&g814rw_keyboard_zone,
&g814jv_lightbar_zone,
nullptr,
nullptr,
nullptr,
nullptr
}
};
/*-------------------------------------------------------------------------*\
| DEVICE MASTER LIST |
\*-------------------------------------------------------------------------*/
const aura_core_laptop_device* aura_core_laptop_device_list_data[] =
{
/*-----------------------------------------------------------------*\
| KEYBOARDS |
\*-----------------------------------------------------------------*/
&g533zm_device,
&g533zw_device,
&g713rw_device,
&g814jv_device,
};
const unsigned int AURA_CORE_LAPTOP_DEVICE_COUNT = (sizeof(aura_core_laptop_device_list_data) / sizeof(aura_core_laptop_device_list_data[ 0 ]));
const aura_core_laptop_device** aura_core_laptop_device_list = aura_core_laptop_device_list_data;
@@ -0,0 +1,50 @@
#pragma once
#include <string>
#include <vector>
#include "RGBController.h"
#include "RGBControllerKeyNames.h"
#include "KeyboardLayoutManager.h"
#define AURA_CORE_LAPTOP_ZONES_MAX 6
enum aura_core_kb_layout
{
AURA_CORE_LAPTOP_KB_LAYOUT_ANSI = 0x01, /* US ANSI Layout */
AURA_CORE_LAPTOP_KB_LAYOUT_ISO = 0x02, /* EURO ISO Layout */
AURA_CORE_LAPTOP_KB_LAYOUT_ABNT = 0x03, /* Brazilian Layout */
AURA_CORE_LAPTOP_KB_LAYOUT_JIS = 0x04, /* Japanese Layout */
};
typedef struct
{
std::string name;
keyboard_keymap_overlay_values* layout_new;
} aura_core_laptop_zone;
typedef struct
{
uint8_t zone;
uint8_t row;
uint8_t col;
uint8_t index;
const char* name;
} aura_core_laptop_led;
typedef struct
{
std::string dmi_name;
const aura_core_laptop_zone* zones[AURA_CORE_LAPTOP_ZONES_MAX];
} aura_core_laptop_device;
/*-----------------------------------------------------*\
| Aura Core Laptop Protocol Keyboards |
\*-----------------------------------------------------*/
#define AURA_STRIX_SCAR_15_PID 0x19B6
/*-----------------------------------------------------*\
| These constant values are defined in |
| AsusAuraCoreLaptopDevices.cpp |
\*-----------------------------------------------------*/
extern const unsigned int AURA_CORE_LAPTOP_DEVICE_COUNT;
extern const aura_core_laptop_device** aura_core_laptop_device_list;
@@ -11,129 +11,6 @@
#include "RGBController_AsusAuraCoreLaptop.h"
static unsigned int matrix_map[ASUSAURACORELAPTOP_KEY_HEIGHT][ASUSAURACORELAPTOP_KEY_WIDTH] =
{
{ NA, NA, 86, 87, 88, 89, 90, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA },
{ 0, NA, 1, 2, 3, 4, NA, 5, 6, 7, 8, NA, 9, 10, 11, 12, 13, NA },
{ 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, NA },
{ 31, NA, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, NA, 45, NA },
{ 46, NA, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, NA, 58, NA, 59, NA },
{ 60, NA, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, NA, 72, NA, 73, NA },
{ 74, 75, 76, 77, NA, NA, NA, 78, NA, NA, NA, 79, 80, 81, 82, 83, 84, 85 }
};
static const char *led_names[] =
{
KEY_EN_ESCAPE, //00
KEY_EN_F1,
KEY_EN_F2,
KEY_EN_F3,
KEY_EN_F4,
KEY_EN_F5,
KEY_EN_F6,
KEY_EN_F7,
KEY_EN_F8,
KEY_EN_F9,
KEY_EN_F10, //10
KEY_EN_F11,
KEY_EN_F12,
KEY_EN_DELETE,
KEY_EN_BACK_TICK,
KEY_EN_1,
KEY_EN_2,
KEY_EN_3,
KEY_EN_4,
KEY_EN_5,
KEY_EN_6, //20
KEY_EN_7,
KEY_EN_8,
KEY_EN_9,
KEY_EN_0,
KEY_EN_MINUS,
KEY_EN_EQUALS,
KEY_EN_BACKSPACE,
KEY_EN_BACKSPACE,
KEY_EN_BACKSPACE,
KEY_EN_MEDIA_PLAY_PAUSE, //30
KEY_EN_TAB,
KEY_EN_Q,
KEY_EN_W,
KEY_EN_E,
KEY_EN_R,
KEY_EN_T,
KEY_EN_Y,
KEY_EN_U,
KEY_EN_I,
KEY_EN_O, //40
KEY_EN_P,
KEY_EN_LEFT_BRACKET,
KEY_EN_RIGHT_BRACKET,
KEY_EN_ANSI_BACK_SLASH,
KEY_EN_MEDIA_STOP,
KEY_EN_CAPS_LOCK,
KEY_EN_A,
KEY_EN_S,
KEY_EN_D,
KEY_EN_F, //50
KEY_EN_G,
KEY_EN_H,
KEY_EN_J,
KEY_EN_K,
KEY_EN_L,
KEY_EN_SEMICOLON,
KEY_EN_QUOTE,
KEY_EN_ANSI_ENTER,
KEY_EN_MEDIA_PREVIOUS,
KEY_EN_LEFT_SHIFT, //60
KEY_EN_Z,
KEY_EN_X,
KEY_EN_C,
KEY_EN_V,
KEY_EN_B,
KEY_EN_N,
KEY_EN_M,
KEY_EN_COMMA,
KEY_EN_PERIOD,
KEY_EN_FORWARD_SLASH, //70
KEY_EN_RIGHT_SHIFT,
KEY_EN_UP_ARROW,
KEY_EN_MEDIA_NEXT,
KEY_EN_LEFT_CONTROL,
KEY_EN_LEFT_FUNCTION,
KEY_EN_LEFT_WINDOWS,
KEY_EN_LEFT_ALT,
KEY_EN_SPACE,
KEY_EN_RIGHT_ALT,
KEY_EN_RIGHT_CONTROL, //80
KEY_EN_LEFT_ARROW,
KEY_EN_DOWN_ARROW,
KEY_EN_RIGHT_ARROW,
KEY_EN_PRINT_SCREEN,
"Asus Keystone",
KEY_EN_MEDIA_VOLUME_DOWN,
KEY_EN_MEDIA_VOLUME_UP,
"Key: Mic On/Off",
"Key: HyperFan",
"Key: Armoury Crate", //90
"Lightbar LED 1",
"Lightbar LED 2",
"Lightbar LED 3",
"Lightbar LED 4",
"Lightbar LED 5",
"Lightbar LED 6",
"Logo",
"Lid Left",
"Lid Right", //99
};
/**------------------------------------------------------------------*\
@name AsusAuraCoreLaptop
@category DEVICE_TYPE_KEYBOARD
@@ -150,23 +27,32 @@ static const char *led_names[] =
* Awake (Normal Usage)
* Sleeping
* Shutdown / Power Off
MatrixMaps can be found in ArmouryCrate (it needs a chance to download device data)
Default path is:
C:\ProgramData\ASUS\ROG Live Service\DeviceContent\<Model name>\<Model name>.csv
(Model name is the code like G814JV - can be found in the error in logs)
\*-------------------------------------------------------------------*/
RGBController_AsusAuraCoreLaptop::RGBController_AsusAuraCoreLaptop(AsusAuraCoreLaptopController *controller_ptr)
{
controller = controller_ptr;
controller = controller_ptr;
const aura_core_laptop_device* aura_dev = controller->GetDeviceData();
name = "Asus Aura Core Laptop";
vendor = "Asus";
type = DEVICE_TYPE_KEYBOARD;
description = controller->GetDeviceName();
serial = controller->GetSerial();
location = controller->GetLocation();
name = aura_dev->dmi_name;
vendor = "Asus";
type = DEVICE_TYPE_LAPTOP;
description = controller->GetDeviceDescription();
serial = controller->GetSerial();
location = controller->GetLocation();
mode Direct;
Direct.name = "Direct";
Direct.value = ASUSAURACORELAPTOP_MODE_DIRECT;
Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR;
Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS;
Direct.brightness_min = ASUSAURACORELAPTOP_BRIGHTNESS_MIN;
Direct.brightness_max = ASUSAURACORELAPTOP_BRIGHTNESS_MAX;
Direct.brightness = ASUSAURACORELAPTOP_BRIGHTNESS_MAX;
Direct.color_mode = MODE_COLORS_PER_LED;
modes.push_back(Direct);
@@ -375,8 +261,9 @@ RGBController_AsusAuraCoreLaptop::RGBController_AsusAuraCoreLaptop(AsusAuraCoreL
Off.color_mode = MODE_COLORS_NONE;
modes.push_back(Off);
Init_Controller();
SetupZones();
SetMode(active_mode);
}
RGBController_AsusAuraCoreLaptop::~RGBController_AsusAuraCoreLaptop()
@@ -384,70 +271,131 @@ RGBController_AsusAuraCoreLaptop::~RGBController_AsusAuraCoreLaptop()
delete controller;
}
void RGBController_AsusAuraCoreLaptop::Init_Controller()
{
/*-------------------------------------------------*\
| Create the keyboard zone and add the matix map |
\*-------------------------------------------------*/
zone KB_zone;
KB_zone.name = "Keyboard Zone";
KB_zone.type = ZONE_TYPE_MATRIX;
KB_zone.leds_min = ASUSAURACORELAPTOP_KEYCOUNT;
KB_zone.leds_max = ASUSAURACORELAPTOP_KEYCOUNT;
KB_zone.leds_count = ASUSAURACORELAPTOP_KEYCOUNT;
KB_zone.matrix_map = new matrix_map_type;
KB_zone.matrix_map->height = ASUSAURACORELAPTOP_KEY_HEIGHT;
KB_zone.matrix_map->width = ASUSAURACORELAPTOP_KEY_WIDTH;
KB_zone.matrix_map->map = (unsigned int *)&matrix_map;
zones.push_back(KB_zone);
zone lightbar;
lightbar.name = "Lightbar Zone";
lightbar.type = ZONE_TYPE_LINEAR;
lightbar.leds_min = ASUSAURACORELAPTOP_LIGHTBARCOUNT;
lightbar.leds_max = ASUSAURACORELAPTOP_LIGHTBARCOUNT;
lightbar.leds_count = ASUSAURACORELAPTOP_LIGHTBARCOUNT;
lightbar.matrix_map = NULL;
zones.push_back(lightbar);
zone lid;
lid.name = "Lid Zone";
lid.type = ZONE_TYPE_LINEAR;
lid.leds_min = ASUSAURACORELAPTOP_LIDCOUNT;
lid.leds_max = ASUSAURACORELAPTOP_LIDCOUNT;
lid.leds_count = ASUSAURACORELAPTOP_LIDCOUNT;
lid.matrix_map = NULL;
zones.push_back(lid);
}
void RGBController_AsusAuraCoreLaptop::SetupZones()
{
/*-------------------------------------------------*\
| Clear any existing color/LED configuration |
\*-------------------------------------------------*/
leds.clear();
colors.clear();
std::string physical_size;
KEYBOARD_LAYOUT new_layout;
unsigned int max_led_value = 0;
const aura_core_laptop_device* aura_dev = controller->GetDeviceData();
unsigned int layout = controller->GetKeyboardLayout();
switch(layout)
{
case ASUSAURACORELAPTOP_LAYOUT_ISO:
new_layout = KEYBOARD_LAYOUT_ISO_QWERTY;
break;
case ASUSAURACORELAPTOP_LAYOUT_ANSI:
default:
new_layout = KEYBOARD_LAYOUT_ANSI_QWERTY;
break;
}
LOG_DEBUG("[%s] layout set as %d", description.c_str(), new_layout);
/*---------------------------------------------------------*\
| Set up zones |
| Fill in zones from the device data |
\*---------------------------------------------------------*/
for(std::size_t zone_index = 0; zone_index < zones.size(); zone_index++)
for(size_t i = 0; i < AURA_CORE_LAPTOP_ZONES_MAX; i++)
{
int zone_offset = (int)leds.size();
LOG_DEBUG("[%s] setting up zone %d", description.c_str(), i);
for(unsigned int led_index = 0; led_index < zones[zone_index].leds_count; led_index++)
if(aura_dev->zones[i] == NULL)
{
led new_led;
new_led.value = led_index + zone_offset;
new_led.name = led_names[new_led.value];
leds.push_back(new_led);
break;
}
else
{
zone new_zone;
new_zone.name = aura_dev->zones[i]->name;
if(aura_dev->zones[i]->layout_new != NULL)
{
KeyboardLayoutManager new_kb(new_layout,
aura_dev->zones[i]->layout_new->base_size,
aura_dev->zones[i]->layout_new->key_values);
if(aura_dev->zones[i]->layout_new->base_size != KEYBOARD_SIZE_EMPTY ||
aura_dev->zones[i]->layout_new->edit_keys.size() > 0)
{
/*---------------------------------------------------------*\
| Minor adjustments to keyboard layout |
\*---------------------------------------------------------*/
keyboard_keymap_overlay_values* temp = aura_dev->zones[i]->layout_new;
new_kb.ChangeKeys(*temp);
if(new_kb.GetRowCount() == 1 || new_kb.GetColumnCount() == 1)
{
if(new_kb.GetKeyCount() == 1)
{
new_zone.type = ZONE_TYPE_SINGLE;
}
else
{
new_zone.type = ZONE_TYPE_LINEAR;
}
}
else
{
new_zone.type = ZONE_TYPE_MATRIX;
matrix_map_type * new_map = new matrix_map_type;
new_zone.matrix_map = new_map;
/*---------------------------------------------------------*\
| Trusting the layout handed to the KLM is correct use the |
| row & column counts to set the matrix height & width |
\*---------------------------------------------------------*/
new_map->height = new_kb.GetRowCount();
new_map->width = new_kb.GetColumnCount();
new_map->map = new unsigned int[new_map->height * new_map->width];
new_kb.GetKeyMap(new_map->map, KEYBOARD_MAP_FILL_TYPE_COUNT);
}
/*---------------------------------------------------------*\
| Create LEDs for the Matrix zone |
| Place keys in the layout to populate the matrix |
\*---------------------------------------------------------*/
new_zone.leds_count = new_kb.GetKeyCount();
for(unsigned int led_idx = 0; led_idx < new_zone.leds_count; led_idx++)
{
led new_led;
new_led.name = new_kb.GetKeyNameAt(led_idx);
new_led.value = new_kb.GetKeyValueAt(led_idx);
max_led_value = std::max(max_led_value, new_led.value);
leds.push_back(new_led);
}
}
/*---------------------------------------------------------*\
| Add 1 the max_led_value to account for the 0th index |
\*---------------------------------------------------------*/
max_led_value++;
}
LOG_DEBUG("[%s] Creating a %s zone: %s with %d LEDs", name.c_str(),
((new_zone.type == ZONE_TYPE_MATRIX) ? "matrix": "linear"),
new_zone.name.c_str(), new_zone.leds_count);
new_zone.leds_min = new_zone.leds_count;
new_zone.leds_max = new_zone.leds_count;
zones.push_back(new_zone);
}
}
SetupColors();
/*---------------------------------------------------------*\
| Create a buffer map of pointers which contains the |
| layout order of colors the device expects. |
\*---------------------------------------------------------*/
buffer_map.resize(max_led_value, &null_color);
for(size_t led_idx = 0; led_idx < leds.size(); led_idx++)
{
buffer_map[leds[led_idx].value] = &colors[led_idx];
}
}
void RGBController_AsusAuraCoreLaptop::ResizeZone(int /*zone*/, int /*new_size*/)
@@ -459,36 +407,35 @@ void RGBController_AsusAuraCoreLaptop::ResizeZone(int /*zone*/, int /*new_size*/
void RGBController_AsusAuraCoreLaptop::DeviceUpdateLEDs()
{
controller->SetLedsDirect(colors);
}
void RGBController_AsusAuraCoreLaptop::UpdateZoneLEDs(int zone)
{
std::vector<RGBColor> colour;
for(size_t i = 0; i < zones[zone].leds_count; i++)
for(size_t i = 85; i < leds.size(); i++)
{
colour.push_back(zones[zone].colors[i]);
LOG_DEBUG("[%s] Setting %s @ LED index %d and buffer index %d to R: %02X G: %02X B: %02X",
name.c_str(),
leds[i].name.c_str(),
i,
leds[i].value,
RGBGetRValue(colors[i]),
RGBGetGValue(colors[i]),
RGBGetBValue(colors[i]));
}
controller->SetLedsDirect(colour);
controller->SetLedsDirect(buffer_map);
}
void RGBController_AsusAuraCoreLaptop::UpdateSingleLED(int led)
void RGBController_AsusAuraCoreLaptop::UpdateZoneLEDs(int /*zone*/)
{
std::vector<RGBColor> colour;
colour.push_back(colors[led]);
controller->SetLedsDirect(buffer_map);
}
controller->SetLedsDirect(colour);
void RGBController_AsusAuraCoreLaptop::UpdateSingleLED(int /*led*/)
{
controller->SetLedsDirect(buffer_map);
}
void RGBController_AsusAuraCoreLaptop::DeviceUpdateMode()
{
mode set_mode = modes[active_mode];
if(set_mode.value == ASUSAURACORELAPTOP_MODE_DIRECT)
{
return;
}
uint8_t random = (set_mode.color_mode == MODE_COLORS_RANDOM) ? 0xFF : 0;
RGBColor color1 = (set_mode.colors.size() > 0) ? set_mode.colors[0] : 0;
RGBColor color2 = (set_mode.colors.size() > 1) ? set_mode.colors[1] : 0;
@@ -11,6 +11,7 @@
#pragma once
#include <algorithm>
#include <vector>
#include "RGBController.h"
#include "AsusAuraCoreLaptopController.h"
@@ -31,7 +32,8 @@ public:
void DeviceUpdateMode();
private:
void Init_Controller();
RGBColor null_color = 0;
std::vector<RGBColor *> buffer_map;
AsusAuraCoreLaptopController* controller;
AsusAuraCoreLaptopController* controller;
};
@@ -9,13 +9,9 @@
| SPDX-License-Identifier: GPL-2.0-only |
\*---------------------------------------------------------*/
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include "Detector.h"
#include "AsusAuraGPUController.h"
#include "LogManager.h"
#include "RGBController.h"
#include "RGBController_AsusAuraGPU.h"
#include "i2c_smbus.h"
#include "pci_ids.h"
@@ -69,76 +65,84 @@ void DetectAsusAuraGPUControllers(i2c_smbus_interface* bus, uint8_t i2c_addr, co
} /* DetectAsusAuraGPUControllers() */
/*-----------------------------------------*\
| NVidia GPUs |
| Nvidia GPUs |
\*-----------------------------------------*/
REGISTER_I2C_PCI_DETECTOR("ASUS ROG Strix GTX 1050 O2G Gaming" , DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_GTX1050_DEV, ASUS_SUB_VEN, ASUS_GTX1050_STRIX_O2G_GAMING, 0x29);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG Strix GTX 1050 Ti 4G Gaming" , DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_GTX1050TI_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_GTX1050TI_4G_GAMING, 0x29);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG Strix GTX 1050 Ti O4G Gaming" , DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_GTX1050TI_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_GTX1050TI_O4G_GAMING, 0x29);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG Strix GTX 1050 Ti O4G Gaming" , DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_GTX1050TI_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_GTX1050TI_O4G_GAMING_2, 0x29);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG GTX 1060 Strix 6G Gaming" , DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_GTX1060_DEV, ASUS_SUB_VEN, ASUS_GTX1060_STRIX_6G_GAMING, 0x29);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG GTX 1060 Strix" , DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_GTX1060_DEV, ASUS_SUB_VEN, ASUS_GTX1060_STRIX, 0x29);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG GTX 1070 Strix Gaming" , DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_GTX1070_DEV, ASUS_SUB_VEN, ASUS_GTX1070_STRIX_GAMING, 0x29);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG GTX 1070 Strix OC" , DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_GTX1070_DEV, ASUS_SUB_VEN, ASUS_GTX1070_STRIX_OC, 0x29);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG Strix GTX 1070 Ti 8G Gaming" , DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_GTX1070TI_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_GTX1070TI_8G_GAMING, 0x29);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG Strix GTX 1070 Ti A8G Gaming" , DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_GTX1070TI_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_GTX1070TI_A8G_GAMING, 0x29);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG GTX 1080 Strix OC" , DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_GTX1080_DEV, ASUS_SUB_VEN, ASUS_GTX1080_STRIX, 0x29);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG Strix GTX 1080 A8G Gaming" , DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_GTX1080_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_GTX1080_A8G_GAMING, 0x29);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG Strix GTX 1080 O8G Gaming" , DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_GTX1080_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_GTX1080_O8G_GAMING, 0x29);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG Strix GTX 1080 O8G 11Gbps" , DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_GTX1080_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_GTX1080_O8G_11GBPS, 0x29);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG Strix GTX 1080 Ti Gaming" , DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_GTX1080TI_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_GTX1080TI_GAMING, 0x29);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG Strix GTX 1080 Ti 11G Gaming" , DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_GTX1080TI_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_GTX1080TI_11G_GAMING, 0x29);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG Strix GTX 1080 Ti O11G Gaming" , DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_GTX1080TI_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_GTX1080TI_O11G_GAMING, 0x29);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG Strix GTX 1080 Ti O11G Gaming" , DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_GTX1080TI_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_GTX1080TI_O11G_GAMING_A02, 0x29);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG Strix GTX 1650 SUPER A4G Gaming" , DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_GTX1650S_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_GTX1650S_A4G_GAMING, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG Strix GTX 1650 SUPER OC 4G" , DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_GTX1650S_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_GTX1650S_OC, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG Strix GTX 1660 SUPER O6G Gaming" , DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_GTX1660S_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_GTX1660S_O6G_GAMING, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG Strix GTX 1660 SUPER 6G Gaming" , DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_GTX1660S_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_GTX1660S_6G_GAMING, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG Strix GTX 1660 Ti OC 6G" , DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_GTX1660TI_DEV, ASUS_SUB_VEN, ASUS_ROG_GTX1660TI_OC, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX RTX 2060 EVO Gaming 6G" , DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_RTX2060_TU106_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_RTX2060_EVO_GAMING, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX RTX 2060 O6G Gaming" , DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_RTX2060_TU106_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_RTX2060_O6G_GAMING, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX RTX 2060 O6G Gaming" , DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_RTX2060_TU106_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_RTX2060_O6G_GAMING_86D2, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX RTX 2060 O6G EVO Gaming" , DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_RTX2060_TU104_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_RTX2060_O6G_EVO_GAMING, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX RTX 2060 SUPER 8G Gaming" , DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_RTX2060S_OC_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_RTX2060S_8G_GAMING, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX RTX 2060 SUPER A8G EVO Gaming" , DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_RTX2060S_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_RTX2060S_A8G_EVO_GAMING, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX RTX 2060 SUPER O8G Gaming" , DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_RTX2060S_OC_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_RTX2060S_O8G_GAMING, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX RTX 2060 SUPER A8G Gaming" , DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_RTX2060S_OC_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_RTX2060S_A8G_GAMING, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX RTX 2070 A8G Gaming" , DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_RTX2070_OC_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_RTX2070_A8G_GAMING, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX RTX 2070 O8G Gaming" , DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_RTX2070_OC_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_RTX2070_O8G_GAMING, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX RTX 2070 SUPER A8G Gaming" , DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_RTX2070S_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_RTX2070S_A8G_GAMING_86FF, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX RTX 2070 SUPER A8G Gaming" , DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_RTX2070S_OC_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_RTX2070S_A8G_GAMING, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX RTX 2070 SUPER A8G Gaming" , DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_RTX2070S_OC_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_RTX2070S_A8G_GAMING_8706, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX RTX 2070 SUPER O8G Gaming" , DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_RTX2070S_OC_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_RTX2070S_O8G_GAMING_8729, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX RTX 2070 SUPER 8G Gaming" , DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_RTX2070S_OC_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_RTX2070S_8G_GAMING_8707, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX RTX 2070 SUPER O8G Gaming" , DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_RTX2070S_OC_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_RTX2070S_O8G_GAMING, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX RTX 2080 8G Gaming" , DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_RTX2080_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_RTX2080_8G_GAMING, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX RTX 2080 O8G Gaming" , DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_RTX2080_A_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_RTX2080_O8G_GAMING, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX RTX 2080 O8G V2 Gaming" , DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_RTX2080_A_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_RTX2080_O8G_V2_GAMING, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX RTX 2080 SUPER A8G Gaming" , DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_RTX2080S_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_RTX2080S_A8G_GAMING, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX RTX 2080 SUPER O8G Gaming" , DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_RTX2080S_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_RTX2080S_O8G_GAMING, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX RTX 2080 SUPER O8G White" , DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_RTX2080S_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_RTX2080S_O8G_WHITE, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX RTX 2080 Ti 11G Gaming" , DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_RTX2080TI_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_RTX2080TI_11G_GAMING, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX RTX 2080 Ti 11G Gaming" , DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_RTX2080TI_A_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_RTX2080TI_11G_GAMING_866C, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX RTX 2080 Ti A11G Gaming" , DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_RTX2080TI_A_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_RTX2080TI_A11G_GAMING, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX RTX 2080 Ti O11G Gaming" , DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_RTX2080TI_A_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_RTX2080TI_O11G_GAMING, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS TUF RTX 3060 Ti 8G Gaming OC" , DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_RTX3060TI_LHR_DEV, ASUS_SUB_VEN, ASUS_TUF_RTX_3060_TI_O8G_OC, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX GeForce GTX 1050 Gaming OC", DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_GTX1050_DEV, ASUS_SUB_VEN, ASUS_GTX1050_STRIX_O2G_GAMING, 0x29);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX GeForce GTX 1050 Ti Gaming", DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_GTX1050TI_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_GTX1050TI_4G_GAMING, 0x29);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX GeForce GTX 1050 Ti Gaming OC", DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_GTX1050TI_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_GTX1050TI_O4G_GAMING, 0x29);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX GeForce GTX 1050 Ti Gaming OC", DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_GTX1050TI_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_GTX1050TI_O4G_GAMING_2, 0x29);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX GeForce GTX 1060 Gaming", DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_GTX1060_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_GTX1060_6G_GAMING, 0x29);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX GeForce GTX 1060 Gaming", DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_GTX1060_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_GTX1060, 0x29);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX GeForce GTX 1070 Gaming", DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_GTX1070_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_GTX1070_8G_GAMING, 0x29);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX GeForce GTX 1070 Gaming OC", DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_GTX1070_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_GTX1070_O8G_GAMING, 0x29);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX GeForce GTX 1070 OC", DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_GTX1070_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_GTX1070_OC, 0x29);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX GeForce GTX 1070 Ti Gaming", DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_GTX1070TI_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_GTX1070TI_8G_GAMING, 0x29);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX GeForce GTX 1070 A8G Ti Gaming", DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_GTX1070TI_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_GTX1070TI_A8G_GAMING, 0x29);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX GeForce GTX 1080 Gaming OC", DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_GTX1080_DEV, ASUS_SUB_VEN, ASUS_GTX1080_STRIX, 0x29);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX GeForce GTX 1080 A8G Gaming", DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_GTX1080_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_GTX1080_A8G_GAMING, 0x29);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX GeForce GTX 1080 Gaming OC", DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_GTX1080_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_GTX1080_O8G_GAMING, 0x29);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX GeForce GTX 1080 Gaming OC 11Gbps", DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_GTX1080_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_GTX1080_O8G_11GBPS, 0x29);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX GeForce GTX 1080 Ti Gaming", DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_GTX1080TI_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_GTX1080TI_GAMING, 0x29);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX GeForce GTX 1080 Ti Gaming", DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_GTX1080TI_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_GTX1080TI_11G_GAMING, 0x29);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX GeForce GTX 1080 Ti Gaming OC", DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_GTX1080TI_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_GTX1080TI_O11G_GAMING, 0x29);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX GeForce GTX 1080 Ti Gaming OC", DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_GTX1080TI_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_GTX1080TI_O11G_GAMING_A02, 0x29);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG Poseidon GeForce GTX 1080 Ti", DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_GTX1080TI_DEV, ASUS_SUB_VEN, ASUS_ROG_POSEIDON_GTX1080TI, 0x29);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX GeForce GTX 1650 SUPER A4G Gaming", DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_GTX1650S_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_GTX1650S_A4G_GAMING, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX GeForce GTX 1650 SUPER Gaming OC", DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_GTX1650S_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_GTX1650S_OC, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX GeForce GTX 1660 SUPER Gaming OC", DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_GTX1660S_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_GTX1660S_O6G_GAMING, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX GeForce GTX 1660 SUPER Gaming", DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_GTX1660S_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_GTX1660S_6G_GAMING, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX GeForce GTX 1660 Ti Gaming OC", DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_GTX1660TI_DEV, ASUS_SUB_VEN, ASUS_ROG_GTX1660TI_OC, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX GeForce RTX 2060 Gaming", DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_RTX2060_TU106_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_RTX2060_6G_GAMING, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX GeForce RTX 2060 Gaming OC", DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_RTX2060_TU106_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_RTX2060_O6G_GAMING, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX GeForce RTX 2060 Gaming OC", DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_RTX2060_TU106_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_RTX2060_O6G_GAMING_86D2, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX GeForce RTX 2060 EVO Gaming", DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_RTX2060_TU106_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_RTX2060_EVO_GAMING, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX GeForce RTX 2060 EVO V2 Gaming", DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_RTX2060_TU106_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_RTX2060_06G_EVO_V2_GAMING, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX GeForce RTX 2060 EVO Gaming OC", DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_RTX2060_TU104_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_RTX2060_O6G_EVO_GAMING, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX GeForce RTX 2060 SUPER Gaming", DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_RTX2060S_OC_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_RTX2060S_8G_GAMING, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX GeForce RTX 2060 SUPER A8G EVO Gaming", DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_RTX2060S_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_RTX2060S_A8G_EVO_GAMING, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX GeForce RTX 2060 SUPER Gaming OC", DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_RTX2060S_OC_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_RTX2060S_O8G_GAMING, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX GeForce RTX 2060 SUPER Gaming", DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_RTX2060S_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_RTX2060S_8G_GAMING_8702, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX GeForce RTX 2060 SUPER A8G Gaming", DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_RTX2060S_OC_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_RTX2060S_A8G_GAMING, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX GeForce RTX 2060 SUPER A8G Gaming", DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_RTX2060S_OC_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_RTX2060S_A8G_GAMING_86FD, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX GeForce RTX 2070 A8G Gaming", DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_RTX2070_OC_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_RTX2070_A8G_GAMING, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX GeForce RTX 2070 Gaming OC", DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_RTX2070_OC_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_RTX2070_O8G_GAMING, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX GeForce RTX 2070 SUPER A8G Gaming", DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_RTX2070S_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_RTX2070S_A8G_GAMING_86FF, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX GeForce RTX 2070 SUPER A8G Gaming", DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_RTX2070S_OC_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_RTX2070S_A8G_GAMING, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX GeForce RTX 2070 SUPER A8G Gaming", DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_RTX2070S_OC_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_RTX2070S_A8G_GAMING_8706, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX GeForce RTX 2070 SUPER Gaming OC", DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_RTX2070S_OC_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_RTX2070S_O8G_GAMING_8729, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX GeForce RTX 2070 SUPER Gaming", DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_RTX2070S_OC_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_RTX2070S_8G_GAMING_8707, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX GeForce RTX 2070 SUPER Gaming OC", DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_RTX2070S_OC_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_RTX2070S_O8G_GAMING, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX GeForce RTX 2080 Gaming", DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_RTX2080_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_RTX2080_8G_GAMING, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX GeForce RTX 2080 Gaming OC", DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_RTX2080_A_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_RTX2080_O8G_GAMING, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX GeForce RTX 2080 V2 Gaming OC", DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_RTX2080_A_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_RTX2080_O8G_V2_GAMING, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX GeForce RTX 2080 SUPER A8G Gaming", DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_RTX2080S_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_RTX2080S_A8G_GAMING, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX GeForce RTX 2080 SUPER Gaming OC", DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_RTX2080S_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_RTX2080S_O8G_GAMING, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX GeForce RTX 2080 SUPER White OC", DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_RTX2080S_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_RTX2080S_O8G_WHITE, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX GeForce RTX 2080 Ti Gaming", DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_RTX2080TI_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_RTX2080TI_11G_GAMING, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX GeForce RTX 2080 Ti Gaming", DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_RTX2080TI_A_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_RTX2080TI_11G_GAMING_866C, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX GeForce RTX 2080 Ti A11G Gaming", DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_RTX2080TI_A_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_RTX2080TI_A11G_GAMING, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX GeForce RTX 2080 Ti Gaming OC", DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_RTX2080TI_A_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_RTX2080TI_O11G_GAMING, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS TUF GeForce RTX 3060 Ti Gaming OC", DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_RTX3060TI_LHR_DEV, ASUS_SUB_VEN, ASUS_TUF_RTX_3060TI_O8G_OC, 0x2A);
/*-----------------------------------------*\
| AMD GPUs |
\*-----------------------------------------*/
REGISTER_I2C_PCI_DETECTOR("ASUS AREZ Strix RX Vega 56 O8G" , DetectAsusAuraGPUControllers, AMD_GPU_VEN, AMD_VEGA10_DEV, ASUS_SUB_VEN, ASUS_AREZ_STRIX_VEGA56_08G_GAMING, 0x29);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG Vega 64 Strix" , DetectAsusAuraGPUControllers, AMD_GPU_VEN, AMD_VEGA10_DEV, ASUS_SUB_VEN, ASUS_VEGA64_STRIX, 0x29);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG RX 5600 XT Strix O6G Gaming" , DetectAsusAuraGPUControllers, AMD_GPU_VEN, AMD_NAVI10_DEV, ASUS_SUB_VEN, ASUS_RX5600XT_STRIX_O6G_GAMING, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG RX 5700 XT Strix Gaming OC" , DetectAsusAuraGPUControllers, AMD_GPU_VEN, AMD_NAVI10_DEV, ASUS_SUB_VEN, ASUS_RX5700XT_STRIX_GAMING_OC, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG RX 5700 XT Strix 08G Gaming" , DetectAsusAuraGPUControllers, AMD_GPU_VEN, AMD_NAVI10_DEV, ASUS_SUB_VEN, ASUS_RX5700XT_STRIX_O8G_GAMING, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG RX 5700 XT Strix 08G Gaming" , DetectAsusAuraGPUControllers, AMD_GPU_VEN, AMD_NAVI10_DEV, ASUS_SUB_VEN, ASUS_RX5700XT_STRIX_O8G_GAMING_05C3, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX RX 470 O4G Gaming" , DetectAsusAuraGPUControllers, AMD_GPU_VEN, AMD_POLARIS_DEV, ASUS_SUB_VEN, ASUS_RX470_STRIX_O4G_GAMING, 0x29);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX RX 480 Gaming OC" , DetectAsusAuraGPUControllers, AMD_GPU_VEN, AMD_POLARIS_DEV, ASUS_SUB_VEN, ASUS_RX480_STRIX_GAMING_OC, 0x29);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX RX 560 Gaming" , DetectAsusAuraGPUControllers, AMD_GPU_VEN, AMD_POLARIS11, ASUS_SUB_VEN, ASUS_RX560_STRIX_4G_GAMING, 0x29);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX RX 560 Gaming" , DetectAsusAuraGPUControllers, AMD_GPU_VEN, AMD_POLARIS11, ASUS_SUB_VEN, ASUS_RX560_STRIX_4G_GAMING_04BE, 0x29);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG RX 570 Strix O4G Gaming OC" , DetectAsusAuraGPUControllers, AMD_GPU_VEN, AMD_POLARIS_DEV, ASUS_SUB_VEN, ASUS_RX570_STRIX_O4G_GAMING_OC, 0x29);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG RX 570 Strix O8G Gaming OC" , DetectAsusAuraGPUControllers, AMD_GPU_VEN, AMD_POLARIS_DEV, ASUS_SUB_VEN, ASUS_RX570_STRIX_O8G_GAMING_OC, 0x29);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG RX 580 Strix Gaming OC" , DetectAsusAuraGPUControllers, AMD_GPU_VEN, AMD_POLARIS_DEV, ASUS_SUB_VEN, ASUS_RX580_STRIX_GAMING_OC, 0x29);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG RX 580 Strix Gaming TOP" , DetectAsusAuraGPUControllers, AMD_GPU_VEN, AMD_POLARIS_DEV, ASUS_SUB_VEN, ASUS_RX580_STRIX_GAMING_TOP, 0x29);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX RX 590 Gaming" , DetectAsusAuraGPUControllers, AMD_GPU_VEN, AMD_POLARIS_DEV, ASUS_SUB_VEN, ASUS_RX590_STRIX_GAMING, 0x29);
REGISTER_I2C_PCI_DETECTOR("ASUS AREZ STRIX Radeon RX Vega 56 Gaming OC", DetectAsusAuraGPUControllers, AMD_GPU_VEN, AMD_VEGA10_DEV, ASUS_SUB_VEN, ASUS_AREZ_STRIX_VEGA56_08G_GAMING, 0x29);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX Radeon Vega 64", DetectAsusAuraGPUControllers, AMD_GPU_VEN, AMD_VEGA10_DEV, ASUS_SUB_VEN, ASUS_VEGA64_STRIX, 0x29);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX Radeon RX 470 Gaming OC", DetectAsusAuraGPUControllers, AMD_GPU_VEN, AMD_POLARIS_DEV, ASUS_SUB_VEN, ASUS_RX470_STRIX_O4G_GAMING, 0x29);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX Radeon RX 480 Gaming", DetectAsusAuraGPUControllers, AMD_GPU_VEN, AMD_POLARIS_DEV, ASUS_SUB_VEN, ASUS_RX480_STRIX_GAMING, 0x29);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX Radeon RX 480 Gaming OC", DetectAsusAuraGPUControllers, AMD_GPU_VEN, AMD_POLARIS_DEV, ASUS_SUB_VEN, ASUS_RX480_STRIX_GAMING_OC, 0x29);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX Radeon RX 560 Gaming", DetectAsusAuraGPUControllers, AMD_GPU_VEN, AMD_POLARIS11, ASUS_SUB_VEN, ASUS_RX560_STRIX_4G_GAMING, 0x29);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX Radeon RX 560 Gaming", DetectAsusAuraGPUControllers, AMD_GPU_VEN, AMD_POLARIS11, ASUS_SUB_VEN, ASUS_RX560_STRIX_4G_GAMING_04BE, 0x29);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX Radeon RX 570 Gaming OC", DetectAsusAuraGPUControllers, AMD_GPU_VEN, AMD_POLARIS_DEV, ASUS_SUB_VEN, ASUS_RX570_STRIX_O4G_GAMING_OC, 0x29);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX Radeon RX 570 Gaming OC", DetectAsusAuraGPUControllers, AMD_GPU_VEN, AMD_POLARIS_DEV, ASUS_SUB_VEN, ASUS_RX570_STRIX_O8G_GAMING_OC, 0x29);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX Radeon RX 580 Gaming OC", DetectAsusAuraGPUControllers, AMD_GPU_VEN, AMD_POLARIS_DEV, ASUS_SUB_VEN, ASUS_RX580_STRIX_GAMING_OC, 0x29);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX Radeon RX 580 Gaming TOP", DetectAsusAuraGPUControllers, AMD_GPU_VEN, AMD_POLARIS_DEV, ASUS_SUB_VEN, ASUS_RX580_STRIX_GAMING_TOP, 0x29);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX Radeon RX 590 Gaming", DetectAsusAuraGPUControllers, AMD_GPU_VEN, AMD_POLARIS_DEV, ASUS_SUB_VEN, ASUS_RX590_STRIX_GAMING, 0x29);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX Radeon RX 5600 XT Gaming OC", DetectAsusAuraGPUControllers, AMD_GPU_VEN, AMD_NAVI10_DEV, ASUS_SUB_VEN, ASUS_RX5600XT_STRIX_O6G_GAMING, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX Radeon RX 5700 Gaming OC", DetectAsusAuraGPUControllers, AMD_GPU_VEN, AMD_NAVI10_DEV, ASUS_SUB_VEN, ASUS_RX5700_STRIX_GAMING_OC, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX Radeon RX 5700 XT Gaming OC", DetectAsusAuraGPUControllers, AMD_GPU_VEN, AMD_NAVI10_DEV, ASUS_SUB_VEN, ASUS_RX5700XT_STRIX_GAMING_OC, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX Radeon RX 5700 XT Gaming OC", DetectAsusAuraGPUControllers, AMD_GPU_VEN, AMD_NAVI10_DEV, ASUS_SUB_VEN, ASUS_RX5700XT_STRIX_O8G_GAMING, 0x2A);
REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX Radeon RX 5700 XT Gaming OC", DetectAsusAuraGPUControllers, AMD_GPU_VEN, AMD_NAVI10_DEV, ASUS_SUB_VEN, ASUS_RX5700XT_STRIX_O8G_GAMING_05C3, 0x2A);
@@ -28,7 +28,7 @@ RGBController_AuraMonitor::RGBController_AuraMonitor(AuraMonitorController* cont
name = "ASUS Aura Monitor";
vendor = "ASUS";
type = DEVICE_TYPE_ACCESSORY;
type = DEVICE_TYPE_MONITOR;
description = "ASUS Aura Monitor Device";
location = controller->GetDeviceLocation();
serial = controller->GetSerialString();
@@ -55,6 +55,7 @@
#define AURA_ROG_KERIS_WIRELESS_AIMPOINT_2_4_PID 0x1A68
#define AURA_ROG_KERIS_WIRELESS_AIMPOINT_BT_PID 0x1A6A
#define AURA_TUF_M3_PID 0x1910
#define AURA_TUF_M3_GEN_II_PID 0x1A9B
#define AURA_TUF_M5_PID 0x1898
#define AURA_ROG_SPATHA_X_DOCK_FAKE_PID 0xFFFF
@@ -636,6 +637,20 @@ static std::map<int,mouse_type> aura_mouse_devices =
{ AURA_MOUSE_MODE_STATIC, AURA_MOUSE_MODE_BREATHING, AURA_MOUSE_MODE_SPECTRUM, AURA_MOUSE_MODE_REACTIVE }
}
},
{
AURA_TUF_M3_GEN_II_PID, // TUF M3 Gen II
{
0,
0,
0,
100,
false,
1,
false,
{ AURA_MOUSE_ZONE_LOGO },
{ AURA_MOUSE_MODE_STATIC, AURA_MOUSE_MODE_BREATHING, AURA_MOUSE_MODE_SPECTRUM, AURA_MOUSE_MODE_REACTIVE }
}
},
{
AURA_TUF_M5_PID, // TUF M5
{
@@ -14,17 +14,19 @@
AsusAuraRyuoAIOController::AsusAuraRyuoAIOController(hid_device* dev_handle, const char* path) : AuraUSBController(dev_handle, path)
{
/*-----------------------------------------------------*\
| Add addressable devices |
| Manually adding device info for now |
| TODO: Implement config table accurately |
\*-----------------------------------------------------*/
device_info.push_back({0x00, 0x00, 12, 0, AuraDeviceType::FIXED});
/*-----------------------------------------------------*\
| Add addressable devices |
| Manually adding device info for now |
| TODO: Implement config table accurately |
\*-----------------------------------------------------*/
device_info.push_back({0x00, 0x00, 12, 0, AuraDeviceType::FIXED});
}
AsusAuraRyuoAIOController::~AsusAuraRyuoAIOController()
{
hid_close(dev);
/*---------------------------------------------------------*\
| HID device is closed in the base class |
\*---------------------------------------------------------*/
}
std::string AsusAuraRyuoAIOController::GetLocation()
@@ -34,10 +36,10 @@ std::string AsusAuraRyuoAIOController::GetLocation()
void AsusAuraRyuoAIOController::SetMode(unsigned char /*channel*/, unsigned char /*mode*/, unsigned char /*red*/, unsigned char /*grn*/, unsigned char /*blu*/)
{
/*---------------------------------------------------------*\
| This interface is not used in this controller however is |
| required by the abstract class |
\*---------------------------------------------------------*/
/*---------------------------------------------------------*\
| This interface is not used in this controller however is |
| required by the abstract class |
\*---------------------------------------------------------*/
}
void AsusAuraRyuoAIOController::SetMode(unsigned char mode, unsigned char speed, unsigned char direction, RGBColor colour)
@@ -39,36 +39,29 @@ std::string AuraTUFKeyboardController::GetDeviceLocation()
return("HID: " + location);
}
std::string clean_serial(const std::wstring& wstr)
std::string AuraTUFKeyboardController::GetSerialString()
{
wchar_t serial_string[HID_MAX_STR];
memset(serial_string, 0, sizeof(serial_string));
int ret = hid_get_serial_number_string(dev, serial_string, HID_MAX_STR);
if(ret != 0)
{
return("");
}
/*-------------------------------------------------------------------------*\
| Skip non-ASCII, trailing garbage in serial numbers. Required by the |
| Scope II 96, whose original firmware outputs garbage, which even differs |
| after computer reboots and therefore breaks OpenRGB profile matching. |
\*-------------------------------------------------------------------------*/
std::string result;
for(wchar_t c : wstr)
switch(device_pid)
{
// Forbid control chars and anything above final printable low-ASCII.
if(c < 32 || c > 126)
{
case AURA_ROG_STRIX_SCOPE_II_96_WIRELESS_USB_PID:
serial_string[12] = L'\0';
break;
default:
break;
}
result += (char)c;
}
return(result);
}
std::string AuraTUFKeyboardController::GetSerialString()
{
wchar_t serial_string[128];
int ret = hid_get_serial_number_string(dev, serial_string, 128);
if(ret != 0)
{
return("");
}
return(StringUtils::wstring_to_string(serial_string));
@@ -17,6 +17,8 @@
#include "RGBController.h"
#include "AsusAuraTUFKeyboardLayouts.h"
#define HID_MAX_STR 128
enum
{
AURA_KEYBOARD_MODE_STATIC = 0,
@@ -46,6 +48,7 @@ enum
AURA_ROG_STRIX_FLARE_II_ANIMATE_PID = 0x19FC,
AURA_ROG_STRIX_SCOPE_PID = 0x18F8,
AURA_ROG_STRIX_SCOPE_RX_PID = 0x1951,
AURA_ROG_STRIX_SCOPE_RX_EVA_02_PID = 0x1B12,
AURA_ROG_STRIX_SCOPE_NX_WIRELESS_DELUXE_USB_PID = 0x19F6,
AURA_ROG_STRIX_SCOPE_NX_WIRELESS_DELUXE_2_4_PID = 0x19F8,
AURA_ROG_STRIX_SCOPE_II_PID = 0x1AB3,
@@ -67,6 +67,7 @@ RGBController_AuraTUFKeyboard::RGBController_AuraTUFKeyboard(AuraTUFKeyboardCont
case AURA_ROG_STRIX_FLARE_II_PID:
case AURA_ROG_STRIX_FLARE_II_ANIMATE_PID:
case AURA_ROG_STRIX_SCOPE_RX_PID:
case AURA_ROG_STRIX_SCOPE_RX_EVA_02_PID:
case AURA_ROG_STRIX_SCOPE_PID:
case AURA_ROG_STRIX_SCOPE_NX_WIRELESS_DELUXE_2_4_PID:
case AURA_ROG_STRIX_SCOPE_NX_WIRELESS_DELUXE_USB_PID:
@@ -419,6 +420,7 @@ void RGBController_AuraTUFKeyboard::SetupZones()
break;
case AURA_ROG_STRIX_SCOPE_PID:
case AURA_ROG_STRIX_SCOPE_RX_PID:
case AURA_ROG_STRIX_SCOPE_RX_EVA_02_PID:
case AURA_ROG_STRIX_SCOPE_NX_WIRELESS_DELUXE_USB_PID:
case AURA_ROG_STRIX_SCOPE_NX_WIRELESS_DELUXE_2_4_PID:
keyboard_ptr = &AsusROGStrixScopeLayouts;
@@ -39,6 +39,7 @@ AuraMainboardController::AuraMainboardController(hid_device* dev_handle, const c
for(int i = 0; i < num_addressable_headers; i++)
{
device_info.push_back({effect_channel, (unsigned char)i, 0x01, 0, AuraDeviceType::ADDRESSABLE});
effect_channel++;
}
}
@@ -22,7 +22,6 @@
#include "AsusAuraMousematController.h"
#include "AsusAuraMonitorController.h"
#include "AsusAuraRyuoAIOController.h"
#include "RGBController.h"
#include "RGBController_AsusAuraUSB.h"
#include "RGBController_AsusAuraHeadsetStand.h"
#include "RGBController_AsusAuraKeyboard.h"
@@ -50,6 +49,7 @@
#define AURA_MOTHERBOARD_1_PID 0x18F3
#define AURA_MOTHERBOARD_2_PID 0x1939
#define AURA_MOTHERBOARD_3_PID 0x19AF
#define AURA_MOTHERBOARD_4_PID 0x1AA6
/*-----------------------------------------------------------------*\
| KEYBOARDS |
@@ -68,6 +68,7 @@
#define AURA_ROG_STRIX_SCOPE_TKL_PID 0x190C
#define AURA_ROG_STRIX_SCOPE_TKL_PNK_LTD_PID 0x1954
#define AURA_ROG_STRIX_SCOPE_RX_PID 0x1951
#define AURA_ROG_STRIX_SCOPE_RX_EVA_02_PID 0x1B12
#define AURA_ROG_STRIX_SCOPE_RX_TKL_DELUXE_PID 0x1A05
#define AURA_ROG_STRIX_SCOPE_NX_WIRELESS_DELUXE_USB_PID 0x19F6
#define AURA_ROG_STRIX_SCOPE_NX_WIRELESS_DELUXE_2_4_PID 0x19F8
@@ -119,6 +120,7 @@
#define ROG_STRIX_LC120_PID 0x879E
#define AURA_RYUO_AIO_PID 0x1887
#define ASUS_ROG_ALLY_PID 0x1ABE
#define ASUS_ROG_ALLY_X_PID 0x1B4C
AuraKeyboardMappingLayoutType GetKeyboardMappingLayoutType(int pid)
{
@@ -344,6 +346,7 @@ REGISTER_HID_DETECTOR ("ASUS Aura Addressable", DetectAs
REGISTER_HID_DETECTOR ("ASUS Aura Motherboard", DetectAsusAuraUSBMotherboards, AURA_USB_VID, AURA_MOTHERBOARD_1_PID);
REGISTER_HID_DETECTOR ("ASUS Aura Motherboard", DetectAsusAuraUSBMotherboards, AURA_USB_VID, AURA_MOTHERBOARD_2_PID);
REGISTER_HID_DETECTOR ("ASUS Aura Motherboard", DetectAsusAuraUSBMotherboards, AURA_USB_VID, AURA_MOTHERBOARD_3_PID);
REGISTER_HID_DETECTOR ("ASUS Aura Motherboard", DetectAsusAuraUSBMotherboards, AURA_USB_VID, AURA_MOTHERBOARD_4_PID);
/*-----------------------------------------------------------------*\
| KEYBOARDS |
@@ -363,6 +366,7 @@ REGISTER_HID_DETECTOR_IP("ASUS ROG Strix Flare II Animate", Dete
REGISTER_HID_DETECTOR_IP("ASUS ROG Strix Flare II", DetectAsusAuraTUFUSBKeyboard, AURA_USB_VID, AURA_ROG_STRIX_FLARE_II_PID, 1, 0xFF00);
REGISTER_HID_DETECTOR_IP("ASUS ROG Strix Scope", DetectAsusAuraTUFUSBKeyboard, AURA_USB_VID, AURA_ROG_STRIX_SCOPE_PID, 1, 0xFF00);
REGISTER_HID_DETECTOR_IP("ASUS ROG Strix Scope RX", DetectAsusAuraTUFUSBKeyboard, AURA_USB_VID, AURA_ROG_STRIX_SCOPE_RX_PID, 1, 0xFF00);
REGISTER_HID_DETECTOR_IP("ASUS ROG Strix Scope RX EVA-02 Edition", DetectAsusAuraTUFUSBKeyboard, AURA_USB_VID, AURA_ROG_STRIX_SCOPE_RX_EVA_02_PID, 1, 0xFF00);
REGISTER_HID_DETECTOR_IP("ASUS ROG Strix Scope NX Wireless Deluxe USB", DetectAsusAuraTUFUSBKeyboard, AURA_USB_VID, AURA_ROG_STRIX_SCOPE_NX_WIRELESS_DELUXE_USB_PID, 1, 0xFF00);
REGISTER_HID_DETECTOR_IP("ASUS ROG Strix Scope NX Wireless Deluxe 2.4GHz", DetectAsusAuraTUFUSBKeyboard, AURA_USB_VID, AURA_ROG_STRIX_SCOPE_NX_WIRELESS_DELUXE_2_4_PID, 1, 0xFF00);
REGISTER_HID_DETECTOR_IP("ASUS ROG Strix Scope II", DetectAsusAuraTUFUSBKeyboard, AURA_USB_VID, AURA_ROG_STRIX_SCOPE_II_PID, 1, 0xFF00);
@@ -415,6 +419,7 @@ REGISTER_HID_DETECTOR_IP("ASUS ROG Keris Wireless Bluetooth",
REGISTER_HID_DETECTOR_IP("ASUS ROG Keris Wireless AimPoint USB", DetectAsusAuraUSBMice, AURA_USB_VID, AURA_ROG_KERIS_WIRELESS_AIMPOINT_USB_PID, 0, 0xFF01);
REGISTER_HID_DETECTOR_IP("ASUS ROG Keris Wireless AimPoint 2.4Ghz", DetectAsusAuraUSBMice, AURA_USB_VID, AURA_ROG_KERIS_WIRELESS_AIMPOINT_2_4_PID, 0, 0xFF01);
REGISTER_HID_DETECTOR_IP("ASUS TUF Gaming M3", DetectAsusAuraUSBMice, AURA_USB_VID, AURA_TUF_M3_PID, 1, 0xFF01);
REGISTER_HID_DETECTOR_IP("ASUS TUF Gaming M3 Gen II", DetectAsusAuraUSBMice, AURA_USB_VID, AURA_TUF_M3_GEN_II_PID, 2, 0xFF01);
REGISTER_HID_DETECTOR_IP("ASUS TUF Gaming M5", DetectAsusAuraUSBMice, AURA_USB_VID, AURA_TUF_M5_PID, 2, 0xFF01);
REGISTER_HID_DETECTOR_IP("ASUS ROG Strix Evolve", DetectAsusAuraUSBStrixEvolve, AURA_USB_VID, AURA_ROG_STRIX_EVOLVE_PID, 1, 0x0008);
@@ -447,3 +452,4 @@ REGISTER_HID_DETECTOR_I ("ASUS ROG Throne", DetectAs
REGISTER_HID_DETECTOR_I ("ASUS ROG Throne QI", DetectAsusAuraUSBHeadsetStand, AURA_USB_VID, AURA_ROG_THRONE_QI_PID, 0);
REGISTER_HID_DETECTOR_I ("ASUS ROG Throne QI GUNDAM", DetectAsusAuraUSBHeadsetStand, AURA_USB_VID, AURA_ROG_THRONE_QI_GUNDAM_PID, 0);
REGISTER_HID_DETECTOR_IPU("ASUS ROG Ally", DetectAsusROGAlly, AURA_USB_VID, ASUS_ROG_ALLY_PID, 2, 0xFF31, 0x0076);
REGISTER_HID_DETECTOR_IPU("ASUS ROG Ally X", DetectAsusROGAlly, AURA_USB_VID, ASUS_ROG_ALLY_X_PID, 2, 0xFF31, 0x0076);
@@ -7,13 +7,11 @@
| SPDX-License-Identifier: GPL-2.0-only |
\*---------------------------------------------------------*/
#include <stdexcept>
#include <hidapi.h>
#include "Detector.h"
#include "AsusCerberusKeyboardController.h"
#include "AsusSagarisKeyboardController.h"
#include "AsusStrixClawController.h"
#include "RGBController.h"
#include "RGBController_AsusCerberusKeyboard.h"
#include "RGBController_AsusSagarisKeyboard.h"
#include "RGBController_AsusStrixClaw.h"
@@ -27,9 +27,9 @@ RGBController_AsusTUFLaptopLinux::RGBController_AsusTUFLaptopLinux(AsusTUFLaptop
{
controller = controller_ptr;
name = "ASUS TUF Keyboard";
name = "ASUS TUF Laptop Keyboard";
vendor = "ASUS";
type = DEVICE_TYPE_KEYBOARD;
type = DEVICE_TYPE_LAPTOP;
description = "Asus TUF Device";
location = ASUS_KBD_BACKLIGHT_BASE_PATH;
@@ -24,9 +24,9 @@ using namespace std::chrono_literals;
RGBController_AsusTUFLaptopWMI::RGBController_AsusTUFLaptopWMI(AsusTUFLaptopController* controller_ptr)
{
name = "ASUS TUF Keyboard";
name = "ASUS TUF Laptop Keyboard";
vendor = "ASUS";
type = DEVICE_TYPE_KEYBOARD;
type = DEVICE_TYPE_LAPTOP;
description = "WMI Device";
location = "\\\\.\\ATKACPI";
@@ -9,12 +9,9 @@
| SPDX-License-Identifier: GPL-2.0-only |
\*---------------------------------------------------------*/
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include "Detector.h"
#include "BlinkyTapeController.h"
#include "RGBController.h"
#include "RGBController_BlinkyTape.h"
#include "find_usb_serial_port.h"
@@ -30,20 +30,23 @@
#define MX_BOARD_8_0_TKL_RGB_PID 0x00B7
#define MX_BOARD_10_0_FL_RGB_PID 0x00BB
#define G80_3000_TKL_NBL_PID 0x00C3
#define MX_BOARD_2_0S_FL_RGB_PID 0x00C4
#define MX_BOARD_2_0S_FL_RGB_EU_PID 0x01A6
#define MX_BOARD_2_0S_FL_RGB_US_PID 0x00C4
#define MX_BOARD_2_0S_FL_NBL_PID 0x00CE
#define G80_3000_TKL_RGB_PID 0x00C5
#define MV_BOARD_3_0FL_RGB_PID 0x00C7
#define CCF_MX_8_0_TKL_BL_PID 0x00C9
#define CCF_MX_1_0_TKL_BL_PID 0x00CA
#define CCF_MX_1_0_TKL_NBL_PID 0x00CB
#define G80_3000_TKL_NBL_KOR_PID 0x00CD
#define MX_BOARD_2_0S_FL_NBL_PID 0x00CE
#define MX_1_0_FL_NBL_PID 0x00D2
#define MX_1_0_FL_RGB_PID 0x00D3
#define G80_3000N_TKL_RGB_PID 0x00DD
#define G80_3000N_FL_RGB_PID 0x00DE
#define MX_BOARD_10_0N_FL_RGB_PID 0x00DF
#define MX_BOARD_2_0S_FL_RGB_DE_PID 0x01A6
#define G80_3000N_TKL_RGB_EU_PID 0x00DD
#define G80_3000N_TKL_RGB_US_PID 0x00E0
#define G80_3000N_FL_RGB_EU_PID 0x00DE
#define G80_3000N_FL_RGB_US_PID 0x00E1
#define MX_BOARD_10_0N_FL_RGB_EU_PID 0x00DF
#define MX_BOARD_10_0N_FL_RGB_US_PID 0x00E2
enum
@@ -9,11 +9,9 @@
| SPDX-License-Identifier: GPL-2.0-only |
\*---------------------------------------------------------*/
#include <vector>
#include <hidapi.h>
#include "Detector.h"
#include "CherryKeyboardController.h"
#include "RGBController.h"
#include "RGBController_CherryKeyboard.h"
/*-----------------------------------------------------*\
@@ -53,17 +51,20 @@ REGISTER_HID_DETECTOR_IP("Cherry Keyboard MX BOARD 1.0 TKL RGB", DetectCh
REGISTER_HID_DETECTOR_IP("Cherry Keyboard MX BOARD 8.0 TKL RGB", DetectCherryKeyboards, CHERRY_KEYBOARD_VID, MX_BOARD_8_0_TKL_RGB_PID , 1, CHERRY_KEYBOARD_USAGE_PAGE);
REGISTER_HID_DETECTOR_IP("Cherry Keyboard MX BOARD 10.0 FL RGB", DetectCherryKeyboards, CHERRY_KEYBOARD_VID, MX_BOARD_10_0_FL_RGB_PID , 1, CHERRY_KEYBOARD_USAGE_PAGE);
REGISTER_HID_DETECTOR_IP("Cherry Keyboard G80-3000 TKL NBL", DetectCherryKeyboards, CHERRY_KEYBOARD_VID, G80_3000_TKL_NBL_PID , 1, CHERRY_KEYBOARD_USAGE_PAGE);
REGISTER_HID_DETECTOR_IP("Cherry Keyboard MX BOARD 2.0S FL RGB", DetectCherryKeyboards, CHERRY_KEYBOARD_VID, MX_BOARD_2_0S_FL_RGB_PID , 1, CHERRY_KEYBOARD_USAGE_PAGE);
REGISTER_HID_DETECTOR_IP("Cherry Keyboard MX BOARD 2.0S FL RGB (EU)", DetectCherryKeyboards, CHERRY_KEYBOARD_VID, MX_BOARD_2_0S_FL_RGB_EU_PID , 1, CHERRY_KEYBOARD_USAGE_PAGE);
REGISTER_HID_DETECTOR_IP("Cherry Keyboard MX BOARD 2.0S FL RGB (US)", DetectCherryKeyboards, CHERRY_KEYBOARD_VID, MX_BOARD_2_0S_FL_RGB_US_PID , 1, CHERRY_KEYBOARD_USAGE_PAGE);
REGISTER_HID_DETECTOR_IP("Cherry Keyboard MX BOARD 2.0S FL NBL", DetectCherryKeyboards, CHERRY_KEYBOARD_VID, MX_BOARD_2_0S_FL_NBL_PID , 1, CHERRY_KEYBOARD_USAGE_PAGE);
REGISTER_HID_DETECTOR_IP("Cherry Keyboard G80-3000 TKL RGB", DetectCherryKeyboards, CHERRY_KEYBOARD_VID, G80_3000_TKL_RGB_PID , 1, CHERRY_KEYBOARD_USAGE_PAGE);
REGISTER_HID_DETECTOR_IP("Cherry Keyboard MV BOARD 3.0 FL RGB", DetectCherryKeyboards, CHERRY_KEYBOARD_VID, MV_BOARD_3_0FL_RGB_PID , 1, CHERRY_KEYBOARD_USAGE_PAGE);
REGISTER_HID_DETECTOR_IP("Cherry Keyboard CCF MX 8.0 TKL BL", DetectCherryKeyboards, CHERRY_KEYBOARD_VID, CCF_MX_8_0_TKL_BL_PID , 1, CHERRY_KEYBOARD_USAGE_PAGE);
REGISTER_HID_DETECTOR_IP("Cherry Keyboard CCF MX 1.0 TKL BL", DetectCherryKeyboards, CHERRY_KEYBOARD_VID, CCF_MX_1_0_TKL_BL_PID , 1, CHERRY_KEYBOARD_USAGE_PAGE);
REGISTER_HID_DETECTOR_IP("Cherry Keyboard CCF MX 1.0 TKL NBL", DetectCherryKeyboards, CHERRY_KEYBOARD_VID, CCF_MX_1_0_TKL_NBL_PID , 1, CHERRY_KEYBOARD_USAGE_PAGE);
REGISTER_HID_DETECTOR_IP("Cherry Keyboard G80-3000 TKL NBL KOREAN", DetectCherryKeyboards, CHERRY_KEYBOARD_VID, G80_3000_TKL_NBL_KOR_PID , 1, CHERRY_KEYBOARD_USAGE_PAGE);
REGISTER_HID_DETECTOR_IP("Cherry Keyboard MX BOARD 2.0S FL NBL", DetectCherryKeyboards, CHERRY_KEYBOARD_VID, MX_BOARD_2_0S_FL_NBL_PID , 1, CHERRY_KEYBOARD_USAGE_PAGE);
REGISTER_HID_DETECTOR_IP("Cherry Keyboard MX 1.0 FL NBL", DetectCherryKeyboards, CHERRY_KEYBOARD_VID, MX_1_0_FL_NBL_PID , 1, CHERRY_KEYBOARD_USAGE_PAGE);
REGISTER_HID_DETECTOR_IP("Cherry Keyboard MX 1.0 FL RGB", DetectCherryKeyboards, CHERRY_KEYBOARD_VID, MX_1_0_FL_RGB_PID , 1, CHERRY_KEYBOARD_USAGE_PAGE);
REGISTER_HID_DETECTOR_IP("Cherry Keyboard G80-3000N TKL RGB", DetectCherryKeyboards, CHERRY_KEYBOARD_VID, G80_3000N_TKL_RGB_PID , 1, CHERRY_KEYBOARD_USAGE_PAGE);
REGISTER_HID_DETECTOR_IP("Cherry Keyboard G80-3000N FL RGB", DetectCherryKeyboards, CHERRY_KEYBOARD_VID, G80_3000N_FL_RGB_PID , 1, CHERRY_KEYBOARD_USAGE_PAGE);
REGISTER_HID_DETECTOR_IP("Cherry Keyboard MX BOARD 10.0N FL RGB", DetectCherryKeyboards, CHERRY_KEYBOARD_VID, MX_BOARD_10_0N_FL_RGB_PID , 1, CHERRY_KEYBOARD_USAGE_PAGE);
REGISTER_HID_DETECTOR_IP("Cherry Keyboard MX BOARD 2.0S FL RGB DE", DetectCherryKeyboards, CHERRY_KEYBOARD_VID, MX_BOARD_2_0S_FL_RGB_DE_PID , 1, CHERRY_KEYBOARD_USAGE_PAGE);
REGISTER_HID_DETECTOR_IP("Cherry Keyboard G80-3000N TKL RGB (EU)", DetectCherryKeyboards, CHERRY_KEYBOARD_VID, G80_3000N_TKL_RGB_EU_PID , 1, CHERRY_KEYBOARD_USAGE_PAGE);
REGISTER_HID_DETECTOR_IP("Cherry Keyboard G80-3000N TKL RGB (US)", DetectCherryKeyboards, CHERRY_KEYBOARD_VID, G80_3000N_TKL_RGB_US_PID , 1, CHERRY_KEYBOARD_USAGE_PAGE);
REGISTER_HID_DETECTOR_IP("Cherry Keyboard G80-3000N FL RGB (EU)", DetectCherryKeyboards, CHERRY_KEYBOARD_VID, G80_3000N_FL_RGB_EU_PID , 1, CHERRY_KEYBOARD_USAGE_PAGE);
REGISTER_HID_DETECTOR_IP("Cherry Keyboard G80-3000N FL RGB (US)", DetectCherryKeyboards, CHERRY_KEYBOARD_VID, G80_3000N_FL_RGB_US_PID , 1, CHERRY_KEYBOARD_USAGE_PAGE);
REGISTER_HID_DETECTOR_IP("Cherry Keyboard MX BOARD 10.0N FL RGB (EU)", DetectCherryKeyboards, CHERRY_KEYBOARD_VID, MX_BOARD_10_0N_FL_RGB_EU_PID, 1, CHERRY_KEYBOARD_USAGE_PAGE);
REGISTER_HID_DETECTOR_IP("Cherry Keyboard MX BOARD 10.0N FL RGB (US)", DetectCherryKeyboards, CHERRY_KEYBOARD_VID, MX_BOARD_10_0N_FL_RGB_US_PID, 1, CHERRY_KEYBOARD_USAGE_PAGE);
@@ -440,9 +440,9 @@ bool RGBController_CherryKeyboard::hasUnofficialModeSupport(const uint16_t produ
// RGB keyboards known for not supporting unofficial modes
case MX_BOARD_3_0S_FL_RGB_PID:
case MX_BOARD_3_0S_FL_RGB_KOR_PID:
case MX_BOARD_2_0S_FL_RGB_PID:
case MX_BOARD_2_0S_FL_RGB_US_PID:
case MX_BOARD_2_0S_FL_NBL_PID:
case MX_BOARD_2_0S_FL_RGB_DE_PID:
case MX_BOARD_2_0S_FL_RGB_EU_PID:
case MV_BOARD_3_0FL_RGB_PID:
return false;
// RGB keyboards which (probably) support unofficial modes
@@ -451,9 +451,12 @@ bool RGBController_CherryKeyboard::hasUnofficialModeSupport(const uint16_t produ
case MX_BOARD_10_0_FL_RGB_PID: // unknown (probably yes, related to 10.0N)
case G80_3000_TKL_RGB_PID: // unknown
case MX_1_0_FL_RGB_PID: // unkown
case G80_3000N_TKL_RGB_PID: // yes
case G80_3000N_FL_RGB_PID: // firmware v0102: YES, firmware v0103: NO
case MX_BOARD_10_0N_FL_RGB_PID: // yes
case G80_3000N_TKL_RGB_EU_PID: // yes
case G80_3000N_TKL_RGB_US_PID: // yes
case G80_3000N_FL_RGB_EU_PID: // firmware v0102: YES, firmware v0103: NO
case G80_3000N_FL_RGB_US_PID: // firmware v0102: YES, firmware v0103: NO
case MX_BOARD_10_0N_FL_RGB_EU_PID: // yes
case MX_BOARD_10_0N_FL_RGB_US_PID: // yes
default:
return true;
}
@@ -7,13 +7,9 @@
| SPDX-License-Identifier: GPL-2.0-only |
\*---------------------------------------------------------*/
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include "Detector.h"
#include "LogManager.h"
#include "ColorfulGPUController.h"
#include "RGBController.h"
#include "RGBController_ColorfulGPU.h"
#include "i2c_smbus.h"
#include "pci_ids.h"
@@ -49,26 +45,30 @@ void DetectColorfulGPUControllers(i2c_smbus_interface* bus, uint8_t i2c_addr, co
}
}
REGISTER_I2C_PCI_DETECTOR("iGame GeForce RTX 3060 Advanced OC 12G L-V", DetectColorfulGPUControllers, NVIDIA_VEN, NVIDIA_RTX3060_LHR_DEV, COLORFUL_SUB_VEN, COLORFUL_IGAME_RTX_3060_ADVANCED_OC_12G_LV, 0x61);
REGISTER_I2C_PCI_DETECTOR("iGame GeForce RTX 3060 Ultra W OC 12G L-V", DetectColorfulGPUControllers, NVIDIA_VEN, NVIDIA_RTX3060_LHR_DEV, COLORFUL_SUB_VEN, COLORFUL_IGAME_RTX_3060_ULTRAW_OC_12G, 0x61);
REGISTER_I2C_PCI_DETECTOR("iGame GeForce RTX 3060 Ultra W OC 12G L-V", DetectColorfulGPUControllers, NVIDIA_VEN, NVIDIA_RTX3060_GA106_DEV, COLORFUL_SUB_VEN, COLORFUL_IGAME_RTX_3060_ULTRAW_OC_12G, 0x61);
REGISTER_I2C_PCI_DETECTOR("iGame GeForce RTX 3060 Ultra W OC 12G L-V", DetectColorfulGPUControllers, NVIDIA_VEN, NVIDIA_RTX3060_LHR_DEV, COLORFUL_SUB_VEN, COLORFUL_IGAME_RTX_3060_ULTRAW_OC_12G_2, 0x61);
REGISTER_I2C_PCI_DETECTOR("iGame GeForce RTX 3060 Ti Ultra W OC LHR-V", DetectColorfulGPUControllers, NVIDIA_VEN, NVIDIA_RTX3060TI_LHR_DEV, COLORFUL_SUB_VEN, COLORFUL_IGAME_RTX_3060_ULTRAW_OC_12G_2, 0x61);
REGISTER_I2C_PCI_DETECTOR("iGame GeForce RTX 3060 Ti Advanced OC-V", DetectColorfulGPUControllers, NVIDIA_VEN, NVIDIA_RTX3060TI_LHR_DEV, COLORFUL_SUB_VEN, COLORFUL_IGAME_RTX_3070_ADVANCED_OCV, 0x61);
REGISTER_I2C_PCI_DETECTOR("iGame GeForce RTX 3060 Ti Advanced OC-V", DetectColorfulGPUControllers, NVIDIA_VEN, NVIDIA_RTX3060TI_LHR_DEV, COLORFUL_SUB_VEN, COLORFUL_IGAME_RTX_3060_TI_ADVANCED_OC, 0x61);
REGISTER_I2C_PCI_DETECTOR("iGame GeForce RTX 3070 Advanced OC-V", DetectColorfulGPUControllers, NVIDIA_VEN, NVIDIA_RTX3070_DEV, COLORFUL_SUB_VEN, COLORFUL_IGAME_RTX_3070_ADVANCED_OCV, 0x61);
REGISTER_I2C_PCI_DETECTOR("iGame GeForce RTX 3070 Advanced OC-V", DetectColorfulGPUControllers, NVIDIA_VEN, NVIDIA_RTX3070_DEV, COLORFUL_SUB_VEN, COLORFUL_IGAME_RTX_3070_ADVANCED_OCV2, 0x61);
REGISTER_I2C_PCI_DETECTOR("iGame GeForce RTX 3070 Ultra W OC-V", DetectColorfulGPUControllers, NVIDIA_VEN, NVIDIA_RTX3070_DEV, COLORFUL_SUB_VEN, COLORFUL_IGAME_RTX_3070_ULTRAW_OC, 0x61);
REGISTER_I2C_PCI_DETECTOR("iGame GeForce RTX 3070 Ultra W OC LHR", DetectColorfulGPUControllers, NVIDIA_VEN, NVIDIA_RTX3070_LHR_DEV, COLORFUL_SUB_VEN, COLORFUL_IGAME_RTX_3070_ULTRAW_OC, 0x61);
REGISTER_I2C_PCI_DETECTOR("iGame GeForce RTX 3070 Ti Ultra W OC LHR", DetectColorfulGPUControllers, NVIDIA_VEN, NVIDIA_RTX3070TI_DEV, COLORFUL_SUB_VEN, COLORFUL_IGAME_RTX_3070_TI_ULTRAW_OC, 0x61);
REGISTER_I2C_PCI_DETECTOR("iGame GeForce RTX 3070 Ti Advanced OC-V", DetectColorfulGPUControllers, NVIDIA_VEN, NVIDIA_RTX3070TI_DEV, COLORFUL_SUB_VEN, COLORFUL_IGAME_RTX_3070_TI_ADVANCED_OCV2, 0x61);
REGISTER_I2C_PCI_DETECTOR("iGame GeForce RTX 3080 Advanced OC 10G-V", DetectColorfulGPUControllers, NVIDIA_VEN, NVIDIA_RTX3080_DEV, COLORFUL_SUB_VEN, COLORFUL_IGAME_RTX_3080_ADVANCED_OC_10G, 0x61);
REGISTER_I2C_PCI_DETECTOR("iGame GeForce RTX 3080 Ti Advanced OC-V", DetectColorfulGPUControllers, NVIDIA_VEN, NVIDIA_RTX3080TI_DEV, COLORFUL_SUB_VEN, COLORFUL_IGAME_RTX_3080_TI_ADVANCED_OCV2, 0x61);
REGISTER_I2C_PCI_DETECTOR("iGame GeForce RTX 3080 Ultra W OC 10G LHR-V", DetectColorfulGPUControllers, NVIDIA_VEN, NVIDIA_RTX3080_LHR_DEV, COLORFUL_SUB_VEN, COLORFUL_IGAME_RTX_3080_ULTRAW_OC_10G, 0x61);
REGISTER_I2C_PCI_DETECTOR("iGame GeForce RTX 3080 Ultra W OC 10G LHR-V", DetectColorfulGPUControllers, NVIDIA_VEN, NVIDIA_RTX3080_LHR_DEV, COLORFUL_SUB_VEN, COLORFUL_IGAME_RTX_3080_ULTRAW_OC_10G_2, 0x61);
REGISTER_I2C_PCI_DETECTOR("iGame GeForce RTX 4070 Ti Advanced OC-V", DetectColorfulGPUControllers, NVIDIA_VEN, NVIDIA_RTX4070TI_DEV, COLORFUL_SUB_VEN, COLORFUL_IGAME_RTX_4070_TI_ADVANCED_OCV, 0x61);
REGISTER_I2C_PCI_DETECTOR("iGame GeForce RTX 4070 Vulcan OC-V", DetectColorfulGPUControllers, NVIDIA_VEN, NVIDIA_RTX4070_DEV, COLORFUL_SUB_VEN, COLORFUL_IGAME_RTX_4070_VULCAN_OCV, 0x61);
REGISTER_I2C_PCI_DETECTOR("iGame GeForce RTX 4080 Ultra W OC-V", DetectColorfulGPUControllers, NVIDIA_VEN, NVIDIA_RTX4080_DEV, COLORFUL_SUB_VEN, COLORFUL_IGAME_RTX_4080_ULTRAW_OCV, 0x61);
REGISTER_I2C_PCI_DETECTOR("iGame GeForce RTX 4080 Ultra W OC-V", DetectColorfulGPUControllers, NVIDIA_VEN, NVIDIA_RTX4080_DEV, COLORFUL_SUB_VEN, COLORFUL_IGAME_RTX_4080_ULTRAW_OCV2, 0x61);
REGISTER_I2C_PCI_DETECTOR("iGame GeForce RTX 4090 Advanced OC-V", DetectColorfulGPUControllers, NVIDIA_VEN, NVIDIA_RTX4090_DEV, COLORFUL_SUB_VEN, COLORFUL_IGAME_RTX_4090_ADVANCED_OCV, 0x61);
REGISTER_I2C_PCI_DETECTOR("iGame GeForce RTX 4090 Advanced OC-V", DetectColorfulGPUControllers, NVIDIA_VEN, NVIDIA_RTX4090_DEV, COLORFUL_SUB_VEN, COLORFUL_IGAME_RTX_4090_ADVANCED_OCV2, 0x61);
REGISTER_I2C_PCI_DETECTOR("iGame GeForce RTX 3060 Advanced OC 12G L-V", DetectColorfulGPUControllers, NVIDIA_VEN, NVIDIA_RTX3060_LHR_DEV, COLORFUL_SUB_VEN, COLORFUL_IGAME_RTX_3060_ADVANCED_OC_12G_LV, 0x61);
REGISTER_I2C_PCI_DETECTOR("iGame GeForce RTX 3060 Ultra W OC 12G L-V", DetectColorfulGPUControllers, NVIDIA_VEN, NVIDIA_RTX3060_LHR_DEV, COLORFUL_SUB_VEN, COLORFUL_IGAME_RTX_3060_ULTRAW_OC_12G, 0x61);
REGISTER_I2C_PCI_DETECTOR("iGame GeForce RTX 3060 Ultra W OC 12G L-V", DetectColorfulGPUControllers, NVIDIA_VEN, NVIDIA_RTX3060_GA106_DEV, COLORFUL_SUB_VEN, COLORFUL_IGAME_RTX_3060_ULTRAW_OC_12G, 0x61);
REGISTER_I2C_PCI_DETECTOR("iGame GeForce RTX 3060 Ultra W OC 12G L-V", DetectColorfulGPUControllers, NVIDIA_VEN, NVIDIA_RTX3060_LHR_DEV, COLORFUL_SUB_VEN, COLORFUL_IGAME_RTX_3060_ULTRAW_OC_12G_2, 0x61);
REGISTER_I2C_PCI_DETECTOR("iGame GeForce RTX 3060 Ti Ultra W OC LHR-V", DetectColorfulGPUControllers, NVIDIA_VEN, NVIDIA_RTX3060TI_LHR_DEV, COLORFUL_SUB_VEN, COLORFUL_IGAME_RTX_3060_ULTRAW_OC_12G_2, 0x61);
REGISTER_I2C_PCI_DETECTOR("iGame GeForce RTX 3060 Ti Advanced OC-V", DetectColorfulGPUControllers, NVIDIA_VEN, NVIDIA_RTX3060TI_LHR_DEV, COLORFUL_SUB_VEN, COLORFUL_IGAME_RTX_3070_ADVANCED_OCV, 0x61);
REGISTER_I2C_PCI_DETECTOR("iGame GeForce RTX 3060 Ti Advanced OC-V", DetectColorfulGPUControllers, NVIDIA_VEN, NVIDIA_RTX3060TI_LHR_DEV, COLORFUL_SUB_VEN, COLORFUL_IGAME_RTX_3060TI_ADVANCED_OC, 0x61);
REGISTER_I2C_PCI_DETECTOR("iGame GeForce RTX 3070 Advanced OC-V", DetectColorfulGPUControllers, NVIDIA_VEN, NVIDIA_RTX3070_DEV, COLORFUL_SUB_VEN, COLORFUL_IGAME_RTX_3070_ADVANCED_OCV, 0x61);
REGISTER_I2C_PCI_DETECTOR("iGame GeForce RTX 3070 Advanced OC-V", DetectColorfulGPUControllers, NVIDIA_VEN, NVIDIA_RTX3070_DEV, COLORFUL_SUB_VEN, COLORFUL_IGAME_RTX_3070_ADVANCED_OCV2, 0x61);
REGISTER_I2C_PCI_DETECTOR("iGame GeForce RTX 3070 Ultra W OC-V", DetectColorfulGPUControllers, NVIDIA_VEN, NVIDIA_RTX3070_DEV, COLORFUL_SUB_VEN, COLORFUL_IGAME_RTX_3070_ULTRAW_OC, 0x61);
REGISTER_I2C_PCI_DETECTOR("iGame GeForce RTX 3070 Ultra W OC LHR", DetectColorfulGPUControllers, NVIDIA_VEN, NVIDIA_RTX3070_LHR_DEV, COLORFUL_SUB_VEN, COLORFUL_IGAME_RTX_3070_ULTRAW_OC, 0x61);
REGISTER_I2C_PCI_DETECTOR("iGame GeForce RTX 3070 Ti Ultra W OC LHR", DetectColorfulGPUControllers, NVIDIA_VEN, NVIDIA_RTX3070TI_DEV, COLORFUL_SUB_VEN, COLORFUL_IGAME_RTX_3070TI_ULTRAW_OC, 0x61);
REGISTER_I2C_PCI_DETECTOR("iGame GeForce RTX 3070 Ti Advanced OC-V", DetectColorfulGPUControllers, NVIDIA_VEN, NVIDIA_RTX3070TI_DEV, COLORFUL_SUB_VEN, COLORFUL_IGAME_RTX_3070TI_ADVANCED_OCV2, 0x61);
REGISTER_I2C_PCI_DETECTOR("iGame GeForce RTX 3080 Advanced OC 10G-V", DetectColorfulGPUControllers, NVIDIA_VEN, NVIDIA_RTX3080_DEV, COLORFUL_SUB_VEN, COLORFUL_IGAME_RTX_3080_ADVANCED_OC_10G, 0x61);
REGISTER_I2C_PCI_DETECTOR("iGame GeForce RTX 3080 Ti Advanced OC-V", DetectColorfulGPUControllers, NVIDIA_VEN, NVIDIA_RTX3080TI_DEV, COLORFUL_SUB_VEN, COLORFUL_IGAME_RTX_3080TI_ADVANCED_OCV2, 0x61);
REGISTER_I2C_PCI_DETECTOR("iGame GeForce RTX 3080 Ultra W OC 10G LHR-V", DetectColorfulGPUControllers, NVIDIA_VEN, NVIDIA_RTX3080_LHR_DEV, COLORFUL_SUB_VEN, COLORFUL_IGAME_RTX_3080_ULTRAW_OC_10G, 0x61);
REGISTER_I2C_PCI_DETECTOR("iGame GeForce RTX 3080 Ultra W OC 10G LHR-V", DetectColorfulGPUControllers, NVIDIA_VEN, NVIDIA_RTX3080_LHR_DEV, COLORFUL_SUB_VEN, COLORFUL_IGAME_RTX_3080_ULTRAW_OC_10G_2, 0x61);
REGISTER_I2C_PCI_DETECTOR("iGame GeForce RTX 4070 Ti Advanced OC-V", DetectColorfulGPUControllers, NVIDIA_VEN, NVIDIA_RTX4070TI_DEV, COLORFUL_SUB_VEN, COLORFUL_IGAME_RTX_4070TI_ADVANCED_OCV, 0x61);
REGISTER_I2C_PCI_DETECTOR("iGame GeForce RTX 4070 Ti SUPER Advanced OC-V", DetectColorfulGPUControllers, NVIDIA_VEN, NVIDIA_RTX4070TIS_AD102_DEV, COLORFUL_SUB_VEN, COLORFUL_IGAME_RTX_4070TI_SUPER_ADVANCED_OCV2, 0x61);
REGISTER_I2C_PCI_DETECTOR("iGame GeForce RTX 4070 Ti SUPER Ultra W", DetectColorfulGPUControllers, NVIDIA_VEN, NVIDIA_RTX4070TIS_DEV, COLORFUL_SUB_VEN, COLORFUL_IGAME_RTX_4070TI_SUPER_ULTRA_W, 0x61);
REGISTER_I2C_PCI_DETECTOR("iGame GeForce RTX 4070 SUPER Ultra W OC", DetectColorfulGPUControllers, NVIDIA_VEN, NVIDIA_RTX4070S_DEV, COLORFUL_SUB_VEN, COLORFUL_IGAME_RTX_4070_SUPER_ULTRA_W_OC, 0x61);
REGISTER_I2C_PCI_DETECTOR("iGame GeForce RTX 4070 Vulcan OC-V", DetectColorfulGPUControllers, NVIDIA_VEN, NVIDIA_RTX4070_DEV, COLORFUL_SUB_VEN, COLORFUL_IGAME_RTX_4070_VULCAN_OCV, 0x61);
REGISTER_I2C_PCI_DETECTOR("iGame GeForce RTX 4070 SUPER Ultra W OC-V", DetectColorfulGPUControllers, NVIDIA_VEN, NVIDIA_RTX4070S_DEV, COLORFUL_SUB_VEN, COLORFUL_IGAME_RTX_4070S_ULTRAW_OCV, 0x61);
REGISTER_I2C_PCI_DETECTOR("iGame GeForce RTX 4080 Ultra W OC-V", DetectColorfulGPUControllers, NVIDIA_VEN, NVIDIA_RTX4080_DEV, COLORFUL_SUB_VEN, COLORFUL_IGAME_RTX_4080_ULTRAW_OCV, 0x61);
REGISTER_I2C_PCI_DETECTOR("iGame GeForce RTX 4080 Ultra W OC-V", DetectColorfulGPUControllers, NVIDIA_VEN, NVIDIA_RTX4080_DEV, COLORFUL_SUB_VEN, COLORFUL_IGAME_RTX_4080_ULTRAW_OCV2, 0x61);
REGISTER_I2C_PCI_DETECTOR("iGame GeForce RTX 4090 Advanced OC-V", DetectColorfulGPUControllers, NVIDIA_VEN, NVIDIA_RTX4090_DEV, COLORFUL_SUB_VEN, COLORFUL_IGAME_RTX_4090_ADVANCED_OCV, 0x61);
REGISTER_I2C_PCI_DETECTOR("iGame GeForce RTX 4090 Advanced OC-V", DetectColorfulGPUControllers, NVIDIA_VEN, NVIDIA_RTX4090_DEV, COLORFUL_SUB_VEN, COLORFUL_IGAME_RTX_4090_ADVANCED_OCV2, 0x61);
@@ -7,12 +7,8 @@
| SPDX-License-Identifier: GPL-2.0-only |
\*---------------------------------------------------------*/
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include "Detector.h"
#include "ColorfulTuringGPUController.h"
#include "RGBController.h"
#include "RGBController_ColorfulTuringGPU.h"
#include "i2c_smbus.h"
#include "pci_ids.h"
@@ -4,6 +4,7 @@
| Driver for Cooler Master ARGB Gen 2 A1 controller |
| |
| Morgan Guimard (morg) 26 Jun 2022 |
| Fabian R (kderazorback) 11 Aug 2023 |
| |
| This file is part of the OpenRGB project |
| SPDX-License-Identifier: GPL-2.0-only |
@@ -59,26 +60,45 @@ void CMARGBGen2A1controller::SaveToFlash()
hid_write(dev, usb_buf, CM_ARGB_GEN2_A1_PACKET_LENGTH);
std::this_thread::sleep_for(std::chrono::milliseconds(10));
std::this_thread::sleep_for(std::chrono::milliseconds(CM_ARGB_GEN2_A1_SLEEP_LONG));
}
void CMARGBGen2A1controller::SetupDirectMode()
{
ResetDevice();
unsigned char usb_buf[CM_ARGB_GEN2_A1_PACKET_LENGTH];
/*---------------------------------------------*\
| Swith to direct mode |
\*---------------------------------------------*/
memset(usb_buf, 0x00, CM_ARGB_GEN2_A1_PACKET_LENGTH);
usb_buf[1] = CM_ARGB_GEN2_A1_COMMAND;
usb_buf[2] = CM_ARGB_GEN2_A1_LIGHTNING_CONTROL;
usb_buf[3] = CM_ARGB_GEN2_A1_WRITE;
usb_buf[4] = 0x01; // channel???
usb_buf[1] = CM_ARGB_GEN2_A1_COMMAND;
usb_buf[2] = CM_ARGB_GEN2_A1_HW_MODE_SETUP;
usb_buf[3] = CM_ARGB_GEN2_A1_WRITE;
usb_buf[4] = CM_ARGB_GEN2_A1_CHANNEL_ALL; // CHANNEL
usb_buf[5] = CM_ARGB_GEN2_A1_SUBCHANNEL_ALL; // SUBCHANNEL
usb_buf[6] = CM_ARGB_GEN2_A1_CUSTOM_MODE;
usb_buf[7] = CM_ARGB_GEN2_A1_SPEED_HALF;
usb_buf[8] = CM_ARGB_GEN2_A1_BRIGHTNESS_MAX;
usb_buf[9] = 0xFF; // R
usb_buf[10] = 0xFF; // G
usb_buf[11] = 0xFF; // B
hid_write(dev, usb_buf, CM_ARGB_GEN2_A1_PACKET_LENGTH);
std::this_thread::sleep_for(std::chrono::milliseconds(10));
std::this_thread::sleep_for(std::chrono::milliseconds(CM_ARGB_GEN2_A1_SLEEP_SHORT));
std::vector<RGBColor> colorOffChain;
colorOffChain.push_back(0);
for(unsigned int channel = 0; channel < CM_ARGB_GEN2_A1_CHANNEL_COUNT; channel++)
{
SendChannelColors(channel, CM_ARGB_GEN2_A1_SUBCHANNEL_ALL, colorOffChain);
}
for(unsigned int channel = 0; channel < CM_ARGB_GEN2_A1_CHANNEL_COUNT; channel++)
{
SetCustomSequence(channel);
}
software_mode_activated = true;
}
@@ -144,10 +164,19 @@ void CMARGBGen2A1controller::SetupZoneSize(unsigned int zone_id, unsigned int si
hid_write(dev, usb_buf, CM_ARGB_GEN2_A1_PACKET_LENGTH);
std::this_thread::sleep_for(std::chrono::milliseconds(10));
std::this_thread::sleep_for(std::chrono::milliseconds(CM_ARGB_GEN2_A1_SLEEP_LONG));
/*---------------------------------------------*\
| Refresh direct mode to cycle the strips |
| with the new length |
\*---------------------------------------------*/
if(software_mode_activated)
{
SetupDirectMode();
}
}
void CMARGBGen2A1controller::SendDirectChannel(unsigned int zone_id, std::vector<RGBColor> colors)
void CMARGBGen2A1controller::SendChannelColors(unsigned int zone_id, unsigned int subchannel_id, std::vector<RGBColor> colors)
{
/*---------------------------------------------*\
| Create the color data array |
@@ -160,53 +189,53 @@ void CMARGBGen2A1controller::SendDirectChannel(unsigned int zone_id, std::vector
unsigned int offset;
unsigned char packet_start[CM_ARGB_GEN2_A1_PACKETS_PER_CHANNEL] =
/*----------------------------------------------------*\
| Break-up color data in packet/s |
| Intentionally clearing first packet only |
| Leaving garbage on subsequent packets |
| Original software appears to not clear them anyways. |
\*----------------------------------------------------*/
memset(usb_buf, 0x00, CM_ARGB_GEN2_A1_PACKET_LENGTH);
for(unsigned int p = 0; p < CM_ARGB_GEN2_A1_PACKETS_PER_CHANNEL && it != color_data.end(); p++)
{
0x00, 0x01, 0x82
};
offset = 1;
/*---------------------------------------------*\
| Send 3 packets for the zone |
\*---------------------------------------------*/
for(unsigned int p = 0; p < CM_ARGB_GEN2_A1_PACKETS_PER_CHANNEL; p++)
{
memset(usb_buf, 0x00, CM_ARGB_GEN2_A1_PACKET_LENGTH);
usb_buf[offset++] = p;
usb_buf[offset++] = CM_ARGB_GEN2_A1_SET_RGB_VALUES;
usb_buf[offset++] = CM_ARGB_GEN2_A1_WRITE;
usb_buf[offset++] = 1 << zone_id;
usb_buf[offset++] = 1 << subchannel_id;
usb_buf[1] = packet_start[p];
usb_buf[2] = 0x09;
if(p == 0)
while(it != color_data.end() && offset < CM_ARGB_GEN2_A1_PACKET_LENGTH)
{
usb_buf[3] = 1 << zone_id;
usb_buf[5] = 0x3C;
offset = 6;
}
else
{
offset = 3;
}
while(offset < CM_ARGB_GEN2_A1_PACKET_LENGTH && it != color_data.end())
{
usb_buf[offset] = *it;
offset++;
usb_buf[offset++] = *it;
it++;
}
if(p >= CM_ARGB_GEN2_A1_PACKETS_PER_CHANNEL - 1 || it == color_data.end())
{
/*--------------------------*\
| Rewrite as end packet |
\*--------------------------*/
usb_buf[1] = p + 0x80;
}
hid_write(dev, usb_buf, CM_ARGB_GEN2_A1_PACKET_LENGTH);
/*---------------------------------------------*\
| This device needs some delay before we send |
| any other packet |
\*---------------------------------------------*/
std::this_thread::sleep_for(std::chrono::milliseconds(1));
/*-----------------------------------------------*\
| This device needs some delay before we send |
| any other packet :( |
| This time is critical since the device is |
| still latching its input buffer. |
| Reducing this may start to introduce artifacts |
\*-----------------------------------------------*/
std::this_thread::sleep_for(std::chrono::milliseconds(CM_ARGB_GEN2_A1_SLEEP_MEDIUM));
}
/*---------------------------------------------*\
| Next channel needs some delay as well |
\*---------------------------------------------*/
std::this_thread::sleep_for(std::chrono::milliseconds(2));
std::this_thread::sleep_for(std::chrono::milliseconds(CM_ARGB_GEN2_A1_SLEEP_SHORT));
}
void CMARGBGen2A1controller::SetMode(unsigned int mode_value, unsigned char speed, unsigned char brightness, RGBColor color, bool random)
@@ -228,7 +257,7 @@ void CMARGBGen2A1controller::SetMode(unsigned int mode_value, unsigned char spee
software_mode_activated = false;
std::this_thread::sleep_for(std::chrono::milliseconds(10));
std::this_thread::sleep_for(std::chrono::milliseconds(CM_ARGB_GEN2_A1_SLEEP_LONG));
}
/*---------------------------------------------*\
@@ -240,16 +269,20 @@ void CMARGBGen2A1controller::SetMode(unsigned int mode_value, unsigned char spee
usb_buf[2] = CM_ARGB_GEN2_A1_HW_MODE_SETUP;
usb_buf[3] = CM_ARGB_GEN2_A1_WRITE;
usb_buf[4] = 0xFF;
usb_buf[5] = 0xFF;
usb_buf[4] = CM_ARGB_GEN2_A1_CHANNEL_ALL;
usb_buf[5] = CM_ARGB_GEN2_A1_SUBCHANNEL_ALL;
usb_buf[6] = mode_value;
bool is_custom_mode = mode_value == CM_ARGB_GEN2_A1_CUSTOM_MODE;
bool is_custom_mode = (mode_value == CM_ARGB_GEN2_A1_CUSTOM_MODE);
if(is_custom_mode)
{
usb_buf[8] = 0xFF;
usb_buf[7] = CM_ARGB_GEN2_A1_SPEED_MAX;
usb_buf[8] = CM_ARGB_GEN2_A1_BRIGHTNESS_MAX;
usb_buf[9] = 0xFF; // R
usb_buf[10] = 0xFF; // G
usb_buf[11] = 0xFF; // B
}
else
{
@@ -261,10 +294,9 @@ void CMARGBGen2A1controller::SetMode(unsigned int mode_value, unsigned char spee
usb_buf[12] = random;
}
hid_write(dev, usb_buf, CM_ARGB_GEN2_A1_PACKET_LENGTH);
std::this_thread::sleep_for(std::chrono::milliseconds(10));
std::this_thread::sleep_for(std::chrono::milliseconds(CM_ARGB_GEN2_A1_SLEEP_LONG));
if(is_custom_mode)
{
@@ -289,83 +321,58 @@ std::vector<unsigned char> CMARGBGen2A1controller::CreateColorData(std::vector<R
return(color_data);
}
void CMARGBGen2A1controller::SetCustomColors(unsigned int zone_id, std::vector<RGBColor> colors)
{
unsigned char usb_buf[CM_ARGB_GEN2_A1_PACKET_LENGTH];
/*---------------------------------------------*\
| Create the color data array |
\*---------------------------------------------*/
std::vector<unsigned char> color_data = CreateColorData(colors);
std::vector<unsigned char>::iterator it = color_data.begin();
unsigned char packet_start[5] =
{
CM_ARGB_GEN2_A1_COMMAND, 0x00, 0x01, 0x02, 0x83
};
/*---------------------------------------------*\
| Send the 5 packets of colors |
\*---------------------------------------------*/
for(unsigned int p = 0; p < 5; p++)
{
memset(usb_buf, 0x00, CM_ARGB_GEN2_A1_PACKET_LENGTH);
usb_buf[1] = packet_start[p];
/*----------------------------------------------*\
| This part isnt well understood |
| 1st packet starts with CM_ARGB_GEN2_A1_COMMAND |
| Looks like it is a read command |
\*----------------------------------------------*/
usb_buf[2] = p == 0 ? 0x06 : 0x08; // 0x08 custom data, 0x06 sizes?
usb_buf[3] = p == 0 ? 0x01 : 0x02; // read/write has no meaning here
usb_buf[4] = 1 << zone_id;
unsigned int offset = 6;
while(p > 0 && offset < CM_ARGB_GEN2_A1_PACKET_LENGTH && it != color_data.end())
{
usb_buf[offset] = *it;
offset++;
it++;
}
hid_write(dev, usb_buf, CM_ARGB_GEN2_A1_PACKET_LENGTH);
std::this_thread::sleep_for(std::chrono::milliseconds(20));
}
}
void CMARGBGen2A1controller::SetCustomSequence(unsigned int zone_id)
{
unsigned char usb_buf[CM_ARGB_GEN2_A1_PACKET_LENGTH];
const unsigned char static_seq = 0x01;
/*---------------------------------------------*\
| Set the mode sequence to full static |
| (01 for static) |
| Set custom speed for sequence mode |
\*---------------------------------------------*/
memset(usb_buf, 0x00, CM_ARGB_GEN2_A1_PACKET_LENGTH);
usb_buf[1] = CM_ARGB_GEN2_A1_COMMAND;
usb_buf[2] = CM_ARGB_GEN2_A1_CUSTOM_SPEED;
usb_buf[3] = CM_ARGB_GEN2_A1_WRITE;
usb_buf[4] = 1 << zone_id; // CHANNEL
usb_buf[5] = 0x32;
hid_write(dev, usb_buf, CM_ARGB_GEN2_A1_PACKET_LENGTH);
std::this_thread::sleep_for(std::chrono::milliseconds(CM_ARGB_GEN2_A1_SLEEP_SHORT));
SetPipelineStaticSequence(zone_id);
}
void CMARGBGen2A1controller::SetPipelineStaticSequence(unsigned int zone_id)
{
/*------------------------------------------------*\
| Set the mode sequence to full static |
| All steps on the effect pipeline to 0x01 STATIC |
\*------------------------------------------------*/
unsigned char usb_buf[CM_ARGB_GEN2_A1_PACKET_LENGTH];
memset(usb_buf, CM_ARGB_GEN2_A1_STATIC_MODE, CM_ARGB_GEN2_A1_PACKET_LENGTH);
usb_buf[0] = 0x00;
usb_buf[1] = CM_ARGB_GEN2_A1_COMMAND;
usb_buf[2] = CM_ARGB_GEN2_A1_CUSTOM_SEQUENCES;
usb_buf[3] = CM_ARGB_GEN2_A1_WRITE;
usb_buf[4] = 1 << zone_id;
usb_buf[5] = static_seq;
usb_buf[6] = static_seq;
usb_buf[7] = static_seq;
usb_buf[8] = static_seq;
usb_buf[9] = static_seq;
usb_buf[10] = static_seq;
hid_write(dev, usb_buf, CM_ARGB_GEN2_A1_PACKET_LENGTH);
std::this_thread::sleep_for(std::chrono::milliseconds(CM_ARGB_GEN2_A1_SLEEP_LONG));
}
void CMARGBGen2A1controller::ResetDevice()
{
unsigned char usb_buf[CM_ARGB_GEN2_A1_PACKET_LENGTH];
memset(usb_buf, 0x00, CM_ARGB_GEN2_A1_PACKET_LENGTH);
usb_buf[1] = CM_ARGB_GEN2_A1_COMMAND;
usb_buf[2] = CM_ARGB_GEN2_A1_RESET;
usb_buf[3] = CM_ARGB_GEN2_A1_WRITE;
hid_write(dev, usb_buf, CM_ARGB_GEN2_A1_PACKET_LENGTH);
std::this_thread::sleep_for(std::chrono::milliseconds(10));
std::this_thread::sleep_for(std::chrono::milliseconds(CM_ARGB_GEN2_A1_SLEEP_LONG));
}
@@ -4,6 +4,7 @@
| Driver for Cooler Master ARGB Gen 2 A1 controller |
| |
| Morgan Guimard (morg) 26 Jun 2022 |
| Fabian R (kderazorback) 11 Aug 2023 |
| |
| This file is part of the OpenRGB project |
| SPDX-License-Identifier: GPL-2.0-only |
@@ -16,9 +17,13 @@
#include "RGBController.h"
#define CM_ARGB_GEN2_A1_PACKET_LENGTH 65
#define CM_ARGB_GEN2_A1_CHANNEL_MAX_SIZE 48
#define CM_ARGB_GEN2_A1_CHANNEL_MAX_SIZE 72
#define CM_ARGB_GEN2_A1_CHANNEL_COUNT 3
#define CM_ARGB_GEN2_A1_PACKETS_PER_CHANNEL 3
#define CM_ARGB_GEN2_A1_PACKETS_PER_CHANNEL 2
#define CM_ARGB_GEN2_A1_SLEEP_SHORT 5
#define CM_ARGB_GEN2_A1_SLEEP_MEDIUM 45
#define CM_ARGB_GEN2_A1_SLEEP_LONG 70
enum
{
@@ -41,12 +46,15 @@ enum
CM_ARGB_GEN2_A1_BRIGHTNESS_MAX = 0xFF,
CM_ARGB_GEN2_A1_BRIGHTNESS_MIN = 0x00,
CM_ARGB_GEN2_A1_SPEED_MAX = 0x04,
CM_ARGB_GEN2_A1_SPEED_HALF = 0x02,
CM_ARGB_GEN2_A1_SPEED_MIN = 0x00,
};
enum
{
CM_ARGB_GEN2_A1_COMMAND = 0x80,
CM_ARGB_GEN2_A1_COMMAND_EXTRA_1 = 0x81,
CM_ARGB_GEN2_A1_COMMAND_EXTRA_2 = 0x82,
CM_ARGB_GEN2_A1_READ = 0x01,
CM_ARGB_GEN2_A1_WRITE = 0x02,
CM_ARGB_GEN2_A1_RESPONSE = 0x03
@@ -55,13 +63,24 @@ enum
enum
{
CM_ARGB_GEN2_A1_SIZES = 0x06,
CM_ARGB_GEN2_A1_SET_RGB_VALUES = 0x08,
CM_ARGB_GEN2_A1_FLASH = 0x0B,
CM_ARGB_GEN2_A1_IDENTIFY = 0x0A,
CM_ARGB_GEN2_A1_LIGHTNING_CONTROL = 0x01,
CM_ARGB_GEN2_A1_HW_MODE_SETUP = 0x03,
CM_ARGB_GEN2_A1_CUSTOM_SEQUENCES = 0x10,
CM_ARGB_GEN2_A1_CUSTOM_SPEED = 0x11
CM_ARGB_GEN2_A1_CUSTOM_SPEED = 0x11,
CM_ARGB_GEN2_A1_RESET = 0xC0,
CM_ARGB_GEN2_A1_APPLY_CHANGES = 0xB0
};
enum
{
CM_ARGB_GEN2_A1_CHANNEL_A = 0x01,
CM_ARGB_GEN2_A1_CHANNEL_B = 0x02,
CM_ARGB_GEN2_A1_CHANNEL_C = 0x04,
CM_ARGB_GEN2_A1_CHANNEL_ALL = 0xFF,
CM_ARGB_GEN2_A1_SUBCHANNEL_ALL = 0xFF
};
class CMARGBGen2A1controller
@@ -73,7 +92,7 @@ public:
std::string GetSerialString();
std::string GetDeviceLocation();
void SendDirectChannel(unsigned int zone_id, std::vector<RGBColor> colors);
void SendChannelColors(unsigned int zone_id, unsigned int subchannel_id, std::vector<RGBColor> colors);
void SetupZoneSize(unsigned int zone_id, unsigned int size);
void SetupDirectMode();
void SetMode(unsigned int mode_value, unsigned char speed, unsigned char brightness, RGBColor color, bool random);
@@ -86,5 +105,7 @@ private:
hid_device* dev;
void SetCustomSequence(unsigned int zone_id);
void SetPipelineStaticSequence(unsigned int zone_id);
std::vector<unsigned char> CreateColorData(std::vector<RGBColor> colors);
void ResetDevice();
};
@@ -4,6 +4,7 @@
| Driver for Cooler Master ARGB Gen 2 A1 controller |
| |
| Morgan Guimard (morg) 26 Jun 2022 |
| Fabian R (kderazorback) 11 Aug 2023 |
| |
| This file is part of the OpenRGB project |
| SPDX-License-Identifier: GPL-2.0-only |
@@ -21,9 +22,14 @@
@direct :white_check_mark:
@effects :white_check_mark:
@detectors DetectCoolerMasterARGBGen2A1
@comment This device does not have Gen 2 support in OpenRGB yet.
@comment OpenRGB partially supports Gen 2 protocol for this device.
Gen2 has auto-resize feature and parallel to serial magical stuff.<
Gen2 has auto-resize feature and parallel to serial magical stuff,
Strip size is auto detected by the controller but not reported
back to OpenRGB. Configure zones and segments for each channel
to allow individual addressing.
Take note that this controller is extremely slow, using fast
update rates may introduce color artifacts.<
\*-------------------------------------------------------------------*/
RGBController_CMARGBGen2A1Controller::RGBController_CMARGBGen2A1Controller(CMARGBGen2A1controller* controller_ptr)
@@ -217,7 +223,6 @@ void RGBController_CMARGBGen2A1Controller::ResizeZone(int zone, int new_size)
{
zones[zone].leds_count = new_size;
// todo: refactor with above code
unsigned int total_leds = 0;
for(unsigned int channel = 0; channel < CM_ARGB_GEN2_A1_CHANNEL_COUNT; channel++)
@@ -241,7 +246,18 @@ void RGBController_CMARGBGen2A1Controller::DeviceUpdateLEDs()
{
for(unsigned int channel = 0; channel < CM_ARGB_GEN2_A1_CHANNEL_COUNT; channel ++)
{
UpdateZoneLEDs(channel);
if (zones[channel].segments.size() > 0)
{
unsigned int i = 0;
for(std::vector<segment>::iterator it = zones[channel].segments.begin(); it != zones[channel].segments.end(); it++)
{
UpdateSegmentLEDs(channel, i++);
}
}
else
{
UpdateSegmentLEDs(channel, CM_ARGB_GEN2_A1_SUBCHANNEL_ALL);
}
}
}
@@ -254,17 +270,40 @@ void RGBController_CMARGBGen2A1Controller::UpdateZoneLEDs(int zone)
std::vector<RGBColor> zone_colors(colors.begin() + start , colors.begin() + end);
if(modes[active_mode].value == CM_ARGB_GEN2_A1_DIRECT_MODE)
{
controller->SendDirectChannel(zone, zone_colors);
}
else
{
controller->SetCustomColors(zone, zone_colors);
}
controller->SendChannelColors(zone, CM_ARGB_GEN2_A1_SUBCHANNEL_ALL, zone_colors);
}
}
void RGBController_CMARGBGen2A1Controller::UpdateSegmentLEDs(int zone, int subchannel)
{
if(zones[zone].leds_count <= 0)
{
return;
}
unsigned int start = zones[zone].start_idx;
unsigned int end = start + zones[zone].leds_count;
bool use_direct_mode = modes[active_mode].value == CM_ARGB_GEN2_A1_DIRECT_MODE || modes[active_mode].value == CM_ARGB_GEN2_A1_CUSTOM_MODE;
std::vector<RGBColor> color_vector(colors.begin() + start, colors.begin() + start + end);
if(use_direct_mode)
{
if(zones[zone].segments.size() > 0)
{
start += zones[zone].segments[subchannel].start_idx;
end += zones[zone].segments[subchannel].start_idx + zones[zone].segments[subchannel].leds_count;
color_vector = std::vector<RGBColor>(colors.begin() + start , colors.begin() + end);
}
controller->SendChannelColors(zone, subchannel, color_vector);
return;
}
controller->SendChannelColors(zone, CM_ARGB_GEN2_A1_SUBCHANNEL_ALL, color_vector);
}
void RGBController_CMARGBGen2A1Controller::UpdateSingleLED(int /*led*/)
{
DeviceUpdateLEDs();
@@ -4,6 +4,7 @@
| Driver for Cooler Master ARGB Gen 2 A1 controller |
| |
| Morgan Guimard (morg) 26 Jun 2022 |
| Fabian R (kderazorback) 11 Aug 2023 |
| |
| This file is part of the OpenRGB project |
| SPDX-License-Identifier: GPL-2.0-only |
@@ -25,6 +26,7 @@ public:
void ResizeZone(int zone, int new_size);
void DeviceUpdateLEDs();
void UpdateZoneLEDs(int zone);
void UpdateSegmentLEDs(int zone, int subchannel);
void UpdateSingleLED(int led);
void SetCustomMode();
void DeviceUpdateMode();
@@ -63,6 +63,25 @@ const std::vector<unsigned int> mk850_keymap =
11, 18, 25, 53, 81, 88, 95, 116, 123, 130, 137, 144, 158,
};
/*-------------------------------------------------------------*\
| CoolerMaster SK (60%) |
\*-------------------------------------------------------------*/
const std::vector<unsigned int> sk620_keymap =
{
/* T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 T15 */
/* L1 ESC 1 2 3 4 5 6 7 8 9 0 - = BPSC R1 */
8, 15, 22, 29, 36, 43, 50, 57, 64, 71, 78, 85, 92, 106,
/* L2 TAB Q W E R T Y U I O P [ ] R2 */
9, 23, 30, 37, 44, 51, 58, 65, 72, 79, 86, 93, 100,
/* L3 CPLK A S D F G H J K L ; " \ ENTR R3 */
10, 24, 31, 38, 45, 52, 59, 66, 73, 80, 87, 94, 101, 108,
/* L4 LSFT ISO\ Z X C V B N M , . # RSFT ARWU DEL R$ */
11, 18, 25, 32, 39, 46, 53, 60, 67, 74, 81, 88, 95, 102, 109,
/* L5 LCTL LWIN LALT SPACE RALT RWFNC ARWL ARDN ARWR R5 */
12, 19, 26, 54, 82, 89, 96, 103, 110,
/* B1 B2 B3 B4 B5 B6 B7 B8 B9 B10 B11 B12 B13 B14 B15 B15 */
};
/*-------------------------------------------------------------*\
| CoolerMaster SK (60%) |
\*-------------------------------------------------------------*/
@@ -209,7 +228,7 @@ const std::vector<unsigned int> ck530_v2_keymap =
/* CPLK A S D F G H J K L ; " # ENTR */
10, 24, 31, 38, 45, 52, 59, 66, 73, 80, 87, 94, 108, 115,
/* LSFT ISO\ Z X C V B N M , . / RSFT ARWU */
11, 18, 25, 32, 39, 46, 53, 60, 67, 74, 88, 81, 116, 130,
11, 18, 25, 32, 39, 46, 53, 60, 67, 74, 88, 81, 116, 130,
/* LCTL LWIN LALT SPC RALT RFNC RMNU RCTL ARWL ARWD ARWR */
12, 19, 26, 54, 82, 89, 96, 117, 124, 131, 138,
};
@@ -261,7 +280,7 @@ keyboard_keymap_overlay_values mk_pro_s_layout
{
/*---------------------------------------------------------------------------------------------------------*\
| Edit Keys |
| Zone, Row, Column, Value, Key, OpCode, |
| Zone, Row, Column, Value, Key, Alternate Name, OpCode, |
\*---------------------------------------------------------------------------------------------------------*/
},
};
@@ -278,12 +297,12 @@ keyboard_keymap_overlay_values mk_pro_l_layout
{
/*---------------------------------------------------------------------------------------------------------*\
| Edit Keys |
| Zone, Row, Column, Value, Key, OpCode, |
| Zone, Row, Column, Value, Name, Alternate Name, OpCode, |
\*---------------------------------------------------------------------------------------------------------*/
{ 0, 0, 17, 101, "Key: P1", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 18, 109, "Key: P2", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 19, 117, "Key: P3", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 20, 119, "Key: P4", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 17, 101, "Key: P1", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 18, 109, "Key: P2", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 19, 117, "Key: P3", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 20, 119, "Key: P4", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
},
};
@@ -303,16 +322,74 @@ keyboard_keymap_overlay_values mk850_layout
{
/*---------------------------------------------------------------------------------------------------------*\
| Edit Keys |
| Zone, Row, Column, Value, Key, OpCode, |
| Zone, Row, Column, Value, Name, Alternate Name, OpCode, |
\*---------------------------------------------------------------------------------------------------------*/
{ 0, 0, 17, 146, "Key: Aim <|>", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // aimpad <|>
{ 0, 0, 18, 153, "Key: Aim -", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // aimpad +
{ 0, 0, 19, 160, "Key: Aim +", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // aimpad -
{ 0, 1, 0, 0, "Key: M5", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 2, 0, 1, "Key: M4", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 3, 0, 2, "Key: M3", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 4, 0, 3, "Key: M2", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 5, 0, 4, "Key: M1", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 17, 146, "Key: Aim <|>", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // aimpad <|>
{ 0, 0, 18, 153, "Key: Aim -", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // aimpad +
{ 0, 0, 19, 160, "Key: Aim +", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // aimpad -
{ 0, 1, 0, 0, "Key: M5", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 2, 0, 1, "Key: M4", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 3, 0, 2, "Key: M3", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 4, 0, 3, "Key: M2", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 5, 0, 4, "Key: M1", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
},
};
keyboard_keymap_overlay_values sk620_layout
{
KEYBOARD_SIZE::KEYBOARD_SIZE_SIXTY,
{
sk620_keymap,
{
/* Add more regional layout fixes here */
}
},
{
/*-----------------------------------------------------------------------------------------------------------------------------*\
| Edit Keys |
| Zone, Row, Column, Value, Key, Alternate Name, OpCode, |
\*-----------------------------------------------------------------------------------------------------------------------------*/
{ 0, 0, 0, 7, "Light: Top 1", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_ROW, },
{ 0, 0, 1, 14, "Light: Top 2", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 2, 21, "Light: Top 3", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 3, 28, "Light: Top 4", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 4, 35, "Light: Top 5", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 5, 42, "Light: Top 6", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 6, 49, "Light: Top 7", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 7, 56, "Light: Top 8", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 8, 63, "Light: Top 9", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 9, 70, "Light: Top 10", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 10, 77, "Light: Top 11", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 11, 84, "Light: Top 12", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 12, 91, "Light: Top 13", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 13, 98, "Light: Top 14", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 14, 105, "Light: Top 14", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 1, 0, 0, "Light: Left 1", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 2, 0, 1, "Light: Left 2", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 3, 0, 2, "Light: Left 3", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 4, 0, 3, "Light: Left 4", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 5, 0, 4, "Light: Left 5", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 1, 16, 112, "Light: Right 1", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 2, 16, 113, "Light: Right 2", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 3, 16, 114, "Light: Right 3", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 4, 16, 115, "Light: Right 4", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 5, 16, 116, "Light: Right 5", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 0, 6, "Light: Bottom 1", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_ROW, },
{ 0, 6, 1, 20, "Light: Bottom 2", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 2, 27, "Light: Bottom 3", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 3, 34, "Light: Bottom 4", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 4, 41, "Light: Bottom 5", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 5, 48, "Light: Bottom 6", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 6, 55, "Light: Bottom 7", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 7, 62, "Light: Bottom 8", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 8, 69, "Light: Bottom 9", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 9, 76, "Light: Bottom 10", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 10, 83, "Light: Bottom 11", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 11, 90, "Light: Bottom 12", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 12, 97, "Light: Bottom 13", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 13, 104, "Light: Bottom 14", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 14, 111, "Light: Bottom 15", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 14, 118, "Light: Bottom 16", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
},
};
@@ -328,49 +405,49 @@ keyboard_keymap_overlay_values sk622_layout
{
/*---------------------------------------------------------------------------------------------------------*\
| Edit Keys |
| Zone, Row, Column, Value, Key, OpCode, |
| Zone, Row, Column, Value, Name, Alternate Name, OpCode, |
\*---------------------------------------------------------------------------------------------------------*/
{ 0, 0, 0, 7, "Light: Top 1", KEYBOARD_OPCODE_INSERT_ROW, },
{ 0, 0, 1, 14, "Light: Top 2", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 2, 21, "Light: Top 3", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 3, 28, "Light: Top 4", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 4, 35, "Light: Top 5", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 5, 42, "Light: Top 6", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 6, 49, "Light: Top 7", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 7, 56, "Light: Top 8", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 8, 63, "Light: Top 9", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 9, 70, "Light: Top 10", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 10, 77, "Light: Top 11", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 11, 84, "Light: Top 12", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 12, 91, "Light: Top 13", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 13, 98, "Light: Top 14", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 14, 105, "Light: Top 14", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 1, 0, 0, "Light: Left 1", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 2, 0, 1, "Light: Left 2", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 3, 0, 2, "Light: Left 3", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 4, 0, 3, "Light: Left 4", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 5, 0, 4, "Light: Left 5", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 1, 16, 112, "Light: Right 1", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 2, 16, 113, "Light: Right 2", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 3, 16, 114, "Light: Right 3", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 4, 16, 115, "Light: Right 4", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 5, 16, 116, "Light: Right 5", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 0, 6, "Light: Bottom 1", KEYBOARD_OPCODE_INSERT_ROW, },
{ 0, 6, 1, 20, "Light: Bottom 2", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 2, 27, "Light: Bottom 3", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 3, 34, "Light: Bottom 4", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 4, 41, "Light: Bottom 5", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 5, 48, "Light: Bottom 6", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 6, 55, "Light: Bottom 7", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 7, 62, "Light: Bottom 8", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 8, 69, "Light: Bottom 9", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 9, 76, "Light: Bottom 10", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 10, 83, "Light: Bottom 11", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 11, 90, "Light: Bottom 12", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 12, 97, "Light: Bottom 13", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 13, 104, "Light: Bottom 14", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 14, 111, "Light: Bottom 15", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 14, 118, "Light: Bottom 16", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 0, 7, "Light: Top 1", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_ROW, },
{ 0, 0, 1, 14, "Light: Top 2", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 2, 21, "Light: Top 3", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 3, 28, "Light: Top 4", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 4, 35, "Light: Top 5", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 5, 42, "Light: Top 6", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 6, 49, "Light: Top 7", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 7, 56, "Light: Top 8", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 8, 63, "Light: Top 9", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 9, 70, "Light: Top 10", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 10, 77, "Light: Top 11", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 11, 84, "Light: Top 12", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 12, 91, "Light: Top 13", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 13, 98, "Light: Top 14", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 14, 105, "Light: Top 14", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 1, 0, 0, "Light: Left 1", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 2, 0, 1, "Light: Left 2", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 3, 0, 2, "Light: Left 3", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 4, 0, 3, "Light: Left 4", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 5, 0, 4, "Light: Left 5", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 1, 16, 112, "Light: Right 1", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 2, 16, 113, "Light: Right 2", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 3, 16, 114, "Light: Right 3", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 4, 16, 115, "Light: Right 4", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 5, 16, 116, "Light: Right 5", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 0, 6, "Light: Bottom 1", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_ROW, },
{ 0, 6, 1, 20, "Light: Bottom 2", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 2, 27, "Light: Bottom 3", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 3, 34, "Light: Bottom 4", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 4, 41, "Light: Bottom 5", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 5, 48, "Light: Bottom 6", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 6, 55, "Light: Bottom 7", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 7, 62, "Light: Bottom 8", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 8, 69, "Light: Bottom 9", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 9, 76, "Light: Bottom 10", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 10, 83, "Light: Bottom 11", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 11, 90, "Light: Bottom 12", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 12, 97, "Light: Bottom 13", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 13, 104, "Light: Bottom 14", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 14, 111, "Light: Bottom 15", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 14, 118, "Light: Bottom 16", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
},
};
@@ -457,30 +534,30 @@ keyboard_keymap_overlay_values mk730_layout
{
/*---------------------------------------------------------------------------------------------------------*\
| Edit Keys |
| Zone, Row, Column, Value, Key, OpCode, |
| Zone, Row, Column, Value, Name, Alternate Name, OpCode, |
\*---------------------------------------------------------------------------------------------------------*/
{ 0, 1, 0, 1, "Light: Left 1", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 2, 0, 2, "Light: Left 2", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 3, 0, 3, "Light: Left 3", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 4, 0, 4, "Light: Left 4", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 1, 18, 141, "Light: Right 1", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 2, 18, 142, "Light: Right 2", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 3, 18, 143, "Light: Right 3", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 4, 18, 144, "Light: Right 4", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 1, 13, "Light: Bottom 1", KEYBOARD_OPCODE_INSERT_ROW, },
{ 0, 6, 2, 20, "Light: Bottom 2", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 3, 27, "Light: Bottom 3", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 4, 34, "Light: Bottom 4", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 5, 41, "Light: Bottom 5", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 6, 55, "Light: Bottom 6", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 7, 62, "Light: Bottom 7", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 8, 69, "Light: Logo", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 10, 76, "Light: Bottom 8", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 11, 90, "Light: Bottom 9", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 12, 104, "Light: Bottom 10", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 13, 111, "Light: Bottom 11", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 14, 118, "Light: Bottom 12", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 15, 125, "Light: Bottom 13", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 1, 0, 1, "Light: Left 1", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 2, 0, 2, "Light: Left 2", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 3, 0, 3, "Light: Left 3", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 4, 0, 4, "Light: Left 4", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 1, 18, 141, "Light: Right 1", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 2, 18, 142, "Light: Right 2", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 3, 18, 143, "Light: Right 3", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 4, 18, 144, "Light: Right 4", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 1, 13, "Light: Bottom 1", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_ROW, },
{ 0, 6, 2, 20, "Light: Bottom 2", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 3, 27, "Light: Bottom 3", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 4, 34, "Light: Bottom 4", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 5, 41, "Light: Bottom 5", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 6, 55, "Light: Bottom 6", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 7, 62, "Light: Bottom 7", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 8, 69, "Light: Logo", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 10, 76, "Light: Bottom 8", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 11, 90, "Light: Bottom 9", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 12, 104, "Light: Bottom 10", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 13, 111, "Light: Bottom 11", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 14, 118, "Light: Bottom 12", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 15, 125, "Light: Bottom 13", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
}
};
@@ -505,38 +582,38 @@ keyboard_keymap_overlay_values mk750_layout
{
/*---------------------------------------------------------------------------------------------------------*\
| Edit Keys |
| Zone, Row, Column, Value, Key, OpCode, |
| Zone, Row, Column, Value, Name, Alternate Name, OpCode, |
\*---------------------------------------------------------------------------------------------------------*/
{ 0, 0, 17, 140, KEY_EN_MEDIA_MUTE, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 18, 147, KEY_EN_MEDIA_PLAY_PAUSE, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 19, 154, KEY_EN_MEDIA_PREVIOUS, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 20, 161, KEY_EN_MEDIA_NEXT, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 1, 0, 1, "Light: Left 1", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 2, 0, 2, "Light: Left 2", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 3, 0, 3, "Light: Left 3", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 4, 0, 4, "Light: Left 4", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 1, 22, 170, "Light: Right 1", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 2, 22, 171, "Light: Right 2", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 3, 22, 172, "Light: Right 3", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 4, 22, 173, "Light: Right 4", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 1, 20, "Light: Bottom 1", KEYBOARD_OPCODE_INSERT_ROW, },
{ 0, 6, 2, 27, "Light: Bottom 2", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 3, 34, "Light: Bottom 3", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 4, 41, "Light: Bottom 4", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 5, 55, "Light: Bottom 5", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 6, 62, "Light: Bottom 6", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 7, 69, "Light: Bottom 7", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 8, 76, "Light: Bottom 8", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 9, 83, "Light: Bottom 9", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 10, 90, "Light: Bottom 10", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 11, 104, "Light: Bottom 11", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 12, 111, "Light: Bottom 12", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 13, 118, "Light: Bottom 13", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 14, 125, "Light: Bottom 14", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 15, 132, "Light: Bottom 15", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 16, 146, "Light: Bottom 16", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 17, 153, "Light: Bottom 17", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 18, 160, "Light: Bottom 18", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 17, 140, KEY_EN_MEDIA_MUTE, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 18, 147, KEY_EN_MEDIA_PLAY_PAUSE, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 19, 154, KEY_EN_MEDIA_PREVIOUS, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 20, 161, KEY_EN_MEDIA_NEXT, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 1, 0, 1, "Light: Left 1", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 2, 0, 2, "Light: Left 2", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 3, 0, 3, "Light: Left 3", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 4, 0, 4, "Light: Left 4", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 1, 22, 170, "Light: Right 1", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 2, 22, 171, "Light: Right 2", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 3, 22, 172, "Light: Right 3", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 4, 22, 173, "Light: Right 4", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 1, 20, "Light: Bottom 1", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_ROW, },
{ 0, 6, 2, 27, "Light: Bottom 2", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 3, 34, "Light: Bottom 3", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 4, 41, "Light: Bottom 4", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 5, 55, "Light: Bottom 5", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 6, 62, "Light: Bottom 6", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 7, 69, "Light: Bottom 7", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 8, 76, "Light: Bottom 8", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 9, 83, "Light: Bottom 9", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 10, 90, "Light: Bottom 10", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 11, 104, "Light: Bottom 11", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 12, 111, "Light: Bottom 12", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 13, 118, "Light: Bottom 13", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 14, 125, "Light: Bottom 14", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 15, 132, "Light: Bottom 15", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 16, 146, "Light: Bottom 16", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 17, 153, "Light: Bottom 17", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 18, 160, "Light: Bottom 18", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
}
};
@@ -593,11 +670,11 @@ keyboard_keymap_overlay_values ck550v2_layout
{
/*---------------------------------------------------------------------------------------------------------*\
| Edit Keys |
| Zone, Row, Column, Value, Key, OpCode, |
| Zone, Row, Column, Value, Name, Alternate Name, OpCode, |
\*---------------------------------------------------------------------------------------------------------*/
{ 0, 0, 17, 120, "Indicator: N", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 18, 126, "Indicator: C", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 19, 132, "Indicator: S", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 17, 120, "Indicator: N", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 18, 126, "Indicator: C", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 19, 132, "Indicator: S", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
},
};
@@ -657,6 +734,24 @@ cm_kb_device mk850_device
&mk850_layout,
};
cm_kb_device sk620w_device
{
COOLERMASTER_KEYBOARD_SK620W_PID,
{
&cm_generic_zone,
},
&sk620_layout,
};
cm_kb_device sk620b_device
{
COOLERMASTER_KEYBOARD_SK620B_PID,
{
&cm_generic_zone,
},
&sk620_layout,
};
cm_kb_device sk622w_device
{
COOLERMASTER_KEYBOARD_SK622W_PID,
@@ -786,6 +881,8 @@ const cm_kb_device* cm_kb_devices[] =
&mk_pro_s_device,
&mk_pro_l_device,
&mk850_device,
&sk620w_device,
&sk620b_device,
&sk622w_device,
&sk622b_device,
&sk630_device,
@@ -106,8 +106,8 @@ typedef struct
#define COOLERMASTER_KEYBOARD_MK750_PID 0x0067 // fw1.2 [libcmmk #25 !9, !14, signal]
#define COOLERMASTER_KEYBOARD_MK770_PID 0x01D5 // unsupported
#define COOLERMASTER_KEYBOARD_MK850_PID 0x0069 // [signal]
#define COOLERMASTER_KEYBOARD_SK620B_PID 0x0157 // unsupported
#define COOLERMASTER_KEYBOARD_SK620W_PID 0x0159 // [signal]
#define COOLERMASTER_KEYBOARD_SK620B_PID 0x0157 // [openrgb #4292]
#define COOLERMASTER_KEYBOARD_SK620W_PID 0x0159 // [openrgb #4292, signal]
#define COOLERMASTER_KEYBOARD_SK622B_PID 0x0149 // [openrgb #3110, signal #217(closed)]
#define COOLERMASTER_KEYBOARD_SK622W_PID 0x014B // [signal]
#define COOLERMASTER_KEYBOARD_SK630_PID 0x0089 // [openrgb #967, libcmmk !21]
@@ -14,6 +14,7 @@
#include <string>
#include "CMKeyboardV2Controller.h"
#include "LogManager.h"
#include "StringUtils.h"
CMKeyboardV2Controller::CMKeyboardV2Controller(hid_device* dev_handle, hid_device_info* dev_info) : CMKeyboardAbstractController(dev_handle, dev_info)
{
@@ -98,7 +99,7 @@ std::string CMKeyboardV2Controller::_GetFirmwareVersion()
}
std::u16string usFirmwareVersion(reinterpret_cast<const char16_t*>(cVersionStr+8));
std::string sFirmwareVersion(usFirmwareVersion.begin(), usFirmwareVersion.end());
std::string sFirmwareVersion(StringUtils::u16string_to_string(usFirmwareVersion));
LOG_VERBOSE("[%s] GetFirmwareVersion(): [%s]", m_deviceName.c_str(), sFirmwareVersion.c_str());
@@ -0,0 +1,192 @@
/*---------------------------------------------------------*\
| CMMM712Controller.cpp |
| |
| Driver for Cooler Master MM712 mouse |
| Derived from CMMM711Controller.cpp |
| |
| Chris M (Dr_No) 14 Feb 2021 |
| Frans Meulenbroeks 08 Dec 2024 |
| |
| This file is part of the OpenRGB project |
| SPDX-License-Identifier: GPL-2.0-only |
\*---------------------------------------------------------*/
#include <cstring>
#include "CMMM712Controller.h"
#include "StringUtils.h"
#define CM_MM712_PACKET_SIZE 65
#define CM_MM712_INTERRUPT_TIMEOUT 250
#define HID_MAX_STR 255
enum
{
CM_MM712_MODE_BYTE = 4,
CM_MM712_BRIGHTNESS_BYTE = 6,
CM_MM712_SPEED_BYTE = 7,
CM_MM712_RED_BYTE = 8,
CM_MM712_GREEN_BYTE = 9,
CM_MM712_BLUE_BYTE = 10,
};
CMMM712Controller::CMMM712Controller(hid_device* dev_handle, char *_path)
{
dev = dev_handle;
location = _path;
/*---------------------------------------------------------*\
| Get device name from HID manufacturer and product strings |
\*---------------------------------------------------------*/
wchar_t name_string[HID_MAX_STR];
hid_get_manufacturer_string(dev, name_string, HID_MAX_STR);
device_name = StringUtils::wstring_to_string(name_string);
hid_get_product_string(dev, name_string, HID_MAX_STR);
device_name.append(" ").append(StringUtils::wstring_to_string(name_string));
SendInitPacket();
GetModeStatus();
GetColorStatus(current_mode);
}
CMMM712Controller::~CMMM712Controller()
{
hid_close(dev);
}
void CMMM712Controller::SendBuffer(uint8_t *buffer, uint8_t buffer_size)
{
hid_write(dev, buffer, buffer_size);
hid_read_timeout(dev, buffer, buffer_size, CM_MM712_INTERRUPT_TIMEOUT);
}
void CMMM712Controller::GetColorStatus(uint8_t mode)
{
uint8_t buffer[CM_MM712_PACKET_SIZE] = { 0x00, 0x4C, 0x81, 0x03, mode };
SendBuffer(buffer, CM_MM712_PACKET_SIZE);
initial_color = ToRGBColor(buffer[CM_MM712_RED_BYTE - 2], buffer[CM_MM712_GREEN_BYTE - 2], buffer[CM_MM712_BLUE_BYTE - 2]);
}
void CMMM712Controller::GetModeStatus()
{
uint8_t buffer[CM_MM712_PACKET_SIZE] = { 0x00, 0x4C, 0x81, 0x07 };
SendBuffer(buffer, CM_MM712_PACKET_SIZE);
current_mode = buffer[CM_MM712_MODE_BYTE - 1];
SetMode(current_mode);
}
std::string CMMM712Controller::GetDeviceName()
{
return(device_name);
}
std::string CMMM712Controller::GetSerial()
{
wchar_t serial_string[HID_MAX_STR];
int ret = hid_get_serial_number_string(dev, serial_string, HID_MAX_STR);
if(ret != 0)
{
return("");
}
return(StringUtils::wstring_to_string(serial_string));
}
std::string CMMM712Controller::GetLocation()
{
return("HID: " + location);
}
unsigned char CMMM712Controller::GetMode()
{
return(current_mode);
}
RGBColor CMMM712Controller::GetInitialLedColor()
{
return initial_color;
}
void CMMM712Controller::SetLedsDirect(RGBColor color)
{
unsigned char buffer[CM_MM712_PACKET_SIZE] =
{
0x00, 0x5A, 0x81, 0x03,
(unsigned char)RGBGetRValue(color),
(unsigned char)RGBGetGValue(color),
(unsigned char)RGBGetBValue(color)
};
if(current_mode!=CM_MM712_MODE_DIRECT)
{
SetDirectMode(true);
}
hid_write(dev, buffer, CM_MM712_PACKET_SIZE);
// SendBuffer(buffer, CM_MM712_PACKET_SIZE);
}
void CMMM712Controller::SendUpdate(uint8_t mode, uint8_t speed, RGBColor color, uint8_t brightness)
{
unsigned char buffer[CM_MM712_PACKET_SIZE] =
{
0x00, 0x4C, 0x81, 0x04, mode, 0xFF, brightness, speed,
(unsigned char)RGBGetRValue(color),
(unsigned char)RGBGetGValue(color),
(unsigned char)RGBGetBValue(color),
0xFF
};
if(current_mode==CM_MM712_MODE_DIRECT)
{
SetDirectMode(false);
SendInitPacket();
}
SendBuffer(buffer, CM_MM712_PACKET_SIZE);
SetMode(mode);
}
void CMMM712Controller::SendInitPacket()
{
unsigned char buffer[CM_MM712_PACKET_SIZE] = { 0x00, 0x44, 0x81, 0x02 };
SendBuffer(buffer, CM_MM712_PACKET_SIZE);
}
void CMMM712Controller::SetDirectMode(bool onoff)
{
unsigned char buffer[CM_MM712_PACKET_SIZE] = { 0x00, 0x5a, 0x81, (unsigned char)(0x01+onoff) };
hid_write(dev, buffer, CM_MM712_PACKET_SIZE);
}
void CMMM712Controller::SetMode(uint8_t mode)
{
unsigned char buffer[CM_MM712_PACKET_SIZE] = { 0x00, 0x4C, 0x81, 0x08, mode};
if(current_mode==CM_MM712_MODE_DIRECT)
{
SendInitPacket();
}
SendBuffer(buffer, CM_MM712_PACKET_SIZE);
current_mode = mode;
}
void CMMM712Controller::SetProfile(uint8_t profile)
{
unsigned char buffer[CM_MM712_PACKET_SIZE] = { 0x00, 0x44, 0x81, 0x01, profile};
SendBuffer(buffer, CM_MM712_PACKET_SIZE);
}
void CMMM712Controller::SaveStatus()
{
unsigned char buffer[CM_MM712_PACKET_SIZE] = { 0x54, 0x81, 1};
SendBuffer(buffer, CM_MM712_PACKET_SIZE);
}
@@ -0,0 +1,69 @@
/*---------------------------------------------------------*\
| CMMM712Controller.h |
| |
| Driver for Cooler Master MM712 mouse |
| Derived from CMMM711Controller.h |
| |
| Chris M (Dr_No) 14 Feb 2021 |
| Frans Meulenbroeks 08 Dec 2024 |
| |
| This file is part of the OpenRGB project |
| SPDX-License-Identifier: GPL-2.0-only |
\*---------------------------------------------------------*/
#pragma once
#include <string>
#include <hidapi.h>
#include "RGBController.h"
enum
{
CM_MM712_MODE_STATIC = 0, //Static Mode
CM_MM712_MODE_BREATHING = 1, //Breathing Mode
CM_MM712_MODE_SPECTRUM_CYCLE = 2, //Spectrum Cycle Mode
CM_MM712_MODE_OFF = 3, //Turn Off
CM_MM712_MODE_DIRECT = 4, //Direct LED Control
};
enum
{
CM_MM712_SPEED_SLOWEST = 0x0, //Slowest speed
CM_MM712_SPEED_NORMAL = 0x2, //Normal speed
CM_MM712_SPEED_FASTEST = 0x4, //Fastest speed
};
class CMMM712Controller
{
public:
CMMM712Controller(hid_device* dev_handle, char *_path);
~CMMM712Controller();
std::string GetDeviceName();
std::string GetSerial();
std::string GetLocation();
uint8_t GetMode();
RGBColor GetInitialLedColor();
void SendUpdate(uint8_t mode, uint8_t speed, RGBColor color, uint8_t brightness);
void SetMode(uint8_t mode);
void SetDirectMode(bool onoff);
void SetLedsDirect(RGBColor color);
void SaveStatus();
private:
std::string device_name;
std::string serial;
std::string location;
hid_device* dev;
uint8_t current_mode;
RGBColor initial_color;
void GetColorStatus(uint8_t mode);
void GetModeStatus();
void SendInitPacket();
void SetProfile(uint8_t profile);
void SendBuffer(uint8_t *buffer, uint8_t buffer_size);
};
@@ -0,0 +1,108 @@
Analysis of the MM712 protocol
By Frans Meulenbroeks
PID 0x2516, VID 0x0169
We must use interface 3
C = Command, R = Response
Init:
=====
C: 0x00 0x44 0x81 0x02
R: 0x45 0x81 0x02 0x02 0x01
First byte is second byte of command+1, 2nd and 3rd byte are the 3rd and 4th byte of the command
No idea what the last two bytes are.
This init command inits to normal state.
After that one can submit all normal commands. These give a response.
C: 0x00 0x5a 0x81 0x02
R: 0x5b 0x81 0x02
This init command inits to direct state.
After that one can submit all direct state commands. These give no response
Note that you can always change between the two states by giving the appropriate init command.
I have also seen
C: 0x00, 0x46, 0x81
0x46 is command code
R: 47 81 50 03 00 00 f2 9b 1e 00 64 02 00 00 00 ff 03 06 00 ...
No idea what the response data is
This also brought the device to type-4 state.
NORMAL COMMANDS
===============
Query stored colors:
====================
C: 0x00 0x4c 0x81 0x03 0
R: 0x4d 0x81 0x03 0x06 0xff 0x00 0xff 0xff 0x00
Brig Spee Red Gree Blue Speed is not really relevant
These are the settings for the static mode
C: 0x00 0x4c 0x81 0x03 1
R: 0x4d 0x81 0x03 0xff 0xff 0x04 0xff 0x00 0x00 0xff
Brig Spee Red Gree Blue
These are the settings for the breathing mode
C: 0x00 0x4c 0x81 0x03 2
R: 0x81 0x03 0x06 0x7f 0x02
Brig Spee
These are the settings for the cycling mode
C: 0x00 0x4c 0x81 0x03 3
R: 0x4d 0x81 0x03 0x06 0x00
This is the response for the off mode
Other/higher numbers also return this value
Detecting the mode:
===================
C: 0x00 0x4c 0x81 0x07
R: 0x4d 0x81 0x07 0x01
^ actual mode
Setting the mode:
=================
C: 0x00 0x4c 0x81 0x08 0x01
^ new mode 0=static,1=breathing,2=cycling,3 or higher=off
R: 0x4d 0x81 0x07 0x01
can't explain the 0x07; later calls returned 0x08 in this field
C: 0x00 0x4c 0x81 0x08 0x02
R: 0x4d 0x81 0x08 0x02
Setting the color:
==================
C: 0x00 0x4c 0x81 0x04 0x00 0xff 0xff 0x02 0x00 0xff 0x00
cmd mode ???? brig spee red gree blue Speed is only relevant for breathing and cyclic, color is not relevant for cyclic
This sets the color, speed and brightness for the specific mode.
Note that this does not imply a mode switch
The first 0xff byte does not seem to do anything. I've changed to a different number but saw no result
R: 0x47 0x81 0x50 0x03 0x00 0x00 0xf2 0x9b 0x1e 0x00 0x64 0x02 0x00 0x00 0x00 0xff 0x01 0xff 0x00 0x00
No idea what this means, Reply seems independent of color set
Saving values:
==============
C: 0x00 0x54 0x81 0x01
This saves the actual color for all modes and the mode itself to internal flash
R: 0x55 0x81 0x01 0x00
Change Profile
==============
C: 0x00 0x44 0x81 0x01 0x02
^ new profile must be in [0..4] otherwise this is a no-op
R: 0x45 0x81 0x01 0x02 0x01
^ it is unclear what this value is, values 0, 1 and 2 are observed
DIRECT COMMANDS
==============
C: 0x00 0x5a 0x81 0x01
Leave direct state (return to normal, note that a new init for normal is needed)
C: 0x00 0x5a 0x81 0x03 0xff 0x00 0x25
red gree blue This changes the color right away. No response is generated.
CoolerMaster MasterPlus software uses this to dynamically generate animations
Final notes:
It is possible to change the mode on the mouse (see mouse doc).
This also changes the value in flash
It is also possible to change the colors in mode 0 and 1 using the mouse.
8 different colors can be selected. I did not find a way to define these colors from software so I suspect these are hardcoded
@@ -0,0 +1,199 @@
/*---------------------------------------------------------*\
| RGBController_CMMM712Controller.cpp |
| |
| RGBController for Cooler Master MM712 mouse |
| Derived from RGBController_CMMM712Controller.cpp |
| |
| Chris M (Dr_No) 14 Feb 2021 |
| Frans Meulenbroeks 08 Dec 2024 |
| |
| This file is part of the OpenRGB project |
| SPDX-License-Identifier: GPL-2.0-only |
\*---------------------------------------------------------*/
#include "RGBController_CMMM712Controller.h"
#define applyBrightness(c, bright) ((RGBColor) ((RGBGetBValue(c) * bright / CM_MM_ARGB_BRIGHTNESS_MAX_DEFAULT) << 16 | (RGBGetGValue(c) * bright / CM_MM_ARGB_BRIGHTNESS_MAX_DEFAULT) << 8 | (RGBGetRValue(c) * bright / CM_MM_ARGB_BRIGHTNESS_MAX_DEFAULT)))
/**------------------------------------------------------------------*\
@name Coolermaster Master Mouse
@category Mouse
@type USB
@save :robot:
@direct :white_check_mark:
@effects :white_check_mark:
@detectors DetectCoolerMasterMouse
@comment
\*-------------------------------------------------------------------*/
RGBController_CMMM712Controller::RGBController_CMMM712Controller(CMMM712Controller* controller_ptr)
{
controller = controller_ptr;
name = controller->GetDeviceName();
vendor = "Cooler Master";
type = DEVICE_TYPE_MOUSE;
description = controller->GetDeviceName();
serial = controller->GetSerial();
location = controller->GetLocation();
mode Direct;
Direct.name = "Direct";
Direct.value = CM_MM712_MODE_DIRECT;
Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR;
Direct.brightness_min = CM_MM_ARGB_BRIGHTNESS_MIN;
Direct.brightness_max = CM_MM_ARGB_BRIGHTNESS_MAX_DEFAULT;
Direct.brightness = CM_MM_ARGB_BRIGHTNESS_MAX_DEFAULT;
Direct.color_mode = MODE_COLORS_PER_LED;
modes.push_back(Direct);
mode Static;
Static.name = "Static";
Static.value = CM_MM712_MODE_STATIC;
Static.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_MANUAL_SAVE;
Static.brightness_min = CM_MM_ARGB_BRIGHTNESS_MIN;
Static.brightness_max = CM_MM_ARGB_BRIGHTNESS_MAX_DEFAULT;
Static.brightness = CM_MM_ARGB_BRIGHTNESS_MAX_DEFAULT;
Static.colors_min = 1;
Static.colors_max = 1;
Static.colors.resize(Static.colors_max);
Static.speed_min = CM_MM712_SPEED_SLOWEST;
Static.speed_max = CM_MM712_SPEED_FASTEST;
Static.color_mode = MODE_COLORS_MODE_SPECIFIC;
Static.speed = CM_MM712_SPEED_NORMAL;
modes.push_back(Static);
mode Breathing;
Breathing.name = "Breathing";
Breathing.value = CM_MM712_MODE_BREATHING;
Breathing.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_MANUAL_SAVE;
Breathing.brightness_min = CM_MM_ARGB_BRIGHTNESS_MIN;
Breathing.brightness_max = CM_MM_ARGB_BRIGHTNESS_MAX_DEFAULT;
Breathing.brightness = CM_MM_ARGB_BRIGHTNESS_MAX_DEFAULT;
Breathing.colors_min = 1;
Breathing.colors_max = 1;
Breathing.colors.resize(Breathing.colors_max);
Breathing.speed_min = CM_MM712_SPEED_SLOWEST;
Breathing.speed_max = CM_MM712_SPEED_FASTEST;
Breathing.color_mode = MODE_COLORS_MODE_SPECIFIC;
Breathing.speed = CM_MM712_SPEED_NORMAL;
modes.push_back(Breathing);
mode Spectrum_Cycle;
Spectrum_Cycle.name = "Spectrum Cycle";
Spectrum_Cycle.value = CM_MM712_MODE_SPECTRUM_CYCLE;
Spectrum_Cycle.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_MANUAL_SAVE;
Spectrum_Cycle.brightness_min = CM_MM_ARGB_BRIGHTNESS_MIN;
Spectrum_Cycle.brightness_max = CM_MM_ARGB_BRIGHTNESS_MAX_SPECTRUM;
Spectrum_Cycle.brightness = CM_MM_ARGB_BRIGHTNESS_MAX_SPECTRUM;
Spectrum_Cycle.speed_min = CM_MM712_SPEED_SLOWEST;
Spectrum_Cycle.speed_max = CM_MM712_SPEED_FASTEST;
Spectrum_Cycle.color_mode = MODE_COLORS_NONE;
Spectrum_Cycle.speed = CM_MM712_SPEED_NORMAL;
modes.push_back(Spectrum_Cycle);
mode Off;
Off.name = "Off";
Off.value = CM_MM712_MODE_OFF;
Off.flags = MODE_FLAG_MANUAL_SAVE;
Off.color_mode = MODE_COLORS_NONE;
modes.push_back(Off);
Init_Controller(); //Only processed on first run
SetupZones();
uint8_t temp_mode = controller->GetMode();
for(int mode_index = 0; mode_index < (int)modes.size(); mode_index++)
{
if(modes[mode_index].value == temp_mode)
{
active_mode = mode_index;
break;
}
}
colors[0] = controller->GetInitialLedColor();
if(modes[active_mode].color_mode == MODE_COLORS_MODE_SPECIFIC)
{
modes[active_mode].colors[0] = colors[0];
}
}
RGBController_CMMM712Controller::~RGBController_CMMM712Controller()
{
delete controller;
}
void RGBController_CMMM712Controller::Init_Controller()
{
zone mouse_zone;
mouse_zone.name = name;
mouse_zone.type = ZONE_TYPE_SINGLE;
mouse_zone.leds_min = 1;
mouse_zone.leds_max = 1;
mouse_zone.leds_count = 1;
mouse_zone.matrix_map = NULL;
zones.push_back(mouse_zone);
led logo_led;
logo_led.name = "Logo LED";
logo_led.value = 0;
leds.push_back(logo_led);
}
void RGBController_CMMM712Controller::SetupZones()
{
SetupColors();
}
void RGBController_CMMM712Controller::ResizeZone(int /*zone*/, int /*new_size*/)
{
/*---------------------------------------------------------*\
| This device does not support resizing zones |
\*---------------------------------------------------------*/
}
void RGBController_CMMM712Controller::DeviceUpdateLEDs()
{
modes[active_mode].brightness=255;
RGBColor logo = applyBrightness(colors[0], modes[active_mode].brightness);
controller->SetLedsDirect(logo);
}
void RGBController_CMMM712Controller::UpdateZoneLEDs(int /*zone*/)
{
DeviceUpdateLEDs();
}
void RGBController_CMMM712Controller::UpdateSingleLED(int /*led*/)
{
DeviceUpdateLEDs();
}
void RGBController_CMMM712Controller::DeviceUpdateMode()
{
if(modes[active_mode].value==CM_MM712_MODE_DIRECT)
{
controller->SetDirectMode(true);
}
else
{
controller->SetDirectMode(false);
RGBColor colour = 0;
if(modes[active_mode].color_mode == MODE_COLORS_MODE_SPECIFIC )
{
colour = modes[active_mode].colors[0];
}
controller->SendUpdate(modes[active_mode].value, modes[active_mode].speed, colour, modes[active_mode].brightness);
}
}
void RGBController_CMMM712Controller::DeviceSaveMode()
{
DeviceUpdateMode();
controller->SaveStatus();
}
@@ -0,0 +1,42 @@
/*---------------------------------------------------------*\
| RGBController_CMMM712Controller.h |
| |
| RGBController for Cooler Master M712 mouse |
| Derived from RGBController_CMMM712Controller.h |
| |
| Chris M (Dr_No) 14 Feb 2021 |
| Frans Meulenbroeks 08 Dec 2024 |
| |
| This file is part of the OpenRGB project |
| SPDX-License-Identifier: GPL-2.0-only |
\*---------------------------------------------------------*/
#pragma once
#include "RGBController.h"
#include "CMMM712Controller.h"
#define CM_MM_ARGB_BRIGHTNESS_MIN 0x00
#define CM_MM_ARGB_BRIGHTNESS_MAX_DEFAULT 0xFF
#define CM_MM_ARGB_BRIGHTNESS_MAX_SPECTRUM 0x7F
class RGBController_CMMM712Controller : public RGBController
{
public:
RGBController_CMMM712Controller(CMMM712Controller* controller_ptr);
~RGBController_CMMM712Controller();
void SetupZones();
void ResizeZone(int zone, int new_size);
void DeviceUpdateLEDs();
void UpdateZoneLEDs(int zone);
void UpdateSingleLED(int led);
void DeviceUpdateMode();
void DeviceSaveMode();
private:
void Init_Controller();
CMMM712Controller* controller;
};
@@ -29,7 +29,7 @@ RGBController_CMMonitorController::RGBController_CMMonitorController(CMMonitorCo
controller = controller_ptr;
name = "CoolerMaster LED Controller A1";
vendor = "CoolerMaster";
type = DEVICE_TYPE_ACCESSORY;
type = DEVICE_TYPE_MONITOR;
description = name;
location = controller->GetDeviceLocation();
serial = controller->GetSerialString();
@@ -11,7 +11,6 @@
#pragma once
#include <vector>
#include "RGBController.h"
#include "CMMonitorController.h"
@@ -13,13 +13,13 @@
#include <hidapi.h>
#include "Detector.h"
#include "LogManager.h"
#include "RGBController.h"
/*-----------------------------------------------------*\
| Coolermaster specific includes |
\*-----------------------------------------------------*/
#include "RGBController_CMMMController.h"
#include "RGBController_CMMM711Controller.h"
#include "RGBController_CMMM712Controller.h"
#include "RGBController_CMMP750Controller.h"
#include "RGBController_CMARGBController.h"
#include "RGBController_CMSmallARGBController.h"
@@ -50,6 +50,7 @@
#define COOLERMASTER_ARGB_PID 0x1011
#define COOLERMASTER_ARGB_GEN2_A1_PID 0x0173
#define COOLERMASTER_ARGB_GEN2_A1_V2_PID 0x01C9
#define COOLERMASTER_ARGB_GEN2_A1_MINI_PID 0x01CB
#define COOLERMASTER_SMALL_ARGB_PID 0x1000
#define COOLERMASTER_RGB_PID 0x004F
@@ -59,6 +60,7 @@
#define COOLERMASTER_MM530_PID 0x0065
#define COOLERMASTER_MM531_PID 0x0097
#define COOLERMASTER_MM711_PID 0x0101
#define COOLERMASTER_MM712_PID 0x0169
#define COOLERMASTER_MM720_PID 0x0141
#define COOLERMASTER_MM730_PID 0x0165
@@ -231,6 +233,15 @@ void DetectCoolerMasterMouse(hid_device_info* info, const std::string& name)
}
break;
case COOLERMASTER_MM712_PID:
{
CMMM712Controller* controller = new CMMM712Controller(dev, info->path);
RGBController_CMMM712Controller* rgb_controller = new RGBController_CMMM712Controller(controller);
// Constructor sets the name
ResourceManager::get()->RegisterRGBController(rgb_controller);
}
break;
default:
LOG_DEBUG("[%s] Controller not created as the product ID %04X is missing from detector switch", name.c_str(), info->product_id);
}
@@ -297,6 +308,8 @@ REGISTER_HID_DETECTOR_IPU("Cooler Master MasterKeys Pro S", DetectCooler
REGISTER_HID_DETECTOR_IPU("Cooler Master MasterKeys Pro L", DetectCoolerMasterV1Keyboards, COOLERMASTER_VID, COOLERMASTER_KEYBOARD_PRO_L_PID, 1, 0xFF00, 1);
REGISTER_HID_DETECTOR_IPU("Cooler Master MasterKeys Pro L White", DetectCoolerMasterV1Keyboards, COOLERMASTER_VID, COOLERMASTER_KEYBOARD_PRO_L_WHITE_PID, 1, 0xFF00, 1);
REGISTER_HID_DETECTOR_IPU("Cooler Master MK850", DetectCoolerMasterV2Keyboards, COOLERMASTER_VID, COOLERMASTER_KEYBOARD_MK850_PID, 1, 0xFF00, 1);
REGISTER_HID_DETECTOR_IPU("Cooler Master SK620 White", DetectCoolerMasterV2Keyboards, COOLERMASTER_VID, COOLERMASTER_KEYBOARD_SK620W_PID, 1, 0xFF00, 1);
REGISTER_HID_DETECTOR_IPU("Cooler Master SK620 Black", DetectCoolerMasterV2Keyboards, COOLERMASTER_VID, COOLERMASTER_KEYBOARD_SK620B_PID, 1, 0xFF00, 1);
REGISTER_HID_DETECTOR_IPU("Cooler Master SK622 White", DetectCoolerMasterV2Keyboards, COOLERMASTER_VID, COOLERMASTER_KEYBOARD_SK622W_PID, 1, 0xFF00, 1);
REGISTER_HID_DETECTOR_IPU("Cooler Master SK622 Black", DetectCoolerMasterV2Keyboards, COOLERMASTER_VID, COOLERMASTER_KEYBOARD_SK622B_PID, 1, 0xFF00, 1);
REGISTER_HID_DETECTOR_IPU("Cooler Master SK630", DetectCoolerMasterV2Keyboards, COOLERMASTER_VID, COOLERMASTER_KEYBOARD_SK630_PID, 1, 0xFF00, 1);
@@ -316,6 +329,7 @@ REGISTER_HID_DETECTOR_IPU("Cooler Master CK550 V1 / CK552", DetectCooler
REGISTER_HID_DETECTOR_IPU("Cooler Master ARGB", DetectCoolerMasterARGB, COOLERMASTER_VID, COOLERMASTER_ARGB_PID, 0, 0xFF00, 1);
REGISTER_HID_DETECTOR_IPU("Cooler Master ARGB Gen 2 A1", DetectCoolerMasterARGBGen2A1, COOLERMASTER_VID, COOLERMASTER_ARGB_GEN2_A1_PID, 1, 0xFF01, 1);
REGISTER_HID_DETECTOR_IPU("Cooler Master ARGB Gen 2 A1 V2", DetectCoolerMasterARGBGen2A1, COOLERMASTER_VID, COOLERMASTER_ARGB_GEN2_A1_V2_PID, 1, 0xFF01, 1);
REGISTER_HID_DETECTOR_IPU("Cooler Master ARGB Gen 2 A1 Mini", DetectCoolerMasterARGBGen2A1, COOLERMASTER_VID, COOLERMASTER_ARGB_GEN2_A1_MINI_PID, 1, 0xFF01, 1);
REGISTER_HID_DETECTOR_IPU("Cooler Master RGB", DetectCoolerMasterRGB, COOLERMASTER_VID, COOLERMASTER_RGB_PID, 1, 0xFF00, 1);
REGISTER_HID_DETECTOR_IPU("Cooler Master Small ARGB", DetectCoolerMasterSmallARGB, COOLERMASTER_VID, COOLERMASTER_SMALL_ARGB_PID, 0, 0xFF00, 1);
@@ -325,6 +339,7 @@ REGISTER_HID_DETECTOR_IPU("Cooler Master Small ARGB", DetectCooler
REGISTER_HID_DETECTOR_IPU("Cooler Master MM530", DetectCoolerMasterMouse, COOLERMASTER_VID, COOLERMASTER_MM530_PID, 1, 0xFF00, 1);
//REGISTER_HID_DETECTOR_IPU("Cooler Master MM531", DetectCoolerMasterMouse, COOLERMASTER_VID, COOLERMASTER_MM531_PID, 1, 0xFF00, 1);
REGISTER_HID_DETECTOR_IPU("Cooler Master MM711", DetectCoolerMasterMouse, COOLERMASTER_VID, COOLERMASTER_MM711_PID, 1, 0xFF00, 1);
REGISTER_HID_DETECTOR_IPU("Cooler Master MM712", DetectCoolerMasterMouse, COOLERMASTER_VID, COOLERMASTER_MM712_PID, 3, 0xFF0A, 2);
REGISTER_HID_DETECTOR_IPU("Cooler Master MM720", DetectCoolerMasterMouse, COOLERMASTER_VID, COOLERMASTER_MM720_PID, 1, 0xFF00, 1);
REGISTER_HID_DETECTOR_IPU("Cooler Master MM730", DetectCoolerMasterMouse, COOLERMASTER_VID, COOLERMASTER_MM730_PID, 1, 0xFF00, 1);
@@ -339,8 +354,8 @@ REGISTER_HID_DETECTOR_PU ("Cooler Master MP750 Medium", DetectCooler
| Coolermaster GPUs |
| PIDs defined in `CMR6000Controller.h` |
\*-----------------------------------------------------*/
REGISTER_HID_DETECTOR_I ("Cooler Master Radeon 6000 GPU", DetectCoolerMasterGPU, COOLERMASTER_VID, COOLERMASTER_RADEON_6000_PID, 1 );
REGISTER_HID_DETECTOR_I ("Cooler Master Radeon 6900 GPU", DetectCoolerMasterGPU, COOLERMASTER_VID, COOLERMASTER_RADEON_6900_PID, 1 );
REGISTER_HID_DETECTOR_I ("Cooler Master Radeon RX 6000 GPU", DetectCoolerMasterGPU, COOLERMASTER_VID, COOLERMASTER_RADEON_6000_PID, 1 );
REGISTER_HID_DETECTOR_I ("Cooler Master Radeon RX 6900 GPU", DetectCoolerMasterGPU, COOLERMASTER_VID, COOLERMASTER_RADEON_6900_PID, 1 );
/*-----------------------------------------------------*\
| Coolermaster Monitors |
@@ -9,11 +9,9 @@
| SPDX-License-Identifier: GPL-2.0-only |
\*---------------------------------------------------------*/
#include <vector>
#include <hidapi.h>
#include "Detector.h"
#include "CorsairCommanderCoreController.h"
#include "RGBController.h"
#include "RGBController_CorsairCommanderCore.h"
/*-----------------------------------------------------*\
@@ -10,6 +10,7 @@
\*---------------------------------------------------------*/
#include <cstring>
#include <chrono>
#include "CorsairDominatorPlatinumController.h"
using namespace std::chrono_literals;
@@ -9,12 +9,9 @@
| SPDX-License-Identifier: GPL-2.0-only |
\*---------------------------------------------------------*/
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include "Detector.h"
#include "CorsairDominatorPlatinumController.h"
#include "RGBController.h"
#include "RGBController_CorsairDominatorPlatinum.h"
#include "SettingsManager.h"
#include "LogManager.h"
@@ -9,11 +9,9 @@
| SPDX-License-Identifier: GPL-2.0-only |
\*---------------------------------------------------------*/
#include <vector>
#include <libusb.h>
#include "Detector.h"
#include "CorsairHydro2Controller.h"
#include "RGBController.h"
#include "RGBController_CorsairHydro2.h"
#define CORSAIR_VID 0x1B1C
@@ -9,11 +9,9 @@
| SPDX-License-Identifier: GPL-2.0-only |
\*---------------------------------------------------------*/
#include <vector>
#include <libusb.h>
#include "Detector.h"
#include "CorsairHydroController.h"
#include "RGBController.h"
#include "RGBController_CorsairHydro.h"
/*-----------------------------------------------------*\
@@ -104,7 +104,7 @@ CorsairHydroPlatinumController::~CorsairHydroPlatinumController()
std::string CorsairHydroPlatinumController::GetLocation()
{
return location;
return ("HID: " + location);
}
std::string CorsairHydroPlatinumController::GetFirmwareString()
@@ -12,7 +12,6 @@
#include <hidapi.h>
#include "Detector.h"
#include "CorsairHydroPlatinumController.h"
#include "RGBController.h"
#include "RGBController_CorsairHydroPlatinum.h"
/*-----------------------------------------------------*\
@@ -31,6 +30,7 @@
#define CORSAIR_HYDRO_H100I_PRO_XT_V2_PID 0x0C2D
#define CORSAIR_HYDRO_H115I_PRO_XT_PID 0x0C21
#define CORSAIR_HYDRO_H150I_PRO_XT_PID 0x0C22
#define CORSAIR_HYDRO_H100I_ELITE_PID 0x0C40
void DetectCorsairHydroPlatinumControllers(hid_device_info* info, const std::string& name)
{
@@ -53,3 +53,4 @@ REGISTER_HID_DETECTOR("Corsair Hydro H100i Pro XT", DetectCorsairHydroPl
REGISTER_HID_DETECTOR("Corsair Hydro H100i Pro XT v2", DetectCorsairHydroPlatinumControllers, CORSAIR_VID, CORSAIR_HYDRO_H100I_PRO_XT_V2_PID );
REGISTER_HID_DETECTOR("Corsair Hydro H115i Pro XT", DetectCorsairHydroPlatinumControllers, CORSAIR_VID, CORSAIR_HYDRO_H115I_PRO_XT_PID );
REGISTER_HID_DETECTOR("Corsair Hydro H150i Pro XT", DetectCorsairHydroPlatinumControllers, CORSAIR_VID, CORSAIR_HYDRO_H150I_PRO_XT_PID );
REGISTER_HID_DETECTOR("Corsair Hydro H100i Elite", DetectCorsairHydroPlatinumControllers, CORSAIR_VID, CORSAIR_HYDRO_H100I_ELITE_PID );
@@ -9,11 +9,9 @@
| SPDX-License-Identifier: GPL-2.0-only |
\*---------------------------------------------------------*/
#include <vector>
#include <hidapi.h>
#include "Detector.h"
#include "CorsairLightingNodeController.h"
#include "RGBController.h"
#include "RGBController_CorsairLightingNode.h"
#define CORSAIR_VID 0x1B1C
@@ -67,7 +67,7 @@ CorsairPeripheralV2Controller::CorsairPeripheralV2Controller(hid_device* dev_han
hid_write(dev, buffer, CORSAIR_V2_WRITE_SIZE);
uint16_t result = hid_read_timeout(dev, buffer, CORSAIR_V2_PACKET_SIZE, CORSAIR_V2_TIMEOUT);
result++;
pkt_sze = result;
pkt_sze = std::max(result, (uint16_t)CORSAIR_V2_WRITE_SIZE);
LOG_DEBUG("[%s] Packet length set to %d", device_name.c_str(), pkt_sze);
/*---------------------------------------------------------*\
@@ -78,6 +78,8 @@ CorsairPeripheralV2Controller::CorsairPeripheralV2Controller(hid_device* dev_han
for(uint16_t i = 0; i < CORSAIR_V2_DEVICE_COUNT; i++)
{
LOG_DEBUG("[%s] Checking PID %04X against index %d with %04X - %smatch", device_name.c_str(),
pid, i, corsair_v2_device_list[i]->pid, corsair_v2_device_list[i]->pid == pid ? "" : "no ");
if(corsair_v2_device_list[i]->pid == pid)
{
/*---------------------------------------------------------*\
@@ -12,8 +12,6 @@
\*-----------------------------------------------------*/
#include <hidapi.h>
#include "Detector.h"
#include "LogManager.h"
#include "RGBController.h"
/*-----------------------------------------------------*\
| Corsair Peripheral specific includes |
@@ -71,7 +69,9 @@ REGISTER_HID_DETECTOR_IP("Corsair K55 RGB PRO", DetectCorsai
REGISTER_HID_DETECTOR_IP("Corsair K60 RGB PRO", DetectCorsairV2SoftwareControllers, CORSAIR_VID, CORSAIR_K60_RGB_PRO_PID, 1, 0xFF42);
REGISTER_HID_DETECTOR_IP("Corsair K60 RGB PRO Low Profile", DetectCorsairV2SoftwareControllers, CORSAIR_VID, CORSAIR_K60_RGB_PRO_LP_PID, 1, 0xFF42);
REGISTER_HID_DETECTOR_IP("Corsair K60 RGB PRO TKL", DetectCorsairV2HardwareControllers, CORSAIR_VID, CORSAIR_K60_RGB_PRO_TKL_PID, 1, 0xFF42);
REGISTER_HID_DETECTOR_IP("Corsair K70 Core RGB", DetectCorsairV2HardwareControllers, CORSAIR_VID, CORSAIR_K70_CORE_RGB_PID, 1, 0xFF42);
REGISTER_HID_DETECTOR_IP("Corsair K70 RGB PRO", DetectCorsairV2HardwareControllers, CORSAIR_VID, CORSAIR_K70_RGB_PRO_PID, 1, 0xFF42);
REGISTER_HID_DETECTOR_IP("Corsair K70 RGB PRO V2", DetectCorsairV2HardwareControllers, CORSAIR_VID, CORSAIR_K70_RGB_PRO_V2_PID, 1, 0xFF42);
REGISTER_HID_DETECTOR_IP("Corsair K70 RGB TKL", DetectCorsairV2HardwareControllers, CORSAIR_VID, CORSAIR_K70_RGB_TKL_PID, 1, 0xFF42);
REGISTER_HID_DETECTOR_IP("Corsair K70 RGB TKL Champion Series", DetectCorsairV2HardwareControllers, CORSAIR_VID, CORSAIR_K70_RGB_TKL_CS_PID, 1, 0xFF42);
REGISTER_HID_DETECTOR_IP("Corsair K100 RGB Optical", DetectCorsairV2HardwareControllers, CORSAIR_VID, CORSAIR_K100_OPTICAL_V1_PID, 1, 0xFF42);
@@ -58,10 +58,10 @@ keyboard_keymap_overlay_values corsair_K60_layout
}
},
{
/*---------------------------------------------------------------------------------------------------------*\
| Edit Keys |
| Zone, Row, Column, Value, Key, OpCode, |
\*---------------------------------------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------------------------------------------------------------------*\
| Edit Keys |
| Zone, Row, Column, Value, Name, Alternate Name, OpCode |
\*-------------------------------------------------------------------------------------------------------------------------------------*/
}
};
@@ -75,10 +75,10 @@ keyboard_keymap_overlay_values corsair_K60_tkl_layout
}
},
{
/*---------------------------------------------------------------------------------------------------------*\
| Edit Keys |
| Zone, Row, Column, Value, Key, OpCode, |
\*---------------------------------------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------------------------------------------------------------------*\
| Edit Keys |
| Zone, Row, Column, Value, Name, Alternate Name, OpCode |
\*-------------------------------------------------------------------------------------------------------------------------------------*/
}
};
@@ -92,10 +92,36 @@ keyboard_keymap_overlay_values corsair_k70_layout
}
},
{
/*---------------------------------------------------------------------------------------------------------*\
| Edit Keys |
| Zone, Row, Column, Value, Key, OpCode, |
\*---------------------------------------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------------------------------------------------------------------*\
| Edit Keys |
| Zone, Row, Column, Value, Name, Alternate Name, OpCode |
\*-------------------------------------------------------------------------------------------------------------------------------------*/
}
};
keyboard_keymap_overlay_values corsair_k70_pro_layout
{
KEYBOARD_SIZE::KEYBOARD_SIZE_FULL,
{
corsair_full_size_values,
{
/* Add more regional layout fixes here */
}
},
{
/*-------------------------------------------------------------------------------------------------------------------------------------*\
| Edit Keys |
| Zone, Row, Column, Value, Key, Alternate Name, OpCode, |
\*-------------------------------------------------------------------------------------------------------------------------------------*/
{ 0, 0, 0, 128, "Profile", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_ROW, }, // Insert Profile into new row
{ 0, 0, 1, 113, "Light", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Light key
{ 0, 0, 2, 114, "Lock", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Lock Key
{ 0, 0, 10, 191, "Logo", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Logo
{ 0, 0, 18, 102, KEY_EN_MEDIA_MUTE, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Mute Key
{ 0, 1, 17, 123, KEY_EN_MEDIA_STOP, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Stop Key
{ 0, 1, 18, 126, KEY_EN_MEDIA_PREVIOUS, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Previous Track Key
{ 0, 1, 19, 124, KEY_EN_MEDIA_PLAY_PAUSE, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Play Pause Key
{ 0, 1, 20, 125, KEY_EN_MEDIA_NEXT, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Next Tack Key
}
};
@@ -109,20 +135,20 @@ keyboard_keymap_overlay_values corsair_K70_TKL_cs_layout
}
},
{
/*---------------------------------------------------------------------------------------------------------*\
| Edit Keys |
| Zone, Row, Column, Value, Key, OpCode, |
\*---------------------------------------------------------------------------------------------------------*/
{ 0, 0, 1, 123, KEY_EN_MEDIA_STOP, KEYBOARD_OPCODE_INSERT_ROW, }, // Insert Stop Key into new media keys row
{ 0, 0, 2, 126, KEY_EN_MEDIA_PREVIOUS, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Previous Track Key
{ 0, 0, 3, 124, KEY_EN_MEDIA_PLAY_PAUSE, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Play Pause Key
{ 0, 0, 4, 125, KEY_EN_MEDIA_NEXT, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Next Tack Key
{ 0, 0, 7, 1, "Logo L", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert 'Logo Left'
{ 0, 0, 8, 3, "Logo R", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert 'Logo Right'
{ 0, 0, 11, 128, "Profile", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Profile
{ 0, 0, 12, 113, "Light", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Light key
{ 0, 0, 13, 114, "Lock", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Lock Key
{ 0, 0, 14, 102, KEY_EN_MEDIA_MUTE, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Mute Key
/*-------------------------------------------------------------------------------------------------------------------------------------*\
| Edit Keys |
| Zone, Row, Column, Value, Name, Alternate Name, OpCode, |
\*-------------------------------------------------------------------------------------------------------------------------------------*/
{ 0, 0, 1, 123, KEY_EN_MEDIA_STOP, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_ROW, }, // Insert Stop Key into new media keys row
{ 0, 0, 2, 126, KEY_EN_MEDIA_PREVIOUS, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Previous Track Key
{ 0, 0, 3, 124, KEY_EN_MEDIA_PLAY_PAUSE, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Play Pause Key
{ 0, 0, 4, 125, KEY_EN_MEDIA_NEXT, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Next Tack Key
{ 0, 0, 7, 1, "Logo L", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert 'Logo Left'
{ 0, 0, 8, 3, "Logo R", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert 'Logo Right'
{ 0, 0, 11, 128, "Profile", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Profile
{ 0, 0, 12, 113, "Light", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Light key
{ 0, 0, 13, 114, "Lock", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Lock Key
{ 0, 0, 14, 102, KEY_EN_MEDIA_MUTE, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Mute Key
}
};
@@ -136,87 +162,87 @@ keyboard_keymap_overlay_values corsair_k100_layout
}
},
{
/*---------------------------------------------------------------------------------------------------------*\
| Edit Keys |
| Zone, Row, Column, Value, Key, OpCode, |
\*---------------------------------------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------------------------------------------------------------------*\
| Edit Keys |
| Zone, Row, Column, Value, Name, Alternate Name, OpCode, |
\*-------------------------------------------------------------------------------------------------------------------------------------*/
//media keys
{ 0, 0, 17, 123, KEY_EN_MEDIA_STOP, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 18, 126, KEY_EN_MEDIA_PREVIOUS, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 19, 124, KEY_EN_MEDIA_PLAY_PAUSE, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 20, 125, KEY_EN_MEDIA_NEXT, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 17, 123, KEY_EN_MEDIA_STOP, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 18, 126, KEY_EN_MEDIA_PREVIOUS, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 19, 124, KEY_EN_MEDIA_PLAY_PAUSE, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 20, 125, KEY_EN_MEDIA_NEXT, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
//upper row
{ 0, 0, 1, 128, "Profile", KEYBOARD_OPCODE_INSERT_ROW, },
{ 0, 0, 2, 137, "iCue", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 3, 114, "Lock", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 10, 190, "Logo L", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 11, 191, "Logo M", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 12, 192, "Logo R", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 18, 102, KEY_EN_MEDIA_MUTE, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 1, 128, "Profile", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_ROW, },
{ 0, 0, 2, 137, "iCue", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 3, 114, "Lock", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 10, 190, "Logo L", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 11, 191, "Logo M", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 12, 192, "Logo R", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 18, 102, KEY_EN_MEDIA_MUTE, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
//macro keys
{ 0, 1, 0, 131, "G1", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 2, 0, 132, "G2", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 3, 0, 133, "G3", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 4, 0, 134, "G4", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 5, 0, 135, "G5", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 0, 136, "G6", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 1, 0, 131, "G1", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 2, 0, 132, "G2", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 3, 0, 133, "G3", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 4, 0, 134, "G4", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 5, 0, 135, "G5", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 0, 136, "G6", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
//underglow 44 entries
//underglow upper
{ 0, 0, 0, 138, "Underglow 1", KEYBOARD_OPCODE_INSERT_ROW, },
{ 0, 0, 1, 139, "Underglow 2", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 2, 140, "Underglow 3", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 3, 141, "Underglow 4", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 4, 142, "Underglow 5", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 5, 143, "Underglow 6", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 6, 144, "Underglow 7", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 7, 145, "Underglow 8", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 8, 146, "Underglow 9", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 9, 147, "Underglow 10", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 10, 148, "Underglow 11", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 11, 149, "Underglow 12", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 12, 150, "Underglow 13", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 13, 151, "Underglow 14", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 14, 152, "Underglow 15", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 15, 153, "Underglow 16", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 16, 154, "Underglow 17", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 17, 155, "Underglow 18", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 18, 156, "Underglow 19", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 19, 157, "Underglow 20", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 20, 158, "Underglow 21", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 21, 159, "Underglow 22", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 0, 138, "Underglow 1", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_ROW, },
{ 0, 0, 1, 139, "Underglow 2", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 2, 140, "Underglow 3", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 3, 141, "Underglow 4", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 4, 142, "Underglow 5", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 5, 143, "Underglow 6", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 6, 144, "Underglow 7", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 7, 145, "Underglow 8", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 8, 146, "Underglow 9", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 9, 147, "Underglow 10", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 10, 148, "Underglow 11", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 11, 149, "Underglow 12", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 12, 150, "Underglow 13", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 13, 151, "Underglow 14", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 14, 152, "Underglow 15", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 15, 153, "Underglow 16", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 16, 154, "Underglow 17", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 17, 155, "Underglow 18", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 18, 156, "Underglow 19", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 19, 157, "Underglow 20", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 20, 158, "Underglow 21", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 21, 159, "Underglow 22", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
//underglow left
{ 0, 0, 0, 160, "Underglow 23", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 1, 0, 161, "Underglow 24", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 2, 0, 162, "Underglow 25", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 3, 0, 163, "Underglow 26", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 4, 0, 164, "Underglow 27", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 5, 0, 165, "Underglow 28", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 0, 166, "Underglow 29", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 7, 0, 167, "Underglow 30", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 8, 0, 168, "Underglow 31", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 9, 0, 169, "Underglow 32", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 10, 0, 170, "Underglow 33", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 0, 160, "Underglow 23", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 1, 0, 161, "Underglow 24", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 2, 0, 162, "Underglow 25", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 3, 0, 163, "Underglow 26", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 4, 0, 164, "Underglow 27", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 5, 0, 165, "Underglow 28", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 0, 166, "Underglow 29", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 7, 0, 167, "Underglow 30", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 8, 0, 168, "Underglow 31", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 9, 0, 169, "Underglow 32", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 10, 0, 170, "Underglow 33", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
//underglow right
{ 0, 0, 23, 171, "Underglow 34", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 1, 23, 172, "Underglow 35", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 2, 23, 173, "Underglow 36", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 3, 23, 174, "Underglow 37", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 4, 23, 175, "Underglow 38", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 5, 23, 176, "Underglow 39", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 23, 177, "Underglow 40", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 7, 23, 178, "Underglow 41", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 8, 23, 179, "Underglow 42", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 9, 23, 180, "Underglow 43", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 10, 23, 181, "Underglow 44", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 23, 171, "Underglow 34", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 1, 23, 172, "Underglow 35", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 2, 23, 173, "Underglow 36", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 3, 23, 174, "Underglow 37", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 4, 23, 175, "Underglow 38", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 5, 23, 176, "Underglow 39", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 6, 23, 177, "Underglow 40", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 7, 23, 178, "Underglow 41", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 8, 23, 179, "Underglow 42", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 9, 23, 180, "Underglow 43", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 10, 23, 181, "Underglow 44", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
//wheel
{ 0, 0, 0, 182, "Wheel 1", KEYBOARD_OPCODE_INSERT_ROW, },
{ 0, 0, 1, 183, "Wheel 2", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 2, 184, "Wheel 3", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 3, 185, "Wheel 4", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 4, 186, "Wheel 5", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 5, 187, "Wheel 6", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 6, 188, "Wheel 7", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 7, 189, "Wheel 8", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 0, 182, "Wheel 1", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_ROW, },
{ 0, 0, 1, 183, "Wheel 2", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 2, 184, "Wheel 3", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 3, 185, "Wheel 4", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 4, 186, "Wheel 5", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 5, 187, "Wheel 6", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 6, 188, "Wheel 7", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
{ 0, 0, 7, 189, "Wheel 8", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
}
};
@@ -764,6 +790,38 @@ static const corsair_v2_device k60_rgb_pro_tkl_device =
&corsair_K60_tkl_layout
};
/*-------------------------------------------------------------*\
| Corsair K70 Core RGB 1B1C:1BFD |
| |
| Zone "Keyboard" |
| Matrix |
| 6 Rows, 21 Columns |
\*-------------------------------------------------------------*/
static const corsair_v2_zone k70_core_rgb_zone =
{
ZONE_EN_KEYBOARD,
ZONE_TYPE_MATRIX,
6,
21
};
static const corsair_v2_device k70_core_rgb_device =
{
CORSAIR_K70_CORE_RGB_PID,
DEVICE_TYPE_KEYBOARD,
6,
21,
{
&k70_core_rgb_zone,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr
},
&corsair_k70_layout
};
/*-------------------------------------------------------------*\
| Corsair K70 RGB TKL 1B1C:1B73 |
| |
@@ -839,7 +897,7 @@ static const corsair_v2_zone k70_rgb_pro_zone =
{
ZONE_EN_KEYBOARD,
ZONE_TYPE_MATRIX,
6,
7,
21
};
@@ -847,7 +905,7 @@ static const corsair_v2_device k70_rgb_pro_device =
{
CORSAIR_K70_RGB_PRO_PID,
DEVICE_TYPE_KEYBOARD,
6,
7,
21,
{
&k70_rgb_pro_zone,
@@ -857,7 +915,31 @@ static const corsair_v2_device k70_rgb_pro_device =
nullptr,
nullptr
},
&corsair_k70_layout
&corsair_k70_pro_layout
};
/*-------------------------------------------------------------*\
| Corsair K70 RGB Pro V2 1B1C:1BB3 |
| |
| Zone "Keyboard" |
| Matrix |
| 6 Rows, 21 Columns |
\*-------------------------------------------------------------*/
static const corsair_v2_device k70_rgb_pro_v2_device =
{
CORSAIR_K70_RGB_PRO_V2_PID,
DEVICE_TYPE_KEYBOARD,
7,
21,
{
&k70_rgb_pro_zone,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr
},
&corsair_k70_pro_layout
};
/*-------------------------------------------------------------*\
@@ -1153,7 +1235,9 @@ const corsair_v2_device* corsair_v2_device_list_data[] =
&k60_rgb_pro_device,
&k60_rgb_pro_lp_device,
&k60_rgb_pro_tkl_device,
&k70_core_rgb_device,
&k70_rgb_pro_device,
&k70_rgb_pro_v2_device,
&k70_rgb_tkl_device,
&k70_rgb_tkl_cs_device,
&k100_mx_red_device,
@@ -72,7 +72,9 @@ typedef struct
#define CORSAIR_K60_RGB_PRO_PID 0x1BA0
#define CORSAIR_K60_RGB_PRO_LP_PID 0x1BAD
#define CORSAIR_K60_RGB_PRO_TKL_PID 0x1BC7
#define CORSAIR_K70_CORE_RGB_PID 0x1BFD
#define CORSAIR_K70_RGB_PRO_PID 0x1BC4
#define CORSAIR_K70_RGB_PRO_V2_PID 0x1BB3
#define CORSAIR_K70_RGB_TKL_PID 0x1B73
#define CORSAIR_K70_RGB_TKL_CS_PID 0x1BB9
#define CORSAIR_K100_OPTICAL_V1_PID 0x1B7C
@@ -9,12 +9,9 @@
| SPDX-License-Identifier: GPL-2.0-only |
\*---------------------------------------------------------*/
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include "Detector.h"
#include "CorsairVengeanceController.h"
#include "RGBController.h"
#include "RGBController_CorsairVengeance.h"
#include "i2c_smbus.h"
#include "pci_ids.h"
@@ -10,6 +10,7 @@
\*---------------------------------------------------------*/
#include <cstring>
#include <chrono>
#include "CorsairVengeanceProController.h"
using namespace std::chrono_literals;
@@ -9,12 +9,9 @@
| SPDX-License-Identifier: GPL-2.0-only |
\*---------------------------------------------------------*/
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include "Detector.h"
#include "CorsairVengeanceProController.h"
#include "RGBController.h"
#include "RGBController_CorsairVengeancePro.h"
#include "i2c_smbus.h"
#include "pci_ids.h"
@@ -8,7 +8,6 @@
\*---------------------------------------------------------*/
#include "Detector.h"
#include "RGBController.h"
#include "RGBController_CougarKeyboard.h"
#include "RGBController_CougarRevengerST.h"
@@ -9,7 +9,6 @@
| SPDX-License-Identifier: GPL-2.0-only |
\*---------------------------------------------------------*/
#include <cstring>
#include "RGBController.h"
#include "CrucialController.h"
@@ -10,12 +10,10 @@
\*---------------------------------------------------------*/
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include "Detector.h"
#include "CrucialController.h"
#include "LogManager.h"
#include "RGBController.h"
#include "RGBController_Crucial.h"
#include "i2c_smbus.h"
#include "pci_ids.h"
@@ -235,4 +233,4 @@ void DetectCrucialControllers(std::vector<i2c_smbus_interface*> &busses)
} /* DetectCrucialControllers() */
REGISTER_I2C_DETECTOR("Crucial", DetectCrucialControllers);
REGISTER_I2C_DETECTOR("Crucial Ballistix", DetectCrucialControllers);
@@ -12,7 +12,6 @@
#include <hidapi.h>
#include "Detector.h"
#include "CryorigH7QuadLumiController.h"
#include "RGBController.h"
#include "RGBController_CryorigH7QuadLumi.h"
/*-----------------------------------------------------*\
@@ -8,15 +8,9 @@
\*---------------------------------------------------------*/
#include <fcntl.h>
#include <fstream>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <string.h>
#include <vector>
#include "Detector.h"
#include "RGBController.h"
#include "RGBController_DMX.h"
#include "SettingsManager.h"
+73 -3
View File
@@ -20,6 +20,63 @@ DRGBController::DRGBController(hid_device* dev_handle, const char* path, unsigne
dev = dev_handle;
location = path;
device_pid = pid;
/*-----------------------------------------------------*\
| Initialize controller |
\*-----------------------------------------------------*/
InitController();
/*-----------------------------------------------------*\
| Exit hardware effects. Start a thread to continuously|
| send a keepalive packet every 500ms |
\*-----------------------------------------------------*/
keepalive_thread_run = 1;
keepalive_thread = new std::thread(&DRGBController::KeepaliveThread, this);
}
DRGBController::~DRGBController()
{
keepalive_thread_run = 0;
keepalive_thread->join();
delete keepalive_thread;
hid_close(dev);
}
void DRGBController::KeepaliveThread()
{
unsigned char sleep_buf[65];
sleep_buf[0] = 0x65;
while(keepalive_thread_run.load())
{
if((std::chrono::steady_clock::now() - last_commit_time) > std::chrono::seconds(1))
{
SendPacketFS(sleep_buf, 1, 0);
}
std::this_thread::sleep_for(500ms);
}
}
void DRGBController::InitController()
{
/*-----------------------------------------------------*\
| Get version |
\*-----------------------------------------------------*/
unsigned char cmd_data[65];
cmd_data[0]=0x00;
cmd_data[1]=0x02;
cmd_data[2]=0x00;
hid_write(dev, cmd_data, 65);
hid_read(dev, cmd_data, 6);
version[0] = cmd_data[1];
version[1] = cmd_data[2];
version[2] = cmd_data[3];
version[3] = cmd_data[4];
}
std::string DRGBController::GetFirmwareString()
{
return "v"+std::to_string(version[0]) + "." + std::to_string(version[1]) + "." + std::to_string(version[2]) + "." + std::to_string(version[3]);
}
std::string DRGBController::GetLocationString()
@@ -80,17 +137,30 @@ void DRGBController::SendPacket(unsigned char* colors, unsigned int buf_packets
}
}
void DRGBController::SendPacketFS(unsigned char* colors, unsigned int buf_packets , bool Array)
void DRGBController::SendPacketFS(unsigned char* colors, unsigned int buf_packets , unsigned int Array)
{
unsigned char usb_buf[65];
unsigned int buf_idx = 0;
memset(usb_buf, 0x00, sizeof(usb_buf));
usb_buf[0x00] = 0x00;
if(Array)
if(Array == 0x64)
{
for(unsigned int i = 0; i < buf_packets; i++)
{
usb_buf[1] = i == buf_packets - 1 ? 200 + i : 100 + i;
usb_buf[1] = i == buf_packets - 1 ? Array + 100 + i : Array + i;
buf_idx = i*63;
for(unsigned int k=0;k<63;k++)
{
usb_buf[k+2] = colors[buf_idx + k];
}
hid_write(dev, usb_buf, 65);
}
}
else if(Array == 0x47)
{
for(unsigned int i = 0; i < buf_packets; i++)
{
usb_buf[1] = i == buf_packets - 1 ? Array + 92 + i : Array + i;
buf_idx = i*63;
for(unsigned int k=0;k<63;k++)
{
+11 -1
View File
@@ -15,6 +15,7 @@
#include <vector>
#include <hidapi.h>
#include "RGBController.h"
#include "DeviceGuardManager.h"
#define DRGB_V4_ONE_PACKAGE_SIZE 316
#define DRGB_V4_PACKAGE_SIZE 340
@@ -25,14 +26,23 @@ class DRGBController
{
public:
DRGBController(hid_device* dev_handle, const char* path, unsigned short pid);
~DRGBController();
void KeepaliveThread();
void InitController();
std::string GetFirmwareString();
std::string GetLocationString();
std::string GetSerialString();
unsigned short GetDevicePID();
void SetChannelLEDs(unsigned char channel, RGBColor * colors, unsigned int num_colors);
void SendPacket(unsigned char* colors,unsigned int buf_packets ,unsigned int LEDtotal);
void SendPacketFS(unsigned char* colors,unsigned int buf_packets ,bool Array);
void SendPacketFS(unsigned char* colors,unsigned int buf_packets ,unsigned int Array);
private:
hid_device* dev;
std::string location;
std::thread* keepalive_thread;
std::atomic<bool> keepalive_thread_run;
std::chrono::time_point<std::chrono::steady_clock> last_commit_time;
unsigned char version[4] = {0, 0, 0,0};
DeviceGuardManager* guard_manager_ptr;
unsigned short device_pid;
};
@@ -9,11 +9,9 @@
| SPDX-License-Identifier: GPL-2.0-only |
\*---------------------------------------------------------*/
#include <vector>
#include <hidapi.h>
#include "Detector.h"
#include "DRGBController.h"
#include "RGBController.h"
#include "RGBController_DRGB.h"
void DetectDRGBControllers(hid_device_info* info, const std::string& name)
@@ -39,9 +37,16 @@ REGISTER_HID_DETECTOR("DRGB SIG V4F", DetectDRGBControllers, DRGBV4_VID, DRGB_SI
REGISTER_HID_DETECTOR("DRGB LED", DetectDRGBControllers, DRGBV3_VID, DRGB_LED_V3_PID);
REGISTER_HID_DETECTOR("DRGB Ultra V3", DetectDRGBControllers, DRGBV3_VID, DRGB_Ultra_V3_PID);
REGISTER_HID_DETECTOR("DRGB CORE V3", DetectDRGBControllers, DRGBV3_VID, DRGB_CORE_V3_PID);
REGISTER_HID_DETECTOR("DRGB ELITE", DetectDRGBControllers, DRGBV3_VID, DRGB_ELITE_PID);
REGISTER_HID_DETECTOR("NEEDMAX 10 ELITE", DetectDRGBControllers, DRGBV3_VID, DM_10_PID);
REGISTER_HID_DETECTOR("JPU ELITE", DetectDRGBControllers, DRGBV3_VID, JPU_12_PID);
REGISTER_HID_DETECTOR("DRGB LED Controller", DetectDRGBControllers, DRGBV2_VID, DRGB_LED_PID);
REGISTER_HID_DETECTOR("DRGB ULTRA", DetectDRGBControllers, DRGBV2_VID, DRGB_ULTRA_PID);
REGISTER_HID_DETECTOR("DRGB SIG AB", DetectDRGBControllers, DRGBV2_VID, DRGB_SIG_AB_PID);
REGISTER_HID_DETECTOR("DRGB SIG CD", DetectDRGBControllers, DRGBV2_VID, DRGB_SIG_CD_PID);
REGISTER_HID_DETECTOR("DRGB Strimer Controller", DetectDRGBControllers, DRGBV2_VID, DRGB_Strimer_PID);
REGISTER_HID_DETECTOR("YICO 8 ELITE", DetectDRGBControllers, YICO_VID, YICO_8_PID);
REGISTER_HID_DETECTOR("YICO 08 ELITE", DetectDRGBControllers, YICO_VID, YICO_08_PID);
REGISTER_HID_DETECTOR("YICO 08 ELITE", DetectDRGBControllers, YICO_VID, YICO_08_1_PID);
@@ -32,6 +32,7 @@ RGBController_DRGB::RGBController_DRGB(DRGBController* controller_ptr)
vendor = "DRGB";
description = "DRGB Controller Device";
type = DEVICE_TYPE_LEDSTRIP;
version = controller->GetFirmwareString();
location = controller->GetLocationString();
serial = controller->GetSerialString();
@@ -103,6 +104,21 @@ void RGBController_DRGB::SetupZones()
NUM_Channel_led = 256;
Version = 3;
break;
case DRGB_ELITE_PID:
NUM_CHANNELS = 8;
NUM_Channel_led = 132;
Version = 1;
break;
case DM_10_PID:
NUM_CHANNELS = 10;
NUM_Channel_led = 132;
Version = 1;
break;
case JPU_12_PID:
NUM_CHANNELS = 12;
NUM_Channel_led = 60;
Version = 1;
break;
case DRGB_LED_PID:
NUM_CHANNELS = 8;
@@ -129,13 +145,29 @@ void RGBController_DRGB::SetupZones()
NUM_Channel_led = 256;
Version = 2;
break;
case YICO_8_PID:
NUM_CHANNELS = 8;
NUM_Channel_led = 256;
Version = 3;
break;
case YICO_08_PID:
NUM_CHANNELS = 8;
NUM_Channel_led = 256;
Version = 3;
break;
case YICO_08_1_PID:
NUM_CHANNELS = 8;
NUM_Channel_led = 132;
Version = 3;
break;
}
zones.resize(NUM_CHANNELS);
for(unsigned int channel_idx = 0; channel_idx < NUM_CHANNELS; channel_idx++)
{
char ch_idx_string[2];
char ch_idx_string[4];
if(NUM_CHANNELS == 6)
{
if(channel_idx==0)
@@ -159,6 +191,11 @@ void RGBController_DRGB::SetupZones()
zones[channel_idx].name = "Channel D";
}
}
else if(NUM_CHANNELS == 10 || NUM_CHANNELS == 12)
{
snprintf(ch_idx_string, 4, "%d", channel_idx+1 );
zones[channel_idx].name = "Channel ";
}
else if(channel_idx<8)
{
snprintf(ch_idx_string, 2, "%d", channel_idx + 1);
@@ -223,37 +260,6 @@ void RGBController_DRGB::SetupZones()
SetupColors();
/*-----------------------------------------------------*\
| Turn off hardware effects |
\*-----------------------------------------------------*/
if(Version > 2)
{
unsigned char HWLData[64] = {0};
HWLData[0] = 0x35;
HWLData[4] = 0x00;
HWLData[5] = 0x01;
HWLData[6] = 0x01;
HWLData[7] = 0x00;
HWLData[8] = 0x00;
HWLData[9] = 0xFF;
HWLData[10] = 0x00;
HWLData[11] = 0x00;
HWLData[12] = 0x00;
HWLData[13] = 0xFF;
HWLData[14] = 0x00;
HWLData[20] = 0xF0;
HWLData[21] = 0x00;
if(Version == 4)
{
controller->SendPacketFS(&HWLData[0], 1,0);
}
else if(Version == 3)
{
controller->SendPacketFS(&HWLData[0], 1,0);
}
}
}
void RGBController_DRGB::ResizeZone(int zone, int new_size)
@@ -336,7 +342,7 @@ void RGBController_DRGB::DeviceUpdateLEDs()
}
unsigned int col_packets = (led_index / DRGB_V3_PACKAGE_SIZE) + ((led_index % DRGB_V3_PACKAGE_SIZE) > 0);
controller->SendPacketFS(&ArrayData[0], 1,0);
controller->SendPacketFS(&RGBData[0], col_packets,1);
controller->SendPacketFS(&RGBData[0], col_packets,0x64);
break;
}
@@ -369,6 +375,39 @@ void RGBController_DRGB::DeviceUpdateLEDs()
}
}
break;
case 1:
{
unsigned int led_index = 0;
unsigned char RGBData[1801*3] = {0};
unsigned char ArrayData[64] = {0};
ArrayData[0] = 0x46;
ArrayData[1] = 0xBB;
for(std::size_t zone_idx = 0; zone_idx < zones.size(); zone_idx++)
{
unsigned char LEDnum = zones[zone_idx].leds_count;
unsigned int HighCount = (LEDnum & 0xFFFF)>>8;
unsigned int LowCount = LEDnum & 0xFF;
ArrayData[zone_idx * 2 + 2] = HighCount;
ArrayData[zone_idx * 2 + 3] = LowCount;
for(unsigned int i=0; i<LEDnum;i++)
{
unsigned int RGBcolors = zones[zone_idx].colors[i];
RGBData[led_index * 3] = RGBcolors & 0xFF;
RGBData[led_index * 3 +1] = (RGBcolors >> 8) & 0xFF;
RGBData[led_index * 3 +2] = (RGBcolors >> 16) & 0xFF;
led_index++;
}
if(led_index>1800)
{
break;
}
}
unsigned int col_packets = (led_index / DRGB_V3_PACKAGE_SIZE) + ((led_index % DRGB_V3_PACKAGE_SIZE) > 0);
controller->SendPacketFS(&ArrayData[0], 1,0);
controller->SendPacketFS(&RGBData[0], col_packets,0x47);
break;
}
}
}
@@ -24,6 +24,9 @@
#define DRGB_LED_V3_PID 0x1209
#define DRGB_Ultra_V3_PID 0x1221
#define DRGB_CORE_V3_PID 0x1226
#define DRGB_ELITE_PID 0x1408
#define DM_10_PID 0x1410
#define JPU_12_PID 0x1412
#define DRGBV2_VID 0x2023
#define DRGB_LED_PID 0x1208
@@ -32,6 +35,11 @@
#define DRGB_SIG_CD_PID 0x1211
#define DRGB_Strimer_PID 0x1215
#define YICO_VID 0x1368
#define YICO_8_PID 0x6077
#define YICO_08_PID 0x6078
#define YICO_08_1_PID 0x6079
class RGBController_DRGB : public RGBController
{
public:
@@ -10,7 +10,6 @@
\*---------------------------------------------------------*/
#include "Detector.h"
#include "RGBController.h"
#include "RGBController_DarkProjectKeyboard.h"
/*---------------------------------------------------------*\

Some files were not shown because too many files have changed in this diff Show More