diff --git a/docs/features.md b/docs/features.md new file mode 100644 index 00000000..300f74c8 --- /dev/null +++ b/docs/features.md @@ -0,0 +1,112 @@ +--- +title: List of HID++ 2.0 features +layout: page +--- + +# Features status +See functions in hidpp20.py and settings_templates.py + +Feature | ID | Status | Notes +---------------------------------------|----------|:------------------:|------ +`ROOT` | `0x0000` | :heavy_check_mark: | System +`FEATURE_SET` | `0x0001` | :heavy_check_mark: | System +`FEATURE_INFO` | `0x0002` | :heavy_check_mark: | System +`DEVICE_FW_VERSION` | `0x0003` | :heavy_check_mark: | `get_firmware()` +`DEVICE_UNIT_ID` | `0x0004` | :x: | +`DEVICE_NAME` | `0x0005` | :heavy_check_mark: | `get_kind()`, `get_name()` +`DEVICE_GROUPS` | `0x0006` | :x: | +`DEVICE_FRIENDLY_NAME` | `0x0007` | :x: | +`KEEP_ALIVE` | `0x0008` | :x: | +`RESET` | `0x0020` | :x: | aka "Config Change" +`CRYPTO_ID` | `0x0021` | :x: | +`TARGET_SOFTWARE` | `0x0030` | :x: | +`WIRELESS_SIGNAL_STRENGTH` | `0x0080` | :x: | +`DFUCONTROL_LEGACY` | `0x00C0` | :x: | +`DFUCONTROL_UNSIGNED` | `0x00C1` | :x: | +`DFUCONTROL_SIGNED` | `0x00C2` | :x: | +`DFU` | `0x00D0` | :x: | +`BATTERY_STATUS` | `0x1000` | :heavy_check_mark: | `get_battery()` +`BATTERY_VOLTAGE` | `0x1001` | :x: | +`CHARGING_CONTROL` | `0x1010` | :x: | +`LED_CONTROL` | `0x1300` | :x: | +`GENERIC_TEST` | `0x1800` | :x: | +`DEVICE_RESET` | `0x1802` | :x: | +`OOBSTATE` | `0x1805` | :x: | +`CONFIG_DEVICE_PROPS` | `0x1806` | :x: | +`CHANGE_HOST` | `0x1814` | :x: | +`HOSTS_INFO` | `0x1815` | :x: | +`BACKLIGHT` | `0x1981` | :x: | +`BACKLIGHT2` | `0x1982` | :x: | +`BACKLIGHT3` | `0x1983` | :x: | +`PRESENTER_CONTROL` | `0x1A00` | :x: | +`SENSOR_3D` | `0x1A01` | :x: | +`REPROG_CONTROLS` | `0x1B00` | :heavy_plus_sign: | Partially, only listing. `get_keys()` +`REPROG_CONTROLS_V2` | `0x1B01` | :x: | +`REPROG_CONTROLS_V2_2` | `0x1B02` | :x: | +`REPROG_CONTROLS_V3` | `0x1B03` | :x: | +`REPROG_CONTROLS_V4` | `0x1B04` | :heavy_plus_sign: | Partially, only listing. `get_keys()` +`REPORT_HID_USAGE` | `0x1BC0` | :x: | +`PERSISTENT_REMAPPABLE_ACTION` | `0x1C00` | :x: | +`WIRELESS_DEVICE_STATUS` | `0x1D4B` | :x: | +`REMAINING_PAIRING` | `0x1DF0` | :x: | +`FIRMWARE_PROPERTIES` | `0x1F1F` | :x: | +`ADC_MEASUREMENT` | `0x1F20` | :x: | +`LEFT_RIGHT_SWAP` | `0x2001` | :x: | +`SWAP_BUTTON_CANCEL` | `0x2005` | :x: | +`POINTER_AXIS_ORIENTATION` | `0x2006` | :x: | +`VERTICAL_SCROLLING` | `0x2100` | :heavy_check_mark: | `get_vertical_scrolling_info()` +`SMART_SHIFT` | `0x2110` | :heavy_check_mark: | `_feature_smart_shift()` +`HI_RES_SCROLLING` | `0x2120` | :heavy_check_mark: | `get_hi_res_scrolling_info()`, `_feature_hi_res_scroll()` +`HIRES_WHEEL` | `0x2121` | :heavy_check_mark: | `get_hires_wheel()`, `_feature_hires_smooth_invert()`, `_feature_hires_smooth_resolution()` +`LOWRES_WHEEL` | `0x2130` | :heavy_check_mark: | `get_lowres_wheel_status()`, `_feature_lowres_smooth_scroll()` +`THUMB_WHEEL` | `0x2150` | :x: | +`MOUSE_POINTER` | `0x2200` | :heavy_check_mark: | `get_mouse_pointer_info()` +`ADJUSTABLE_DPI` | `0x2201` | :heavy_check_mark: | `_feature_adjustable_dpi()` +`POINTER_SPEED` | `0x2205` | :heavy_check_mark: | `get_pointer_speed_info()`, `_feature_pointer_speed()` +`ANGLE_SNAPPING` | `0x2230` | :x: | +`SURFACE_TUNING` | `0x2240` | :x: | +`HYBRID_TRACKING` | `0x2400` | :x: | +`FN_INVERSION` | `0x40A0` | :heavy_check_mark: | `_feature_fn_swap()` +`NEW_FN_INVERSION` | `0x40A2` | :heavy_check_mark: | `_feature_new_fn_swap()` +`K375S_FN_INVERSION` | `0x40A3` | :heavy_check_mark: | `_feature_k375s_fn_swap()` +`ENCRYPTION` | `0x4100` | :x: | +`LOCK_KEY_STATE` | `0x4220` | :x: | +`SOLAR_DASHBOARD` | `0x4301` | :x: | +`KEYBOARD_LAYOUT` | `0x4520` | :x: | +`KEYBOARD_DISABLE` | `0x4521` | :x: | +`KEYBOARD_DISABLE_BY_USAGE` | `0x4522` | :x: | +`DUALPLATFORM` | `0x4530` | :x: | +`MULTIPLATFORM` | `0x4531` | :x: | +`KEYBOARD_LAYOUT_2` | `0x4540` | :x: | +`CROWN` | `0x4600` | :x: | +`TOUCHPAD_FW_ITEMS` | `0x6010` | :x: | +`TOUCHPAD_SW_ITEMS` | `0x6011` | :x: | +`TOUCHPAD_WIN8_FW_ITEMS` | `0x6012` | :x: | +`TAP_ENABLE` | `0x6020` | :x: | +`TAP_ENABLE_EXTENDED` | `0x6021` | :x: | +`CURSOR_BALLISTIC` | `0x6030` | :x: | +`TOUCHPAD_RESOLUTION` | `0x6040` | :x: | +`TOUCHPAD_RAW_XY` | `0x6100` | :x: | +`TOUCHMOUSE_RAW_POINTS` | `0x6110` | :x: | +`TOUCHMOUSE_6120` | `0x6120` | :x: | +`GESTURE` | `0x6500` | :x: | +`GESTURE_2` | `0x6501` | :x: | +`GKEY` | `0x8010` | :x: | +`MKEYS` | `0x8020` | :x: | +`MR` | `0x8030` | :x: | +`BRIGHTNESS_CONTROL` | `0x8040` | :x: | +`REPORT_RATE` | `0x8060` | :x: | +`COLOR_LED_EFFECTS` | `0x8070` | :x: | +`RGB_EFFECTS` | `0X8071` | :x: | +`PER_KEY_LIGHTING` | `0x8080` | :x: | +`PER_KEY_LIGHTING_V2` | `0x8081` | :x: | +`MODE_STATUS` | `0x8090` | :x: | +`ONBOARD_PROFILES` | `0x8100` | :x: | +`MOUSE_BUTTON_SPY` | `0x8110` | :x: | +`LATENCY_MONITORING` | `0x8111` | :x: | +`GAMING_ATTACHMENTS` | `0x8120` | :x: | +`FORCE_FEEDBACK` | `0x8123` | :x: | +`SIDETONE` | `0x8300` | :x: | +`EQUALIZER` | `0x8310` | :x: | +`HEADSET_OUT` | `0x8320` | :x: | + diff --git a/lib/logitech_receiver/hidpp20.py b/lib/logitech_receiver/hidpp20.py index e1fc9d1f..9019da68 100644 --- a/lib/logitech_receiver/hidpp20.py +++ b/lib/logitech_receiver/hidpp20.py @@ -40,6 +40,7 @@ from . import special_keys # # /,/p}' | sort -t= -k2 +# additional features names taken from https://github.com/cvuchener/hidpp and https://github.com/Logitech/cpg-docs/tree/master/hidpp20 """Possible features available on a Logitech device. A particular device might not support all these features, and may support other @@ -49,38 +50,64 @@ FEATURE = _NamedInts( ROOT=0x0000, FEATURE_SET=0x0001, FEATURE_INFO=0x0002, + # Common DEVICE_FW_VERSION=0x0003, + DEVICE_UNIT_ID=0x0004, DEVICE_NAME=0x0005, DEVICE_GROUPS=0x0006, + DEVICE_FRIENDLY_NAME=0x0007, + KEEP_ALIVE=0x0008, RESET=0x0020, # "Config Change" - DFUCONTROL=0x00C0, - DFUCONTROL_2=0x00C1, + CRYPTO_ID=0x0021, + TARGET_SOFTWARE=0x0030, + WIRELESS_SIGNAL_STRENGTH=0x0080, + DFUCONTROL_LEGACY=0x00C0, + DFUCONTROL_UNSIGNED=0x00C1, + DFUCONTROL_SIGNED=0x00C2, DFU=0x00D0, BATTERY_STATUS=0x1000, BATTERY_VOLTAGE=0x1001, + CHARGING_CONTROL=0x1010, LED_CONTROL=0x1300, + GENERIC_TEST=0x1800, + DEVICE_RESET=0x1802, + OOBSTATE=0x1805, + CONFIG_DEVICE_PROPS=0x1806, CHANGE_HOST=0x1814, + HOSTS_INFO=0x1815, BACKLIGHT=0x1981, BACKLIGHT2=0x1982, + BACKLIGHT3=0x1983, + PRESENTER_CONTROL=0x1A00, + SENSOR_3D=0x1A01, REPROG_CONTROLS=0x1B00, REPROG_CONTROLS_V2=0x1B01, REPROG_CONTROLS_V2_2=0x1B02, # LogiOptions 2.10.73 features.xml REPROG_CONTROLS_V3=0x1B03, REPROG_CONTROLS_V4=0x1B04, + REPORT_HID_USAGE=0x1BC0, + PERSISTENT_REMAPPABLE_ACTION=0x1C00, WIRELESS_DEVICE_STATUS=0x1D4B, + REMAINING_PAIRING=0x1DF0, + FIRMWARE_PROPERTIES=0x1F1F, + ADC_MEASUREMENT=0x1F20, + # Mouse LEFT_RIGHT_SWAP=0x2001, - SWAP_BUTTON=0x2005, + SWAP_BUTTON_CANCEL=0x2005, + POINTER_AXIS_ORIENTATION=0x2006, VERTICAL_SCROLLING=0x2100, SMART_SHIFT=0x2110, HI_RES_SCROLLING=0x2120, HIRES_WHEEL=0x2121, LOWRES_WHEEL=0x2130, + THUMB_WHEEL=0x2150, MOUSE_POINTER=0x2200, ADJUSTABLE_DPI=0x2201, POINTER_SPEED=0x2205, ANGLE_SNAPPING=0x2230, SURFACE_TUNING=0x2240, HYBRID_TRACKING=0x2400, + # Keyboard FN_INVERSION=0x40A0, NEW_FN_INVERSION=0x40A2, K375S_FN_INVERSION=0x40A3, @@ -89,24 +116,43 @@ FEATURE = _NamedInts( SOLAR_DASHBOARD=0x4301, KEYBOARD_LAYOUT=0x4520, KEYBOARD_DISABLE=0x4521, + KEYBOARD_DISABLE_BY_USAGE=0x4522, DUALPLATFORM=0x4530, + MULTIPLATFORM=0x4531, KEYBOARD_LAYOUT_2=0x4540, + CROWN=0x4600, + # Touchpad TOUCHPAD_FW_ITEMS=0x6010, TOUCHPAD_SW_ITEMS=0x6011, TOUCHPAD_WIN8_FW_ITEMS=0x6012, + TAP_ENABLE=0x6020, + TAP_ENABLE_EXTENDED=0x6021, + CURSOR_BALLISTIC=0x6030, + TOUCHPAD_RESOLUTION=0x6040, TOUCHPAD_RAW_XY=0x6100, TOUCHMOUSE_RAW_POINTS=0x6110, TOUCHMOUSE_6120=0x6120, GESTURE=0x6500, GESTURE_2=0x6501, + # Gaming Devices GKEY=0x8010, MKEYS=0x8020, MR=0x8030, + BRIGHTNESS_CONTROL=0x8040, REPORT_RATE=0x8060, - COLOR_LED_EFECTS=0x8070, + COLOR_LED_EFFECTS=0x8070, + RGB_EFFECTS=0X8071, PER_KEY_LIGHTING=0x8080, + PER_KEY_LIGHTING_V2=0x8081, + MODE_STATUS=0x8090, ONBOARD_PROFILES=0x8100, MOUSE_BUTTON_SPY=0x8110, + LATENCY_MONITORING=0x8111, + GAMING_ATTACHMENTS=0x8120, + FORCE_FEEDBACK=0x8123, + SIDETONE=0x8300, + EQUALIZER=0x8310, + HEADSET_OUT=0x8320, ) FEATURE._fallback = lambda x: 'unknown:%04X' % x