1# -*- python-mode -*-
2# -*- coding: UTF-8 -*-
3
4## Copyright (C) 2012-2013  Daniel Pavel
5##
6## This program is free software; you can redistribute it and/or modify
7## it under the terms of the GNU General Public License as published by
8## the Free Software Foundation; either version 2 of the License, or
9## (at your option) any later version.
10##
11## This program is distributed in the hope that it will be useful,
12## but WITHOUT ANY WARRANTY; without even the implied warranty of
13## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14## GNU General Public License for more details.
15##
16## You should have received a copy of the GNU General Public License along
17## with this program; if not, write to the Free Software Foundation, Inc.,
18## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
20# Reprogrammable keys information
21
22from __future__ import absolute_import, division, print_function, unicode_literals
23
24
25from .common import NamedInts as _NamedInts
26
27# <controls.xml awk -F\" '/<Control /{sub(/^LD_FINFO_(CTRLID_)?/, "", $2);printf("\t%s=0x%04X,\n", $2, $4)}' | sort -t= -k2
28CONTROL = _NamedInts(
29	Volume_Up=0x0001,
30	Volume_Down=0x0002,
31	Mute=0x0003,
32	Play__Pause=0x0004,
33	Next=0x0005,
34	Previous=0x0006,
35	Stop=0x0007,
36	Application_Switcher=0x0008,
37	BURN=0x0009,
38	Calculator=0x000A,
39	CALENDAR=0x000B,
40	CLOSE=0x000C,
41	EJECT=0x000D,
42	Mail=0x000E,
43	HELP_AS_HID=0x000F,
44	HELP_AS_F1=0x0010,
45	LAUNCH_WORD_PROC=0x0011,
46	LAUNCH_SPREADSHEET=0x0012,
47	LAUNCH_PRESENTATION=0x0013,
48	UNDO_AS_CTRL_Z=0x0014,
49	UNDO_AS_HID=0x0015,
50	REDO_AS_CTRL_Y=0x0016,
51	REDO_AS_HID=0x0017,
52	PRINT_AS_CTRL_P=0x0018,
53	PRINT_AS_HID=0x0019,
54	SAVE_AS_CTRL_S=0x001A,
55	SAVE_AS_HID=0x001B,
56	PRESET_A=0x001C,
57	PRESET_B=0x001D,
58	PRESET_C=0x001E,
59	PRESET_D=0x001F,
60	FAVORITES=0x0020,
61	GADGETS=0x0021,
62	MY_HOME=0x0022,
63	GADGETS_AS_WIN_G=0x0023,
64	MAXIMIZE_AS_HID=0x0024,
65	MAXIMIZE_AS_WIN_SHIFT_M=0x0025,
66	MINIMIZE_AS_HID=0x0026,
67	MINIMIZE_AS_WIN_M=0x0027,
68	MEDIA_PLAYER=0x0028,
69	MEDIA_CENTER_LOGI=0x0029,
70	MEDIA_CENTER_MSFT=0x002A, # Should not be used as it is not reprogrammable under Windows
71	CUSTOM_MENU=0x002B,
72	MESSENGER=0x002C,
73	MY_DOCUMENTS=0x002D,
74	MY_MUSIC=0x002E,
75	WEBCAM=0x002F,
76	MY_PICTURES=0x0030,
77	MY_VIDEOS=0x0031,
78	MY_COMPUTER_AS_HID=0x0032,
79	MY_COMPUTER_AS_WIN_E=0x0033,
80	LAUNC_PICTURE_VIEWER=0x0035,
81	ONE_TOUCH_SEARCH=0x0036,
82	PRESET_1=0x0037,
83	PRESET_2=0x0038,
84	PRESET_3=0x0039,
85	PRESET_4=0x003A,
86	RECORD=0x003B,
87	INTERNET_REFRESH=0x003C,
88	ROTATE_RIGHT=0x003D,
89	SEARCH=0x003E,
90	SHUFFLE=0x003F,
91	SLEEP=0x0040,
92	INTERNET_STOP=0x0041,
93	SYNCHRONIZE=0x0042,
94	ZOOM=0x0043,
95	ZOOM_IN_AS_HID=0x0044,
96	ZOOM_IN_AS_CTRL_WHEEL=0x0045,
97	ZOOM_IN_AS_CLTR_PLUS=0x0046,
98	ZOOM_OUT_AS_HID=0x0047,
99	ZOOM_OUT_AS_CTRL_WHEEL=0x0048,
100	ZOOM_OUT_AS_CLTR_MINUS=0x0049,
101	ZOOM_RESET=0x004A,
102	ZOOM_FULL_SCREEN=0x004B,
103	PRINT_SCREEN=0x004C,
104	PAUSE_BREAK=0x004D,
105	SCROLL_LOCK=0x004E,
106	CONTEXTUAL_MENU=0x004F,
107	LEFT_CLICK=0x0050,
108	RIGHT_CLICK=0x0051,
109	MIDDLE_BUTTON=0x0052,
110	BACK_AS_BUTTON_4=0x0053,
111	BACK_AS_HID=0x0054,
112	BACK_AS_ALT_WIN_ARROW=0x0055,
113	FORWARD_AS_BUTTON_5=0x0056,
114	FORWARD_AS_HID=0x0057,
115	FORWARD_AS_ALT_WIN_ARROW=0x0058,
116	BUTTON_6=0x0059,
117	LEFT_SCROLL_AS_BUTTON_7=0x005A,
118	LEFT_SCROLL_AS_AC_PAN=0x005B,
119	RIGHT_SCROLL_AS_BUTTON_8=0x005C,
120	RIGHT_SCROLL_AS_AC_PAN=0x005D,
121	BUTTON_9=0x005E,
122	BUTTON_10=0x005F,
123	BUTTON_11=0x0060,
124	BUTTON_12=0x0061,
125	BUTTON_13=0x0062,
126	BUTTON_14=0x0063,
127	BUTTON_15=0x0064,
128	BUTTON_16=0x0065,
129	BUTTON_17=0x0066,
130	BUTTON_18=0x0067,
131	BUTTON_19=0x0068,
132	BUTTON_20=0x0069,
133	BUTTON_21=0x006A,
134	BUTTON_22=0x006B,
135	BUTTON_23=0x006C,
136	BUTTON_24=0x006D,
137	SHOW_DESKTOP=0x006E,
138	Lock_PC=0x006F,
139	FN_F1=0x0070,
140	FN_F2=0x0071,
141	FN_F3=0x0072,
142	FN_F4=0x0073,
143	FN_F5=0x0074,
144	FN_F6=0x0075,
145	FN_F7=0x0076,
146	FN_F8=0x0077,
147	FN_F9=0x0078,
148	FN_F10=0x0079,
149	FN_F11=0x007A,
150	FN_F12=0x007B,
151	FN_F13=0x007C,
152	FN_F14=0x007D,
153	FN_F15=0x007E,
154	FN_F16=0x007F,
155	FN_F17=0x0080,
156	FN_F18=0x0081,
157	FN_F19=0x0082,
158	IOS_HOME=0x0083,
159	ANDROID_HOME=0x0084,
160	ANDROID_MENU=0x0085,
161	ANDROID_SEARCH=0x0086,
162	ANDROID_BACK=0x0087,
163	HOME_COMBO=0x0088,
164	LOCK_COMBO=0x0089,
165	IOS_VIRTUAL_KEYBOARD=0x008A,
166	IOS_LANGUAGE_SWICH=0x008B,
167	MAC_EXPOSE=0x008C,
168	MAC_DASHBOARD=0x008D,
169	WIN7_SNAP_LEFT=0x008E,
170	WIN7_SNAP_RIGHT=0x008F,
171	WIN7_MINIMIZE_AS_WIN_ARROW=0x0090,
172	WIN7_MAXIMIZE_AS_WIN_ARROW=0x0091,
173	WIN7_STRETCH_UP=0x0092,
174	WIN7_MONITOR_SWITCH_AS_WIN_SHIFT_LEFTARROW=0x0093,
175	WIN7_MONITOR_SWITCH_AS_WIN_SHIFT_RIGHTARROW=0x0094,
176	WIN7_SHOW_PRESENTATION_MODE=0x0095,
177	WIN7_SHOW_MOBILITY_CENTER=0x0096,
178	ANALOG_HSCROLL=0x0097,
179	METRO_APPSWITCH=0x009F,
180	METRO_APPBAR=0x00A0,
181	METRO_CHARMS=0x00A1,
182	CALC_VKEYBOARD=0x00A2,
183	METRO_SEARCH=0x00A3,
184	COMBO_SLEEP=0x00A4,
185	METRO_SHARE=0x00A5,
186	METRO_SETTINGS=0x00A6,
187	METRO_DEVICES=0x00A7,
188	METRO_START_SCREEN=0x00A9,
189	ZOOMIN=0x00AA,
190	ZOOMOUT=0x00AB,
191	BACK_HSCROLL=0x00AC,
192	SHOW_DESKTOP_HPP=0x00AE,
193)
194CONTROL._fallback = lambda x: 'unknown:%04X' % x
195
196# <tasks.xml awk -F\" '/<Task /{gsub(/ /, "_", $6); printf("\t%s=0x%04X,\n", $6, $4)}'
197TASK = _NamedInts(
198	Volume_Up=0x0001,
199	Volume_Down=0x0002,
200	Mute=0x0003,
201	# Multimedia tasks:
202	Play__Pause=0x0004,
203	Next=0x0005,
204	Previous=0x0006,
205	Stop=0x0007,
206
207	Application_Switcher=0x0008,
208	BurnMediaPlayer=0x0009,
209	Calculator=0x000A,
210	Calendar=0x000B,
211	Close_Application=0x000C,
212	Eject=0x000D,
213	Email=0x000E,
214	Help=0x000F,
215	OffDocument=0x0010,
216	OffSpreadsheet=0x0011,
217	OffPowerpnt=0x0012,
218	Undo=0x0013,
219	Redo=0x0014,
220	Print=0x0015,
221	Save=0x0016,
222	SmartKeySet=0x0017,
223	Favorites=0x0018,
224	GadgetsSet=0x0019,
225	HomePage=0x001A,
226	WindowsRestore=0x001B,
227	WindowsMinimize=0x001C,
228	Music=0x001D, # also known as MediaPlayer
229
230	# Both 0x001E and 0x001F are known as MediaCenterSet
231	Media_Center_Logitech=0x001E,
232	Media_Center_Microsoft=0x001F,
233
234	UserMenu=0x0020,
235	Messenger=0x0021,
236	PersonalFolders=0x0022,
237	MyMusic=0x0023,
238	Webcam=0x0024,
239	PicturesFolder=0x0025,
240	MyVideos=0x0026,
241	My_Computer=0x0027,
242	PictureAppSet=0x0028,
243	Search=0x0029, # also known as AdvSmartSearch
244	RecordMediaPlayer=0x002A,
245	BrowserRefresh=0x002B,
246	RotateRight=0x002C,
247	SearchForFiles=0x002D,
248	MM_SHUFFLE=0x002E,
249	Sleep=0x002F, # also known as StandBySet
250	BrowserStop=0x0030,
251	OneTouchSync=0x0031,
252	ZoomSet=0x0032,
253	ZoomBtnInSet2=0x0033,
254	ZoomBtnInSet=0x0034,
255	ZoomBtnOutSet2=0x0035,
256	ZoomBtnOutSet=0x0036,
257	ZoomBtnResetSet=0x0037,
258	LeftClick=0x0038,
259	RightClick=0x0039,
260	MiddleMouseButton=0x003A,
261	Back=0x003B,
262	BackEx=0x003C,
263	BrowserForward=0x003D,
264	BrowserForwardEx=0x003E,
265	HorzScrollLeftSet=0x003F,
266	HorzScrollRightSet=0x0040,
267	QuickSwitch=0x0041,
268	BatteryStatus=0x0042,
269	ShowDesktop=0x0043,
270	WindowsLock=0x0044,
271	FileLauncher=0x0045,
272	FolderLauncher=0x0046,
273	GotoWebAddress=0x0047,
274	GenericMouseButton=0x0048,
275	KeystrokeAssignment=0x0049,
276	LaunchProgram=0x004A,
277	MinMaxWindow=0x004B,
278	VOLUMEMUTE_NoOSD=0x004C,
279	New=0x004D,
280	Copy=0x004E,
281	CruiseDown=0x004F,
282	CruiseUp=0x0050,
283	Cut=0x0051,
284	Do_Nothing=0x0052,
285	PageDown=0x0053,
286	PageUp=0x0054,
287	Paste=0x0055,
288	SearchPicture=0x0056,
289	Reply=0x0057,
290	PhotoGallerySet=0x0058,
291	MM_REWIND=0x0059,
292	MM_FASTFORWARD=0x005A,
293	Send=0x005B,
294	ControlPanel=0x005C,
295	UniversalScroll=0x005D,
296	AutoScroll=0x005E,
297	GenericButton=0x005F,
298	MM_NEXT=0x0060,
299	MM_PREVIOUS=0x0061,
300	Do_Nothing_One=0x0062, # also known as Do_Nothing
301	SnapLeft=0x0063,
302	SnapRight=0x0064,
303	WinMinRestore=0x0065,
304	WinMaxRestore=0x0066,
305	WinStretch=0x0067,
306	SwitchMonitorLeft=0x0068,
307	SwitchMonitorRight=0x0069,
308	ShowPresentation=0x006A,
309	ShowMobilityCenter=0x006B,
310	HorzScrollNoRepeatSet=0x006C,
311	TouchBackForwardHorzScroll=0x0077,
312	MetroAppSwitch=0x0078,
313	MetroAppBar=0x0079,
314	MetroCharms=0x007A,
315	Calculator_VKEY=0x007B, # also known as Calculator
316	MetroSearch=0x007C,
317	MetroStartScreen=0x0080,
318	MetroShare=0x007D,
319	MetroSettings=0x007E,
320	MetroDevices=0x007F,
321	MetroBackLeftHorz=0x0082,
322	MetroForwRightHorz=0x0083,
323	Win8_Back=0x0084, # also known as MetroCharms
324	Win8_Forward=0x0085, # also known as AppSwitchBar
325	Win8Charm_Appswitch_GifAnimation=0x0086,
326	Win8BackHorzLeft=0x008B, # also known as Back
327	Win8ForwardHorzRight=0x008C, # also known as BrowserForward
328	MetroSearch2=0x0087,
329	MetroShare2=0x0088,
330	MetroSettings2=0x008A,
331	MetroDevices2=0x0089,
332	Win8MetroWin7Forward=0x008D, # also known as MetroStartScreen
333	Win8ShowDesktopWin7Back=0x008E, # also known as ShowDesktop
334	MetroApplicationSwitch=0x0090, # also known as MetroStartScreen
335	ShowUI=0x0092,
336)
337TASK._fallback = lambda x: 'unknown:%04X' % x
338# hidpp 4.5 info from https://lekensteyn.nl/files/logitech/x1b04_specialkeysmsebuttons.html
339KEY_FLAG = _NamedInts(
340	virtual=0x80,
341	persistently_divertable=0x40,
342	divertable=0x20,
343	reprogrammable=0x10,
344	FN_sensitive=0x08,
345	nonstandard=0x04,
346	is_FN=0x02,
347	mse=0x01
348)
349