From 4bc14630e95e1dfc65ba3331fc7c2b5d6e03dcfe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=AF=BA=E8=AF=BA?= <2777618756@qq.com> Date: Mon, 5 Aug 2024 16:21:04 +0000 Subject: [PATCH] Fix a bug in Nollie1 --- Controllers/NollieController/NollieController.cpp | 14 ++++++++++++++ Controllers/NollieController/NollieController.h | 1 + .../NollieController/RGBController_Nollie.cpp | 7 ++++++- 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/Controllers/NollieController/NollieController.cpp b/Controllers/NollieController/NollieController.cpp index 56628839..f4dc0862 100644 --- a/Controllers/NollieController/NollieController.cpp +++ b/Controllers/NollieController/NollieController.cpp @@ -45,6 +45,20 @@ unsigned short NollieController::GetUSBPID() return(usb_pid); } +void NollieController::InitChLEDs(int *led_num_list,int ch_num) +{ + unsigned char usb_buf[65]; + memset(usb_buf, 0x00, sizeof(usb_buf)); + usb_buf[1] = 0xFE; + usb_buf[2] = 0x03; + for(int i = 0; i < ch_num; i++) + { + usb_buf[3+(i*2)] = led_num_list[i]& 0xFF; + usb_buf[4+(i*2)] = (led_num_list[i] >> 8) & 0xFF; + } + hid_write(dev, usb_buf, 65); +} + void NollieController::SetMos(bool mos) { unsigned char usb_buf[65]; diff --git a/Controllers/NollieController/NollieController.h b/Controllers/NollieController/NollieController.h index deff5804..22c85dda 100644 --- a/Controllers/NollieController/NollieController.h +++ b/Controllers/NollieController/NollieController.h @@ -57,6 +57,7 @@ public: std::string GetSerialString(); unsigned short GetUSBPID(); void SetMos(bool mos); + void InitChLEDs(int *led_num_list,int ch_num); void SendUpdate(); void SetChannelLEDs(unsigned char channel, RGBColor * colors, unsigned int num_colors); private: diff --git a/Controllers/NollieController/RGBController_Nollie.cpp b/Controllers/NollieController/RGBController_Nollie.cpp index 7f4875cb..8be88170 100644 --- a/Controllers/NollieController/RGBController_Nollie.cpp +++ b/Controllers/NollieController/RGBController_Nollie.cpp @@ -165,7 +165,12 @@ void RGBController_Nollie::ResizeZone(int zone, int new_size) controller->SetMos(true); } } - + // Nollie1 needs to report the number of LEDs + if(controller->GetUSBPID() == NOLLIE1_PID) + { + controller->InitChLEDs(&new_size,NOLLIE1_CHANNELS_NUM); + } + if((size_t) zone >= zones.size()) { return;