Software
On the ES21M, configuration is possible either by using a web driver or its packaged desktop application. The web driver connects through WebHID and therefore will, at least as of now, only work on Chromium-based browsers such as Chrome, Edge, and Opera (desktop). In terms of functionality and options, there is no difference between the two, aside from the desktop version being fully translated into English. Of note is that the software collects telemetry of all settings, which is displayed as a percentage of users when hovering over each setting. There is no option to opt-out of this data collection.
In the web driver, all options are presented across a single page, whereas the desktop version distributes them across several pages. The first page houses CPI adjustment settings for up to eight color-coded levels, ranging from 50 to 30,000 CPI, in increments of 10 CPI, and for x and y-axis separately. Values can be entered manually, but will not be truncated to native ones. Furthermore, when switching to a different step after modifying a value, it will revert to its previous value. Hence, in order to permanently adjust a step, one needs to double-click it and modify the value that way. Polling rate may be set to 125, 250, 500, or 1000 Hz, with 2000, 4000, and 8000 Hz being exclusive to wireless operation. In wired operation, the mouse needs to be rebooted for changes to take effect. In addition, a setting called "X-Polling" allows setting any value between 50 and 8000 Hz as polling (report) rate, though choosing a value that would result in a non-USB compliant interval will introduce temporal jitter. The second page allows for button remapping to mouse, keyboard, and media functions, along with the ability to define a shift key to access a secondary set of button mappings. The third page allows defining the behavior of the top LED. The fourth page has miscellaneous options. Sensor run mode may be set to Office (restricted to 125 Hz), LP (low power, restricted to 1000 Hz) and HP (high performance). In addition, glass mode may be forced, as by default, the 3950 switches to glass mode automatically based on surface tracking properties. Lift-off distance may be set to low, medium, or high, each setting corresponding to the 0.7, 1, and 2 mm levels of the 3950. Further settings include angle snapping (on/off), ripple control (on/off, controls whether smoothing is applied at higher CPI steps to lessen jitter at the cost of increased motion delay), and MotionSync (on/off, turning which on synchronizes the timing of SPI reads with USB polls at the cost of increased motion delay of up to an entire interval). "Wireless Turbo" may be turned on or off, and if enabled allows changing between three different modes. By selecting "Optimization," the software will perform a connection quality analysis and suggest the most suitable mode based on that. Sleep time may be adjusted between 10 seconds and 30 minutes, defining the idle time required before the mouse enters sleep mode. Sensor angle may be adjusted between -30 and 30 degrees, and debounce time can be set to an integer value between 1 and 10 ms, effectively determining click latency.
All settings changes are saved to the on-board memory, so the software does not need to be running (or even installed) all the time. On my system, the software had a RAM footprint of roughly 45 MB on average when running in the foreground, which doesn't change when minimized to the system tray. Upon exiting the application, all processes are terminated, as they should be.
Battery Life
RAWM cites up to 85 hours of battery life at 1000 Hz and up to 21 hours at 8000 Hz. The software features a percentage-based battery life indicator with single-digit accuracy, which isn't particularly reliable or accurate, but sufficiently so to allow gauging expected battery life. For every three hours of continuous usage at 8000 Hz, the indicator went down by 14%, amounting to an expected battery life of around 20 hours. At 1000 Hz, this would translate to roughly 80 hours, though the exact value would vary depending on sensor run mode (LP or HP). As such, the values given by RAWM appear plausible.
Sleep mode is entered after one minute of inactivity by default, but this can be adjusted within the software.
Using the included USB Type-A to Type-C charging cable, I measured the charging speed during the constant current stage, which sits at 0.208 A. The battery has a capacity of 300 mAh (3.7 V) and utilizes a 3-pin JST connector.