diff --git a/10_lightning_node_pro_led/README.md b/10_lightning_node_pro_led/README.md index 10e6fd1..1ba3d39 100644 --- a/10_lightning_node_pro_led/README.md +++ b/10_lightning_node_pro_led/README.md @@ -18,4 +18,6 @@ If is attached to driver, it appear here. - https://github.com/torvalds/linux/blob/master/drivers/hid/hid-led.c - https://github.com/torvalds/linux/blob/master/drivers/hid/hid-playstation.c +- https://gitlab.com/CalcProgrammer1/OpenRGB/-/blob/master/Controllers/CorsairLightingNodeController/CorsairLightingNodeController.cpp +- https://github.com/benburkhart1/lighting-node-pro - https://github.com/Legion2/CorsairLightingProtocol \ No newline at end of file diff --git a/10_lightning_node_pro_led/lightning_node_pro_led.c b/10_lightning_node_pro_led/lightning_node_pro_led.c index 8be8b5b..cc38eee 100644 --- a/10_lightning_node_pro_led/lightning_node_pro_led.c +++ b/10_lightning_node_pro_led/lightning_node_pro_led.c @@ -11,10 +11,6 @@ #define MSG_SIZE 64 -#define RED_COLOR 0x00 -#define GREEN_COLOR 0x01 -#define BLUE_COLOR 0x02 - static short int number_of_fan = 1; module_param(number_of_fan, short, 0000); MODULE_PARM_DESC(number_of_fan, @@ -24,6 +20,77 @@ enum LNP_LED_TYPE { LNP_LED_LL120, }; +enum { + LNP_PACKET_ID_FIRMWARE = + 0x02, /* Get firmware version */ + LNP_PACKET_ID_DIRECT = 0x32, /* Direct mode LED update packet */ + LNP_PACKET_ID_COMMIT = 0x33, /* Commit changes packet */ + LNP_PACKET_ID_BEGIN = 0x34, /* Begin effect packet */ + LNP_PACKET_ID_EFFECT_CONFIG = + 0x35, /* Effect mode configuration packet */ + LNP_PACKET_ID_TEMPERATURE = + 0x36, /* Update temperature value packet */ + LNP_PACKET_ID_RESET = 0x37, /* Reset channel packet */ + LNP_PACKET_ID_PORT_STATE = + 0x38, /* Set port state packet */ + LNP_PACKET_ID_BRIGHTNESS = + 0x39, /* Set brightness packet */ + LNP_PACKET_ID_LED_COUNT = + 0x3A, /* Set LED count packet */ + LNP_PACKET_ID_PROTOCOL = + 0x3B, /* Set protocol packet */ +}; + +enum { + LNP_DIRECT_CHANNEL_RED = + 0x00, /* Red channel for direct update */ + LNP_DIRECT_CHANNEL_GREEN = + 0x01, /* Green channel for direct update */ + LNP_DIRECT_CHANNEL_BLUE = + 0x02, /* Blue channel for direct update */ +}; + +enum { + LNP_PORT_STATE_HARDWARE = + 0x01, /* Effect hardware control of channel */ + LNP_PORT_STATE_SOFTWARE = + 0x02, /* Direct software control of channel */ +}; + +enum { + LNP_LED_TYPE_LED_STRIP = + 0x0A, /* Corsair LED Strip Type */ + LNP_LED_TYPE_HD_FAN = 0x0C, /* Corsair HD-series Fan Type */ + LNP_LED_TYPE_SP_FAN = 0x01, /* Corsair SP-series Fan Type */ + LNP_LED_TYPE_ML_FAN = 0x02, /* Corsair ML-series Fan Type */ +}; + +enum { + LNP_CHANNEL_1 = 0x00, /* Channel 1 */ + LNP_CHANNEL_2 = 0x01, /* Channel 2 */ + LNP_NUM_CHANNELS = 0x02, /* Number of channels */ +}; + +enum { + LNP_SPEED_FAST = 0x00, /* Fast speed */ + LNP_SPEED_MEDIUM = 0x01, /* Medium speed */ + LNP_SPEED_SLOW = 0x02, /* Slow speed */ +}; + +enum { + LNP_MODE_RAINBOW_WAVE = 0x00, /* Rainbow Wave mode */ + LNP_MODE_COLOR_SHIFT = 0x01, /* Color Shift mode */ + LNP_MODE_COLOR_PULSE = 0x02, /* Color Pulse mode */ + LNP_MODE_COLOR_WAVE = 0x03, /* Color Wave mode */ + LNP_MODE_STATIC = 0x04, /* Static mode */ + LNP_MODE_TEMPERATURE = 0x05, /* Temperature mode */ + LNP_MODE_VISOR = 0x06, /* Visor mode */ + LNP_MODE_MARQUEE = 0x07, /* Marquee mode */ + LNP_MODE_BLINK = 0x08, /* Blink mode */ + LNP_MODE_SEQUENTIAL = 0x09, /* Sequential mode */ + LNP_MODE_RAINBOW = 0x0A, /* Rainbow mode */ +}; + struct lnp_rgb_led { struct led_classdev_mc cdev; int led_index; @@ -93,13 +160,13 @@ static int lnp_send_fans_leds_report(struct lnp_device *led_dev) // For green color the fifth Bytes must be equals to 0x01 // For blue color the fifth Bytes must be equals to 0x02 if (i == 1 || i == 4) { - pktcolor[4] = RED_COLOR; + pktcolor[4] = LNP_DIRECT_CHANNEL_RED; } if (i == 2 || i == 5) { - pktcolor[4] = GREEN_COLOR; + pktcolor[4] = LNP_DIRECT_CHANNEL_GREEN; } if (i == 3 || i == 6) { - pktcolor[4] = BLUE_COLOR; + pktcolor[4] = LNP_DIRECT_CHANNEL_BLUE; } packets[i - 1] = pktcolor; @@ -120,7 +187,7 @@ static int lnp_send_init_report(struct hid_device *hdev) { int ret; - u8 pkt1[MSG_SIZE] = { 0x37 }; + u8 pkt1[MSG_SIZE] = { LNP_PACKET_ID_RESET }; // 0x35 - Init u8 pkt2[MSG_SIZE] = { 0x35, 0x00, 0x00, number_of_fan << 4, 0x00, 0x01, 0x01 };