From 07e7feca567e1e5dde5f29aab7d2c6179b8eb609 Mon Sep 17 00:00:00 2001 From: Barry H Date: Tue, 5 May 2026 03:16:29 +0800 Subject: [PATCH] Nollie 2.1 firmware for Master --- .../NollieController/NollieController.cpp | 9 ++++++--- .../NollieController/NollieController.h | 7 ++++++- .../NollieControllerDetect.cpp | 19 ++++++++++++++++++- .../NollieController/RGBController_Nollie.cpp | 11 ++++++++--- 4 files changed, 38 insertions(+), 8 deletions(-) diff --git a/Controllers/NollieController/NollieController.cpp b/Controllers/NollieController/NollieController.cpp index 0c22ed5c1..193832192 100644 --- a/Controllers/NollieController/NollieController.cpp +++ b/Controllers/NollieController/NollieController.cpp @@ -1,4 +1,4 @@ -/*---------------------------------------------------------*\ +/*---------------------------------------------------------*\ | NollieController.cpp | | | | Driver for Nollie | @@ -82,7 +82,7 @@ void NollieController::SetMos(bool mos) void NollieController::SetChannelLEDs(unsigned char channel, RGBColor* colors, unsigned int num_colors) { - if(usb_pid == NOLLIE32_PID || usb_pid == NOLLIE16_PID) + if(usb_pid == NOLLIE32_PID || usb_pid == NOLLIE16_PID || usb_pid == NOLLIE32_OS21_PID || usb_pid == NOLLIE16_OS21_PID) { SendPacket(channel,&colors[0], num_colors); } @@ -162,9 +162,12 @@ void NollieController::SendPacketFS(unsigned char channel,unsigned char packet_i packet_interval = 2; break; case NOLLIE8_PID: + case NOLLIE8_OS21_PID: + case PRISM8_OS21_PID: packet_interval = 6; break; case NOLLIE1_PID: + case NOLLIE1_OS21_PID: packet_interval = 30; break; default: @@ -179,7 +182,7 @@ void NollieController::SendPacketFS(unsigned char channel,unsigned char packet_i usb_buf[0x02 + (color_idx * 3)] = RGBGetRValue(colors[color_idx]); usb_buf[0x03 + (color_idx * 3)] = RGBGetGValue(colors[color_idx]); usb_buf[0x04 + (color_idx * 3)] = RGBGetBValue(colors[color_idx]); - if(dev_pid == NOLLIE8_PID || dev_pid == NOLLIE1_PID ) + if(dev_pid == NOLLIE8_PID || dev_pid == NOLLIE1_PID || dev_pid == NOLLIE8_OS21_PID || dev_pid == PRISM8_OS21_PID || dev_pid == NOLLIE1_OS21_PID) { usb_buf[0x02 + (color_idx * 3)] = RGBGetGValue(colors[color_idx]); usb_buf[0x03 + (color_idx * 3)] = RGBGetRValue(colors[color_idx]); diff --git a/Controllers/NollieController/NollieController.h b/Controllers/NollieController/NollieController.h index bf9a7f2a3..6ec60d510 100644 --- a/Controllers/NollieController/NollieController.h +++ b/Controllers/NollieController/NollieController.h @@ -1,4 +1,4 @@ -/*---------------------------------------------------------*\ +/*---------------------------------------------------------*\ | NollieController.h | | | | Driver for Nollie | @@ -26,18 +26,23 @@ #define NOLLIE32_CHANNELS_NUM 32 #define NOLLIE32_PID 0x4714 +#define NOLLIE32_OS21_PID 0x2A32 #define NOLLIE32_VID 0x3061 #define NOLLIE16_CHANNELS_NUM 16 #define NOLLIE16_PID 0x4716 +#define NOLLIE16_OS21_PID 0x2A16 #define NOLLIE16_VID 0x3061 #define NOLLIE8_CHANNELS_NUM 8 #define NOLLIE8_PID 0x1F01 +#define NOLLIE8_OS21_PID 0x2A08 +#define PRISM8_OS21_PID 0x2C08 #define NOLLIE8_VID 0x16D2 #define NOLLIE1_CHANNELS_NUM 1 #define NOLLIE1_PID 0x1F11 +#define NOLLIE1_OS21_PID 0x2A01 #define NOLLIE1_VID 0x16D2 #define NOLLIE28_12_CHANNELS_NUM 12 diff --git a/Controllers/NollieController/NollieControllerDetect.cpp b/Controllers/NollieController/NollieControllerDetect.cpp index bee11323b..5cbe57c30 100644 --- a/Controllers/NollieController/NollieControllerDetect.cpp +++ b/Controllers/NollieController/NollieControllerDetect.cpp @@ -1,4 +1,4 @@ -/*---------------------------------------------------------*\ +/*---------------------------------------------------------*\ | NollieControllerDetect.cpp | | | | Detector for Nollie | @@ -16,6 +16,18 @@ void DetectNollieControllers(hid_device_info* info, const std::string& name) { + if((info->product_id == NOLLIE1_OS21_PID || info->product_id == NOLLIE8_OS21_PID || info->product_id == PRISM8_OS21_PID) + && info->interface_number != 2) + { + return; + } + + if((info->product_id == NOLLIE16_OS21_PID || info->product_id == NOLLIE32_OS21_PID) + && info->interface_number != 0) + { + return; + } + hid_device* dev = hid_open_path(info->path); if(dev) @@ -37,6 +49,11 @@ REGISTER_HID_DETECTOR("Nollie 32CH", DetectNollieControllers, NOLLIE32_VID, NOLL REGISTER_HID_DETECTOR("Nollie 16CH", DetectNollieControllers, NOLLIE16_VID, NOLLIE16_PID); REGISTER_HID_DETECTOR("Nollie 8CH", DetectNollieControllers, NOLLIE8_VID, NOLLIE8_PID); REGISTER_HID_DETECTOR("Nollie 1CH", DetectNollieControllers, NOLLIE1_VID, NOLLIE1_PID); +REGISTER_HID_DETECTOR("Nollie 32_OS2.1", DetectNollieControllers, NOLLIERGBOS_2_VID, NOLLIE32_OS21_PID); +REGISTER_HID_DETECTOR("Nollie 16_OS2.1", DetectNollieControllers, NOLLIERGBOS_2_VID, NOLLIE16_OS21_PID); +REGISTER_HID_DETECTOR("Nollie 8_OS2.1", DetectNollieControllers, NOLLIERGBOS_2_VID, NOLLIE8_OS21_PID); +REGISTER_HID_DETECTOR("Prism 8_OS2.1", DetectNollieControllers, NOLLIERGBOS_2_VID, PRISM8_OS21_PID); +REGISTER_HID_DETECTOR("Nollie 1_OS2.1", DetectNollieControllers, NOLLIERGBOS_2_VID, NOLLIE1_OS21_PID); REGISTER_HID_DETECTOR("Nollie 28 12", DetectNollieControllers, NOLLIE28_12_VID, NOLLIE28_12_PID); REGISTER_HID_DETECTOR("Nollie 28 L1", DetectNollieControllers, NOLLIE28_12_VID, NOLLIE28_L1_PID); REGISTER_HID_DETECTOR("Nollie 28 L2", DetectNollieControllers, NOLLIE28_12_VID, NOLLIE28_L2_PID); diff --git a/Controllers/NollieController/RGBController_Nollie.cpp b/Controllers/NollieController/RGBController_Nollie.cpp index 438d28355..15745bd6a 100644 --- a/Controllers/NollieController/RGBController_Nollie.cpp +++ b/Controllers/NollieController/RGBController_Nollie.cpp @@ -1,4 +1,4 @@ -/*---------------------------------------------------------*\ +/*---------------------------------------------------------*\ | RGBController_Nollie.cpp | | | | RGBController for Nollie | @@ -64,11 +64,13 @@ void RGBController_Nollie::SetupZones() switch(controller->GetUSBPID()) { case NOLLIE32_PID: + case NOLLIE32_OS21_PID: channels_num = NOLLIE32_CHANNELS_NUM; ch_led_num = NOLLIE_HS_CH_LED_NUM; channel_index = ch32; break; case NOLLIE16_PID: + case NOLLIE16_OS21_PID: channels_num = NOLLIE16_CHANNELS_NUM; ch_led_num = NOLLIE_HS_CH_LED_NUM; channel_index = ch16; @@ -80,10 +82,13 @@ void RGBController_Nollie::SetupZones() ch_led_num = NOLLIE_12_CH_LED_NUM; break; case NOLLIE8_PID: + case NOLLIE8_OS21_PID: + case PRISM8_OS21_PID: channels_num = NOLLIE8_CHANNELS_NUM; ch_led_num = NOLLIE_8_CH_LED_NUM; break; case NOLLIE1_PID: + case NOLLIE1_OS21_PID: channels_num = NOLLIE1_CHANNELS_NUM; ch_led_num = NOLLIE_1_CH_LED_NUM; break; @@ -171,7 +176,7 @@ void RGBController_Nollie::ResizeZone(int zone, int new_size) /*-----------------------------------------------------*\ | Nollie1 needs to report the number of LEDs | \*-----------------------------------------------------*/ - if(controller->GetUSBVID() == NOLLIE1_VID && controller->GetUSBPID() == NOLLIE1_PID) + if(controller->GetUSBPID() == NOLLIE1_PID) { controller->InitChLEDs(&new_size,NOLLIE1_CHANNELS_NUM); } @@ -192,7 +197,7 @@ void RGBController_Nollie::ResizeZone(int zone, int new_size) void RGBController_Nollie::DeviceUpdateLEDs() { unsigned int DevPid = controller->GetUSBPID(); - if(DevPid == NOLLIE32_PID || DevPid == NOLLIE16_PID) + if(DevPid == NOLLIE32_PID || DevPid == NOLLIE16_PID || DevPid == NOLLIE32_OS21_PID || DevPid == NOLLIE16_OS21_PID) { std::vector ChSort; for(std::size_t zone_idx = 0; zone_idx < zones.size(); zone_idx++)