Version 1
Root feature
Overview
The entry point feature which is always at index 0.
This feature allows obtaining information from all other features in the device (enumeration) and helps in determining the host software compatibility.
Functions and Events
[0] getFeature(featId) → featIndex, featType, featVer
Given a desired feature ID, returns its index in the feature table,
the feature type bitfield and the feature version.
Parameters
- featId
-
The ID of the desired feature. The ID 0 is forbidden (root feature ID).
byte \ bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
0 |
featId MSB |
|||||||
1 |
featId LSB |
Returns
- featIndex
-
The index in the feature table used to access the feature. The value 0 indicates the feature was not found. Non-root features will start with index value 1.
- featType
-
Bitfield describing the feature properties.
- featVer
-
The zero based feature version number.
byte \ bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
0 |
featIndex |
|||||||
1 |
obsl |
hidden |
eng |
--- |
--- |
--- |
--- |
--- |
2 |
featVer |
- obsolete
-
An obsolete feature is a feature that has been replaced by a newer one, but is advertised in order for older SWs to still be able to support the feature (in case the old SW does not know yet the newer one).
- hidden
-
A SW hidden feature is a feature that should not be known/managed/used by end user configuration SW. The host should ignore this type of features.
- engineering
-
A hidden feature that has been disabled for user software. Used for internal testing and manufacturing.
NoteOn feature versions: Features have a version number that starts at zero. When a feature version is incremented it means that new functionality has been added to it. Even if new functionality is present, newer versions of a feature will always be backward compatible with all previous versions of a feature. Features that need to break backward compatibility will use a different feature number so de-facto creating a new feature.
[0] getProtocolVersion(0, 0, pingData) → protocolNum, targetSw, pingData
Returns protocol number, target SW, and echoes ping data.
There are two types of host software, multidevice host software, that supports many devices in a single application, and single device host software, an application that is dedicated to a single device.
Multidevice host software should test each device’s protocol number to validate if it is willing to support it. When a device’s protocol number is 4, the targetSw fields further qualifies its protocol number. This allows the hinting to the host SW to be even more specific.
Host software’s decision of supporting of a specific hidpp device is a combination of the host SW knowledge of the device features, (a host may decide to drop a device if it does not know some of its features) or it can be a pure strategic decision based on host software user’s experience. Example: a gaming specific host SW may not want to support office oriented products, so an office-oriented device released after the gaming host SW has been released can set its protocol number to 4 and its target SW to office oriented so as to avoid the gaming host SW to try to pick up the device.
Once a SW determines it is not supporting a particular device it should
perform no further communication with the device. It should not send
additional ping requests or enumerate features. This will minimize the use of
transaction collision recovery when multiple SW are talking to a device.
If a software does not need to support future devices based on feature set and
wants to instead hard-code a table of PIDs of devices it will support, then it
can ignore the targetSW field and a targetSW ID does not need to be allocated
for that software.
Parameters
- zero
-
Padding so the ping, request and response are in the same location.
- zero
-
Padding so the ping, request and response are in the same location.
- pingData
-
Data to be echoed back. For recovery from timeouts or collisions.
byte \ bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
0 |
zero |
|||||||
1 |
zero |
|||||||
2 |
pingData |
Returns
- protocolNum
-
The protocol number is a field that hints the host software if it should support the device.
protocolNum == 2
: Intended target SW is Logitech SetPoint
protocolNum == 3
: Intended OEM SW described in targetSw field
protocolNum == 4
: Intended target SW described in targetSw field - targetSw
-
When (
protocolNum >= 3
) this field further hints at which software should support the device. Otherwise the value is zero. - pingData
-
Echoes the ping paramenter as sent in the request. For recovery from timeouts or collisions.
NoteOn ping data usage: Ping data can be used by the SW to re-synchronize the command/response data flow in case of collision or timeout. Whenever an incorrect response is received or a command times out, the SW should send a ping request and wait for a response with the correct ping data. The ping data sent should be a random nonzero value which does not match the previous ping request that was sent. If the SW is sending a protocol request instead of a ping request the ping value should be 0
byte \ bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
0 |
protocolNum |
|||||||
1 |
targetSw |
|||||||
2 |
featVer |
targetSw byte | bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 |
---|---|---|---|---|---|---|---|---|
meaning for protocol 4 |
0x0030 |
--- |
--- |
--- |
--- |
LPM |
LGS |
LDM |
- LDM
-
Logitech Device Manager is the intended target SW if this bit is set.
- LGS
-
Logitech Gaming Software is the intended target SW if this bit is set.
- LPM
-
Logitech Preference Manager is the intended target SW if this bit is set.
- 0x0030
-
Target software is specified by feature 0x0030 if this bit is set.
[ev0] noOperation
This event may be sent by a device as needed to prevent the device from
entering low power mode. If sent following a HID response this may allow
the device to respond quicker to the next HID
command. This event is a
no-op and contains no data. + Host SW can safely ignore this event.
ChangeLog
-
Version 1: Adds the feature version return value (
featVer
) to feature function [0]getFeature(featId) -
Version 0: Initial version