From bdc0136b078d829ee3c88916d46d981f77043579 Mon Sep 17 00:00:00 2001 From: Sachin Patel Date: Wed, 27 Mar 2024 22:39:54 +0000 Subject: [PATCH 1/3] Compiles on Linux, add MEG 342C QD-OLED support when queried --- README.md | 1 + src/msigd.cpp | 8 ++++++-- src/psteelseries.h | 1 + 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d417443..09a5bb3 100644 --- a/README.md +++ b/README.md @@ -97,6 +97,7 @@ information by opening an issue. | MAG274QRF-QD | FW.011 | Yes | "V43" | "00e"| AUO_M270DAN08_2| | | MAG274QRF-QD | FW.015 | Yes | "V48" | "00e"| AUO_M270DAN08_2| | | MAG274QRF-QD | FW.020 | Yes | "V56" | "00e"| AUO_M270DAN08_2|[Manual](https://download.msi.com/archive/mnu_exe/monitor/Optix_MAG274QRF_MAG274QRF-QDv1.0_English.pdf)| +| MEG342C-QD | FW.026 | Yes | "V58" | "00\\x90" | ? | [Manual](https://download.msi.com/archive/mnu_exe/monitor/MEG342C_QD-OLEDv1.1_English.pdf) | MAG274QRX | ? | Partial 2) | "V53" | "00\|"| ? |[Manual](https://download.msi.com/archive/mnu_exe/monitor/Optix_MAG274QRXv1.0_English.pdf)| | MAG270CR | ? | ? | ? | ? | ? | | | MAG271C | ? | ? | "V18" | "002"| ? |[Manual](https://download.msi.com/archive/mnu_exe/monitor/MAG241C_CP_CR_CV_271C_CP_CR_CVv1.0_English.pdf)| diff --git a/src/msigd.cpp b/src/msigd.cpp index d59cefd..66e60d3 100644 --- a/src/msigd.cpp +++ b/src/msigd.cpp @@ -72,6 +72,7 @@ enum series_t MD272QP = 0x00200000, // enable in master once feedback received QUERYONLY = 0x01000000, UNKNOWN = 0x02000000, + MEG342C_QDOLED = 0x04000000, // chosen to avoid collision with other PR's MAG241GRP = MAG241C | MAG241CR | MAG271CR, MAG274GRP = MAG274QRFQD | MAG274QRFQD16 | MAG274QRFQD20 | MAG274R, @@ -79,9 +80,11 @@ enum series_t MAG = MAG321CURV | MAG321CQR | MAG272GRP | MAG271CQR | MAG241GRP | MAG274GRP, MPG = MPG273CQR | MPG341CQR | MPG27CQ, + MEG = MEG342C_QDOLED, - HAS_LED_SETTING = MAG321CURV | MAG321QR | MAG321CQR | MAG272CQR | MAG272QR | MAG271CQR - | MAG241CR | MAG271CR | MAG274GRP | MAG274GRP | MPG273CQR | MPG341CQR | MAG251RX | MAG274QRX, + HAS_LED_SETTING = MAG321CURV | MAG321QR | MAG321CQR | MAG272CQR | MAG272QR + | MAG271CQR | MAG241CR | MAG271CR | MAG274GRP | MAG274GRP + | MPG273CQR | MPG341CQR | MAG251RX | MAG274QRX | MEG342C_QDOLED, ALL = MAG | PS341WU | MPG | QUERYONLY | MAG321QR | MPG27CQ | MAG251RX | MAG274QRX | MD272QP, }; @@ -150,6 +153,7 @@ static std::vector known_models = { PS341WU, "00?", "V06", "PS341WU", LT_NONE }, { MAG274QRX, "00|", "V43", "MAG274QRX", LT_MYSTIC_OPTIX, true }, { MD272QP, "00\x85", "V51", "MD272QP", LT_NONE }, // MAG274QRF-QD FW.011 + { MEG342C_QDOLED, "00\x90", "V58", "MEG 342C QD-OLED", LT_MYSTIC_OPTIX } // MEG 342C QD-OLED FW.026 }; enum encoding_t diff --git a/src/psteelseries.h b/src/psteelseries.h index 85e4e27..5e6252a 100644 --- a/src/psteelseries.h +++ b/src/psteelseries.h @@ -14,6 +14,7 @@ #include #include +#include struct steel_rgb_entry { From ade8024ec1a2a8ee9f72b9c65177cce883cc79ea Mon Sep 17 00:00:00 2001 From: Sachin Patel Date: Thu, 28 Mar 2024 20:14:37 +0000 Subject: [PATCH 2/3] fix unused variable warnings, add extra exclude in help_set for newly formed MEG category --- src/msigd.cpp | 9 ++++++--- src/phid.h | 3 +++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/msigd.cpp b/src/msigd.cpp index 66e60d3..bd1b965 100644 --- a/src/msigd.cpp +++ b/src/msigd.cpp @@ -1148,14 +1148,14 @@ class mondev_t : public usbdev_t }; -static void help_set(series_t series, series_t exclude1, series_t exclude2, series_t exclude3 = UNKNOWN) +static void help_set(series_t series, series_t exclude1, series_t exclude2, series_t exclude3 = UNKNOWN, series_t exclude4 = UNKNOWN) { static std::array access_str = { "R", "W", "RW" }; for (auto &s : settings) if (/*(s->m_access == WRITE || s->m_access == READWRITE) && */((s->m_series & series) == series) && (((s->m_series & exclude1) != exclude1) && ((s->m_series & exclude2) != exclude2) - && ((s->m_series & exclude3) != exclude3))) + && ((s->m_series & exclude3) != exclude3) && ((s->m_series & exclude4) != exclude4))) { pprintf(" --%-20s %2s %s\n", s->m_opt, access_str[s->m_access], s->help()); } @@ -1235,11 +1235,14 @@ static int help() pprintf("%s", "\nMPG series monitors:\n"); pprintf("%s", " These options apply to all MPG monitors:\n\n"); help_set(MPG, ALL, UNKNOWN); + pprintf("%s", "\nMEG series monitors:\n"); + pprintf("%s", " These options apply to all MAG monitors:\n\n"); + help_set(MEG, ALL, UNKNOWN); for (std::size_t i=1; i(bytes)); + (void) timeout; // Unused variable // do basic checks if ((value & 0xff00) != 0x0300 || (value & 0x00ff) != p[0] || requesttype != 0x21 || request != 0x09 || index != 0) @@ -111,6 +113,7 @@ class usbdev_t void *bytes, int size, int timeout, int &ret_size) { auto p(static_cast(bytes)); + (void) timeout; // Unused variable // do basic checks if ((value & 0xff00) != 0x0300 || (value & 0x00ff) != p[0] || requesttype != 0xa1 || request != 0x01 || index != 0) From cbdb221304b9374ee799921cb58ed555c619b382 Mon Sep 17 00:00:00 2001 From: Sachin Patel Date: Thu, 28 Mar 2024 20:41:48 +0000 Subject: [PATCH 3/3] add basic support for small subset of valid settings, fix typo --- src/msigd.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/msigd.cpp b/src/msigd.cpp index bd1b965..25a804c 100644 --- a/src/msigd.cpp +++ b/src/msigd.cpp @@ -86,7 +86,7 @@ enum series_t | MAG271CQR | MAG241CR | MAG271CR | MAG274GRP | MAG274GRP | MPG273CQR | MPG341CQR | MAG251RX | MAG274QRX | MEG342C_QDOLED, - ALL = MAG | PS341WU | MPG | QUERYONLY | MAG321QR | MPG27CQ | MAG251RX | MAG274QRX | MD272QP, + ALL = MAG | PS341WU | MPG | QUERYONLY | MAG321QR | MPG27CQ | MAG251RX | MAG274QRX | MD272QP | MEG, }; static series_t operator | (series_t a, series_t b) @@ -610,11 +610,12 @@ static std::vector settings( new setting_t(MAG321CURV | MAG321CQR | MAG272GRP | MAG271CQR | MAG241GRP | MAG274QRFQD | MAG274QRFQD16 | MAG274R | MPG | MAG321QR | MAG251RX | MAG274QRX, "00200", "game_mode", {"user", "fps", "racing", "rts", "rpg"}), - new setting_t(MAG274QRFQD20, "00200", "game_mode", {"user", "fps", "racing", "rts", "rpg", "premium_color"}), - + new setting_t(MAG274QRFQD20 | MEG342C_QDOLED, + "00200", "game_mode", {"user", "fps", "racing", "rts", "rpg", "premium_color"}), new setting_t(MAG271CQR | MAG241GRP | MPG27CQ, "00210", "black_tuner", 0, 20, -100), - new setting_t(ALL, "00220", "response_time", {"normal", "fast", "fastest"}), // returns 000 0:normal, 1:fast, 2:fastest + new setting_t((series_t) (ALL & ~(MEG342C_QDOLED)), + "00220", "response_time", {"normal", "fast", "fastest"}), // returns 000 0:normal, 1:fast, 2:fastest // FIXME: anti-motion blur? -- MAG272QP MAG271 MAG241GRP MPG27CQ MAG274R // FIXME: MAG321CQR manual says only supported for Optix MAG322CQRV new setting_t(MAG | MPG341CQR| MAG251RX, @@ -663,7 +664,7 @@ static std::vector settings( new setting_t(UNKNOWN /*MAG321CURV*/, "00280", "unknown280"), // returns 000, read only, write fails and monitor needs off/on cycle // FIXME: free_sync also on MPG27CQ - new setting_t(MAG321CQR | MAG272GRP | MAG271CQR | MAG241GRP | MAG274GRP | MPG341CQR | MPG273CQR | MPG27CQ | MAG321QR | MD272QP, + new setting_t(MAG321CQR | MAG272GRP | MAG271CQR | MAG241GRP | MAG274GRP | MPG341CQR | MPG273CQR | MPG27CQ | MAG321QR | MD272QP | MEG342C_QDOLED, "00280", "free_sync", {"off", "on"}), new setting_t(MAG321CURV | MAG321CQR | MAG271CQR | MPG341CQR | MPG27CQ, "00290", "zero_latency", {"off", "on"}), // returns 001 @@ -1236,7 +1237,7 @@ static int help() pprintf("%s", " These options apply to all MPG monitors:\n\n"); help_set(MPG, ALL, UNKNOWN); pprintf("%s", "\nMEG series monitors:\n"); - pprintf("%s", " These options apply to all MAG monitors:\n\n"); + pprintf("%s", " These options apply to all MEG monitors:\n\n"); help_set(MEG, ALL, UNKNOWN); for (std::size_t i=1; i