From 15b784f6c656cf8e790067f45d851df618784160 Mon Sep 17 00:00:00 2001 From: Richard Harris Date: Thu, 20 Aug 2026 03:42:22 +0000 Subject: [PATCH] Fix startup crash and other issues in VialRGB controller --- .../QMKVialRGBController/QMKVialRGBController.cpp | 15 +++++++++------ .../QMKVialRGBControllerDetect.cpp | 4 ++++ .../RGBController_QMKVialRGB.cpp | 10 ++++++++++ 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/Controllers/QMKController/QMKVialRGBController/QMKVialRGBController.cpp b/Controllers/QMKController/QMKVialRGBController/QMKVialRGBController.cpp index 1713ed64b..5cb0bc007 100644 --- a/Controllers/QMKController/QMKVialRGBController/QMKVialRGBController.cpp +++ b/Controllers/QMKController/QMKVialRGBController/QMKVialRGBController.cpp @@ -150,7 +150,10 @@ std::string QMKVialRGBController::GetVersion() | Format UID string | \*-----------------------------------------------------*/ char uid_buf[17]; - snprintf(uid_buf, sizeof(uid_buf), "%016llX", keyboard_uid); + unsigned char* uid_bytes = (unsigned char*)&keyboard_uid; + snprintf(uid_buf, sizeof(uid_buf), "%02X%02X%02X%02X%02X%02X%02X%02X", + uid_bytes[0], uid_bytes[1], uid_bytes[2], uid_bytes[3], + uid_bytes[4], uid_bytes[5], uid_bytes[6], uid_bytes[7]); /*-----------------------------------------------------*\ | Format multi-line version text | @@ -333,9 +336,9 @@ void QMKVialRGBController::CmdGetVialInfo SendCommand(CMD_VIAL_COMMAND, VIAL_GET_KEYBOARD_ID, NULL, 0, data, sizeof(data)); - memcpy(vial_protocol, &data[0], sizeof(int)); - memcpy(keyboard_uid, &data[sizeof(int)], sizeof(unsigned long long)); - memcpy(vialrgb_flag, &data[sizeof(int) + sizeof(unsigned long long)], sizeof(unsigned char)); + memcpy(vial_protocol, &data[0], sizeof(unsigned int)); + memcpy(keyboard_uid, &data[sizeof(unsigned int)], sizeof(unsigned long long)); + memcpy(vialrgb_flag, &data[sizeof(unsigned int) + sizeof(unsigned long long)], sizeof(unsigned char)); } void QMKVialRGBController::CmdGetVialRGBInfo @@ -346,10 +349,10 @@ void QMKVialRGBController::CmdGetVialRGBInfo { unsigned char data[sizeof(unsigned short) + sizeof(unsigned char)]; - SendCommand(CMD_VIAL_COMMAND, VIAL_GET_KEYBOARD_ID, NULL, 0, data, sizeof(data)); + SendCheckCommand(CMD_LIGHTING_GET_VALUE, VIALRGB_GET_INFO, NULL, 0, data, sizeof(data)); memcpy(vialrgb_protocol_version, &data[0], sizeof(unsigned short)); - memcpy(maximum_brightness, &data[sizeof(unsigned char)], sizeof(unsigned short)); + memcpy(maximum_brightness, &data[sizeof(unsigned short)], sizeof(unsigned char)); } void QMKVialRGBController::CmdGetViaProtocolVersion diff --git a/Controllers/QMKController/QMKVialRGBController/QMKVialRGBControllerDetect.cpp b/Controllers/QMKController/QMKVialRGBController/QMKVialRGBControllerDetect.cpp index 1204ed27d..ce2abbf06 100644 --- a/Controllers/QMKController/QMKVialRGBController/QMKVialRGBControllerDetect.cpp +++ b/Controllers/QMKController/QMKVialRGBController/QMKVialRGBControllerDetect.cpp @@ -23,6 +23,9 @@ #define RASPBERRY_PI_VID 0x2E8A #define RASPBERRY_PI_500_PLUS_PID 0x0011 +#define YMDK_84_VID 0x20A0 +#define YMDK_84_PID 0x422D + /*-----------------------------------------------------*\ | Usage and Usage Page | \*-----------------------------------------------------*/ @@ -88,3 +91,4 @@ void RegisterQMKVialRGBDetectors() REGISTER_DYNAMIC_DETECTOR("QMK VialRGB Devices", RegisterQMKVialRGBDetectors); REGISTER_HID_DETECTOR_PU( "Raspberry Pi 500+", DetectQMKVialRGBControllers, RASPBERRY_PI_VID, RASPBERRY_PI_500_PLUS_PID, QMK_USAGE_PAGE, QMK_USAGE ); +REGISTER_HID_DETECTOR_PU( "YMDK 84", DetectQMKVialRGBControllers, YMDK_84_VID, YMDK_84_PID, QMK_USAGE_PAGE, QMK_USAGE ); diff --git a/Controllers/QMKController/QMKVialRGBController/RGBController_QMKVialRGB.cpp b/Controllers/QMKController/QMKVialRGBController/RGBController_QMKVialRGB.cpp index 0c302a29d..20767a0b1 100644 --- a/Controllers/QMKController/QMKVialRGBController/RGBController_QMKVialRGB.cpp +++ b/Controllers/QMKController/QMKVialRGBController/RGBController_QMKVialRGB.cpp @@ -175,6 +175,11 @@ void RGBController_QMKVialRGB::SetupZones() { qmk_rgb_matrix_led_info info = controller->GetLEDInfo(led_index); + if(info.row == 0xFF || info.col == 0xFF) + { + continue; + } + if(info.col > max_col) { max_col = info.col; @@ -197,6 +202,11 @@ void RGBController_QMKVialRGB::SetupZones() { qmk_rgb_matrix_led_info info = controller->GetLEDInfo(led_index); + if(info.row == 0xFF || info.col == 0xFF) + { + continue; + } + matrix_map[(width * info.row) + info.col] = (unsigned int)led_index; }