Skip to content

Commit decf146

Browse files
oxhakCalcProgrammer1
authored andcommitted
Add Fnatic Streak65 support
1 parent db4f49b commit decf146

3 files changed

Lines changed: 43 additions & 11 deletions

File tree

Controllers/FnaticStreakController/FnaticStreakController.cpp

Lines changed: 35 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ FnaticStreakController::~FnaticStreakController()
4444

4545
std::string FnaticStreakController::GetDeviceLocation()
4646
{
47-
return("HID " + location);
47+
return("HID: " + location);
4848
}
4949

5050
std::string FnaticStreakController::GetNameString()
@@ -230,16 +230,41 @@ void FnaticStreakController::SetLEDsDirect(std::vector<led> leds, std::vector<RG
230230

231231
void FnaticStreakController::SendRGBToDevice()
232232
{
233-
unsigned int total_leds = GetLEDCount();
234-
unsigned int data_size = total_leds * 3;
233+
if(keyboard_type == FNATIC_STREAK_TYPE_65)
234+
{
235+
unsigned char data[64];
236+
memset(data, 0x00, sizeof(data));
235237

236-
/*-----------------------------------------------------*\
237-
| For direct/software control, use command 0x0f |
238-
| This bypasses the profile and allows immediate update |
239-
| The 0x03 subcommand indicates per-key color data |
240-
\*-----------------------------------------------------*/
241-
unsigned char prefix[] = { 0x0f, 0x03 };
242-
SendRequest(prefix, sizeof(prefix), color_buf, data_size);
238+
data[0] = 0x0F;
239+
data[1] = 0x15;
240+
241+
data[7] = 0x0F;
242+
data[8] = 0x03;
243+
244+
for(unsigned int i = 9; i < 25; i++)
245+
{
246+
data[i] = 0xFF;
247+
}
248+
249+
data[25] = color_buf[0];
250+
data[26] = color_buf[1];
251+
data[27] = color_buf[2];
252+
253+
hid_write(dev, data, sizeof(data));
254+
}
255+
else
256+
{
257+
unsigned int total_leds = GetLEDCount();
258+
unsigned int data_size = total_leds * 3;
259+
260+
/*-----------------------------------------------------*\
261+
| For direct/software control, use command 0x0f |
262+
| This bypasses the profile and allows immediate update |
263+
| The 0x03 subcommand indicates per-key color data |
264+
\*-----------------------------------------------------*/
265+
unsigned char prefix[] = { 0x0f, 0x03 };
266+
SendRequest(prefix, sizeof(prefix), color_buf, data_size);
267+
}
243268
}
244269

245270
void FnaticStreakController::SetPulse(unsigned char color_mode, unsigned char r, unsigned char g, unsigned char b, unsigned char speed)

Controllers/FnaticStreakController/FnaticStreakController.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,8 @@
5151
enum FnaticStreakType
5252
{
5353
FNATIC_STREAK_TYPE_FULL,
54-
FNATIC_STREAK_TYPE_MINI
54+
FNATIC_STREAK_TYPE_MINI,
55+
FNATIC_STREAK_TYPE_65
5556
};
5657

5758
class FnaticStreakController

Controllers/FnaticStreakController/FnaticStreakControllerDetect.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626

2727
#define FNATIC_STREAK_PID 0x0101
2828
#define FNATIC_MINISTREAK_PID 0x0102
29+
#define FNATIC_STREAK65_PID 0x0105
2930

3031
void DetectFnaticStreakKeyboard(hid_device_info* info, const std::string& name)
3132
{
@@ -39,6 +40,10 @@ void DetectFnaticStreakKeyboard(hid_device_info* info, const std::string& name)
3940
{
4041
kb_type = FNATIC_STREAK_TYPE_MINI;
4142
}
43+
else if(info->product_id == FNATIC_STREAK65_PID)
44+
{
45+
kb_type = FNATIC_STREAK_TYPE_65;
46+
}
4247
else
4348
{
4449
kb_type = FNATIC_STREAK_TYPE_FULL;
@@ -53,3 +58,4 @@ void DetectFnaticStreakKeyboard(hid_device_info* info, const std::string& name)
5358

5459
REGISTER_HID_DETECTOR_I("Fnatic Streak", DetectFnaticStreakKeyboard, FNATIC_VID, FNATIC_STREAK_PID, 1);
5560
REGISTER_HID_DETECTOR_I("Fnatic miniStreak", DetectFnaticStreakKeyboard, FNATIC_VID, FNATIC_MINISTREAK_PID, 1);
61+
REGISTER_HID_DETECTOR_I("Fnatic Streak65", DetectFnaticStreakKeyboard, FNATIC_VID, FNATIC_STREAK65_PID, 1);

0 commit comments

Comments
 (0)