Add Nollie 1, 8, 16 & 32 OS2 Firmware support
This commit is contained in:
parent
676547b8b0
commit
cd6831ccbe
5 changed files with 49 additions and 19 deletions
|
|
@ -15,11 +15,12 @@
|
|||
|
||||
using namespace std::chrono_literals;
|
||||
|
||||
NollieController::NollieController(hid_device* dev_handle, const char* path, unsigned short pid, std::string dev_name)
|
||||
NollieController::NollieController(hid_device* dev_handle, const char* path, unsigned short vid, unsigned short pid, std::string dev_name)
|
||||
{
|
||||
dev = dev_handle;
|
||||
location = path;
|
||||
name = dev_name;
|
||||
usb_vid = vid;
|
||||
usb_pid = pid;
|
||||
}
|
||||
|
||||
|
|
@ -51,6 +52,11 @@ unsigned short NollieController::GetUSBPID()
|
|||
return(usb_pid);
|
||||
}
|
||||
|
||||
unsigned short NollieController::GetUSBVID()
|
||||
{
|
||||
return(usb_vid);
|
||||
}
|
||||
|
||||
void NollieController::InitChLEDs(int *led_num_list,int ch_num)
|
||||
{
|
||||
unsigned char usb_buf[65];
|
||||
|
|
@ -108,32 +114,41 @@ void NollieController::SendUpdate()
|
|||
|
||||
void NollieController::SendPacket(unsigned char channel,RGBColor* colors,unsigned int num_colors)
|
||||
{
|
||||
|
||||
unsigned char usb_buf[1025];
|
||||
memset(usb_buf, 0x00, sizeof(usb_buf));
|
||||
usb_buf[1] = channel;
|
||||
usb_buf[2] = 0;
|
||||
usb_buf[3] = num_colors / 256;
|
||||
usb_buf[4] = num_colors % 256;
|
||||
if(!num_colors)
|
||||
if(num_colors)
|
||||
{
|
||||
hid_write(dev, usb_buf, 1025);
|
||||
return;
|
||||
}
|
||||
for(unsigned int color_idx = 0; color_idx < num_colors; color_idx++)
|
||||
{
|
||||
usb_buf[0x05 + (color_idx * 3)] = RGBGetGValue(colors[color_idx]);
|
||||
usb_buf[0x06 + (color_idx * 3)] = RGBGetRValue(colors[color_idx]);
|
||||
usb_buf[0x07 + (color_idx * 3)] = RGBGetBValue(colors[color_idx]);
|
||||
for(unsigned int color_idx = 0; color_idx < num_colors; color_idx++)
|
||||
{
|
||||
usb_buf[0x05 + (color_idx * 3)] = RGBGetGValue(colors[color_idx]);
|
||||
usb_buf[0x06 + (color_idx * 3)] = RGBGetRValue(colors[color_idx]);
|
||||
usb_buf[0x07 + (color_idx * 3)] = RGBGetBValue(colors[color_idx]);
|
||||
}
|
||||
}
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Send packet |
|
||||
\*-----------------------------------------------------*/
|
||||
hid_write(dev, usb_buf, 1025);
|
||||
if(channel == NOLLIE32_FLAG1_CHANNEL || channel == NOLLIE32_FLAG2_CHANNEL)
|
||||
if(channel == NOLLIE32_FLAG1_CHANNEL)
|
||||
{
|
||||
usb_buf[2] = 1;
|
||||
hid_write(dev, usb_buf, 1025);
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(8));
|
||||
}
|
||||
else if(channel == NOLLIE32_FLAG2_CHANNEL)
|
||||
{
|
||||
usb_buf[2] = 2;
|
||||
hid_write(dev, usb_buf, 1025);
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(8));
|
||||
}
|
||||
else
|
||||
{
|
||||
hid_write(dev, usb_buf, 1025);
|
||||
}
|
||||
}
|
||||
|
||||
void NollieController::SendPacketFS(unsigned char channel,unsigned char packet_id,RGBColor* colors,unsigned int num_colors)
|
||||
|
|
|
|||
|
|
@ -22,6 +22,8 @@
|
|||
#define NOLLIE_HS_CH_LED_NUM 256
|
||||
#define NOLLIE_FS_CH_LED_NUM 525
|
||||
|
||||
#define NOLLIERGBOS_2_VID 0x16D5
|
||||
|
||||
#define NOLLIE32_CHANNELS_NUM 32
|
||||
#define NOLLIE32_PID 0x4714
|
||||
#define NOLLIE32_VID 0x3061
|
||||
|
|
@ -52,11 +54,12 @@
|
|||
class NollieController
|
||||
{
|
||||
public:
|
||||
NollieController(hid_device* dev_handle, const char* path, unsigned short pid, std::string dev_name);
|
||||
NollieController(hid_device* dev_handle, const char* path, unsigned short vid, unsigned short pid, std::string dev_name);
|
||||
|
||||
std::string GetLocationString();
|
||||
std::string GetNameString();
|
||||
std::string GetSerialString();
|
||||
unsigned short GetUSBVID();
|
||||
unsigned short GetUSBPID();
|
||||
|
||||
void SetMos(bool mos);
|
||||
|
|
@ -68,6 +71,7 @@ private:
|
|||
hid_device* dev;
|
||||
std::string location;
|
||||
std::string name;
|
||||
unsigned short usb_vid;
|
||||
unsigned short usb_pid;
|
||||
|
||||
void SendPacket(unsigned char channel,RGBColor * colors,unsigned int num_colors);
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ void DetectNollieControllers(hid_device_info* info, const std::string& name)
|
|||
|
||||
std::wstring product_str(product);
|
||||
|
||||
NollieController* controller = new NollieController(dev, info->path,info->product_id, name);
|
||||
NollieController* controller = new NollieController(dev, info->path, info->vendor_id, info->product_id, name);
|
||||
RGBController_Nollie* rgb_controller = new RGBController_Nollie(controller);
|
||||
|
||||
ResourceManager::get()->RegisterRGBController(rgb_controller);
|
||||
|
|
@ -40,3 +40,8 @@ REGISTER_HID_DETECTOR("Nollie 1CH", DetectNollieControllers, NOLLIE1_VID, NOLLIE
|
|||
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);
|
||||
//Nollie OS2 Firmware
|
||||
REGISTER_HID_DETECTOR("Nollie 32_OS2", DetectNollieControllers, NOLLIERGBOS_2_VID, NOLLIE32_PID);
|
||||
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);
|
||||
|
|
|
|||
|
|
@ -72,6 +72,8 @@ void RGBController_Nollie::SetupZones()
|
|||
channels_num = NOLLIE16_CHANNELS_NUM;
|
||||
ch_led_num = NOLLIE_HS_CH_LED_NUM;
|
||||
channel_index = ch16;
|
||||
if (controller->GetUSBVID() == NOLLIERGBOS_2_VID)
|
||||
channel_index = n16;
|
||||
break;
|
||||
case NOLLIE28_12_PID:
|
||||
channels_num = NOLLIE28_12_CHANNELS_NUM;
|
||||
|
|
@ -152,9 +154,9 @@ void RGBController_Nollie::SetupZones()
|
|||
void RGBController_Nollie::ResizeZone(int zone, int new_size)
|
||||
{
|
||||
/*-----------------------------------------------------*\
|
||||
| Set whether MOS is enabled or not |
|
||||
| Set whether MOS is enabled or not |
|
||||
\*-----------------------------------------------------*/
|
||||
if(controller->GetUSBPID() == NOLLIE32_PID)
|
||||
if(controller->GetUSBVID() == NOLLIE32_VID && NOLLIE32_PID == controller->GetUSBPID())
|
||||
{
|
||||
if(zone == NOLLIE32_MOS_TRIGGER_CH && new_size > NOLLIE32_MOS_TRIGGER_LED)
|
||||
{
|
||||
|
|
@ -165,8 +167,11 @@ 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)
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Nollie1 needs to report the number of LEDs |
|
||||
\*-----------------------------------------------------*/
|
||||
if(controller->GetUSBVID() == NOLLIE1_VID && controller->GetUSBPID() == NOLLIE1_PID)
|
||||
{
|
||||
controller->InitChLEDs(&new_size,NOLLIE1_CHANNELS_NUM);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,4 +38,5 @@ private:
|
|||
|
||||
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};
|
||||
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};
|
||||
int n16[16] = {3, 2, 1, 0, 8, 9, 10, 11, 4, 5, 6, 7, 15, 14, 13, 12};
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue