Add Nollie controller OS2.1

This commit is contained in:
诺诺
2026-04-02 00:21:37 +00:00
committed by Adam Honse
parent 54f16cea9d
commit 257e9ca867
5 changed files with 75 additions and 6 deletions

View File

@@ -1,4 +1,4 @@
/*---------------------------------------------------------*\
/*---------------------------------------------------------*\
| NollieController.cpp |
| |
| Driver for Nollie |
@@ -136,7 +136,8 @@ 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_OS2_1_PID || usb_pid == NOLLIE16_OS2_1_PID)
{
SendPacket(channel,&colors[0], num_colors);
}
@@ -216,9 +217,12 @@ void NollieController::SendPacketFS(unsigned char channel,unsigned char packet_i
packet_interval = 2;
break;
case NOLLIE8_PID:
case NOLLIE8_OS2_1_PID:
case PRISM8_OS2_1_PID:
packet_interval = 6;
break;
case NOLLIE1_PID:
case NOLLIE1_OS2_1_PID:
packet_interval = 30;
break;
default:
@@ -233,7 +237,8 @@ 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_OS2_1_PID || dev_pid == NOLLIE1_OS2_1_PID || dev_pid == PRISM8_OS2_1_PID)
{
usb_buf[0x02 + (color_idx * 3)] = RGBGetGValue(colors[color_idx]);
usb_buf[0x03 + (color_idx * 3)] = RGBGetRValue(colors[color_idx]);

View File

@@ -1,4 +1,4 @@
/*---------------------------------------------------------*\
/*---------------------------------------------------------*\
| NollieControllerDetect.cpp |
| |
| Detector for Nollie |
@@ -44,3 +44,9 @@ REGISTER_HID_DETECTOR("Nollie 32_OS2", DetectNollieControllers, NOLLIERGBOS_2_VI
REGISTER_HID_DETECTOR("Nollie 16_OS2", DetectNollieControllers, NOLLIERGBOS_2_VID, NOLLIE16_PID);
REGISTER_HID_DETECTOR("Nollie 8_OS2", DetectNollieControllers, NOLLIERGBOS_2_VID, NOLLIE8_PID);
REGISTER_HID_DETECTOR("Nollie 1_OS2", DetectNollieControllers, NOLLIERGBOS_2_VID, NOLLIE1_PID);
/* OS2_1 composite device: RGB HID on interface 2 (1/8 CH) or 0 (16/32 CH) */
REGISTER_HID_DETECTOR_I("Nollie 32_OS2_1", DetectNollieControllers, NOLLIERGBOS_2_VID, NOLLIE32_OS2_1_PID, 0);
REGISTER_HID_DETECTOR_I("Nollie 16_OS2_1", DetectNollieControllers, NOLLIERGBOS_2_VID, NOLLIE16_OS2_1_PID, 0);
REGISTER_HID_DETECTOR_I("Nollie 8_OS2_1", DetectNollieControllers, NOLLIERGBOS_2_VID, NOLLIE8_OS2_1_PID, 2);
REGISTER_HID_DETECTOR_I("Prism8 8_OS2_1", DetectNollieControllers, NOLLIERGBOS_2_VID, PRISM8_OS2_1_PID, 2);
REGISTER_HID_DETECTOR_I("Nollie 1_OS2_1", DetectNollieControllers, NOLLIERGBOS_2_VID, NOLLIE1_OS2_1_PID, 2);

View File

@@ -121,6 +121,51 @@ static const nollie_device nollie1_os2 =
dflt
};
static const nollie_device nollie32_os2_1 =
{
NOLLIERGBOS_2_VID,
NOLLIE32_OS2_1_PID,
32,
NOLLIE_HS_CH_LED_NUM,
ch32
};
static const nollie_device nollie16_os2_1 =
{
NOLLIERGBOS_2_VID,
NOLLIE16_OS2_1_PID,
16,
NOLLIE_HS_CH_LED_NUM,
n16
};
static const nollie_device nollie8_os2_1 =
{
NOLLIERGBOS_2_VID,
NOLLIE8_OS2_1_PID,
8,
126,
dflt
};
static const nollie_device prism8_os2_1 =
{
NOLLIERGBOS_2_VID,
PRISM8_OS2_1_PID,
8,
126,
dflt
};
static const nollie_device nollie1_os2_1 =
{
NOLLIERGBOS_2_VID,
NOLLIE1_OS2_1_PID,
1,
630,
dflt
};
/*---------------------------------------------------------*\
| Nollie Device List |
\*---------------------------------------------------------*/
@@ -137,6 +182,11 @@ static const nollie_device* device_list[] =
&nollie16_os2,
&nollie8_os2,
&nollie1_os2,
&nollie32_os2_1,
&nollie16_os2_1,
&nollie8_os2_1,
&prism8_os2_1,
&nollie1_os2_1,
};
const unsigned int NOLLIE_NUM_DEVICES = (sizeof(device_list) / sizeof(device_list[ 0 ]));

View File

@@ -34,6 +34,13 @@
#define NOLLIE28_L1_PID 0x1617
#define NOLLIE28_L2_PID 0x1618
/* OS2_1 USB layout (interface 2 for 1/8 CH, 0 for 16/32 CH); same HID protocol */
#define NOLLIE1_OS2_1_PID 0x2A01
#define NOLLIE8_OS2_1_PID 0x2A08
#define PRISM8_OS2_1_PID 0x2C08
#define NOLLIE16_OS2_1_PID 0x2A16
#define NOLLIE32_OS2_1_PID 0x2A32
/*---------------------------------------------------------*\
| Common Nollie LED counts |
\*---------------------------------------------------------*/

View File

@@ -1,4 +1,4 @@
/*---------------------------------------------------------*\
/*---------------------------------------------------------*\
| RGBController_Nollie.cpp |
| |
| RGBController for Nollie |
@@ -156,7 +156,8 @@ void RGBController_Nollie::DeviceConfigureZone(int zone_idx)
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_OS2_1_PID || DevPid == NOLLIE16_OS2_1_PID)
{
const int* channel_index = controller->GetChannelIndex();
std::vector<int> ChSort;