1
+ #include " RGBController_MSIMysticLight64.h"
2
+
3
+ /* *------------------------------------------------------------------*\
4
+ @name MSI GL66 Mystic Light Keyboard (64 Byte)
5
+ @category Keyboard
6
+ @type USB
7
+ @save :robot:
8
+ @effects :white_check_mark:
9
+ @detectors DetectMSIMysticLightControllers
10
+ @comment
11
+ \*-------------------------------------------------------------------*/
12
+
13
+ RGBController_MSIMysticLight64::RGBController_MSIMysticLight64
14
+ (
15
+ MSIMysticLight64Controller *controller_ptr
16
+ )
17
+ {
18
+ controller = controller_ptr;
19
+ name = controller->GetDeviceName ();
20
+ vendor = " MSI" ;
21
+ type = DEVICE_TYPE_KEYBOARD;
22
+ description = " MSI Mystic Light Device (64-byte)" ;
23
+ version = controller->GetFWVersion ();
24
+ location = controller->GetDeviceLocation ();
25
+ serial = controller->GetSerial ();
26
+ SetupZones ();
27
+ }
28
+
29
+ RGBController_MSIMysticLight64::~RGBController_MSIMysticLight64 ()
30
+ {
31
+ delete controller;
32
+ }
33
+
34
+ void RGBController_MSIMysticLight64::ResizeZone
35
+ (
36
+ int /* zone*/ ,
37
+ int /* new_size*/
38
+ )
39
+ {
40
+ }
41
+
42
+ void RGBController_MSIMysticLight64::SetupZones ()
43
+ {
44
+ zone msi_zone;
45
+ msi_zone.name = " MSI Zone" ;
46
+ msi_zone.type = ZONE_TYPE_SINGLE;
47
+ msi_zone.leds_min = 1 ;
48
+ msi_zone.leds_max = 1 ;
49
+ msi_zone.leds_count = 1 ;
50
+ msi_zone.matrix_map = NULL ;
51
+ zones.push_back (msi_zone);
52
+
53
+ led msi_led;
54
+ msi_led.name = " MSI LED" ;
55
+ leds.push_back (msi_led);
56
+ SetupModes ();
57
+ SetupColors ();
58
+ }
59
+
60
+ void RGBController_MSIMysticLight64::DeviceUpdateMode ()
61
+ {
62
+ DeviceUpdateLEDs ();
63
+ }
64
+
65
+ void RGBController_MSIMysticLight64::DeviceUpdateLEDs ()
66
+ {
67
+ mode &Mode = modes[active_mode];
68
+ MSI_64_MODE msi_mode = (MSI_64_MODE)Mode.value ;
69
+ MSI_SPEED speed = (MSI_SPEED)Mode.speed ;
70
+ MSI_BRIGHTNESS brightness = (MSI_BRIGHTNESS)(Mode.brightness );
71
+ Color led_colors[MSI_64_MAX_COLORS] = {};
72
+ unsigned int num_colors = 0 ;
73
+ if (Mode.flags & MODE_FLAG_HAS_MODE_SPECIFIC_COLOR)
74
+ {
75
+ num_colors = Mode.colors .size ();
76
+ for (unsigned int i = 0 ; i < num_colors; i++)
77
+ {
78
+ led_colors[i].R = RGBGetRValue (Mode.colors [i]);
79
+ led_colors[i].G = RGBGetGValue (Mode.colors [i]);
80
+ led_colors[i].B = RGBGetBValue (Mode.colors [i]);
81
+ }
82
+ }
83
+ controller->SetMode (msi_mode, speed, brightness, num_colors, led_colors);
84
+ }
85
+
86
+ void RGBController_MSIMysticLight64::UpdateZoneLEDs (int /* zone*/ )
87
+ {
88
+ DeviceUpdateLEDs ();
89
+ }
90
+
91
+ void RGBController_MSIMysticLight64::UpdateSingleLED (int /* led*/ )
92
+ {
93
+ DeviceUpdateLEDs ();
94
+ }
95
+
96
+ void RGBController_MSIMysticLight64::SetupModes ()
97
+ {
98
+ unsigned int TRANSITION=MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR;
99
+ SetupMode (" Off" , MSI_64_MODE::MSI_64_OFF, 0 );
100
+ SetupMode (" Static" , MSI_64_MODE::MSI_64_STEADY, MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR);
101
+ SetupMode (" Breathing" , MSI_64_MODE::MSI_64_BREATHING, TRANSITION);
102
+ SetupMode (" Flashing" , MSI_64_MODE::MSI_64_PULSE, TRANSITION);
103
+ SetupMode (" Double Flashing" , MSI_64_MODE::MSI_64_DOUBLE_PULSE, TRANSITION);
104
+ SetupMode (" Spectrum Cycle" , MSI_64_MODE::MSI_64_CYCLE, TRANSITION);
105
+ SetupMode (" Smooth Spectrum Cycle" , MSI_64_MODE::MSI_64_SMOOTH_CYCLE, TRANSITION);
106
+ }
107
+ void RGBController_MSIMysticLight64::SetupMode
108
+ (
109
+ const char *name,
110
+ MSI_64_MODE mod,
111
+ unsigned int flags
112
+ )
113
+ {
114
+ mode Mode;
115
+ Mode.name = name;
116
+ Mode.value = mod;
117
+ Mode.flags = flags;
118
+ if (flags & MODE_FLAG_HAS_BRIGHTNESS)
119
+ {
120
+ Mode.brightness_min = MSI_BRIGHTNESS_LEVEL_10;
121
+ Mode.brightness_max = MSI_BRIGHTNESS_LEVEL_100;
122
+ Mode.brightness = MSI_BRIGHTNESS_LEVEL_100;
123
+ }
124
+ if (flags & MODE_FLAG_HAS_SPEED)
125
+ {
126
+ Mode.speed_min = MSI_SPEED_LOW;
127
+ Mode.speed_max = MSI_SPEED_HIGH;
128
+ Mode.speed = MSI_SPEED_LOW;
129
+ }
130
+ if (flags & MODE_FLAG_HAS_MODE_SPECIFIC_COLOR)
131
+ {
132
+ Mode.color_mode = MODE_COLORS_MODE_SPECIFIC;
133
+ Mode.colors_min = 1 ;
134
+ Mode.colors_max = 1 ;
135
+ if (flags & MODE_FLAG_HAS_SPEED)
136
+ {
137
+ Mode.colors_max = MSI_64_MAX_COLORS;
138
+ }
139
+ /* -------------------------------------------------*\
140
+ | Set up colors for rainbow cycle |
141
+ \*-------------------------------------------------*/
142
+ Mode.colors .push_back (0x000000FF );
143
+ Mode.colors .push_back (0x000050FF );
144
+ Mode.colors .push_back (0x0000FFFF );
145
+ Mode.colors .push_back (0x0000FF00 );
146
+ Mode.colors .push_back (0x00FF0000 );
147
+ Mode.colors .push_back (0x00FF0096 );
148
+ Mode.colors .push_back (0x00FF00FF );
149
+ }
150
+ modes.push_back (Mode);
151
+ }
0 commit comments