mirror of
				https://github.com/MatMoul/g810-led.git
				synced 2025-10-31 09:32:44 +00:00 
			
		
		
		
	Refactored key address handling
Rewrote a bunch of stuff to get rid of the big switch and if blocks. Removed all explicit allocation. Using std::vector instead of arrays to transport keys around.
This commit is contained in:
		
							parent
							
								
									caed630b14
								
							
						
					
					
						commit
						0c3c8c6371
					
				
							
								
								
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,3 @@ | |||||||
|  | g810-led.* | ||||||
|  | bin/* | ||||||
|  | . | ||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @ -1,57 +1,352 @@ | |||||||
| #ifndef DEF_KEYBOARD | #ifndef DEF_KEYBOARD | ||||||
| #define DEF_KEYBOARD | #define DEF_KEYBOARD | ||||||
| 
 | 
 | ||||||
| #include <iostream> |  | ||||||
| #include <libusb.h> | #include <libusb.h> | ||||||
| 
 | 
 | ||||||
| class Keyboard { | #include <cstdint> | ||||||
|  | #include <iostream> | ||||||
|  | #include <map> | ||||||
|  | #include <vector> | ||||||
|  | #include <functional> | ||||||
| 
 | 
 | ||||||
| 	public: |  | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|  | class Keyboard | ||||||
|  | { | ||||||
|  | public: | ||||||
|  |     // clang-format off
 | ||||||
|     enum class KeyboardProtocol { generic, g910 }; |     enum class KeyboardProtocol { generic, g910 }; | ||||||
| 		enum class PowerOnEffect { rainbow, color }; |     enum class PowerOnEffect : uint8_t { rainbow = 0x01, color }; | ||||||
| 		enum class KeyAddressGroup { logo, indicators, multimedia, keys, gkeys }; | 
 | ||||||
| 		enum class Key { // 127 items
 |     enum class FxType { BreathingKeys, BreathingLogo, ColorKeys, ColorLogo, ColorCycleKeys, ColorCycleLogo, CWaveKeys, HWaveKeys, VWaveKeys }; | ||||||
| 			logo, logo2, | 
 | ||||||
| 			caps, num, scroll, game, backlight, |     enum class KeyAddressGroup : uint8_t | ||||||
| 			mute, play, stop, prev, next, |     { | ||||||
| 			f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, |         logo        = 0x00, | ||||||
| 			shift_left, ctrl_left, win_left, alt_left, alt_right, win_right, ctrl_right, shift_right, menu, |         indicators, multimedia, gkeys, keys | ||||||
| 			arrow_top, arrow_left, arrow_bottom, arrow_right, |  | ||||||
| 			num_1, num_2, num_3, num_4, num_5, num_6, num_7, num_8, num_9, num_0, num_dot, num_enter, num_plus, num_minus, num_asterisk, num_slash, num_lock, |  | ||||||
| 			esc, scroll_lock, |  | ||||||
| 			insert, del, home, end, page_up, page_down, print_screen, pause_break, |  | ||||||
| 			n1, n2, n3, n4, n5, n6, n7, n8, n9, n0, |  | ||||||
| 			tab, caps_lock, space, backspace, enter, |  | ||||||
| 			a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, |  | ||||||
| 			tilde, minus, equal,  |  | ||||||
| 			open_bracket, close_bracket, backslash,  |  | ||||||
| 			semicolon, quote, dollar, |  | ||||||
| 			intl_backslash, comma, period, slash, |  | ||||||
| 			g1, g2, g3, g4, g5, g6, g7, g8, g9 |  | ||||||
|     }; |     }; | ||||||
| 		enum class KeyGroup { logo, indicators, multimedia, fkeys, modifiers, arrows, numeric, functions, keys, gkeys}; | 
 | ||||||
|  |     enum class Key : uint16_t | ||||||
|  |     { | ||||||
|  |         // logo
 | ||||||
|  |         logo        = static_cast<uint8_t>(KeyAddressGroup::logo) << 8 | 0x01, | ||||||
|  |         logo2, | ||||||
|  | 
 | ||||||
|  |         // indicators
 | ||||||
|  |         backlight   = static_cast<uint8_t>(KeyAddressGroup::indicators) << 8| 0x01, | ||||||
|  |         game, caps, scroll, num, | ||||||
|  | 
 | ||||||
|  |         // multimedia
 | ||||||
|  |         next        = static_cast<uint8_t>(KeyAddressGroup::multimedia) << 8 | 0xb5, | ||||||
|  |         prev, stop, | ||||||
|  |         play        = static_cast<uint8_t>(KeyAddressGroup::multimedia) << 8 | 0xcd, | ||||||
|  |         mute        = static_cast<uint8_t>(KeyAddressGroup::multimedia) << 8 | 0xe2, | ||||||
|  | 
 | ||||||
|  |         // gkeys
 | ||||||
|  |         g1          = static_cast<uint8_t>(KeyAddressGroup::gkeys) << 8 | 0x01, | ||||||
|  |         g2, g3, g4, g5, g6, g7, g8, g9, | ||||||
|  | 
 | ||||||
|  |         // keys
 | ||||||
|  |         a           = static_cast<uint8_t>(KeyAddressGroup::keys) << 8 | 0x04, | ||||||
|  |         b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, | ||||||
|  |         n1, n2, n3, n4, n5, n6, n7, n8, n9, n0, | ||||||
|  |         enter, esc, backspace, tab, space, minus, equal, open_bracket, close_bracket, | ||||||
|  |         backslash, dollar, semicolon, quote, tilde, comma, period, slash, caps_lock, | ||||||
|  |         f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, | ||||||
|  |         print_screen, scroll_lock, pause_break, insert, home, page_up, del, end, page_down, | ||||||
|  |         arrow_right, arrow_left, arrow_bottom, arrow_top, num_lock, num_slash, num_asterisk, | ||||||
|  |         num_minus, num_plus, num_enter, | ||||||
|  |         num_1, num_2, num_3, num_4, num_5, num_6, num_7, num_8, num_9, num_0, | ||||||
|  |         num_dot, intl_backslash, menu, | ||||||
|  | 
 | ||||||
|  |         ctrl_left   = static_cast<uint8_t>(KeyAddressGroup::keys) << 8 | 0xe0, | ||||||
|  |         shift_left, alt_left, win_left, | ||||||
|  |         ctrl_right, shift_right, alt_right, win_right | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |     using KeyNameMap_t = std::map<std::string, Key>; | ||||||
|  |     const KeyNameMap_t keyNameMap = { | ||||||
|  |         { "logo", Key::logo }, | ||||||
|  |         { "logo2", Key::logo2 }, | ||||||
|  |         { "back_light", Key::backlight }, | ||||||
|  |         { "backlight", Key::backlight }, | ||||||
|  |         { "light", Key::backlight }, | ||||||
|  |         { "game_mode", Key::game }, | ||||||
|  |         { "gamemode", Key::game }, | ||||||
|  |         { "game", Key::game }, | ||||||
|  |         { "caps_indicator", Key::caps }, | ||||||
|  |         { "capsindicator", Key::caps }, | ||||||
|  |         { "caps", Key::caps }, | ||||||
|  |         { "scroll_indicator", Key::scroll }, | ||||||
|  |         { "scrollindicator", Key::scroll }, | ||||||
|  |         { "scroll", Key::scroll }, | ||||||
|  |         { "num_indicator", Key::num }, | ||||||
|  |         { "numindicator", Key::num }, | ||||||
|  |         { "num", Key::num }, | ||||||
|  |         { "next", Key::next }, | ||||||
|  |         { "prev", Key::prev }, | ||||||
|  |         { "previous", Key::prev }, | ||||||
|  |         { "stop", Key::stop }, | ||||||
|  |         { "play_pause", Key::play }, | ||||||
|  |         { "playpause", Key::play }, | ||||||
|  |         { "play", Key::play }, | ||||||
|  |         { "mute", Key::mute }, | ||||||
|  |         { "a", Key::a }, | ||||||
|  |         { "b", Key::b }, | ||||||
|  |         { "c", Key::c }, | ||||||
|  |         { "d", Key::d }, | ||||||
|  |         { "e", Key::e }, | ||||||
|  |         { "f", Key::f }, | ||||||
|  |         { "g", Key::g }, | ||||||
|  |         { "h", Key::h }, | ||||||
|  |         { "i", Key::i }, | ||||||
|  |         { "j", Key::j }, | ||||||
|  |         { "k", Key::k }, | ||||||
|  |         { "l", Key::l }, | ||||||
|  |         { "m", Key::m }, | ||||||
|  |         { "n", Key::n }, | ||||||
|  |         { "o", Key::o }, | ||||||
|  |         { "p", Key::p }, | ||||||
|  |         { "q", Key::q }, | ||||||
|  |         { "r", Key::r }, | ||||||
|  |         { "s", Key::s }, | ||||||
|  |         { "t", Key::t }, | ||||||
|  |         { "u", Key::u }, | ||||||
|  |         { "v", Key::v }, | ||||||
|  |         { "w", Key::w }, | ||||||
|  |         { "x", Key::x }, | ||||||
|  |         { "z", Key::z }, | ||||||
|  |         { "y", Key::y }, | ||||||
|  |         { "1", Key::n1 }, | ||||||
|  |         { "one", Key::n1 }, | ||||||
|  |         { "2", Key::n2 }, | ||||||
|  |         { "two", Key::n2 }, | ||||||
|  |         { "3", Key::n3 }, | ||||||
|  |         { "three", Key::n3 }, | ||||||
|  |         { "4", Key::n4 }, | ||||||
|  |         { "four", Key::n4 }, | ||||||
|  |         { "5", Key::n5 }, | ||||||
|  |         { "five", Key::n5 }, | ||||||
|  |         { "6", Key::n6 }, | ||||||
|  |         { "six", Key::n6 }, | ||||||
|  |         { "7", Key::n7 }, | ||||||
|  |         { "seven", Key::n7 }, | ||||||
|  |         { "8", Key::n8 }, | ||||||
|  |         { "eight", Key::n8 }, | ||||||
|  |         { "9", Key::n9 }, | ||||||
|  |         { "nine", Key::n9 }, | ||||||
|  |         { "0", Key::n0 }, | ||||||
|  |         { "zero", Key::n0 }, | ||||||
|  |         { "enter", Key::enter }, | ||||||
|  |         { "esc", Key::esc }, | ||||||
|  |         { "escape", Key::esc }, | ||||||
|  |         { "back", Key::backspace }, | ||||||
|  |         { "backspace", Key::backspace }, | ||||||
|  |         { "tab", Key::tab }, | ||||||
|  |         { "space", Key::space }, | ||||||
|  |         { "tilde", Key::tilde }, | ||||||
|  |         { "~", Key::tilde }, | ||||||
|  |         { "minus", Key::minus }, | ||||||
|  |         { "-", Key::minus }, | ||||||
|  |         { "equal", Key::equal }, | ||||||
|  |         { "=", Key::equal }, | ||||||
|  |         { "open_bracket", Key::open_bracket }, | ||||||
|  |         { "[", Key::open_bracket }, | ||||||
|  |         { "close_bracket", Key::close_bracket }, | ||||||
|  |         { "]", Key::close_bracket }, | ||||||
|  |         { "backslash", Key::backslash }, | ||||||
|  |         { "\\", Key::backslash }, | ||||||
|  |         { "semicolon", Key::semicolon }, | ||||||
|  |         { ";", Key::semicolon }, | ||||||
|  |         { "quote", Key::quote }, | ||||||
|  |         { "\"", Key::quote }, | ||||||
|  |         { "dollar", Key::dollar }, | ||||||
|  |         { "$", Key::dollar }, | ||||||
|  |         { "comma", Key::comma }, | ||||||
|  |         { ",", Key::comma }, | ||||||
|  |         { "period", Key::period }, | ||||||
|  |         { ".", Key::period }, | ||||||
|  |         { "slash", Key::slash }, | ||||||
|  |         { "/", Key::slash }, | ||||||
|  |         { "caps_lock", Key::caps_lock }, | ||||||
|  |         { "capslock", Key::caps_lock }, | ||||||
|  |         { "f1", Key::f1 }, | ||||||
|  |         { "f2", Key::f2 }, | ||||||
|  |         { "f3", Key::f3 }, | ||||||
|  |         { "f4", Key::f4 }, | ||||||
|  |         { "f5", Key::f5 }, | ||||||
|  |         { "f6", Key::f6 }, | ||||||
|  |         { "f7", Key::f7 }, | ||||||
|  |         { "f8", Key::f8 }, | ||||||
|  |         { "f9", Key::f9 }, | ||||||
|  |         { "f10", Key::f10 }, | ||||||
|  |         { "f11", Key::f11 }, | ||||||
|  |         { "f12", Key::f12 }, | ||||||
|  |         { "print_screen", Key::print_screen }, | ||||||
|  |         { "printscreen", Key::print_screen }, | ||||||
|  |         { "printscr", Key::print_screen }, | ||||||
|  |         { "print", Key::print_screen }, | ||||||
|  |         { "scroll_lock", Key::scroll_lock }, | ||||||
|  |         { "scrolllock", Key::scroll_lock }, | ||||||
|  |         { "pause_break", Key::pause_break }, | ||||||
|  |         { "pausebreak", Key::pause_break }, | ||||||
|  |         { "pause", Key::pause_break }, | ||||||
|  |         { "break", Key::pause_break }, | ||||||
|  |         { "insert", Key::insert }, | ||||||
|  |         { "ins", Key::insert }, | ||||||
|  |         { "home", Key::home }, | ||||||
|  |         { "page_up", Key::page_up }, | ||||||
|  |         { "pageup", Key::page_up }, | ||||||
|  |         { "delete", Key::del }, | ||||||
|  |         { "del", Key::del }, | ||||||
|  |         { "end", Key::end }, | ||||||
|  |         { "page_down", Key::page_down }, | ||||||
|  |         { "pagedown", Key::page_down }, | ||||||
|  |         { "arrow_right", Key::arrow_right }, | ||||||
|  |         { "arrowright", Key::arrow_right }, | ||||||
|  |         { "right", Key::arrow_right }, | ||||||
|  |         { "arrow_left", Key::arrow_left }, | ||||||
|  |         { "arrowleft", Key::arrow_left }, | ||||||
|  |         { "left", Key::arrow_left }, | ||||||
|  |         { "arrow_bottom", Key::arrow_bottom }, | ||||||
|  |         { "arrowbottom", Key::arrow_bottom }, | ||||||
|  |         { "bottom", Key::arrow_bottom }, | ||||||
|  |         { "arrow_top", Key::arrow_top }, | ||||||
|  |         { "arrowtop", Key::arrow_top }, | ||||||
|  |         { "top", Key::arrow_top }, | ||||||
|  |         { "num_lock", Key::num_lock }, | ||||||
|  |         { "numlock", Key::num_lock }, | ||||||
|  |         { "num/", Key::num_slash }, | ||||||
|  |         { "num_slash", Key::num_slash }, | ||||||
|  |         { "numslash", Key::num_slash }, | ||||||
|  |         { "num*", Key::num_asterisk }, | ||||||
|  |         { "num_asterisk", Key::num_asterisk }, | ||||||
|  |         { "numasterisk", Key::num_asterisk }, | ||||||
|  |         { "num-", Key::num_minus }, | ||||||
|  |         { "num_minus", Key::num_minus }, | ||||||
|  |         { "numminus", Key::num_minus }, | ||||||
|  |         { "num+", Key::num_plus }, | ||||||
|  |         { "num_plus", Key::num_plus }, | ||||||
|  |         { "numplus", Key::num_plus }, | ||||||
|  |         { "numenter", Key::num_enter }, | ||||||
|  |         { "num1", Key::num_1 }, | ||||||
|  |         { "num2", Key::num_2 }, | ||||||
|  |         { "num3", Key::num_3 }, | ||||||
|  |         { "num4", Key::num_4 }, | ||||||
|  |         { "num5", Key::num_5 }, | ||||||
|  |         { "num6", Key::num_6 }, | ||||||
|  |         { "num7", Key::num_7 }, | ||||||
|  |         { "num8", Key::num_8 }, | ||||||
|  |         { "num9", Key::num_9 }, | ||||||
|  |         { "num0", Key::num_0 }, | ||||||
|  |         { "num.", Key::num_dot }, | ||||||
|  |         { "num_period", Key::num_dot }, | ||||||
|  |         { "numperiod", Key::num_dot }, | ||||||
|  |         { "intl_backslash", Key::intl_backslash }, | ||||||
|  |         { "<", Key::intl_backslash }, | ||||||
|  |         { "menu", Key::menu }, | ||||||
|  |         { "ctrl_left", Key::ctrl_left }, | ||||||
|  |         { "ctrlleft", Key::ctrl_left }, | ||||||
|  |         { "ctrll", Key::ctrl_left }, | ||||||
|  |         { "shift_left", Key::shift_left }, | ||||||
|  |         { "shiftleft", Key::shift_left }, | ||||||
|  |         { "shiftl", Key::shift_left }, | ||||||
|  |         { "alt_left", Key::alt_left }, | ||||||
|  |         { "altleft", Key::alt_left }, | ||||||
|  |         { "altl", Key::alt_left }, | ||||||
|  |         { "win_left", Key::win_left }, | ||||||
|  |         { "winleft", Key::win_left }, | ||||||
|  |         { "winl", Key::win_left }, | ||||||
|  |         { "meta_left", Key::win_left }, | ||||||
|  |         { "metaleft", Key::win_left }, | ||||||
|  |         { "metal", Key::win_left }, | ||||||
|  |         { "ctrl_right", Key::ctrl_right }, | ||||||
|  |         { "ctrlright", Key::ctrl_right }, | ||||||
|  |         { "ctrlr", Key::ctrl_right }, | ||||||
|  |         { "shift_right", Key::shift_right }, | ||||||
|  |         { "shiftright", Key::shift_right }, | ||||||
|  |         { "shiftr", Key::shift_right }, | ||||||
|  |         { "alt_right", Key::alt_right }, | ||||||
|  |         { "altright", Key::alt_right }, | ||||||
|  |         { "altr", Key::alt_right }, | ||||||
|  |         { "altgr", Key::alt_right }, | ||||||
|  |         { "win_right", Key::win_right }, | ||||||
|  |         { "winright", Key::win_right }, | ||||||
|  |         { "winr", Key::win_right }, | ||||||
|  |         { "meta_right", Key::win_right }, | ||||||
|  |         { "metaright", Key::win_right }, | ||||||
|  |         { "metar", Key::win_right }, | ||||||
|  |         { "g1", Key::g1 }, | ||||||
|  |         { "g2", Key::g2 }, | ||||||
|  |         { "g3", Key::g3 }, | ||||||
|  |         { "g4", Key::g4 }, | ||||||
|  |         { "g5", Key::g5 }, | ||||||
|  |         { "g6", Key::g6 }, | ||||||
|  |         { "g7", Key::g7 }, | ||||||
|  |         { "g8", Key::g8 }, | ||||||
|  |         { "g9", Key::g9 }, | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     enum class KeyGroup { logo, indicators, multimedia, fkeys, modifiers, arrows, numeric, functions, keys, gkeys }; | ||||||
| 
 | 
 | ||||||
|     struct KeyColors { uint8_t red; uint8_t green; uint8_t blue; }; |     struct KeyColors { uint8_t red; uint8_t green; uint8_t blue; }; | ||||||
| 		struct KeyAddress { KeyAddressGroup addressGroup; uint8_t id; }; |     struct KeyValue { Key key; KeyColors colors; }; | ||||||
| 		struct KeyValue { KeyAddress key; KeyColors colors; }; | 
 | ||||||
|  |     typedef std::vector<unsigned char> byte_buffer_t; | ||||||
|  |     typedef std::vector<KeyValue> KeyValueArray; | ||||||
|  |     typedef std::vector<Key> KeyArray; | ||||||
|  | 
 | ||||||
|  |     // clang-format on
 | ||||||
|  | 
 | ||||||
|  |     const KeyArray keyGroupLogo = { Key::logo, Key::logo2 }; | ||||||
|  |     const KeyArray keyGroupIndicators = { Key::caps, Key::num, Key::scroll, Key::game, Key::backlight }; | ||||||
|  |     const KeyArray keyGroupMultimedia = { Key::next, Key::prev, Key::stop, Key::play, Key::mute }; | ||||||
|  |     const KeyArray keyGroupFKeys = { Key::f1, Key::f2, Key::f3, Key::f4, Key::f5, Key::f6, Key::f7, Key::f8, Key::f9, Key::f10, Key::f11, Key::f12 }; | ||||||
|  |     const KeyArray keyGroupModifiers = { Key::shift_left, Key::ctrl_left, Key::win_left, Key::alt_left, Key::alt_right, Key::win_right, Key::ctrl_right, Key::shift_right, Key::menu }; | ||||||
|  |     const KeyArray keyGroupArrows = { Key::arrow_top, Key::arrow_left, Key::arrow_bottom, Key::arrow_right }; | ||||||
|  |     const KeyArray keyGroupNumeric = { Key::num_1, Key::num_2, Key::num_3, Key::num_4, Key::num_5, Key::num_6, Key::num_7, Key::num_8, Key::num_9, Key::num_0, Key::num_dot, Key::num_enter, Key::num_plus, Key::num_minus, Key::num_asterisk, Key::num_slash, Key::num_lock }; | ||||||
|  |     const KeyArray keyGroupFunctions = { Key::esc, Key::scroll_lock, | ||||||
|  |         Key::insert, Key::del, Key::home, Key::end, Key::page_up, Key::page_down, Key::print_screen, Key::pause_break, | ||||||
|  |         Key::n1, Key::n2, Key::n3, Key::n4, Key::n5, Key::n6, Key::n7, Key::n8, Key::n9, Key::n0, | ||||||
|  |         Key::tab, Key::caps_lock, Key::space, Key::backspace, Key::enter }; | ||||||
|  |     const KeyArray keyGroupKeys = { Key::a, Key::b, Key::c, Key::d, Key::e, Key::f, Key::g, Key::h, Key::i, Key::j, Key::k, Key::l, Key::m, Key::n, Key::o, Key::p, Key::q, Key::r, Key::s, Key::t, Key::u, Key::v, Key::w, Key::x, Key::y, Key::z, | ||||||
|  |         Key::tilde, Key::minus, Key::equal, | ||||||
|  |         Key::open_bracket, Key::close_bracket, Key::backslash, | ||||||
|  |         Key::semicolon, Key::quote, Key::dollar, | ||||||
|  |         Key::intl_backslash, Key::comma, Key::period, Key::slash }; | ||||||
|  |     const KeyArray keyGroupGKeys = { Key::g1, Key::g2, Key::g3, Key::g4, Key::g5, Key::g6, Key::g7, Key::g8, Key::g9 }; | ||||||
|  | 
 | ||||||
|  |     const std::map<KeyGroup, std::reference_wrapper<const KeyArray>> keyGroupArrayMap = | ||||||
|  |     { | ||||||
|  |         {KeyGroup::logo, std::cref(keyGroupLogo)}, | ||||||
|  |         {KeyGroup::indicators, std::cref(keyGroupIndicators)}, | ||||||
|  |         {KeyGroup::multimedia, std::cref(keyGroupMultimedia)}, | ||||||
|  |         {KeyGroup::fkeys, std::cref(keyGroupFKeys)}, | ||||||
|  |         {KeyGroup::modifiers, std::cref(keyGroupModifiers)}, | ||||||
|  |         {KeyGroup::arrows, std::cref(keyGroupArrows)}, | ||||||
|  |         {KeyGroup::numeric, std::cref(keyGroupNumeric)}, | ||||||
|  |         {KeyGroup::functions, std::cref(keyGroupFunctions)}, | ||||||
|  |         {KeyGroup::keys, std::cref(keyGroupKeys)}, | ||||||
|  |         {KeyGroup::gkeys, std::cref(keyGroupGKeys)} | ||||||
|  |     }; | ||||||
| 
 | 
 | ||||||
|     bool isAttached(); |     bool isAttached(); | ||||||
|     bool attach(); |     bool attach(); | ||||||
|     bool detach(); |     bool detach(); | ||||||
|     bool commit(); |     bool commit(); | ||||||
| 		bool getKeyAddress(Key key, KeyAddress &keyAddress); | 
 | ||||||
| 		bool parsePowerOnEffect(std::string effect, PowerOnEffect &powerOnEffect); |     bool parsePowerOnEffect(const std::string& effect, PowerOnEffect& powerOnEffect); | ||||||
| 		bool parseKey(std::string key, KeyAddress &keyAddress); |     bool parseKey(const std::string& key_string, Key& key); | ||||||
| 		bool parseKeyGroup(std::string key, KeyGroup &keyGroup); |     bool parseKeyGroup(const std::string& key, KeyGroup& keyGroup); | ||||||
| 		bool parseColor(std::string color, KeyColors &colors); |     bool parseColor(const std::string& color_text, KeyColors& color); | ||||||
| 		bool parseSpeed(std::string speed, uint8_t &speedValue); |     bool parseSpeed(const std::string& speed, uint8_t& speedValue); | ||||||
|  | 
 | ||||||
|     bool setPowerOnEffect(PowerOnEffect powerOnEffect); |     bool setPowerOnEffect(PowerOnEffect powerOnEffect); | ||||||
|     bool setKey(KeyValue keyValue); |     bool setKey(KeyValue keyValue); | ||||||
| 		bool setKey(Key key, KeyColors colors); |     bool setKeys(const KeyValueArray& keyValues); | ||||||
| 		bool setKeys(KeyValue keyValue[], size_t keyValueCount); |     bool setAllKeys(KeyColors color); | ||||||
| 		bool setAllKeys(KeyColors colors); |     bool setGroupKeys(KeyGroup keyGroup, KeyColors color); | ||||||
| 		bool setGroupKeys(KeyGroup keyGroup, KeyColors colors); |  | ||||||
|     bool setFXColorKeys(KeyColors colors); |     bool setFXColorKeys(KeyColors colors); | ||||||
|     bool setFXColorLogo(KeyColors colors); |     bool setFXColorLogo(KeyColors colors); | ||||||
|     bool setFXBreathingKeys(KeyColors colors, uint8_t speed); |     bool setFXBreathingKeys(KeyColors colors, uint8_t speed); | ||||||
| @ -62,21 +357,20 @@ class Keyboard { | |||||||
|     bool setFXVWaveKeys(uint8_t speed); |     bool setFXVWaveKeys(uint8_t speed); | ||||||
|     bool setFXCWaveKeys(uint8_t speed); |     bool setFXCWaveKeys(uint8_t speed); | ||||||
| 
 | 
 | ||||||
| 		 | private: | ||||||
| 	private: |  | ||||||
| 		 |  | ||||||
|     bool m_isAttached = false; |     bool m_isAttached = false; | ||||||
|     bool m_isKernellDetached = false; |     bool m_isKernellDetached = false; | ||||||
|     KeyboardProtocol kbdProtocol = KeyboardProtocol::generic; |     KeyboardProtocol kbdProtocol = KeyboardProtocol::generic; | ||||||
| 		libusb_device **devs; |     libusb_device** devs; | ||||||
| 		libusb_device_handle *dev_handle; |     libusb_device_handle* dev_handle; | ||||||
| 		libusb_context *ctx = NULL; |     libusb_context* ctx = nullptr; | ||||||
| 
 | 
 | ||||||
| 		bool populateAddressGroupInternal(KeyAddressGroup addressGroup, unsigned char *data); |     byte_buffer_t getKeyGroupAddress(KeyboardProtocol kbdProtocol, KeyAddressGroup addressGroup); | ||||||
| 		bool populateFXAddressInternal(unsigned char *data); |     byte_buffer_t getFxAddress(KeyboardProtocol protocol); | ||||||
| 		bool sendDataInternal(unsigned char *data, uint16_t data_size); |  | ||||||
| 		bool setKeysInternal(KeyAddressGroup addressGroup, KeyValue keyValues[], size_t keyValueCount); |  | ||||||
| 
 | 
 | ||||||
|  |     bool setFx(FxType fxType, uint8_t speed = 0, KeyColors color = {0,0,0} ); | ||||||
|  |     bool sendDataInternal(const byte_buffer_t& data); | ||||||
|  |     bool setKeysInternal(const KeyValueArray& keyValues); | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| #endif | #endif | ||||||
|  | |||||||
							
								
								
									
										16
									
								
								src/main.cpp
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								src/main.cpp
									
									
									
									
									
								
							| @ -179,14 +179,14 @@ int setStartupEffect(string effect) { | |||||||
| 	return 1; | 	return 1; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| int setKey(string key, string color, bool commit) { | int setKey(string key_string, string color, bool commit) { | ||||||
| 	Keyboard lg_kbd; | 	Keyboard lg_kbd; | ||||||
| 	Keyboard::KeyAddress keyAddress; | 	Keyboard::Key key; | ||||||
| 	if (lg_kbd.parseKey(key, keyAddress) == true) { | 	if (lg_kbd.parseKey(key_string, key) == true) { | ||||||
| 		Keyboard::KeyColors colors; | 		Keyboard::KeyColors colors; | ||||||
| 		if (lg_kbd.parseColor(color, colors) == true) { | 		if (lg_kbd.parseColor(color, colors) == true) { | ||||||
| 			Keyboard::KeyValue keyValue; | 			Keyboard::KeyValue keyValue; | ||||||
| 			keyValue.key = keyAddress; | 			keyValue.key = key; | ||||||
| 			keyValue.colors = colors; | 			keyValue.colors = colors; | ||||||
| 			lg_kbd.attach(); | 			lg_kbd.attach(); | ||||||
| 			lg_kbd.setKey(keyValue); | 			lg_kbd.setKey(keyValue); | ||||||
| @ -319,7 +319,7 @@ int parseProfile(istream &is) { | |||||||
| 	 | 	 | ||||||
| 	Keyboard lg_kbd; | 	Keyboard lg_kbd; | ||||||
| 	Keyboard::KeyGroup keyGroup; | 	Keyboard::KeyGroup keyGroup; | ||||||
| 	Keyboard::KeyAddress keyAddress; | 	Keyboard::Key key; | ||||||
| 	Keyboard::KeyValue keyValue; | 	Keyboard::KeyValue keyValue; | ||||||
| 	Keyboard::KeyColors colors; | 	Keyboard::KeyColors colors; | ||||||
| 	uint8_t speedValue; | 	uint8_t speedValue; | ||||||
| @ -362,21 +362,21 @@ int parseProfile(istream &is) { | |||||||
| 		} else if (line.substr(0,1) == "k") { | 		} else if (line.substr(0,1) == "k") { | ||||||
| 			line = line.substr(2); | 			line = line.substr(2); | ||||||
| 			ind = line.find(" "); | 			ind = line.find(" "); | ||||||
| 			if (lg_kbd.parseKey(line.substr(0, ind), keyAddress) == true) { | 			if (lg_kbd.parseKey(line.substr(0, ind), key) == true) { | ||||||
| 				line = line.substr(ind + 1); | 				line = line.substr(ind + 1); | ||||||
| 				if (line.substr(0, 1) == "$") { | 				if (line.substr(0, 1) == "$") { | ||||||
| 					ind = line.find(" "); | 					ind = line.find(" "); | ||||||
| 					line = var[line.substr(1, ind - 1)]; | 					line = var[line.substr(1, ind - 1)]; | ||||||
| 				} | 				} | ||||||
| 				if (lg_kbd.parseColor(line.substr(0, 6), colors) == true) { | 				if (lg_kbd.parseColor(line.substr(0, 6), colors) == true) { | ||||||
| 					keyValue.key = keyAddress; | 					keyValue.key = key; | ||||||
| 					keyValue.colors = colors; | 					keyValue.colors = colors; | ||||||
| 					keys.push_back(keyValue); | 					keys.push_back(keyValue); | ||||||
| 				} else cout<<"Error on line "<<lineCount<<" : "<<line<<"\n"; | 				} else cout<<"Error on line "<<lineCount<<" : "<<line<<"\n"; | ||||||
| 			} else cout<<"Error on line "<<lineCount<<" : "<<line<<"\n"; | 			} else cout<<"Error on line "<<lineCount<<" : "<<line<<"\n"; | ||||||
| 		} else if (line.substr(0,1) == "c") { | 		} else if (line.substr(0,1) == "c") { | ||||||
| 			lg_kbd.commit(); | 			lg_kbd.commit(); | ||||||
| 			lg_kbd.setKeys(&keys[0], keys.size()); | 			lg_kbd.setKeys(keys); | ||||||
| 			keys.clear(); | 			keys.clear(); | ||||||
| 			lg_kbd.commit(); | 			lg_kbd.commit(); | ||||||
| 		} else if (line.substr(0,2) == "fx") { | 		} else if (line.substr(0,2) == "fx") { | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Jens Dagerbo
						Jens Dagerbo