Skip to content

Commit cd6831c

Browse files
qiangqiang101CalcProgrammer1
authored andcommitted
Add Nollie 1, 8, 16 & 32 OS2 Firmware support
1 parent 676547b commit cd6831c

5 files changed

Lines changed: 49 additions & 19 deletions

File tree

Controllers/NollieController/NollieController.cpp

Lines changed: 28 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,12 @@
1515

1616
using namespace std::chrono_literals;
1717

18-
NollieController::NollieController(hid_device* dev_handle, const char* path, unsigned short pid, std::string dev_name)
18+
NollieController::NollieController(hid_device* dev_handle, const char* path, unsigned short vid, unsigned short pid, std::string dev_name)
1919
{
2020
dev = dev_handle;
2121
location = path;
2222
name = dev_name;
23+
usb_vid = vid;
2324
usb_pid = pid;
2425
}
2526

@@ -51,6 +52,11 @@ unsigned short NollieController::GetUSBPID()
5152
return(usb_pid);
5253
}
5354

55+
unsigned short NollieController::GetUSBVID()
56+
{
57+
return(usb_vid);
58+
}
59+
5460
void NollieController::InitChLEDs(int *led_num_list,int ch_num)
5561
{
5662
unsigned char usb_buf[65];
@@ -108,32 +114,41 @@ void NollieController::SendUpdate()
108114

109115
void NollieController::SendPacket(unsigned char channel,RGBColor* colors,unsigned int num_colors)
110116
{
111-
112117
unsigned char usb_buf[1025];
113118
memset(usb_buf, 0x00, sizeof(usb_buf));
114119
usb_buf[1] = channel;
115120
usb_buf[2] = 0;
116121
usb_buf[3] = num_colors / 256;
117122
usb_buf[4] = num_colors % 256;
118-
if(!num_colors)
119-
{
120-
hid_write(dev, usb_buf, 1025);
121-
return;
122-
}
123-
for(unsigned int color_idx = 0; color_idx < num_colors; color_idx++)
123+
if(num_colors)
124124
{
125-
usb_buf[0x05 + (color_idx * 3)] = RGBGetGValue(colors[color_idx]);
126-
usb_buf[0x06 + (color_idx * 3)] = RGBGetRValue(colors[color_idx]);
127-
usb_buf[0x07 + (color_idx * 3)] = RGBGetBValue(colors[color_idx]);
125+
for(unsigned int color_idx = 0; color_idx < num_colors; color_idx++)
126+
{
127+
usb_buf[0x05 + (color_idx * 3)] = RGBGetGValue(colors[color_idx]);
128+
usb_buf[0x06 + (color_idx * 3)] = RGBGetRValue(colors[color_idx]);
129+
usb_buf[0x07 + (color_idx * 3)] = RGBGetBValue(colors[color_idx]);
130+
}
128131
}
132+
129133
/*-----------------------------------------------------*\
130134
| Send packet |
131135
\*-----------------------------------------------------*/
132-
hid_write(dev, usb_buf, 1025);
133-
if(channel == NOLLIE32_FLAG1_CHANNEL || channel == NOLLIE32_FLAG2_CHANNEL)
136+
if(channel == NOLLIE32_FLAG1_CHANNEL)
134137
{
138+
usb_buf[2] = 1;
139+
hid_write(dev, usb_buf, 1025);
135140
std::this_thread::sleep_for(std::chrono::milliseconds(8));
136141
}
142+
else if(channel == NOLLIE32_FLAG2_CHANNEL)
143+
{
144+
usb_buf[2] = 2;
145+
hid_write(dev, usb_buf, 1025);
146+
std::this_thread::sleep_for(std::chrono::milliseconds(8));
147+
}
148+
else
149+
{
150+
hid_write(dev, usb_buf, 1025);
151+
}
137152
}
138153

139154
void NollieController::SendPacketFS(unsigned char channel,unsigned char packet_id,RGBColor* colors,unsigned int num_colors)

Controllers/NollieController/NollieController.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
#define NOLLIE_HS_CH_LED_NUM 256
2323
#define NOLLIE_FS_CH_LED_NUM 525
2424

25+
#define NOLLIERGBOS_2_VID 0x16D5
26+
2527
#define NOLLIE32_CHANNELS_NUM 32
2628
#define NOLLIE32_PID 0x4714
2729
#define NOLLIE32_VID 0x3061
@@ -52,11 +54,12 @@
5254
class NollieController
5355
{
5456
public:
55-
NollieController(hid_device* dev_handle, const char* path, unsigned short pid, std::string dev_name);
57+
NollieController(hid_device* dev_handle, const char* path, unsigned short vid, unsigned short pid, std::string dev_name);
5658

5759
std::string GetLocationString();
5860
std::string GetNameString();
5961
std::string GetSerialString();
62+
unsigned short GetUSBVID();
6063
unsigned short GetUSBPID();
6164

6265
void SetMos(bool mos);
@@ -68,6 +71,7 @@ class NollieController
6871
hid_device* dev;
6972
std::string location;
7073
std::string name;
74+
unsigned short usb_vid;
7175
unsigned short usb_pid;
7276

7377
void SendPacket(unsigned char channel,RGBColor * colors,unsigned int num_colors);

Controllers/NollieController/NollieControllerDetect.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ void DetectNollieControllers(hid_device_info* info, const std::string& name)
2525

2626
std::wstring product_str(product);
2727

28-
NollieController* controller = new NollieController(dev, info->path,info->product_id, name);
28+
NollieController* controller = new NollieController(dev, info->path, info->vendor_id, info->product_id, name);
2929
RGBController_Nollie* rgb_controller = new RGBController_Nollie(controller);
3030

3131
ResourceManager::get()->RegisterRGBController(rgb_controller);
@@ -40,3 +40,8 @@ REGISTER_HID_DETECTOR("Nollie 1CH", DetectNollieControllers, NOLLIE1_VID, NOLLIE
4040
REGISTER_HID_DETECTOR("Nollie 28 12", DetectNollieControllers, NOLLIE28_12_VID, NOLLIE28_12_PID);
4141
REGISTER_HID_DETECTOR("Nollie 28 L1", DetectNollieControllers, NOLLIE28_12_VID, NOLLIE28_L1_PID);
4242
REGISTER_HID_DETECTOR("Nollie 28 L2", DetectNollieControllers, NOLLIE28_12_VID, NOLLIE28_L2_PID);
43+
//Nollie OS2 Firmware
44+
REGISTER_HID_DETECTOR("Nollie 32_OS2", DetectNollieControllers, NOLLIERGBOS_2_VID, NOLLIE32_PID);
45+
REGISTER_HID_DETECTOR("Nollie 16_OS2", DetectNollieControllers, NOLLIERGBOS_2_VID, NOLLIE16_PID);
46+
REGISTER_HID_DETECTOR("Nollie 8_OS2", DetectNollieControllers, NOLLIERGBOS_2_VID, NOLLIE8_PID);
47+
REGISTER_HID_DETECTOR("Nollie 1_OS2", DetectNollieControllers, NOLLIERGBOS_2_VID, NOLLIE1_PID);

Controllers/NollieController/RGBController_Nollie.cpp

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,8 @@ void RGBController_Nollie::SetupZones()
7272
channels_num = NOLLIE16_CHANNELS_NUM;
7373
ch_led_num = NOLLIE_HS_CH_LED_NUM;
7474
channel_index = ch16;
75+
if (controller->GetUSBVID() == NOLLIERGBOS_2_VID)
76+
channel_index = n16;
7577
break;
7678
case NOLLIE28_12_PID:
7779
channels_num = NOLLIE28_12_CHANNELS_NUM;
@@ -152,9 +154,9 @@ void RGBController_Nollie::SetupZones()
152154
void RGBController_Nollie::ResizeZone(int zone, int new_size)
153155
{
154156
/*-----------------------------------------------------*\
155-
| Set whether MOS is enabled or not |
157+
| Set whether MOS is enabled or not |
156158
\*-----------------------------------------------------*/
157-
if(controller->GetUSBPID() == NOLLIE32_PID)
159+
if(controller->GetUSBVID() == NOLLIE32_VID && NOLLIE32_PID == controller->GetUSBPID())
158160
{
159161
if(zone == NOLLIE32_MOS_TRIGGER_CH && new_size > NOLLIE32_MOS_TRIGGER_LED)
160162
{
@@ -165,8 +167,11 @@ void RGBController_Nollie::ResizeZone(int zone, int new_size)
165167
controller->SetMos(true);
166168
}
167169
}
168-
// Nollie1 needs to report the number of LEDs
169-
if(controller->GetUSBPID() == NOLLIE1_PID)
170+
171+
/*-----------------------------------------------------*\
172+
| Nollie1 needs to report the number of LEDs |
173+
\*-----------------------------------------------------*/
174+
if(controller->GetUSBVID() == NOLLIE1_VID && controller->GetUSBPID() == NOLLIE1_PID)
170175
{
171176
controller->InitChLEDs(&new_size,NOLLIE1_CHANNELS_NUM);
172177
}

Controllers/NollieController/RGBController_Nollie.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,5 @@ class RGBController_Nollie : public RGBController
3838

3939
int ch32[32] = {5, 4, 3, 2, 1, 0, 15, 14, 26, 27, 28, 29, 30, 31, 8, 9, 19, 18, 17, 16, 7, 6, 25, 24, 23, 22, 21, 20, 13, 12, 11, 10};
4040
int ch16[32] = {19, 18, 17, 16, 24, 25, 26, 27, 20, 21, 22, 23, 31, 30, 29, 28, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
41+
int n16[16] = {3, 2, 1, 0, 8, 9, 10, 11, 4, 5, 6, 7, 15, 14, 13, 12};
4142
};

0 commit comments

Comments
 (0)