526 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			526 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			Python
		
	
	
	
| # -*- python-mode -*-
 | |
| # -*- coding: UTF-8 -*-
 | |
| 
 | |
| ## Copyright (C) 2012-2013  Daniel Pavel
 | |
| ##
 | |
| ## This program is free software; you can redistribute it and/or modify
 | |
| ## it under the terms of the GNU General Public License as published by
 | |
| ## the Free Software Foundation; either version 2 of the License, or
 | |
| ## (at your option) any later version.
 | |
| ##
 | |
| ## This program is distributed in the hope that it will be useful,
 | |
| ## but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
| ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | |
| ## GNU General Public License for more details.
 | |
| ##
 | |
| ## You should have received a copy of the GNU General Public License along
 | |
| ## with this program; if not, write to the Free Software Foundation, Inc.,
 | |
| ## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 | |
| 
 | |
| # Reprogrammable keys information
 | |
| # Mostly from Logitech documentation, but with some edits for better Lunix compatability
 | |
| 
 | |
| from __future__ import absolute_import, division, print_function, unicode_literals
 | |
| 
 | |
| from .common import NamedInts as _NamedInts
 | |
| 
 | |
| # <controls.xml awk -F\" '/<Control /{sub(/^LD_FINFO_(CTRLID_)?/, "", $2);printf("\t%s=0x%04X,\n", $2, $4)}' | sort -t= -k2
 | |
| CONTROL = _NamedInts(
 | |
|     Volume_Up=0x0001,
 | |
|     Volume_Down=0x0002,
 | |
|     Mute=0x0003,
 | |
|     Play__Pause=0x0004,
 | |
|     Next=0x0005,
 | |
|     Previous=0x0006,
 | |
|     Stop=0x0007,
 | |
|     Application_Switcher=0x0008,
 | |
|     BURN=0x0009,
 | |
|     Calculator=0x000A,
 | |
|     CALENDAR=0x000B,
 | |
|     CLOSE=0x000C,
 | |
|     EJECT=0x000D,
 | |
|     Mail=0x000E,
 | |
|     HELP_AS_HID=0x000F,
 | |
|     HELP_AS_F1=0x0010,
 | |
|     LAUNCH_WORD_PROC=0x0011,
 | |
|     LAUNCH_SPREADSHEET=0x0012,
 | |
|     LAUNCH_PRESENTATION=0x0013,
 | |
|     UNDO_AS_CTRL_Z=0x0014,
 | |
|     UNDO_AS_HID=0x0015,
 | |
|     REDO_AS_CTRL_Y=0x0016,
 | |
|     REDO_AS_HID=0x0017,
 | |
|     PRINT_AS_CTRL_P=0x0018,
 | |
|     PRINT_AS_HID=0x0019,
 | |
|     SAVE_AS_CTRL_S=0x001A,
 | |
|     SAVE_AS_HID=0x001B,
 | |
|     PRESET_A=0x001C,
 | |
|     PRESET_B=0x001D,
 | |
|     PRESET_C=0x001E,
 | |
|     PRESET_D=0x001F,
 | |
|     FAVORITES=0x0020,
 | |
|     GADGETS=0x0021,
 | |
|     MY_HOME=0x0022,
 | |
|     GADGETS_AS_WIN_G=0x0023,
 | |
|     MAXIMIZE_AS_HID=0x0024,
 | |
|     MAXIMIZE_AS_WIN_SHIFT_M=0x0025,
 | |
|     MINIMIZE_AS_HID=0x0026,
 | |
|     MINIMIZE_AS_WIN_M=0x0027,
 | |
|     MEDIA_PLAYER=0x0028,
 | |
|     MEDIA_CENTER_LOGI=0x0029,
 | |
|     MEDIA_CENTER_MSFT=0x002A,  # Should not be used as it is not reprogrammable under Windows
 | |
|     CUSTOM_MENU=0x002B,
 | |
|     MESSENGER=0x002C,
 | |
|     MY_DOCUMENTS=0x002D,
 | |
|     MY_MUSIC=0x002E,
 | |
|     WEBCAM=0x002F,
 | |
|     MY_PICTURES=0x0030,
 | |
|     MY_VIDEOS=0x0031,
 | |
|     MY_COMPUTER_AS_HID=0x0032,
 | |
|     MY_COMPUTER_AS_WIN_E=0x0033,
 | |
|     LAUNC_PICTURE_VIEWER=0x0035,
 | |
|     ONE_TOUCH_SEARCH=0x0036,
 | |
|     PRESET_1=0x0037,
 | |
|     PRESET_2=0x0038,
 | |
|     PRESET_3=0x0039,
 | |
|     PRESET_4=0x003A,
 | |
|     RECORD=0x003B,
 | |
|     INTERNET_REFRESH=0x003C,
 | |
|     ROTATE_RIGHT=0x003D,
 | |
|     Search=0x003E,  # SEARCH
 | |
|     SHUFFLE=0x003F,
 | |
|     SLEEP=0x0040,
 | |
|     INTERNET_STOP=0x0041,
 | |
|     SYNCHRONIZE=0x0042,
 | |
|     ZOOM=0x0043,
 | |
|     ZOOM_IN_AS_HID=0x0044,
 | |
|     ZOOM_IN_AS_CTRL_WHEEL=0x0045,
 | |
|     ZOOM_IN_AS_CLTR_PLUS=0x0046,
 | |
|     ZOOM_OUT_AS_HID=0x0047,
 | |
|     ZOOM_OUT_AS_CTRL_WHEEL=0x0048,
 | |
|     ZOOM_OUT_AS_CLTR_MINUS=0x0049,
 | |
|     ZOOM_RESET=0x004A,
 | |
|     ZOOM_FULL_SCREEN=0x004B,
 | |
|     PRINT_SCREEN=0x004C,
 | |
|     PAUSE_BREAK=0x004D,
 | |
|     SCROLL_LOCK=0x004E,
 | |
|     CONTEXTUAL_MENU=0x004F,
 | |
|     Left_Button=0x0050,  # LEFT_CLICK
 | |
|     Right_Button=0x0051,  # RIGHT_CLICK
 | |
|     Middle_Button=0x0052,  # MIDDLE_BUTTON
 | |
|     Back_Button=0x0053,  # from M510v2 was BACK_AS_BUTTON_4
 | |
|     Back=0x0054,  # BACK_AS_HID
 | |
|     BACK_AS_ALT_WIN_ARROW=0x0055,
 | |
|     Forward_Button=0x0056,  # from M510v2 was FORWARD_AS_BUTTON_5
 | |
|     FORWARD_AS_HID=0x0057,
 | |
|     FORWARD_AS_ALT_WIN_ARROW=0x0058,
 | |
|     BUTTON_6=0x0059,
 | |
|     LEFT_SCROLL_AS_BUTTON_7=0x005A,
 | |
|     Left_Tilt=0x005B,  # from M510v2 was LEFT_SCROLL_AS_AC_PAN
 | |
|     RIGHT_SCROLL_AS_BUTTON_8=0x005C,
 | |
|     Right_Tilt=0x005D,  # from M510v2 was RIGHT_SCROLL_AS_AC_PAN
 | |
|     BUTTON_9=0x005E,
 | |
|     BUTTON_10=0x005F,
 | |
|     BUTTON_11=0x0060,
 | |
|     BUTTON_12=0x0061,
 | |
|     BUTTON_13=0x0062,
 | |
|     BUTTON_14=0x0063,
 | |
|     BUTTON_15=0x0064,
 | |
|     BUTTON_16=0x0065,
 | |
|     BUTTON_17=0x0066,
 | |
|     BUTTON_18=0x0067,
 | |
|     BUTTON_19=0x0068,
 | |
|     BUTTON_20=0x0069,
 | |
|     BUTTON_21=0x006A,
 | |
|     BUTTON_22=0x006B,
 | |
|     BUTTON_23=0x006C,
 | |
|     BUTTON_24=0x006D,
 | |
|     Show_Desktop=0x006E,  # Show_Desktop
 | |
|     Lock_PC=0x006F,
 | |
|     FN_F1=0x0070,
 | |
|     FN_F2=0x0071,
 | |
|     FN_F3=0x0072,
 | |
|     FN_F4=0x0073,
 | |
|     FN_F5=0x0074,
 | |
|     FN_F6=0x0075,
 | |
|     FN_F7=0x0076,
 | |
|     FN_F8=0x0077,
 | |
|     FN_F9=0x0078,
 | |
|     FN_F10=0x0079,
 | |
|     FN_F11=0x007A,
 | |
|     FN_F12=0x007B,
 | |
|     FN_F13=0x007C,
 | |
|     FN_F14=0x007D,
 | |
|     FN_F15=0x007E,
 | |
|     FN_F16=0x007F,
 | |
|     FN_F17=0x0080,
 | |
|     FN_F18=0x0081,
 | |
|     FN_F19=0x0082,
 | |
|     IOS_HOME=0x0083,
 | |
|     ANDROID_HOME=0x0084,
 | |
|     ANDROID_MENU=0x0085,
 | |
|     ANDROID_SEARCH=0x0086,
 | |
|     ANDROID_BACK=0x0087,
 | |
|     HOME_COMBO=0x0088,
 | |
|     LOCK_COMBO=0x0089,
 | |
|     IOS_VIRTUAL_KEYBOARD=0x008A,
 | |
|     IOS_LANGUAGE_SWICH=0x008B,
 | |
|     MAC_EXPOSE=0x008C,
 | |
|     MAC_DASHBOARD=0x008D,
 | |
|     WIN7_SNAP_LEFT=0x008E,
 | |
|     WIN7_SNAP_RIGHT=0x008F,
 | |
|     Minimize_Window=0x0090,  # WIN7_MINIMIZE_AS_WIN_ARROW
 | |
|     Maximize_Window=0x0091,  # WIN7_MAXIMIZE_AS_WIN_ARROW
 | |
|     WIN7_STRETCH_UP=0x0092,
 | |
|     WIN7_MONITOR_SWITCH_AS_WIN_SHIFT_LEFTARROW=0x0093,
 | |
|     WIN7_MONITOR_SWITCH_AS_WIN_SHIFT_RIGHTARROW=0x0094,
 | |
|     Switch_Screen=0x0095,  # WIN7_SHOW_PRESENTATION_MODE
 | |
|     WIN7_SHOW_MOBILITY_CENTER=0x0096,
 | |
|     ANALOG_HSCROLL=0x0097,
 | |
|     METRO_APPSWITCH=0x009F,
 | |
|     METRO_APPBAR=0x00A0,
 | |
|     METRO_CHARMS=0x00A1,
 | |
|     CALC_VKEYBOARD=0x00A2,
 | |
|     METRO_SEARCH=0x00A3,
 | |
|     COMBO_SLEEP=0x00A4,
 | |
|     METRO_SHARE=0x00A5,
 | |
|     METRO_SETTINGS=0x00A6,
 | |
|     METRO_DEVICES=0x00A7,
 | |
|     METRO_START_SCREEN=0x00A9,
 | |
|     ZOOMIN=0x00AA,
 | |
|     ZOOMOUT=0x00AB,
 | |
|     BACK_HSCROLL=0x00AC,
 | |
|     SHOW_DESKTOP_HPP=0x00AE,
 | |
|     Fn_Left_Click=0x00B7,  # from K400 Plus
 | |
|     # https://docs.google.com/document/u/0/d/1YvXICgSe8BcBAuMr4Xu_TutvAxaa-RnGfyPFWBWzhkc/export?format=docx
 | |
|     # Extract to csv.  Eliminate extra linefeeds and spaces.
 | |
|     # awk -F, '/0x/{gsub(" \\+ ","_",$2); gsub("/","__",$2); gsub(" -","_Down",$2);
 | |
|     # gsub(" \\+","_Up",$2); gsub("[()\"-]","",$2); gsub(" ","_",$2); printf("\t%s=0x%04X,\n", $2, $1)}' < controls.cvs
 | |
|     Second_Left_Click=0x00B8,  # Second_LClick / on K400 Plus
 | |
|     Fn_Second_Left_Click=0x00B9,  # Fn_Second_LClick
 | |
|     MultiPlatform_App_Switch=0x00BA,
 | |
|     MultiPlatform_Home=0x00BB,
 | |
|     MultiPlatform_Menu=0x00BC,
 | |
|     MultiPlatform_Back=0x00BD,
 | |
|     MultiPlatform_Insert=0x00BE,
 | |
|     Screen_Capture__Print_Screen=0x00BF,  # on Craft Keyboard
 | |
|     Fn_Down=0x00C0,
 | |
|     Fn_Up=0x00C1,
 | |
|     Multiplatform_Lock=0x00C2,
 | |
|     App_Switch_Gesture=0x00C3,  # Thumb_Button on MX Master
 | |
|     Smart_Shift=0x00C4,  # Top_Button on MX Master
 | |
|     Microphone=0x00C5,
 | |
|     Wifi=0x00C6,
 | |
|     Brightness_Down=0x00C7,
 | |
|     Brightness_Up=0x00C8,
 | |
|     Display_out__project_screen_=0x00C9,
 | |
|     View_Open_Apps=0x00CA,
 | |
|     View_all_apps=0x00CB,
 | |
|     Switch_App=0x00CC,
 | |
|     Fn_inversion_change=0x00CD,
 | |
|     MultiPlatform_back=0x00CE,
 | |
|     Multiplatform_forward=0x00CF,
 | |
|     Multiplatform_gesture_button=0x00D0,
 | |
|     Host_Switch_channel_1=0x00D1,
 | |
|     Host_Switch_channel_2=0x00D2,
 | |
|     Host_Switch_channel_3=0x00D3,
 | |
|     Multiplatform_search=0x00D4,
 | |
|     Multiplatform_Home__Mission_Control=0x00D5,
 | |
|     Multiplatform_Menu__Show__Hide_Virtual_Keyboard__Launchpad=0x00D6,
 | |
|     Virtual_Gesture_Button=0x00D7,
 | |
|     Cursor_Button_Long_press=0x00D8,
 | |
|     Next_Button_Shortpress=0x00D9,  # Next_Button
 | |
|     Next_Button_Longpress=0x00DA,
 | |
|     Back_Button_Shortpress=0x00DB,  # Back
 | |
|     Back_Button_Longpress=0x00DC,
 | |
|     Multi_Platform_Language_Switch=0x00DD,
 | |
|     F_Lock=0x00DE,
 | |
|     Switch_Highlight=0x00DF,
 | |
|     Mission_Control__Task_View=0x00E0,  # Switch_Workspaces on Craft Keyboard
 | |
|     Dashboard_Launchpad__Action_Center=0x00E1,  # Application_Launcher on Craft Keyboard
 | |
|     Backlight_Down=0x00E2,
 | |
|     Backlight_Up=0x00E3,
 | |
|     Previous_Fn=0x00E4,  # Reprogrammable_Previous_Track / on Craft Keyboard
 | |
|     Play__Pause_Fn=0x00E5,  # Reprogrammable_Play__Pause / on Craft Keyboard
 | |
|     Next_Fn=0x00E6,  # Reprogrammable_Next_Track / on Craft Keyboard
 | |
|     Mute_Fn=0x00E7,  # Reprogrammable_Mute / on Craft Keyboard
 | |
|     Volume_Down_Fn=0x00E8,  # Reprogrammable_Volume_Down / on Craft Keyboard
 | |
|     Volume_Up_Fn=0x00E9,  # Reprogrammable_Volume_Up / on Craft Keyboard
 | |
|     App_Contextual_Menu__Right_Click=0x00EA,  # Context_Menu on Craft Keyboard
 | |
|     Right_Arrow=0x00EB,
 | |
|     Left_Arrow=0x00EC,
 | |
|     DPI_Change=0x00ED,
 | |
|     New_Tab=0x00EE,
 | |
|     F2=0x00EF,
 | |
|     F3=0x00F0,
 | |
|     F4=0x00F1,
 | |
|     F5=0x00F2,
 | |
|     F6=0x00F3,
 | |
|     F7=0x00F4,
 | |
|     F8=0x00F5,
 | |
|     F1=0x00F6,
 | |
|     Next_Color_Effect=0x00F7,
 | |
|     Increase_Color_Effect_Speed=0x00F8,
 | |
|     Decrease_Color_Effect_Speed=0x00F9,
 | |
|     Load_Lighting_Custom_Profile=0x00FA,
 | |
|     Laser_button_short_press=0x00FB,
 | |
|     Laser_button_long_press=0x00FC,
 | |
|     DPI_Switch=0x00FD,
 | |
|     MultiPlatform_Home__Show_Desktop=0x00FE,
 | |
|     MultiPlatform_App_Switch__Show_Dashboard=0x00FF,
 | |
|     MultiPlatform_App_Switch_2=0x0100,  # MultiPlatform_App_Switch
 | |
|     Fn_Inversion__Hot_Key=0x0101,
 | |
|     LeftAndRightClick=0x0102,
 | |
|     LED_TOGGLE=0x013B,  #
 | |
| )
 | |
| CONTROL._fallback = lambda x: 'unknown:%04X' % x
 | |
| 
 | |
| # <tasks.xml awk -F\" '/<Task /{gsub(/ /, "_", $6); printf("\t%s=0x%04X,\n", $6, $4)}'
 | |
| TASK = _NamedInts(
 | |
|     Volume_Up=0x0001,
 | |
|     Volume_Down=0x0002,
 | |
|     Mute=0x0003,
 | |
|     # Multimedia tasks:
 | |
|     Play__Pause=0x0004,
 | |
|     Next=0x0005,
 | |
|     Previous=0x0006,
 | |
|     Stop=0x0007,
 | |
|     Application_Switcher=0x0008,
 | |
|     BurnMediaPlayer=0x0009,
 | |
|     Calculator=0x000A,
 | |
|     Calendar=0x000B,
 | |
|     Close_Application=0x000C,
 | |
|     Eject=0x000D,
 | |
|     Email=0x000E,
 | |
|     Help=0x000F,
 | |
|     OffDocument=0x0010,
 | |
|     OffSpreadsheet=0x0011,
 | |
|     OffPowerpnt=0x0012,
 | |
|     Undo=0x0013,
 | |
|     Redo=0x0014,
 | |
|     Print=0x0015,
 | |
|     Save=0x0016,
 | |
|     SmartKeySet=0x0017,
 | |
|     Favorites=0x0018,
 | |
|     GadgetsSet=0x0019,
 | |
|     HomePage=0x001A,
 | |
|     WindowsRestore=0x001B,
 | |
|     WindowsMinimize=0x001C,
 | |
|     Music=0x001D,  # also known as MediaPlayer
 | |
| 
 | |
|     # Both 0x001E and 0x001F are known as MediaCenterSet
 | |
|     Media_Center_Logitech=0x001E,
 | |
|     Media_Center_Microsoft=0x001F,
 | |
|     UserMenu=0x0020,
 | |
|     Messenger=0x0021,
 | |
|     PersonalFolders=0x0022,
 | |
|     MyMusic=0x0023,
 | |
|     Webcam=0x0024,
 | |
|     PicturesFolder=0x0025,
 | |
|     MyVideos=0x0026,
 | |
|     My_Computer=0x0027,
 | |
|     PictureAppSet=0x0028,
 | |
|     Search=0x0029,  # also known as AdvSmartSearch
 | |
|     RecordMediaPlayer=0x002A,
 | |
|     BrowserRefresh=0x002B,
 | |
|     RotateRight=0x002C,
 | |
|     Search_Files=0x002D,  # SearchForFiles
 | |
|     MM_SHUFFLE=0x002E,
 | |
|     Sleep=0x002F,  # also known as StandBySet
 | |
|     BrowserStop=0x0030,
 | |
|     OneTouchSync=0x0031,
 | |
|     ZoomSet=0x0032,
 | |
|     ZoomBtnInSet2=0x0033,
 | |
|     ZoomBtnInSet=0x0034,
 | |
|     ZoomBtnOutSet2=0x0035,
 | |
|     ZoomBtnOutSet=0x0036,
 | |
|     ZoomBtnResetSet=0x0037,
 | |
|     Left_Click=0x0038,  # LeftClick
 | |
|     Right_Click=0x0039,  # RightClick
 | |
|     Mouse_Middle_Button=0x003A,  # from M510v2 was MiddleMouseButton
 | |
|     Back=0x003B,
 | |
|     Mouse_Back_Button=0x003C,  # from M510v2 was BackEx
 | |
|     BrowserForward=0x003D,
 | |
|     Mouse_Forward_Button=0x003E,  # from M510v2 was BrowserForwardEx
 | |
|     Mouse_Scroll_Left_Button_=0x003F,  # from M510v2 was HorzScrollLeftSet
 | |
|     Mouse_Scroll_Right_Button=0x0040,  # from M510v2 was HorzScrollRightSet
 | |
|     QuickSwitch=0x0041,
 | |
|     BatteryStatus=0x0042,
 | |
|     Show_Desktop=0x0043,  # ShowDesktop
 | |
|     WindowsLock=0x0044,
 | |
|     FileLauncher=0x0045,
 | |
|     FolderLauncher=0x0046,
 | |
|     GotoWebAddress=0x0047,
 | |
|     GenericMouseButton=0x0048,
 | |
|     KeystrokeAssignment=0x0049,
 | |
|     LaunchProgram=0x004A,
 | |
|     MinMaxWindow=0x004B,
 | |
|     VOLUMEMUTE_NoOSD=0x004C,
 | |
|     New=0x004D,
 | |
|     Copy=0x004E,
 | |
|     CruiseDown=0x004F,
 | |
|     CruiseUp=0x0050,
 | |
|     Cut=0x0051,
 | |
|     Do_Nothing=0x0052,
 | |
|     PageDown=0x0053,
 | |
|     PageUp=0x0054,
 | |
|     Paste=0x0055,
 | |
|     SearchPicture=0x0056,
 | |
|     Reply=0x0057,
 | |
|     PhotoGallerySet=0x0058,
 | |
|     MM_REWIND=0x0059,
 | |
|     MM_FASTFORWARD=0x005A,
 | |
|     Send=0x005B,
 | |
|     ControlPanel=0x005C,
 | |
|     UniversalScroll=0x005D,
 | |
|     AutoScroll=0x005E,
 | |
|     GenericButton=0x005F,
 | |
|     MM_NEXT=0x0060,
 | |
|     MM_PREVIOUS=0x0061,
 | |
|     Do_Nothing_One=0x0062,  # also known as Do_Nothing
 | |
|     SnapLeft=0x0063,
 | |
|     SnapRight=0x0064,
 | |
|     WinMinRestore=0x0065,
 | |
|     WinMaxRestore=0x0066,
 | |
|     WinStretch=0x0067,
 | |
|     SwitchMonitorLeft=0x0068,
 | |
|     SwitchMonitorRight=0x0069,
 | |
|     ShowPresentation=0x006A,
 | |
|     ShowMobilityCenter=0x006B,
 | |
|     HorzScrollNoRepeatSet=0x006C,
 | |
|     TouchBackForwardHorzScroll=0x0077,
 | |
|     MetroAppSwitch=0x0078,
 | |
|     MetroAppBar=0x0079,
 | |
|     MetroCharms=0x007A,
 | |
|     Calculator_VKEY=0x007B,  # also known as Calculator
 | |
|     MetroSearch=0x007C,
 | |
|     MetroStartScreen=0x0080,
 | |
|     MetroShare=0x007D,
 | |
|     MetroSettings=0x007E,
 | |
|     MetroDevices=0x007F,
 | |
|     MetroBackLeftHorz=0x0082,
 | |
|     MetroForwRightHorz=0x0083,
 | |
|     Win8_Back=0x0084,  # also known as MetroCharms
 | |
|     Win8_Forward=0x0085,  # also known as AppSwitchBar
 | |
|     Win8Charm_Appswitch_GifAnimation=0x0086,
 | |
|     Win8BackHorzLeft=0x008B,  # also known as Back
 | |
|     Win8ForwardHorzRight=0x008C,  # also known as BrowserForward
 | |
|     MetroSearch2=0x0087,
 | |
|     MetroShare2=0x0088,
 | |
|     MetroSettings2=0x008A,
 | |
|     MetroDevices2=0x0089,
 | |
|     Win8MetroWin7Forward=0x008D,  # also known as MetroStartScreen
 | |
|     Win8ShowDesktopWin7Back=0x008E,  # also known as ShowDesktop
 | |
|     MetroApplicationSwitch=0x0090,  # also known as MetroStartScreen
 | |
|     ShowUI=0x0092,
 | |
|     # https://docs.google.com/document/d/1Dpx_nWRQAZox_zpZ8SNc9nOkSDE9svjkghOCbzopabc/edit
 | |
|     # Extract to csv.  Eliminate extra linefeeds and spaces. Turn / into __ and space into _
 | |
|     # awk -F, '/0x/{gsub(" \\+ ","_",$2);  gsub("_-","_Down",$2); gsub("_\\+","_Up",$2);
 | |
|     # gsub("[()\"-]","",$2); gsub(" ","_",$2); printf("\t%s=0x%04X,\n", $2, $1)}' < tasks.csv > tasks.py
 | |
|     Switch_Presentation__Switch_Screen=0x0093,  # on K400 Plus
 | |
|     Minimize_Window=0x0094,
 | |
|     Maximize_Window=0x0095,  # on K400 Plus
 | |
|     MultiPlatform_App_Switch=0x0096,
 | |
|     MultiPlatform_Home=0x0097,
 | |
|     MultiPlatform_Menu=0x0098,
 | |
|     MultiPlatform_Back=0x0099,
 | |
|     Switch_Language=0x009A,  # Mac_switch_language
 | |
|     Screen_Capture=0x009B,  # Mac_screen_Capture, on Craft Keyboard
 | |
|     Gesture_Button=0x009C,
 | |
|     Smart_Shift=0x009D,
 | |
|     AppExpose=0x009E,
 | |
|     Smart_Zoom=0x009F,
 | |
|     Lookup=0x00A0,
 | |
|     Microphone_on__off=0x00A1,
 | |
|     Wifi_on__off=0x00A2,
 | |
|     Brightness_Down=0x00A3,
 | |
|     Brightness_Up=0x00A4,
 | |
|     Display_Out=0x00A5,
 | |
|     View_Open_Apps=0x00A6,
 | |
|     View_All_Open_Apps=0x00A7,
 | |
|     AppSwitch=0x00A8,
 | |
|     Gesture_Button_Navigation=0x00A9,  # Mouse_Thumb_Button on MX Master
 | |
|     Fn_inversion=0x00AA,
 | |
|     Multiplatform_Back=0x00AB,
 | |
|     Multiplatform_Forward=0x00AC,
 | |
|     Multiplatform_Gesture_Button=0x00AD,
 | |
|     HostSwitch_Channel_1=0x00AE,
 | |
|     HostSwitch_Channel_2=0x00AF,
 | |
|     HostSwitch_Channel_3=0x00B0,
 | |
|     Multiplatform_Search=0x00B1,
 | |
|     Multiplatform_Home__Mission_Control=0x00B2,
 | |
|     Multiplatform_Menu__Launchpad=0x00B3,
 | |
|     Virtual_Gesture_Button=0x00B4,
 | |
|     Cursor=0x00B5,
 | |
|     Keyboard_Right_Arrow=0x00B6,
 | |
|     SW_Custom_Highlight=0x00B7,
 | |
|     Keyboard_Left_Arrow=0x00B8,
 | |
|     TBD=0x00B9,
 | |
|     Multiplatform_Language_Switch=0x00BA,
 | |
|     SW_Custom_Highlight_2=0x00BB,
 | |
|     Fast_Forward=0x00BC,
 | |
|     Fast_Backward=0x00BD,
 | |
|     Switch_Highlighting=0x00BE,
 | |
|     Mission_Control__Task_View=0x00BF,  # Switch_Workspace on Craft Keyboard
 | |
|     Dashboard_Launchpad__Action_Center=0x00C0,  # Application_Launcher on Craft Keyboard
 | |
|     Backlight_Down=0x00C1,  # Backlight_Down_FW_internal_function
 | |
|     Backlight_Up=0x00C2,  # Backlight_Up_FW_internal_function
 | |
|     Right_Click__App_Contextual_Menu=0x00C3,  # Context_Menu on Craft Keyboard
 | |
|     DPI_Change=0x00C4,
 | |
|     New_Tab=0x00C5,
 | |
|     F2=0x00C6,
 | |
|     F3=0x00C7,
 | |
|     F4=0x00C8,
 | |
|     F5=0x00C9,
 | |
|     F6=0x00CA,
 | |
|     F7=0x00CB,
 | |
|     F8=0x00CC,
 | |
|     F1=0x00CD,
 | |
|     Laser_Button=0x00CE,
 | |
|     Laser_Button_Long_Press=0x00CF,
 | |
|     Start_Presentation=0x00D0,
 | |
|     Blank_Screen=0x00D1,
 | |
|     DPI_Switch=0x00D2,  # AdjustDPI on MX Vertical
 | |
|     Home__Show_Desktop=0x00D3,
 | |
|     App_Switch__Dashboard=0x00D4,
 | |
|     App_Switch=0x00D5,
 | |
|     Fn_Inversion=0x00D6,
 | |
|     LeftAndRightClick=0x00D7,
 | |
|     LedToggle=0x00DD,  #
 | |
| )
 | |
| TASK._fallback = lambda x: 'unknown:%04X' % x
 | |
| # Capabilities and desired software handling for a control
 | |
| # Ref: https://drive.google.com/file/d/10imcbmoxTJ1N510poGdsviEhoFfB_Ua4/view
 | |
| # We treat bytes 4 and 8 of `getCidInfo` as a single bitfield
 | |
| KEY_FLAG = _NamedInts(
 | |
|     analytics_key_events=0x400,
 | |
|     force_raw_XY=0x200,
 | |
|     raw_XY=0x100,
 | |
|     virtual=0x80,
 | |
|     persistently_divertable=0x40,
 | |
|     divertable=0x20,
 | |
|     reprogrammable=0x10,
 | |
|     FN_sensitive=0x08,
 | |
|     nonstandard=0x04,
 | |
|     is_FN=0x02,
 | |
|     mse=0x01
 | |
| )
 | |
| # Flags describing the reporting method of a control
 | |
| # We treat bytes 2 and 5 of `get/setCidReporting` as a single bitfield
 | |
| MAPPING_FLAG = _NamedInts(
 | |
|     analytics_key_events_reporting=0x100,
 | |
|     force_raw_XY_diverted=0x40,
 | |
|     raw_XY_diverted=0x10,
 | |
|     persistently_diverted=0x04,
 | |
|     diverted=0x01
 | |
| )
 | |
| CID_GROUP_BIT = _NamedInts(g8=0x80, g7=0x40, g6=0x20, g5=0x10, g4=0x08, g3=0x04, g2=0x02, g1=0x01)
 | |
| CID_GROUP = _NamedInts(g8=8, g7=7, g6=6, g5=5, g4=4, g3=3, g2=2, g1=1)
 | |
| DISABLE = _NamedInts(
 | |
|     Caps_Lock=0x01,
 | |
|     Num_Lock=0x02,
 | |
|     Scroll_Lock=0x04,
 | |
|     Insert=0x08,
 | |
|     Win=0x10,  # aka Super
 | |
| )
 | |
| DISABLE._fallback = lambda x: 'unknown:%02X' % x
 |