@@ -17,13 +17,22 @@ const size_t max_key_per_color = 13;
1717const size_t data_size = 16 ;
1818
1919static unsigned int matrix_map[7 ][27 ] =
20- { { 110 , NA, NA, NA, NA, NA, NA, NA, NA, NA, 111 , NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA },
21- { NA, NA, 37 , NA, 54 , 55 , 56 , 57 , NA, 58 , 59 , 60 , 61 , NA, 62 , 63 , 64 , 65 , NA, 66 , 67 , 68 , NA, 106 , 107 , 108 , 109 },
22- { 112 , NA, 49 , 26 , 27 , 28 , 29 , 30 , 31 , 32 , 33 , 34 , 35 , NA, 41 , 42 , 38 , NA, NA, 69 , 70 , 71 , NA, 79 , 80 , 81 , 82 },
23- { 113 , NA, 39 , NA, 16 , 22 , 4 , 17 , NA, 19 , 24 , 20 , 8 , 14 , 15 , 43 , 44 , 45 , NA, 72 , 73 , 74 , NA, 91 , 92 , 93 , 83 },
24- { 114 , NA, 53 , NA, 0 , 18 , 3 , 5 , NA, 6 , 7 , 9 , 10 , 11 , 47 , 48 , 46 , 36 , NA, NA, NA, NA, NA, 88 , 89 , 90 , NA },
25- { 115 , NA, 99 , 96 , 25 , 23 , 2 , 21 , NA, 1 , NA, 13 , 12 , 50 , 51 , 52 , 103 , NA, NA, NA, 78 , NA, NA, 85 , 86 , 87 , 84 },
26- { 116 , NA, 98 , 101 , 100 , NA, NA, NA, NA, 40 , NA, NA, NA, NA, 104 , 105 , 97 , 102 , NA, 76 , 77 , 75 , NA, 94 , NA, 95 , NA } };
20+ { { 93 , NA, NA, NA, NA, NA, NA, NA, NA, NA, 94 , NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA },
21+ { NA, NA, 37 , NA, 54 , 55 , 56 , 57 , NA, 58 , 59 , 60 , 61 , NA, 62 , 63 , 64 , 65 , NA, 66 , 67 , 68 , NA, 89 , 90 , 91 , 92 },
22+ { 112 , NA, 49 , 26 , 27 , 28 , 29 , 30 , 31 , 32 , 33 , 34 , 35 , NA, 41 , 42 , 38 , NA, NA, 69 , 70 , 71 , NA, 95 , 96 , 97 , 98 },
23+ { 113 , NA, 39 , NA, 16 , 22 , 4 , 17 , NA, 19 , 24 , 20 , 8 , 14 , 15 , 43 , 44 , 45 , NA, 72 , 73 , 74 , NA, 107 , 108 , 109 , 99 },
24+ { 114 , NA, 53 , NA, 0 , 18 , 3 , 5 , NA, 6 , 7 , 9 , 10 , 11 , 47 , 48 , 46 , 36 , NA, NA, NA, NA, NA, 104 , 105 , 106 , NA },
25+ { 115 , NA, 82 , 79 , 25 , 23 , 2 , 21 , NA, 1 , NA, 13 , 12 , 50 , 51 , 52 , 86 , NA, NA, NA, 78 , NA, NA, 101 , 102 , 103 , 100 },
26+ { 116 , NA, 81 , 84 , 83 , NA, NA, NA, NA, 40 , NA, NA, NA, NA, 87 , 88 , 80 , 85 , NA, 76 , 77 , 75 , NA, 110 , NA, 111 , NA } };
27+
28+ static unsigned int matrix_map_tkl[7 ][20 ] =
29+ { { 93 , NA, NA, NA, NA, 94 , NA, NA, NA, NA, NA, NA, 89 , 90 , 91 , 92 , NA, NA, NA, NA },
30+ { 37 , NA, 54 , 55 , 56 , 57 , NA, 58 , 59 , 60 , 61 , NA, 62 , 63 , 64 , 65 , NA, 66 , 67 , 68 },
31+ { 49 , 26 , 27 , 28 , 29 , 30 , 31 , 32 , 33 , 34 , 35 , NA, 41 , 42 , 38 , NA, NA, 69 , 70 , 71 },
32+ { 39 , NA, 16 , 22 , 4 , 17 , NA, 19 , 24 , 20 , 8 , 14 , 15 , 43 , 44 , 45 , NA, 72 , 73 , 74 },
33+ { 53 , NA, 0 , 18 , 3 , 5 , NA, 6 , 7 , 9 , 10 , 11 , 47 , 48 , 46 , 36 , NA, NA, NA, NA },
34+ { 82 , 79 , 25 , 23 , 2 , 21 , NA, 1 , NA, 13 , 12 , 50 , 51 , 52 , 86 , NA, NA, NA, 78 , NA },
35+ { 81 , 84 , 83 , NA, NA, NA, NA, 40 , NA, NA, NA, NA, 87 , 88 , 80 , 85 , NA, 76 , 77 , 75 } };
2736
2837static const char * zone_names[] =
2938{
@@ -35,6 +44,9 @@ static zone_type zone_types[] =
3544 ZONE_TYPE_MATRIX,
3645};
3746
47+ static const unsigned int tkl_led_count = 95 ;
48+ static const unsigned int full_led_count = 117 ;
49+
3850static const unsigned int zone_sizes[] =
3951{
4052 117 ,
@@ -129,7 +141,23 @@ static const led_type led_names[] =
129141 { " Key: Left Arrow" , LOGITECH_G915_ZONE_DIRECT_KEYBOARD, 0x50 },
130142 { " Key: Down Arrow" , LOGITECH_G915_ZONE_DIRECT_KEYBOARD, 0x51 },
131143 { " Key: Up Arrow" , LOGITECH_G915_ZONE_DIRECT_KEYBOARD, 0x52 },
132- { " Key: Num Lock" , LOGITECH_G915_ZONE_DIRECT_KEYBOARD, 0x53 },
144+ { " Key: \\ (ISO)" , LOGITECH_G915_ZONE_DIRECT_KEYBOARD, 0x64 },// ISO only
145+ { " Key: Menu" , LOGITECH_G915_ZONE_DIRECT_KEYBOARD, 0x65 },
146+ { " Key: Left Control" , LOGITECH_G915_ZONE_MODE_MODIFIERS, 0xE0 },
147+ { " Key: Left Shift" , LOGITECH_G915_ZONE_MODE_MODIFIERS, 0xE1 },
148+ { " Key: Left Alt" , LOGITECH_G915_ZONE_MODE_MODIFIERS, 0xE2 },
149+ { " Key: Left Windows" , LOGITECH_G915_ZONE_MODE_MODIFIERS, 0xE3 },
150+ { " Key: Right Control" , LOGITECH_G915_ZONE_MODE_MODIFIERS, 0xE4 },
151+ { " Key: Right Shift" , LOGITECH_G915_ZONE_MODE_MODIFIERS, 0xE5 },
152+ { " Key: Right Alt" , LOGITECH_G915_ZONE_MODE_MODIFIERS, 0xE6 },
153+ { " Key: Right Windows" , LOGITECH_G915_ZONE_MODE_MODIFIERS, 0xE7 },
154+ { " Key: Media Previous" , LOGITECH_G915_ZONE_DIRECT_MEDIA, 0x9E },
155+ { " Key: Media Play/Pause" , LOGITECH_G915_ZONE_DIRECT_MEDIA, 0x9B },
156+ { " Key: Media Next" , LOGITECH_G915_ZONE_DIRECT_MEDIA, 0x9D },
157+ { " Key: Media Mute" , LOGITECH_G915_ZONE_DIRECT_MEDIA, 0x9C },
158+ { " Logo" , LOGITECH_G915_ZONE_DIRECT_LOGO, 0x01 },
159+ { " Key: Brightness" , LOGITECH_G915_ZONE_DIRECT_INDICATORS, 0x99 },
160+ { " Key: Num Lock" , LOGITECH_G915_ZONE_DIRECT_KEYBOARD, 0x53 }, // First Non-TKL Key
133161 { " Key: Number Pad /" , LOGITECH_G915_ZONE_DIRECT_KEYBOARD, 0x54 },
134162 { " Key: Number Pad *" , LOGITECH_G915_ZONE_DIRECT_KEYBOARD, 0x55 },
135163 { " Key: Number Pad -" , LOGITECH_G915_ZONE_DIRECT_KEYBOARD, 0x56 },
@@ -146,38 +174,31 @@ static const led_type led_names[] =
146174 { " Key: Number Pad 9" , LOGITECH_G915_ZONE_DIRECT_KEYBOARD, 0x61 },
147175 { " Key: Number Pad 0" , LOGITECH_G915_ZONE_DIRECT_KEYBOARD, 0x62 },
148176 { " Key: Number Pad ." , LOGITECH_G915_ZONE_DIRECT_KEYBOARD, 0x63 },
149- { " Key: \\ (ISO)" , LOGITECH_G915_ZONE_DIRECT_KEYBOARD, 0x64 },// ISO only
150- { " Key: Menu" , LOGITECH_G915_ZONE_DIRECT_KEYBOARD, 0x65 },
151- { " Key: Left Control" , LOGITECH_G915_ZONE_MODE_MODIFIERS, 0xE0 },
152- { " Key: Left Shift" , LOGITECH_G915_ZONE_MODE_MODIFIERS, 0xE1 },
153- { " Key: Left Alt" , LOGITECH_G915_ZONE_MODE_MODIFIERS, 0xE2 },
154- { " Key: Left Windows" , LOGITECH_G915_ZONE_MODE_MODIFIERS, 0xE3 },
155- { " Key: Right Control" , LOGITECH_G915_ZONE_MODE_MODIFIERS, 0xE4 },
156- { " Key: Right Shift" , LOGITECH_G915_ZONE_MODE_MODIFIERS, 0xE5 },
157- { " Key: Right Alt" , LOGITECH_G915_ZONE_MODE_MODIFIERS, 0xE6 },
158- { " Key: Right Windows" , LOGITECH_G915_ZONE_MODE_MODIFIERS, 0xE7 },
159- { " Key: Media Previous" , LOGITECH_G915_ZONE_DIRECT_MEDIA, 0x9E },
160- { " Key: Media Play/Pause" , LOGITECH_G915_ZONE_DIRECT_MEDIA, 0x9B },
161- { " Key: Media Next" , LOGITECH_G915_ZONE_DIRECT_MEDIA, 0x9D },
162- { " Key: Media Mute" , LOGITECH_G915_ZONE_DIRECT_MEDIA, 0x9C },
163- { " Logo" , LOGITECH_G915_ZONE_DIRECT_LOGO, 0x01 },
164- { " Lighting" , LOGITECH_G915_ZONE_DIRECT_INDICATORS, 0x99 },
165177 { " Key: G1" , LOGITECH_G915_ZONE_MODE_GKEYS, 0x01 },
166178 { " Key: G2" , LOGITECH_G915_ZONE_MODE_GKEYS, 0x02 },
167179 { " Key: G3" , LOGITECH_G915_ZONE_MODE_GKEYS, 0x03 },
168180 { " Key: G4" , LOGITECH_G915_ZONE_MODE_GKEYS, 0x04 },
169181 { " Key: G5" , LOGITECH_G915_ZONE_MODE_GKEYS, 0x05 },
170182};
171183
172- RGBController_LogitechG915::RGBController_LogitechG915 (LogitechG915Controller* logitech_ptr)
184+ RGBController_LogitechG915::RGBController_LogitechG915 (LogitechG915Controller* logitech_ptr, bool tkl )
173185{
174- logitech = logitech_ptr ;
186+ is_tkl = tkl ;
175187
176- name = " Logitech G915 Keyboard Device" ;
177- vendor = " Logitech" ;
178- type = DEVICE_TYPE_KEYBOARD;
179- description = " Logitech G915 Keyboard Device" ;
180- serial = logitech->GetSerialString ();
188+ if (is_tkl)
189+ {
190+ name = " Logitech G915TKL Keyboard Device" ;
191+ }
192+ else
193+ {
194+ name = " Logitech G915 Keyboard Device" ;
195+ }
196+
197+ description = name;
198+ logitech = logitech_ptr;
199+ vendor = " Logitech" ;
200+ type = DEVICE_TYPE_KEYBOARD;
201+ serial = logitech->GetSerialString ();
181202
182203 mode Direct;
183204 Direct.name = " Direct" ;
@@ -249,22 +270,32 @@ void RGBController_LogitechG915::SetupZones()
249270 /* ---------------------------------------------------------*\
250271 | Set up zones |
251272 \*---------------------------------------------------------*/
273+
252274 unsigned int total_led_count = 0 ;
253275 for (unsigned int zone_idx = 0 ; zone_idx < 1 ; zone_idx++)
254276 {
255277 zone new_zone;
256278 new_zone.name = zone_names[zone_idx];
257279 new_zone.type = zone_types[zone_idx];
258- new_zone.leds_min = zone_sizes[zone_idx] ;
259- new_zone.leds_max = zone_sizes[zone_idx] ;
260- new_zone.leds_count = zone_sizes[zone_idx] ;
280+ new_zone.leds_count = (is_tkl) ? tkl_led_count : full_led_count ;
281+ new_zone.leds_min = new_zone. leds_count ;
282+ new_zone.leds_max = new_zone. leds_count ;
261283
262284 if (zone_types[zone_idx] == ZONE_TYPE_MATRIX)
263285 {
264286 new_zone.matrix_map = new matrix_map_type;
265- new_zone.matrix_map ->height = 7 ;
266- new_zone.matrix_map ->width = 27 ;
267- new_zone.matrix_map ->map = (unsigned int *)&matrix_map;
287+ if (is_tkl)
288+ {
289+ new_zone.matrix_map ->map = (unsigned int *)&matrix_map_tkl;
290+ new_zone.matrix_map ->height = 7 ;
291+ new_zone.matrix_map ->width = 20 ;
292+ }
293+ else
294+ {
295+ new_zone.matrix_map ->map = (unsigned int *)&matrix_map;
296+ new_zone.matrix_map ->height = 7 ;
297+ new_zone.matrix_map ->width = 27 ;
298+ }
268299 }
269300 else
270301 {
@@ -273,7 +304,7 @@ void RGBController_LogitechG915::SetupZones()
273304
274305 zones.push_back (new_zone);
275306
276- total_led_count += zone_sizes[zone_idx] ;
307+ total_led_count += new_zone. leds_count ;
277308 }
278309
279310 for (unsigned int led_idx = 0 ; led_idx < total_led_count; led_idx++)
0 commit comments