mirror of
https://github.com/CalcProgrammer1/OpenRGB.git
synced 2026-01-18 20:17:51 -05:00
109 lines
4.8 KiB
C++
109 lines
4.8 KiB
C++
/*---------------------------------------------------------*\
|
|
| FnaticStreakController.h |
|
|
| |
|
|
| Driver for Fnatic Streak and miniStreak keyboards |
|
|
| |
|
|
| Based on leddy project by Hanna Czenczek |
|
|
| |
|
|
| This file is part of the OpenRGB project |
|
|
| SPDX-License-Identifier: GPL-2.0-or-later |
|
|
\*---------------------------------------------------------*/
|
|
|
|
#pragma once
|
|
|
|
#include <string>
|
|
#include <hidapi.h>
|
|
#include "RGBController.h"
|
|
|
|
/*-----------------------------------------------------*\
|
|
| Fnatic Streak keyboard layout variants |
|
|
\*-----------------------------------------------------*/
|
|
#define FNATIC_STREAK_VARIANT_ISO 0x00
|
|
#define FNATIC_STREAK_VARIANT_ANSI 0x01
|
|
|
|
/*-----------------------------------------------------*\
|
|
| Fnatic Streak effect command bytes |
|
|
\*-----------------------------------------------------*/
|
|
#define FNATIC_STREAK_CMD_PULSE 0x06
|
|
#define FNATIC_STREAK_CMD_WAVE 0x07
|
|
#define FNATIC_STREAK_CMD_REACTIVE 0x09
|
|
#define FNATIC_STREAK_CMD_REACTIVE_RIPPLE 0x0A
|
|
#define FNATIC_STREAK_CMD_RAIN 0x0B
|
|
#define FNATIC_STREAK_CMD_GRADIENT 0x0C
|
|
#define FNATIC_STREAK_CMD_FADE 0x0D
|
|
|
|
/*-----------------------------------------------------*\
|
|
| Fnatic Streak color modes |
|
|
\*-----------------------------------------------------*/
|
|
#define FNATIC_STREAK_COLOR_MODE_SINGLE 0x00
|
|
#define FNATIC_STREAK_COLOR_MODE_RAINBOW 0x01
|
|
#define FNATIC_STREAK_COLOR_MODE_RANDOM 0x02
|
|
#define FNATIC_STREAK_COLOR_MODE_GRADIENT 0x03
|
|
|
|
/*-----------------------------------------------------*\
|
|
| Fnatic Streak directions |
|
|
\*-----------------------------------------------------*/
|
|
#define FNATIC_STREAK_DIRECTION_RIGHT 0x01
|
|
#define FNATIC_STREAK_DIRECTION_LEFT 0x02
|
|
#define FNATIC_STREAK_DIRECTION_DOWN 0x03
|
|
#define FNATIC_STREAK_DIRECTION_UP 0x04
|
|
|
|
enum FnaticStreakType
|
|
{
|
|
FNATIC_STREAK_TYPE_FULL,
|
|
FNATIC_STREAK_TYPE_MINI
|
|
};
|
|
|
|
class FnaticStreakController
|
|
{
|
|
public:
|
|
FnaticStreakController(hid_device* dev_handle, hid_device_info* dev_info, std::string dev_name, FnaticStreakType kb_type);
|
|
~FnaticStreakController();
|
|
|
|
std::string GetDeviceLocation();
|
|
std::string GetNameString();
|
|
std::string GetSerialString();
|
|
std::string GetFirmwareVersion();
|
|
FnaticStreakType GetKeyboardType();
|
|
unsigned int GetLEDCount();
|
|
|
|
void SetProfile(unsigned char profile);
|
|
void SetLEDsDirect(std::vector<led> leds, std::vector<RGBColor> colors, unsigned int brightness);
|
|
void SendRGBToDevice();
|
|
|
|
/*-----------------------------------------------------*\
|
|
| Hardware effect methods |
|
|
\*-----------------------------------------------------*/
|
|
void SetPulse(unsigned char color_mode, unsigned char r, unsigned char g, unsigned char b, unsigned char speed);
|
|
void SetWave(unsigned char color_mode, unsigned char r, unsigned char g, unsigned char b, unsigned char speed, unsigned char direction);
|
|
void SetReactive(unsigned char color_mode, unsigned char r, unsigned char g, unsigned char b, unsigned char speed, bool keyup);
|
|
void SetReactiveRipple(unsigned char color_mode, unsigned char r, unsigned char g, unsigned char b, unsigned char speed, bool keyup);
|
|
void SetRain(unsigned char color_mode, unsigned char r, unsigned char g, unsigned char b, unsigned char speed, unsigned char direction);
|
|
void SetGradient(unsigned char colors[][3], unsigned char positions[], unsigned int count);
|
|
void SetFade(unsigned char color_mode, unsigned char colors[][3], unsigned char positions[], unsigned int count, unsigned char speed);
|
|
|
|
void SoftwareEffectStart();
|
|
void SoftwareEffectEnd();
|
|
void SendKeepalive();
|
|
|
|
private:
|
|
void SendRequest(const unsigned char* prefix, size_t prefix_len, const unsigned char* raw_data, size_t data_len);
|
|
void RefreshProfile();
|
|
|
|
hid_device* dev;
|
|
std::string location;
|
|
std::string firmware_version;
|
|
std::string name;
|
|
FnaticStreakType keyboard_type;
|
|
unsigned char profile;
|
|
bool software_effect_mode;
|
|
|
|
/*-----------------------------------------------------*\
|
|
| Buffer for LED colors |
|
|
| Full: 124 LEDs * 3 (RGB) = 372 bytes |
|
|
| Mini: 106 LEDs * 3 (RGB) = 318 bytes |
|
|
| Using max size to support both |
|
|
\*-----------------------------------------------------*/
|
|
unsigned char color_buf[372];
|
|
};
|