/*-----------------------------------------*\ | ZETBladeOpticalController.h | | | | Definitions and types for ZET Blade | | Optical Keyboard lighting controller | | | | Based on HyperX Alloy Elite2 impl by | | KundaPanda | | | | Moon_darker (Vaker) 23/01/2022 | \*-----------------------------------------*/ #include "RGBController.h" #include #include #pragma once #define ZET_BLADE_OPTICAL_DELAY 12ms #define ZET_BLADE_OPTICAL_HEADER_LEN 9 #define ZET_BLADE_OPTICAL_COLOR_LEN 4 #define ZET_BLADE_OPTICAL_KEY_OFFSET 0x80 #define ZET_BLADE_OPTICAL_SPEED_MIN 0 #define ZET_BLADE_OPTICAL_SPEED_MAX 4 #define ZET_BLADE_OPTICAL_SPEED_DEF 2 #define ZET_BLADE_OPTICAL_BRIGHTNESS_MIN 0 #define ZET_BLADE_OPTICAL_BRIGHTNESS_MAX 4 #define ZET_BLADE_OPTICAL_BRIGHTNESS_DEF 4 #define ZET_BLADE_OPTICAL_MODE_OFF 0x01 #define ZET_BLADE_OPTICAL_MODE_CUSTOM 0x1C #define ZET_BLADE_OPTICAL_MODE_STATIC 0x02 #define ZET_BLADE_OPTICAL_MODE_BREATHING 0x03 #define ZET_BLADE_OPTICAL_MODE_ON_PRESS 0x04 #define ZET_BLADE_OPTICAL_MODE_RAINDROP 0x05 #define ZET_BLADE_OPTICAL_MODE_RIPPLE 0x06 #define ZET_BLADE_OPTICAL_MODE_LASER 0x07 #define ZET_BLADE_OPTICAL_MODE_WAVES 0x08 #define ZET_BLADE_OPTICAL_MODE_RAIN 0x09 #define ZET_BLADE_OPTICAL_MODE_SPECTRUM 0x0A #define ZET_BLADE_OPTICAL_MODE_SURFING_RIGHT 0x0B #define ZET_BLADE_OPTICAL_MODE_SURFING_CENTER 0x0D #define ZET_BLADE_OPTICAL_MODE_SURFING_CROSS 0x0F #define ZET_BLADE_OPTICAL_MODE_ROTATE_MARQUEE 0x0C #define ZET_BLADE_OPTICAL_MODE_TRAFFIC 0x0E #define ZET_BLADE_OPTICAL_MODE_GRADIENT 0x15 class ZETBladeOpticalController { public: ZETBladeOpticalController(hid_device* dev_handle, const char* path); ~ZETBladeOpticalController(); std::string GetDeviceLocation(); std::string GetSerialString(); void SetLEDDirect(const std::vector& colors, unsigned char brightness); void SetEffect(unsigned char mode, unsigned char speed, unsigned char brightness, bool random, unsigned char red1, unsigned char grn1, unsigned char blu1); private: hid_device* dev; std::string location; unsigned int effect_mode; bool custom_mode; void PrepareHeader(unsigned char *packet, unsigned char brightness); void PrepareHeader(unsigned char *packet, unsigned char mode, unsigned char speed, unsigned char brightness, unsigned char color); unsigned char RGBToPalette(unsigned char red, unsigned char grn, unsigned char blu); };